@masterteam/dashboard-builder 0.0.1 → 0.0.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,2 +1,2 @@
1
- /*! tailwindcss v4.1.18 | MIT License | https://tailwindcss.com */
2
- @layer properties{@supports (((-webkit-hyphens:none)) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-translate-x:0;--tw-translate-y:0;--tw-translate-z:0;--tw-rotate-x:initial;--tw-rotate-y:initial;--tw-rotate-z:initial;--tw-skew-x:initial;--tw-skew-y:initial;--tw-space-y-reverse:0;--tw-space-x-reverse:0;--tw-border-style:solid;--tw-gradient-position:initial;--tw-gradient-from:#0000;--tw-gradient-via:#0000;--tw-gradient-to:#0000;--tw-gradient-stops:initial;--tw-gradient-via-stops:initial;--tw-gradient-from-position:0%;--tw-gradient-via-position:50%;--tw-gradient-to-position:100%;--tw-leading:initial;--tw-font-weight:initial;--tw-shadow:0 0 #0000;--tw-shadow-color:initial;--tw-shadow-alpha:100%;--tw-inset-shadow:0 0 #0000;--tw-inset-shadow-color:initial;--tw-inset-shadow-alpha:100%;--tw-ring-color:initial;--tw-ring-shadow:0 0 #0000;--tw-inset-ring-color:initial;--tw-inset-ring-shadow:0 0 #0000;--tw-ring-inset:initial;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-offset-shadow:0 0 #0000;--tw-outline-style:solid;--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;--tw-duration:initial;--tw-scale-x:1;--tw-scale-y:1;--tw-scale-z:1}}}@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-500:oklch(63.7% .237 25.331);--color-red-600:oklch(57.7% .245 27.325);--color-orange-500:oklch(70.5% .213 47.604);--color-amber-50:oklch(98.7% .022 95.277);--color-amber-100:oklch(96.2% .059 95.617);--color-amber-200:oklch(92.4% .12 95.746);--color-amber-600:oklch(66.6% .179 58.318);--color-green-500:oklch(72.3% .219 149.579);--color-green-600:oklch(62.7% .194 149.214);--color-blue-500:oklch(62.3% .214 259.815);--color-gray-200:oklch(92.8% .006 264.531);--color-gray-400:oklch(70.7% .022 261.325);--color-gray-500:oklch(55.1% .027 264.364);--color-gray-600:oklch(44.6% .03 256.802);--color-gray-700:oklch(37.3% .034 259.733);--color-gray-800:oklch(27.8% .033 256.848);--color-black:#000;--color-white:#fff;--spacing:.25rem;--container-md:28rem;--container-2xl:42rem;--container-4xl:56rem;--container-6xl:72rem;--text-xs:.75rem;--text-xs--line-height:calc(1/.75);--text-sm:.875rem;--text-sm--line-height:calc(1.25/.875);--text-base:1rem;--text-base--line-height:calc(1.5/1);--text-lg:1.125rem;--text-lg--line-height:calc(1.75/1.125);--text-xl:1.25rem;--text-xl--line-height:calc(1.75/1.25);--text-2xl:1.5rem;--text-2xl--line-height:calc(2/1.5);--text-3xl:1.875rem;--text-3xl--line-height:calc(2.25/1.875);--text-4xl:2.25rem;--text-4xl--line-height:calc(2.5/2.25);--text-6xl:3.75rem;--text-6xl--line-height:1;--font-weight-medium:500;--font-weight-semibold:600;--font-weight-bold:700;--leading-tight:1.25;--radius-lg:.5rem;--animate-spin:spin 1s linear 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{.pointer-events-none{pointer-events:none}.visible{visibility:visible}.\!absolute{position:absolute!important}.absolute{position:absolute}.fixed{position:fixed}.relative{position:relative}.static{position:static}.sticky{position:sticky}.end-0{inset-inline-end:calc(var(--spacing)*0)}.end-2{inset-inline-end:calc(var(--spacing)*2)}.top-0{top:calc(var(--spacing)*0)}.top-1{top:calc(var(--spacing)*1)}.top-2{top:calc(var(--spacing)*2)}.right-0{right:calc(var(--spacing)*0)}.right-1{right:calc(var(--spacing)*1)}.right-2{right:calc(var(--spacing)*2)}.bottom-0{bottom:calc(var(--spacing)*0)}.bottom-4{bottom:calc(var(--spacing)*4)}.left-0{left:calc(var(--spacing)*0)}.left-1\/2{left:50%}.z-10{z-index:10}.z-20{z-index:20}.z-50{z-index:50}.col-span-1{grid-column:span 1/span 1}.col-span-2{grid-column:span 2/span 2}.col-span-3{grid-column:span 3/span 3}.col-span-4{grid-column:span 4/span 4}.col-span-5{grid-column:span 5/span 5}.col-span-9{grid-column:span 9/span 9}.col-span-10{grid-column:span 10/span 10}.col-span-full{grid-column:1/-1}.container{width:100%}@media (min-width:40rem){.container{max-width:40rem}}@media (min-width:48rem){.container{max-width:48rem}}@media (min-width:64rem){.container{max-width:64rem}}@media (min-width:80rem){.container{max-width:80rem}}@media (min-width:96rem){.container{max-width:96rem}}.m-0{margin:calc(var(--spacing)*0)}.mx-2{margin-inline:calc(var(--spacing)*2)}.mx-auto{margin-inline:auto}.mt-0\.5{margin-top:calc(var(--spacing)*.5)}.mt-1{margin-top:calc(var(--spacing)*1)}.mt-2{margin-top:calc(var(--spacing)*2)}.mt-3{margin-top:calc(var(--spacing)*3)}.mt-4{margin-top:calc(var(--spacing)*4)}.mr-1{margin-right:calc(var(--spacing)*1)}.mr-2{margin-right:calc(var(--spacing)*2)}.mb-0{margin-bottom:calc(var(--spacing)*0)}.mb-1{margin-bottom:calc(var(--spacing)*1)}.mb-2{margin-bottom:calc(var(--spacing)*2)}.mb-3{margin-bottom:calc(var(--spacing)*3)}.mb-4{margin-bottom:calc(var(--spacing)*4)}.ml-2{margin-left:calc(var(--spacing)*2)}.block{display:block}.flex{display:flex}.grid{display:grid}.hidden{display:none}.inline{display:inline}.inline-block{display:inline-block}.inline-flex{display:inline-flex}.table{display:table}.h-2{height:calc(var(--spacing)*2)}.h-2\.5{height:calc(var(--spacing)*2.5)}.h-5{height:calc(var(--spacing)*5)}.h-6{height:calc(var(--spacing)*6)}.h-7{height:calc(var(--spacing)*7)}.h-8{height:calc(var(--spacing)*8)}.h-10{height:calc(var(--spacing)*10)}.h-12{height:calc(var(--spacing)*12)}.h-16{height:calc(var(--spacing)*16)}.h-32{height:calc(var(--spacing)*32)}.h-64{height:calc(var(--spacing)*64)}.h-\[500px\]{height:500px}.h-full{height:100%}.max-h-64{max-height:calc(var(--spacing)*64)}.max-h-\[80vh\]{max-height:80vh}.min-h-0{min-height:calc(var(--spacing)*0)}.min-h-\[200px\]{min-height:200px}.min-h-\[300px\]{min-height:300px}.min-h-\[500px\]{min-height:500px}.min-h-\[600px\]{min-height:600px}.\!w-1\/3{width:33.3333%!important}.\!w-1\/4{width:25%!important}.\!w-2\/5{width:40%!important}.\!w-9\/10{width:90%!important}.\!w-\[35rem\]{width:35rem!important}.w-2{width:calc(var(--spacing)*2)}.w-2\.5{width:calc(var(--spacing)*2.5)}.w-2\/3{width:66.6667%}.w-6{width:calc(var(--spacing)*6)}.w-7{width:calc(var(--spacing)*7)}.w-8{width:calc(var(--spacing)*8)}.w-10{width:calc(var(--spacing)*10)}.w-12{width:calc(var(--spacing)*12)}.w-16{width:calc(var(--spacing)*16)}.w-20{width:calc(var(--spacing)*20)}.w-24{width:calc(var(--spacing)*24)}.w-64{width:calc(var(--spacing)*64)}.w-\[40\%\]{width:40%}.w-\[60\%\]{width:60%}.w-full{width:100%}.w-px{width:1px}.max-w-2xl{max-width:var(--container-2xl)}.max-w-4xl{max-width:var(--container-4xl)}.max-w-6xl{max-width:var(--container-6xl)}.max-w-24{max-width:calc(var(--spacing)*24)}.max-w-32{max-width:calc(var(--spacing)*32)}.max-w-\[95vw\]{max-width:95vw}.max-w-md{max-width:var(--container-md)}.min-w-0{min-width:calc(var(--spacing)*0)}.min-w-\[160px\]{min-width:160px}.min-w-\[350px\]{min-width:350px}.flex-1{flex:1}.flex-shrink{flex-shrink:1}.flex-shrink-0{flex-shrink:0}.flex-grow{flex-grow:1}.border-collapse{border-collapse:collapse}.-translate-x-1\/2{--tw-translate-x:calc(calc(1/2*100%)*-1);translate:var(--tw-translate-x)var(--tw-translate-y)}.transform{transform:var(--tw-rotate-x,)var(--tw-rotate-y,)var(--tw-rotate-z,)var(--tw-skew-x,)var(--tw-skew-y,)}.animate-spin{animation:var(--animate-spin)}.cursor-move{cursor:move}.cursor-pointer{cursor:pointer}.resize{resize:both}.grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}.grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.grid-cols-12{grid-template-columns:repeat(12,minmax(0,1fr))}.flex-col{flex-direction:column}.flex-wrap{flex-wrap:wrap}.items-center{align-items:center}.items-end{align-items:flex-end}.items-start{align-items:flex-start}.justify-around{justify-content:space-around}.justify-between{justify-content:space-between}.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-6{gap:calc(var(--spacing)*6)}:where(.space-y-2>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*2)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*2)*calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-3>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*3)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*3)*calc(1 - var(--tw-space-y-reverse)))}:where(.-space-x-2>:not(:last-child)){--tw-space-x-reverse:0;margin-inline-start:calc(calc(var(--spacing)*-2)*var(--tw-space-x-reverse));margin-inline-end:calc(calc(var(--spacing)*-2)*calc(1 - var(--tw-space-x-reverse)))}.truncate{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.overflow-auto{overflow:auto}.overflow-hidden{overflow:hidden}.overflow-x-auto{overflow-x:auto}.overflow-x-hidden{overflow-x:hidden}.overflow-y-auto{overflow-y:auto}.rounded{border-radius:.25rem}.rounded-full{border-radius:3.40282e38px}.rounded-lg{border-radius:var(--radius-lg)}.rounded-b-lg{border-bottom-right-radius:var(--radius-lg);border-bottom-left-radius:var(--radius-lg)}.border{border-style:var(--tw-border-style);border-width:1px}.border-2{border-style:var(--tw-border-style);border-width:2px}.border-s{border-inline-start-style:var(--tw-border-style);border-inline-start-width:1px}.border-t{border-top-style:var(--tw-border-style);border-top-width:1px}.border-r{border-right-style:var(--tw-border-style);border-right-width:1px}.border-b{border-bottom-style:var(--tw-border-style);border-bottom-width:1px}.border-b-2{border-bottom-style:var(--tw-border-style);border-bottom-width:2px}.border-l{border-left-style:var(--tw-border-style);border-left-width:1px}.border-dashed{--tw-border-style:dashed;border-style:dashed}.\!border-green-500{border-color:var(--color-green-500)!important}.\!border-red-500{border-color:var(--color-red-500)!important}.border-amber-100{border-color:var(--color-amber-100)}.border-amber-200{border-color:var(--color-amber-200)}.border-primary{border-color:var(--p-primary-color)}@supports (color:color-mix(in lab, red, red)){.border-primary{border-color:color-mix(in srgb,var(--p-primary-color)calc(100%*1),transparent)}}.border-primary-500{border-color:var(--p-primary-500)}@supports (color:color-mix(in lab, red, red)){.border-primary-500{border-color:color-mix(in srgb,var(--p-primary-500)calc(100%*1),transparent)}}.border-red-500{border-color:var(--color-red-500)}.border-surface-100{border-color:var(--p-surface-100)}@supports (color:color-mix(in lab, red, red)){.border-surface-100{border-color:color-mix(in srgb,var(--p-surface-100)calc(100%*1),transparent)}}.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)}}.border-white{border-color:var(--color-white)}.bg-amber-50{background-color:var(--color-amber-50)}.bg-amber-100{background-color:var(--color-amber-100)}.bg-gray-200{background-color:var(--color-gray-200)}.bg-primary{background-color:var(--p-primary-color)}@supports (color:color-mix(in lab, red, red)){.bg-primary{background-color:color-mix(in srgb,var(--p-primary-color)calc(100%*1),transparent)}}.bg-primary-50{background-color:var(--p-primary-50)}@supports (color:color-mix(in lab, red, red)){.bg-primary-50{background-color:color-mix(in srgb,var(--p-primary-50)calc(100%*1),transparent)}}.bg-primary-100{background-color:var(--p-primary-100)}@supports (color:color-mix(in lab, red, red)){.bg-primary-100{background-color:color-mix(in srgb,var(--p-primary-100)calc(100%*1),transparent)}}.bg-primary\/20{background-color:var(--p-primary-color)}@supports (color:color-mix(in lab, red, red)){.bg-primary\/20{background-color:color-mix(in oklab,color-mix(in srgb,var(--p-primary-color)calc(100%*1),transparent)20%,transparent)}}.bg-surface-0{background-color:var(--p-surface-0)}@supports (color:color-mix(in lab, red, red)){.bg-surface-0{background-color:color-mix(in srgb,var(--p-surface-0)calc(100%*1),transparent)}}.bg-surface-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-50\!{background-color:var(--p-surface-50)!important}@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)!important}}.bg-surface-100{background-color:var(--p-surface-100)}@supports (color:color-mix(in lab, red, red)){.bg-surface-100{background-color:color-mix(in srgb,var(--p-surface-100)calc(100%*1),transparent)}}.bg-surface-200{background-color:var(--p-surface-200)}@supports (color:color-mix(in lab, red, red)){.bg-surface-200{background-color:color-mix(in srgb,var(--p-surface-200)calc(100%*1),transparent)}}.bg-surface-300{background-color:var(--p-surface-300)}@supports (color:color-mix(in lab, red, red)){.bg-surface-300{background-color:color-mix(in srgb,var(--p-surface-300)calc(100%*1),transparent)}}.bg-white{background-color:var(--color-white)}.bg-gradient-to-b{--tw-gradient-position:to bottom in oklab;background-image:linear-gradient(var(--tw-gradient-stops))}.from-black\/10{--tw-gradient-from:#0000001a}@supports (color:color-mix(in lab, red, red)){.from-black\/10{--tw-gradient-from:color-mix(in oklab,var(--color-black)10%,transparent)}}.from-black\/10{--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.to-transparent{--tw-gradient-to:transparent;--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.object-cover{object-fit:cover}.\!p-0{padding:calc(var(--spacing)*0)!important}.p-0{padding:calc(var(--spacing)*0)}.p-1{padding:calc(var(--spacing)*1)}.p-2{padding:calc(var(--spacing)*2)}.p-3{padding:calc(var(--spacing)*3)}.p-4{padding:calc(var(--spacing)*4)}.p-5{padding:calc(var(--spacing)*5)}.p-8{padding:calc(var(--spacing)*8)}.px-2{padding-inline:calc(var(--spacing)*2)}.px-3{padding-inline:calc(var(--spacing)*3)}.px-4{padding-inline:calc(var(--spacing)*4)}.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)}.py-4{padding-block:calc(var(--spacing)*4)}.py-5{padding-block:calc(var(--spacing)*5)}.py-8{padding-block:calc(var(--spacing)*8)}.py-12{padding-block:calc(var(--spacing)*12)}.pe-8{padding-inline-end:calc(var(--spacing)*8)}.pt-0{padding-top:calc(var(--spacing)*0)}.pt-4{padding-top:calc(var(--spacing)*4)}.pb-1{padding-bottom:calc(var(--spacing)*1)}.pb-2{padding-bottom:calc(var(--spacing)*2)}.pb-4{padding-bottom:calc(var(--spacing)*4)}.pb-5{padding-bottom:calc(var(--spacing)*5)}.text-center{text-align:center}.text-left{text-align:left}.text-2xl{font-size:var(--text-2xl);line-height:var(--tw-leading,var(--text-2xl--line-height))}.text-3xl{font-size:var(--text-3xl);line-height:var(--tw-leading,var(--text-3xl--line-height))}.text-4xl{font-size:var(--text-4xl);line-height:var(--tw-leading,var(--text-4xl--line-height))}.text-6xl{font-size:var(--text-6xl);line-height:var(--tw-leading,var(--text-6xl--line-height))}.text-base{font-size:var(--text-base);line-height:var(--tw-leading,var(--text-base--line-height))}.text-lg{font-size:var(--text-lg);line-height:var(--tw-leading,var(--text-lg--line-height))}.text-sm{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}.text-xl{font-size:var(--text-xl);line-height:var(--tw-leading,var(--text-xl--line-height))}.text-xs{font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height))}.leading-tight{--tw-leading:var(--leading-tight);line-height:var(--leading-tight)}.font-bold{--tw-font-weight:var(--font-weight-bold);font-weight:var(--font-weight-bold)}.font-medium{--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium)}.font-semibold{--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold)}.text-ellipsis{text-overflow:ellipsis}.whitespace-nowrap{white-space:nowrap}.\!text-green-600{color:var(--color-green-600)!important}.\!text-red-600{color:var(--color-red-600)!important}.text-amber-600{color:var(--color-amber-600)}.text-blue-500{color:var(--color-blue-500)}.text-color{color:var(--p-text-color)}.text-gray-400{color:var(--color-gray-400)}.text-gray-500{color:var(--color-gray-500)}.text-gray-600{color:var(--color-gray-600)}.text-gray-700{color:var(--color-gray-700)}.text-gray-800{color:var(--color-gray-800)}.text-green-600{color:var(--color-green-600)}.text-muted-color{color:var(--p-text-muted-color)}.text-orange-500{color:var(--color-orange-500)}.text-primary{color:var(--p-primary-color)}@supports (color:color-mix(in lab, red, red)){.text-primary{color:color-mix(in srgb,var(--p-primary-color)calc(100%*1),transparent)}}.text-primary-500{color:var(--p-primary-500)}@supports (color:color-mix(in lab, red, red)){.text-primary-500{color:color-mix(in srgb,var(--p-primary-500)calc(100%*1),transparent)}}.text-primary-600{color:var(--p-primary-600)}@supports (color:color-mix(in lab, red, red)){.text-primary-600{color:color-mix(in srgb,var(--p-primary-600)calc(100%*1),transparent)}}.text-red-500{color:var(--color-red-500)}.text-surface-700{color:var(--p-surface-700)}@supports (color:color-mix(in lab, red, red)){.text-surface-700{color:color-mix(in srgb,var(--p-surface-700)calc(100%*1),transparent)}}.text-surface-800{color:var(--p-surface-800)}@supports (color:color-mix(in lab, red, red)){.text-surface-800{color:color-mix(in srgb,var(--p-surface-800)calc(100%*1),transparent)}}.text-surface-900{color:var(--p-surface-900)}@supports (color:color-mix(in lab, red, red)){.text-surface-900{color:color-mix(in srgb,var(--p-surface-900)calc(100%*1),transparent)}}.text-white{color:var(--color-white)}.text-white\/70{color:#ffffffb3}@supports (color:color-mix(in lab, red, red)){.text-white\/70{color:color-mix(in oklab,var(--color-white)70%,transparent)}}.lowercase{text-transform:lowercase}.italic{font-style:italic}.opacity-0{opacity:0}.opacity-50{opacity:.5}.opacity-70{opacity:.7}.shadow{--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)}.shadow-lg{--tw-shadow:0 10px 15px -3px var(--tw-shadow-color,#0000001a),0 4px 6px -4px 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)}.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)}.ring{--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(1px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.ring-2{--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(2px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.ring-primary{--tw-ring-color:var(--p-primary-color)}@supports (color:color-mix(in lab, red, red)){.ring-primary{--tw-ring-color:color-mix(in srgb,var(--p-primary-color)calc(100%*1),transparent)}}.ring-offset-2{--tw-ring-offset-width:2px;--tw-ring-offset-shadow:var(--tw-ring-inset,)0 0 0 var(--tw-ring-offset-width)var(--tw-ring-offset-color)}.outline{outline-style:var(--tw-outline-style);outline-width:1px}.blur{--tw-blur:blur(8px);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,)}.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{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to,opacity,box-shadow,transform,translate,scale,rotate,filter,-webkit-backdrop-filter,backdrop-filter,display,content-visibility,overlay,pointer-events;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-all{transition-property:all;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-colors{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-opacity{transition-property:opacity;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-transform{transition-property:transform,translate,scale,rotate;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.duration-150{--tw-duration:.15s;transition-duration:.15s}.duration-200{--tw-duration:.2s;transition-duration:.2s}.select-none{-webkit-user-select:none;user-select:none}@media (hover:hover){.group-hover\:opacity-100:is(:where(.group):hover *){opacity:1}}.last\:mb-0:last-child{margin-bottom:calc(var(--spacing)*0)}@media (hover:hover){.hover\:-translate-y-0\.5:hover{--tw-translate-y:calc(var(--spacing)*-.5);translate:var(--tw-translate-x)var(--tw-translate-y)}.hover\:scale-110:hover{--tw-scale-x:110%;--tw-scale-y:110%;--tw-scale-z:110%;scale:var(--tw-scale-x)var(--tw-scale-y)}.hover\:border-primary-300:hover{border-color:var(--p-primary-300)}@supports (color:color-mix(in lab, red, red)){.hover\:border-primary-300:hover{border-color:color-mix(in srgb,var(--p-primary-300)calc(100%*1),transparent)}}.hover\:border-primary-400:hover{border-color:var(--p-primary-400)}@supports (color:color-mix(in lab, red, red)){.hover\:border-primary-400:hover{border-color:color-mix(in srgb,var(--p-primary-400)calc(100%*1),transparent)}}.hover\:border-surface-300:hover{border-color:var(--p-surface-300)}@supports (color:color-mix(in lab, red, red)){.hover\:border-surface-300:hover{border-color:color-mix(in srgb,var(--p-surface-300)calc(100%*1),transparent)}}.hover\:bg-primary-50:hover{background-color:var(--p-primary-50)}@supports (color:color-mix(in lab, red, red)){.hover\:bg-primary-50:hover{background-color:color-mix(in srgb,var(--p-primary-50)calc(100%*1),transparent)}}.hover\:bg-surface-50:hover{background-color:var(--p-surface-50)}@supports (color:color-mix(in lab, red, red)){.hover\:bg-surface-50:hover{background-color:color-mix(in srgb,var(--p-surface-50)calc(100%*1),transparent)}}.hover\:bg-surface-100:hover{background-color:var(--p-surface-100)}@supports (color:color-mix(in lab, red, red)){.hover\:bg-surface-100:hover{background-color:color-mix(in srgb,var(--p-surface-100)calc(100%*1),transparent)}}.hover\:text-gray-600:hover{color:var(--color-gray-600)}.hover\:text-primary:hover{color:var(--p-primary-color)}@supports (color:color-mix(in lab, red, red)){.hover\:text-primary:hover{color:color-mix(in srgb,var(--p-primary-color)calc(100%*1),transparent)}}.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\:col-span-2{grid-column:span 2/span 2}.md\:w-1\/2{width:50%}.md\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.md\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.md\:grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}.md\:grid-cols-5{grid-template-columns:repeat(5,minmax(0,1fr))}.md\:grid-cols-6{grid-template-columns:repeat(6,minmax(0,1fr))}}@media (min-width:64rem){.lg\:col-span-3{grid-column:span 3/span 3}.lg\:w-1\/3{width:33.3333%}.lg\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.lg\:grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}}.dark\:text-surface-0:where(.dark,.dark *){color:var(--p-surface-0)}@supports (color:color-mix(in lab, red, red)){.dark\:text-surface-0:where(.dark,.dark *){color:color-mix(in srgb,var(--p-surface-0)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-translate-x{syntax:"*";inherits:false;initial-value:0}@property --tw-translate-y{syntax:"*";inherits:false;initial-value:0}@property --tw-translate-z{syntax:"*";inherits:false;initial-value:0}@property --tw-rotate-x{syntax:"*";inherits:false}@property --tw-rotate-y{syntax:"*";inherits:false}@property --tw-rotate-z{syntax:"*";inherits:false}@property --tw-skew-x{syntax:"*";inherits:false}@property --tw-skew-y{syntax:"*";inherits:false}@property --tw-space-y-reverse{syntax:"*";inherits:false;initial-value:0}@property --tw-space-x-reverse{syntax:"*";inherits:false;initial-value:0}@property --tw-border-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-gradient-position{syntax:"*";inherits:false}@property --tw-gradient-from{syntax:"<color>";inherits:false;initial-value:#0000}@property --tw-gradient-via{syntax:"<color>";inherits:false;initial-value:#0000}@property --tw-gradient-to{syntax:"<color>";inherits:false;initial-value:#0000}@property --tw-gradient-stops{syntax:"*";inherits:false}@property --tw-gradient-via-stops{syntax:"*";inherits:false}@property --tw-gradient-from-position{syntax:"<length-percentage>";inherits:false;initial-value:0%}@property --tw-gradient-via-position{syntax:"<length-percentage>";inherits:false;initial-value:50%}@property --tw-gradient-to-position{syntax:"<length-percentage>";inherits:false;initial-value:100%}@property --tw-leading{syntax:"*";inherits:false}@property --tw-font-weight{syntax:"*";inherits:false}@property --tw-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-shadow-color{syntax:"*";inherits:false}@property --tw-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-inset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-shadow-color{syntax:"*";inherits:false}@property --tw-inset-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-ring-color{syntax:"*";inherits:false}@property --tw-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-ring-color{syntax:"*";inherits:false}@property --tw-inset-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-ring-inset{syntax:"*";inherits:false}@property --tw-ring-offset-width{syntax:"<length>";inherits:false;initial-value:0}@property --tw-ring-offset-color{syntax:"*";inherits:false;initial-value:#fff}@property --tw-ring-offset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-outline-style{syntax:"*";inherits:false;initial-value:solid}@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}@property --tw-duration{syntax:"*";inherits:false}@property --tw-scale-x{syntax:"*";inherits:false;initial-value:1}@property --tw-scale-y{syntax:"*";inherits:false;initial-value:1}@property --tw-scale-z{syntax:"*";inherits:false;initial-value:1}@keyframes spin{to{transform:rotate(360deg)}}
1
+ /*! tailwindcss v4.2.1 | 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-translate-x:0;--tw-translate-y:0;--tw-translate-z:0;--tw-rotate-x:initial;--tw-rotate-y:initial;--tw-rotate-z:initial;--tw-skew-x:initial;--tw-skew-y:initial;--tw-space-y-reverse:0;--tw-space-x-reverse:0;--tw-border-style:solid;--tw-gradient-position:initial;--tw-gradient-from:#0000;--tw-gradient-via:#0000;--tw-gradient-to:#0000;--tw-gradient-stops:initial;--tw-gradient-via-stops:initial;--tw-gradient-from-position:0%;--tw-gradient-via-position:50%;--tw-gradient-to-position:100%;--tw-leading:initial;--tw-font-weight:initial;--tw-shadow:0 0 #0000;--tw-shadow-color:initial;--tw-shadow-alpha:100%;--tw-inset-shadow:0 0 #0000;--tw-inset-shadow-color:initial;--tw-inset-shadow-alpha:100%;--tw-ring-color:initial;--tw-ring-shadow:0 0 #0000;--tw-inset-ring-color:initial;--tw-inset-ring-shadow:0 0 #0000;--tw-ring-inset:initial;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-offset-shadow:0 0 #0000;--tw-outline-style:solid;--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;--tw-duration:initial;--tw-scale-x:1;--tw-scale-y:1;--tw-scale-z:1}}}@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-500:oklch(63.7% .237 25.331);--color-red-600:oklch(57.7% .245 27.325);--color-orange-500:oklch(70.5% .213 47.604);--color-amber-50:oklch(98.7% .022 95.277);--color-amber-100:oklch(96.2% .059 95.617);--color-amber-200:oklch(92.4% .12 95.746);--color-amber-600:oklch(66.6% .179 58.318);--color-green-500:oklch(72.3% .219 149.579);--color-green-600:oklch(62.7% .194 149.214);--color-blue-500:oklch(62.3% .214 259.815);--color-gray-200:oklch(92.8% .006 264.531);--color-gray-400:oklch(70.7% .022 261.325);--color-gray-500:oklch(55.1% .027 264.364);--color-gray-600:oklch(44.6% .03 256.802);--color-gray-700:oklch(37.3% .034 259.733);--color-gray-800:oklch(27.8% .033 256.848);--color-black:#000;--color-white:#fff;--spacing:.25rem;--container-md:28rem;--container-2xl:42rem;--container-4xl:56rem;--container-6xl:72rem;--text-xs:.75rem;--text-xs--line-height:calc(1 / .75);--text-sm:.875rem;--text-sm--line-height:calc(1.25 / .875);--text-base:1rem;--text-base--line-height:calc(1.5 / 1);--text-lg:1.125rem;--text-lg--line-height:calc(1.75 / 1.125);--text-xl:1.25rem;--text-xl--line-height:calc(1.75 / 1.25);--text-2xl:1.5rem;--text-2xl--line-height:calc(2 / 1.5);--text-3xl:1.875rem;--text-3xl--line-height:calc(2.25 / 1.875);--text-4xl:2.25rem;--text-4xl--line-height:calc(2.5 / 2.25);--text-6xl:3.75rem;--text-6xl--line-height:1;--font-weight-medium:500;--font-weight-semibold:600;--font-weight-bold:700;--leading-tight:1.25;--radius-lg:.5rem;--animate-spin:spin 1s linear 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{.pointer-events-none{pointer-events:none}.visible{visibility:visible}.\!absolute{position:absolute!important}.absolute{position:absolute}.fixed{position:fixed}.relative{position:relative}.static{position:static}.sticky{position:sticky}.start{inset-inline-start:var(--spacing)}.end{inset-inline-end:var(--spacing)}.end-0{inset-inline-end:calc(var(--spacing) * 0)}.end-2{inset-inline-end:calc(var(--spacing) * 2)}.top-0{top:calc(var(--spacing) * 0)}.top-1{top:calc(var(--spacing) * 1)}.top-2{top:calc(var(--spacing) * 2)}.right-0{right:calc(var(--spacing) * 0)}.right-1{right:calc(var(--spacing) * 1)}.right-2{right:calc(var(--spacing) * 2)}.bottom-0{bottom:calc(var(--spacing) * 0)}.bottom-4{bottom:calc(var(--spacing) * 4)}.left-0{left:calc(var(--spacing) * 0)}.left-1\/2{left:50%}.z-10{z-index:10}.z-20{z-index:20}.z-50{z-index:50}.col-span-1{grid-column:span 1/span 1}.col-span-2{grid-column:span 2/span 2}.col-span-3{grid-column:span 3/span 3}.col-span-4{grid-column:span 4/span 4}.col-span-5{grid-column:span 5/span 5}.col-span-9{grid-column:span 9/span 9}.col-span-10{grid-column:span 10/span 10}.col-span-full{grid-column:1/-1}.container{width:100%}@media (min-width:40rem){.container{max-width:40rem}}@media (min-width:48rem){.container{max-width:48rem}}@media (min-width:64rem){.container{max-width:64rem}}@media (min-width:80rem){.container{max-width:80rem}}@media (min-width:96rem){.container{max-width:96rem}}.m-0{margin:calc(var(--spacing) * 0)}.mx-2{margin-inline:calc(var(--spacing) * 2)}.mx-auto{margin-inline:auto}.mt-0\.5{margin-top:calc(var(--spacing) * .5)}.mt-1{margin-top:calc(var(--spacing) * 1)}.mt-2{margin-top:calc(var(--spacing) * 2)}.mt-3{margin-top:calc(var(--spacing) * 3)}.mt-4{margin-top:calc(var(--spacing) * 4)}.mr-1{margin-right:calc(var(--spacing) * 1)}.mr-2{margin-right:calc(var(--spacing) * 2)}.mb-0{margin-bottom:calc(var(--spacing) * 0)}.mb-1{margin-bottom:calc(var(--spacing) * 1)}.mb-2{margin-bottom:calc(var(--spacing) * 2)}.mb-3{margin-bottom:calc(var(--spacing) * 3)}.mb-4{margin-bottom:calc(var(--spacing) * 4)}.ml-2{margin-left:calc(var(--spacing) * 2)}.block{display:block}.flex{display:flex}.grid{display:grid}.hidden{display:none}.inline{display:inline}.inline-block{display:inline-block}.inline-flex{display:inline-flex}.table{display:table}.h-2{height:calc(var(--spacing) * 2)}.h-2\.5{height:calc(var(--spacing) * 2.5)}.h-5{height:calc(var(--spacing) * 5)}.h-6{height:calc(var(--spacing) * 6)}.h-7{height:calc(var(--spacing) * 7)}.h-8{height:calc(var(--spacing) * 8)}.h-10{height:calc(var(--spacing) * 10)}.h-12{height:calc(var(--spacing) * 12)}.h-16{height:calc(var(--spacing) * 16)}.h-32{height:calc(var(--spacing) * 32)}.h-64{height:calc(var(--spacing) * 64)}.h-\[500px\]{height:500px}.h-full{height:100%}.max-h-64{max-height:calc(var(--spacing) * 64)}.max-h-\[80vh\]{max-height:80vh}.min-h-0{min-height:calc(var(--spacing) * 0)}.min-h-\[200px\]{min-height:200px}.min-h-\[300px\]{min-height:300px}.min-h-\[500px\]{min-height:500px}.min-h-\[600px\]{min-height:600px}.\!w-1\/3{width:33.3333%!important}.\!w-2\/5{width:40%!important}.\!w-9\/10{width:90%!important}.\!w-\[35rem\]{width:35rem!important}.w-2{width:calc(var(--spacing) * 2)}.w-2\.5{width:calc(var(--spacing) * 2.5)}.w-2\/3{width:66.6667%}.w-6{width:calc(var(--spacing) * 6)}.w-7{width:calc(var(--spacing) * 7)}.w-8{width:calc(var(--spacing) * 8)}.w-10{width:calc(var(--spacing) * 10)}.w-12{width:calc(var(--spacing) * 12)}.w-16{width:calc(var(--spacing) * 16)}.w-20{width:calc(var(--spacing) * 20)}.w-24{width:calc(var(--spacing) * 24)}.w-64{width:calc(var(--spacing) * 64)}.w-\[40\%\]{width:40%}.w-\[60\%\]{width:60%}.w-full{width:100%}.w-px{width:1px}.max-w-2xl{max-width:var(--container-2xl)}.max-w-4xl{max-width:var(--container-4xl)}.max-w-6xl{max-width:var(--container-6xl)}.max-w-24{max-width:calc(var(--spacing) * 24)}.max-w-32{max-width:calc(var(--spacing) * 32)}.max-w-\[95vw\]{max-width:95vw}.max-w-md{max-width:var(--container-md)}.min-w-0{min-width:calc(var(--spacing) * 0)}.min-w-\[160px\]{min-width:160px}.min-w-\[350px\]{min-width:350px}.flex-1{flex:1}.flex-shrink{flex-shrink:1}.flex-shrink-0{flex-shrink:0}.flex-grow{flex-grow:1}.border-collapse{border-collapse:collapse}.-translate-x-1\/2{--tw-translate-x:calc(calc(1 / 2 * 100%) * -1);translate:var(--tw-translate-x) var(--tw-translate-y)}.transform{transform:var(--tw-rotate-x,) var(--tw-rotate-y,) var(--tw-rotate-z,) var(--tw-skew-x,) var(--tw-skew-y,)}.animate-spin{animation:var(--animate-spin)}.cursor-move{cursor:move}.cursor-pointer{cursor:pointer}.resize{resize:both}.grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}.grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.grid-cols-12{grid-template-columns:repeat(12,minmax(0,1fr))}.flex-col{flex-direction:column}.flex-wrap{flex-wrap:wrap}.items-center{align-items:center}.items-end{align-items:flex-end}.items-start{align-items:flex-start}.justify-around{justify-content:space-around}.justify-between{justify-content:space-between}.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-6{gap:calc(var(--spacing) * 6)}:where(.space-y-2>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * 2) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * 2) * calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-3>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * 3) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * 3) * calc(1 - var(--tw-space-y-reverse)))}:where(.-space-x-2>:not(:last-child)){--tw-space-x-reverse:0;margin-inline-start:calc(calc(var(--spacing) * -2) * var(--tw-space-x-reverse));margin-inline-end:calc(calc(var(--spacing) * -2) * calc(1 - var(--tw-space-x-reverse)))}.truncate{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.overflow-auto{overflow:auto}.overflow-hidden{overflow:hidden}.overflow-x-auto{overflow-x:auto}.overflow-x-hidden{overflow-x:hidden}.overflow-y-auto{overflow-y:auto}.rounded{border-radius:.25rem}.rounded-full{border-radius:3.40282e38px}.rounded-lg{border-radius:var(--radius-lg)}.rounded-b-lg{border-bottom-right-radius:var(--radius-lg);border-bottom-left-radius:var(--radius-lg)}.border{border-style:var(--tw-border-style);border-width:1px}.border-2{border-style:var(--tw-border-style);border-width:2px}.border-s{border-inline-start-style:var(--tw-border-style);border-inline-start-width:1px}.border-t{border-top-style:var(--tw-border-style);border-top-width:1px}.border-r{border-right-style:var(--tw-border-style);border-right-width:1px}.border-b{border-bottom-style:var(--tw-border-style);border-bottom-width:1px}.border-b-2{border-bottom-style:var(--tw-border-style);border-bottom-width:2px}.border-l{border-left-style:var(--tw-border-style);border-left-width:1px}.border-dashed{--tw-border-style:dashed;border-style:dashed}.\!border-green-500{border-color:var(--color-green-500)!important}.\!border-red-500{border-color:var(--color-red-500)!important}.border-amber-100{border-color:var(--color-amber-100)}.border-amber-200{border-color:var(--color-amber-200)}.border-primary{border-color:var(--p-primary-color)}@supports (color:color-mix(in lab, red, red)){.border-primary{border-color:color-mix(in srgb, var(--p-primary-color) calc(100% * 1), transparent)}}.border-primary-500{border-color:var(--p-primary-500)}@supports (color:color-mix(in lab, red, red)){.border-primary-500{border-color:color-mix(in srgb, var(--p-primary-500) calc(100% * 1), transparent)}}.border-red-500{border-color:var(--color-red-500)}.border-surface-100{border-color:var(--p-surface-100)}@supports (color:color-mix(in lab, red, red)){.border-surface-100{border-color:color-mix(in srgb, var(--p-surface-100) calc(100% * 1), transparent)}}.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)}}.border-white{border-color:var(--color-white)}.bg-amber-50{background-color:var(--color-amber-50)}.bg-amber-100{background-color:var(--color-amber-100)}.bg-gray-200{background-color:var(--color-gray-200)}.bg-primary{background-color:var(--p-primary-color)}@supports (color:color-mix(in lab, red, red)){.bg-primary{background-color:color-mix(in srgb, var(--p-primary-color) calc(100% * 1), transparent)}}.bg-primary-50{background-color:var(--p-primary-50)}@supports (color:color-mix(in lab, red, red)){.bg-primary-50{background-color:color-mix(in srgb, var(--p-primary-50) calc(100% * 1), transparent)}}.bg-primary-100{background-color:var(--p-primary-100)}@supports (color:color-mix(in lab, red, red)){.bg-primary-100{background-color:color-mix(in srgb, var(--p-primary-100) calc(100% * 1), transparent)}}.bg-primary\/20{background-color:var(--p-primary-color)}@supports (color:color-mix(in lab, red, red)){.bg-primary\/20{background-color:color-mix(in oklab, color-mix(in srgb, var(--p-primary-color) calc(100% * 1), transparent) 20%, transparent)}}.bg-surface-0{background-color:var(--p-surface-0)}@supports (color:color-mix(in lab, red, red)){.bg-surface-0{background-color:color-mix(in srgb, var(--p-surface-0) calc(100% * 1), transparent)}}.bg-surface-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-50\!{background-color:var(--p-surface-50)!important}@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)!important}}.bg-surface-100{background-color:var(--p-surface-100)}@supports (color:color-mix(in lab, red, red)){.bg-surface-100{background-color:color-mix(in srgb, var(--p-surface-100) calc(100% * 1), transparent)}}.bg-surface-200{background-color:var(--p-surface-200)}@supports (color:color-mix(in lab, red, red)){.bg-surface-200{background-color:color-mix(in srgb, var(--p-surface-200) calc(100% * 1), transparent)}}.bg-surface-300{background-color:var(--p-surface-300)}@supports (color:color-mix(in lab, red, red)){.bg-surface-300{background-color:color-mix(in srgb, var(--p-surface-300) calc(100% * 1), transparent)}}.bg-white{background-color:var(--color-white)}.bg-gradient-to-b{--tw-gradient-position:to bottom in oklab;background-image:linear-gradient(var(--tw-gradient-stops))}.from-black\/10{--tw-gradient-from:#0000001a}@supports (color:color-mix(in lab, red, red)){.from-black\/10{--tw-gradient-from:color-mix(in oklab, var(--color-black) 10%, transparent)}}.from-black\/10{--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position))}.to-transparent{--tw-gradient-to:transparent;--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position))}.object-cover{object-fit:cover}.\!p-0{padding:calc(var(--spacing) * 0)!important}.p-0{padding:calc(var(--spacing) * 0)}.p-1{padding:calc(var(--spacing) * 1)}.p-2{padding:calc(var(--spacing) * 2)}.p-3{padding:calc(var(--spacing) * 3)}.p-4{padding:calc(var(--spacing) * 4)}.p-5{padding:calc(var(--spacing) * 5)}.p-8{padding:calc(var(--spacing) * 8)}.px-2{padding-inline:calc(var(--spacing) * 2)}.px-3{padding-inline:calc(var(--spacing) * 3)}.px-4{padding-inline:calc(var(--spacing) * 4)}.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)}.py-4{padding-block:calc(var(--spacing) * 4)}.py-5{padding-block:calc(var(--spacing) * 5)}.py-8{padding-block:calc(var(--spacing) * 8)}.py-12{padding-block:calc(var(--spacing) * 12)}.pe-8{padding-inline-end:calc(var(--spacing) * 8)}.pt-0{padding-top:calc(var(--spacing) * 0)}.pt-4{padding-top:calc(var(--spacing) * 4)}.pb-1{padding-bottom:calc(var(--spacing) * 1)}.pb-2{padding-bottom:calc(var(--spacing) * 2)}.pb-4{padding-bottom:calc(var(--spacing) * 4)}.pb-5{padding-bottom:calc(var(--spacing) * 5)}.text-center{text-align:center}.text-left{text-align:left}.text-2xl{font-size:var(--text-2xl);line-height:var(--tw-leading,var(--text-2xl--line-height))}.text-3xl{font-size:var(--text-3xl);line-height:var(--tw-leading,var(--text-3xl--line-height))}.text-4xl{font-size:var(--text-4xl);line-height:var(--tw-leading,var(--text-4xl--line-height))}.text-6xl{font-size:var(--text-6xl);line-height:var(--tw-leading,var(--text-6xl--line-height))}.text-base{font-size:var(--text-base);line-height:var(--tw-leading,var(--text-base--line-height))}.text-lg{font-size:var(--text-lg);line-height:var(--tw-leading,var(--text-lg--line-height))}.text-sm{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}.text-xl{font-size:var(--text-xl);line-height:var(--tw-leading,var(--text-xl--line-height))}.text-xs{font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height))}.leading-tight{--tw-leading:var(--leading-tight);line-height:var(--leading-tight)}.font-bold{--tw-font-weight:var(--font-weight-bold);font-weight:var(--font-weight-bold)}.font-medium{--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium)}.font-semibold{--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold)}.text-ellipsis{text-overflow:ellipsis}.whitespace-nowrap{white-space:nowrap}.\!text-green-600{color:var(--color-green-600)!important}.\!text-red-600{color:var(--color-red-600)!important}.text-amber-600{color:var(--color-amber-600)}.text-blue-500{color:var(--color-blue-500)}.text-color{color:var(--p-text-color)}.text-gray-400{color:var(--color-gray-400)}.text-gray-500{color:var(--color-gray-500)}.text-gray-600{color:var(--color-gray-600)}.text-gray-700{color:var(--color-gray-700)}.text-gray-800{color:var(--color-gray-800)}.text-green-600{color:var(--color-green-600)}.text-muted-color{color:var(--p-text-muted-color)}.text-orange-500{color:var(--color-orange-500)}.text-primary{color:var(--p-primary-color)}@supports (color:color-mix(in lab, red, red)){.text-primary{color:color-mix(in srgb, var(--p-primary-color) calc(100% * 1), transparent)}}.text-primary-500{color:var(--p-primary-500)}@supports (color:color-mix(in lab, red, red)){.text-primary-500{color:color-mix(in srgb, var(--p-primary-500) calc(100% * 1), transparent)}}.text-primary-600{color:var(--p-primary-600)}@supports (color:color-mix(in lab, red, red)){.text-primary-600{color:color-mix(in srgb, var(--p-primary-600) calc(100% * 1), transparent)}}.text-red-500{color:var(--color-red-500)}.text-surface-700{color:var(--p-surface-700)}@supports (color:color-mix(in lab, red, red)){.text-surface-700{color:color-mix(in srgb, var(--p-surface-700) calc(100% * 1), transparent)}}.text-surface-800{color:var(--p-surface-800)}@supports (color:color-mix(in lab, red, red)){.text-surface-800{color:color-mix(in srgb, var(--p-surface-800) calc(100% * 1), transparent)}}.text-surface-900{color:var(--p-surface-900)}@supports (color:color-mix(in lab, red, red)){.text-surface-900{color:color-mix(in srgb, var(--p-surface-900) calc(100% * 1), transparent)}}.text-white{color:var(--color-white)}.text-white\/70{color:#ffffffb3}@supports (color:color-mix(in lab, red, red)){.text-white\/70{color:color-mix(in oklab, var(--color-white) 70%, transparent)}}.capitalize{text-transform:capitalize}.lowercase{text-transform:lowercase}.italic{font-style:italic}.opacity-0{opacity:0}.opacity-50{opacity:.5}.opacity-70{opacity:.7}.shadow{--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)}.shadow-lg{--tw-shadow:0 10px 15px -3px var(--tw-shadow-color,#0000001a), 0 4px 6px -4px 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)}.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)}.ring{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.ring-2{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.ring-primary{--tw-ring-color:var(--p-primary-color)}@supports (color:color-mix(in lab, red, red)){.ring-primary{--tw-ring-color:color-mix(in srgb, var(--p-primary-color) calc(100% * 1), transparent)}}.ring-offset-2{--tw-ring-offset-width:2px;--tw-ring-offset-shadow:var(--tw-ring-inset,) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color)}.outline{outline-style:var(--tw-outline-style);outline-width:1px}.blur{--tw-blur:blur(8px);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,)}.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{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to,opacity,box-shadow,transform,translate,scale,rotate,filter,-webkit-backdrop-filter,backdrop-filter,display,content-visibility,overlay,pointer-events;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-all{transition-property:all;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-colors{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-opacity{transition-property:opacity;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-transform{transition-property:transform,translate,scale,rotate;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.duration-150{--tw-duration:.15s;transition-duration:.15s}.duration-200{--tw-duration:.2s;transition-duration:.2s}.select-none{-webkit-user-select:none;user-select:none}@media (hover:hover){.group-hover\:opacity-100:is(:where(.group):hover *){opacity:1}}.last\:mb-0:last-child{margin-bottom:calc(var(--spacing) * 0)}@media (hover:hover){.hover\:-translate-y-0\.5:hover{--tw-translate-y:calc(var(--spacing) * -.5);translate:var(--tw-translate-x) var(--tw-translate-y)}.hover\:scale-110:hover{--tw-scale-x:110%;--tw-scale-y:110%;--tw-scale-z:110%;scale:var(--tw-scale-x) var(--tw-scale-y)}.hover\:border-primary-300:hover{border-color:var(--p-primary-300)}@supports (color:color-mix(in lab, red, red)){.hover\:border-primary-300:hover{border-color:color-mix(in srgb, var(--p-primary-300) calc(100% * 1), transparent)}}.hover\:border-primary-400:hover{border-color:var(--p-primary-400)}@supports (color:color-mix(in lab, red, red)){.hover\:border-primary-400:hover{border-color:color-mix(in srgb, var(--p-primary-400) calc(100% * 1), transparent)}}.hover\:border-surface-300:hover{border-color:var(--p-surface-300)}@supports (color:color-mix(in lab, red, red)){.hover\:border-surface-300:hover{border-color:color-mix(in srgb, var(--p-surface-300) calc(100% * 1), transparent)}}.hover\:bg-primary-50:hover{background-color:var(--p-primary-50)}@supports (color:color-mix(in lab, red, red)){.hover\:bg-primary-50:hover{background-color:color-mix(in srgb, var(--p-primary-50) calc(100% * 1), transparent)}}.hover\:bg-surface-50:hover{background-color:var(--p-surface-50)}@supports (color:color-mix(in lab, red, red)){.hover\:bg-surface-50:hover{background-color:color-mix(in srgb, var(--p-surface-50) calc(100% * 1), transparent)}}.hover\:bg-surface-100:hover{background-color:var(--p-surface-100)}@supports (color:color-mix(in lab, red, red)){.hover\:bg-surface-100:hover{background-color:color-mix(in srgb, var(--p-surface-100) calc(100% * 1), transparent)}}.hover\:text-gray-600:hover{color:var(--color-gray-600)}.hover\:text-primary:hover{color:var(--p-primary-color)}@supports (color:color-mix(in lab, red, red)){.hover\:text-primary:hover{color:color-mix(in srgb, var(--p-primary-color) calc(100% * 1), transparent)}}.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\:col-span-2{grid-column:span 2/span 2}.md\:w-1\/2{width:50%}.md\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.md\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.md\:grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}.md\:grid-cols-5{grid-template-columns:repeat(5,minmax(0,1fr))}.md\:grid-cols-6{grid-template-columns:repeat(6,minmax(0,1fr))}}@media (min-width:64rem){.lg\:col-span-3{grid-column:span 3/span 3}.lg\:w-1\/3{width:33.3333%}.lg\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.lg\:grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}}.dark\:text-surface-0:where(.dark,.dark *){color:var(--p-surface-0)}@supports (color:color-mix(in lab, red, red)){.dark\:text-surface-0:where(.dark,.dark *){color:color-mix(in srgb, var(--p-surface-0) 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-translate-x{syntax:"*";inherits:false;initial-value:0}@property --tw-translate-y{syntax:"*";inherits:false;initial-value:0}@property --tw-translate-z{syntax:"*";inherits:false;initial-value:0}@property --tw-rotate-x{syntax:"*";inherits:false}@property --tw-rotate-y{syntax:"*";inherits:false}@property --tw-rotate-z{syntax:"*";inherits:false}@property --tw-skew-x{syntax:"*";inherits:false}@property --tw-skew-y{syntax:"*";inherits:false}@property --tw-space-y-reverse{syntax:"*";inherits:false;initial-value:0}@property --tw-space-x-reverse{syntax:"*";inherits:false;initial-value:0}@property --tw-border-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-gradient-position{syntax:"*";inherits:false}@property --tw-gradient-from{syntax:"<color>";inherits:false;initial-value:#0000}@property --tw-gradient-via{syntax:"<color>";inherits:false;initial-value:#0000}@property --tw-gradient-to{syntax:"<color>";inherits:false;initial-value:#0000}@property --tw-gradient-stops{syntax:"*";inherits:false}@property --tw-gradient-via-stops{syntax:"*";inherits:false}@property --tw-gradient-from-position{syntax:"<length-percentage>";inherits:false;initial-value:0%}@property --tw-gradient-via-position{syntax:"<length-percentage>";inherits:false;initial-value:50%}@property --tw-gradient-to-position{syntax:"<length-percentage>";inherits:false;initial-value:100%}@property --tw-leading{syntax:"*";inherits:false}@property --tw-font-weight{syntax:"*";inherits:false}@property --tw-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-shadow-color{syntax:"*";inherits:false}@property --tw-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-inset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-shadow-color{syntax:"*";inherits:false}@property --tw-inset-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-ring-color{syntax:"*";inherits:false}@property --tw-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-ring-color{syntax:"*";inherits:false}@property --tw-inset-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-ring-inset{syntax:"*";inherits:false}@property --tw-ring-offset-width{syntax:"<length>";inherits:false;initial-value:0}@property --tw-ring-offset-color{syntax:"*";inherits:false;initial-value:#fff}@property --tw-ring-offset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-outline-style{syntax:"*";inherits:false;initial-value:solid}@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}@property --tw-duration{syntax:"*";inherits:false}@property --tw-scale-x{syntax:"*";inherits:false;initial-value:1}@property --tw-scale-y{syntax:"*";inherits:false;initial-value:1}@property --tw-scale-z{syntax:"*";inherits:false;initial-value:1}@keyframes spin{to{transform:rotate(360deg)}}
@@ -502,15 +502,15 @@ class DashboardDialogComponent {
502
502
  modal = inject(ModalService);
503
503
  ref = inject(ModalRef);
504
504
  // Inputs from modal data
505
- configInput = input(null, { ...(ngDevMode ? { debugName: "configInput" } : {}), alias: 'config' });
506
- paramsInput = input({}, { ...(ngDevMode ? { debugName: "paramsInput" } : {}), alias: 'params' });
507
- titleInput = input(null, { ...(ngDevMode ? { debugName: "titleInput" } : {}), alias: 'title' });
505
+ config = input(null, ...(ngDevMode ? [{ debugName: "config" }] : []));
506
+ params = input({}, ...(ngDevMode ? [{ debugName: "params" }] : []));
507
+ title = input(null, ...(ngDevMode ? [{ debugName: "title" }] : []));
508
508
  // State
509
509
  dialogConfig = signal(null, ...(ngDevMode ? [{ debugName: "dialogConfig" }] : []));
510
510
  actionParams = signal({}, ...(ngDevMode ? [{ debugName: "actionParams" }] : []));
511
511
  // Computed
512
512
  mergedParams = computed(() => ({
513
- ...this.paramsInput(),
513
+ ...this.params(),
514
514
  ...this.actionParams(),
515
515
  }), ...(ngDevMode ? [{ debugName: "mergedParams" }] : []));
516
516
  processedConfig = computed(() => {
@@ -529,12 +529,12 @@ class DashboardDialogComponent {
529
529
  }, ...(ngDevMode ? [{ debugName: "processedConfig" }] : []));
530
530
  ngOnInit() {
531
531
  // Set config from input
532
- const config = this.configInput();
532
+ const config = this.config();
533
533
  if (config) {
534
534
  this.dialogConfig.set(config);
535
535
  }
536
536
  // Set params from input
537
- const params = this.paramsInput();
537
+ const params = this.params();
538
538
  if (params) {
539
539
  this.actionParams.set(params);
540
540
  }
@@ -563,12 +563,12 @@ class DashboardDialogComponent {
563
563
  console.log('Dialog action:', event);
564
564
  }
565
565
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.3", ngImport: i0, type: DashboardDialogComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
566
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.0.3", type: DashboardDialogComponent, isStandalone: true, selector: "db-dashboard-dialog", inputs: { configInput: { classPropertyName: "configInput", publicName: "config", isSignal: true, isRequired: false, transformFunction: null }, paramsInput: { classPropertyName: "paramsInput", publicName: "params", isSignal: true, isRequired: false, transformFunction: null }, titleInput: { classPropertyName: "titleInput", publicName: "title", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: "<div\r\n [class]=\"modal.contentClass + ' p-0 min-h-[300px] max-h-[80vh] overflow-auto'\"\r\n *transloco=\"let t; prefix: 'dashboard'\"\r\n>\r\n <!-- Dashboard Item renders whatever the config specifies -->\r\n @if (processedConfig()) {\r\n <mt-dashboard-item\r\n [config]=\"processedConfig()!\"\r\n [queryParams]=\"mergedParams()\"\r\n [isDialog]=\"true\"\r\n (actionTriggered)=\"onItemAction($event)\"\r\n />\r\n } @else {\r\n <!-- Loading state while config is being processed -->\r\n <div class=\"flex items-center justify-center min-h-[200px]\">\r\n <i class=\"pi pi-spin pi-spinner text-4xl text-primary\"></i>\r\n </div>\r\n }\r\n</div>\r\n<!--\r\n<div [class]=\"modal.footerClass\" *transloco=\"let t; prefix: 'dashboard'\">\r\n <mt-button [label]=\"t('close')\" severity=\"secondary\" (onClick)=\"close()\" />\r\n</div> -->\r\n", dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: TranslocoDirective, selector: "[transloco]", inputs: ["transloco", "translocoParams", "translocoScope", "translocoRead", "translocoPrefix", "translocoLang", "translocoLoadingTpl"] }, { kind: "component", type: DashboardItem, selector: "mt-dashboard-item", inputs: ["config", "chartTypeId", "readonly", "inGroup", "isDialog", "queryParams"], outputs: ["actionTriggered"] }] });
566
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.0.3", type: DashboardDialogComponent, isStandalone: true, selector: "mt-dashboard-dialog", inputs: { config: { classPropertyName: "config", publicName: "config", isSignal: true, isRequired: false, transformFunction: null }, params: { classPropertyName: "params", publicName: "params", isSignal: true, isRequired: false, transformFunction: null }, title: { classPropertyName: "title", publicName: "title", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: "<div\r\n [class]=\"modal.contentClass + ' p-0 min-h-[300px] max-h-[80vh] overflow-auto'\"\r\n *transloco=\"let t; prefix: 'dashboard'\"\r\n>\r\n <!-- Dashboard Item renders whatever the config specifies -->\r\n @if (processedConfig()) {\r\n <mt-dashboard-item\r\n [config]=\"processedConfig()!\"\r\n [queryParams]=\"mergedParams()\"\r\n [isDialog]=\"true\"\r\n (actionTriggered)=\"onItemAction($event)\"\r\n />\r\n } @else {\r\n <!-- Loading state while config is being processed -->\r\n <div class=\"flex items-center justify-center min-h-[200px]\">\r\n <i class=\"pi pi-spin pi-spinner text-4xl text-primary\"></i>\r\n </div>\r\n }\r\n</div>\r\n<!--\r\n<div [class]=\"modal.footerClass\" *transloco=\"let t; prefix: 'dashboard'\">\r\n <mt-button [label]=\"t('close')\" severity=\"secondary\" (onClick)=\"close()\" />\r\n</div> -->\r\n", dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: TranslocoDirective, selector: "[transloco]", inputs: ["transloco", "translocoParams", "translocoScope", "translocoRead", "translocoPrefix", "translocoLang", "translocoLoadingTpl"] }, { kind: "component", type: DashboardItem, selector: "mt-dashboard-item", inputs: ["config", "chartTypeId", "readonly", "inGroup", "isDialog", "queryParams"], outputs: ["actionTriggered"] }] });
567
567
  }
568
568
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.3", ngImport: i0, type: DashboardDialogComponent, decorators: [{
569
569
  type: Component,
570
- args: [{ selector: 'db-dashboard-dialog', standalone: true, imports: [CommonModule, TranslocoDirective, Button, DashboardItem], template: "<div\r\n [class]=\"modal.contentClass + ' p-0 min-h-[300px] max-h-[80vh] overflow-auto'\"\r\n *transloco=\"let t; prefix: 'dashboard'\"\r\n>\r\n <!-- Dashboard Item renders whatever the config specifies -->\r\n @if (processedConfig()) {\r\n <mt-dashboard-item\r\n [config]=\"processedConfig()!\"\r\n [queryParams]=\"mergedParams()\"\r\n [isDialog]=\"true\"\r\n (actionTriggered)=\"onItemAction($event)\"\r\n />\r\n } @else {\r\n <!-- Loading state while config is being processed -->\r\n <div class=\"flex items-center justify-center min-h-[200px]\">\r\n <i class=\"pi pi-spin pi-spinner text-4xl text-primary\"></i>\r\n </div>\r\n }\r\n</div>\r\n<!--\r\n<div [class]=\"modal.footerClass\" *transloco=\"let t; prefix: 'dashboard'\">\r\n <mt-button [label]=\"t('close')\" severity=\"secondary\" (onClick)=\"close()\" />\r\n</div> -->\r\n" }]
571
- }], propDecorators: { configInput: [{ type: i0.Input, args: [{ isSignal: true, alias: "config", required: false }] }], paramsInput: [{ type: i0.Input, args: [{ isSignal: true, alias: "params", required: false }] }], titleInput: [{ type: i0.Input, args: [{ isSignal: true, alias: "title", required: false }] }] } });
570
+ args: [{ selector: 'mt-dashboard-dialog', standalone: true, imports: [CommonModule, TranslocoDirective, Button, DashboardItem], template: "<div\r\n [class]=\"modal.contentClass + ' p-0 min-h-[300px] max-h-[80vh] overflow-auto'\"\r\n *transloco=\"let t; prefix: 'dashboard'\"\r\n>\r\n <!-- Dashboard Item renders whatever the config specifies -->\r\n @if (processedConfig()) {\r\n <mt-dashboard-item\r\n [config]=\"processedConfig()!\"\r\n [queryParams]=\"mergedParams()\"\r\n [isDialog]=\"true\"\r\n (actionTriggered)=\"onItemAction($event)\"\r\n />\r\n } @else {\r\n <!-- Loading state while config is being processed -->\r\n <div class=\"flex items-center justify-center min-h-[200px]\">\r\n <i class=\"pi pi-spin pi-spinner text-4xl text-primary\"></i>\r\n </div>\r\n }\r\n</div>\r\n<!--\r\n<div [class]=\"modal.footerClass\" *transloco=\"let t; prefix: 'dashboard'\">\r\n <mt-button [label]=\"t('close')\" severity=\"secondary\" (onClick)=\"close()\" />\r\n</div> -->\r\n" }]
571
+ }], propDecorators: { config: [{ type: i0.Input, args: [{ isSignal: true, alias: "config", required: false }] }], params: [{ type: i0.Input, args: [{ isSignal: true, alias: "params", required: false }] }], title: [{ type: i0.Input, args: [{ isSignal: true, alias: "title", required: false }] }] } });
572
572
  /**
573
573
  * Helper service for opening dashboard dialogs
574
574
  */
@@ -592,4 +592,4 @@ function openDashboardDialog(modalService, config, params, options) {
592
592
  }
593
593
 
594
594
  export { DashboardDialogComponent, openDashboardDialog };
595
- //# sourceMappingURL=masterteam-dashboard-builder-dashboard-dialog.component-D1JNWQMI.mjs.map
595
+ //# sourceMappingURL=masterteam-dashboard-builder-dashboard-dialog.component-697C4AOo.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"masterteam-dashboard-builder-dashboard-dialog.component-D1JNWQMI.mjs","sources":["../../../../packages/masterteam/dashboard-builder/src/lib/dashboard-item/services/filter-utils.service.ts","../../../../packages/masterteam/dashboard-builder/src/lib/dashboard-item/components/dashboard-dialog/dashboard-dialog.component.ts","../../../../packages/masterteam/dashboard-builder/src/lib/dashboard-item/components/dashboard-dialog/dashboard-dialog.component.html"],"sourcesContent":["/**\r\n * Filter Utilities Service\r\n *\r\n * Handles dynamic filter processing for dashboard charts.\r\n * Replaces old handleFilters.ts functionality.\r\n */\r\n\r\nimport { Injectable, inject } from '@angular/core';\r\nimport { TranslocoService } from '@jsverse/transloco';\r\n\r\n/**\r\n * Extra filters configuration\r\n */\r\nexport interface ExtraFiltersConfig {\r\n dynamicFilters?: DynamicFilter[];\r\n staticFilters?: StaticFilter[];\r\n}\r\n\r\nexport interface DynamicFilter {\r\n key: string;\r\n configuration?: {\r\n isMultiple?: boolean;\r\n payload?: {\r\n selection?: Array<{\r\n filters?: Array<{\r\n propertyKey: string;\r\n propertyData?: any;\r\n }>;\r\n }>;\r\n };\r\n };\r\n}\r\n\r\nexport interface StaticFilter {\r\n key: string;\r\n value: any;\r\n}\r\n\r\n/**\r\n * Filter relation for conditional filter logic\r\n */\r\ninterface FilterRelation {\r\n type: string;\r\n key: string;\r\n value: 'deleteIfThereValue' | 'deleteIfThereNoValue';\r\n}\r\n\r\n@Injectable({\r\n providedIn: 'root',\r\n})\r\nexport class FilterUtilsService {\r\n private readonly transloco = inject(TranslocoService);\r\n\r\n // Registry of function placeholders\r\n private functionPlaceholders: Record<\r\n string,\r\n {\r\n pattern: RegExp;\r\n handler: (args: string[], params: Record<string, any>) => string;\r\n }\r\n > = {\r\n startOfMonth: {\r\n pattern: /^startOfMonth\\((.+?),(.+?)\\)$/,\r\n handler: (args, params) => {\r\n const month = parseInt(\r\n String(this.resolveValueForParam(args[0], params)),\r\n 10,\r\n );\r\n const year = parseInt(\r\n String(this.resolveValueForParam(args[1], params)),\r\n 10,\r\n );\r\n if (month && year) {\r\n return this.formatDateDMY(1, month, year);\r\n }\r\n return '';\r\n },\r\n },\r\n endOfMonth: {\r\n pattern: /^endOfMonth\\((.+?),(.+?)\\)$/,\r\n handler: (args, params) => {\r\n const month = parseInt(\r\n String(this.resolveValueForParam(args[0], params)),\r\n 10,\r\n );\r\n const year = parseInt(\r\n String(this.resolveValueForParam(args[1], params)),\r\n 10,\r\n );\r\n if (month && year) {\r\n const lastDay = this.getLastDayOfMonth(month, year);\r\n return this.formatDateDMY(lastDay, month, year);\r\n }\r\n return '';\r\n },\r\n },\r\n monthRange: {\r\n pattern: /^monthRange\\((.+?),(.+?)\\)$/,\r\n handler: (args, params) => {\r\n const month = parseInt(\r\n String(this.resolveValueForParam(args[0], params)),\r\n 10,\r\n );\r\n const year = parseInt(\r\n String(this.resolveValueForParam(args[1], params)),\r\n 10,\r\n );\r\n if (month && year) {\r\n const startDate = this.formatDateDMY(1, month, year);\r\n const lastDay = this.getLastDayOfMonth(month, year);\r\n const endDate = this.formatDateDMY(lastDay, month, year);\r\n return `${startDate},${endDate}`;\r\n }\r\n return '';\r\n },\r\n },\r\n };\r\n\r\n /**\r\n * Handle filters for custom chart requests\r\n */\r\n handleFiltersForCustom(\r\n configItem: any,\r\n params: Record<string, any>,\r\n extraFilters?: ExtraFiltersConfig,\r\n ): any {\r\n // Deep clone to avoid mutation\r\n const config = JSON.parse(JSON.stringify(configItem));\r\n\r\n // Process selections\r\n config.selection?.forEach((selection: any) => {\r\n // Replace placeholders in moduleId\r\n if (typeof selection.moduleId === 'string') {\r\n selection.moduleId = this.dynamicTextReplace(\r\n selection.moduleId,\r\n params,\r\n );\r\n }\r\n\r\n // Add dynamic filters from extraFilters\r\n if (extraFilters?.dynamicFilters?.length) {\r\n extraFilters.dynamicFilters.forEach((dynamicFilter) => {\r\n const filterKey = dynamicFilter.key;\r\n const paramValue = params?.[filterKey];\r\n\r\n if (\r\n paramValue !== undefined &&\r\n paramValue !== null &&\r\n paramValue !== ''\r\n ) {\r\n const configuration = dynamicFilter.configuration;\r\n const templateFilter =\r\n configuration?.payload?.selection?.[0]?.filters?.[0];\r\n\r\n if (templateFilter) {\r\n const newFilter: any = {\r\n propertyKey: templateFilter.propertyKey,\r\n propertyValue: paramValue,\r\n operation: configuration?.isMultiple ? 'OneOf' : 'Equal',\r\n logical: 'And',\r\n operationLevel: null,\r\n };\r\n\r\n if (templateFilter.propertyData) {\r\n newFilter.propertyData = templateFilter.propertyData;\r\n }\r\n\r\n if (!selection.filters) {\r\n selection.filters = [];\r\n }\r\n\r\n selection.filters.push(newFilter);\r\n }\r\n }\r\n });\r\n }\r\n\r\n // Process and filter existing filters\r\n selection.filters = selection.filters?.filter((filter: any) => {\r\n let shouldKeepFilter = true;\r\n let newPropertyValue = filter.propertyValue;\r\n\r\n // Handle placeholders in filter.propertyValue\r\n if (typeof newPropertyValue === 'string') {\r\n const matches = newPropertyValue.match(/{{(.*?)}}(\\?)?/g);\r\n if (matches) {\r\n for (const match of matches) {\r\n const processedValue = this.processCommaPlaceholders(\r\n match,\r\n params,\r\n );\r\n if (processedValue === null) {\r\n shouldKeepFilter = false;\r\n break;\r\n }\r\n newPropertyValue = newPropertyValue.replace(\r\n match,\r\n processedValue,\r\n );\r\n }\r\n\r\n if (shouldKeepFilter) {\r\n newPropertyValue =\r\n this.resolvePlaceholdersRecursively(newPropertyValue, params) ||\r\n newPropertyValue;\r\n filter.propertyValue = newPropertyValue;\r\n }\r\n }\r\n }\r\n\r\n // Remove if propertyValue is 'ignoreFilter'\r\n if (shouldKeepFilter && filter.propertyValue === 'ignoreFilter') {\r\n shouldKeepFilter = false;\r\n }\r\n\r\n // Check relations for conditional removal\r\n if (shouldKeepFilter && Array.isArray(filter.relations)) {\r\n for (const relation of filter.relations as FilterRelation[]) {\r\n if (relation.type === 'realationBetweenPageFilters') {\r\n const paramVal = params?.[relation.key];\r\n if (relation.value === 'deleteIfThereValue' && paramVal) {\r\n shouldKeepFilter = false;\r\n break;\r\n } else if (\r\n relation.value === 'deleteIfThereNoValue' &&\r\n !paramVal\r\n ) {\r\n shouldKeepFilter = false;\r\n break;\r\n }\r\n }\r\n }\r\n }\r\n\r\n return shouldKeepFilter;\r\n });\r\n\r\n // Clean up empty properties on filters\r\n selection.filters?.forEach((filter: any) => {\r\n if (!filter?.operation) delete filter.operation;\r\n if (!filter?.operationLevel) delete filter.operationLevel;\r\n if (!filter?.logical) delete filter.logical;\r\n });\r\n });\r\n\r\n return config;\r\n }\r\n\r\n /**\r\n * Handle filters for card/overview requests\r\n */\r\n handleFilterForCard(\r\n filters: any[],\r\n params: Record<string, any>,\r\n ): Record<string, any> {\r\n const filteredList = filters.filter((filter: any) => {\r\n const propertyValue = filter.propertyValue;\r\n const matches = propertyValue?.match(/{{(.*?)}}(\\?)?/g);\r\n\r\n let shouldKeepFilter = true;\r\n let newPropertyValue = propertyValue;\r\n\r\n if (matches) {\r\n for (const match of matches) {\r\n const processedValue = this.processCommaPlaceholders(match, params);\r\n if (processedValue === null) {\r\n shouldKeepFilter = false;\r\n break;\r\n }\r\n newPropertyValue = newPropertyValue.replace(match, processedValue);\r\n }\r\n\r\n if (shouldKeepFilter) {\r\n newPropertyValue =\r\n this.resolvePlaceholdersRecursively(newPropertyValue, params) ||\r\n newPropertyValue;\r\n filter.propertyValue = newPropertyValue;\r\n }\r\n }\r\n\r\n return shouldKeepFilter;\r\n });\r\n\r\n const result: Record<string, any> = {};\r\n filteredList.forEach((filter: any) => {\r\n result[filter.propertyKey] = filter.propertyValue;\r\n });\r\n\r\n return result;\r\n }\r\n\r\n /**\r\n * Handle filter for snapshot requests\r\n */\r\n handleFilterForSnapshot(\r\n levelId: string,\r\n params: Record<string, any>,\r\n ): string {\r\n return this.dynamicTextReplace(levelId, params);\r\n }\r\n\r\n /**\r\n * Replace dynamic placeholders in text\r\n */\r\n dynamicTextReplace(\r\n text: string,\r\n params: Record<string, any>,\r\n keepIfNotFound = false,\r\n ): string {\r\n if (!text) return '';\r\n\r\n const enrichedParams = {\r\n ...params,\r\n currentYear: new Date().getFullYear().toString(),\r\n currentWeek: this.getCurrentWeekOfYear().toString(),\r\n createdAt: new Date().toLocaleDateString('en-US', {\r\n day: 'numeric',\r\n month: 'long',\r\n year: 'numeric',\r\n }),\r\n };\r\n\r\n return text.replace(/\\{\\{([\\w.]+)\\}\\}/g, (match, key) => {\r\n let value = this.getNestedValue(enrichedParams, key);\r\n\r\n // Case-insensitive fallback\r\n if (value === undefined) {\r\n const lowerKey = key.toLowerCase();\r\n const foundKey = Object.keys(enrichedParams).find(\r\n (k) => k.toLowerCase() === lowerKey,\r\n );\r\n if (foundKey) {\r\n value = this.getNestedValue(enrichedParams, foundKey);\r\n }\r\n }\r\n\r\n return value !== undefined ? String(value) : keepIfNotFound ? match : '';\r\n });\r\n }\r\n\r\n // ============================================\r\n // Private Helper Methods\r\n // ============================================\r\n\r\n private resolveValueForParam(\r\n value: string,\r\n params: Record<string, any>,\r\n ): string | number | null {\r\n const orParts = value.split('||').map((p) => p.trim());\r\n\r\n for (const part of orParts) {\r\n if (!isNaN(Number(part))) {\r\n return Number(part);\r\n }\r\n\r\n const paramValue = this.getNestedValue(params, part);\r\n if (\r\n paramValue !== undefined &&\r\n paramValue !== null &&\r\n paramValue !== ''\r\n ) {\r\n return paramValue;\r\n }\r\n }\r\n\r\n return null;\r\n }\r\n\r\n private getLastDayOfMonth(month: number, year: number): number {\r\n return new Date(year, month, 0).getDate();\r\n }\r\n\r\n private formatDateDMY(day: number, month: number, year: number): string {\r\n const dd = String(day).padStart(2, '0');\r\n const mm = String(month).padStart(2, '0');\r\n return `${dd}-${mm}-${year}`;\r\n }\r\n\r\n private getCurrentWeekOfYear(): number {\r\n const now = new Date();\r\n const start = new Date(now.getFullYear(), 0, 1);\r\n const diff = now.getTime() - start.getTime();\r\n const oneWeek = 1000 * 60 * 60 * 24 * 7;\r\n return Math.ceil(diff / oneWeek);\r\n }\r\n\r\n private getNestedValue(obj: any, path: string): any {\r\n return path.split('.').reduce((current, key) => current?.[key], obj);\r\n }\r\n\r\n private processFunctionPlaceholder(\r\n placeholder: string,\r\n params: Record<string, any>,\r\n ): string | null {\r\n for (const funcName in this.functionPlaceholders) {\r\n const { pattern, handler } = this.functionPlaceholders[funcName];\r\n const match = placeholder.match(pattern);\r\n if (match) {\r\n const args = match.slice(1).map((arg) => arg.trim());\r\n return handler(args, params);\r\n }\r\n }\r\n return null;\r\n }\r\n\r\n private handleSpecialPlaceholders(\r\n placeholder: string,\r\n params: Record<string, any>,\r\n ): string | number {\r\n // Try function placeholders first\r\n const functionResult = this.processFunctionPlaceholder(placeholder, params);\r\n if (functionResult !== null) {\r\n return functionResult;\r\n }\r\n\r\n const getCurrentDate = () => new Date();\r\n const getFirstDateOfCurrentYear = () => {\r\n const currentYear = new Date().getFullYear();\r\n return new Date(Date.UTC(currentYear, 0, 1));\r\n };\r\n const getEndDateOfCurrentYear = () => {\r\n const currentYear = new Date().getFullYear();\r\n return new Date(Date.UTC(currentYear, 11, 31));\r\n };\r\n\r\n const adjustDate = (date: Date, amount: number, unit: string): Date => {\r\n const newDate = new Date(date);\r\n switch (unit) {\r\n case 'd':\r\n newDate.setUTCDate(newDate.getUTCDate() + amount);\r\n break;\r\n case 'm':\r\n newDate.setUTCMonth(newDate.getUTCMonth() + amount);\r\n break;\r\n case 'y':\r\n newDate.setUTCFullYear(newDate.getUTCFullYear() + amount);\r\n break;\r\n }\r\n return newDate;\r\n };\r\n\r\n // Date patterns\r\n const datePattern =\r\n /^(currentDate|firstDateOfCurrentYear|startDateOfCurrentYear|endDateOfCurrentYear)([+-]\\d+)?([dmy])?$/;\r\n const dateMatches = placeholder.match(datePattern);\r\n\r\n if (dateMatches) {\r\n const [, baseDate, adjustment = '', unit = ''] = dateMatches;\r\n\r\n let date: Date;\r\n switch (baseDate) {\r\n case 'currentDate':\r\n date = getCurrentDate();\r\n break;\r\n case 'firstDateOfCurrentYear':\r\n case 'startDateOfCurrentYear':\r\n date = getFirstDateOfCurrentYear();\r\n break;\r\n case 'endDateOfCurrentYear':\r\n date = getEndDateOfCurrentYear();\r\n break;\r\n default:\r\n date = getCurrentDate();\r\n }\r\n\r\n if (adjustment) {\r\n const amount = parseInt(adjustment, 10);\r\n const timeUnit = unit || 'd';\r\n date = adjustDate(date, amount, timeUnit);\r\n }\r\n\r\n return date.toISOString().split('T')[0];\r\n }\r\n\r\n // Number patterns\r\n const numberPattern = /^(\\d+)([+-]\\d+)?$/;\r\n const numberMatches = placeholder.match(numberPattern);\r\n\r\n if (numberMatches) {\r\n const [, baseNumber, adjustment = ''] = numberMatches;\r\n let resultNumber = parseInt(baseNumber, 10);\r\n\r\n if (adjustment) {\r\n resultNumber += parseInt(adjustment, 10);\r\n }\r\n\r\n return resultNumber.toString();\r\n }\r\n\r\n // Fallback to params\r\n return this.getNestedValue(params, placeholder) || '';\r\n }\r\n\r\n private resolveValue(value: string, params: Record<string, any>): any {\r\n // String literal\r\n if (\r\n (value.startsWith('\"') && value.endsWith('\"')) ||\r\n (value.startsWith(\"'\") && value.endsWith(\"'\"))\r\n ) {\r\n return value.slice(1, -1);\r\n }\r\n\r\n // Number\r\n if (!isNaN(Number(value))) {\r\n return Number(value);\r\n }\r\n\r\n // Boolean/null/undefined\r\n if (value === 'true') return true;\r\n if (value === 'false') return false;\r\n if (value === 'null') return null;\r\n if (value === 'undefined') return undefined;\r\n\r\n // Parameter key\r\n return this.getNestedValue(params, value);\r\n }\r\n\r\n private evaluateConditionalExpression(\r\n expression: string,\r\n params: Record<string, any>,\r\n ): string | null {\r\n const ternaryPattern = /^(.+?)\\s*\\?\\s*(.+?)\\s*:\\s*(.+?)$/;\r\n const match = expression.match(ternaryPattern);\r\n\r\n if (!match) {\r\n return null;\r\n }\r\n\r\n const [, condition, trueValue, falseValue] = match;\r\n\r\n let conditionResult = false;\r\n\r\n const comparisonPattern = /^(.+?)\\s*(==|===|!=|!==|>|<|>=|<=)\\s*(.+?)$/;\r\n const compMatch = condition.match(comparisonPattern);\r\n\r\n if (compMatch) {\r\n const [, left, operator, right] = compMatch;\r\n const leftValue = this.resolveValue(left.trim(), params);\r\n const rightValue = this.resolveValue(right.trim(), params);\r\n\r\n switch (operator) {\r\n case '==':\r\n case '===':\r\n conditionResult = leftValue == rightValue;\r\n break;\r\n case '!=':\r\n case '!==':\r\n conditionResult = leftValue != rightValue;\r\n break;\r\n case '>':\r\n conditionResult = leftValue > rightValue;\r\n break;\r\n case '<':\r\n conditionResult = leftValue < rightValue;\r\n break;\r\n case '>=':\r\n conditionResult = leftValue >= rightValue;\r\n break;\r\n case '<=':\r\n conditionResult = leftValue <= rightValue;\r\n break;\r\n }\r\n } else {\r\n const value = this.resolveValue(condition.trim(), params);\r\n conditionResult = !!value;\r\n }\r\n\r\n const resultValue = conditionResult ? trueValue.trim() : falseValue.trim();\r\n\r\n if (resultValue === 'null') return null;\r\n if (resultValue === 'undefined') return '';\r\n\r\n return String(this.resolveValue(resultValue, params));\r\n }\r\n\r\n private resolvePlaceholdersRecursively(\r\n value: string,\r\n params: Record<string, any>,\r\n ): string | null {\r\n if (!value.match(/{{(.*?)}}/)) {\r\n return value;\r\n }\r\n\r\n const replaced = this.dynamicTextReplace(value, params);\r\n\r\n if (replaced === value && replaced.match(/{{(.*?)}}/)) {\r\n return null;\r\n }\r\n\r\n if (replaced.match(/{{(.*?)}}/)) {\r\n return this.resolvePlaceholdersRecursively(replaced, params);\r\n }\r\n\r\n return replaced;\r\n }\r\n\r\n private processCommaPlaceholders(\r\n match: string,\r\n params: Record<string, any>,\r\n ): string | null {\r\n const rawContent = match.replace(/{{|}}/g, '');\r\n\r\n // Try function placeholders\r\n const functionResult = this.processFunctionPlaceholder(rawContent, params);\r\n if (functionResult !== null) {\r\n return functionResult;\r\n }\r\n\r\n // Try conditional expression\r\n if (rawContent.includes('?') && rawContent.includes(':')) {\r\n const conditionalResult = this.evaluateConditionalExpression(\r\n rawContent,\r\n params,\r\n );\r\n if (conditionalResult !== null) {\r\n return conditionalResult;\r\n }\r\n }\r\n\r\n // Remove optional marker and process comma-separated params\r\n const cleanContent = rawContent.replace(/\\?/g, '');\r\n const paramNames = cleanContent.split(',');\r\n const paramValues: string[] = [];\r\n\r\n for (const paramName of paramNames) {\r\n const trimmedName = paramName.trim();\r\n const orParts = trimmedName.split('||').map((p) => p.trim());\r\n\r\n let resolvedValueForThisPart: string | null = null;\r\n for (const orPart of orParts) {\r\n const resolvedName = this.resolvePlaceholdersRecursively(\r\n orPart,\r\n params,\r\n );\r\n if (resolvedName) {\r\n const finalValue = this.handleSpecialPlaceholders(\r\n resolvedName,\r\n params,\r\n );\r\n if (finalValue !== '') {\r\n resolvedValueForThisPart = String(finalValue);\r\n break;\r\n }\r\n }\r\n }\r\n\r\n if (!resolvedValueForThisPart) {\r\n return null;\r\n }\r\n\r\n paramValues.push(resolvedValueForThisPart);\r\n }\r\n\r\n const hasEmptyValues = paramValues.some(\r\n (value) => value === '' || value === undefined,\r\n );\r\n if (hasEmptyValues) {\r\n return null;\r\n }\r\n\r\n return paramValues.join(',');\r\n }\r\n}\r\n","/**\r\n * Dashboard Dialog Component\r\n *\r\n * A flexible dialog wrapper that renders a DashboardItem inside.\r\n * Uses the same ItemConfig structure - maximum code reuse.\r\n *\r\n * The dialog simply wraps DashboardItem, so any chart/table/card\r\n * that works inline will work in a dialog too.\r\n */\r\n\r\nimport {\r\n Component,\r\n inject,\r\n input,\r\n signal,\r\n computed,\r\n OnInit,\r\n} from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { TranslocoDirective, TranslocoService } from '@jsverse/transloco';\r\nimport { ModalService } from '@masterteam/components/modal';\r\nimport { ModalRef } from '@masterteam/components/dialog';\r\nimport { Button } from '@masterteam/components/button';\r\n\r\nimport { ItemConfig } from '../../../models/dashboard.model';\r\nimport { DashboardItemStoreService } from '../../services/item-store.service';\r\nimport { FilterUtilsService } from '../../services/filter-utils.service';\r\nimport { DashboardItem } from '../../dashboard-item';\r\n\r\n/**\r\n * Dashboard Dialog Component\r\n *\r\n * Opened via ModalService, renders a DashboardItem inside.\r\n * Usage:\r\n * this.modalService.open(DashboardDialogComponent, {\r\n * data: { config: itemConfig, params: queryParams }\r\n * });\r\n */\r\n@Component({\r\n selector: 'db-dashboard-dialog',\r\n standalone: true,\r\n imports: [CommonModule, TranslocoDirective, Button, DashboardItem],\r\n templateUrl: './dashboard-dialog.component.html',\r\n})\r\nexport class DashboardDialogComponent implements OnInit {\r\n private readonly itemStore = inject(DashboardItemStoreService);\r\n private readonly filterUtils = inject(FilterUtilsService);\r\n private readonly transloco = inject(TranslocoService);\r\n readonly modal = inject(ModalService);\r\n private readonly ref = inject(ModalRef);\r\n\r\n // Inputs from modal data\r\n readonly configInput = input<ItemConfig | null>(null, { alias: 'config' });\r\n readonly paramsInput = input<Record<string, any>>({}, { alias: 'params' });\r\n readonly titleInput = input<string | null>(null, { alias: 'title' });\r\n\r\n // State\r\n readonly dialogConfig = signal<ItemConfig | null>(null);\r\n readonly actionParams = signal<Record<string, any>>({});\r\n\r\n // Computed\r\n readonly mergedParams = computed(() => ({\r\n ...this.paramsInput(),\r\n ...this.actionParams(),\r\n }));\r\n\r\n readonly processedConfig = computed(() => {\r\n debugger;\r\n\r\n const config = this.dialogConfig();\r\n if (!config) return null;\r\n\r\n // Deep clone and process filters\r\n const cloned = JSON.parse(JSON.stringify(config)) as ItemConfig;\r\n\r\n // Apply filter processing if service config exists\r\n if (cloned.serviceConfig) {\r\n const processed = this.filterUtils.handleFiltersForCustom(\r\n cloned.serviceConfig,\r\n this.mergedParams(),\r\n );\r\n cloned.serviceConfig = processed;\r\n }\r\n return cloned;\r\n });\r\n\r\n ngOnInit(): void {\r\n // Set config from input\r\n const config = this.configInput();\r\n if (config) {\r\n this.dialogConfig.set(config);\r\n }\r\n\r\n // Set params from input\r\n const params = this.paramsInput();\r\n if (params) {\r\n this.actionParams.set(params);\r\n }\r\n }\r\n\r\n /**\r\n * Close dialog\r\n */\r\n close(result?: any): void {\r\n this.ref.close(result);\r\n }\r\n\r\n /**\r\n * Handle actions from the inner DashboardItem\r\n */\r\n onItemAction(event: any): void {\r\n // If it's a close action, close the dialog\r\n if (event?.type === 'closeDialog') {\r\n this.close(event?.data);\r\n return;\r\n }\r\n\r\n // For navigation actions, close dialog and let parent handle\r\n if (event?.type === 'navigate' || event?.type === 'navigateTo') {\r\n this.close(event);\r\n return;\r\n }\r\n\r\n // For other actions, could emit to parent or handle internally\r\n console.log('Dialog action:', event);\r\n }\r\n}\r\n\r\n/**\r\n * Helper service for opening dashboard dialogs\r\n */\r\nexport function openDashboardDialog(\r\n modalService: ModalService,\r\n config: ItemConfig,\r\n params?: Record<string, any>,\r\n options?: {\r\n title?: string;\r\n size?: 'sm' | 'md' | 'lg' | 'xl' | 'full';\r\n },\r\n): ModalRef {\r\n const sizeClass = {\r\n sm: 'max-w-md',\r\n md: 'max-w-2xl',\r\n lg: 'max-w-4xl',\r\n xl: 'max-w-6xl',\r\n full: 'max-w-[95vw]',\r\n }[options?.size || 'lg'];\r\n\r\n return modalService.openModal(DashboardDialogComponent, 'dialog', {\r\n header: options?.title || '',\r\n styleClass: sizeClass,\r\n data: {\r\n config,\r\n params: params || {},\r\n title: options?.title,\r\n },\r\n });\r\n}\r\n","<div\r\n [class]=\"modal.contentClass + ' p-0 min-h-[300px] max-h-[80vh] overflow-auto'\"\r\n *transloco=\"let t; prefix: 'dashboard'\"\r\n>\r\n <!-- Dashboard Item renders whatever the config specifies -->\r\n @if (processedConfig()) {\r\n <mt-dashboard-item\r\n [config]=\"processedConfig()!\"\r\n [queryParams]=\"mergedParams()\"\r\n [isDialog]=\"true\"\r\n (actionTriggered)=\"onItemAction($event)\"\r\n />\r\n } @else {\r\n <!-- Loading state while config is being processed -->\r\n <div class=\"flex items-center justify-center min-h-[200px]\">\r\n <i class=\"pi pi-spin pi-spinner text-4xl text-primary\"></i>\r\n </div>\r\n }\r\n</div>\r\n<!--\r\n<div [class]=\"modal.footerClass\" *transloco=\"let t; prefix: 'dashboard'\">\r\n <mt-button [label]=\"t('close')\" severity=\"secondary\" (onClick)=\"close()\" />\r\n</div> -->\r\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"masterteam-dashboard-builder-dashboard-dialog.component-697C4AOo.mjs","sources":["../../../../packages/masterteam/dashboard-builder/src/lib/dashboard-item/services/filter-utils.service.ts","../../../../packages/masterteam/dashboard-builder/src/lib/dashboard-item/components/dashboard-dialog/dashboard-dialog.component.ts","../../../../packages/masterteam/dashboard-builder/src/lib/dashboard-item/components/dashboard-dialog/dashboard-dialog.component.html"],"sourcesContent":["/**\r\n * Filter Utilities Service\r\n *\r\n * Handles dynamic filter processing for dashboard charts.\r\n * Replaces old handleFilters.ts functionality.\r\n */\r\n\r\nimport { Injectable, inject } from '@angular/core';\r\nimport { TranslocoService } from '@jsverse/transloco';\r\n\r\n/**\r\n * Extra filters configuration\r\n */\r\nexport interface ExtraFiltersConfig {\r\n dynamicFilters?: DynamicFilter[];\r\n staticFilters?: StaticFilter[];\r\n}\r\n\r\nexport interface DynamicFilter {\r\n key: string;\r\n configuration?: {\r\n isMultiple?: boolean;\r\n payload?: {\r\n selection?: Array<{\r\n filters?: Array<{\r\n propertyKey: string;\r\n propertyData?: any;\r\n }>;\r\n }>;\r\n };\r\n };\r\n}\r\n\r\nexport interface StaticFilter {\r\n key: string;\r\n value: any;\r\n}\r\n\r\n/**\r\n * Filter relation for conditional filter logic\r\n */\r\ninterface FilterRelation {\r\n type: string;\r\n key: string;\r\n value: 'deleteIfThereValue' | 'deleteIfThereNoValue';\r\n}\r\n\r\n@Injectable({\r\n providedIn: 'root',\r\n})\r\nexport class FilterUtilsService {\r\n private readonly transloco = inject(TranslocoService);\r\n\r\n // Registry of function placeholders\r\n private functionPlaceholders: Record<\r\n string,\r\n {\r\n pattern: RegExp;\r\n handler: (args: string[], params: Record<string, any>) => string;\r\n }\r\n > = {\r\n startOfMonth: {\r\n pattern: /^startOfMonth\\((.+?),(.+?)\\)$/,\r\n handler: (args, params) => {\r\n const month = parseInt(\r\n String(this.resolveValueForParam(args[0], params)),\r\n 10,\r\n );\r\n const year = parseInt(\r\n String(this.resolveValueForParam(args[1], params)),\r\n 10,\r\n );\r\n if (month && year) {\r\n return this.formatDateDMY(1, month, year);\r\n }\r\n return '';\r\n },\r\n },\r\n endOfMonth: {\r\n pattern: /^endOfMonth\\((.+?),(.+?)\\)$/,\r\n handler: (args, params) => {\r\n const month = parseInt(\r\n String(this.resolveValueForParam(args[0], params)),\r\n 10,\r\n );\r\n const year = parseInt(\r\n String(this.resolveValueForParam(args[1], params)),\r\n 10,\r\n );\r\n if (month && year) {\r\n const lastDay = this.getLastDayOfMonth(month, year);\r\n return this.formatDateDMY(lastDay, month, year);\r\n }\r\n return '';\r\n },\r\n },\r\n monthRange: {\r\n pattern: /^monthRange\\((.+?),(.+?)\\)$/,\r\n handler: (args, params) => {\r\n const month = parseInt(\r\n String(this.resolveValueForParam(args[0], params)),\r\n 10,\r\n );\r\n const year = parseInt(\r\n String(this.resolveValueForParam(args[1], params)),\r\n 10,\r\n );\r\n if (month && year) {\r\n const startDate = this.formatDateDMY(1, month, year);\r\n const lastDay = this.getLastDayOfMonth(month, year);\r\n const endDate = this.formatDateDMY(lastDay, month, year);\r\n return `${startDate},${endDate}`;\r\n }\r\n return '';\r\n },\r\n },\r\n };\r\n\r\n /**\r\n * Handle filters for custom chart requests\r\n */\r\n handleFiltersForCustom(\r\n configItem: any,\r\n params: Record<string, any>,\r\n extraFilters?: ExtraFiltersConfig,\r\n ): any {\r\n // Deep clone to avoid mutation\r\n const config = JSON.parse(JSON.stringify(configItem));\r\n\r\n // Process selections\r\n config.selection?.forEach((selection: any) => {\r\n // Replace placeholders in moduleId\r\n if (typeof selection.moduleId === 'string') {\r\n selection.moduleId = this.dynamicTextReplace(\r\n selection.moduleId,\r\n params,\r\n );\r\n }\r\n\r\n // Add dynamic filters from extraFilters\r\n if (extraFilters?.dynamicFilters?.length) {\r\n extraFilters.dynamicFilters.forEach((dynamicFilter) => {\r\n const filterKey = dynamicFilter.key;\r\n const paramValue = params?.[filterKey];\r\n\r\n if (\r\n paramValue !== undefined &&\r\n paramValue !== null &&\r\n paramValue !== ''\r\n ) {\r\n const configuration = dynamicFilter.configuration;\r\n const templateFilter =\r\n configuration?.payload?.selection?.[0]?.filters?.[0];\r\n\r\n if (templateFilter) {\r\n const newFilter: any = {\r\n propertyKey: templateFilter.propertyKey,\r\n propertyValue: paramValue,\r\n operation: configuration?.isMultiple ? 'OneOf' : 'Equal',\r\n logical: 'And',\r\n operationLevel: null,\r\n };\r\n\r\n if (templateFilter.propertyData) {\r\n newFilter.propertyData = templateFilter.propertyData;\r\n }\r\n\r\n if (!selection.filters) {\r\n selection.filters = [];\r\n }\r\n\r\n selection.filters.push(newFilter);\r\n }\r\n }\r\n });\r\n }\r\n\r\n // Process and filter existing filters\r\n selection.filters = selection.filters?.filter((filter: any) => {\r\n let shouldKeepFilter = true;\r\n let newPropertyValue = filter.propertyValue;\r\n\r\n // Handle placeholders in filter.propertyValue\r\n if (typeof newPropertyValue === 'string') {\r\n const matches = newPropertyValue.match(/{{(.*?)}}(\\?)?/g);\r\n if (matches) {\r\n for (const match of matches) {\r\n const processedValue = this.processCommaPlaceholders(\r\n match,\r\n params,\r\n );\r\n if (processedValue === null) {\r\n shouldKeepFilter = false;\r\n break;\r\n }\r\n newPropertyValue = newPropertyValue.replace(\r\n match,\r\n processedValue,\r\n );\r\n }\r\n\r\n if (shouldKeepFilter) {\r\n newPropertyValue =\r\n this.resolvePlaceholdersRecursively(newPropertyValue, params) ||\r\n newPropertyValue;\r\n filter.propertyValue = newPropertyValue;\r\n }\r\n }\r\n }\r\n\r\n // Remove if propertyValue is 'ignoreFilter'\r\n if (shouldKeepFilter && filter.propertyValue === 'ignoreFilter') {\r\n shouldKeepFilter = false;\r\n }\r\n\r\n // Check relations for conditional removal\r\n if (shouldKeepFilter && Array.isArray(filter.relations)) {\r\n for (const relation of filter.relations as FilterRelation[]) {\r\n if (relation.type === 'realationBetweenPageFilters') {\r\n const paramVal = params?.[relation.key];\r\n if (relation.value === 'deleteIfThereValue' && paramVal) {\r\n shouldKeepFilter = false;\r\n break;\r\n } else if (\r\n relation.value === 'deleteIfThereNoValue' &&\r\n !paramVal\r\n ) {\r\n shouldKeepFilter = false;\r\n break;\r\n }\r\n }\r\n }\r\n }\r\n\r\n return shouldKeepFilter;\r\n });\r\n\r\n // Clean up empty properties on filters\r\n selection.filters?.forEach((filter: any) => {\r\n if (!filter?.operation) delete filter.operation;\r\n if (!filter?.operationLevel) delete filter.operationLevel;\r\n if (!filter?.logical) delete filter.logical;\r\n });\r\n });\r\n\r\n return config;\r\n }\r\n\r\n /**\r\n * Handle filters for card/overview requests\r\n */\r\n handleFilterForCard(\r\n filters: any[],\r\n params: Record<string, any>,\r\n ): Record<string, any> {\r\n const filteredList = filters.filter((filter: any) => {\r\n const propertyValue = filter.propertyValue;\r\n const matches = propertyValue?.match(/{{(.*?)}}(\\?)?/g);\r\n\r\n let shouldKeepFilter = true;\r\n let newPropertyValue = propertyValue;\r\n\r\n if (matches) {\r\n for (const match of matches) {\r\n const processedValue = this.processCommaPlaceholders(match, params);\r\n if (processedValue === null) {\r\n shouldKeepFilter = false;\r\n break;\r\n }\r\n newPropertyValue = newPropertyValue.replace(match, processedValue);\r\n }\r\n\r\n if (shouldKeepFilter) {\r\n newPropertyValue =\r\n this.resolvePlaceholdersRecursively(newPropertyValue, params) ||\r\n newPropertyValue;\r\n filter.propertyValue = newPropertyValue;\r\n }\r\n }\r\n\r\n return shouldKeepFilter;\r\n });\r\n\r\n const result: Record<string, any> = {};\r\n filteredList.forEach((filter: any) => {\r\n result[filter.propertyKey] = filter.propertyValue;\r\n });\r\n\r\n return result;\r\n }\r\n\r\n /**\r\n * Handle filter for snapshot requests\r\n */\r\n handleFilterForSnapshot(\r\n levelId: string,\r\n params: Record<string, any>,\r\n ): string {\r\n return this.dynamicTextReplace(levelId, params);\r\n }\r\n\r\n /**\r\n * Replace dynamic placeholders in text\r\n */\r\n dynamicTextReplace(\r\n text: string,\r\n params: Record<string, any>,\r\n keepIfNotFound = false,\r\n ): string {\r\n if (!text) return '';\r\n\r\n const enrichedParams = {\r\n ...params,\r\n currentYear: new Date().getFullYear().toString(),\r\n currentWeek: this.getCurrentWeekOfYear().toString(),\r\n createdAt: new Date().toLocaleDateString('en-US', {\r\n day: 'numeric',\r\n month: 'long',\r\n year: 'numeric',\r\n }),\r\n };\r\n\r\n return text.replace(/\\{\\{([\\w.]+)\\}\\}/g, (match, key) => {\r\n let value = this.getNestedValue(enrichedParams, key);\r\n\r\n // Case-insensitive fallback\r\n if (value === undefined) {\r\n const lowerKey = key.toLowerCase();\r\n const foundKey = Object.keys(enrichedParams).find(\r\n (k) => k.toLowerCase() === lowerKey,\r\n );\r\n if (foundKey) {\r\n value = this.getNestedValue(enrichedParams, foundKey);\r\n }\r\n }\r\n\r\n return value !== undefined ? String(value) : keepIfNotFound ? match : '';\r\n });\r\n }\r\n\r\n // ============================================\r\n // Private Helper Methods\r\n // ============================================\r\n\r\n private resolveValueForParam(\r\n value: string,\r\n params: Record<string, any>,\r\n ): string | number | null {\r\n const orParts = value.split('||').map((p) => p.trim());\r\n\r\n for (const part of orParts) {\r\n if (!isNaN(Number(part))) {\r\n return Number(part);\r\n }\r\n\r\n const paramValue = this.getNestedValue(params, part);\r\n if (\r\n paramValue !== undefined &&\r\n paramValue !== null &&\r\n paramValue !== ''\r\n ) {\r\n return paramValue;\r\n }\r\n }\r\n\r\n return null;\r\n }\r\n\r\n private getLastDayOfMonth(month: number, year: number): number {\r\n return new Date(year, month, 0).getDate();\r\n }\r\n\r\n private formatDateDMY(day: number, month: number, year: number): string {\r\n const dd = String(day).padStart(2, '0');\r\n const mm = String(month).padStart(2, '0');\r\n return `${dd}-${mm}-${year}`;\r\n }\r\n\r\n private getCurrentWeekOfYear(): number {\r\n const now = new Date();\r\n const start = new Date(now.getFullYear(), 0, 1);\r\n const diff = now.getTime() - start.getTime();\r\n const oneWeek = 1000 * 60 * 60 * 24 * 7;\r\n return Math.ceil(diff / oneWeek);\r\n }\r\n\r\n private getNestedValue(obj: any, path: string): any {\r\n return path.split('.').reduce((current, key) => current?.[key], obj);\r\n }\r\n\r\n private processFunctionPlaceholder(\r\n placeholder: string,\r\n params: Record<string, any>,\r\n ): string | null {\r\n for (const funcName in this.functionPlaceholders) {\r\n const { pattern, handler } = this.functionPlaceholders[funcName];\r\n const match = placeholder.match(pattern);\r\n if (match) {\r\n const args = match.slice(1).map((arg) => arg.trim());\r\n return handler(args, params);\r\n }\r\n }\r\n return null;\r\n }\r\n\r\n private handleSpecialPlaceholders(\r\n placeholder: string,\r\n params: Record<string, any>,\r\n ): string | number {\r\n // Try function placeholders first\r\n const functionResult = this.processFunctionPlaceholder(placeholder, params);\r\n if (functionResult !== null) {\r\n return functionResult;\r\n }\r\n\r\n const getCurrentDate = () => new Date();\r\n const getFirstDateOfCurrentYear = () => {\r\n const currentYear = new Date().getFullYear();\r\n return new Date(Date.UTC(currentYear, 0, 1));\r\n };\r\n const getEndDateOfCurrentYear = () => {\r\n const currentYear = new Date().getFullYear();\r\n return new Date(Date.UTC(currentYear, 11, 31));\r\n };\r\n\r\n const adjustDate = (date: Date, amount: number, unit: string): Date => {\r\n const newDate = new Date(date);\r\n switch (unit) {\r\n case 'd':\r\n newDate.setUTCDate(newDate.getUTCDate() + amount);\r\n break;\r\n case 'm':\r\n newDate.setUTCMonth(newDate.getUTCMonth() + amount);\r\n break;\r\n case 'y':\r\n newDate.setUTCFullYear(newDate.getUTCFullYear() + amount);\r\n break;\r\n }\r\n return newDate;\r\n };\r\n\r\n // Date patterns\r\n const datePattern =\r\n /^(currentDate|firstDateOfCurrentYear|startDateOfCurrentYear|endDateOfCurrentYear)([+-]\\d+)?([dmy])?$/;\r\n const dateMatches = placeholder.match(datePattern);\r\n\r\n if (dateMatches) {\r\n const [, baseDate, adjustment = '', unit = ''] = dateMatches;\r\n\r\n let date: Date;\r\n switch (baseDate) {\r\n case 'currentDate':\r\n date = getCurrentDate();\r\n break;\r\n case 'firstDateOfCurrentYear':\r\n case 'startDateOfCurrentYear':\r\n date = getFirstDateOfCurrentYear();\r\n break;\r\n case 'endDateOfCurrentYear':\r\n date = getEndDateOfCurrentYear();\r\n break;\r\n default:\r\n date = getCurrentDate();\r\n }\r\n\r\n if (adjustment) {\r\n const amount = parseInt(adjustment, 10);\r\n const timeUnit = unit || 'd';\r\n date = adjustDate(date, amount, timeUnit);\r\n }\r\n\r\n return date.toISOString().split('T')[0];\r\n }\r\n\r\n // Number patterns\r\n const numberPattern = /^(\\d+)([+-]\\d+)?$/;\r\n const numberMatches = placeholder.match(numberPattern);\r\n\r\n if (numberMatches) {\r\n const [, baseNumber, adjustment = ''] = numberMatches;\r\n let resultNumber = parseInt(baseNumber, 10);\r\n\r\n if (adjustment) {\r\n resultNumber += parseInt(adjustment, 10);\r\n }\r\n\r\n return resultNumber.toString();\r\n }\r\n\r\n // Fallback to params\r\n return this.getNestedValue(params, placeholder) || '';\r\n }\r\n\r\n private resolveValue(value: string, params: Record<string, any>): any {\r\n // String literal\r\n if (\r\n (value.startsWith('\"') && value.endsWith('\"')) ||\r\n (value.startsWith(\"'\") && value.endsWith(\"'\"))\r\n ) {\r\n return value.slice(1, -1);\r\n }\r\n\r\n // Number\r\n if (!isNaN(Number(value))) {\r\n return Number(value);\r\n }\r\n\r\n // Boolean/null/undefined\r\n if (value === 'true') return true;\r\n if (value === 'false') return false;\r\n if (value === 'null') return null;\r\n if (value === 'undefined') return undefined;\r\n\r\n // Parameter key\r\n return this.getNestedValue(params, value);\r\n }\r\n\r\n private evaluateConditionalExpression(\r\n expression: string,\r\n params: Record<string, any>,\r\n ): string | null {\r\n const ternaryPattern = /^(.+?)\\s*\\?\\s*(.+?)\\s*:\\s*(.+?)$/;\r\n const match = expression.match(ternaryPattern);\r\n\r\n if (!match) {\r\n return null;\r\n }\r\n\r\n const [, condition, trueValue, falseValue] = match;\r\n\r\n let conditionResult = false;\r\n\r\n const comparisonPattern = /^(.+?)\\s*(==|===|!=|!==|>|<|>=|<=)\\s*(.+?)$/;\r\n const compMatch = condition.match(comparisonPattern);\r\n\r\n if (compMatch) {\r\n const [, left, operator, right] = compMatch;\r\n const leftValue = this.resolveValue(left.trim(), params);\r\n const rightValue = this.resolveValue(right.trim(), params);\r\n\r\n switch (operator) {\r\n case '==':\r\n case '===':\r\n conditionResult = leftValue == rightValue;\r\n break;\r\n case '!=':\r\n case '!==':\r\n conditionResult = leftValue != rightValue;\r\n break;\r\n case '>':\r\n conditionResult = leftValue > rightValue;\r\n break;\r\n case '<':\r\n conditionResult = leftValue < rightValue;\r\n break;\r\n case '>=':\r\n conditionResult = leftValue >= rightValue;\r\n break;\r\n case '<=':\r\n conditionResult = leftValue <= rightValue;\r\n break;\r\n }\r\n } else {\r\n const value = this.resolveValue(condition.trim(), params);\r\n conditionResult = !!value;\r\n }\r\n\r\n const resultValue = conditionResult ? trueValue.trim() : falseValue.trim();\r\n\r\n if (resultValue === 'null') return null;\r\n if (resultValue === 'undefined') return '';\r\n\r\n return String(this.resolveValue(resultValue, params));\r\n }\r\n\r\n private resolvePlaceholdersRecursively(\r\n value: string,\r\n params: Record<string, any>,\r\n ): string | null {\r\n if (!value.match(/{{(.*?)}}/)) {\r\n return value;\r\n }\r\n\r\n const replaced = this.dynamicTextReplace(value, params);\r\n\r\n if (replaced === value && replaced.match(/{{(.*?)}}/)) {\r\n return null;\r\n }\r\n\r\n if (replaced.match(/{{(.*?)}}/)) {\r\n return this.resolvePlaceholdersRecursively(replaced, params);\r\n }\r\n\r\n return replaced;\r\n }\r\n\r\n private processCommaPlaceholders(\r\n match: string,\r\n params: Record<string, any>,\r\n ): string | null {\r\n const rawContent = match.replace(/{{|}}/g, '');\r\n\r\n // Try function placeholders\r\n const functionResult = this.processFunctionPlaceholder(rawContent, params);\r\n if (functionResult !== null) {\r\n return functionResult;\r\n }\r\n\r\n // Try conditional expression\r\n if (rawContent.includes('?') && rawContent.includes(':')) {\r\n const conditionalResult = this.evaluateConditionalExpression(\r\n rawContent,\r\n params,\r\n );\r\n if (conditionalResult !== null) {\r\n return conditionalResult;\r\n }\r\n }\r\n\r\n // Remove optional marker and process comma-separated params\r\n const cleanContent = rawContent.replace(/\\?/g, '');\r\n const paramNames = cleanContent.split(',');\r\n const paramValues: string[] = [];\r\n\r\n for (const paramName of paramNames) {\r\n const trimmedName = paramName.trim();\r\n const orParts = trimmedName.split('||').map((p) => p.trim());\r\n\r\n let resolvedValueForThisPart: string | null = null;\r\n for (const orPart of orParts) {\r\n const resolvedName = this.resolvePlaceholdersRecursively(\r\n orPart,\r\n params,\r\n );\r\n if (resolvedName) {\r\n const finalValue = this.handleSpecialPlaceholders(\r\n resolvedName,\r\n params,\r\n );\r\n if (finalValue !== '') {\r\n resolvedValueForThisPart = String(finalValue);\r\n break;\r\n }\r\n }\r\n }\r\n\r\n if (!resolvedValueForThisPart) {\r\n return null;\r\n }\r\n\r\n paramValues.push(resolvedValueForThisPart);\r\n }\r\n\r\n const hasEmptyValues = paramValues.some(\r\n (value) => value === '' || value === undefined,\r\n );\r\n if (hasEmptyValues) {\r\n return null;\r\n }\r\n\r\n return paramValues.join(',');\r\n }\r\n}\r\n","/**\r\n * Dashboard Dialog Component\r\n *\r\n * A flexible dialog wrapper that renders a DashboardItem inside.\r\n * Uses the same ItemConfig structure - maximum code reuse.\r\n *\r\n * The dialog simply wraps DashboardItem, so any chart/table/card\r\n * that works inline will work in a dialog too.\r\n */\r\n\r\nimport {\r\n Component,\r\n inject,\r\n input,\r\n signal,\r\n computed,\r\n OnInit,\r\n} from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { TranslocoDirective, TranslocoService } from '@jsverse/transloco';\r\nimport { ModalService } from '@masterteam/components/modal';\r\nimport { ModalRef } from '@masterteam/components/dialog';\r\nimport { Button } from '@masterteam/components/button';\r\n\r\nimport { ItemConfig } from '../../../models/dashboard.model';\r\nimport { DashboardItemStoreService } from '../../services/item-store.service';\r\nimport { FilterUtilsService } from '../../services/filter-utils.service';\r\nimport { DashboardItem } from '../../dashboard-item';\r\n\r\n/**\r\n * Dashboard Dialog Component\r\n *\r\n * Opened via ModalService, renders a DashboardItem inside.\r\n * Usage:\r\n * this.modalService.open(DashboardDialogComponent, {\r\n * data: { config: itemConfig, params: queryParams }\r\n * });\r\n */\r\n@Component({\r\n selector: 'mt-dashboard-dialog',\r\n standalone: true,\r\n imports: [CommonModule, TranslocoDirective, Button, DashboardItem],\r\n templateUrl: './dashboard-dialog.component.html',\r\n})\r\nexport class DashboardDialogComponent implements OnInit {\r\n private readonly itemStore = inject(DashboardItemStoreService);\r\n private readonly filterUtils = inject(FilterUtilsService);\r\n private readonly transloco = inject(TranslocoService);\r\n readonly modal = inject(ModalService);\r\n private readonly ref = inject(ModalRef);\r\n\r\n // Inputs from modal data\r\n readonly config = input<ItemConfig | null>(null);\r\n readonly params = input<Record<string, any>>({});\r\n readonly title = input<string | null>(null);\r\n\r\n // State\r\n readonly dialogConfig = signal<ItemConfig | null>(null);\r\n readonly actionParams = signal<Record<string, any>>({});\r\n\r\n // Computed\r\n readonly mergedParams = computed(() => ({\r\n ...this.params(),\r\n ...this.actionParams(),\r\n }));\r\n\r\n readonly processedConfig = computed(() => {\r\n debugger;\r\n\r\n const config = this.dialogConfig();\r\n if (!config) return null;\r\n\r\n // Deep clone and process filters\r\n const cloned = JSON.parse(JSON.stringify(config)) as ItemConfig;\r\n\r\n // Apply filter processing if service config exists\r\n if (cloned.serviceConfig) {\r\n const processed = this.filterUtils.handleFiltersForCustom(\r\n cloned.serviceConfig,\r\n this.mergedParams(),\r\n );\r\n cloned.serviceConfig = processed;\r\n }\r\n return cloned;\r\n });\r\n\r\n ngOnInit(): void {\r\n // Set config from input\r\n const config = this.config();\r\n if (config) {\r\n this.dialogConfig.set(config);\r\n }\r\n\r\n // Set params from input\r\n const params = this.params();\r\n if (params) {\r\n this.actionParams.set(params);\r\n }\r\n }\r\n\r\n /**\r\n * Close dialog\r\n */\r\n close(result?: any): void {\r\n this.ref.close(result);\r\n }\r\n\r\n /**\r\n * Handle actions from the inner DashboardItem\r\n */\r\n onItemAction(event: any): void {\r\n // If it's a close action, close the dialog\r\n if (event?.type === 'closeDialog') {\r\n this.close(event?.data);\r\n return;\r\n }\r\n\r\n // For navigation actions, close dialog and let parent handle\r\n if (event?.type === 'navigate' || event?.type === 'navigateTo') {\r\n this.close(event);\r\n return;\r\n }\r\n\r\n // For other actions, could emit to parent or handle internally\r\n console.log('Dialog action:', event);\r\n }\r\n}\r\n\r\n/**\r\n * Helper service for opening dashboard dialogs\r\n */\r\nexport function openDashboardDialog(\r\n modalService: ModalService,\r\n config: ItemConfig,\r\n params?: Record<string, any>,\r\n options?: {\r\n title?: string;\r\n size?: 'sm' | 'md' | 'lg' | 'xl' | 'full';\r\n },\r\n): ModalRef {\r\n const sizeClass = {\r\n sm: 'max-w-md',\r\n md: 'max-w-2xl',\r\n lg: 'max-w-4xl',\r\n xl: 'max-w-6xl',\r\n full: 'max-w-[95vw]',\r\n }[options?.size || 'lg'];\r\n\r\n return modalService.openModal(DashboardDialogComponent, 'dialog', {\r\n header: options?.title || '',\r\n styleClass: sizeClass,\r\n data: {\r\n config,\r\n params: params || {},\r\n title: options?.title,\r\n },\r\n });\r\n}\r\n","<div\r\n [class]=\"modal.contentClass + ' p-0 min-h-[300px] max-h-[80vh] overflow-auto'\"\r\n *transloco=\"let t; prefix: 'dashboard'\"\r\n>\r\n <!-- Dashboard Item renders whatever the config specifies -->\r\n @if (processedConfig()) {\r\n <mt-dashboard-item\r\n [config]=\"processedConfig()!\"\r\n [queryParams]=\"mergedParams()\"\r\n [isDialog]=\"true\"\r\n (actionTriggered)=\"onItemAction($event)\"\r\n />\r\n } @else {\r\n <!-- Loading state while config is being processed -->\r\n <div class=\"flex items-center justify-center min-h-[200px]\">\r\n <i class=\"pi pi-spin pi-spinner text-4xl text-primary\"></i>\r\n </div>\r\n }\r\n</div>\r\n<!--\r\n<div [class]=\"modal.footerClass\" *transloco=\"let t; prefix: 'dashboard'\">\r\n <mt-button [label]=\"t('close')\" severity=\"secondary\" (onClick)=\"close()\" />\r\n</div> -->\r\n"],"names":[],"mappings":";;;;;;;;;AAAA;;;;;AAKG;MA6CU,kBAAkB,CAAA;AACZ,IAAA,SAAS,GAAG,MAAM,CAAC,gBAAgB,CAAC;;AAG7C,IAAA,oBAAoB,GAMxB;AACF,QAAA,YAAY,EAAE;AACZ,YAAA,OAAO,EAAE,+BAA+B;AACxC,YAAA,OAAO,EAAE,CAAC,IAAI,EAAE,MAAM,KAAI;gBACxB,MAAM,KAAK,GAAG,QAAQ,CACpB,MAAM,CAAC,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,EAClD,EAAE,CACH;gBACD,MAAM,IAAI,GAAG,QAAQ,CACnB,MAAM,CAAC,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,EAClD,EAAE,CACH;AACD,gBAAA,IAAI,KAAK,IAAI,IAAI,EAAE;oBACjB,OAAO,IAAI,CAAC,aAAa,CAAC,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC;gBAC3C;AACA,gBAAA,OAAO,EAAE;YACX,CAAC;AACF,SAAA;AACD,QAAA,UAAU,EAAE;AACV,YAAA,OAAO,EAAE,6BAA6B;AACtC,YAAA,OAAO,EAAE,CAAC,IAAI,EAAE,MAAM,KAAI;gBACxB,MAAM,KAAK,GAAG,QAAQ,CACpB,MAAM,CAAC,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,EAClD,EAAE,CACH;gBACD,MAAM,IAAI,GAAG,QAAQ,CACnB,MAAM,CAAC,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,EAClD,EAAE,CACH;AACD,gBAAA,IAAI,KAAK,IAAI,IAAI,EAAE;oBACjB,MAAM,OAAO,GAAG,IAAI,CAAC,iBAAiB,CAAC,KAAK,EAAE,IAAI,CAAC;oBACnD,OAAO,IAAI,CAAC,aAAa,CAAC,OAAO,EAAE,KAAK,EAAE,IAAI,CAAC;gBACjD;AACA,gBAAA,OAAO,EAAE;YACX,CAAC;AACF,SAAA;AACD,QAAA,UAAU,EAAE;AACV,YAAA,OAAO,EAAE,6BAA6B;AACtC,YAAA,OAAO,EAAE,CAAC,IAAI,EAAE,MAAM,KAAI;gBACxB,MAAM,KAAK,GAAG,QAAQ,CACpB,MAAM,CAAC,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,EAClD,EAAE,CACH;gBACD,MAAM,IAAI,GAAG,QAAQ,CACnB,MAAM,CAAC,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,EAClD,EAAE,CACH;AACD,gBAAA,IAAI,KAAK,IAAI,IAAI,EAAE;AACjB,oBAAA,MAAM,SAAS,GAAG,IAAI,CAAC,aAAa,CAAC,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC;oBACpD,MAAM,OAAO,GAAG,IAAI,CAAC,iBAAiB,CAAC,KAAK,EAAE,IAAI,CAAC;AACnD,oBAAA,MAAM,OAAO,GAAG,IAAI,CAAC,aAAa,CAAC,OAAO,EAAE,KAAK,EAAE,IAAI,CAAC;AACxD,oBAAA,OAAO,CAAA,EAAG,SAAS,CAAA,CAAA,EAAI,OAAO,EAAE;gBAClC;AACA,gBAAA,OAAO,EAAE;YACX,CAAC;AACF,SAAA;KACF;AAED;;AAEG;AACH,IAAA,sBAAsB,CACpB,UAAe,EACf,MAA2B,EAC3B,YAAiC,EAAA;;AAGjC,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC;;QAGrD,MAAM,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC,SAAc,KAAI;;AAE3C,YAAA,IAAI,OAAO,SAAS,CAAC,QAAQ,KAAK,QAAQ,EAAE;AAC1C,gBAAA,SAAS,CAAC,QAAQ,GAAG,IAAI,CAAC,kBAAkB,CAC1C,SAAS,CAAC,QAAQ,EAClB,MAAM,CACP;YACH;;AAGA,YAAA,IAAI,YAAY,EAAE,cAAc,EAAE,MAAM,EAAE;gBACxC,YAAY,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC,aAAa,KAAI;AACpD,oBAAA,MAAM,SAAS,GAAG,aAAa,CAAC,GAAG;AACnC,oBAAA,MAAM,UAAU,GAAG,MAAM,GAAG,SAAS,CAAC;oBAEtC,IACE,UAAU,KAAK,SAAS;AACxB,wBAAA,UAAU,KAAK,IAAI;wBACnB,UAAU,KAAK,EAAE,EACjB;AACA,wBAAA,MAAM,aAAa,GAAG,aAAa,CAAC,aAAa;AACjD,wBAAA,MAAM,cAAc,GAClB,aAAa,EAAE,OAAO,EAAE,SAAS,GAAG,CAAC,CAAC,EAAE,OAAO,GAAG,CAAC,CAAC;wBAEtD,IAAI,cAAc,EAAE;AAClB,4BAAA,MAAM,SAAS,GAAQ;gCACrB,WAAW,EAAE,cAAc,CAAC,WAAW;AACvC,gCAAA,aAAa,EAAE,UAAU;gCACzB,SAAS,EAAE,aAAa,EAAE,UAAU,GAAG,OAAO,GAAG,OAAO;AACxD,gCAAA,OAAO,EAAE,KAAK;AACd,gCAAA,cAAc,EAAE,IAAI;6BACrB;AAED,4BAAA,IAAI,cAAc,CAAC,YAAY,EAAE;AAC/B,gCAAA,SAAS,CAAC,YAAY,GAAG,cAAc,CAAC,YAAY;4BACtD;AAEA,4BAAA,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE;AACtB,gCAAA,SAAS,CAAC,OAAO,GAAG,EAAE;4BACxB;AAEA,4BAAA,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC;wBACnC;oBACF;AACF,gBAAA,CAAC,CAAC;YACJ;;AAGA,YAAA,SAAS,CAAC,OAAO,GAAG,SAAS,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC,MAAW,KAAI;gBAC5D,IAAI,gBAAgB,GAAG,IAAI;AAC3B,gBAAA,IAAI,gBAAgB,GAAG,MAAM,CAAC,aAAa;;AAG3C,gBAAA,IAAI,OAAO,gBAAgB,KAAK,QAAQ,EAAE;oBACxC,MAAM,OAAO,GAAG,gBAAgB,CAAC,KAAK,CAAC,iBAAiB,CAAC;oBACzD,IAAI,OAAO,EAAE;AACX,wBAAA,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE;4BAC3B,MAAM,cAAc,GAAG,IAAI,CAAC,wBAAwB,CAClD,KAAK,EACL,MAAM,CACP;AACD,4BAAA,IAAI,cAAc,KAAK,IAAI,EAAE;gCAC3B,gBAAgB,GAAG,KAAK;gCACxB;4BACF;4BACA,gBAAgB,GAAG,gBAAgB,CAAC,OAAO,CACzC,KAAK,EACL,cAAc,CACf;wBACH;wBAEA,IAAI,gBAAgB,EAAE;4BACpB,gBAAgB;AACd,gCAAA,IAAI,CAAC,8BAA8B,CAAC,gBAAgB,EAAE,MAAM,CAAC;AAC7D,oCAAA,gBAAgB;AAClB,4BAAA,MAAM,CAAC,aAAa,GAAG,gBAAgB;wBACzC;oBACF;gBACF;;gBAGA,IAAI,gBAAgB,IAAI,MAAM,CAAC,aAAa,KAAK,cAAc,EAAE;oBAC/D,gBAAgB,GAAG,KAAK;gBAC1B;;gBAGA,IAAI,gBAAgB,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,SAAS,CAAC,EAAE;AACvD,oBAAA,KAAK,MAAM,QAAQ,IAAI,MAAM,CAAC,SAA6B,EAAE;AAC3D,wBAAA,IAAI,QAAQ,CAAC,IAAI,KAAK,6BAA6B,EAAE;4BACnD,MAAM,QAAQ,GAAG,MAAM,GAAG,QAAQ,CAAC,GAAG,CAAC;4BACvC,IAAI,QAAQ,CAAC,KAAK,KAAK,oBAAoB,IAAI,QAAQ,EAAE;gCACvD,gBAAgB,GAAG,KAAK;gCACxB;4BACF;AAAO,iCAAA,IACL,QAAQ,CAAC,KAAK,KAAK,sBAAsB;gCACzC,CAAC,QAAQ,EACT;gCACA,gBAAgB,GAAG,KAAK;gCACxB;4BACF;wBACF;oBACF;gBACF;AAEA,gBAAA,OAAO,gBAAgB;AACzB,YAAA,CAAC,CAAC;;YAGF,SAAS,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,MAAW,KAAI;gBACzC,IAAI,CAAC,MAAM,EAAE,SAAS;oBAAE,OAAO,MAAM,CAAC,SAAS;gBAC/C,IAAI,CAAC,MAAM,EAAE,cAAc;oBAAE,OAAO,MAAM,CAAC,cAAc;gBACzD,IAAI,CAAC,MAAM,EAAE,OAAO;oBAAE,OAAO,MAAM,CAAC,OAAO;AAC7C,YAAA,CAAC,CAAC;AACJ,QAAA,CAAC,CAAC;AAEF,QAAA,OAAO,MAAM;IACf;AAEA;;AAEG;IACH,mBAAmB,CACjB,OAAc,EACd,MAA2B,EAAA;QAE3B,MAAM,YAAY,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,MAAW,KAAI;AAClD,YAAA,MAAM,aAAa,GAAG,MAAM,CAAC,aAAa;YAC1C,MAAM,OAAO,GAAG,aAAa,EAAE,KAAK,CAAC,iBAAiB,CAAC;YAEvD,IAAI,gBAAgB,GAAG,IAAI;YAC3B,IAAI,gBAAgB,GAAG,aAAa;YAEpC,IAAI,OAAO,EAAE;AACX,gBAAA,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE;oBAC3B,MAAM,cAAc,GAAG,IAAI,CAAC,wBAAwB,CAAC,KAAK,EAAE,MAAM,CAAC;AACnE,oBAAA,IAAI,cAAc,KAAK,IAAI,EAAE;wBAC3B,gBAAgB,GAAG,KAAK;wBACxB;oBACF;oBACA,gBAAgB,GAAG,gBAAgB,CAAC,OAAO,CAAC,KAAK,EAAE,cAAc,CAAC;gBACpE;gBAEA,IAAI,gBAAgB,EAAE;oBACpB,gBAAgB;AACd,wBAAA,IAAI,CAAC,8BAA8B,CAAC,gBAAgB,EAAE,MAAM,CAAC;AAC7D,4BAAA,gBAAgB;AAClB,oBAAA,MAAM,CAAC,aAAa,GAAG,gBAAgB;gBACzC;YACF;AAEA,YAAA,OAAO,gBAAgB;AACzB,QAAA,CAAC,CAAC;QAEF,MAAM,MAAM,GAAwB,EAAE;AACtC,QAAA,YAAY,CAAC,OAAO,CAAC,CAAC,MAAW,KAAI;YACnC,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC,GAAG,MAAM,CAAC,aAAa;AACnD,QAAA,CAAC,CAAC;AAEF,QAAA,OAAO,MAAM;IACf;AAEA;;AAEG;IACH,uBAAuB,CACrB,OAAe,EACf,MAA2B,EAAA;QAE3B,OAAO,IAAI,CAAC,kBAAkB,CAAC,OAAO,EAAE,MAAM,CAAC;IACjD;AAEA;;AAEG;AACH,IAAA,kBAAkB,CAChB,IAAY,EACZ,MAA2B,EAC3B,cAAc,GAAG,KAAK,EAAA;AAEtB,QAAA,IAAI,CAAC,IAAI;AAAE,YAAA,OAAO,EAAE;AAEpB,QAAA,MAAM,cAAc,GAAG;AACrB,YAAA,GAAG,MAAM;YACT,WAAW,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC,QAAQ,EAAE;AAChD,YAAA,WAAW,EAAE,IAAI,CAAC,oBAAoB,EAAE,CAAC,QAAQ,EAAE;YACnD,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,kBAAkB,CAAC,OAAO,EAAE;AAChD,gBAAA,GAAG,EAAE,SAAS;AACd,gBAAA,KAAK,EAAE,MAAM;AACb,gBAAA,IAAI,EAAE,SAAS;aAChB,CAAC;SACH;QAED,OAAO,IAAI,CAAC,OAAO,CAAC,mBAAmB,EAAE,CAAC,KAAK,EAAE,GAAG,KAAI;YACtD,IAAI,KAAK,GAAG,IAAI,CAAC,cAAc,CAAC,cAAc,EAAE,GAAG,CAAC;;AAGpD,YAAA,IAAI,KAAK,KAAK,SAAS,EAAE;AACvB,gBAAA,MAAM,QAAQ,GAAG,GAAG,CAAC,WAAW,EAAE;gBAClC,MAAM,QAAQ,GAAG,MAAM,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC,IAAI,CAC/C,CAAC,CAAC,KAAK,CAAC,CAAC,WAAW,EAAE,KAAK,QAAQ,CACpC;gBACD,IAAI,QAAQ,EAAE;oBACZ,KAAK,GAAG,IAAI,CAAC,cAAc,CAAC,cAAc,EAAE,QAAQ,CAAC;gBACvD;YACF;YAEA,OAAO,KAAK,KAAK,SAAS,GAAG,MAAM,CAAC,KAAK,CAAC,GAAG,cAAc,GAAG,KAAK,GAAG,EAAE;AAC1E,QAAA,CAAC,CAAC;IACJ;;;;IAMQ,oBAAoB,CAC1B,KAAa,EACb,MAA2B,EAAA;QAE3B,MAAM,OAAO,GAAG,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,EAAE,CAAC;AAEtD,QAAA,KAAK,MAAM,IAAI,IAAI,OAAO,EAAE;YAC1B,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,EAAE;AACxB,gBAAA,OAAO,MAAM,CAAC,IAAI,CAAC;YACrB;YAEA,MAAM,UAAU,GAAG,IAAI,CAAC,cAAc,CAAC,MAAM,EAAE,IAAI,CAAC;YACpD,IACE,UAAU,KAAK,SAAS;AACxB,gBAAA,UAAU,KAAK,IAAI;gBACnB,UAAU,KAAK,EAAE,EACjB;AACA,gBAAA,OAAO,UAAU;YACnB;QACF;AAEA,QAAA,OAAO,IAAI;IACb;IAEQ,iBAAiB,CAAC,KAAa,EAAE,IAAY,EAAA;AACnD,QAAA,OAAO,IAAI,IAAI,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,OAAO,EAAE;IAC3C;AAEQ,IAAA,aAAa,CAAC,GAAW,EAAE,KAAa,EAAE,IAAY,EAAA;AAC5D,QAAA,MAAM,EAAE,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC;AACvC,QAAA,MAAM,EAAE,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC;AACzC,QAAA,OAAO,GAAG,EAAE,CAAA,CAAA,EAAI,EAAE,CAAA,CAAA,EAAI,IAAI,EAAE;IAC9B;IAEQ,oBAAoB,GAAA;AAC1B,QAAA,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE;AACtB,QAAA,MAAM,KAAK,GAAG,IAAI,IAAI,CAAC,GAAG,CAAC,WAAW,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC;QAC/C,MAAM,IAAI,GAAG,GAAG,CAAC,OAAO,EAAE,GAAG,KAAK,CAAC,OAAO,EAAE;QAC5C,MAAM,OAAO,GAAG,IAAI,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;QACvC,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,GAAG,OAAO,CAAC;IAClC;IAEQ,cAAc,CAAC,GAAQ,EAAE,IAAY,EAAA;QAC3C,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,OAAO,EAAE,GAAG,KAAK,OAAO,GAAG,GAAG,CAAC,EAAE,GAAG,CAAC;IACtE;IAEQ,0BAA0B,CAChC,WAAmB,EACnB,MAA2B,EAAA;AAE3B,QAAA,KAAK,MAAM,QAAQ,IAAI,IAAI,CAAC,oBAAoB,EAAE;AAChD,YAAA,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC,oBAAoB,CAAC,QAAQ,CAAC;YAChE,MAAM,KAAK,GAAG,WAAW,CAAC,KAAK,CAAC,OAAO,CAAC;YACxC,IAAI,KAAK,EAAE;gBACT,MAAM,IAAI,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,KAAK,GAAG,CAAC,IAAI,EAAE,CAAC;AACpD,gBAAA,OAAO,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC;YAC9B;QACF;AACA,QAAA,OAAO,IAAI;IACb;IAEQ,yBAAyB,CAC/B,WAAmB,EACnB,MAA2B,EAAA;;QAG3B,MAAM,cAAc,GAAG,IAAI,CAAC,0BAA0B,CAAC,WAAW,EAAE,MAAM,CAAC;AAC3E,QAAA,IAAI,cAAc,KAAK,IAAI,EAAE;AAC3B,YAAA,OAAO,cAAc;QACvB;QAEA,MAAM,cAAc,GAAG,MAAM,IAAI,IAAI,EAAE;QACvC,MAAM,yBAAyB,GAAG,MAAK;YACrC,MAAM,WAAW,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;AAC5C,YAAA,OAAO,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,WAAW,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;AAC9C,QAAA,CAAC;QACD,MAAM,uBAAuB,GAAG,MAAK;YACnC,MAAM,WAAW,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;AAC5C,YAAA,OAAO,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,WAAW,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;AAChD,QAAA,CAAC;QAED,MAAM,UAAU,GAAG,CAAC,IAAU,EAAE,MAAc,EAAE,IAAY,KAAU;AACpE,YAAA,MAAM,OAAO,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC;YAC9B,QAAQ,IAAI;AACV,gBAAA,KAAK,GAAG;oBACN,OAAO,CAAC,UAAU,CAAC,OAAO,CAAC,UAAU,EAAE,GAAG,MAAM,CAAC;oBACjD;AACF,gBAAA,KAAK,GAAG;oBACN,OAAO,CAAC,WAAW,CAAC,OAAO,CAAC,WAAW,EAAE,GAAG,MAAM,CAAC;oBACnD;AACF,gBAAA,KAAK,GAAG;oBACN,OAAO,CAAC,cAAc,CAAC,OAAO,CAAC,cAAc,EAAE,GAAG,MAAM,CAAC;oBACzD;;AAEJ,YAAA,OAAO,OAAO;AAChB,QAAA,CAAC;;QAGD,MAAM,WAAW,GACf,sGAAsG;QACxG,MAAM,WAAW,GAAG,WAAW,CAAC,KAAK,CAAC,WAAW,CAAC;QAElD,IAAI,WAAW,EAAE;AACf,YAAA,MAAM,GAAG,QAAQ,EAAE,UAAU,GAAG,EAAE,EAAE,IAAI,GAAG,EAAE,CAAC,GAAG,WAAW;AAE5D,YAAA,IAAI,IAAU;YACd,QAAQ,QAAQ;AACd,gBAAA,KAAK,aAAa;oBAChB,IAAI,GAAG,cAAc,EAAE;oBACvB;AACF,gBAAA,KAAK,wBAAwB;AAC7B,gBAAA,KAAK,wBAAwB;oBAC3B,IAAI,GAAG,yBAAyB,EAAE;oBAClC;AACF,gBAAA,KAAK,sBAAsB;oBACzB,IAAI,GAAG,uBAAuB,EAAE;oBAChC;AACF,gBAAA;oBACE,IAAI,GAAG,cAAc,EAAE;;YAG3B,IAAI,UAAU,EAAE;gBACd,MAAM,MAAM,GAAG,QAAQ,CAAC,UAAU,EAAE,EAAE,CAAC;AACvC,gBAAA,MAAM,QAAQ,GAAG,IAAI,IAAI,GAAG;gBAC5B,IAAI,GAAG,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,CAAC;YAC3C;AAEA,YAAA,OAAO,IAAI,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;QACzC;;QAGA,MAAM,aAAa,GAAG,mBAAmB;QACzC,MAAM,aAAa,GAAG,WAAW,CAAC,KAAK,CAAC,aAAa,CAAC;QAEtD,IAAI,aAAa,EAAE;YACjB,MAAM,GAAG,UAAU,EAAE,UAAU,GAAG,EAAE,CAAC,GAAG,aAAa;YACrD,IAAI,YAAY,GAAG,QAAQ,CAAC,UAAU,EAAE,EAAE,CAAC;YAE3C,IAAI,UAAU,EAAE;AACd,gBAAA,YAAY,IAAI,QAAQ,CAAC,UAAU,EAAE,EAAE,CAAC;YAC1C;AAEA,YAAA,OAAO,YAAY,CAAC,QAAQ,EAAE;QAChC;;QAGA,OAAO,IAAI,CAAC,cAAc,CAAC,MAAM,EAAE,WAAW,CAAC,IAAI,EAAE;IACvD;IAEQ,YAAY,CAAC,KAAa,EAAE,MAA2B,EAAA;;AAE7D,QAAA,IACE,CAAC,KAAK,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC;AAC7C,aAAC,KAAK,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,EAC9C;YACA,OAAO,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QAC3B;;QAGA,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE;AACzB,YAAA,OAAO,MAAM,CAAC,KAAK,CAAC;QACtB;;QAGA,IAAI,KAAK,KAAK,MAAM;AAAE,YAAA,OAAO,IAAI;QACjC,IAAI,KAAK,KAAK,OAAO;AAAE,YAAA,OAAO,KAAK;QACnC,IAAI,KAAK,KAAK,MAAM;AAAE,YAAA,OAAO,IAAI;QACjC,IAAI,KAAK,KAAK,WAAW;AAAE,YAAA,OAAO,SAAS;;QAG3C,OAAO,IAAI,CAAC,cAAc,CAAC,MAAM,EAAE,KAAK,CAAC;IAC3C;IAEQ,6BAA6B,CACnC,UAAkB,EAClB,MAA2B,EAAA;QAE3B,MAAM,cAAc,GAAG,kCAAkC;QACzD,MAAM,KAAK,GAAG,UAAU,CAAC,KAAK,CAAC,cAAc,CAAC;QAE9C,IAAI,CAAC,KAAK,EAAE;AACV,YAAA,OAAO,IAAI;QACb;QAEA,MAAM,GAAG,SAAS,EAAE,SAAS,EAAE,UAAU,CAAC,GAAG,KAAK;QAElD,IAAI,eAAe,GAAG,KAAK;QAE3B,MAAM,iBAAiB,GAAG,6CAA6C;QACvE,MAAM,SAAS,GAAG,SAAS,CAAC,KAAK,CAAC,iBAAiB,CAAC;QAEpD,IAAI,SAAS,EAAE;YACb,MAAM,GAAG,IAAI,EAAE,QAAQ,EAAE,KAAK,CAAC,GAAG,SAAS;AAC3C,YAAA,MAAM,SAAS,GAAG,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE,MAAM,CAAC;AACxD,YAAA,MAAM,UAAU,GAAG,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,IAAI,EAAE,EAAE,MAAM,CAAC;YAE1D,QAAQ,QAAQ;AACd,gBAAA,KAAK,IAAI;AACT,gBAAA,KAAK,KAAK;AACR,oBAAA,eAAe,GAAG,SAAS,IAAI,UAAU;oBACzC;AACF,gBAAA,KAAK,IAAI;AACT,gBAAA,KAAK,KAAK;AACR,oBAAA,eAAe,GAAG,SAAS,IAAI,UAAU;oBACzC;AACF,gBAAA,KAAK,GAAG;AACN,oBAAA,eAAe,GAAG,SAAS,GAAG,UAAU;oBACxC;AACF,gBAAA,KAAK,GAAG;AACN,oBAAA,eAAe,GAAG,SAAS,GAAG,UAAU;oBACxC;AACF,gBAAA,KAAK,IAAI;AACP,oBAAA,eAAe,GAAG,SAAS,IAAI,UAAU;oBACzC;AACF,gBAAA,KAAK,IAAI;AACP,oBAAA,eAAe,GAAG,SAAS,IAAI,UAAU;oBACzC;;QAEN;aAAO;AACL,YAAA,MAAM,KAAK,GAAG,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,IAAI,EAAE,EAAE,MAAM,CAAC;AACzD,YAAA,eAAe,GAAG,CAAC,CAAC,KAAK;QAC3B;AAEA,QAAA,MAAM,WAAW,GAAG,eAAe,GAAG,SAAS,CAAC,IAAI,EAAE,GAAG,UAAU,CAAC,IAAI,EAAE;QAE1E,IAAI,WAAW,KAAK,MAAM;AAAE,YAAA,OAAO,IAAI;QACvC,IAAI,WAAW,KAAK,WAAW;AAAE,YAAA,OAAO,EAAE;QAE1C,OAAO,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC;IACvD;IAEQ,8BAA8B,CACpC,KAAa,EACb,MAA2B,EAAA;QAE3B,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,WAAW,CAAC,EAAE;AAC7B,YAAA,OAAO,KAAK;QACd;QAEA,MAAM,QAAQ,GAAG,IAAI,CAAC,kBAAkB,CAAC,KAAK,EAAE,MAAM,CAAC;QAEvD,IAAI,QAAQ,KAAK,KAAK,IAAI,QAAQ,CAAC,KAAK,CAAC,WAAW,CAAC,EAAE;AACrD,YAAA,OAAO,IAAI;QACb;AAEA,QAAA,IAAI,QAAQ,CAAC,KAAK,CAAC,WAAW,CAAC,EAAE;YAC/B,OAAO,IAAI,CAAC,8BAA8B,CAAC,QAAQ,EAAE,MAAM,CAAC;QAC9D;AAEA,QAAA,OAAO,QAAQ;IACjB;IAEQ,wBAAwB,CAC9B,KAAa,EACb,MAA2B,EAAA;QAE3B,MAAM,UAAU,GAAG,KAAK,CAAC,OAAO,CAAC,QAAQ,EAAE,EAAE,CAAC;;QAG9C,MAAM,cAAc,GAAG,IAAI,CAAC,0BAA0B,CAAC,UAAU,EAAE,MAAM,CAAC;AAC1E,QAAA,IAAI,cAAc,KAAK,IAAI,EAAE;AAC3B,YAAA,OAAO,cAAc;QACvB;;AAGA,QAAA,IAAI,UAAU,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,UAAU,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE;YACxD,MAAM,iBAAiB,GAAG,IAAI,CAAC,6BAA6B,CAC1D,UAAU,EACV,MAAM,CACP;AACD,YAAA,IAAI,iBAAiB,KAAK,IAAI,EAAE;AAC9B,gBAAA,OAAO,iBAAiB;YAC1B;QACF;;QAGA,MAAM,YAAY,GAAG,UAAU,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC;QAClD,MAAM,UAAU,GAAG,YAAY,CAAC,KAAK,CAAC,GAAG,CAAC;QAC1C,MAAM,WAAW,GAAa,EAAE;AAEhC,QAAA,KAAK,MAAM,SAAS,IAAI,UAAU,EAAE;AAClC,YAAA,MAAM,WAAW,GAAG,SAAS,CAAC,IAAI,EAAE;YACpC,MAAM,OAAO,GAAG,WAAW,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,EAAE,CAAC;YAE5D,IAAI,wBAAwB,GAAkB,IAAI;AAClD,YAAA,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE;gBAC5B,MAAM,YAAY,GAAG,IAAI,CAAC,8BAA8B,CACtD,MAAM,EACN,MAAM,CACP;gBACD,IAAI,YAAY,EAAE;oBAChB,MAAM,UAAU,GAAG,IAAI,CAAC,yBAAyB,CAC/C,YAAY,EACZ,MAAM,CACP;AACD,oBAAA,IAAI,UAAU,KAAK,EAAE,EAAE;AACrB,wBAAA,wBAAwB,GAAG,MAAM,CAAC,UAAU,CAAC;wBAC7C;oBACF;gBACF;YACF;YAEA,IAAI,CAAC,wBAAwB,EAAE;AAC7B,gBAAA,OAAO,IAAI;YACb;AAEA,YAAA,WAAW,CAAC,IAAI,CAAC,wBAAwB,CAAC;QAC5C;AAEA,QAAA,MAAM,cAAc,GAAG,WAAW,CAAC,IAAI,CACrC,CAAC,KAAK,KAAK,KAAK,KAAK,EAAE,IAAI,KAAK,KAAK,SAAS,CAC/C;QACD,IAAI,cAAc,EAAE;AAClB,YAAA,OAAO,IAAI;QACb;AAEA,QAAA,OAAO,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC;IAC9B;uGAnmBW,kBAAkB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA;AAAlB,IAAA,OAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,kBAAkB,cAFjB,MAAM,EAAA,CAAA;;2FAEP,kBAAkB,EAAA,UAAA,EAAA,CAAA;kBAH9B,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,UAAU,EAAE,MAAM;AACnB,iBAAA;;;ACjDD;;;;;;;;AAQG;AAqBH;;;;;;;;AAQG;MAOU,wBAAwB,CAAA;AAClB,IAAA,SAAS,GAAG,MAAM,CAAC,yBAAyB,CAAC;AAC7C,IAAA,WAAW,GAAG,MAAM,CAAC,kBAAkB,CAAC;AACxC,IAAA,SAAS,GAAG,MAAM,CAAC,gBAAgB,CAAC;AAC5C,IAAA,KAAK,GAAG,MAAM,CAAC,YAAY,CAAC;AACpB,IAAA,GAAG,GAAG,MAAM,CAAC,QAAQ,CAAC;;AAG9B,IAAA,MAAM,GAAG,KAAK,CAAoB,IAAI,kDAAC;AACvC,IAAA,MAAM,GAAG,KAAK,CAAsB,EAAE,kDAAC;AACvC,IAAA,KAAK,GAAG,KAAK,CAAgB,IAAI,iDAAC;;AAGlC,IAAA,YAAY,GAAG,MAAM,CAAoB,IAAI,wDAAC;AAC9C,IAAA,YAAY,GAAG,MAAM,CAAsB,EAAE,wDAAC;;AAG9C,IAAA,YAAY,GAAG,QAAQ,CAAC,OAAO;QACtC,GAAG,IAAI,CAAC,MAAM,EAAE;QAChB,GAAG,IAAI,CAAC,YAAY,EAAE;AACvB,KAAA,CAAC,wDAAC;AAEM,IAAA,eAAe,GAAG,QAAQ,CAAC,MAAK;AACvC,QAAA;AAEA,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,YAAY,EAAE;AAClC,QAAA,IAAI,CAAC,MAAM;AAAE,YAAA,OAAO,IAAI;;AAGxB,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAe;;AAG/D,QAAA,IAAI,MAAM,CAAC,aAAa,EAAE;AACxB,YAAA,MAAM,SAAS,GAAG,IAAI,CAAC,WAAW,CAAC,sBAAsB,CACvD,MAAM,CAAC,aAAa,EACpB,IAAI,CAAC,YAAY,EAAE,CACpB;AACD,YAAA,MAAM,CAAC,aAAa,GAAG,SAAS;QAClC;AACA,QAAA,OAAO,MAAM;AACf,IAAA,CAAC,2DAAC;IAEF,QAAQ,GAAA;;AAEN,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,EAAE;QAC5B,IAAI,MAAM,EAAE;AACV,YAAA,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,MAAM,CAAC;QAC/B;;AAGA,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,EAAE;QAC5B,IAAI,MAAM,EAAE;AACV,YAAA,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,MAAM,CAAC;QAC/B;IACF;AAEA;;AAEG;AACH,IAAA,KAAK,CAAC,MAAY,EAAA;AAChB,QAAA,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC;IACxB;AAEA;;AAEG;AACH,IAAA,YAAY,CAAC,KAAU,EAAA;;AAErB,QAAA,IAAI,KAAK,EAAE,IAAI,KAAK,aAAa,EAAE;AACjC,YAAA,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,IAAI,CAAC;YACvB;QACF;;AAGA,QAAA,IAAI,KAAK,EAAE,IAAI,KAAK,UAAU,IAAI,KAAK,EAAE,IAAI,KAAK,YAAY,EAAE;AAC9D,YAAA,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC;YACjB;QACF;;AAGA,QAAA,OAAO,CAAC,GAAG,CAAC,gBAAgB,EAAE,KAAK,CAAC;IACtC;uGAjFW,wBAAwB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAxB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,wBAAwB,ycC5CrC,q3BAuBA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EDkBY,YAAY,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,kBAAkB,gMAAU,aAAa,EAAA,QAAA,EAAA,mBAAA,EAAA,MAAA,EAAA,CAAA,QAAA,EAAA,aAAA,EAAA,UAAA,EAAA,SAAA,EAAA,UAAA,EAAA,aAAA,CAAA,EAAA,OAAA,EAAA,CAAA,iBAAA,CAAA,EAAA,CAAA,EAAA,CAAA;;2FAGtD,wBAAwB,EAAA,UAAA,EAAA,CAAA;kBANpC,SAAS;+BACE,qBAAqB,EAAA,UAAA,EACnB,IAAI,EAAA,OAAA,EACP,CAAC,YAAY,EAAE,kBAAkB,EAAE,MAAM,EAAE,aAAa,CAAC,EAAA,QAAA,EAAA,q3BAAA,EAAA;;AAuFpE;;AAEG;AACG,SAAU,mBAAmB,CACjC,YAA0B,EAC1B,MAAkB,EAClB,MAA4B,EAC5B,OAGC,EAAA;AAED,IAAA,MAAM,SAAS,GAAG;AAChB,QAAA,EAAE,EAAE,UAAU;AACd,QAAA,EAAE,EAAE,WAAW;AACf,QAAA,EAAE,EAAE,WAAW;AACf,QAAA,EAAE,EAAE,WAAW;AACf,QAAA,IAAI,EAAE,cAAc;AACrB,KAAA,CAAC,OAAO,EAAE,IAAI,IAAI,IAAI,CAAC;AAExB,IAAA,OAAO,YAAY,CAAC,SAAS,CAAC,wBAAwB,EAAE,QAAQ,EAAE;AAChE,QAAA,MAAM,EAAE,OAAO,EAAE,KAAK,IAAI,EAAE;AAC5B,QAAA,UAAU,EAAE,SAAS;AACrB,QAAA,IAAI,EAAE;YACJ,MAAM;YACN,MAAM,EAAE,MAAM,IAAI,EAAE;YACpB,KAAK,EAAE,OAAO,EAAE,KAAK;AACtB,SAAA;AACF,KAAA,CAAC;AACJ;;;;"}