@masterteam/components 0.0.113 → 0.0.115

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/assets/common.css CHANGED
@@ -1,2 +1,2 @@
1
1
  /*! tailwindcss v4.2.2 | 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-scale-x:1;--tw-scale-y:1;--tw-scale-z:1;--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-divide-y-reverse:0;--tw-border-style:solid;--tw-leading:initial;--tw-font-weight:initial;--tw-tracking:initial;--tw-ordinal:initial;--tw-slashed-zero:initial;--tw-numeric-figure:initial;--tw-numeric-spacing:initial;--tw-numeric-fraction:initial;--tw-shadow:0 0 #0000;--tw-shadow-color:initial;--tw-shadow-alpha:100%;--tw-inset-shadow:0 0 #0000;--tw-inset-shadow-color:initial;--tw-inset-shadow-alpha:100%;--tw-ring-color:initial;--tw-ring-shadow:0 0 #0000;--tw-inset-ring-color:initial;--tw-inset-ring-shadow:0 0 #0000;--tw-ring-inset:initial;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-offset-shadow:0 0 #0000;--tw-blur:initial;--tw-brightness:initial;--tw-contrast:initial;--tw-grayscale:initial;--tw-hue-rotate:initial;--tw-invert:initial;--tw-opacity:initial;--tw-saturate:initial;--tw-sepia:initial;--tw-drop-shadow:initial;--tw-drop-shadow-color:initial;--tw-drop-shadow-alpha:100%;--tw-drop-shadow-size:initial;--tw-duration:initial;--tw-ease:initial}}}@layer theme{:root,:host{--font-sans:ui-sans-serif, system-ui, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";--font-mono:ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace;--color-red-50:oklch(97.1% .013 17.38);--color-red-500:oklch(63.7% .237 25.331);--color-red-600:oklch(57.7% .245 27.325);--color-red-700:oklch(50.5% .213 27.518);--color-red-950:oklch(25.8% .092 26.042);--color-amber-100:oklch(96.2% .059 95.617);--color-amber-200:oklch(92.4% .12 95.746);--color-amber-300:oklch(87.9% .169 91.605);--color-amber-400:oklch(82.8% .189 84.429);--color-amber-600:oklch(66.6% .179 58.318);--color-amber-700:oklch(55.5% .163 48.998);--color-amber-900:oklch(41.4% .112 45.904);--color-yellow-50:oklch(98.7% .026 102.212);--color-yellow-600:oklch(68.1% .162 75.834);--color-yellow-700:oklch(55.4% .135 66.442);--color-green-50:oklch(98.2% .018 155.826);--color-green-500:oklch(72.3% .219 149.579);--color-green-600:oklch(62.7% .194 149.214);--color-green-700:oklch(52.7% .154 150.069);--color-emerald-100:oklch(95% .052 163.051);--color-emerald-200:oklch(90.5% .093 164.15);--color-emerald-300:oklch(84.5% .143 164.978);--color-emerald-400:oklch(76.5% .177 163.223);--color-emerald-600:oklch(59.6% .145 163.225);--color-emerald-700:oklch(50.8% .118 165.612);--color-emerald-900:oklch(37.8% .077 168.94);--color-sky-100:oklch(95.1% .026 236.824);--color-sky-200:oklch(90.1% .058 230.902);--color-sky-300:oklch(82.8% .111 230.318);--color-sky-700:oklch(50% .134 242.749);--color-sky-900:oklch(39.1% .09 240.876);--color-blue-50:oklch(97% .014 254.604);--color-blue-500:oklch(62.3% .214 259.815);--color-blue-600:oklch(54.6% .245 262.881);--color-blue-700:oklch(48.8% .243 264.376);--color-purple-50:oklch(97.7% .014 308.299);--color-purple-600:oklch(55.8% .288 302.321);--color-purple-700:oklch(49.6% .265 301.924);--color-rose-100:oklch(94.1% .03 12.58);--color-rose-200:oklch(89.2% .058 10.001);--color-rose-300:oklch(81% .117 11.638);--color-rose-400:oklch(71.2% .194 13.428);--color-rose-600:oklch(58.6% .253 17.585);--color-rose-700:oklch(51.4% .222 16.935);--color-rose-900:oklch(41% .159 10.272);--color-slate-50:oklch(98.4% .003 247.858);--color-slate-100:oklch(96.8% .007 247.896);--color-slate-200:oklch(92.9% .013 255.508);--color-slate-300:oklch(86.9% .022 252.894);--color-slate-400:oklch(70.4% .04 256.788);--color-slate-500:oklch(55.4% .046 257.417);--color-slate-600:oklch(44.6% .043 257.281);--color-slate-700:oklch(37.2% .044 257.287);--color-slate-800:oklch(27.9% .041 260.031);--color-slate-900:oklch(20.8% .042 265.755);--color-gray-50:oklch(98.5% .002 247.839);--color-gray-100:oklch(96.7% .003 264.542);--color-gray-200:oklch(92.8% .006 264.531);--color-gray-300:oklch(87.2% .01 258.338);--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-gray-900:oklch(21% .034 264.665);--color-black:#000;--color-white:#fff;--spacing:.25rem;--container-xs:20rem;--container-lg:32rem;--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-8xl:6rem;--text-8xl--line-height:1;--font-weight-medium:500;--font-weight-semibold:600;--font-weight-bold:700;--tracking-wide:.025em;--tracking-wider:.05em;--leading-relaxed:1.625;--radius-sm:.25rem;--radius-md:.375rem;--radius-lg:.5rem;--radius-xl:.75rem;--radius-2xl:1rem;--ease-in-out:cubic-bezier(.4, 0, .2, 1);--animate-spin:spin 1s linear infinite;--animate-pulse:pulse 2s cubic-bezier(.4, 0, .6, 1) infinite;--default-transition-duration:.15s;--default-transition-timing-function:cubic-bezier(.4, 0, .2, 1);--default-font-family:var(--font-sans);--default-mono-font-family:var(--font-mono)}}@layer base{*,:after,:before,::backdrop{box-sizing:border-box;border:0 solid;margin:0;padding:0}::file-selector-button{box-sizing:border-box;border:0 solid;margin:0;padding:0}html,:host{-webkit-text-size-adjust:100%;tab-size:4;line-height:1.5;font-family:var(--default-font-family,ui-sans-serif, system-ui, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji");font-feature-settings:var(--default-font-feature-settings,normal);font-variation-settings:var(--default-font-variation-settings,normal);-webkit-tap-highlight-color:transparent}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;-webkit-text-decoration:inherit;-webkit-text-decoration:inherit;-webkit-text-decoration:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:var(--default-mono-font-family,ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace);font-feature-settings:var(--default-mono-font-feature-settings,normal);font-variation-settings:var(--default-mono-font-variation-settings,normal);font-size:1em}small{font-size:80%}sub,sup{vertical-align:baseline;font-size:75%;line-height:0;position:relative}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}:-moz-focusring{outline:auto}progress{vertical-align:baseline}summary{display:list-item}ol,ul,menu{list-style:none}img,svg,video,canvas,audio,iframe,embed,object{vertical-align:middle;display:block}img,video{max-width:100%;height:auto}button,input,select,optgroup,textarea{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}::file-selector-button{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}:where(select:is([multiple],[size])) optgroup{font-weight:bolder}:where(select:is([multiple],[size])) optgroup option{padding-inline-start:20px}::file-selector-button{margin-inline-end:4px}::placeholder{opacity:1}@supports (not ((-webkit-appearance:-apple-pay-button))) or (contain-intrinsic-size:1px){::placeholder{color:currentColor}@supports (color:color-mix(in lab, red, red)){::placeholder{color:color-mix(in oklab, currentcolor 50%, transparent)}}}textarea{resize:vertical}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-date-and-time-value{min-height:1lh;text-align:inherit}::-webkit-datetime-edit{display:inline-flex}::-webkit-datetime-edit-fields-wrapper{padding:0}::-webkit-datetime-edit{padding-block:0}::-webkit-datetime-edit-year-field{padding-block:0}::-webkit-datetime-edit-month-field{padding-block:0}::-webkit-datetime-edit-day-field{padding-block:0}::-webkit-datetime-edit-hour-field{padding-block:0}::-webkit-datetime-edit-minute-field{padding-block:0}::-webkit-datetime-edit-second-field{padding-block:0}::-webkit-datetime-edit-millisecond-field{padding-block:0}::-webkit-datetime-edit-meridiem-field{padding-block:0}::-webkit-calendar-picker-indicator{line-height:1}:-moz-ui-invalid{box-shadow:none}button,input:where([type=button],[type=reset],[type=submit]){appearance:button}::file-selector-button{appearance:button}::-webkit-inner-spin-button{height:auto}::-webkit-outer-spin-button{height:auto}[hidden]:where(:not([hidden=until-found])){display:none!important}}@layer components{.text-primary-contrast{color:var(--p-primary-contrast-color)}label.required:after{content:"*";color:var(--p-red-500);padding-inline-start:2px}.dark label.required:after{color:var(--p-red-600)}}@layer utilities{.pointer-events-none{pointer-events:none}.collapse{visibility:collapse}.invisible{visibility:hidden}.visible{visibility:visible}.absolute{position:absolute}.fixed{position:fixed}.relative{position:relative}.static{position:static}.inset-0{inset:calc(var(--spacing) * 0)}.start{inset-inline-start:var(--spacing)}.start-3{inset-inline-start:calc(var(--spacing) * 3)}.end{inset-inline-end:var(--spacing)}.end-2{inset-inline-end:calc(var(--spacing) * 2)}.-top-1\.5{top:calc(var(--spacing) * -1.5)}.top-1\/2{top:50%}.-right-1\.5{right:calc(var(--spacing) * -1.5)}.right-3{right:calc(var(--spacing) * 3)}.bottom-6{bottom:calc(var(--spacing) * 6)}.left-1\/2{left:50%}.z-10{z-index:10}.order-1{order: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-3{margin-inline:calc(var(--spacing) * 3)}.my-2{margin-block:calc(var(--spacing) * 2)}.ms-2{margin-inline-start:calc(var(--spacing) * 2)}.ms-auto{margin-inline-start:auto}.me-3{margin-inline-end:calc(var(--spacing) * 3)}.mt-1{margin-top:calc(var(--spacing) * 1)}.mt-2{margin-top:calc(var(--spacing) * 2)}.mb-1{margin-bottom:calc(var(--spacing) * 1)}.mb-2{margin-bottom:calc(var(--spacing) * 2)}.mb-3{margin-bottom:calc(var(--spacing) * 3)}.block{display:block}.flex{display:flex}.grid{display:grid}.hidden{display:none}.hidden\!{display:none!important}.inline{display:inline}.inline-block{display:inline-block}.inline-flex{display:inline-flex}.table{display:table}.size-full{width:100%;height:100%}.h-2\.5{height:calc(var(--spacing) * 2.5)}.h-3{height:calc(var(--spacing) * 3)}.h-3\.5{height:calc(var(--spacing) * 3.5)}.h-3\/4{height:75%}.h-4{height:calc(var(--spacing) * 4)}.h-5{height:calc(var(--spacing) * 5)}.h-6{height:calc(var(--spacing) * 6)}.h-8{height:calc(var(--spacing) * 8)}.h-10\!{height:calc(var(--spacing) * 10)!important}.h-25\!{height:calc(var(--spacing) * 25)!important}.h-52{height:calc(var(--spacing) * 52)}.h-\[9px\]{height:9px}.h-\[40px\]{height:40px}.h-\[47px\]{height:47px}.h-\[var\(--header-height\)\]{height:var(--header-height)}.h-full{height:100%}.h-px{height:1px}.max-h-\[50vh\]{max-height:50vh}.min-h-0{min-height:calc(var(--spacing) * 0)}.min-h-6{min-height:calc(var(--spacing) * 6)}.min-h-10{min-height:calc(var(--spacing) * 10)}.min-h-12{min-height:calc(var(--spacing) * 12)}.min-h-14{min-height:calc(var(--spacing) * 14)}.min-h-18\.5{min-height:calc(var(--spacing) * 18.5)}.min-h-20{min-height:calc(var(--spacing) * 20)}.w-2{width:calc(var(--spacing) * 2)}.w-2\.5{width:calc(var(--spacing) * 2.5)}.w-3{width:calc(var(--spacing) * 3)}.w-3\.5{width:calc(var(--spacing) * 3.5)}.w-4{width:calc(var(--spacing) * 4)}.w-5{width:calc(var(--spacing) * 5)}.w-6{width:calc(var(--spacing) * 6)}.w-10{width:calc(var(--spacing) * 10)}.w-10\!{width:calc(var(--spacing) * 10)!important}.w-12{width:calc(var(--spacing) * 12)}.w-25\!{width:calc(var(--spacing) * 25)!important}.w-32{width:calc(var(--spacing) * 32)}.w-44{width:calc(var(--spacing) * 44)}.w-\[1px\]{width:1px}.w-\[47px\]{width:47px}.w-fit{width:fit-content}.w-full{width:100%}.w-px{width:1px}.max-w-0{max-width:calc(var(--spacing) * 0)}.max-w-16{max-width:calc(var(--spacing) * 16)}.max-w-lg{max-width:var(--container-lg)}.max-w-xs{max-width:var(--container-xs)}.min-w-0{min-width:calc(var(--spacing) * 0)}.min-w-2{min-width:calc(var(--spacing) * 2)}.min-w-5{min-width:calc(var(--spacing) * 5)}.min-w-6{min-width:calc(var(--spacing) * 6)}.min-w-12{min-width:calc(var(--spacing) * 12)}.min-w-40{min-width:calc(var(--spacing) * 40)}.min-w-100{min-width:calc(var(--spacing) * 100)}.min-w-\[47px\]{min-width:47px}.min-w-full{min-width:100%}.flex-1{flex:1}.flex-shrink-0,.shrink-0{flex-shrink:0}.grow{flex-grow:1}.table-fixed{table-layout:fixed}.-translate-x-1\/2{--tw-translate-x:calc(calc(1 / 2 * 100%) * -1);translate:var(--tw-translate-x) var(--tw-translate-y)}.-translate-y-1\/2{--tw-translate-y:calc(calc(1 / 2 * 100%) * -1);translate:var(--tw-translate-x) var(--tw-translate-y)}.scale-75{--tw-scale-x:75%;--tw-scale-y:75%;--tw-scale-z:75%;scale:var(--tw-scale-x) var(--tw-scale-y)}.rotate-180{rotate:180deg}.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-default{cursor:default}.cursor-grab{cursor:grab}.cursor-move{cursor:move}.cursor-move\!{cursor:move!important}.cursor-pointer{cursor:pointer}.cursor-text{cursor:text}.resize{resize:both}.grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.grid-cols-24{grid-template-columns:repeat(24,minmax(0,1fr))}.grid-cols-\[80px_minmax\(0\,1fr\)_auto\]{grid-template-columns:80px minmax(0,1fr) auto}.grid-cols-\[minmax\(170px\,1fr\)_minmax\(170px\,1fr\)_minmax\(220px\,2fr\)\]{grid-template-columns:minmax(170px,1fr) minmax(170px,1fr) minmax(220px,2fr)}.flex-col{flex-direction:column}.flex-col-reverse{flex-direction:column-reverse}.flex-row{flex-direction:row}.flex-row-reverse{flex-direction:row-reverse}.flex-wrap{flex-wrap:wrap}.content-start{align-content:flex-start}.items-center{align-items:center}.items-end{align-items:flex-end}.items-start{align-items:flex-start}.justify-between{justify-content:space-between}.justify-center{justify-content:center}.justify-end{justify-content:flex-end}.gap-0\.5{gap:calc(var(--spacing) * .5)}.gap-1{gap:calc(var(--spacing) * 1)}.gap-1\.5{gap:calc(var(--spacing) * 1.5)}.gap-2{gap:calc(var(--spacing) * 2)}.gap-3{gap:calc(var(--spacing) * 3)}.gap-4{gap:calc(var(--spacing) * 4)}.gap-5{gap:calc(var(--spacing) * 5)}:where(.space-y-0\.5>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * .5) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * .5) * calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-1>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * 1) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * 1) * calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-1\.5>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * 1.5) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * 1.5) * calc(1 - var(--tw-space-y-reverse)))}: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-2\.5>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * 2.5) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * 2.5) * 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-y-4>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * 4) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * 4) * calc(1 - var(--tw-space-y-reverse)))}.gap-x-3{column-gap:calc(var(--spacing) * 3)}.gap-x-4{column-gap:calc(var(--spacing) * 4)}: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)))}.gap-y-7{row-gap:calc(var(--spacing) * 7)}:where(.divide-y>:not(:last-child)){--tw-divide-y-reverse:0;border-bottom-style:var(--tw-border-style);border-top-style:var(--tw-border-style);border-top-width:calc(1px * var(--tw-divide-y-reverse));border-bottom-width:calc(1px * calc(1 - var(--tw-divide-y-reverse)))}:where(.divide-gray-200>:not(:last-child)){border-color:var(--color-gray-200)}.justify-self-center{justify-self:center}.justify-self-end{justify-self:flex-end}.truncate{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.overflow-hidden{overflow:hidden}.overflow-x-auto{overflow-x:auto}.overflow-x-hidden{overflow-x:hidden}.overflow-y-auto{overflow-y:auto}.overscroll-contain{overscroll-behavior:contain}.rounded{border-radius:.25rem}.rounded-2xl{border-radius:var(--radius-2xl)}.rounded-\[2px\]{border-radius:2px}.rounded-\[4px\]{border-radius:4px}.rounded-full{border-radius:3.40282e38px}.rounded-lg{border-radius:var(--radius-lg)}.rounded-md{border-radius:var(--radius-md)}.rounded-none{border-radius:0}.rounded-sm{border-radius:var(--radius-sm)}.rounded-xl{border-radius:var(--radius-xl)}.rounded-t-2xl{border-top-left-radius:var(--radius-2xl);border-top-right-radius:var(--radius-2xl)}.rounded-t-xl{border-top-left-radius:var(--radius-xl);border-top-right-radius:var(--radius-xl)}.rounded-l-md{border-top-left-radius:var(--radius-md);border-bottom-left-radius:var(--radius-md)}.rounded-l-none{border-top-left-radius:0;border-bottom-left-radius:0}.rounded-r-none{border-top-right-radius:0;border-bottom-right-radius:0}.border,.border-1{border-style:var(--tw-border-style);border-width:1px}.border-2{border-style:var(--tw-border-style);border-width:2px}.border-e,.border-e-1{border-inline-end-style:var(--tw-border-style);border-inline-end-width:1px}.border-e-2{border-inline-end-style:var(--tw-border-style);border-inline-end-width:2px}.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-dashed{--tw-border-style:dashed;border-style:dashed}.border-\(--p-content-border-color\){border-color:var(--p-content-border-color)}.border-\(--p-inputtext-invalid-border-color\)\!{border-color:var(--p-inputtext-invalid-border-color)!important}.border-blue-500{border-color:var(--color-blue-500)}.border-gray-200{border-color:var(--color-gray-200)}.border-gray-300{border-color:var(--color-gray-300)}.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-400{border-color:var(--p-primary-400)}@supports (color:color-mix(in lab, red, red)){.border-primary-400{border-color:color-mix(in srgb, var(--p-primary-400) calc(100% * 1), transparent)}}.border-slate-200{border-color:var(--color-slate-200)}.border-slate-300{border-color:var(--color-slate-300)}.border-slate-600{border-color:var(--color-slate-600)}.border-surface{border-color:var(--p-content-border-color)}.border-surface-200{border-color:var(--p-surface-200)}@supports (color:color-mix(in lab, red, red)){.border-surface-200{border-color:color-mix(in srgb, var(--p-surface-200) calc(100% * 1), transparent)}}.border-surface-300{border-color:var(--p-surface-300)}@supports (color:color-mix(in lab, red, red)){.border-surface-300{border-color:color-mix(in srgb, var(--p-surface-300) calc(100% * 1), transparent)}}.\!bg-white{background-color:var(--color-white)!important}.bg-\(--p-inputtext-filled-background\){background-color:var(--p-inputtext-filled-background)}.bg-amber-100{background-color:var(--color-amber-100)}.bg-black\/10{background-color:#0000001a}@supports (color:color-mix(in lab, red, red)){.bg-black\/10{background-color:color-mix(in oklab, var(--color-black) 10%, transparent)}}.bg-blue-50{background-color:var(--color-blue-50)}.bg-content{background-color:var(--p-content-background)}.bg-current{background-color:currentColor}.bg-emerald-100{background-color:var(--color-emerald-100)}.bg-gray-50{background-color:var(--color-gray-50)}.bg-gray-100{background-color:var(--color-gray-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-500\!{background-color:var(--p-primary-500)!important}@supports (color:color-mix(in lab, red, red)){.bg-primary-500\!{background-color:color-mix(in srgb, var(--p-primary-500) calc(100% * 1), transparent)!important}}.bg-primary\/10{background-color:var(--p-primary-color)}@supports (color:color-mix(in lab, red, red)){.bg-primary\/10{background-color:color-mix(in oklab, color-mix(in srgb, var(--p-primary-color) calc(100% * 1), transparent) 10%, transparent)}}.bg-red-500{background-color:var(--color-red-500)}.bg-rose-100{background-color:var(--color-rose-100)}.bg-sky-100{background-color:var(--color-sky-100)}.bg-slate-50{background-color:var(--color-slate-50)}.bg-slate-100{background-color:var(--color-slate-100)}.bg-slate-200{background-color:var(--color-slate-200)}.bg-slate-200\/60{background-color:#e2e8f099}@supports (color:color-mix(in lab, red, red)){.bg-slate-200\/60{background-color:color-mix(in oklab, var(--color-slate-200) 60%, transparent)}}.bg-slate-300{background-color:var(--color-slate-300)}.bg-slate-700{background-color:var(--color-slate-700)}.bg-slate-800{background-color:var(--color-slate-800)}.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-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-surface-400\/50{background-color:var(--p-surface-400)}@supports (color:color-mix(in lab, red, red)){.bg-surface-400\/50{background-color:color-mix(in oklab, color-mix(in srgb, var(--p-surface-400) calc(100% * 1), transparent) 50%, transparent)}}.bg-white{background-color:var(--color-white)}.bg-no-repeat{background-repeat:no-repeat}.bg-repeat{background-repeat:repeat}.bg-repeat-y{background-repeat:repeat-y}.\!p-0{padding:calc(var(--spacing) * 0)!important}.p-0{padding:calc(var(--spacing) * 0)}.p-0\.5{padding:calc(var(--spacing) * .5)}.p-1{padding:calc(var(--spacing) * 1)}.p-2{padding:calc(var(--spacing) * 2)}.p-2\.5{padding:calc(var(--spacing) * 2.5)}.p-3{padding:calc(var(--spacing) * 3)}.p-4{padding:calc(var(--spacing) * 4)}.p-5{padding:calc(var(--spacing) * 5)}.px-0{padding-inline:calc(var(--spacing) * 0)}.px-1{padding-inline:calc(var(--spacing) * 1)}.px-1\.5{padding-inline:calc(var(--spacing) * 1.5)}.px-2{padding-inline:calc(var(--spacing) * 2)}.px-2\.5{padding-inline:calc(var(--spacing) * 2.5)}.px-3{padding-inline:calc(var(--spacing) * 3)}.px-4{padding-inline:calc(var(--spacing) * 4)}.px-5{padding-inline:calc(var(--spacing) * 5)}.py-0\.5{padding-block:calc(var(--spacing) * .5)}.py-1{padding-block:calc(var(--spacing) * 1)}.py-1\.5{padding-block:calc(var(--spacing) * 1.5)}.py-2{padding-block:calc(var(--spacing) * 2)}.py-2\.5{padding-block:calc(var(--spacing) * 2.5)}.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-10{padding-block:calc(var(--spacing) * 10)}.ps-9{padding-inline-start:calc(var(--spacing) * 9)}.pe-8{padding-inline-end:calc(var(--spacing) * 8)}.pt-0{padding-top:calc(var(--spacing) * 0)}.pt-2{padding-top:calc(var(--spacing) * 2)}.pt-4{padding-top:calc(var(--spacing) * 4)}.pr-0\.5{padding-right:calc(var(--spacing) * .5)}.pr-1{padding-right:calc(var(--spacing) * 1)}.pr-px{padding-right:1px}.pb-3{padding-bottom:calc(var(--spacing) * 3)}.pb-16{padding-bottom:calc(var(--spacing) * 16)}.pl-0\.5{padding-left:calc(var(--spacing) * .5)}.text-center{text-align:center}.text-end\!{text-align:end!important}.text-right{text-align:right}.text-start{text-align:start}.align-middle{vertical-align:middle}.align-super\!{vertical-align:super!important}.font-mono{font-family:var(--font-mono)}.text-2xl{font-size:var(--text-2xl);line-height:var(--tw-leading,var(--text-2xl--line-height))}.text-2xl\!{font-size:var(--text-2xl)!important;line-height:var(--tw-leading,var(--text-2xl--line-height))!important}.text-3xl{font-size:var(--text-3xl);line-height:var(--tw-leading,var(--text-3xl--line-height))}.text-4xl\!{font-size:var(--text-4xl)!important;line-height:var(--tw-leading,var(--text-4xl--line-height))!important}.text-8xl{font-size:var(--text-8xl);line-height:var(--tw-leading,var(--text-8xl--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-xl\!{font-size:var(--text-xl)!important;line-height:var(--tw-leading,var(--text-xl--line-height))!important}.text-xs{font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height))}.text-\[\.95rem\]{font-size:.95rem}.text-\[10px\]{font-size:10px}.leading-6{--tw-leading:calc(var(--spacing) * 6);line-height:calc(var(--spacing) * 6)}.leading-none{--tw-leading:1;line-height:1}.leading-relaxed{--tw-leading:var(--leading-relaxed);line-height:var(--leading-relaxed)}.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)}.tracking-wide{--tw-tracking:var(--tracking-wide);letter-spacing:var(--tracking-wide)}.tracking-wider{--tw-tracking:var(--tracking-wider);letter-spacing:var(--tracking-wider)}.whitespace-nowrap{white-space:nowrap}.text-amber-300{color:var(--color-amber-300)}.text-amber-600{color:var(--color-amber-600)}.text-amber-700{color:var(--color-amber-700)}.text-blue-600{color:var(--color-blue-600)}.text-color{color:var(--p-text-color)}.text-emerald-400{color:var(--color-emerald-400)}.text-emerald-600{color:var(--color-emerald-600)}.text-emerald-700{color:var(--color-emerald-700)}.text-gray-300{color:var(--color-gray-300)}.text-gray-400{color:var(--color-gray-400)}.text-gray-400\!{color:var(--color-gray-400)!important}.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-900{color:var(--color-gray-900)}.text-green-500{color:var(--color-green-500)}.text-green-600{color:var(--color-green-600)}.text-muted-color{color:var(--p-text-muted-color)}.text-primary{color:var(--p-primary-color)}@supports (color:color-mix(in lab, red, red)){.text-primary{color:color-mix(in srgb, var(--p-primary-color) calc(100% * 1), transparent)}}.text-primary-300{color:var(--p-primary-300)}@supports (color:color-mix(in lab, red, red)){.text-primary-300{color:color-mix(in srgb, var(--p-primary-300) calc(100% * 1), transparent)}}.text-primary-400{color:var(--p-primary-400)}@supports (color:color-mix(in lab, red, red)){.text-primary-400{color:color-mix(in srgb, var(--p-primary-400) calc(100% * 1), transparent)}}.text-primary-700{color:var(--p-primary-700)}@supports (color:color-mix(in lab, red, red)){.text-primary-700{color:color-mix(in srgb, var(--p-primary-700) calc(100% * 1), transparent)}}.text-purple-600{color:var(--color-purple-600)}.text-red-600{color:var(--color-red-600)}.text-rose-600{color:var(--color-rose-600)}.text-rose-700{color:var(--color-rose-700)}.text-sky-700{color:var(--color-sky-700)}.text-slate-200{color:var(--color-slate-200)}.text-slate-300{color:var(--color-slate-300)}.text-slate-400{color:var(--color-slate-400)}.text-slate-500{color:var(--color-slate-500)}.text-slate-600{color:var(--color-slate-600)}.text-slate-700{color:var(--color-slate-700)}.text-surface-400{color:var(--p-surface-400)}@supports (color:color-mix(in lab, red, red)){.text-surface-400{color:color-mix(in srgb, var(--p-surface-400) calc(100% * 1), transparent)}}.text-surface-500{color:var(--p-surface-500)}@supports (color:color-mix(in lab, red, red)){.text-surface-500{color:color-mix(in srgb, var(--p-surface-500) calc(100% * 1), transparent)}}.text-surface-600{color:var(--p-surface-600)}@supports (color:color-mix(in lab, red, red)){.text-surface-600{color:color-mix(in srgb, var(--p-surface-600) calc(100% * 1), transparent)}}.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-white{color:var(--color-white)}.text-white\!{color:var(--color-white)!important}.text-yellow-600{color:var(--color-yellow-600)}.uppercase{text-transform:uppercase}.italic{font-style:italic}.tabular-nums{--tw-numeric-spacing:tabular-nums;font-variant-numeric:var(--tw-ordinal,) var(--tw-slashed-zero,) var(--tw-numeric-figure,) var(--tw-numeric-spacing,) var(--tw-numeric-fraction,)}.underline{text-decoration-line:underline}.opacity-0{opacity:0}.opacity-30{opacity:.3}.opacity-50{opacity:.5}.opacity-60{opacity:.6}.opacity-70{opacity:.7}.opacity-80{opacity:.8}.opacity-100{opacity:1}.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-primary-200{--tw-ring-color:var(--p-primary-200)}@supports (color:color-mix(in lab, red, red)){.ring-primary-200{--tw-ring-color:color-mix(in srgb, var(--p-primary-200) calc(100% * 1), transparent)}}.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-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-200{--tw-duration:.2s;transition-duration:.2s}.duration-300{--tw-duration:.3s;transition-duration:.3s}.duration-400{--tw-duration:.4s;transition-duration:.4s}.ease-in-out{--tw-ease:var(--ease-in-out);transition-timing-function:var(--ease-in-out)}.select-none{-webkit-user-select:none;user-select:none}@media (hover:hover){.group-hover\:pointer-events-auto:is(:where(.group):hover *){pointer-events:auto}.group-hover\:animate-pulse:is(:where(.group):hover *){animation:var(--animate-pulse)}.group-hover\:text-primary-600:is(:where(.group):hover *){color:var(--p-primary-600)}@supports (color:color-mix(in lab, red, red)){.group-hover\:text-primary-600:is(:where(.group):hover *){color:color-mix(in srgb, var(--p-primary-600) calc(100% * 1), transparent)}}.group-hover\:opacity-100:is(:where(.group):hover *){opacity:1}}.placeholder\:text-slate-400::placeholder{color:var(--color-slate-400)}.focus-within\:border-primary:focus-within{border-color:var(--p-primary-color)}@supports (color:color-mix(in lab, red, red)){.focus-within\:border-primary:focus-within{border-color:color-mix(in srgb, var(--p-primary-color) calc(100% * 1), transparent)}}.focus-within\:ring-2:focus-within{--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)}.focus-within\:ring-primary\/10:focus-within{--tw-ring-color:var(--p-primary-color)}@supports (color:color-mix(in lab, red, red)){.focus-within\:ring-primary\/10:focus-within{--tw-ring-color:color-mix(in oklab, color-mix(in srgb, var(--p-primary-color) calc(100% * 1), transparent) 10%, transparent)}}@media (hover:hover){.hover\:scale-100:hover{--tw-scale-x:100%;--tw-scale-y:100%;--tw-scale-z:100%;scale:var(--tw-scale-x) var(--tw-scale-y)}.hover\:scale-125:hover{--tw-scale-x:125%;--tw-scale-y:125%;--tw-scale-z:125%;scale:var(--tw-scale-x) var(--tw-scale-y)}.hover\:border-\(--p-inputtext-hover-border-color\)\!:hover{border-color:var(--p-inputtext-hover-border-color)!important}.hover\:border-gray-400:hover{border-color:var(--color-gray-400)}.hover\:border-primary:hover{border-color:var(--p-primary-color)}@supports (color:color-mix(in lab, red, red)){.hover\:border-primary:hover{border-color:color-mix(in srgb, var(--p-primary-color) calc(100% * 1), transparent)}}.hover\:bg-amber-200:hover{background-color:var(--color-amber-200)}.hover\:bg-blue-50:hover{background-color:var(--color-blue-50)}.hover\:bg-emerald-200:hover{background-color:var(--color-emerald-200)}.hover\:bg-gray-50:hover{background-color:var(--color-gray-50)}.hover\:bg-gray-100:hover{background-color:var(--color-gray-100)}.hover\:bg-green-50:hover{background-color:var(--color-green-50)}.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-purple-50:hover{background-color:var(--color-purple-50)}.hover\:bg-red-50:hover{background-color:var(--color-red-50)}.hover\:bg-red-600:hover{background-color:var(--color-red-600)}.hover\:bg-rose-200:hover{background-color:var(--color-rose-200)}.hover\:bg-sky-200:hover{background-color:var(--color-sky-200)}.hover\:bg-slate-100:hover{background-color:var(--color-slate-100)}.hover\:bg-slate-200:hover{background-color:var(--color-slate-200)}.hover\:bg-slate-300:hover{background-color:var(--color-slate-300)}.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\:bg-yellow-50:hover{background-color:var(--color-yellow-50)}.hover\:text-blue-700:hover{color:var(--color-blue-700)}.hover\:text-gray-600:hover{color:var(--color-gray-600)}.hover\:text-gray-700:hover{color:var(--color-gray-700)}.hover\:text-green-700:hover{color:var(--color-green-700)}.hover\:text-purple-700:hover{color:var(--color-purple-700)}.hover\:text-red-700:hover{color:var(--color-red-700)}.hover\:text-slate-600:hover{color:var(--color-slate-600)}.hover\:text-slate-800:hover{color:var(--color-slate-800)}.hover\:text-yellow-700:hover{color:var(--color-yellow-700)}.hover\:opacity-100:hover{opacity:1}.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)}.hover\:shadow-sm:hover{--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)}}.focus\:border-primary:focus{border-color:var(--p-primary-color)}@supports (color:color-mix(in lab, red, red)){.focus\:border-primary:focus{border-color:color-mix(in srgb, var(--p-primary-color) calc(100% * 1), transparent)}}.focus\:bg-white:focus{background-color:var(--color-white)}.focus\:ring-2:focus{--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)}.focus\:ring-primary\/20:focus{--tw-ring-color:var(--p-primary-color)}@supports (color:color-mix(in lab, red, red)){.focus\:ring-primary\/20:focus{--tw-ring-color:color-mix(in oklab, color-mix(in srgb, var(--p-primary-color) calc(100% * 1), transparent) 20%, transparent)}}.focus\:outline-none:focus{--tw-outline-style:none;outline-style:none}.active\:scale-95:active{--tw-scale-x:95%;--tw-scale-y:95%;--tw-scale-z:95%;scale:var(--tw-scale-x) var(--tw-scale-y)}.active\:cursor-grabbing:active{cursor:grabbing}.active\:bg-gray-100:active{background-color:var(--color-gray-100)}@media not all and (min-width:64rem){.max-lg\:w-full{width:100%}.max-lg\:grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}.max-lg\:flex-col{flex-direction:column}.max-lg\:items-start{align-items:flex-start}.max-lg\:items-stretch{align-items:stretch}.max-lg\:gap-3{gap:calc(var(--spacing) * 3)}}.rtl\:rotate-180:where(:dir(rtl),[dir=rtl],[dir=rtl] *){rotate:180deg}.dark\:border-slate-600:where(.dark,.dark *){border-color:var(--color-slate-600)}.dark\:border-slate-700:where(.dark,.dark *){border-color:var(--color-slate-700)}.dark\:border-surface-500:where(.dark,.dark *){border-color:var(--p-surface-500)}@supports (color:color-mix(in lab, red, red)){.dark\:border-surface-500:where(.dark,.dark *){border-color:color-mix(in srgb, var(--p-surface-500) calc(100% * 1), transparent)}}.dark\:border-surface-700:where(.dark,.dark *){border-color:var(--p-surface-700)}@supports (color:color-mix(in lab, red, red)){.dark\:border-surface-700:where(.dark,.dark *){border-color:color-mix(in srgb, var(--p-surface-700) calc(100% * 1), transparent)}}.dark\:bg-amber-900\/30:where(.dark,.dark *){background-color:#7b33064d}@supports (color:color-mix(in lab, red, red)){.dark\:bg-amber-900\/30:where(.dark,.dark *){background-color:color-mix(in oklab, var(--color-amber-900) 30%, transparent)}}.dark\:bg-emerald-900:where(.dark,.dark *){background-color:var(--color-emerald-900)}.dark\:bg-emerald-900\/30:where(.dark,.dark *){background-color:#004e3b4d}@supports (color:color-mix(in lab, red, red)){.dark\:bg-emerald-900\/30:where(.dark,.dark *){background-color:color-mix(in oklab, var(--color-emerald-900) 30%, transparent)}}.dark\:bg-primary-800:where(.dark,.dark *){background-color:var(--p-primary-800)}@supports (color:color-mix(in lab, red, red)){.dark\:bg-primary-800:where(.dark,.dark *){background-color:color-mix(in srgb, var(--p-primary-800) calc(100% * 1), transparent)}}.dark\:bg-primary-900:where(.dark,.dark *){background-color:var(--p-primary-900)}@supports (color:color-mix(in lab, red, red)){.dark\:bg-primary-900:where(.dark,.dark *){background-color:color-mix(in srgb, var(--p-primary-900) calc(100% * 1), transparent)}}.dark\:bg-primary-900\/20:where(.dark,.dark *){background-color:var(--p-primary-900)}@supports (color:color-mix(in lab, red, red)){.dark\:bg-primary-900\/20:where(.dark,.dark *){background-color:color-mix(in oklab, color-mix(in srgb, var(--p-primary-900) calc(100% * 1), transparent) 20%, transparent)}}.dark\:bg-rose-900:where(.dark,.dark *){background-color:var(--color-rose-900)}.dark\:bg-rose-900\/30:where(.dark,.dark *){background-color:#8b08364d}@supports (color:color-mix(in lab, red, red)){.dark\:bg-rose-900\/30:where(.dark,.dark *){background-color:color-mix(in oklab, var(--color-rose-900) 30%, transparent)}}.dark\:bg-sky-900\/30:where(.dark,.dark *){background-color:#024a704d}@supports (color:color-mix(in lab, red, red)){.dark\:bg-sky-900\/30:where(.dark,.dark *){background-color:color-mix(in oklab, var(--color-sky-900) 30%, transparent)}}.dark\:bg-slate-600:where(.dark,.dark *){background-color:var(--color-slate-600)}.dark\:bg-slate-700:where(.dark,.dark *){background-color:var(--color-slate-700)}.dark\:bg-slate-700\/60:where(.dark,.dark *){background-color:#31415899}@supports (color:color-mix(in lab, red, red)){.dark\:bg-slate-700\/60:where(.dark,.dark *){background-color:color-mix(in oklab, var(--color-slate-700) 60%, transparent)}}.dark\:bg-slate-800:where(.dark,.dark *){background-color:var(--color-slate-800)}.dark\:bg-slate-900:where(.dark,.dark *){background-color:var(--color-slate-900)}.dark\:bg-surface-800:where(.dark,.dark *){background-color:var(--p-surface-800)}@supports (color:color-mix(in lab, red, red)){.dark\:bg-surface-800:where(.dark,.dark *){background-color:color-mix(in srgb, var(--p-surface-800) calc(100% * 1), transparent)}}.dark\:bg-surface-900:where(.dark,.dark *){background-color:var(--p-surface-900)}@supports (color:color-mix(in lab, red, red)){.dark\:bg-surface-900:where(.dark,.dark *){background-color:color-mix(in srgb, var(--p-surface-900) calc(100% * 1), transparent)}}.dark\:bg-surface-950:where(.dark,.dark *){background-color:var(--p-surface-950)}@supports (color:color-mix(in lab, red, red)){.dark\:bg-surface-950:where(.dark,.dark *){background-color:color-mix(in srgb, var(--p-surface-950) calc(100% * 1), transparent)}}.dark\:text-amber-300:where(.dark,.dark *){color:var(--color-amber-300)}.dark\:text-amber-400:where(.dark,.dark *){color:var(--color-amber-400)}.dark\:text-emerald-300:where(.dark,.dark *){color:var(--color-emerald-300)}.dark\:text-emerald-400:where(.dark,.dark *){color:var(--color-emerald-400)}.dark\:text-gray-50:where(.dark,.dark *){color:var(--color-gray-50)}.dark\:text-gray-100:where(.dark,.dark *){color:var(--color-gray-100)}.dark\:text-gray-200:where(.dark,.dark *){color:var(--color-gray-200)}.dark\:text-gray-300:where(.dark,.dark *){color:var(--color-gray-300)}.dark\:text-primary-300:where(.dark,.dark *){color:var(--p-primary-300)}@supports (color:color-mix(in lab, red, red)){.dark\:text-primary-300:where(.dark,.dark *){color:color-mix(in srgb, var(--p-primary-300) calc(100% * 1), transparent)}}.dark\:text-rose-300:where(.dark,.dark *){color:var(--color-rose-300)}.dark\:text-rose-400:where(.dark,.dark *){color:var(--color-rose-400)}.dark\:text-sky-300:where(.dark,.dark *){color:var(--color-sky-300)}.dark\:text-slate-200:where(.dark,.dark *){color:var(--color-slate-200)}.dark\:text-slate-300:where(.dark,.dark *){color:var(--color-slate-300)}.dark\:text-slate-400:where(.dark,.dark *){color:var(--color-slate-400)}.dark\:text-slate-500:where(.dark,.dark *){color:var(--color-slate-500)}.dark\:text-slate-600:where(.dark,.dark *){color:var(--color-slate-600)}.dark\:text-surface-500:where(.dark,.dark *){color:var(--p-surface-500)}@supports (color:color-mix(in lab, red, red)){.dark\:text-surface-500:where(.dark,.dark *){color:color-mix(in srgb, var(--p-surface-500) calc(100% * 1), transparent)}}.dark\:placeholder\:text-slate-500:where(.dark,.dark *)::placeholder{color:var(--color-slate-500)}@media (hover:hover){.dark\:hover\:bg-amber-900\/50:where(.dark,.dark *):hover{background-color:#7b330680}@supports (color:color-mix(in lab, red, red)){.dark\:hover\:bg-amber-900\/50:where(.dark,.dark *):hover{background-color:color-mix(in oklab, var(--color-amber-900) 50%, transparent)}}.dark\:hover\:bg-emerald-900\/50:where(.dark,.dark *):hover{background-color:#004e3b80}@supports (color:color-mix(in lab, red, red)){.dark\:hover\:bg-emerald-900\/50:where(.dark,.dark *):hover{background-color:color-mix(in oklab, var(--color-emerald-900) 50%, transparent)}}.dark\:hover\:bg-gray-800:where(.dark,.dark *):hover{background-color:var(--color-gray-800)}.dark\:hover\:bg-red-950:where(.dark,.dark *):hover{background-color:var(--color-red-950)}.dark\:hover\:bg-rose-900\/50:where(.dark,.dark *):hover{background-color:#8b083680}@supports (color:color-mix(in lab, red, red)){.dark\:hover\:bg-rose-900\/50:where(.dark,.dark *):hover{background-color:color-mix(in oklab, var(--color-rose-900) 50%, transparent)}}.dark\:hover\:bg-sky-900\/50:where(.dark,.dark *):hover{background-color:#024a7080}@supports (color:color-mix(in lab, red, red)){.dark\:hover\:bg-sky-900\/50:where(.dark,.dark *):hover{background-color:color-mix(in oklab, var(--color-sky-900) 50%, transparent)}}.dark\:hover\:bg-slate-600:where(.dark,.dark *):hover{background-color:var(--color-slate-600)}.dark\:hover\:bg-slate-700:where(.dark,.dark *):hover{background-color:var(--color-slate-700)}.dark\:hover\:bg-surface-700:where(.dark,.dark *):hover{background-color:var(--p-surface-700)}@supports (color:color-mix(in lab, red, red)){.dark\:hover\:bg-surface-700:where(.dark,.dark *):hover{background-color:color-mix(in srgb, var(--p-surface-700) calc(100% * 1), transparent)}}.dark\:hover\:bg-surface-900:where(.dark,.dark *):hover{background-color:var(--p-surface-900)}@supports (color:color-mix(in lab, red, red)){.dark\:hover\:bg-surface-900:where(.dark,.dark *):hover{background-color:color-mix(in srgb, var(--p-surface-900) calc(100% * 1), transparent)}}.dark\:hover\:bg-surface-950:where(.dark,.dark *):hover{background-color:var(--p-surface-950)}@supports (color:color-mix(in lab, red, red)){.dark\:hover\:bg-surface-950:where(.dark,.dark *):hover{background-color:color-mix(in srgb, var(--p-surface-950) calc(100% * 1), transparent)}}.dark\:hover\:text-gray-100:where(.dark,.dark *):hover{color:var(--color-gray-100)}}.dark\:focus\:bg-slate-900:where(.dark,.dark *):focus{background-color:var(--color-slate-900)}}@font-face{font-family:InterVariable;font-style:normal;font-weight:100 900;font-display:swap;src:url(fonts/InterVariable.woff2)format("woff2")}@font-face{font-family:InterVariable;font-style:italic;font-weight:100 900;font-display:swap;src:url(fonts/InterVariable-Italic.woff2)format("woff2")}@font-face{font-family:Inter;font-style:normal;font-weight:100;font-display:swap;src:url(fonts/Inter-Thin.woff2)format("woff2")}@font-face{font-family:Inter;font-style:italic;font-weight:100;font-display:swap;src:url(fonts/Inter-ThinItalic.woff2)format("woff2")}@font-face{font-family:Inter;font-style:normal;font-weight:200;font-display:swap;src:url(fonts/Inter-ExtraLight.woff2)format("woff2")}@font-face{font-family:Inter;font-style:italic;font-weight:200;font-display:swap;src:url(fonts/Inter-ExtraLightItalic.woff2)format("woff2")}@font-face{font-family:Inter;font-style:normal;font-weight:300;font-display:swap;src:url(fonts/Inter-Light.woff2)format("woff2")}@font-face{font-family:Inter;font-style:italic;font-weight:300;font-display:swap;src:url(fonts/Inter-LightItalic.woff2)format("woff2")}@font-face{font-family:Inter;font-style:normal;font-weight:400;font-display:swap;src:url(fonts/Inter-Regular.woff2)format("woff2")}@font-face{font-family:Inter;font-style:italic;font-weight:400;font-display:swap;src:url(fonts/Inter-Italic.woff2)format("woff2")}@font-face{font-family:Inter;font-style:normal;font-weight:500;font-display:swap;src:url(fonts/Inter-Medium.woff2)format("woff2")}@font-face{font-family:Inter;font-style:italic;font-weight:500;font-display:swap;src:url(fonts/Inter-MediumItalic.woff2)format("woff2")}@font-face{font-family:Inter;font-style:normal;font-weight:600;font-display:swap;src:url(fonts/Inter-SemiBold.woff2)format("woff2")}@font-face{font-family:Inter;font-style:italic;font-weight:600;font-display:swap;src:url(fonts/Inter-SemiBoldItalic.woff2)format("woff2")}@font-face{font-family:Inter;font-style:normal;font-weight:700;font-display:swap;src:url(fonts/Inter-Bold.woff2)format("woff2")}@font-face{font-family:Inter;font-style:italic;font-weight:700;font-display:swap;src:url(fonts/Inter-BoldItalic.woff2)format("woff2")}@font-face{font-family:Inter;font-style:normal;font-weight:800;font-display:swap;src:url(fonts/Inter-ExtraBold.woff2)format("woff2")}@font-face{font-family:Inter;font-style:italic;font-weight:800;font-display:swap;src:url(fonts/Inter-ExtraBoldItalic.woff2)format("woff2")}@font-face{font-family:Inter;font-style:normal;font-weight:900;font-display:swap;src:url(fonts/Inter-Black.woff2)format("woff2")}@font-face{font-family:Inter;font-style:italic;font-weight:900;font-display:swap;src:url(fonts/Inter-BlackItalic.woff2)format("woff2")}@font-face{font-family:InterDisplay;font-style:normal;font-weight:100;font-display:swap;src:url(fonts/InterDisplay-Thin.woff2)format("woff2")}@font-face{font-family:InterDisplay;font-style:italic;font-weight:100;font-display:swap;src:url(fonts/InterDisplay-ThinItalic.woff2)format("woff2")}@font-face{font-family:InterDisplay;font-style:normal;font-weight:200;font-display:swap;src:url(fonts/InterDisplay-ExtraLight.woff2)format("woff2")}@font-face{font-family:InterDisplay;font-style:italic;font-weight:200;font-display:swap;src:url(fonts/InterDisplay-ExtraLightItalic.woff2)format("woff2")}@font-face{font-family:InterDisplay;font-style:normal;font-weight:300;font-display:swap;src:url(fonts/InterDisplay-Light.woff2)format("woff2")}@font-face{font-family:InterDisplay;font-style:italic;font-weight:300;font-display:swap;src:url(fonts/InterDisplay-LightItalic.woff2)format("woff2")}@font-face{font-family:InterDisplay;font-style:normal;font-weight:400;font-display:swap;src:url(fonts/InterDisplay-Regular.woff2)format("woff2")}@font-face{font-family:InterDisplay;font-style:italic;font-weight:400;font-display:swap;src:url(fonts/InterDisplay-Italic.woff2)format("woff2")}@font-face{font-family:InterDisplay;font-style:normal;font-weight:500;font-display:swap;src:url(fonts/InterDisplay-Medium.woff2)format("woff2")}@font-face{font-family:InterDisplay;font-style:italic;font-weight:500;font-display:swap;src:url(fonts/InterDisplay-MediumItalic.woff2)format("woff2")}@font-face{font-family:InterDisplay;font-style:normal;font-weight:600;font-display:swap;src:url(fonts/InterDisplay-SemiBold.woff2)format("woff2")}@font-face{font-family:InterDisplay;font-style:italic;font-weight:600;font-display:swap;src:url(fonts/InterDisplay-SemiBoldItalic.woff2)format("woff2")}@font-face{font-family:InterDisplay;font-style:normal;font-weight:700;font-display:swap;src:url(fonts/InterDisplay-Bold.woff2)format("woff2")}@font-face{font-family:InterDisplay;font-style:italic;font-weight:700;font-display:swap;src:url(fonts/InterDisplay-BoldItalic.woff2)format("woff2")}@font-face{font-family:InterDisplay;font-style:normal;font-weight:800;font-display:swap;src:url(fonts/InterDisplay-ExtraBold.woff2)format("woff2")}@font-face{font-family:InterDisplay;font-style:italic;font-weight:800;font-display:swap;src:url(fonts/InterDisplay-ExtraBoldItalic.woff2)format("woff2")}@font-face{font-family:InterDisplay;font-style:normal;font-weight:900;font-display:swap;src:url(fonts/InterDisplay-Black.woff2)format("woff2")}@font-face{font-family:InterDisplay;font-style:italic;font-weight:900;font-display:swap;src:url(fonts/InterDisplay-BlackItalic.woff2)format("woff2")}@font-feature-values InterVariable{@character-variant{cv01:1;cv02:2;cv03:3;cv04:4;cv05:5;cv06:6;cv07:7;cv08:8;cv09:9;cv10:10;cv11:11;cv12:12;cv13:13;alt-1:1;alt-3:9;open-4:2;open-6:3;open-9:4;lc-l-with-tail:5;simplified-u:6;alt-double-s:7;uc-i-with-serif:8;uc-g-with-spur:10;single-story-a:11;compact-lc-f:12;compact-lc-t:13}@styleset{ss01:1;ss02:2;ss03:3;ss04:4;ss05:5;ss06:6;ss07:7;ss08:8;open-digits:1;disambiguation:2;disambiguation-except-zero:4;round-quotes-and-commas:3;square-punctuation:7;square-quotes:8;circled-characters:5;squared-characters:6}}@font-feature-values Inter{@character-variant{cv01:1;cv02:2;cv03:3;cv04:4;cv05:5;cv06:6;cv07:7;cv08:8;cv09:9;cv10:10;cv11:11;cv12:12;cv13:13;alt-1:1;alt-3:9;open-4:2;open-6:3;open-9:4;lc-l-with-tail:5;simplified-u:6;alt-double-s:7;uc-i-with-serif:8;uc-g-with-spur:10;single-story-a:11;compact-lc-f:12;compact-lc-t:13}@styleset{ss01:1;ss02:2;ss03:3;ss04:4;ss05:5;ss06:6;ss07:7;ss08:8;open-digits:1;disambiguation:2;disambiguation-except-zero:4;round-quotes-and-commas:3;square-punctuation:7;square-quotes:8;circled-characters:5;squared-characters:6}}@font-feature-values InterDisplay{@character-variant{cv01:1;cv02:2;cv03:3;cv04:4;cv05:5;cv06:6;cv07:7;cv08:8;cv09:9;cv10:10;cv11:11;cv12:12;cv13:13;alt-1:1;alt-3:9;open-4:2;open-6:3;open-9:4;lc-l-with-tail:5;simplified-u:6;alt-double-s:7;uc-i-with-serif:8;uc-g-with-spur:10;single-story-a:11;compact-lc-f:12;compact-lc-t:13}@styleset{ss01:1;ss02:2;ss03:3;ss04:4;ss05:5;ss06:6;ss07:7;ss08:8;open-digits:1;disambiguation:2;disambiguation-except-zero:4;round-quotes-and-commas:3;square-punctuation:7;square-quotes:8;circled-characters:5;squared-characters:6}}@font-face{font-family:CairoVariable;font-style:normal;font-weight:200 900;font-display:swap;src:url(fonts/Cairo-VariableFont_slnt,wght.woff2)format("woff2")}@font-face{font-family:Cairo;font-style:normal;font-weight:200;font-display:swap;src:url(fonts/Cairo-ExtraLight.woff2)format("woff2")}@font-face{font-family:Cairo;font-style:normal;font-weight:300;font-display:swap;src:url(fonts/Cairo-Light.woff2)format("woff2")}@font-face{font-family:Cairo;font-style:normal;font-weight:400;font-display:swap;src:url(fonts/Cairo-Regular.woff2)format("woff2")}@font-face{font-family:Cairo;font-style:normal;font-weight:500;font-display:swap;src:url(fonts/Cairo-Medium.woff2)format("woff2")}@font-face{font-family:Cairo;font-style:normal;font-weight:600;font-display:swap;src:url(fonts/Cairo-SemiBold.woff2)format("woff2")}@font-face{font-family:Cairo;font-style:normal;font-weight:700;font-display:swap;src:url(fonts/Cairo-Bold.woff2)format("woff2")}@font-face{font-family:Cairo;font-style:normal;font-weight:800;font-display:swap;src:url(fonts/Cairo-ExtraBold.woff2)format("woff2")}@font-face{font-family:Cairo;font-style:normal;font-weight:900;font-display:swap;src:url(fonts/Cairo-Black.woff2)format("woff2")}:root{--default-font-family:"Inter", "Cairo", sans-serif;--app-background-light:var(--p-surface-100);--app-background-dark:var(--p-surface-950);--app-background:var(--app-background-light)}:root[class=dark]{--app-background:var(--app-background-dark)}:lang(ar){--default-font-family:"Cairo", "Inter", sans-serif}@supports (font-variation-settings:normal){:root{--default-font-family:"InterVariable", "CairoVariable", sans-serif;font-optical-sizing:auto}:lang(ar){--default-font-family:"CairoVariable", "InterVariable", sans-serif;font-optical-sizing:auto}}body{background-color:var(--app-background);color:var(--p-text-color)}.mt-dialog .p-dialog-header{background-color:var(--p-surface-100);border-radius:.75rem .75rem 0 0;padding:1rem 1.25rem}.mt-dialog .p-dialog-header .p-dialog-header-actions .p-dialog-close-button{background-color:#fff;border-radius:.3rem;justify-content:center;width:2rem;height:2rem}.mt-dialog .p-dialog-content{border-radius:.8rem;height:100%;overflow-y:hidden}.mt-dialog .p-dialog-content .mt-modal-content{height:100%;padding-bottom:5rem;overflow:auto}.mt-dialog .p-dialog-content .mt-modal-footer{background-color:var(--p-surface-100);justify-content:end;gap:10px;padding:.8rem 1.25rem;display:flex;position:sticky;bottom:0}.mt-drawer .p-drawer-content .mt-modal-content{height:calc(100% - 60px);overflow:auto}.mt-drawer .p-drawer-content .mt-modal-footer{border-top:1px solid var(--p-surface-200);justify-content:flex-end;gap:.5rem;height:15rem;padding:.75rem;display:flex}.mt-custom-drawer .p-drawer-header,.mt-custom-drawer .p-drawer-content,.mt-custom-drawer .p-drawer-footer,.mt-drawer .p-drawer-header,.mt-drawer .p-drawer-content,.mt-drawer .p-drawer-footer{padding:0}.mt-drawer .p-drawer-content,body:has(:is(.p-dialog-mask.p-overlay-mask,.p-drawer-mask.p-overlay-mask)){overflow:hidden}.mt-tree .p-tree-node-toggle-button,.mt-tree .p-tree-node-checkbox{display:none!important}.mt-tree .p-tree-node-label{width:100%!important}.mt-tree .p-tree-node-content{margin-bottom:8px;padding:0!important}.mt-tree .p-tree-node-icon{display:none!important}.mt-tree .p-tree-filter-input{height:3rem}.mt-tree p-iconfield{width:60%;margin-bottom:1rem}.mt-tree .p-tree-node-selected .mt-tree-node{border-color:var(--p-primary-300)!important}.p-drawer-mask{background-color:#0000!important}@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-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}@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-divide-y-reverse{syntax:"*";inherits:false;initial-value:0}@property --tw-border-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-leading{syntax:"*";inherits:false}@property --tw-font-weight{syntax:"*";inherits:false}@property --tw-tracking{syntax:"*";inherits:false}@property --tw-ordinal{syntax:"*";inherits:false}@property --tw-slashed-zero{syntax:"*";inherits:false}@property --tw-numeric-figure{syntax:"*";inherits:false}@property --tw-numeric-spacing{syntax:"*";inherits:false}@property --tw-numeric-fraction{syntax:"*";inherits:false}@property --tw-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-shadow-color{syntax:"*";inherits:false}@property --tw-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-inset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-shadow-color{syntax:"*";inherits:false}@property --tw-inset-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-ring-color{syntax:"*";inherits:false}@property --tw-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-ring-color{syntax:"*";inherits:false}@property --tw-inset-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-ring-inset{syntax:"*";inherits:false}@property --tw-ring-offset-width{syntax:"<length>";inherits:false;initial-value:0}@property --tw-ring-offset-color{syntax:"*";inherits:false;initial-value:#fff}@property --tw-ring-offset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-blur{syntax:"*";inherits:false}@property --tw-brightness{syntax:"*";inherits:false}@property --tw-contrast{syntax:"*";inherits:false}@property --tw-grayscale{syntax:"*";inherits:false}@property --tw-hue-rotate{syntax:"*";inherits:false}@property --tw-invert{syntax:"*";inherits:false}@property --tw-opacity{syntax:"*";inherits:false}@property --tw-saturate{syntax:"*";inherits:false}@property --tw-sepia{syntax:"*";inherits:false}@property --tw-drop-shadow{syntax:"*";inherits:false}@property --tw-drop-shadow-color{syntax:"*";inherits:false}@property --tw-drop-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-drop-shadow-size{syntax:"*";inherits:false}@property --tw-duration{syntax:"*";inherits:false}@property --tw-ease{syntax:"*";inherits:false}@keyframes spin{to{transform:rotate(360deg)}}@keyframes pulse{50%{opacity:.5}}
2
+ @layer properties{@supports (((-webkit-hyphens:none)) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-translate-x:0;--tw-translate-y:0;--tw-translate-z:0;--tw-scale-x:1;--tw-scale-y:1;--tw-scale-z:1;--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-divide-y-reverse:0;--tw-border-style:solid;--tw-leading:initial;--tw-font-weight:initial;--tw-tracking:initial;--tw-ordinal:initial;--tw-slashed-zero:initial;--tw-numeric-figure:initial;--tw-numeric-spacing:initial;--tw-numeric-fraction:initial;--tw-shadow:0 0 #0000;--tw-shadow-color:initial;--tw-shadow-alpha:100%;--tw-inset-shadow:0 0 #0000;--tw-inset-shadow-color:initial;--tw-inset-shadow-alpha:100%;--tw-ring-color:initial;--tw-ring-shadow:0 0 #0000;--tw-inset-ring-color:initial;--tw-inset-ring-shadow:0 0 #0000;--tw-ring-inset:initial;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-offset-shadow:0 0 #0000;--tw-blur:initial;--tw-brightness:initial;--tw-contrast:initial;--tw-grayscale:initial;--tw-hue-rotate:initial;--tw-invert:initial;--tw-opacity:initial;--tw-saturate:initial;--tw-sepia:initial;--tw-drop-shadow:initial;--tw-drop-shadow-color:initial;--tw-drop-shadow-alpha:100%;--tw-drop-shadow-size:initial;--tw-duration:initial;--tw-ease:initial}}}@layer theme{:root,:host{--font-sans:ui-sans-serif, system-ui, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";--font-mono:ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace;--color-red-50:oklch(97.1% .013 17.38);--color-red-500:oklch(63.7% .237 25.331);--color-red-600:oklch(57.7% .245 27.325);--color-red-700:oklch(50.5% .213 27.518);--color-red-950:oklch(25.8% .092 26.042);--color-amber-100:oklch(96.2% .059 95.617);--color-amber-200:oklch(92.4% .12 95.746);--color-amber-300:oklch(87.9% .169 91.605);--color-amber-400:oklch(82.8% .189 84.429);--color-amber-600:oklch(66.6% .179 58.318);--color-amber-700:oklch(55.5% .163 48.998);--color-amber-900:oklch(41.4% .112 45.904);--color-yellow-50:oklch(98.7% .026 102.212);--color-yellow-600:oklch(68.1% .162 75.834);--color-yellow-700:oklch(55.4% .135 66.442);--color-green-50:oklch(98.2% .018 155.826);--color-green-500:oklch(72.3% .219 149.579);--color-green-600:oklch(62.7% .194 149.214);--color-green-700:oklch(52.7% .154 150.069);--color-emerald-100:oklch(95% .052 163.051);--color-emerald-200:oklch(90.5% .093 164.15);--color-emerald-300:oklch(84.5% .143 164.978);--color-emerald-400:oklch(76.5% .177 163.223);--color-emerald-600:oklch(59.6% .145 163.225);--color-emerald-700:oklch(50.8% .118 165.612);--color-emerald-900:oklch(37.8% .077 168.94);--color-sky-100:oklch(95.1% .026 236.824);--color-sky-200:oklch(90.1% .058 230.902);--color-sky-300:oklch(82.8% .111 230.318);--color-sky-700:oklch(50% .134 242.749);--color-sky-900:oklch(39.1% .09 240.876);--color-blue-50:oklch(97% .014 254.604);--color-blue-500:oklch(62.3% .214 259.815);--color-blue-600:oklch(54.6% .245 262.881);--color-blue-700:oklch(48.8% .243 264.376);--color-purple-50:oklch(97.7% .014 308.299);--color-purple-600:oklch(55.8% .288 302.321);--color-purple-700:oklch(49.6% .265 301.924);--color-rose-100:oklch(94.1% .03 12.58);--color-rose-200:oklch(89.2% .058 10.001);--color-rose-300:oklch(81% .117 11.638);--color-rose-400:oklch(71.2% .194 13.428);--color-rose-600:oklch(58.6% .253 17.585);--color-rose-700:oklch(51.4% .222 16.935);--color-rose-900:oklch(41% .159 10.272);--color-slate-50:oklch(98.4% .003 247.858);--color-slate-100:oklch(96.8% .007 247.896);--color-slate-200:oklch(92.9% .013 255.508);--color-slate-300:oklch(86.9% .022 252.894);--color-slate-400:oklch(70.4% .04 256.788);--color-slate-500:oklch(55.4% .046 257.417);--color-slate-600:oklch(44.6% .043 257.281);--color-slate-700:oklch(37.2% .044 257.287);--color-slate-800:oklch(27.9% .041 260.031);--color-slate-900:oklch(20.8% .042 265.755);--color-gray-50:oklch(98.5% .002 247.839);--color-gray-100:oklch(96.7% .003 264.542);--color-gray-200:oklch(92.8% .006 264.531);--color-gray-300:oklch(87.2% .01 258.338);--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-gray-900:oklch(21% .034 264.665);--color-black:#000;--color-white:#fff;--spacing:.25rem;--container-xs:20rem;--container-lg:32rem;--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-8xl:6rem;--text-8xl--line-height:1;--font-weight-medium:500;--font-weight-semibold:600;--font-weight-bold:700;--tracking-wide:.025em;--tracking-wider:.05em;--leading-relaxed:1.625;--radius-sm:.25rem;--radius-md:.375rem;--radius-lg:.5rem;--radius-xl:.75rem;--radius-2xl:1rem;--ease-in-out:cubic-bezier(.4, 0, .2, 1);--animate-spin:spin 1s linear infinite;--animate-pulse:pulse 2s cubic-bezier(.4, 0, .6, 1) infinite;--default-transition-duration:.15s;--default-transition-timing-function:cubic-bezier(.4, 0, .2, 1);--default-font-family:var(--font-sans);--default-mono-font-family:var(--font-mono)}}@layer base{*,:after,:before,::backdrop{box-sizing:border-box;border:0 solid;margin:0;padding:0}::file-selector-button{box-sizing:border-box;border:0 solid;margin:0;padding:0}html,:host{-webkit-text-size-adjust:100%;tab-size:4;line-height:1.5;font-family:var(--default-font-family,ui-sans-serif, system-ui, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji");font-feature-settings:var(--default-font-feature-settings,normal);font-variation-settings:var(--default-font-variation-settings,normal);-webkit-tap-highlight-color:transparent}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;-webkit-text-decoration:inherit;-webkit-text-decoration:inherit;-webkit-text-decoration:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:var(--default-mono-font-family,ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace);font-feature-settings:var(--default-mono-font-feature-settings,normal);font-variation-settings:var(--default-mono-font-variation-settings,normal);font-size:1em}small{font-size:80%}sub,sup{vertical-align:baseline;font-size:75%;line-height:0;position:relative}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}:-moz-focusring{outline:auto}progress{vertical-align:baseline}summary{display:list-item}ol,ul,menu{list-style:none}img,svg,video,canvas,audio,iframe,embed,object{vertical-align:middle;display:block}img,video{max-width:100%;height:auto}button,input,select,optgroup,textarea{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}::file-selector-button{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}:where(select:is([multiple],[size])) optgroup{font-weight:bolder}:where(select:is([multiple],[size])) optgroup option{padding-inline-start:20px}::file-selector-button{margin-inline-end:4px}::placeholder{opacity:1}@supports (not ((-webkit-appearance:-apple-pay-button))) or (contain-intrinsic-size:1px){::placeholder{color:currentColor}@supports (color:color-mix(in lab, red, red)){::placeholder{color:color-mix(in oklab, currentcolor 50%, transparent)}}}textarea{resize:vertical}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-date-and-time-value{min-height:1lh;text-align:inherit}::-webkit-datetime-edit{display:inline-flex}::-webkit-datetime-edit-fields-wrapper{padding:0}::-webkit-datetime-edit{padding-block:0}::-webkit-datetime-edit-year-field{padding-block:0}::-webkit-datetime-edit-month-field{padding-block:0}::-webkit-datetime-edit-day-field{padding-block:0}::-webkit-datetime-edit-hour-field{padding-block:0}::-webkit-datetime-edit-minute-field{padding-block:0}::-webkit-datetime-edit-second-field{padding-block:0}::-webkit-datetime-edit-millisecond-field{padding-block:0}::-webkit-datetime-edit-meridiem-field{padding-block:0}::-webkit-calendar-picker-indicator{line-height:1}:-moz-ui-invalid{box-shadow:none}button,input:where([type=button],[type=reset],[type=submit]){appearance:button}::file-selector-button{appearance:button}::-webkit-inner-spin-button{height:auto}::-webkit-outer-spin-button{height:auto}[hidden]:where(:not([hidden=until-found])){display:none!important}}@layer components{.text-primary-contrast{color:var(--p-primary-contrast-color)}label.required:after{content:"*";color:var(--p-red-500);padding-inline-start:2px}.dark label.required:after{color:var(--p-red-600)}}@layer utilities{.pointer-events-none{pointer-events:none}.collapse{visibility:collapse}.invisible{visibility:hidden}.visible{visibility:visible}.absolute{position:absolute}.fixed{position:fixed}.relative{position:relative}.static{position:static}.inset-0{inset:calc(var(--spacing) * 0)}.start{inset-inline-start:var(--spacing)}.start-3{inset-inline-start:calc(var(--spacing) * 3)}.end{inset-inline-end:var(--spacing)}.end-2{inset-inline-end:calc(var(--spacing) * 2)}.-top-1\.5{top:calc(var(--spacing) * -1.5)}.top-1\/2{top:50%}.-right-1\.5{right:calc(var(--spacing) * -1.5)}.right-3{right:calc(var(--spacing) * 3)}.bottom-6{bottom:calc(var(--spacing) * 6)}.left-1\/2{left:50%}.z-10{z-index:10}.order-1{order: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-3{margin-inline:calc(var(--spacing) * 3)}.my-2{margin-block:calc(var(--spacing) * 2)}.ms-2{margin-inline-start:calc(var(--spacing) * 2)}.ms-auto{margin-inline-start:auto}.me-3{margin-inline-end:calc(var(--spacing) * 3)}.mt-1{margin-top:calc(var(--spacing) * 1)}.mt-2{margin-top:calc(var(--spacing) * 2)}.mb-1{margin-bottom:calc(var(--spacing) * 1)}.mb-2{margin-bottom:calc(var(--spacing) * 2)}.mb-3{margin-bottom:calc(var(--spacing) * 3)}.block{display:block}.flex{display:flex}.grid{display:grid}.hidden{display:none}.hidden\!{display:none!important}.inline{display:inline}.inline-block{display:inline-block}.inline-flex{display:inline-flex}.table{display:table}.size-full{width:100%;height:100%}.h-2\.5{height:calc(var(--spacing) * 2.5)}.h-3{height:calc(var(--spacing) * 3)}.h-3\.5{height:calc(var(--spacing) * 3.5)}.h-3\/4{height:75%}.h-4{height:calc(var(--spacing) * 4)}.h-5{height:calc(var(--spacing) * 5)}.h-6{height:calc(var(--spacing) * 6)}.h-8{height:calc(var(--spacing) * 8)}.h-10\!{height:calc(var(--spacing) * 10)!important}.h-25\!{height:calc(var(--spacing) * 25)!important}.h-52{height:calc(var(--spacing) * 52)}.h-\[9px\]{height:9px}.h-\[40px\]{height:40px}.h-\[47px\]{height:47px}.h-\[var\(--header-height\)\]{height:var(--header-height)}.h-full{height:100%}.h-px{height:1px}.max-h-\[50vh\]{max-height:50vh}.min-h-0{min-height:calc(var(--spacing) * 0)}.min-h-6{min-height:calc(var(--spacing) * 6)}.min-h-10{min-height:calc(var(--spacing) * 10)}.min-h-12{min-height:calc(var(--spacing) * 12)}.min-h-14{min-height:calc(var(--spacing) * 14)}.min-h-18\.5{min-height:calc(var(--spacing) * 18.5)}.min-h-20{min-height:calc(var(--spacing) * 20)}.w-2{width:calc(var(--spacing) * 2)}.w-2\.5{width:calc(var(--spacing) * 2.5)}.w-3{width:calc(var(--spacing) * 3)}.w-3\.5{width:calc(var(--spacing) * 3.5)}.w-4{width:calc(var(--spacing) * 4)}.w-5{width:calc(var(--spacing) * 5)}.w-6{width:calc(var(--spacing) * 6)}.w-10{width:calc(var(--spacing) * 10)}.w-10\!{width:calc(var(--spacing) * 10)!important}.w-12{width:calc(var(--spacing) * 12)}.w-25\!{width:calc(var(--spacing) * 25)!important}.w-32{width:calc(var(--spacing) * 32)}.w-44{width:calc(var(--spacing) * 44)}.w-\[1px\]{width:1px}.w-\[47px\]{width:47px}.w-fit{width:fit-content}.w-full{width:100%}.w-px{width:1px}.max-w-0{max-width:calc(var(--spacing) * 0)}.max-w-16{max-width:calc(var(--spacing) * 16)}.max-w-lg{max-width:var(--container-lg)}.max-w-xs{max-width:var(--container-xs)}.min-w-0{min-width:calc(var(--spacing) * 0)}.min-w-2{min-width:calc(var(--spacing) * 2)}.min-w-5{min-width:calc(var(--spacing) * 5)}.min-w-6{min-width:calc(var(--spacing) * 6)}.min-w-12{min-width:calc(var(--spacing) * 12)}.min-w-40{min-width:calc(var(--spacing) * 40)}.min-w-100{min-width:calc(var(--spacing) * 100)}.min-w-\[47px\]{min-width:47px}.min-w-full{min-width:100%}.flex-1{flex:1}.flex-shrink-0,.shrink-0{flex-shrink:0}.grow{flex-grow:1}.table-fixed{table-layout:fixed}.-translate-x-1\/2{--tw-translate-x:calc(calc(1 / 2 * 100%) * -1);translate:var(--tw-translate-x) var(--tw-translate-y)}.-translate-y-1\/2{--tw-translate-y:calc(calc(1 / 2 * 100%) * -1);translate:var(--tw-translate-x) var(--tw-translate-y)}.scale-75{--tw-scale-x:75%;--tw-scale-y:75%;--tw-scale-z:75%;scale:var(--tw-scale-x) var(--tw-scale-y)}.rotate-180{rotate:180deg}.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-default{cursor:default}.cursor-grab{cursor:grab}.cursor-move{cursor:move}.cursor-move\!{cursor:move!important}.cursor-pointer{cursor:pointer}.cursor-text{cursor:text}.resize{resize:both}.grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.grid-cols-24{grid-template-columns:repeat(24,minmax(0,1fr))}.grid-cols-\[80px_minmax\(0\,1fr\)_auto\]{grid-template-columns:80px minmax(0,1fr) auto}.grid-cols-\[minmax\(170px\,1fr\)_minmax\(170px\,1fr\)_minmax\(220px\,2fr\)\]{grid-template-columns:minmax(170px,1fr) minmax(170px,1fr) minmax(220px,2fr)}.flex-col{flex-direction:column}.flex-col-reverse{flex-direction:column-reverse}.flex-row{flex-direction:row}.flex-row-reverse{flex-direction:row-reverse}.flex-wrap{flex-wrap:wrap}.content-start{align-content:flex-start}.items-center{align-items:center}.items-end{align-items:flex-end}.items-start{align-items:flex-start}.justify-between{justify-content:space-between}.justify-center{justify-content:center}.justify-end{justify-content:flex-end}.gap-0\.5{gap:calc(var(--spacing) * .5)}.gap-1{gap:calc(var(--spacing) * 1)}.gap-1\.5{gap:calc(var(--spacing) * 1.5)}.gap-2{gap:calc(var(--spacing) * 2)}.gap-3{gap:calc(var(--spacing) * 3)}.gap-4{gap:calc(var(--spacing) * 4)}.gap-5{gap:calc(var(--spacing) * 5)}:where(.space-y-0\.5>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * .5) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * .5) * calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-1>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * 1) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * 1) * calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-1\.5>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * 1.5) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * 1.5) * calc(1 - var(--tw-space-y-reverse)))}: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-2\.5>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * 2.5) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * 2.5) * 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-y-4>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * 4) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * 4) * calc(1 - var(--tw-space-y-reverse)))}.gap-x-3{column-gap:calc(var(--spacing) * 3)}.gap-x-4{column-gap:calc(var(--spacing) * 4)}: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)))}.gap-y-7{row-gap:calc(var(--spacing) * 7)}:where(.divide-y>:not(:last-child)){--tw-divide-y-reverse:0;border-bottom-style:var(--tw-border-style);border-top-style:var(--tw-border-style);border-top-width:calc(1px * var(--tw-divide-y-reverse));border-bottom-width:calc(1px * calc(1 - var(--tw-divide-y-reverse)))}:where(.divide-gray-200>:not(:last-child)){border-color:var(--color-gray-200)}.justify-self-center{justify-self:center}.justify-self-end{justify-self:flex-end}.truncate{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.overflow-hidden{overflow:hidden}.overflow-x-auto{overflow-x:auto}.overflow-x-hidden{overflow-x:hidden}.overflow-y-auto{overflow-y:auto}.overscroll-contain{overscroll-behavior:contain}.rounded{border-radius:.25rem}.rounded-2xl{border-radius:var(--radius-2xl)}.rounded-\[2px\]{border-radius:2px}.rounded-\[4px\]{border-radius:4px}.rounded-full{border-radius:3.40282e38px}.rounded-lg{border-radius:var(--radius-lg)}.rounded-md{border-radius:var(--radius-md)}.rounded-none{border-radius:0}.rounded-sm{border-radius:var(--radius-sm)}.rounded-xl{border-radius:var(--radius-xl)}.rounded-t-2xl{border-top-left-radius:var(--radius-2xl);border-top-right-radius:var(--radius-2xl)}.rounded-t-xl{border-top-left-radius:var(--radius-xl);border-top-right-radius:var(--radius-xl)}.rounded-l-md{border-top-left-radius:var(--radius-md);border-bottom-left-radius:var(--radius-md)}.rounded-l-none{border-top-left-radius:0;border-bottom-left-radius:0}.rounded-r-none{border-top-right-radius:0;border-bottom-right-radius:0}.border,.border-1{border-style:var(--tw-border-style);border-width:1px}.border-2{border-style:var(--tw-border-style);border-width:2px}.border-e,.border-e-1{border-inline-end-style:var(--tw-border-style);border-inline-end-width:1px}.border-e-2{border-inline-end-style:var(--tw-border-style);border-inline-end-width:2px}.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-dashed{--tw-border-style:dashed;border-style:dashed}.border-\(--p-content-border-color\){border-color:var(--p-content-border-color)}.border-\(--p-inputtext-invalid-border-color\)\!{border-color:var(--p-inputtext-invalid-border-color)!important}.border-blue-500{border-color:var(--color-blue-500)}.border-gray-200{border-color:var(--color-gray-200)}.border-gray-300{border-color:var(--color-gray-300)}.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-400{border-color:var(--p-primary-400)}@supports (color:color-mix(in lab, red, red)){.border-primary-400{border-color:color-mix(in srgb, var(--p-primary-400) calc(100% * 1), transparent)}}.border-slate-200{border-color:var(--color-slate-200)}.border-slate-300{border-color:var(--color-slate-300)}.border-slate-600{border-color:var(--color-slate-600)}.border-surface{border-color:var(--p-content-border-color)}.border-surface-200{border-color:var(--p-surface-200)}@supports (color:color-mix(in lab, red, red)){.border-surface-200{border-color:color-mix(in srgb, var(--p-surface-200) calc(100% * 1), transparent)}}.border-surface-300{border-color:var(--p-surface-300)}@supports (color:color-mix(in lab, red, red)){.border-surface-300{border-color:color-mix(in srgb, var(--p-surface-300) calc(100% * 1), transparent)}}.\!bg-white{background-color:var(--color-white)!important}.bg-\(--p-inputtext-filled-background\){background-color:var(--p-inputtext-filled-background)}.bg-amber-100{background-color:var(--color-amber-100)}.bg-black\/10{background-color:#0000001a}@supports (color:color-mix(in lab, red, red)){.bg-black\/10{background-color:color-mix(in oklab, var(--color-black) 10%, transparent)}}.bg-blue-50{background-color:var(--color-blue-50)}.bg-content{background-color:var(--p-content-background)}.bg-current{background-color:currentColor}.bg-emerald-100{background-color:var(--color-emerald-100)}.bg-gray-50{background-color:var(--color-gray-50)}.bg-gray-100{background-color:var(--color-gray-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-500\!{background-color:var(--p-primary-500)!important}@supports (color:color-mix(in lab, red, red)){.bg-primary-500\!{background-color:color-mix(in srgb, var(--p-primary-500) calc(100% * 1), transparent)!important}}.bg-primary\/10{background-color:var(--p-primary-color)}@supports (color:color-mix(in lab, red, red)){.bg-primary\/10{background-color:color-mix(in oklab, color-mix(in srgb, var(--p-primary-color) calc(100% * 1), transparent) 10%, transparent)}}.bg-red-500{background-color:var(--color-red-500)}.bg-rose-100{background-color:var(--color-rose-100)}.bg-sky-100{background-color:var(--color-sky-100)}.bg-slate-50{background-color:var(--color-slate-50)}.bg-slate-100{background-color:var(--color-slate-100)}.bg-slate-200{background-color:var(--color-slate-200)}.bg-slate-200\/60{background-color:#e2e8f099}@supports (color:color-mix(in lab, red, red)){.bg-slate-200\/60{background-color:color-mix(in oklab, var(--color-slate-200) 60%, transparent)}}.bg-slate-300{background-color:var(--color-slate-300)}.bg-slate-700{background-color:var(--color-slate-700)}.bg-slate-800{background-color:var(--color-slate-800)}.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-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-surface-400\/50{background-color:var(--p-surface-400)}@supports (color:color-mix(in lab, red, red)){.bg-surface-400\/50{background-color:color-mix(in oklab, color-mix(in srgb, var(--p-surface-400) calc(100% * 1), transparent) 50%, transparent)}}.bg-white{background-color:var(--color-white)}.bg-no-repeat{background-repeat:no-repeat}.bg-repeat{background-repeat:repeat}.bg-repeat-y{background-repeat:repeat-y}.\!p-0{padding:calc(var(--spacing) * 0)!important}.p-0{padding:calc(var(--spacing) * 0)}.p-0\.5{padding:calc(var(--spacing) * .5)}.p-1{padding:calc(var(--spacing) * 1)}.p-2{padding:calc(var(--spacing) * 2)}.p-2\.5{padding:calc(var(--spacing) * 2.5)}.p-3{padding:calc(var(--spacing) * 3)}.p-4{padding:calc(var(--spacing) * 4)}.p-5{padding:calc(var(--spacing) * 5)}.px-0{padding-inline:calc(var(--spacing) * 0)}.px-1{padding-inline:calc(var(--spacing) * 1)}.px-1\.5{padding-inline:calc(var(--spacing) * 1.5)}.px-2{padding-inline:calc(var(--spacing) * 2)}.px-2\.5{padding-inline:calc(var(--spacing) * 2.5)}.px-3{padding-inline:calc(var(--spacing) * 3)}.px-4{padding-inline:calc(var(--spacing) * 4)}.px-5{padding-inline:calc(var(--spacing) * 5)}.py-0\.5{padding-block:calc(var(--spacing) * .5)}.py-1{padding-block:calc(var(--spacing) * 1)}.py-1\.5{padding-block:calc(var(--spacing) * 1.5)}.py-2{padding-block:calc(var(--spacing) * 2)}.py-2\.5{padding-block:calc(var(--spacing) * 2.5)}.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-10{padding-block:calc(var(--spacing) * 10)}.ps-9{padding-inline-start:calc(var(--spacing) * 9)}.pe-8{padding-inline-end:calc(var(--spacing) * 8)}.pt-0{padding-top:calc(var(--spacing) * 0)}.pt-2{padding-top:calc(var(--spacing) * 2)}.pt-4{padding-top:calc(var(--spacing) * 4)}.pr-0\.5{padding-right:calc(var(--spacing) * .5)}.pr-1{padding-right:calc(var(--spacing) * 1)}.pr-px{padding-right:1px}.pb-3{padding-bottom:calc(var(--spacing) * 3)}.pb-16{padding-bottom:calc(var(--spacing) * 16)}.pl-0\.5{padding-left:calc(var(--spacing) * .5)}.text-center{text-align:center}.text-end\!{text-align:end!important}.text-right{text-align:right}.text-start{text-align:start}.align-middle{vertical-align:middle}.align-super\!{vertical-align:super!important}.font-mono{font-family:var(--font-mono)}.text-2xl{font-size:var(--text-2xl);line-height:var(--tw-leading,var(--text-2xl--line-height))}.text-2xl\!{font-size:var(--text-2xl)!important;line-height:var(--tw-leading,var(--text-2xl--line-height))!important}.text-3xl{font-size:var(--text-3xl);line-height:var(--tw-leading,var(--text-3xl--line-height))}.text-4xl\!{font-size:var(--text-4xl)!important;line-height:var(--tw-leading,var(--text-4xl--line-height))!important}.text-8xl{font-size:var(--text-8xl);line-height:var(--tw-leading,var(--text-8xl--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-xl\!{font-size:var(--text-xl)!important;line-height:var(--tw-leading,var(--text-xl--line-height))!important}.text-xs{font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height))}.text-\[\.95rem\]{font-size:.95rem}.text-\[10px\]{font-size:10px}.leading-6{--tw-leading:calc(var(--spacing) * 6);line-height:calc(var(--spacing) * 6)}.leading-none{--tw-leading:1;line-height:1}.leading-relaxed{--tw-leading:var(--leading-relaxed);line-height:var(--leading-relaxed)}.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)}.tracking-wide{--tw-tracking:var(--tracking-wide);letter-spacing:var(--tracking-wide)}.tracking-wider{--tw-tracking:var(--tracking-wider);letter-spacing:var(--tracking-wider)}.whitespace-nowrap{white-space:nowrap}.text-amber-300{color:var(--color-amber-300)}.text-amber-600{color:var(--color-amber-600)}.text-amber-700{color:var(--color-amber-700)}.text-blue-600{color:var(--color-blue-600)}.text-color{color:var(--p-text-color)}.text-emerald-400{color:var(--color-emerald-400)}.text-emerald-600{color:var(--color-emerald-600)}.text-emerald-700{color:var(--color-emerald-700)}.text-gray-300{color:var(--color-gray-300)}.text-gray-400{color:var(--color-gray-400)}.text-gray-400\!{color:var(--color-gray-400)!important}.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-900{color:var(--color-gray-900)}.text-green-500{color:var(--color-green-500)}.text-green-600{color:var(--color-green-600)}.text-muted-color{color:var(--p-text-muted-color)}.text-primary{color:var(--p-primary-color)}@supports (color:color-mix(in lab, red, red)){.text-primary{color:color-mix(in srgb, var(--p-primary-color) calc(100% * 1), transparent)}}.text-primary-300{color:var(--p-primary-300)}@supports (color:color-mix(in lab, red, red)){.text-primary-300{color:color-mix(in srgb, var(--p-primary-300) calc(100% * 1), transparent)}}.text-primary-400{color:var(--p-primary-400)}@supports (color:color-mix(in lab, red, red)){.text-primary-400{color:color-mix(in srgb, var(--p-primary-400) calc(100% * 1), transparent)}}.text-primary-700{color:var(--p-primary-700)}@supports (color:color-mix(in lab, red, red)){.text-primary-700{color:color-mix(in srgb, var(--p-primary-700) calc(100% * 1), transparent)}}.text-purple-600{color:var(--color-purple-600)}.text-red-600{color:var(--color-red-600)}.text-rose-600{color:var(--color-rose-600)}.text-rose-700{color:var(--color-rose-700)}.text-sky-700{color:var(--color-sky-700)}.text-slate-200{color:var(--color-slate-200)}.text-slate-300{color:var(--color-slate-300)}.text-slate-400{color:var(--color-slate-400)}.text-slate-500{color:var(--color-slate-500)}.text-slate-600{color:var(--color-slate-600)}.text-slate-700{color:var(--color-slate-700)}.text-surface-400{color:var(--p-surface-400)}@supports (color:color-mix(in lab, red, red)){.text-surface-400{color:color-mix(in srgb, var(--p-surface-400) calc(100% * 1), transparent)}}.text-surface-500{color:var(--p-surface-500)}@supports (color:color-mix(in lab, red, red)){.text-surface-500{color:color-mix(in srgb, var(--p-surface-500) calc(100% * 1), transparent)}}.text-surface-600{color:var(--p-surface-600)}@supports (color:color-mix(in lab, red, red)){.text-surface-600{color:color-mix(in srgb, var(--p-surface-600) calc(100% * 1), transparent)}}.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-white{color:var(--color-white)}.text-white\!{color:var(--color-white)!important}.text-yellow-600{color:var(--color-yellow-600)}.uppercase{text-transform:uppercase}.italic{font-style:italic}.tabular-nums{--tw-numeric-spacing:tabular-nums;font-variant-numeric:var(--tw-ordinal,) var(--tw-slashed-zero,) var(--tw-numeric-figure,) var(--tw-numeric-spacing,) var(--tw-numeric-fraction,)}.underline{text-decoration-line:underline}.opacity-0{opacity:0}.opacity-30{opacity:.3}.opacity-50{opacity:.5}.opacity-60{opacity:.6}.opacity-70{opacity:.7}.opacity-80{opacity:.8}.opacity-100{opacity:1}.shadow-md{--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)}.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-primary-200{--tw-ring-color:var(--p-primary-200)}@supports (color:color-mix(in lab, red, red)){.ring-primary-200{--tw-ring-color:color-mix(in srgb, var(--p-primary-200) calc(100% * 1), transparent)}}.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-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-200{--tw-duration:.2s;transition-duration:.2s}.duration-300{--tw-duration:.3s;transition-duration:.3s}.duration-400{--tw-duration:.4s;transition-duration:.4s}.ease-in-out{--tw-ease:var(--ease-in-out);transition-timing-function:var(--ease-in-out)}.select-none{-webkit-user-select:none;user-select:none}@media (hover:hover){.group-hover\:pointer-events-auto:is(:where(.group):hover *){pointer-events:auto}.group-hover\:animate-pulse:is(:where(.group):hover *){animation:var(--animate-pulse)}.group-hover\:text-primary-600:is(:where(.group):hover *){color:var(--p-primary-600)}@supports (color:color-mix(in lab, red, red)){.group-hover\:text-primary-600:is(:where(.group):hover *){color:color-mix(in srgb, var(--p-primary-600) calc(100% * 1), transparent)}}.group-hover\:opacity-100:is(:where(.group):hover *){opacity:1}}.placeholder\:text-slate-400::placeholder{color:var(--color-slate-400)}.focus-within\:border-primary:focus-within{border-color:var(--p-primary-color)}@supports (color:color-mix(in lab, red, red)){.focus-within\:border-primary:focus-within{border-color:color-mix(in srgb, var(--p-primary-color) calc(100% * 1), transparent)}}.focus-within\:ring-2:focus-within{--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)}.focus-within\:ring-primary\/10:focus-within{--tw-ring-color:var(--p-primary-color)}@supports (color:color-mix(in lab, red, red)){.focus-within\:ring-primary\/10:focus-within{--tw-ring-color:color-mix(in oklab, color-mix(in srgb, var(--p-primary-color) calc(100% * 1), transparent) 10%, transparent)}}@media (hover:hover){.hover\:scale-100:hover{--tw-scale-x:100%;--tw-scale-y:100%;--tw-scale-z:100%;scale:var(--tw-scale-x) var(--tw-scale-y)}.hover\:scale-125:hover{--tw-scale-x:125%;--tw-scale-y:125%;--tw-scale-z:125%;scale:var(--tw-scale-x) var(--tw-scale-y)}.hover\:border-\(--p-inputtext-hover-border-color\)\!:hover{border-color:var(--p-inputtext-hover-border-color)!important}.hover\:border-gray-400:hover{border-color:var(--color-gray-400)}.hover\:border-primary:hover{border-color:var(--p-primary-color)}@supports (color:color-mix(in lab, red, red)){.hover\:border-primary:hover{border-color:color-mix(in srgb, var(--p-primary-color) calc(100% * 1), transparent)}}.hover\:bg-amber-200:hover{background-color:var(--color-amber-200)}.hover\:bg-blue-50:hover{background-color:var(--color-blue-50)}.hover\:bg-emerald-200:hover{background-color:var(--color-emerald-200)}.hover\:bg-gray-50:hover{background-color:var(--color-gray-50)}.hover\:bg-gray-100:hover{background-color:var(--color-gray-100)}.hover\:bg-green-50:hover{background-color:var(--color-green-50)}.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-purple-50:hover{background-color:var(--color-purple-50)}.hover\:bg-red-50:hover{background-color:var(--color-red-50)}.hover\:bg-red-600:hover{background-color:var(--color-red-600)}.hover\:bg-rose-200:hover{background-color:var(--color-rose-200)}.hover\:bg-sky-200:hover{background-color:var(--color-sky-200)}.hover\:bg-slate-100:hover{background-color:var(--color-slate-100)}.hover\:bg-slate-200:hover{background-color:var(--color-slate-200)}.hover\:bg-slate-300:hover{background-color:var(--color-slate-300)}.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\:bg-yellow-50:hover{background-color:var(--color-yellow-50)}.hover\:text-blue-700:hover{color:var(--color-blue-700)}.hover\:text-gray-600:hover{color:var(--color-gray-600)}.hover\:text-gray-700:hover{color:var(--color-gray-700)}.hover\:text-green-700:hover{color:var(--color-green-700)}.hover\:text-purple-700:hover{color:var(--color-purple-700)}.hover\:text-red-700:hover{color:var(--color-red-700)}.hover\:text-slate-600:hover{color:var(--color-slate-600)}.hover\:text-slate-800:hover{color:var(--color-slate-800)}.hover\:text-yellow-700:hover{color:var(--color-yellow-700)}.hover\:opacity-100:hover{opacity:1}.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)}.hover\:shadow-sm:hover{--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)}}.focus\:border-primary:focus{border-color:var(--p-primary-color)}@supports (color:color-mix(in lab, red, red)){.focus\:border-primary:focus{border-color:color-mix(in srgb, var(--p-primary-color) calc(100% * 1), transparent)}}.focus\:bg-white:focus{background-color:var(--color-white)}.focus\:ring-2:focus{--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)}.focus\:ring-primary\/20:focus{--tw-ring-color:var(--p-primary-color)}@supports (color:color-mix(in lab, red, red)){.focus\:ring-primary\/20:focus{--tw-ring-color:color-mix(in oklab, color-mix(in srgb, var(--p-primary-color) calc(100% * 1), transparent) 20%, transparent)}}.focus\:outline-none:focus{--tw-outline-style:none;outline-style:none}.active\:scale-95:active{--tw-scale-x:95%;--tw-scale-y:95%;--tw-scale-z:95%;scale:var(--tw-scale-x) var(--tw-scale-y)}.active\:cursor-grabbing:active{cursor:grabbing}.active\:bg-gray-100:active{background-color:var(--color-gray-100)}@media not all and (min-width:64rem){.max-lg\:w-full{width:100%}.max-lg\:grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}.max-lg\:flex-col{flex-direction:column}.max-lg\:items-start{align-items:flex-start}.max-lg\:items-stretch{align-items:stretch}.max-lg\:gap-3{gap:calc(var(--spacing) * 3)}}.rtl\:rotate-180:where(:dir(rtl),[dir=rtl],[dir=rtl] *){rotate:180deg}.dark\:border-slate-600:where(.dark,.dark *){border-color:var(--color-slate-600)}.dark\:border-slate-700:where(.dark,.dark *){border-color:var(--color-slate-700)}.dark\:border-surface-500:where(.dark,.dark *){border-color:var(--p-surface-500)}@supports (color:color-mix(in lab, red, red)){.dark\:border-surface-500:where(.dark,.dark *){border-color:color-mix(in srgb, var(--p-surface-500) calc(100% * 1), transparent)}}.dark\:border-surface-700:where(.dark,.dark *){border-color:var(--p-surface-700)}@supports (color:color-mix(in lab, red, red)){.dark\:border-surface-700:where(.dark,.dark *){border-color:color-mix(in srgb, var(--p-surface-700) calc(100% * 1), transparent)}}.dark\:bg-amber-900\/30:where(.dark,.dark *){background-color:#7b33064d}@supports (color:color-mix(in lab, red, red)){.dark\:bg-amber-900\/30:where(.dark,.dark *){background-color:color-mix(in oklab, var(--color-amber-900) 30%, transparent)}}.dark\:bg-emerald-900:where(.dark,.dark *){background-color:var(--color-emerald-900)}.dark\:bg-emerald-900\/30:where(.dark,.dark *){background-color:#004e3b4d}@supports (color:color-mix(in lab, red, red)){.dark\:bg-emerald-900\/30:where(.dark,.dark *){background-color:color-mix(in oklab, var(--color-emerald-900) 30%, transparent)}}.dark\:bg-primary-800:where(.dark,.dark *){background-color:var(--p-primary-800)}@supports (color:color-mix(in lab, red, red)){.dark\:bg-primary-800:where(.dark,.dark *){background-color:color-mix(in srgb, var(--p-primary-800) calc(100% * 1), transparent)}}.dark\:bg-primary-900:where(.dark,.dark *){background-color:var(--p-primary-900)}@supports (color:color-mix(in lab, red, red)){.dark\:bg-primary-900:where(.dark,.dark *){background-color:color-mix(in srgb, var(--p-primary-900) calc(100% * 1), transparent)}}.dark\:bg-primary-900\/20:where(.dark,.dark *){background-color:var(--p-primary-900)}@supports (color:color-mix(in lab, red, red)){.dark\:bg-primary-900\/20:where(.dark,.dark *){background-color:color-mix(in oklab, color-mix(in srgb, var(--p-primary-900) calc(100% * 1), transparent) 20%, transparent)}}.dark\:bg-rose-900:where(.dark,.dark *){background-color:var(--color-rose-900)}.dark\:bg-rose-900\/30:where(.dark,.dark *){background-color:#8b08364d}@supports (color:color-mix(in lab, red, red)){.dark\:bg-rose-900\/30:where(.dark,.dark *){background-color:color-mix(in oklab, var(--color-rose-900) 30%, transparent)}}.dark\:bg-sky-900\/30:where(.dark,.dark *){background-color:#024a704d}@supports (color:color-mix(in lab, red, red)){.dark\:bg-sky-900\/30:where(.dark,.dark *){background-color:color-mix(in oklab, var(--color-sky-900) 30%, transparent)}}.dark\:bg-slate-600:where(.dark,.dark *){background-color:var(--color-slate-600)}.dark\:bg-slate-700:where(.dark,.dark *){background-color:var(--color-slate-700)}.dark\:bg-slate-700\/60:where(.dark,.dark *){background-color:#31415899}@supports (color:color-mix(in lab, red, red)){.dark\:bg-slate-700\/60:where(.dark,.dark *){background-color:color-mix(in oklab, var(--color-slate-700) 60%, transparent)}}.dark\:bg-slate-800:where(.dark,.dark *){background-color:var(--color-slate-800)}.dark\:bg-slate-900:where(.dark,.dark *){background-color:var(--color-slate-900)}.dark\:bg-surface-800:where(.dark,.dark *){background-color:var(--p-surface-800)}@supports (color:color-mix(in lab, red, red)){.dark\:bg-surface-800:where(.dark,.dark *){background-color:color-mix(in srgb, var(--p-surface-800) calc(100% * 1), transparent)}}.dark\:bg-surface-900:where(.dark,.dark *){background-color:var(--p-surface-900)}@supports (color:color-mix(in lab, red, red)){.dark\:bg-surface-900:where(.dark,.dark *){background-color:color-mix(in srgb, var(--p-surface-900) calc(100% * 1), transparent)}}.dark\:bg-surface-950:where(.dark,.dark *){background-color:var(--p-surface-950)}@supports (color:color-mix(in lab, red, red)){.dark\:bg-surface-950:where(.dark,.dark *){background-color:color-mix(in srgb, var(--p-surface-950) calc(100% * 1), transparent)}}.dark\:text-amber-300:where(.dark,.dark *){color:var(--color-amber-300)}.dark\:text-amber-400:where(.dark,.dark *){color:var(--color-amber-400)}.dark\:text-emerald-300:where(.dark,.dark *){color:var(--color-emerald-300)}.dark\:text-emerald-400:where(.dark,.dark *){color:var(--color-emerald-400)}.dark\:text-gray-50:where(.dark,.dark *){color:var(--color-gray-50)}.dark\:text-gray-100:where(.dark,.dark *){color:var(--color-gray-100)}.dark\:text-gray-200:where(.dark,.dark *){color:var(--color-gray-200)}.dark\:text-gray-300:where(.dark,.dark *){color:var(--color-gray-300)}.dark\:text-primary-300:where(.dark,.dark *){color:var(--p-primary-300)}@supports (color:color-mix(in lab, red, red)){.dark\:text-primary-300:where(.dark,.dark *){color:color-mix(in srgb, var(--p-primary-300) calc(100% * 1), transparent)}}.dark\:text-rose-300:where(.dark,.dark *){color:var(--color-rose-300)}.dark\:text-rose-400:where(.dark,.dark *){color:var(--color-rose-400)}.dark\:text-sky-300:where(.dark,.dark *){color:var(--color-sky-300)}.dark\:text-slate-200:where(.dark,.dark *){color:var(--color-slate-200)}.dark\:text-slate-300:where(.dark,.dark *){color:var(--color-slate-300)}.dark\:text-slate-400:where(.dark,.dark *){color:var(--color-slate-400)}.dark\:text-slate-500:where(.dark,.dark *){color:var(--color-slate-500)}.dark\:text-slate-600:where(.dark,.dark *){color:var(--color-slate-600)}.dark\:text-surface-500:where(.dark,.dark *){color:var(--p-surface-500)}@supports (color:color-mix(in lab, red, red)){.dark\:text-surface-500:where(.dark,.dark *){color:color-mix(in srgb, var(--p-surface-500) calc(100% * 1), transparent)}}.dark\:placeholder\:text-slate-500:where(.dark,.dark *)::placeholder{color:var(--color-slate-500)}@media (hover:hover){.dark\:hover\:bg-amber-900\/50:where(.dark,.dark *):hover{background-color:#7b330680}@supports (color:color-mix(in lab, red, red)){.dark\:hover\:bg-amber-900\/50:where(.dark,.dark *):hover{background-color:color-mix(in oklab, var(--color-amber-900) 50%, transparent)}}.dark\:hover\:bg-emerald-900\/50:where(.dark,.dark *):hover{background-color:#004e3b80}@supports (color:color-mix(in lab, red, red)){.dark\:hover\:bg-emerald-900\/50:where(.dark,.dark *):hover{background-color:color-mix(in oklab, var(--color-emerald-900) 50%, transparent)}}.dark\:hover\:bg-gray-800:where(.dark,.dark *):hover{background-color:var(--color-gray-800)}.dark\:hover\:bg-red-950:where(.dark,.dark *):hover{background-color:var(--color-red-950)}.dark\:hover\:bg-rose-900\/50:where(.dark,.dark *):hover{background-color:#8b083680}@supports (color:color-mix(in lab, red, red)){.dark\:hover\:bg-rose-900\/50:where(.dark,.dark *):hover{background-color:color-mix(in oklab, var(--color-rose-900) 50%, transparent)}}.dark\:hover\:bg-sky-900\/50:where(.dark,.dark *):hover{background-color:#024a7080}@supports (color:color-mix(in lab, red, red)){.dark\:hover\:bg-sky-900\/50:where(.dark,.dark *):hover{background-color:color-mix(in oklab, var(--color-sky-900) 50%, transparent)}}.dark\:hover\:bg-slate-600:where(.dark,.dark *):hover{background-color:var(--color-slate-600)}.dark\:hover\:bg-slate-700:where(.dark,.dark *):hover{background-color:var(--color-slate-700)}.dark\:hover\:bg-surface-700:where(.dark,.dark *):hover{background-color:var(--p-surface-700)}@supports (color:color-mix(in lab, red, red)){.dark\:hover\:bg-surface-700:where(.dark,.dark *):hover{background-color:color-mix(in srgb, var(--p-surface-700) calc(100% * 1), transparent)}}.dark\:hover\:bg-surface-900:where(.dark,.dark *):hover{background-color:var(--p-surface-900)}@supports (color:color-mix(in lab, red, red)){.dark\:hover\:bg-surface-900:where(.dark,.dark *):hover{background-color:color-mix(in srgb, var(--p-surface-900) calc(100% * 1), transparent)}}.dark\:hover\:bg-surface-950:where(.dark,.dark *):hover{background-color:var(--p-surface-950)}@supports (color:color-mix(in lab, red, red)){.dark\:hover\:bg-surface-950:where(.dark,.dark *):hover{background-color:color-mix(in srgb, var(--p-surface-950) calc(100% * 1), transparent)}}.dark\:hover\:text-gray-100:where(.dark,.dark *):hover{color:var(--color-gray-100)}}.dark\:focus\:bg-slate-900:where(.dark,.dark *):focus{background-color:var(--color-slate-900)}}@font-face{font-family:InterVariable;font-style:normal;font-weight:100 900;font-display:swap;src:url(fonts/InterVariable.woff2)format("woff2")}@font-face{font-family:InterVariable;font-style:italic;font-weight:100 900;font-display:swap;src:url(fonts/InterVariable-Italic.woff2)format("woff2")}@font-face{font-family:Inter;font-style:normal;font-weight:100;font-display:swap;src:url(fonts/Inter-Thin.woff2)format("woff2")}@font-face{font-family:Inter;font-style:italic;font-weight:100;font-display:swap;src:url(fonts/Inter-ThinItalic.woff2)format("woff2")}@font-face{font-family:Inter;font-style:normal;font-weight:200;font-display:swap;src:url(fonts/Inter-ExtraLight.woff2)format("woff2")}@font-face{font-family:Inter;font-style:italic;font-weight:200;font-display:swap;src:url(fonts/Inter-ExtraLightItalic.woff2)format("woff2")}@font-face{font-family:Inter;font-style:normal;font-weight:300;font-display:swap;src:url(fonts/Inter-Light.woff2)format("woff2")}@font-face{font-family:Inter;font-style:italic;font-weight:300;font-display:swap;src:url(fonts/Inter-LightItalic.woff2)format("woff2")}@font-face{font-family:Inter;font-style:normal;font-weight:400;font-display:swap;src:url(fonts/Inter-Regular.woff2)format("woff2")}@font-face{font-family:Inter;font-style:italic;font-weight:400;font-display:swap;src:url(fonts/Inter-Italic.woff2)format("woff2")}@font-face{font-family:Inter;font-style:normal;font-weight:500;font-display:swap;src:url(fonts/Inter-Medium.woff2)format("woff2")}@font-face{font-family:Inter;font-style:italic;font-weight:500;font-display:swap;src:url(fonts/Inter-MediumItalic.woff2)format("woff2")}@font-face{font-family:Inter;font-style:normal;font-weight:600;font-display:swap;src:url(fonts/Inter-SemiBold.woff2)format("woff2")}@font-face{font-family:Inter;font-style:italic;font-weight:600;font-display:swap;src:url(fonts/Inter-SemiBoldItalic.woff2)format("woff2")}@font-face{font-family:Inter;font-style:normal;font-weight:700;font-display:swap;src:url(fonts/Inter-Bold.woff2)format("woff2")}@font-face{font-family:Inter;font-style:italic;font-weight:700;font-display:swap;src:url(fonts/Inter-BoldItalic.woff2)format("woff2")}@font-face{font-family:Inter;font-style:normal;font-weight:800;font-display:swap;src:url(fonts/Inter-ExtraBold.woff2)format("woff2")}@font-face{font-family:Inter;font-style:italic;font-weight:800;font-display:swap;src:url(fonts/Inter-ExtraBoldItalic.woff2)format("woff2")}@font-face{font-family:Inter;font-style:normal;font-weight:900;font-display:swap;src:url(fonts/Inter-Black.woff2)format("woff2")}@font-face{font-family:Inter;font-style:italic;font-weight:900;font-display:swap;src:url(fonts/Inter-BlackItalic.woff2)format("woff2")}@font-face{font-family:InterDisplay;font-style:normal;font-weight:100;font-display:swap;src:url(fonts/InterDisplay-Thin.woff2)format("woff2")}@font-face{font-family:InterDisplay;font-style:italic;font-weight:100;font-display:swap;src:url(fonts/InterDisplay-ThinItalic.woff2)format("woff2")}@font-face{font-family:InterDisplay;font-style:normal;font-weight:200;font-display:swap;src:url(fonts/InterDisplay-ExtraLight.woff2)format("woff2")}@font-face{font-family:InterDisplay;font-style:italic;font-weight:200;font-display:swap;src:url(fonts/InterDisplay-ExtraLightItalic.woff2)format("woff2")}@font-face{font-family:InterDisplay;font-style:normal;font-weight:300;font-display:swap;src:url(fonts/InterDisplay-Light.woff2)format("woff2")}@font-face{font-family:InterDisplay;font-style:italic;font-weight:300;font-display:swap;src:url(fonts/InterDisplay-LightItalic.woff2)format("woff2")}@font-face{font-family:InterDisplay;font-style:normal;font-weight:400;font-display:swap;src:url(fonts/InterDisplay-Regular.woff2)format("woff2")}@font-face{font-family:InterDisplay;font-style:italic;font-weight:400;font-display:swap;src:url(fonts/InterDisplay-Italic.woff2)format("woff2")}@font-face{font-family:InterDisplay;font-style:normal;font-weight:500;font-display:swap;src:url(fonts/InterDisplay-Medium.woff2)format("woff2")}@font-face{font-family:InterDisplay;font-style:italic;font-weight:500;font-display:swap;src:url(fonts/InterDisplay-MediumItalic.woff2)format("woff2")}@font-face{font-family:InterDisplay;font-style:normal;font-weight:600;font-display:swap;src:url(fonts/InterDisplay-SemiBold.woff2)format("woff2")}@font-face{font-family:InterDisplay;font-style:italic;font-weight:600;font-display:swap;src:url(fonts/InterDisplay-SemiBoldItalic.woff2)format("woff2")}@font-face{font-family:InterDisplay;font-style:normal;font-weight:700;font-display:swap;src:url(fonts/InterDisplay-Bold.woff2)format("woff2")}@font-face{font-family:InterDisplay;font-style:italic;font-weight:700;font-display:swap;src:url(fonts/InterDisplay-BoldItalic.woff2)format("woff2")}@font-face{font-family:InterDisplay;font-style:normal;font-weight:800;font-display:swap;src:url(fonts/InterDisplay-ExtraBold.woff2)format("woff2")}@font-face{font-family:InterDisplay;font-style:italic;font-weight:800;font-display:swap;src:url(fonts/InterDisplay-ExtraBoldItalic.woff2)format("woff2")}@font-face{font-family:InterDisplay;font-style:normal;font-weight:900;font-display:swap;src:url(fonts/InterDisplay-Black.woff2)format("woff2")}@font-face{font-family:InterDisplay;font-style:italic;font-weight:900;font-display:swap;src:url(fonts/InterDisplay-BlackItalic.woff2)format("woff2")}@font-feature-values InterVariable{@character-variant{cv01:1;cv02:2;cv03:3;cv04:4;cv05:5;cv06:6;cv07:7;cv08:8;cv09:9;cv10:10;cv11:11;cv12:12;cv13:13;alt-1:1;alt-3:9;open-4:2;open-6:3;open-9:4;lc-l-with-tail:5;simplified-u:6;alt-double-s:7;uc-i-with-serif:8;uc-g-with-spur:10;single-story-a:11;compact-lc-f:12;compact-lc-t:13}@styleset{ss01:1;ss02:2;ss03:3;ss04:4;ss05:5;ss06:6;ss07:7;ss08:8;open-digits:1;disambiguation:2;disambiguation-except-zero:4;round-quotes-and-commas:3;square-punctuation:7;square-quotes:8;circled-characters:5;squared-characters:6}}@font-feature-values Inter{@character-variant{cv01:1;cv02:2;cv03:3;cv04:4;cv05:5;cv06:6;cv07:7;cv08:8;cv09:9;cv10:10;cv11:11;cv12:12;cv13:13;alt-1:1;alt-3:9;open-4:2;open-6:3;open-9:4;lc-l-with-tail:5;simplified-u:6;alt-double-s:7;uc-i-with-serif:8;uc-g-with-spur:10;single-story-a:11;compact-lc-f:12;compact-lc-t:13}@styleset{ss01:1;ss02:2;ss03:3;ss04:4;ss05:5;ss06:6;ss07:7;ss08:8;open-digits:1;disambiguation:2;disambiguation-except-zero:4;round-quotes-and-commas:3;square-punctuation:7;square-quotes:8;circled-characters:5;squared-characters:6}}@font-feature-values InterDisplay{@character-variant{cv01:1;cv02:2;cv03:3;cv04:4;cv05:5;cv06:6;cv07:7;cv08:8;cv09:9;cv10:10;cv11:11;cv12:12;cv13:13;alt-1:1;alt-3:9;open-4:2;open-6:3;open-9:4;lc-l-with-tail:5;simplified-u:6;alt-double-s:7;uc-i-with-serif:8;uc-g-with-spur:10;single-story-a:11;compact-lc-f:12;compact-lc-t:13}@styleset{ss01:1;ss02:2;ss03:3;ss04:4;ss05:5;ss06:6;ss07:7;ss08:8;open-digits:1;disambiguation:2;disambiguation-except-zero:4;round-quotes-and-commas:3;square-punctuation:7;square-quotes:8;circled-characters:5;squared-characters:6}}@font-face{font-family:CairoVariable;font-style:normal;font-weight:200 900;font-display:swap;src:url(fonts/Cairo-VariableFont_slnt,wght.woff2)format("woff2")}@font-face{font-family:Cairo;font-style:normal;font-weight:200;font-display:swap;src:url(fonts/Cairo-ExtraLight.woff2)format("woff2")}@font-face{font-family:Cairo;font-style:normal;font-weight:300;font-display:swap;src:url(fonts/Cairo-Light.woff2)format("woff2")}@font-face{font-family:Cairo;font-style:normal;font-weight:400;font-display:swap;src:url(fonts/Cairo-Regular.woff2)format("woff2")}@font-face{font-family:Cairo;font-style:normal;font-weight:500;font-display:swap;src:url(fonts/Cairo-Medium.woff2)format("woff2")}@font-face{font-family:Cairo;font-style:normal;font-weight:600;font-display:swap;src:url(fonts/Cairo-SemiBold.woff2)format("woff2")}@font-face{font-family:Cairo;font-style:normal;font-weight:700;font-display:swap;src:url(fonts/Cairo-Bold.woff2)format("woff2")}@font-face{font-family:Cairo;font-style:normal;font-weight:800;font-display:swap;src:url(fonts/Cairo-ExtraBold.woff2)format("woff2")}@font-face{font-family:Cairo;font-style:normal;font-weight:900;font-display:swap;src:url(fonts/Cairo-Black.woff2)format("woff2")}:root{--default-font-family:"Inter", "Cairo", sans-serif;--app-background-light:var(--p-surface-100);--app-background-dark:var(--p-surface-950);--app-background:var(--app-background-light)}:root[class=dark]{--app-background:var(--app-background-dark)}:lang(ar){--default-font-family:"Cairo", "Inter", sans-serif}@supports (font-variation-settings:normal){:root{--default-font-family:"InterVariable", "CairoVariable", sans-serif;font-optical-sizing:auto}:lang(ar){--default-font-family:"CairoVariable", "InterVariable", sans-serif;font-optical-sizing:auto}}body{background-color:var(--app-background);color:var(--p-text-color)}.mt-dialog .p-dialog-header{background-color:var(--p-surface-100);border-radius:.75rem .75rem 0 0;padding:1rem 1.25rem}.mt-dialog .p-dialog-header .p-dialog-header-actions .p-dialog-close-button{background-color:#fff;border-radius:.3rem;justify-content:center;width:2rem;height:2rem}.mt-dialog .p-dialog-content{border-radius:.8rem;height:100%;overflow-y:hidden}.mt-dialog .p-dialog-content .mt-modal-content{height:100%;padding-bottom:5rem;overflow:auto}.mt-dialog .p-dialog-content .mt-modal-footer{background-color:var(--p-surface-100);justify-content:end;gap:10px;padding:.8rem 1.25rem;display:flex;position:sticky;bottom:0}.mt-drawer .p-drawer-content .mt-modal-content{height:calc(100% - 60px);overflow:auto}.mt-drawer .p-drawer-content .mt-modal-footer{border-top:1px solid var(--p-surface-200);justify-content:flex-end;gap:.5rem;height:15rem;padding:.75rem;display:flex}.mt-custom-drawer .p-drawer-header,.mt-custom-drawer .p-drawer-content,.mt-custom-drawer .p-drawer-footer,.mt-drawer .p-drawer-header,.mt-drawer .p-drawer-content,.mt-drawer .p-drawer-footer{padding:0}.mt-drawer .p-drawer-content,body:has(:is(.p-dialog-mask.p-overlay-mask,.p-drawer-mask.p-overlay-mask)){overflow:hidden}.mt-tree .p-tree-node-toggle-button,.mt-tree .p-tree-node-checkbox{display:none!important}.mt-tree .p-tree-node-label{width:100%!important}.mt-tree .p-tree-node-content{margin-bottom:8px;padding:0!important}.mt-tree .p-tree-node-icon{display:none!important}.mt-tree .p-tree-filter-input{height:3rem}.mt-tree p-iconfield{width:60%;margin-bottom:1rem}.mt-tree .p-tree-node-selected .mt-tree-node{border-color:var(--p-primary-300)!important}.p-drawer-mask{background-color:#0000!important}@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-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}@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-divide-y-reverse{syntax:"*";inherits:false;initial-value:0}@property --tw-border-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-leading{syntax:"*";inherits:false}@property --tw-font-weight{syntax:"*";inherits:false}@property --tw-tracking{syntax:"*";inherits:false}@property --tw-ordinal{syntax:"*";inherits:false}@property --tw-slashed-zero{syntax:"*";inherits:false}@property --tw-numeric-figure{syntax:"*";inherits:false}@property --tw-numeric-spacing{syntax:"*";inherits:false}@property --tw-numeric-fraction{syntax:"*";inherits:false}@property --tw-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-shadow-color{syntax:"*";inherits:false}@property --tw-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-inset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-shadow-color{syntax:"*";inherits:false}@property --tw-inset-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-ring-color{syntax:"*";inherits:false}@property --tw-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-ring-color{syntax:"*";inherits:false}@property --tw-inset-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-ring-inset{syntax:"*";inherits:false}@property --tw-ring-offset-width{syntax:"<length>";inherits:false;initial-value:0}@property --tw-ring-offset-color{syntax:"*";inherits:false;initial-value:#fff}@property --tw-ring-offset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-blur{syntax:"*";inherits:false}@property --tw-brightness{syntax:"*";inherits:false}@property --tw-contrast{syntax:"*";inherits:false}@property --tw-grayscale{syntax:"*";inherits:false}@property --tw-hue-rotate{syntax:"*";inherits:false}@property --tw-invert{syntax:"*";inherits:false}@property --tw-opacity{syntax:"*";inherits:false}@property --tw-saturate{syntax:"*";inherits:false}@property --tw-sepia{syntax:"*";inherits:false}@property --tw-drop-shadow{syntax:"*";inherits:false}@property --tw-drop-shadow-color{syntax:"*";inherits:false}@property --tw-drop-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-drop-shadow-size{syntax:"*";inherits:false}@property --tw-duration{syntax:"*";inherits:false}@property --tw-ease{syntax:"*";inherits:false}@keyframes spin{to{transform:rotate(360deg)}}@keyframes pulse{50%{opacity:.5}}
@@ -359,7 +359,7 @@ class PropertyFilterBuilder {
359
359
  return toStringValue(rule.value);
360
360
  }
361
361
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.3", ngImport: i0, type: PropertyFilterBuilder, deps: [], target: i0.ɵɵFactoryTarget.Component });
362
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.0.3", type: PropertyFilterBuilder, isStandalone: true, selector: "mt-property-filter-builder", inputs: { schema: { classPropertyName: "schema", publicName: "schema", isSignal: true, isRequired: false, transformFunction: null }, filters: { classPropertyName: "filters", publicName: "filters", isSignal: true, isRequired: false, transformFunction: null }, title: { classPropertyName: "title", publicName: "title", isSignal: true, isRequired: false, transformFunction: null }, buttonLabel: { classPropertyName: "buttonLabel", publicName: "buttonLabel", isSignal: true, isRequired: false, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { filters: "filtersChange", applied: "applied", cleared: "cleared" }, host: { classAttribute: "block" }, ngImport: i0, template: "<mt-button\r\n [label]=\"buttonLabel()\"\r\n severity=\"secondary\"\r\n icon=\"general.filter-funnel-01\"\r\n [badge]=\"activeFilterCount() > 0 ? activeFilterCount().toString() : undefined\"\r\n [disabled]=\"disabled() || !hasSchema()\"\r\n (onClick)=\"onPopoverToggle($event, popover)\"\r\n/>\r\n\r\n<p-popover #popover [style]=\"{ width: 'min(980px, 92vw)' }\" appendTo=\"body\">\r\n <div class=\"flex flex-col gap-4\">\r\n <div\r\n class=\"flex items-center justify-between border-b border-surface-200 pb-3\"\r\n >\r\n <div class=\"flex flex-col\">\r\n <h3 class=\"m-0 text-lg font-semibold\">{{ title() }}</h3>\r\n </div>\r\n\r\n <mt-button\r\n variant=\"text\"\r\n severity=\"secondary\"\r\n label=\"Clear all\"\r\n (onClick)=\"clearAll(popover)\"\r\n />\r\n </div>\r\n\r\n <div class=\"flex flex-col gap-3\">\r\n @for (draft of drafts(); track draft.id; let index = $index) {\r\n <div\r\n class=\"grid grid-cols-[80px_minmax(0,1fr)_auto] items-center gap-2 max-lg:grid-cols-1 max-lg:items-start\"\r\n >\r\n <div class=\"text-sm text-color\" [class.invisible]=\"index > 0\">\r\n Where\r\n </div>\r\n\r\n <div\r\n class=\"grid grid-cols-[minmax(170px,1fr)_minmax(170px,1fr)_minmax(220px,2fr)] gap-3 max-lg:grid-cols-1\"\r\n >\r\n <mt-select-field\r\n [hasPlaceholderPrefix]=\"false\"\r\n placeholder=\"Property\"\r\n optionLabel=\"label\"\r\n optionValue=\"key\"\r\n [options]=\"fieldOptions()\"\r\n [showClear]=\"false\"\r\n [ngModel]=\"draft.field\"\r\n (ngModelChange)=\"onFieldChange(index, $event)\"\r\n />\r\n\r\n <mt-select-field\r\n [hasPlaceholderPrefix]=\"false\"\r\n placeholder=\"Condition\"\r\n optionLabel=\"label\"\r\n optionValue=\"key\"\r\n [options]=\"operatorOptions()\"\r\n [showClear]=\"false\"\r\n [ngModel]=\"draft.op\"\r\n (ngModelChange)=\"onOperatorChange(index, $event)\"\r\n />\r\n\r\n @switch (getValueMode(draft.op)) {\r\n @case (\"none\") {\r\n <div\r\n class=\"flex min-h-10 items-center rounded-lg border border-dashed border-surface-300 px-3 text-sm text-color-secondary\"\r\n >\r\n No value required\r\n </div>\r\n }\r\n @case (\"range\") {\r\n <div class=\"grid grid-cols-2 gap-2 max-lg:grid-cols-1\">\r\n @if (isDateField(draft.field)) {\r\n <mt-date-field\r\n [placeholder]=\"'From'\"\r\n [showTime]=\"isDateTimeField(draft.field)\"\r\n [showIcon]=\"false\"\r\n [ngModel]=\"draft.from\"\r\n (ngModelChange)=\"onFromChange(index, $event)\"\r\n />\r\n <mt-date-field\r\n [placeholder]=\"'To'\"\r\n [showTime]=\"isDateTimeField(draft.field)\"\r\n [showIcon]=\"false\"\r\n [ngModel]=\"draft.to\"\r\n (ngModelChange)=\"onToChange(index, $event)\"\r\n />\r\n } @else {\r\n <mt-text-field\r\n [type]=\"getValueInputType(draft.field, draft.op)\"\r\n [placeholder]=\"'From'\"\r\n [ngModel]=\"draft.from\"\r\n (ngModelChange)=\"onFromChange(index, $event)\"\r\n />\r\n <mt-text-field\r\n [type]=\"getValueInputType(draft.field, draft.op)\"\r\n [placeholder]=\"'To'\"\r\n [ngModel]=\"draft.to\"\r\n (ngModelChange)=\"onToChange(index, $event)\"\r\n />\r\n }\r\n </div>\r\n }\r\n @default {\r\n @if (\r\n getValueMode(draft.op) !== \"multi\" && isDateField(draft.field)\r\n ) {\r\n <mt-date-field\r\n [placeholder]=\"'Value'\"\r\n [showTime]=\"isDateTimeField(draft.field)\"\r\n [showIcon]=\"false\"\r\n [ngModel]=\"draft.value\"\r\n (ngModelChange)=\"onValueChange(index, $event)\"\r\n />\r\n } @else {\r\n <mt-text-field\r\n [type]=\"getValueInputType(draft.field, draft.op)\"\r\n [placeholder]=\"\r\n getValueMode(draft.op) === 'multi'\r\n ? 'Value (comma separated)'\r\n : 'Value'\r\n \"\r\n [ngModel]=\"draft.value\"\r\n (ngModelChange)=\"onValueChange(index, $event)\"\r\n />\r\n }\r\n }\r\n }\r\n </div>\r\n\r\n <mt-button\r\n icon=\"general.x-close\"\r\n severity=\"secondary\"\r\n variant=\"text\"\r\n [disabled]=\"drafts().length <= 1\"\r\n (onClick)=\"removeFilter(index)\"\r\n />\r\n </div>\r\n }\r\n </div>\r\n\r\n <div\r\n class=\"flex items-center justify-between max-lg:flex-col max-lg:items-stretch max-lg:gap-3\"\r\n >\r\n <mt-button\r\n label=\"Add Filter\"\r\n icon=\"general.plus\"\r\n [disabled]=\"!canAddFilter()\"\r\n (onClick)=\"addFilter()\"\r\n />\r\n\r\n <div class=\"flex gap-2 max-lg:w-full\">\r\n <mt-button\r\n severity=\"secondary\"\r\n variant=\"outlined\"\r\n label=\"Cancel\"\r\n (onClick)=\"popover.hide()\"\r\n />\r\n <mt-button label=\"Apply\" (onClick)=\"apply(popover)\" />\r\n </div>\r\n </div>\r\n </div>\r\n</p-popover>\r\n", dependencies: [{ kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: Button, selector: "mt-button", inputs: ["icon", "label", "tooltip", "class", "type", "styleClass", "severity", "badge", "variant", "badgeSeverity", "size", "iconPos", "autofocus", "fluid", "raised", "rounded", "text", "plain", "outlined", "link", "disabled", "loading", "pInputs"], outputs: ["onClick", "onFocus", "onBlur"] }, { kind: "component", type: DateField, selector: "mt-date-field", inputs: ["field", "label", "placeholder", "class", "readonly", "showIcon", "showClear", "showTime", "pInputs", "required"] }, { kind: "ngmodule", type: PopoverModule }, { kind: "component", type: i2.Popover, selector: "p-popover", inputs: ["ariaLabel", "ariaLabelledBy", "dismissable", "style", "styleClass", "appendTo", "autoZIndex", "ariaCloseLabel", "baseZIndex", "focusOnShow", "showTransitionOptions", "hideTransitionOptions", "motionOptions"], outputs: ["onShow", "onHide"] }, { kind: "component", type: SelectField, selector: "mt-select-field", inputs: ["field", "label", "placeholder", "hasPlaceholderPrefix", "class", "readonly", "pInputs", "options", "optionValue", "optionLabel", "filter", "filterBy", "dataKey", "showClear", "clearAfterSelect", "required", "group", "size", "optionGroupLabel", "optionGroupChildren", "loading", "optionIcon", "optionIconColor", "optionIconShape", "optionAvatarShape", "optionGroupIcon", "optionGroupIconColor", "optionGroupIconShape", "optionGroupAvatarShape"], outputs: ["onChange"] }, { kind: "component", type: TextField, selector: "mt-text-field", inputs: ["field", "hint", "label", "placeholder", "class", "type", "readonly", "pInputs", "required", "icon", "iconPosition"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
362
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.0.3", type: PropertyFilterBuilder, isStandalone: true, selector: "mt-property-filter-builder", inputs: { schema: { classPropertyName: "schema", publicName: "schema", isSignal: true, isRequired: false, transformFunction: null }, filters: { classPropertyName: "filters", publicName: "filters", isSignal: true, isRequired: false, transformFunction: null }, title: { classPropertyName: "title", publicName: "title", isSignal: true, isRequired: false, transformFunction: null }, buttonLabel: { classPropertyName: "buttonLabel", publicName: "buttonLabel", isSignal: true, isRequired: false, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { filters: "filtersChange", applied: "applied", cleared: "cleared" }, host: { classAttribute: "block" }, ngImport: i0, template: "<mt-button\r\n [label]=\"buttonLabel()\"\r\n severity=\"secondary\"\r\n icon=\"general.filter-funnel-01\"\r\n [badge]=\"activeFilterCount() > 0 ? activeFilterCount().toString() : undefined\"\r\n [disabled]=\"disabled() || !hasSchema()\"\r\n (onClick)=\"onPopoverToggle($event, popover)\"\r\n/>\r\n\r\n<p-popover #popover [style]=\"{ width: 'min(980px, 92vw)' }\" appendTo=\"body\">\r\n <div class=\"flex flex-col gap-4\">\r\n <div\r\n class=\"flex items-center justify-between border-b border-surface-200 pb-3 px-3\"\r\n >\r\n <div class=\"flex flex-col\">\r\n <h3 class=\"m-0 text-lg font-semibold\">{{ title() }}</h3>\r\n </div>\r\n\r\n <mt-button\r\n variant=\"text\"\r\n severity=\"secondary\"\r\n label=\"Clear all\"\r\n (onClick)=\"clearAll(popover)\"\r\n />\r\n </div>\r\n\r\n <div class=\"flex flex-col gap-3 px-3\">\r\n @for (draft of drafts(); track draft.id; let index = $index) {\r\n <div\r\n class=\"grid grid-cols-[80px_minmax(0,1fr)_auto] items-center gap-2 max-lg:grid-cols-1 max-lg:items-start\"\r\n >\r\n <div class=\"text-sm text-color\" [class.invisible]=\"index > 0\">\r\n Where\r\n </div>\r\n\r\n <div\r\n class=\"grid grid-cols-[minmax(170px,1fr)_minmax(170px,1fr)_minmax(220px,2fr)] gap-3 max-lg:grid-cols-1\"\r\n >\r\n <mt-select-field\r\n [hasPlaceholderPrefix]=\"false\"\r\n placeholder=\"Property\"\r\n optionLabel=\"label\"\r\n optionValue=\"key\"\r\n [options]=\"fieldOptions()\"\r\n [showClear]=\"false\"\r\n [ngModel]=\"draft.field\"\r\n (ngModelChange)=\"onFieldChange(index, $event)\"\r\n />\r\n\r\n <mt-select-field\r\n [hasPlaceholderPrefix]=\"false\"\r\n placeholder=\"Condition\"\r\n optionLabel=\"label\"\r\n optionValue=\"key\"\r\n [options]=\"operatorOptions()\"\r\n [showClear]=\"false\"\r\n [ngModel]=\"draft.op\"\r\n (ngModelChange)=\"onOperatorChange(index, $event)\"\r\n />\r\n\r\n @switch (getValueMode(draft.op)) {\r\n @case (\"none\") {\r\n <div\r\n class=\"flex min-h-10 items-center rounded-lg border border-dashed border-surface-300 px-3 text-sm text-color-secondary\"\r\n >\r\n No value required\r\n </div>\r\n }\r\n @case (\"range\") {\r\n <div class=\"grid grid-cols-2 gap-2 max-lg:grid-cols-1\">\r\n @if (isDateField(draft.field)) {\r\n <mt-date-field\r\n [placeholder]=\"'From'\"\r\n [showTime]=\"isDateTimeField(draft.field)\"\r\n [showIcon]=\"false\"\r\n [ngModel]=\"draft.from\"\r\n (ngModelChange)=\"onFromChange(index, $event)\"\r\n />\r\n <mt-date-field\r\n [placeholder]=\"'To'\"\r\n [showTime]=\"isDateTimeField(draft.field)\"\r\n [showIcon]=\"false\"\r\n [ngModel]=\"draft.to\"\r\n (ngModelChange)=\"onToChange(index, $event)\"\r\n />\r\n } @else {\r\n <mt-text-field\r\n [type]=\"getValueInputType(draft.field, draft.op)\"\r\n [placeholder]=\"'From'\"\r\n [ngModel]=\"draft.from\"\r\n (ngModelChange)=\"onFromChange(index, $event)\"\r\n />\r\n <mt-text-field\r\n [type]=\"getValueInputType(draft.field, draft.op)\"\r\n [placeholder]=\"'To'\"\r\n [ngModel]=\"draft.to\"\r\n (ngModelChange)=\"onToChange(index, $event)\"\r\n />\r\n }\r\n </div>\r\n }\r\n @default {\r\n @if (\r\n getValueMode(draft.op) !== \"multi\" && isDateField(draft.field)\r\n ) {\r\n <mt-date-field\r\n [placeholder]=\"'Value'\"\r\n [showTime]=\"isDateTimeField(draft.field)\"\r\n [showIcon]=\"false\"\r\n [ngModel]=\"draft.value\"\r\n (ngModelChange)=\"onValueChange(index, $event)\"\r\n />\r\n } @else {\r\n <mt-text-field\r\n [type]=\"getValueInputType(draft.field, draft.op)\"\r\n [placeholder]=\"\r\n getValueMode(draft.op) === 'multi'\r\n ? 'Value (comma separated)'\r\n : 'Value'\r\n \"\r\n [ngModel]=\"draft.value\"\r\n (ngModelChange)=\"onValueChange(index, $event)\"\r\n />\r\n }\r\n }\r\n }\r\n </div>\r\n\r\n <mt-button\r\n icon=\"general.x-close\"\r\n severity=\"secondary\"\r\n variant=\"text\"\r\n [disabled]=\"drafts().length <= 1\"\r\n (onClick)=\"removeFilter(index)\"\r\n />\r\n </div>\r\n }\r\n </div>\r\n\r\n <div\r\n class=\"flex items-center justify-between p-2 max-lg:flex-col max-lg:items-stretch max-lg:gap-3\"\r\n >\r\n <mt-button\r\n label=\"Add Filter\"\r\n icon=\"general.plus\"\r\n variant=\"outlined\"\r\n [disabled]=\"!canAddFilter()\"\r\n (onClick)=\"addFilter()\"\r\n />\r\n\r\n <div class=\"flex gap-2 max-lg:w-full\">\r\n <mt-button\r\n severity=\"secondary\"\r\n variant=\"outlined\"\r\n label=\"Cancel\"\r\n (onClick)=\"popover.hide()\"\r\n />\r\n <mt-button label=\"Apply\" (onClick)=\"apply(popover)\" />\r\n </div>\r\n </div>\r\n </div>\r\n</p-popover>\r\n", dependencies: [{ kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: Button, selector: "mt-button", inputs: ["icon", "label", "tooltip", "class", "type", "styleClass", "severity", "badge", "variant", "badgeSeverity", "size", "iconPos", "autofocus", "fluid", "raised", "rounded", "text", "plain", "outlined", "link", "disabled", "loading", "pInputs"], outputs: ["onClick", "onFocus", "onBlur"] }, { kind: "component", type: DateField, selector: "mt-date-field", inputs: ["field", "label", "placeholder", "class", "readonly", "showIcon", "showClear", "showTime", "pInputs", "required"] }, { kind: "ngmodule", type: PopoverModule }, { kind: "component", type: i2.Popover, selector: "p-popover", inputs: ["ariaLabel", "ariaLabelledBy", "dismissable", "style", "styleClass", "appendTo", "autoZIndex", "ariaCloseLabel", "baseZIndex", "focusOnShow", "showTransitionOptions", "hideTransitionOptions", "motionOptions"], outputs: ["onShow", "onHide"] }, { kind: "component", type: SelectField, selector: "mt-select-field", inputs: ["field", "label", "placeholder", "hasPlaceholderPrefix", "class", "readonly", "pInputs", "options", "optionValue", "optionLabel", "filter", "filterBy", "dataKey", "showClear", "clearAfterSelect", "required", "group", "size", "optionGroupLabel", "optionGroupChildren", "loading", "optionIcon", "optionIconColor", "optionIconShape", "optionAvatarShape", "optionGroupIcon", "optionGroupIconColor", "optionGroupIconShape", "optionGroupAvatarShape"], outputs: ["onChange"] }, { kind: "component", type: TextField, selector: "mt-text-field", inputs: ["field", "hint", "label", "placeholder", "class", "type", "readonly", "pInputs", "required", "icon", "iconPosition"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
363
363
  }
364
364
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.3", ngImport: i0, type: PropertyFilterBuilder, decorators: [{
365
365
  type: Component,
@@ -372,7 +372,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.3", ngImpor
372
372
  TextField,
373
373
  ], changeDetection: ChangeDetectionStrategy.OnPush, host: {
374
374
  class: 'block',
375
- }, template: "<mt-button\r\n [label]=\"buttonLabel()\"\r\n severity=\"secondary\"\r\n icon=\"general.filter-funnel-01\"\r\n [badge]=\"activeFilterCount() > 0 ? activeFilterCount().toString() : undefined\"\r\n [disabled]=\"disabled() || !hasSchema()\"\r\n (onClick)=\"onPopoverToggle($event, popover)\"\r\n/>\r\n\r\n<p-popover #popover [style]=\"{ width: 'min(980px, 92vw)' }\" appendTo=\"body\">\r\n <div class=\"flex flex-col gap-4\">\r\n <div\r\n class=\"flex items-center justify-between border-b border-surface-200 pb-3\"\r\n >\r\n <div class=\"flex flex-col\">\r\n <h3 class=\"m-0 text-lg font-semibold\">{{ title() }}</h3>\r\n </div>\r\n\r\n <mt-button\r\n variant=\"text\"\r\n severity=\"secondary\"\r\n label=\"Clear all\"\r\n (onClick)=\"clearAll(popover)\"\r\n />\r\n </div>\r\n\r\n <div class=\"flex flex-col gap-3\">\r\n @for (draft of drafts(); track draft.id; let index = $index) {\r\n <div\r\n class=\"grid grid-cols-[80px_minmax(0,1fr)_auto] items-center gap-2 max-lg:grid-cols-1 max-lg:items-start\"\r\n >\r\n <div class=\"text-sm text-color\" [class.invisible]=\"index > 0\">\r\n Where\r\n </div>\r\n\r\n <div\r\n class=\"grid grid-cols-[minmax(170px,1fr)_minmax(170px,1fr)_minmax(220px,2fr)] gap-3 max-lg:grid-cols-1\"\r\n >\r\n <mt-select-field\r\n [hasPlaceholderPrefix]=\"false\"\r\n placeholder=\"Property\"\r\n optionLabel=\"label\"\r\n optionValue=\"key\"\r\n [options]=\"fieldOptions()\"\r\n [showClear]=\"false\"\r\n [ngModel]=\"draft.field\"\r\n (ngModelChange)=\"onFieldChange(index, $event)\"\r\n />\r\n\r\n <mt-select-field\r\n [hasPlaceholderPrefix]=\"false\"\r\n placeholder=\"Condition\"\r\n optionLabel=\"label\"\r\n optionValue=\"key\"\r\n [options]=\"operatorOptions()\"\r\n [showClear]=\"false\"\r\n [ngModel]=\"draft.op\"\r\n (ngModelChange)=\"onOperatorChange(index, $event)\"\r\n />\r\n\r\n @switch (getValueMode(draft.op)) {\r\n @case (\"none\") {\r\n <div\r\n class=\"flex min-h-10 items-center rounded-lg border border-dashed border-surface-300 px-3 text-sm text-color-secondary\"\r\n >\r\n No value required\r\n </div>\r\n }\r\n @case (\"range\") {\r\n <div class=\"grid grid-cols-2 gap-2 max-lg:grid-cols-1\">\r\n @if (isDateField(draft.field)) {\r\n <mt-date-field\r\n [placeholder]=\"'From'\"\r\n [showTime]=\"isDateTimeField(draft.field)\"\r\n [showIcon]=\"false\"\r\n [ngModel]=\"draft.from\"\r\n (ngModelChange)=\"onFromChange(index, $event)\"\r\n />\r\n <mt-date-field\r\n [placeholder]=\"'To'\"\r\n [showTime]=\"isDateTimeField(draft.field)\"\r\n [showIcon]=\"false\"\r\n [ngModel]=\"draft.to\"\r\n (ngModelChange)=\"onToChange(index, $event)\"\r\n />\r\n } @else {\r\n <mt-text-field\r\n [type]=\"getValueInputType(draft.field, draft.op)\"\r\n [placeholder]=\"'From'\"\r\n [ngModel]=\"draft.from\"\r\n (ngModelChange)=\"onFromChange(index, $event)\"\r\n />\r\n <mt-text-field\r\n [type]=\"getValueInputType(draft.field, draft.op)\"\r\n [placeholder]=\"'To'\"\r\n [ngModel]=\"draft.to\"\r\n (ngModelChange)=\"onToChange(index, $event)\"\r\n />\r\n }\r\n </div>\r\n }\r\n @default {\r\n @if (\r\n getValueMode(draft.op) !== \"multi\" && isDateField(draft.field)\r\n ) {\r\n <mt-date-field\r\n [placeholder]=\"'Value'\"\r\n [showTime]=\"isDateTimeField(draft.field)\"\r\n [showIcon]=\"false\"\r\n [ngModel]=\"draft.value\"\r\n (ngModelChange)=\"onValueChange(index, $event)\"\r\n />\r\n } @else {\r\n <mt-text-field\r\n [type]=\"getValueInputType(draft.field, draft.op)\"\r\n [placeholder]=\"\r\n getValueMode(draft.op) === 'multi'\r\n ? 'Value (comma separated)'\r\n : 'Value'\r\n \"\r\n [ngModel]=\"draft.value\"\r\n (ngModelChange)=\"onValueChange(index, $event)\"\r\n />\r\n }\r\n }\r\n }\r\n </div>\r\n\r\n <mt-button\r\n icon=\"general.x-close\"\r\n severity=\"secondary\"\r\n variant=\"text\"\r\n [disabled]=\"drafts().length <= 1\"\r\n (onClick)=\"removeFilter(index)\"\r\n />\r\n </div>\r\n }\r\n </div>\r\n\r\n <div\r\n class=\"flex items-center justify-between max-lg:flex-col max-lg:items-stretch max-lg:gap-3\"\r\n >\r\n <mt-button\r\n label=\"Add Filter\"\r\n icon=\"general.plus\"\r\n [disabled]=\"!canAddFilter()\"\r\n (onClick)=\"addFilter()\"\r\n />\r\n\r\n <div class=\"flex gap-2 max-lg:w-full\">\r\n <mt-button\r\n severity=\"secondary\"\r\n variant=\"outlined\"\r\n label=\"Cancel\"\r\n (onClick)=\"popover.hide()\"\r\n />\r\n <mt-button label=\"Apply\" (onClick)=\"apply(popover)\" />\r\n </div>\r\n </div>\r\n </div>\r\n</p-popover>\r\n" }]
375
+ }, template: "<mt-button\r\n [label]=\"buttonLabel()\"\r\n severity=\"secondary\"\r\n icon=\"general.filter-funnel-01\"\r\n [badge]=\"activeFilterCount() > 0 ? activeFilterCount().toString() : undefined\"\r\n [disabled]=\"disabled() || !hasSchema()\"\r\n (onClick)=\"onPopoverToggle($event, popover)\"\r\n/>\r\n\r\n<p-popover #popover [style]=\"{ width: 'min(980px, 92vw)' }\" appendTo=\"body\">\r\n <div class=\"flex flex-col gap-4\">\r\n <div\r\n class=\"flex items-center justify-between border-b border-surface-200 pb-3 px-3\"\r\n >\r\n <div class=\"flex flex-col\">\r\n <h3 class=\"m-0 text-lg font-semibold\">{{ title() }}</h3>\r\n </div>\r\n\r\n <mt-button\r\n variant=\"text\"\r\n severity=\"secondary\"\r\n label=\"Clear all\"\r\n (onClick)=\"clearAll(popover)\"\r\n />\r\n </div>\r\n\r\n <div class=\"flex flex-col gap-3 px-3\">\r\n @for (draft of drafts(); track draft.id; let index = $index) {\r\n <div\r\n class=\"grid grid-cols-[80px_minmax(0,1fr)_auto] items-center gap-2 max-lg:grid-cols-1 max-lg:items-start\"\r\n >\r\n <div class=\"text-sm text-color\" [class.invisible]=\"index > 0\">\r\n Where\r\n </div>\r\n\r\n <div\r\n class=\"grid grid-cols-[minmax(170px,1fr)_minmax(170px,1fr)_minmax(220px,2fr)] gap-3 max-lg:grid-cols-1\"\r\n >\r\n <mt-select-field\r\n [hasPlaceholderPrefix]=\"false\"\r\n placeholder=\"Property\"\r\n optionLabel=\"label\"\r\n optionValue=\"key\"\r\n [options]=\"fieldOptions()\"\r\n [showClear]=\"false\"\r\n [ngModel]=\"draft.field\"\r\n (ngModelChange)=\"onFieldChange(index, $event)\"\r\n />\r\n\r\n <mt-select-field\r\n [hasPlaceholderPrefix]=\"false\"\r\n placeholder=\"Condition\"\r\n optionLabel=\"label\"\r\n optionValue=\"key\"\r\n [options]=\"operatorOptions()\"\r\n [showClear]=\"false\"\r\n [ngModel]=\"draft.op\"\r\n (ngModelChange)=\"onOperatorChange(index, $event)\"\r\n />\r\n\r\n @switch (getValueMode(draft.op)) {\r\n @case (\"none\") {\r\n <div\r\n class=\"flex min-h-10 items-center rounded-lg border border-dashed border-surface-300 px-3 text-sm text-color-secondary\"\r\n >\r\n No value required\r\n </div>\r\n }\r\n @case (\"range\") {\r\n <div class=\"grid grid-cols-2 gap-2 max-lg:grid-cols-1\">\r\n @if (isDateField(draft.field)) {\r\n <mt-date-field\r\n [placeholder]=\"'From'\"\r\n [showTime]=\"isDateTimeField(draft.field)\"\r\n [showIcon]=\"false\"\r\n [ngModel]=\"draft.from\"\r\n (ngModelChange)=\"onFromChange(index, $event)\"\r\n />\r\n <mt-date-field\r\n [placeholder]=\"'To'\"\r\n [showTime]=\"isDateTimeField(draft.field)\"\r\n [showIcon]=\"false\"\r\n [ngModel]=\"draft.to\"\r\n (ngModelChange)=\"onToChange(index, $event)\"\r\n />\r\n } @else {\r\n <mt-text-field\r\n [type]=\"getValueInputType(draft.field, draft.op)\"\r\n [placeholder]=\"'From'\"\r\n [ngModel]=\"draft.from\"\r\n (ngModelChange)=\"onFromChange(index, $event)\"\r\n />\r\n <mt-text-field\r\n [type]=\"getValueInputType(draft.field, draft.op)\"\r\n [placeholder]=\"'To'\"\r\n [ngModel]=\"draft.to\"\r\n (ngModelChange)=\"onToChange(index, $event)\"\r\n />\r\n }\r\n </div>\r\n }\r\n @default {\r\n @if (\r\n getValueMode(draft.op) !== \"multi\" && isDateField(draft.field)\r\n ) {\r\n <mt-date-field\r\n [placeholder]=\"'Value'\"\r\n [showTime]=\"isDateTimeField(draft.field)\"\r\n [showIcon]=\"false\"\r\n [ngModel]=\"draft.value\"\r\n (ngModelChange)=\"onValueChange(index, $event)\"\r\n />\r\n } @else {\r\n <mt-text-field\r\n [type]=\"getValueInputType(draft.field, draft.op)\"\r\n [placeholder]=\"\r\n getValueMode(draft.op) === 'multi'\r\n ? 'Value (comma separated)'\r\n : 'Value'\r\n \"\r\n [ngModel]=\"draft.value\"\r\n (ngModelChange)=\"onValueChange(index, $event)\"\r\n />\r\n }\r\n }\r\n }\r\n </div>\r\n\r\n <mt-button\r\n icon=\"general.x-close\"\r\n severity=\"secondary\"\r\n variant=\"text\"\r\n [disabled]=\"drafts().length <= 1\"\r\n (onClick)=\"removeFilter(index)\"\r\n />\r\n </div>\r\n }\r\n </div>\r\n\r\n <div\r\n class=\"flex items-center justify-between p-2 max-lg:flex-col max-lg:items-stretch max-lg:gap-3\"\r\n >\r\n <mt-button\r\n label=\"Add Filter\"\r\n icon=\"general.plus\"\r\n variant=\"outlined\"\r\n [disabled]=\"!canAddFilter()\"\r\n (onClick)=\"addFilter()\"\r\n />\r\n\r\n <div class=\"flex gap-2 max-lg:w-full\">\r\n <mt-button\r\n severity=\"secondary\"\r\n variant=\"outlined\"\r\n label=\"Cancel\"\r\n (onClick)=\"popover.hide()\"\r\n />\r\n <mt-button label=\"Apply\" (onClick)=\"apply(popover)\" />\r\n </div>\r\n </div>\r\n </div>\r\n</p-popover>\r\n" }]
376
376
  }], ctorParameters: () => [], propDecorators: { schema: [{ type: i0.Input, args: [{ isSignal: true, alias: "schema", required: false }] }], filters: [{ type: i0.Input, args: [{ isSignal: true, alias: "filters", required: false }] }, { type: i0.Output, args: ["filtersChange"] }], title: [{ type: i0.Input, args: [{ isSignal: true, alias: "title", required: false }] }], buttonLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "buttonLabel", required: false }] }], disabled: [{ type: i0.Input, args: [{ isSignal: true, alias: "disabled", required: false }] }], applied: [{ type: i0.Output, args: ["applied"] }], cleared: [{ type: i0.Output, args: ["cleared"] }] } });
377
377
 
378
378
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"masterteam-components-property-filter-builder.mjs","sources":["../../../../packages/masterteam/components/property-filter-builder/property-filter-builder.ts","../../../../packages/masterteam/components/property-filter-builder/property-filter-builder.html","../../../../packages/masterteam/components/property-filter-builder/masterteam-components-property-filter-builder.ts"],"sourcesContent":["import {\r\n ChangeDetectionStrategy,\r\n Component,\r\n booleanAttribute,\r\n computed,\r\n effect,\r\n input,\r\n model,\r\n output,\r\n signal,\r\n untracked,\r\n} from '@angular/core';\r\nimport { FormsModule } from '@angular/forms';\r\nimport { Button } from '@masterteam/components/button';\r\nimport { DateField } from '@masterteam/components/date-field';\r\nimport { SelectField } from '@masterteam/components/select-field';\r\nimport { TextField } from '@masterteam/components/text-field';\r\nimport { PopoverModule } from 'primeng/popover';\r\n\r\nexport type PropertyFilterBuilderValueMode =\r\n | 'single'\r\n | 'multi'\r\n | 'range'\r\n | 'none';\r\n\r\nexport interface PropertyFilterBuilderFieldOption {\r\n key: string;\r\n label?: string;\r\n viewType?: string;\r\n}\r\n\r\nexport interface PropertyFilterBuilderOperatorOption {\r\n key: string;\r\n label?: string;\r\n valueMode?: PropertyFilterBuilderValueMode;\r\n}\r\n\r\nexport interface PropertyFilterBuilderSchema {\r\n allowedFields: Array<string | PropertyFilterBuilderFieldOption>;\r\n allowedOperators: Array<string | PropertyFilterBuilderOperatorOption>;\r\n maxFilters?: number;\r\n}\r\n\r\nexport interface PropertyFilterBuilderRule {\r\n field: string;\r\n op: string;\r\n value?: unknown;\r\n values?: unknown[];\r\n from?: unknown;\r\n to?: unknown;\r\n}\r\n\r\ninterface PropertyFilterBuilderDraft {\r\n id: string;\r\n field: string;\r\n op: string;\r\n value: unknown;\r\n from: unknown;\r\n to: unknown;\r\n}\r\n\r\ninterface SelectOption {\r\n key: string;\r\n label: string;\r\n viewType?: string;\r\n}\r\n\r\nconst DEFAULT_MAX_FILTERS = 20;\r\n\r\nfunction toLabel(value: string): string {\r\n const normalized = value.split('.').pop() ?? value;\r\n return normalized\r\n .replace(/[_-]/g, ' ')\r\n .replace(/([a-z])([A-Z])/g, '$1 $2')\r\n .trim()\r\n .replace(/\\b\\w/g, (char) => char.toUpperCase());\r\n}\r\n\r\nfunction normalizeFieldOption(\r\n value: string | PropertyFilterBuilderFieldOption,\r\n): SelectOption | null {\r\n if (typeof value === 'string') {\r\n return {\r\n key: value,\r\n label: toLabel(value),\r\n };\r\n }\r\n\r\n if (!value?.key) {\r\n return null;\r\n }\r\n\r\n return {\r\n key: value.key,\r\n label: value.label?.trim() || toLabel(value.key),\r\n viewType: value.viewType,\r\n };\r\n}\r\n\r\nfunction inferValueMode(operator: string): PropertyFilterBuilderValueMode {\r\n switch (operator) {\r\n case 'In':\r\n return 'multi';\r\n case 'Between':\r\n return 'range';\r\n case 'IsNull':\r\n case 'IsNotNull':\r\n return 'none';\r\n default:\r\n return 'single';\r\n }\r\n}\r\n\r\nfunction normalizeOperatorOption(\r\n value: string | PropertyFilterBuilderOperatorOption,\r\n): (SelectOption & { valueMode: PropertyFilterBuilderValueMode }) | null {\r\n if (typeof value === 'string') {\r\n return {\r\n key: value,\r\n label: toLabel(value),\r\n valueMode: inferValueMode(value),\r\n };\r\n }\r\n\r\n if (!value?.key) {\r\n return null;\r\n }\r\n\r\n return {\r\n key: value.key,\r\n label: value.label?.trim() || toLabel(value.key),\r\n valueMode: value.valueMode ?? inferValueMode(value.key),\r\n };\r\n}\r\n\r\nfunction toStringValue(value: unknown): string {\r\n if (value === null || value === undefined) return '';\r\n return String(value);\r\n}\r\n\r\ntype NormalizedFieldType = 'text' | 'number' | 'date' | 'datetime' | 'boolean';\r\n\r\nfunction normalizeFieldType(viewType: string | undefined): NormalizedFieldType {\r\n const normalized = viewType?.toLowerCase().trim() ?? '';\r\n\r\n if (\r\n normalized === 'number' ||\r\n normalized === 'decimal' ||\r\n normalized === 'integer' ||\r\n normalized === 'percentage' ||\r\n normalized === 'progress'\r\n ) {\r\n return 'number';\r\n }\r\n\r\n if (normalized === 'datetime' || normalized === 'datetimeoffset') {\r\n return 'datetime';\r\n }\r\n\r\n if (normalized === 'date') {\r\n return 'date';\r\n }\r\n\r\n if (normalized === 'boolean' || normalized === 'bool') {\r\n return 'boolean';\r\n }\r\n\r\n return 'text';\r\n}\r\n\r\nfunction toInputType(viewType: string | undefined): string {\r\n const normalized = normalizeFieldType(viewType);\r\n if (normalized === 'number') return 'number';\r\n if (normalized === 'date') return 'date';\r\n if (normalized === 'datetime') return 'datetime-local';\r\n return 'text';\r\n}\r\n\r\nfunction parseBoolean(value: string): boolean | string {\r\n const normalized = value.toLowerCase();\r\n if (normalized === 'true' || normalized === '1' || normalized === 'yes') {\r\n return true;\r\n }\r\n if (normalized === 'false' || normalized === '0' || normalized === 'no') {\r\n return false;\r\n }\r\n return value;\r\n}\r\n\r\nfunction parseValueByViewType(\r\n rawValue: unknown,\r\n viewType: string | undefined,\r\n): unknown {\r\n if (rawValue === null || rawValue === undefined) return '';\r\n if (rawValue instanceof Date) {\r\n return rawValue.toISOString();\r\n }\r\n\r\n const value = String(rawValue).trim();\r\n if (!value.length) return '';\r\n\r\n switch (normalizeFieldType(viewType)) {\r\n case 'number': {\r\n const parsed = Number(value);\r\n return Number.isFinite(parsed) ? parsed : value;\r\n }\r\n case 'boolean':\r\n return parseBoolean(value);\r\n default:\r\n return value;\r\n }\r\n}\r\n\r\nfunction hasInputValue(rawValue: unknown): boolean {\r\n if (rawValue === null || rawValue === undefined) return false;\r\n if (rawValue instanceof Date) return true;\r\n return String(rawValue).trim().length > 0;\r\n}\r\n\r\n@Component({\r\n selector: 'mt-property-filter-builder',\r\n standalone: true,\r\n imports: [\r\n FormsModule,\r\n Button,\r\n DateField,\r\n PopoverModule,\r\n SelectField,\r\n TextField,\r\n ],\r\n templateUrl: './property-filter-builder.html',\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n host: {\r\n class: 'block',\r\n },\r\n})\r\nexport class PropertyFilterBuilder {\r\n readonly schema = input<PropertyFilterBuilderSchema | null>(null);\r\n readonly filters = model<PropertyFilterBuilderRule[]>([]);\r\n readonly title = input<string>('Advanced Filters');\r\n readonly buttonLabel = input<string>('Filter');\r\n readonly disabled = input<boolean, unknown>(false, {\r\n transform: booleanAttribute,\r\n });\r\n\r\n readonly applied = output<PropertyFilterBuilderRule[]>();\r\n readonly cleared = output<void>();\r\n\r\n private readonly rowSeed = signal(0);\r\n private readonly syncedSignature = signal('');\r\n protected readonly drafts = signal<PropertyFilterBuilderDraft[]>([]);\r\n\r\n protected readonly fieldOptions = computed(() =>\r\n (this.schema()?.allowedFields ?? [])\r\n .map(normalizeFieldOption)\r\n .filter((entry): entry is SelectOption => entry !== null),\r\n );\r\n\r\n protected readonly operatorOptions = computed(() =>\r\n (this.schema()?.allowedOperators ?? []).map(normalizeOperatorOption).filter(\r\n (\r\n entry,\r\n ): entry is SelectOption & {\r\n valueMode: PropertyFilterBuilderValueMode;\r\n } => entry !== null,\r\n ),\r\n );\r\n\r\n protected readonly hasSchema = computed(\r\n () => this.fieldOptions().length > 0 && this.operatorOptions().length > 0,\r\n );\r\n\r\n protected readonly maxFilters = computed(() =>\r\n Math.max(1, this.schema()?.maxFilters ?? DEFAULT_MAX_FILTERS),\r\n );\r\n\r\n protected readonly canAddFilter = computed(() => {\r\n return this.hasSchema() && this.drafts().length < this.maxFilters();\r\n });\r\n\r\n protected readonly activeFilterCount = computed(() => this.filters().length);\r\n\r\n constructor() {\r\n effect(() => {\r\n const fields = this.fieldOptions();\r\n const operators = this.operatorOptions();\r\n const appliedFilters = this.filters();\r\n const signature = JSON.stringify({\r\n fieldKeys: fields.map((field) => field.key),\r\n operatorKeys: operators.map((operator) => operator.key),\r\n filters: appliedFilters,\r\n });\r\n const hasDrafts = untracked(() => this.drafts().length > 0);\r\n const lastSyncedSignature = untracked(() => this.syncedSignature());\r\n\r\n if (!fields.length || !operators.length) {\r\n this.drafts.set([]);\r\n this.syncedSignature.set(signature);\r\n return;\r\n }\r\n\r\n if (hasDrafts && lastSyncedSignature === signature) {\r\n return;\r\n }\r\n\r\n if (!appliedFilters.length) {\r\n this.drafts.set([this.createDraft(fields[0].key, operators[0].key)]);\r\n this.syncedSignature.set(signature);\r\n return;\r\n }\r\n\r\n const nextDrafts = appliedFilters.map((rule) => {\r\n const operatorKey = operators.some((option) => option.key === rule.op)\r\n ? rule.op\r\n : operators[0].key;\r\n const fieldKey = fields.some((option) => option.key === rule.field)\r\n ? rule.field\r\n : fields[0].key;\r\n const mode = this.getValueMode(operatorKey);\r\n\r\n return this.createDraft(\r\n fieldKey,\r\n operatorKey,\r\n mode === 'range' ? '' : this.toDraftValue(rule),\r\n mode === 'range' ? toStringValue(rule.from) : '',\r\n mode === 'range' ? toStringValue(rule.to) : '',\r\n );\r\n });\r\n\r\n this.drafts.set(\r\n nextDrafts.length\r\n ? nextDrafts\r\n : [this.createDraft(fields[0].key, operators[0].key)],\r\n );\r\n this.syncedSignature.set(signature);\r\n });\r\n }\r\n\r\n onPopoverToggle(\r\n event: Event,\r\n popover: { toggle: (event: Event) => void },\r\n ): void {\r\n if (!this.hasSchema() || this.disabled()) {\r\n return;\r\n }\r\n popover.toggle(event);\r\n }\r\n\r\n addFilter(): void {\r\n const fields = this.fieldOptions();\r\n const operators = this.operatorOptions();\r\n if (!fields.length || !operators.length) return;\r\n\r\n this.drafts.update((current) => {\r\n if (current.length >= this.maxFilters()) {\r\n return current;\r\n }\r\n\r\n return [...current, this.createDraft(fields[0].key, operators[0].key)];\r\n });\r\n }\r\n\r\n removeFilter(index: number): void {\r\n this.drafts.update((current) => {\r\n if (current.length <= 1) {\r\n return current;\r\n }\r\n return current.filter((_, rowIndex) => rowIndex !== index);\r\n });\r\n }\r\n\r\n clearAll(popover: { hide: () => void }): void {\r\n const fields = this.fieldOptions();\r\n const operators = this.operatorOptions();\r\n\r\n if (fields.length && operators.length) {\r\n this.drafts.set([this.createDraft(fields[0].key, operators[0].key)]);\r\n } else {\r\n this.drafts.set([]);\r\n }\r\n\r\n this.filters.set([]);\r\n this.cleared.emit();\r\n popover.hide();\r\n }\r\n\r\n apply(popover: { hide: () => void }): void {\r\n const rules = this.buildRulesFromDrafts();\r\n this.filters.set(rules);\r\n this.applied.emit(rules);\r\n popover.hide();\r\n }\r\n\r\n onFieldChange(index: number, field: string): void {\r\n this.patchDraft(index, { field: field || '' });\r\n }\r\n\r\n onOperatorChange(index: number, op: string): void {\r\n const mode = this.getValueMode(op);\r\n this.patchDraft(index, {\r\n op: op || '',\r\n value: mode === 'range' ? '' : (this.drafts()[index]?.value ?? ''),\r\n from: mode === 'range' ? (this.drafts()[index]?.from ?? '') : '',\r\n to: mode === 'range' ? (this.drafts()[index]?.to ?? '') : '',\r\n });\r\n }\r\n\r\n onValueChange(index: number, value: unknown): void {\r\n this.patchDraft(index, { value: value ?? '' });\r\n }\r\n\r\n onFromChange(index: number, from: unknown): void {\r\n this.patchDraft(index, { from: from ?? '' });\r\n }\r\n\r\n onToChange(index: number, to: unknown): void {\r\n this.patchDraft(index, { to: to ?? '' });\r\n }\r\n\r\n getValueMode(op: string): PropertyFilterBuilderValueMode {\r\n return (\r\n this.operatorOptions().find((option) => option.key === op)?.valueMode ??\r\n inferValueMode(op)\r\n );\r\n }\r\n\r\n getValueInputType(field: string, op: string): string {\r\n if (this.getValueMode(op) === 'multi') {\r\n return 'text';\r\n }\r\n return toInputType(this.getFieldViewType(field));\r\n }\r\n\r\n isDateField(field: string): boolean {\r\n const normalized = normalizeFieldType(this.getFieldViewType(field));\r\n return normalized === 'date' || normalized === 'datetime';\r\n }\r\n\r\n isDateTimeField(field: string): boolean {\r\n return normalizeFieldType(this.getFieldViewType(field)) === 'datetime';\r\n }\r\n\r\n private buildRulesFromDrafts(): PropertyFilterBuilderRule[] {\r\n return this.drafts()\r\n .map((draft) => {\r\n if (!draft.field || !draft.op) {\r\n return null;\r\n }\r\n\r\n const mode = this.getValueMode(draft.op);\r\n const viewType = this.getFieldViewType(draft.field);\r\n const rule: PropertyFilterBuilderRule = {\r\n field: draft.field,\r\n op: draft.op,\r\n };\r\n\r\n if (mode === 'none') {\r\n return rule;\r\n }\r\n\r\n if (mode === 'range') {\r\n if (!hasInputValue(draft.from) && !hasInputValue(draft.to)) {\r\n return null;\r\n }\r\n if (hasInputValue(draft.from)) {\r\n rule.from = parseValueByViewType(draft.from, viewType);\r\n }\r\n if (hasInputValue(draft.to)) {\r\n rule.to = parseValueByViewType(draft.to, viewType);\r\n }\r\n return rule;\r\n }\r\n\r\n if (!hasInputValue(draft.value)) {\r\n return null;\r\n }\r\n\r\n if (mode === 'multi') {\r\n const values = String(draft.value)\r\n .split(',')\r\n .map((value) => value.trim())\r\n .filter((value) => value.length > 0)\r\n .map((value) => parseValueByViewType(value, viewType));\r\n\r\n if (!values.length) {\r\n return null;\r\n }\r\n\r\n rule.values = values;\r\n return rule;\r\n }\r\n\r\n rule.value = parseValueByViewType(draft.value, viewType);\r\n return rule;\r\n })\r\n .filter((rule): rule is PropertyFilterBuilderRule => rule !== null)\r\n .slice(0, this.maxFilters());\r\n }\r\n\r\n private getFieldViewType(fieldKey: string): string | undefined {\r\n return this.fieldOptions().find((option) => option.key === fieldKey)\r\n ?.viewType;\r\n }\r\n\r\n private patchDraft(\r\n index: number,\r\n patch: Partial<PropertyFilterBuilderDraft>,\r\n ): void {\r\n this.drafts.update((current) =>\r\n current.map((row, rowIndex) =>\r\n rowIndex === index\r\n ? {\r\n ...row,\r\n ...patch,\r\n }\r\n : row,\r\n ),\r\n );\r\n }\r\n\r\n private createDraft(\r\n field: string,\r\n op: string,\r\n value: unknown = '',\r\n from: unknown = '',\r\n to: unknown = '',\r\n ): PropertyFilterBuilderDraft {\r\n this.rowSeed.update((seed) => seed + 1);\r\n return {\r\n id: `pfb-${this.rowSeed()}`,\r\n field,\r\n op,\r\n value,\r\n from,\r\n to,\r\n };\r\n }\r\n\r\n private toDraftValue(rule: PropertyFilterBuilderRule): string {\r\n if (Array.isArray(rule.values)) {\r\n return rule.values.map((entry) => toStringValue(entry)).join(', ');\r\n }\r\n\r\n return toStringValue(rule.value);\r\n }\r\n}\r\n","<mt-button\r\n [label]=\"buttonLabel()\"\r\n severity=\"secondary\"\r\n icon=\"general.filter-funnel-01\"\r\n [badge]=\"activeFilterCount() > 0 ? activeFilterCount().toString() : undefined\"\r\n [disabled]=\"disabled() || !hasSchema()\"\r\n (onClick)=\"onPopoverToggle($event, popover)\"\r\n/>\r\n\r\n<p-popover #popover [style]=\"{ width: 'min(980px, 92vw)' }\" appendTo=\"body\">\r\n <div class=\"flex flex-col gap-4\">\r\n <div\r\n class=\"flex items-center justify-between border-b border-surface-200 pb-3\"\r\n >\r\n <div class=\"flex flex-col\">\r\n <h3 class=\"m-0 text-lg font-semibold\">{{ title() }}</h3>\r\n </div>\r\n\r\n <mt-button\r\n variant=\"text\"\r\n severity=\"secondary\"\r\n label=\"Clear all\"\r\n (onClick)=\"clearAll(popover)\"\r\n />\r\n </div>\r\n\r\n <div class=\"flex flex-col gap-3\">\r\n @for (draft of drafts(); track draft.id; let index = $index) {\r\n <div\r\n class=\"grid grid-cols-[80px_minmax(0,1fr)_auto] items-center gap-2 max-lg:grid-cols-1 max-lg:items-start\"\r\n >\r\n <div class=\"text-sm text-color\" [class.invisible]=\"index > 0\">\r\n Where\r\n </div>\r\n\r\n <div\r\n class=\"grid grid-cols-[minmax(170px,1fr)_minmax(170px,1fr)_minmax(220px,2fr)] gap-3 max-lg:grid-cols-1\"\r\n >\r\n <mt-select-field\r\n [hasPlaceholderPrefix]=\"false\"\r\n placeholder=\"Property\"\r\n optionLabel=\"label\"\r\n optionValue=\"key\"\r\n [options]=\"fieldOptions()\"\r\n [showClear]=\"false\"\r\n [ngModel]=\"draft.field\"\r\n (ngModelChange)=\"onFieldChange(index, $event)\"\r\n />\r\n\r\n <mt-select-field\r\n [hasPlaceholderPrefix]=\"false\"\r\n placeholder=\"Condition\"\r\n optionLabel=\"label\"\r\n optionValue=\"key\"\r\n [options]=\"operatorOptions()\"\r\n [showClear]=\"false\"\r\n [ngModel]=\"draft.op\"\r\n (ngModelChange)=\"onOperatorChange(index, $event)\"\r\n />\r\n\r\n @switch (getValueMode(draft.op)) {\r\n @case (\"none\") {\r\n <div\r\n class=\"flex min-h-10 items-center rounded-lg border border-dashed border-surface-300 px-3 text-sm text-color-secondary\"\r\n >\r\n No value required\r\n </div>\r\n }\r\n @case (\"range\") {\r\n <div class=\"grid grid-cols-2 gap-2 max-lg:grid-cols-1\">\r\n @if (isDateField(draft.field)) {\r\n <mt-date-field\r\n [placeholder]=\"'From'\"\r\n [showTime]=\"isDateTimeField(draft.field)\"\r\n [showIcon]=\"false\"\r\n [ngModel]=\"draft.from\"\r\n (ngModelChange)=\"onFromChange(index, $event)\"\r\n />\r\n <mt-date-field\r\n [placeholder]=\"'To'\"\r\n [showTime]=\"isDateTimeField(draft.field)\"\r\n [showIcon]=\"false\"\r\n [ngModel]=\"draft.to\"\r\n (ngModelChange)=\"onToChange(index, $event)\"\r\n />\r\n } @else {\r\n <mt-text-field\r\n [type]=\"getValueInputType(draft.field, draft.op)\"\r\n [placeholder]=\"'From'\"\r\n [ngModel]=\"draft.from\"\r\n (ngModelChange)=\"onFromChange(index, $event)\"\r\n />\r\n <mt-text-field\r\n [type]=\"getValueInputType(draft.field, draft.op)\"\r\n [placeholder]=\"'To'\"\r\n [ngModel]=\"draft.to\"\r\n (ngModelChange)=\"onToChange(index, $event)\"\r\n />\r\n }\r\n </div>\r\n }\r\n @default {\r\n @if (\r\n getValueMode(draft.op) !== \"multi\" && isDateField(draft.field)\r\n ) {\r\n <mt-date-field\r\n [placeholder]=\"'Value'\"\r\n [showTime]=\"isDateTimeField(draft.field)\"\r\n [showIcon]=\"false\"\r\n [ngModel]=\"draft.value\"\r\n (ngModelChange)=\"onValueChange(index, $event)\"\r\n />\r\n } @else {\r\n <mt-text-field\r\n [type]=\"getValueInputType(draft.field, draft.op)\"\r\n [placeholder]=\"\r\n getValueMode(draft.op) === 'multi'\r\n ? 'Value (comma separated)'\r\n : 'Value'\r\n \"\r\n [ngModel]=\"draft.value\"\r\n (ngModelChange)=\"onValueChange(index, $event)\"\r\n />\r\n }\r\n }\r\n }\r\n </div>\r\n\r\n <mt-button\r\n icon=\"general.x-close\"\r\n severity=\"secondary\"\r\n variant=\"text\"\r\n [disabled]=\"drafts().length <= 1\"\r\n (onClick)=\"removeFilter(index)\"\r\n />\r\n </div>\r\n }\r\n </div>\r\n\r\n <div\r\n class=\"flex items-center justify-between max-lg:flex-col max-lg:items-stretch max-lg:gap-3\"\r\n >\r\n <mt-button\r\n label=\"Add Filter\"\r\n icon=\"general.plus\"\r\n [disabled]=\"!canAddFilter()\"\r\n (onClick)=\"addFilter()\"\r\n />\r\n\r\n <div class=\"flex gap-2 max-lg:w-full\">\r\n <mt-button\r\n severity=\"secondary\"\r\n variant=\"outlined\"\r\n label=\"Cancel\"\r\n (onClick)=\"popover.hide()\"\r\n />\r\n <mt-button label=\"Apply\" (onClick)=\"apply(popover)\" />\r\n </div>\r\n </div>\r\n </div>\r\n</p-popover>\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"masterteam-components-property-filter-builder.mjs","sources":["../../../../packages/masterteam/components/property-filter-builder/property-filter-builder.ts","../../../../packages/masterteam/components/property-filter-builder/property-filter-builder.html","../../../../packages/masterteam/components/property-filter-builder/masterteam-components-property-filter-builder.ts"],"sourcesContent":["import {\r\n ChangeDetectionStrategy,\r\n Component,\r\n booleanAttribute,\r\n computed,\r\n effect,\r\n input,\r\n model,\r\n output,\r\n signal,\r\n untracked,\r\n} from '@angular/core';\r\nimport { FormsModule } from '@angular/forms';\r\nimport { Button } from '@masterteam/components/button';\r\nimport { DateField } from '@masterteam/components/date-field';\r\nimport { SelectField } from '@masterteam/components/select-field';\r\nimport { TextField } from '@masterteam/components/text-field';\r\nimport { PopoverModule } from 'primeng/popover';\r\n\r\nexport type PropertyFilterBuilderValueMode =\r\n | 'single'\r\n | 'multi'\r\n | 'range'\r\n | 'none';\r\n\r\nexport interface PropertyFilterBuilderFieldOption {\r\n key: string;\r\n label?: string;\r\n viewType?: string;\r\n}\r\n\r\nexport interface PropertyFilterBuilderOperatorOption {\r\n key: string;\r\n label?: string;\r\n valueMode?: PropertyFilterBuilderValueMode;\r\n}\r\n\r\nexport interface PropertyFilterBuilderSchema {\r\n allowedFields: Array<string | PropertyFilterBuilderFieldOption>;\r\n allowedOperators: Array<string | PropertyFilterBuilderOperatorOption>;\r\n maxFilters?: number;\r\n}\r\n\r\nexport interface PropertyFilterBuilderRule {\r\n field: string;\r\n op: string;\r\n value?: unknown;\r\n values?: unknown[];\r\n from?: unknown;\r\n to?: unknown;\r\n}\r\n\r\ninterface PropertyFilterBuilderDraft {\r\n id: string;\r\n field: string;\r\n op: string;\r\n value: unknown;\r\n from: unknown;\r\n to: unknown;\r\n}\r\n\r\ninterface SelectOption {\r\n key: string;\r\n label: string;\r\n viewType?: string;\r\n}\r\n\r\nconst DEFAULT_MAX_FILTERS = 20;\r\n\r\nfunction toLabel(value: string): string {\r\n const normalized = value.split('.').pop() ?? value;\r\n return normalized\r\n .replace(/[_-]/g, ' ')\r\n .replace(/([a-z])([A-Z])/g, '$1 $2')\r\n .trim()\r\n .replace(/\\b\\w/g, (char) => char.toUpperCase());\r\n}\r\n\r\nfunction normalizeFieldOption(\r\n value: string | PropertyFilterBuilderFieldOption,\r\n): SelectOption | null {\r\n if (typeof value === 'string') {\r\n return {\r\n key: value,\r\n label: toLabel(value),\r\n };\r\n }\r\n\r\n if (!value?.key) {\r\n return null;\r\n }\r\n\r\n return {\r\n key: value.key,\r\n label: value.label?.trim() || toLabel(value.key),\r\n viewType: value.viewType,\r\n };\r\n}\r\n\r\nfunction inferValueMode(operator: string): PropertyFilterBuilderValueMode {\r\n switch (operator) {\r\n case 'In':\r\n return 'multi';\r\n case 'Between':\r\n return 'range';\r\n case 'IsNull':\r\n case 'IsNotNull':\r\n return 'none';\r\n default:\r\n return 'single';\r\n }\r\n}\r\n\r\nfunction normalizeOperatorOption(\r\n value: string | PropertyFilterBuilderOperatorOption,\r\n): (SelectOption & { valueMode: PropertyFilterBuilderValueMode }) | null {\r\n if (typeof value === 'string') {\r\n return {\r\n key: value,\r\n label: toLabel(value),\r\n valueMode: inferValueMode(value),\r\n };\r\n }\r\n\r\n if (!value?.key) {\r\n return null;\r\n }\r\n\r\n return {\r\n key: value.key,\r\n label: value.label?.trim() || toLabel(value.key),\r\n valueMode: value.valueMode ?? inferValueMode(value.key),\r\n };\r\n}\r\n\r\nfunction toStringValue(value: unknown): string {\r\n if (value === null || value === undefined) return '';\r\n return String(value);\r\n}\r\n\r\ntype NormalizedFieldType = 'text' | 'number' | 'date' | 'datetime' | 'boolean';\r\n\r\nfunction normalizeFieldType(viewType: string | undefined): NormalizedFieldType {\r\n const normalized = viewType?.toLowerCase().trim() ?? '';\r\n\r\n if (\r\n normalized === 'number' ||\r\n normalized === 'decimal' ||\r\n normalized === 'integer' ||\r\n normalized === 'percentage' ||\r\n normalized === 'progress'\r\n ) {\r\n return 'number';\r\n }\r\n\r\n if (normalized === 'datetime' || normalized === 'datetimeoffset') {\r\n return 'datetime';\r\n }\r\n\r\n if (normalized === 'date') {\r\n return 'date';\r\n }\r\n\r\n if (normalized === 'boolean' || normalized === 'bool') {\r\n return 'boolean';\r\n }\r\n\r\n return 'text';\r\n}\r\n\r\nfunction toInputType(viewType: string | undefined): string {\r\n const normalized = normalizeFieldType(viewType);\r\n if (normalized === 'number') return 'number';\r\n if (normalized === 'date') return 'date';\r\n if (normalized === 'datetime') return 'datetime-local';\r\n return 'text';\r\n}\r\n\r\nfunction parseBoolean(value: string): boolean | string {\r\n const normalized = value.toLowerCase();\r\n if (normalized === 'true' || normalized === '1' || normalized === 'yes') {\r\n return true;\r\n }\r\n if (normalized === 'false' || normalized === '0' || normalized === 'no') {\r\n return false;\r\n }\r\n return value;\r\n}\r\n\r\nfunction parseValueByViewType(\r\n rawValue: unknown,\r\n viewType: string | undefined,\r\n): unknown {\r\n if (rawValue === null || rawValue === undefined) return '';\r\n if (rawValue instanceof Date) {\r\n return rawValue.toISOString();\r\n }\r\n\r\n const value = String(rawValue).trim();\r\n if (!value.length) return '';\r\n\r\n switch (normalizeFieldType(viewType)) {\r\n case 'number': {\r\n const parsed = Number(value);\r\n return Number.isFinite(parsed) ? parsed : value;\r\n }\r\n case 'boolean':\r\n return parseBoolean(value);\r\n default:\r\n return value;\r\n }\r\n}\r\n\r\nfunction hasInputValue(rawValue: unknown): boolean {\r\n if (rawValue === null || rawValue === undefined) return false;\r\n if (rawValue instanceof Date) return true;\r\n return String(rawValue).trim().length > 0;\r\n}\r\n\r\n@Component({\r\n selector: 'mt-property-filter-builder',\r\n standalone: true,\r\n imports: [\r\n FormsModule,\r\n Button,\r\n DateField,\r\n PopoverModule,\r\n SelectField,\r\n TextField,\r\n ],\r\n templateUrl: './property-filter-builder.html',\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n host: {\r\n class: 'block',\r\n },\r\n})\r\nexport class PropertyFilterBuilder {\r\n readonly schema = input<PropertyFilterBuilderSchema | null>(null);\r\n readonly filters = model<PropertyFilterBuilderRule[]>([]);\r\n readonly title = input<string>('Advanced Filters');\r\n readonly buttonLabel = input<string>('Filter');\r\n readonly disabled = input<boolean, unknown>(false, {\r\n transform: booleanAttribute,\r\n });\r\n\r\n readonly applied = output<PropertyFilterBuilderRule[]>();\r\n readonly cleared = output<void>();\r\n\r\n private readonly rowSeed = signal(0);\r\n private readonly syncedSignature = signal('');\r\n protected readonly drafts = signal<PropertyFilterBuilderDraft[]>([]);\r\n\r\n protected readonly fieldOptions = computed(() =>\r\n (this.schema()?.allowedFields ?? [])\r\n .map(normalizeFieldOption)\r\n .filter((entry): entry is SelectOption => entry !== null),\r\n );\r\n\r\n protected readonly operatorOptions = computed(() =>\r\n (this.schema()?.allowedOperators ?? []).map(normalizeOperatorOption).filter(\r\n (\r\n entry,\r\n ): entry is SelectOption & {\r\n valueMode: PropertyFilterBuilderValueMode;\r\n } => entry !== null,\r\n ),\r\n );\r\n\r\n protected readonly hasSchema = computed(\r\n () => this.fieldOptions().length > 0 && this.operatorOptions().length > 0,\r\n );\r\n\r\n protected readonly maxFilters = computed(() =>\r\n Math.max(1, this.schema()?.maxFilters ?? DEFAULT_MAX_FILTERS),\r\n );\r\n\r\n protected readonly canAddFilter = computed(() => {\r\n return this.hasSchema() && this.drafts().length < this.maxFilters();\r\n });\r\n\r\n protected readonly activeFilterCount = computed(() => this.filters().length);\r\n\r\n constructor() {\r\n effect(() => {\r\n const fields = this.fieldOptions();\r\n const operators = this.operatorOptions();\r\n const appliedFilters = this.filters();\r\n const signature = JSON.stringify({\r\n fieldKeys: fields.map((field) => field.key),\r\n operatorKeys: operators.map((operator) => operator.key),\r\n filters: appliedFilters,\r\n });\r\n const hasDrafts = untracked(() => this.drafts().length > 0);\r\n const lastSyncedSignature = untracked(() => this.syncedSignature());\r\n\r\n if (!fields.length || !operators.length) {\r\n this.drafts.set([]);\r\n this.syncedSignature.set(signature);\r\n return;\r\n }\r\n\r\n if (hasDrafts && lastSyncedSignature === signature) {\r\n return;\r\n }\r\n\r\n if (!appliedFilters.length) {\r\n this.drafts.set([this.createDraft(fields[0].key, operators[0].key)]);\r\n this.syncedSignature.set(signature);\r\n return;\r\n }\r\n\r\n const nextDrafts = appliedFilters.map((rule) => {\r\n const operatorKey = operators.some((option) => option.key === rule.op)\r\n ? rule.op\r\n : operators[0].key;\r\n const fieldKey = fields.some((option) => option.key === rule.field)\r\n ? rule.field\r\n : fields[0].key;\r\n const mode = this.getValueMode(operatorKey);\r\n\r\n return this.createDraft(\r\n fieldKey,\r\n operatorKey,\r\n mode === 'range' ? '' : this.toDraftValue(rule),\r\n mode === 'range' ? toStringValue(rule.from) : '',\r\n mode === 'range' ? toStringValue(rule.to) : '',\r\n );\r\n });\r\n\r\n this.drafts.set(\r\n nextDrafts.length\r\n ? nextDrafts\r\n : [this.createDraft(fields[0].key, operators[0].key)],\r\n );\r\n this.syncedSignature.set(signature);\r\n });\r\n }\r\n\r\n onPopoverToggle(\r\n event: Event,\r\n popover: { toggle: (event: Event) => void },\r\n ): void {\r\n if (!this.hasSchema() || this.disabled()) {\r\n return;\r\n }\r\n popover.toggle(event);\r\n }\r\n\r\n addFilter(): void {\r\n const fields = this.fieldOptions();\r\n const operators = this.operatorOptions();\r\n if (!fields.length || !operators.length) return;\r\n\r\n this.drafts.update((current) => {\r\n if (current.length >= this.maxFilters()) {\r\n return current;\r\n }\r\n\r\n return [...current, this.createDraft(fields[0].key, operators[0].key)];\r\n });\r\n }\r\n\r\n removeFilter(index: number): void {\r\n this.drafts.update((current) => {\r\n if (current.length <= 1) {\r\n return current;\r\n }\r\n return current.filter((_, rowIndex) => rowIndex !== index);\r\n });\r\n }\r\n\r\n clearAll(popover: { hide: () => void }): void {\r\n const fields = this.fieldOptions();\r\n const operators = this.operatorOptions();\r\n\r\n if (fields.length && operators.length) {\r\n this.drafts.set([this.createDraft(fields[0].key, operators[0].key)]);\r\n } else {\r\n this.drafts.set([]);\r\n }\r\n\r\n this.filters.set([]);\r\n this.cleared.emit();\r\n popover.hide();\r\n }\r\n\r\n apply(popover: { hide: () => void }): void {\r\n const rules = this.buildRulesFromDrafts();\r\n this.filters.set(rules);\r\n this.applied.emit(rules);\r\n popover.hide();\r\n }\r\n\r\n onFieldChange(index: number, field: string): void {\r\n this.patchDraft(index, { field: field || '' });\r\n }\r\n\r\n onOperatorChange(index: number, op: string): void {\r\n const mode = this.getValueMode(op);\r\n this.patchDraft(index, {\r\n op: op || '',\r\n value: mode === 'range' ? '' : (this.drafts()[index]?.value ?? ''),\r\n from: mode === 'range' ? (this.drafts()[index]?.from ?? '') : '',\r\n to: mode === 'range' ? (this.drafts()[index]?.to ?? '') : '',\r\n });\r\n }\r\n\r\n onValueChange(index: number, value: unknown): void {\r\n this.patchDraft(index, { value: value ?? '' });\r\n }\r\n\r\n onFromChange(index: number, from: unknown): void {\r\n this.patchDraft(index, { from: from ?? '' });\r\n }\r\n\r\n onToChange(index: number, to: unknown): void {\r\n this.patchDraft(index, { to: to ?? '' });\r\n }\r\n\r\n getValueMode(op: string): PropertyFilterBuilderValueMode {\r\n return (\r\n this.operatorOptions().find((option) => option.key === op)?.valueMode ??\r\n inferValueMode(op)\r\n );\r\n }\r\n\r\n getValueInputType(field: string, op: string): string {\r\n if (this.getValueMode(op) === 'multi') {\r\n return 'text';\r\n }\r\n return toInputType(this.getFieldViewType(field));\r\n }\r\n\r\n isDateField(field: string): boolean {\r\n const normalized = normalizeFieldType(this.getFieldViewType(field));\r\n return normalized === 'date' || normalized === 'datetime';\r\n }\r\n\r\n isDateTimeField(field: string): boolean {\r\n return normalizeFieldType(this.getFieldViewType(field)) === 'datetime';\r\n }\r\n\r\n private buildRulesFromDrafts(): PropertyFilterBuilderRule[] {\r\n return this.drafts()\r\n .map((draft) => {\r\n if (!draft.field || !draft.op) {\r\n return null;\r\n }\r\n\r\n const mode = this.getValueMode(draft.op);\r\n const viewType = this.getFieldViewType(draft.field);\r\n const rule: PropertyFilterBuilderRule = {\r\n field: draft.field,\r\n op: draft.op,\r\n };\r\n\r\n if (mode === 'none') {\r\n return rule;\r\n }\r\n\r\n if (mode === 'range') {\r\n if (!hasInputValue(draft.from) && !hasInputValue(draft.to)) {\r\n return null;\r\n }\r\n if (hasInputValue(draft.from)) {\r\n rule.from = parseValueByViewType(draft.from, viewType);\r\n }\r\n if (hasInputValue(draft.to)) {\r\n rule.to = parseValueByViewType(draft.to, viewType);\r\n }\r\n return rule;\r\n }\r\n\r\n if (!hasInputValue(draft.value)) {\r\n return null;\r\n }\r\n\r\n if (mode === 'multi') {\r\n const values = String(draft.value)\r\n .split(',')\r\n .map((value) => value.trim())\r\n .filter((value) => value.length > 0)\r\n .map((value) => parseValueByViewType(value, viewType));\r\n\r\n if (!values.length) {\r\n return null;\r\n }\r\n\r\n rule.values = values;\r\n return rule;\r\n }\r\n\r\n rule.value = parseValueByViewType(draft.value, viewType);\r\n return rule;\r\n })\r\n .filter((rule): rule is PropertyFilterBuilderRule => rule !== null)\r\n .slice(0, this.maxFilters());\r\n }\r\n\r\n private getFieldViewType(fieldKey: string): string | undefined {\r\n return this.fieldOptions().find((option) => option.key === fieldKey)\r\n ?.viewType;\r\n }\r\n\r\n private patchDraft(\r\n index: number,\r\n patch: Partial<PropertyFilterBuilderDraft>,\r\n ): void {\r\n this.drafts.update((current) =>\r\n current.map((row, rowIndex) =>\r\n rowIndex === index\r\n ? {\r\n ...row,\r\n ...patch,\r\n }\r\n : row,\r\n ),\r\n );\r\n }\r\n\r\n private createDraft(\r\n field: string,\r\n op: string,\r\n value: unknown = '',\r\n from: unknown = '',\r\n to: unknown = '',\r\n ): PropertyFilterBuilderDraft {\r\n this.rowSeed.update((seed) => seed + 1);\r\n return {\r\n id: `pfb-${this.rowSeed()}`,\r\n field,\r\n op,\r\n value,\r\n from,\r\n to,\r\n };\r\n }\r\n\r\n private toDraftValue(rule: PropertyFilterBuilderRule): string {\r\n if (Array.isArray(rule.values)) {\r\n return rule.values.map((entry) => toStringValue(entry)).join(', ');\r\n }\r\n\r\n return toStringValue(rule.value);\r\n }\r\n}\r\n","<mt-button\r\n [label]=\"buttonLabel()\"\r\n severity=\"secondary\"\r\n icon=\"general.filter-funnel-01\"\r\n [badge]=\"activeFilterCount() > 0 ? activeFilterCount().toString() : undefined\"\r\n [disabled]=\"disabled() || !hasSchema()\"\r\n (onClick)=\"onPopoverToggle($event, popover)\"\r\n/>\r\n\r\n<p-popover #popover [style]=\"{ width: 'min(980px, 92vw)' }\" appendTo=\"body\">\r\n <div class=\"flex flex-col gap-4\">\r\n <div\r\n class=\"flex items-center justify-between border-b border-surface-200 pb-3 px-3\"\r\n >\r\n <div class=\"flex flex-col\">\r\n <h3 class=\"m-0 text-lg font-semibold\">{{ title() }}</h3>\r\n </div>\r\n\r\n <mt-button\r\n variant=\"text\"\r\n severity=\"secondary\"\r\n label=\"Clear all\"\r\n (onClick)=\"clearAll(popover)\"\r\n />\r\n </div>\r\n\r\n <div class=\"flex flex-col gap-3 px-3\">\r\n @for (draft of drafts(); track draft.id; let index = $index) {\r\n <div\r\n class=\"grid grid-cols-[80px_minmax(0,1fr)_auto] items-center gap-2 max-lg:grid-cols-1 max-lg:items-start\"\r\n >\r\n <div class=\"text-sm text-color\" [class.invisible]=\"index > 0\">\r\n Where\r\n </div>\r\n\r\n <div\r\n class=\"grid grid-cols-[minmax(170px,1fr)_minmax(170px,1fr)_minmax(220px,2fr)] gap-3 max-lg:grid-cols-1\"\r\n >\r\n <mt-select-field\r\n [hasPlaceholderPrefix]=\"false\"\r\n placeholder=\"Property\"\r\n optionLabel=\"label\"\r\n optionValue=\"key\"\r\n [options]=\"fieldOptions()\"\r\n [showClear]=\"false\"\r\n [ngModel]=\"draft.field\"\r\n (ngModelChange)=\"onFieldChange(index, $event)\"\r\n />\r\n\r\n <mt-select-field\r\n [hasPlaceholderPrefix]=\"false\"\r\n placeholder=\"Condition\"\r\n optionLabel=\"label\"\r\n optionValue=\"key\"\r\n [options]=\"operatorOptions()\"\r\n [showClear]=\"false\"\r\n [ngModel]=\"draft.op\"\r\n (ngModelChange)=\"onOperatorChange(index, $event)\"\r\n />\r\n\r\n @switch (getValueMode(draft.op)) {\r\n @case (\"none\") {\r\n <div\r\n class=\"flex min-h-10 items-center rounded-lg border border-dashed border-surface-300 px-3 text-sm text-color-secondary\"\r\n >\r\n No value required\r\n </div>\r\n }\r\n @case (\"range\") {\r\n <div class=\"grid grid-cols-2 gap-2 max-lg:grid-cols-1\">\r\n @if (isDateField(draft.field)) {\r\n <mt-date-field\r\n [placeholder]=\"'From'\"\r\n [showTime]=\"isDateTimeField(draft.field)\"\r\n [showIcon]=\"false\"\r\n [ngModel]=\"draft.from\"\r\n (ngModelChange)=\"onFromChange(index, $event)\"\r\n />\r\n <mt-date-field\r\n [placeholder]=\"'To'\"\r\n [showTime]=\"isDateTimeField(draft.field)\"\r\n [showIcon]=\"false\"\r\n [ngModel]=\"draft.to\"\r\n (ngModelChange)=\"onToChange(index, $event)\"\r\n />\r\n } @else {\r\n <mt-text-field\r\n [type]=\"getValueInputType(draft.field, draft.op)\"\r\n [placeholder]=\"'From'\"\r\n [ngModel]=\"draft.from\"\r\n (ngModelChange)=\"onFromChange(index, $event)\"\r\n />\r\n <mt-text-field\r\n [type]=\"getValueInputType(draft.field, draft.op)\"\r\n [placeholder]=\"'To'\"\r\n [ngModel]=\"draft.to\"\r\n (ngModelChange)=\"onToChange(index, $event)\"\r\n />\r\n }\r\n </div>\r\n }\r\n @default {\r\n @if (\r\n getValueMode(draft.op) !== \"multi\" && isDateField(draft.field)\r\n ) {\r\n <mt-date-field\r\n [placeholder]=\"'Value'\"\r\n [showTime]=\"isDateTimeField(draft.field)\"\r\n [showIcon]=\"false\"\r\n [ngModel]=\"draft.value\"\r\n (ngModelChange)=\"onValueChange(index, $event)\"\r\n />\r\n } @else {\r\n <mt-text-field\r\n [type]=\"getValueInputType(draft.field, draft.op)\"\r\n [placeholder]=\"\r\n getValueMode(draft.op) === 'multi'\r\n ? 'Value (comma separated)'\r\n : 'Value'\r\n \"\r\n [ngModel]=\"draft.value\"\r\n (ngModelChange)=\"onValueChange(index, $event)\"\r\n />\r\n }\r\n }\r\n }\r\n </div>\r\n\r\n <mt-button\r\n icon=\"general.x-close\"\r\n severity=\"secondary\"\r\n variant=\"text\"\r\n [disabled]=\"drafts().length <= 1\"\r\n (onClick)=\"removeFilter(index)\"\r\n />\r\n </div>\r\n }\r\n </div>\r\n\r\n <div\r\n class=\"flex items-center justify-between p-2 max-lg:flex-col max-lg:items-stretch max-lg:gap-3\"\r\n >\r\n <mt-button\r\n label=\"Add Filter\"\r\n icon=\"general.plus\"\r\n variant=\"outlined\"\r\n [disabled]=\"!canAddFilter()\"\r\n (onClick)=\"addFilter()\"\r\n />\r\n\r\n <div class=\"flex gap-2 max-lg:w-full\">\r\n <mt-button\r\n severity=\"secondary\"\r\n variant=\"outlined\"\r\n label=\"Cancel\"\r\n (onClick)=\"popover.hide()\"\r\n />\r\n <mt-button label=\"Apply\" (onClick)=\"apply(popover)\" />\r\n </div>\r\n </div>\r\n </div>\r\n</p-popover>\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
@@ -5,13 +5,14 @@ import { Avatar } from '@masterteam/components/avatar';
5
5
 
6
6
  class StatisticCard {
7
7
  data = input.required(...(ngDevMode ? [{ debugName: "data" }] : []));
8
+ cardClass = input('shadow-md', ...(ngDevMode ? [{ debugName: "cardClass" }] : []));
8
9
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.3", ngImport: i0, type: StatisticCard, deps: [], target: i0.ɵɵFactoryTarget.Component });
9
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "21.0.3", type: StatisticCard, isStandalone: true, selector: "mt-statistic-card", inputs: { data: { classPropertyName: "data", publicName: "data", isSignal: true, isRequired: true, transformFunction: null } }, ngImport: i0, template: "<mt-card headless>\r\n <div class=\"flex items-center gap-3 p-2\">\r\n <mt-avatar\r\n [style.--p-avatar-background]=\"'var(--p-' + data().color + '-100)'\"\r\n [style.--p-avatar-color]=\"'var(--p-' + data().color + '-600)'\"\r\n [icon]=\"data().icon\"\r\n size=\"large\"\r\n shape=\"square\"\r\n ></mt-avatar>\r\n\r\n <div class=\"flex flex-col gap-0.5\">\r\n <span\r\n class=\"text-lg font-semibold\"\r\n [style.color]=\"'var(--p-' + data().color + '-600)'\"\r\n >\r\n {{ data().title }}\r\n </span>\r\n <span class=\"text-sm text-surface-500\">\r\n {{ data().subTitle }}\r\n </span>\r\n </div>\r\n </div>\r\n</mt-card>\r\n", styles: [""], dependencies: [{ kind: "component", type: Card, selector: "mt-card", inputs: ["class", "title", "paddingless"] }, { kind: "component", type: Avatar, selector: "mt-avatar", inputs: ["label", "icon", "image", "styleClass", "size", "shape", "badge", "badgeSize", "badgeSeverity"], outputs: ["onImageError"] }] });
10
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "21.0.3", type: StatisticCard, isStandalone: true, selector: "mt-statistic-card", inputs: { data: { classPropertyName: "data", publicName: "data", isSignal: true, isRequired: true, transformFunction: null }, cardClass: { classPropertyName: "cardClass", publicName: "cardClass", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: "<mt-card headless [class]=\"cardClass()\">\n <div class=\"flex items-center gap-3 p-2\">\r\n <mt-avatar\r\n [style.--p-avatar-background]=\"'var(--p-' + data().color + '-100)'\"\r\n [style.--p-avatar-color]=\"'var(--p-' + data().color + '-600)'\"\r\n [icon]=\"data().icon\"\r\n size=\"large\"\r\n shape=\"square\"\r\n ></mt-avatar>\r\n\r\n <div class=\"flex flex-col gap-0.5\">\r\n <span\r\n class=\"text-lg font-semibold\"\r\n [style.color]=\"'var(--p-' + data().color + '-600)'\"\r\n >\r\n {{ data().title }}\r\n </span>\r\n <span class=\"text-sm text-surface-500\">\r\n {{ data().subTitle }}\r\n </span>\r\n </div>\r\n </div>\r\n</mt-card>\r\n", styles: [""], dependencies: [{ kind: "component", type: Card, selector: "mt-card", inputs: ["class", "title", "paddingless"] }, { kind: "component", type: Avatar, selector: "mt-avatar", inputs: ["label", "icon", "image", "styleClass", "size", "shape", "badge", "badgeSize", "badgeSeverity"], outputs: ["onImageError"] }] });
10
11
  }
11
12
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.3", ngImport: i0, type: StatisticCard, decorators: [{
12
13
  type: Component,
13
- args: [{ selector: 'mt-statistic-card', standalone: true, imports: [Card, Avatar], template: "<mt-card headless>\r\n <div class=\"flex items-center gap-3 p-2\">\r\n <mt-avatar\r\n [style.--p-avatar-background]=\"'var(--p-' + data().color + '-100)'\"\r\n [style.--p-avatar-color]=\"'var(--p-' + data().color + '-600)'\"\r\n [icon]=\"data().icon\"\r\n size=\"large\"\r\n shape=\"square\"\r\n ></mt-avatar>\r\n\r\n <div class=\"flex flex-col gap-0.5\">\r\n <span\r\n class=\"text-lg font-semibold\"\r\n [style.color]=\"'var(--p-' + data().color + '-600)'\"\r\n >\r\n {{ data().title }}\r\n </span>\r\n <span class=\"text-sm text-surface-500\">\r\n {{ data().subTitle }}\r\n </span>\r\n </div>\r\n </div>\r\n</mt-card>\r\n" }]
14
- }], propDecorators: { data: [{ type: i0.Input, args: [{ isSignal: true, alias: "data", required: true }] }] } });
14
+ args: [{ selector: 'mt-statistic-card', standalone: true, imports: [Card, Avatar], template: "<mt-card headless [class]=\"cardClass()\">\n <div class=\"flex items-center gap-3 p-2\">\r\n <mt-avatar\r\n [style.--p-avatar-background]=\"'var(--p-' + data().color + '-100)'\"\r\n [style.--p-avatar-color]=\"'var(--p-' + data().color + '-600)'\"\r\n [icon]=\"data().icon\"\r\n size=\"large\"\r\n shape=\"square\"\r\n ></mt-avatar>\r\n\r\n <div class=\"flex flex-col gap-0.5\">\r\n <span\r\n class=\"text-lg font-semibold\"\r\n [style.color]=\"'var(--p-' + data().color + '-600)'\"\r\n >\r\n {{ data().title }}\r\n </span>\r\n <span class=\"text-sm text-surface-500\">\r\n {{ data().subTitle }}\r\n </span>\r\n </div>\r\n </div>\r\n</mt-card>\r\n" }]
15
+ }], propDecorators: { data: [{ type: i0.Input, args: [{ isSignal: true, alias: "data", required: true }] }], cardClass: [{ type: i0.Input, args: [{ isSignal: true, alias: "cardClass", required: false }] }] } });
15
16
 
16
17
  /**
17
18
  * Generated bundle index. Do not edit.
@@ -1 +1 @@
1
- {"version":3,"file":"masterteam-components-statistic-card.mjs","sources":["../../../../packages/masterteam/components/statistic-card/statistic-card.ts","../../../../packages/masterteam/components/statistic-card/statistic-card.html","../../../../packages/masterteam/components/statistic-card/masterteam-components-statistic-card.ts"],"sourcesContent":["import { Component, input } from '@angular/core';\r\nimport { Card } from '@masterteam/components/card';\r\nimport { Avatar } from '@masterteam/components/avatar';\r\nimport { MTIcon } from '@masterteam/icons';\r\n\r\nexport interface StatisticCardData {\r\n title: string;\r\n subTitle: string;\r\n icon: MTIcon;\r\n color: string;\r\n}\r\n\r\n@Component({\r\n selector: 'mt-statistic-card',\r\n standalone: true,\r\n templateUrl: './statistic-card.html',\r\n styleUrl: './statistic-card.scss',\r\n imports: [Card, Avatar],\r\n})\r\nexport class StatisticCard {\r\n readonly data = input.required<StatisticCardData>();\r\n}\r\n","<mt-card headless>\r\n <div class=\"flex items-center gap-3 p-2\">\r\n <mt-avatar\r\n [style.--p-avatar-background]=\"'var(--p-' + data().color + '-100)'\"\r\n [style.--p-avatar-color]=\"'var(--p-' + data().color + '-600)'\"\r\n [icon]=\"data().icon\"\r\n size=\"large\"\r\n shape=\"square\"\r\n ></mt-avatar>\r\n\r\n <div class=\"flex flex-col gap-0.5\">\r\n <span\r\n class=\"text-lg font-semibold\"\r\n [style.color]=\"'var(--p-' + data().color + '-600)'\"\r\n >\r\n {{ data().title }}\r\n </span>\r\n <span class=\"text-sm text-surface-500\">\r\n {{ data().subTitle }}\r\n </span>\r\n </div>\r\n </div>\r\n</mt-card>\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":";;;;;MAmBa,aAAa,CAAA;AACf,IAAA,IAAI,GAAG,KAAK,CAAC,QAAQ,+CAAqB;uGADxC,aAAa,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAb,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,aAAa,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,mBAAA,EAAA,MAAA,EAAA,EAAA,IAAA,EAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECnB1B,8sBAuBA,EAAA,MAAA,EAAA,CAAA,EAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EDNY,IAAI,+FAAE,MAAM,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,MAAA,EAAA,OAAA,EAAA,YAAA,EAAA,MAAA,EAAA,OAAA,EAAA,OAAA,EAAA,WAAA,EAAA,eAAA,CAAA,EAAA,OAAA,EAAA,CAAA,cAAA,CAAA,EAAA,CAAA,EAAA,CAAA;;2FAEX,aAAa,EAAA,UAAA,EAAA,CAAA;kBAPzB,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,mBAAmB,cACjB,IAAI,EAAA,OAAA,EAGP,CAAC,IAAI,EAAE,MAAM,CAAC,EAAA,QAAA,EAAA,8sBAAA,EAAA;;;AEjBzB;;AAEG;;;;"}
1
+ {"version":3,"file":"masterteam-components-statistic-card.mjs","sources":["../../../../packages/masterteam/components/statistic-card/statistic-card.ts","../../../../packages/masterteam/components/statistic-card/statistic-card.html","../../../../packages/masterteam/components/statistic-card/masterteam-components-statistic-card.ts"],"sourcesContent":["import { Component, input } from '@angular/core';\r\nimport { Card } from '@masterteam/components/card';\r\nimport { Avatar } from '@masterteam/components/avatar';\r\nimport { MTIcon } from '@masterteam/icons';\r\n\r\nexport interface StatisticCardData {\r\n title: string;\r\n subTitle: string;\r\n icon: MTIcon;\r\n color: string;\r\n}\r\n\r\n@Component({\r\n selector: 'mt-statistic-card',\r\n standalone: true,\r\n templateUrl: './statistic-card.html',\r\n styleUrl: './statistic-card.scss',\r\n imports: [Card, Avatar],\r\n})\r\nexport class StatisticCard {\n readonly data = input.required<StatisticCardData>();\n readonly cardClass = input('shadow-md');\n}\n","<mt-card headless [class]=\"cardClass()\">\n <div class=\"flex items-center gap-3 p-2\">\r\n <mt-avatar\r\n [style.--p-avatar-background]=\"'var(--p-' + data().color + '-100)'\"\r\n [style.--p-avatar-color]=\"'var(--p-' + data().color + '-600)'\"\r\n [icon]=\"data().icon\"\r\n size=\"large\"\r\n shape=\"square\"\r\n ></mt-avatar>\r\n\r\n <div class=\"flex flex-col gap-0.5\">\r\n <span\r\n class=\"text-lg font-semibold\"\r\n [style.color]=\"'var(--p-' + data().color + '-600)'\"\r\n >\r\n {{ data().title }}\r\n </span>\r\n <span class=\"text-sm text-surface-500\">\r\n {{ data().subTitle }}\r\n </span>\r\n </div>\r\n </div>\r\n</mt-card>\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":";;;;;MAmBa,aAAa,CAAA;AACf,IAAA,IAAI,GAAG,KAAK,CAAC,QAAQ,+CAAqB;AAC1C,IAAA,SAAS,GAAG,KAAK,CAAC,WAAW,qDAAC;uGAF5B,aAAa,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAb,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,aAAa,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,mBAAA,EAAA,MAAA,EAAA,EAAA,IAAA,EAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,iBAAA,EAAA,WAAA,EAAA,UAAA,EAAA,WAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECnB1B,ouBAuBA,EAAA,MAAA,EAAA,CAAA,EAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EDNY,IAAI,+FAAE,MAAM,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,MAAA,EAAA,OAAA,EAAA,YAAA,EAAA,MAAA,EAAA,OAAA,EAAA,OAAA,EAAA,WAAA,EAAA,eAAA,CAAA,EAAA,OAAA,EAAA,CAAA,cAAA,CAAA,EAAA,CAAA,EAAA,CAAA;;2FAEX,aAAa,EAAA,UAAA,EAAA,CAAA;kBAPzB,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,mBAAmB,cACjB,IAAI,EAAA,OAAA,EAGP,CAAC,IAAI,EAAE,MAAM,CAAC,EAAA,QAAA,EAAA,ouBAAA,EAAA;;;AEjBzB;;AAEG;;;;"}
@@ -1,7 +1,7 @@
1
1
  import * as i0 from '@angular/core';
2
2
  import { inject, ChangeDetectorRef, Pipe, input, output, model, computed, Component, signal } from '@angular/core';
3
3
  import { Button } from '@masterteam/components/button';
4
- import { distinctUntilChanged, filter, switchMap, map, catchError, finalize, tap } from 'rxjs/operators';
4
+ import { map, tap, finalize, shareReplay, distinctUntilChanged, switchMap, filter, catchError } from 'rxjs/operators';
5
5
  import { DomSanitizer } from '@angular/platform-browser';
6
6
  import { Subscription, BehaviorSubject, of, finalize as finalize$1, catchError as catchError$1, throwError, take, forkJoin, map as map$1 } from 'rxjs';
7
7
  import { HttpClient, HttpContext } from '@angular/common/http';
@@ -15,6 +15,8 @@ import { FieldValidation } from '@masterteam/components/field-validation';
15
15
  import { Card } from '@masterteam/components/card';
16
16
 
17
17
  class SecureImagePipe {
18
+ static cachedBlobUrls = new Map();
19
+ static pendingRequests = new Map();
18
20
  httpClient = inject(HttpClient);
19
21
  domSanitizer = inject(DomSanitizer);
20
22
  cdr = inject(ChangeDetectorRef);
@@ -25,72 +27,144 @@ class SecureImagePipe {
25
27
  this.subscription.unsubscribe();
26
28
  }
27
29
  subscription = new Subscription();
28
- latestValue;
29
- transformValue = new BehaviorSubject('');
30
- loading = true;
31
- context;
32
- wrapUrl = true;
33
- useEndpoint = false;
34
- endPoint = '';
35
- sanitize = true;
30
+ latestValue = '';
31
+ transformValue = new BehaviorSubject(null);
32
+ loading = false;
36
33
  transform(imagePath, wrapUrlOrContext, contextOrEndpoint, endPoint = 'uploader/') {
37
34
  const hasExtraArgs = arguments.length > 1;
38
35
  const isWrapFlag = typeof wrapUrlOrContext === 'boolean';
39
- this.context = undefined;
40
- this.wrapUrl = true;
41
- this.useEndpoint = false;
42
- this.endPoint = '';
43
- this.sanitize = true;
36
+ let context;
37
+ let wrapUrl = true;
38
+ let useEndpoint = false;
39
+ let endpoint = '';
40
+ let sanitize = true;
44
41
  if (!hasExtraArgs || isWrapFlag) {
45
42
  // Backward compatible mode: (imagePath, wrapUrl?, context?, endPoint?)
46
- this.wrapUrl = isWrapFlag ? wrapUrlOrContext : false;
47
- this.useEndpoint = true;
48
- this.endPoint = endPoint;
43
+ wrapUrl = isWrapFlag ? wrapUrlOrContext : false;
44
+ useEndpoint = true;
45
+ endpoint = endPoint;
49
46
  if (contextOrEndpoint instanceof HttpContext) {
50
- this.context = contextOrEndpoint;
47
+ context = contextOrEndpoint;
51
48
  }
52
49
  else if (typeof contextOrEndpoint === 'string') {
53
- this.endPoint = contextOrEndpoint;
50
+ endpoint = contextOrEndpoint;
54
51
  }
55
- this.sanitize = false;
52
+ sanitize = false;
56
53
  }
57
54
  else {
58
55
  // Components mode: (imagePath, context)
59
- this.context = wrapUrlOrContext;
60
- this.wrapUrl = true;
61
- this.useEndpoint = false;
62
- this.endPoint = '';
63
- this.sanitize = true;
56
+ context = wrapUrlOrContext;
57
+ wrapUrl = true;
58
+ useEndpoint = false;
59
+ endpoint = '';
60
+ sanitize = true;
64
61
  }
65
- const fullPath = this.useEndpoint
62
+ const fullPath = useEndpoint
66
63
  ? imagePath
67
- ? this.endPoint + imagePath
64
+ ? endpoint + imagePath
68
65
  : ''
69
66
  : imagePath;
70
- this.transformValue.next(fullPath);
67
+ if (!fullPath || fullPath.includes('null')) {
68
+ this.latestValue = '';
69
+ this.loading = false;
70
+ this.transformValue.next(null);
71
+ return '';
72
+ }
73
+ this.transformValue.next({
74
+ fullPath,
75
+ cacheKey: SecureImagePipe.createCacheKey(fullPath, context),
76
+ context,
77
+ wrapUrl,
78
+ useEndpoint,
79
+ sanitize,
80
+ });
71
81
  if (this.loading || !this.latestValue) {
72
82
  return '';
73
83
  }
74
- if (!this.useEndpoint || this.wrapUrl) {
84
+ if (!useEndpoint || wrapUrl) {
75
85
  return this.latestValue;
76
86
  }
77
87
  return `url('${this.latestValue}')`;
78
88
  }
89
+ static createCacheKey(fullPath, context) {
90
+ if (!context) {
91
+ return `default:${fullPath}`;
92
+ }
93
+ const contextSnapshot = Array.from(context.keys())
94
+ .map((token) => SecureImagePipe.serializeContextValue(context.get(token)))
95
+ .sort()
96
+ .join('|');
97
+ return `${contextSnapshot}:${fullPath}`;
98
+ }
99
+ static serializeContextValue(value) {
100
+ if (value === null) {
101
+ return 'null';
102
+ }
103
+ if (value === undefined) {
104
+ return 'undefined';
105
+ }
106
+ if (typeof value !== 'object') {
107
+ return String(value);
108
+ }
109
+ if (Array.isArray(value)) {
110
+ return `[${value
111
+ .map((item) => SecureImagePipe.serializeContextValue(item))
112
+ .join(',')}]`;
113
+ }
114
+ const normalizedEntries = Object.entries(value)
115
+ .sort(([leftKey], [rightKey]) => leftKey.localeCompare(rightKey))
116
+ .map(([key, entryValue]) => `${key}:${SecureImagePipe.serializeContextValue(entryValue)}`);
117
+ return `{${normalizedEntries.join(',')}}`;
118
+ }
119
+ getOrLoadBlobUrl(request) {
120
+ const cachedBlobUrl = SecureImagePipe.cachedBlobUrls.get(request.cacheKey);
121
+ if (cachedBlobUrl) {
122
+ return of(cachedBlobUrl);
123
+ }
124
+ const pendingRequest = SecureImagePipe.pendingRequests.get(request.cacheKey);
125
+ if (pendingRequest) {
126
+ return pendingRequest;
127
+ }
128
+ const request$ = this.httpClient
129
+ .get(request.fullPath, {
130
+ observe: 'response',
131
+ responseType: 'blob',
132
+ context: request.context,
133
+ })
134
+ .pipe(map((response) => response.body ? URL.createObjectURL(response.body) : ''), tap((blobUrl) => {
135
+ if (blobUrl) {
136
+ SecureImagePipe.cachedBlobUrls.set(request.cacheKey, blobUrl);
137
+ }
138
+ }), finalize(() => {
139
+ SecureImagePipe.pendingRequests.delete(request.cacheKey);
140
+ }), shareReplay(1));
141
+ SecureImagePipe.pendingRequests.set(request.cacheKey, request$);
142
+ return request$;
143
+ }
79
144
  setUpSubscription() {
80
145
  const transformSubscription = this.transformValue
81
146
  .asObservable()
82
- .pipe(distinctUntilChanged(), filter((v) => !!v && !v.includes('null')), switchMap((imagePath) => {
147
+ .pipe(distinctUntilChanged((previous, current) => {
148
+ if (previous === current) {
149
+ return true;
150
+ }
151
+ if (!previous || !current) {
152
+ return previous === current;
153
+ }
154
+ return (previous.cacheKey === current.cacheKey &&
155
+ previous.wrapUrl === current.wrapUrl &&
156
+ previous.useEndpoint === current.useEndpoint &&
157
+ previous.sanitize === current.sanitize);
158
+ }), switchMap((request) => {
159
+ if (!request) {
160
+ this.loading = false;
161
+ return of('');
162
+ }
83
163
  this.latestValue = '';
84
164
  this.loading = true;
85
- return this.httpClient
86
- .get(imagePath, {
87
- observe: 'response',
88
- responseType: 'blob',
89
- context: this.context,
90
- })
91
- .pipe(map((response) => URL.createObjectURL(response.body)), map((unsafeBlobUrl) => this.sanitize
165
+ return this.getOrLoadBlobUrl(request).pipe(filter((blobUrl) => !!blobUrl), map((unsafeBlobUrl) => request.sanitize
92
166
  ? this.domSanitizer.bypassSecurityTrustUrl(unsafeBlobUrl)
93
- : unsafeBlobUrl), filter((blobUrl) => blobUrl !== this.latestValue), catchError(() => of('')), finalize(() => (this.loading = false)));
167
+ : unsafeBlobUrl), catchError(() => of('')), finalize(() => (this.loading = false)));
94
168
  }), tap((imagePath) => {
95
169
  this.latestValue = imagePath;
96
170
  this.cdr.markForCheck();
@@ -1 +1 @@
1
- {"version":3,"file":"masterteam-components-upload-field.mjs","sources":["../../../../packages/masterteam/components/upload-field/secure-image.pipe.ts","../../../../packages/masterteam/components/upload-field/upload-file-preview/upload-file-preview.ts","../../../../packages/masterteam/components/upload-field/upload-file-preview/upload-file-preview.html","../../../../packages/masterteam/components/upload-field/upload-user-preview/upload-user-preview.ts","../../../../packages/masterteam/components/upload-field/upload-user-preview/upload-user-preview.html","../../../../packages/masterteam/components/upload-field/upload-field.ts","../../../../packages/masterteam/components/upload-field/upload-field.html","../../../../packages/masterteam/components/upload-field/masterteam-components-upload-field.ts"],"sourcesContent":["import {\r\n filter,\r\n switchMap,\r\n map,\r\n catchError,\r\n tap,\r\n distinctUntilChanged,\r\n finalize,\r\n} from 'rxjs/operators';\r\nimport { DomSanitizer, SafeUrl } from '@angular/platform-browser';\r\nimport { Subscription, BehaviorSubject, of } from 'rxjs';\r\nimport {\r\n Pipe,\r\n PipeTransform,\r\n OnDestroy,\r\n ChangeDetectorRef,\r\n inject,\r\n} from '@angular/core';\r\nimport { HttpClient, HttpContext, HttpResponse } from '@angular/common/http';\r\n@Pipe({\r\n name: 'secureImage',\r\n pure: false,\r\n standalone: true,\r\n})\r\nexport class SecureImagePipe implements PipeTransform, OnDestroy {\r\n httpClient = inject(HttpClient);\r\n domSanitizer = inject(DomSanitizer);\r\n cdr = inject(ChangeDetectorRef);\r\n constructor() {\r\n this.setUpSubscription();\r\n }\r\n ngOnDestroy(): void {\r\n this.subscription.unsubscribe();\r\n }\r\n private subscription = new Subscription();\r\n private latestValue!: string | SafeUrl;\r\n private transformValue = new BehaviorSubject<string>('');\r\n private loading = true;\r\n private context: HttpContext | undefined;\r\n private wrapUrl = true;\r\n private useEndpoint = false;\r\n private endPoint = '';\r\n private sanitize = true;\r\n\r\n transform(\r\n imagePath: string,\r\n wrapUrlOrContext?: boolean | HttpContext,\r\n contextOrEndpoint?: HttpContext | string,\r\n endPoint: string = 'uploader/',\r\n ): string {\r\n const hasExtraArgs = arguments.length > 1;\r\n const isWrapFlag = typeof wrapUrlOrContext === 'boolean';\r\n\r\n this.context = undefined;\r\n this.wrapUrl = true;\r\n this.useEndpoint = false;\r\n this.endPoint = '';\r\n this.sanitize = true;\r\n\r\n if (!hasExtraArgs || isWrapFlag) {\r\n // Backward compatible mode: (imagePath, wrapUrl?, context?, endPoint?)\r\n this.wrapUrl = isWrapFlag ? wrapUrlOrContext : false;\r\n this.useEndpoint = true;\r\n this.endPoint = endPoint;\r\n if (contextOrEndpoint instanceof HttpContext) {\r\n this.context = contextOrEndpoint;\r\n } else if (typeof contextOrEndpoint === 'string') {\r\n this.endPoint = contextOrEndpoint;\r\n }\r\n this.sanitize = false;\r\n } else {\r\n // Components mode: (imagePath, context)\r\n this.context = wrapUrlOrContext as HttpContext | undefined;\r\n this.wrapUrl = true;\r\n this.useEndpoint = false;\r\n this.endPoint = '';\r\n this.sanitize = true;\r\n }\r\n\r\n const fullPath = this.useEndpoint\r\n ? imagePath\r\n ? this.endPoint + imagePath\r\n : ''\r\n : imagePath;\r\n this.transformValue.next(fullPath);\r\n\r\n if (this.loading || !this.latestValue) {\r\n return '';\r\n }\r\n\r\n if (!this.useEndpoint || this.wrapUrl) {\r\n return this.latestValue as string;\r\n }\r\n\r\n return `url('${this.latestValue}')`;\r\n }\r\n\r\n private setUpSubscription(): void {\r\n const transformSubscription = this.transformValue\r\n .asObservable()\r\n .pipe(\r\n distinctUntilChanged(),\r\n filter((v): v is string => !!v && !v.includes('null')),\r\n switchMap((imagePath: string) => {\r\n this.latestValue = '';\r\n this.loading = true;\r\n return this.httpClient\r\n .get(imagePath, {\r\n observe: 'response',\r\n responseType: 'blob',\r\n context: this.context,\r\n })\r\n .pipe(\r\n map((response: HttpResponse<any>) =>\r\n URL.createObjectURL(response.body),\r\n ),\r\n map((unsafeBlobUrl: string) =>\r\n this.sanitize\r\n ? this.domSanitizer.bypassSecurityTrustUrl(unsafeBlobUrl)\r\n : unsafeBlobUrl,\r\n ),\r\n filter((blobUrl) => blobUrl !== this.latestValue),\r\n catchError(() => of('')),\r\n finalize(() => (this.loading = false)),\r\n );\r\n }),\r\n tap((imagePath: string | SafeUrl) => {\r\n this.latestValue = imagePath;\r\n this.cdr.markForCheck();\r\n }),\r\n )\r\n .subscribe();\r\n this.subscription.add(transformSubscription);\r\n }\r\n}\r\n","import {\r\n Component,\r\n computed,\r\n input,\r\n model,\r\n OnInit,\r\n output,\r\n} from '@angular/core';\r\nimport { Button } from '@masterteam/components/button';\r\nimport { SecureImagePipe } from '../secure-image.pipe';\r\nimport { Avatar } from '@masterteam/components/avatar';\r\nimport { HttpContext } from '@angular/common/http';\r\nimport { TranslocoModule } from '@jsverse/transloco';\r\nimport { Tooltip } from '@masterteam/components/tooltip';\r\n\r\n@Component({\r\n selector: 'mt-upload-file-preview',\r\n standalone: true,\r\n imports: [SecureImagePipe, Button, Avatar, TranslocoModule, Tooltip],\r\n templateUrl: './upload-file-preview.html',\r\n styleUrl: './upload-file-preview.scss',\r\n})\r\nexport class UploadFilePreview implements OnInit {\r\n value = input<any | null>(null);\r\n imgPath = input<any | undefined>();\r\n readonly context = input<HttpContext | undefined>(undefined);\r\n loading = input<boolean>(false);\r\n uploadProgress = input<number>(0);\r\n onUploadInputClicked = output<any>();\r\n ondDownloadFile = output<any>();\r\n onDeleteFile = output<any>();\r\n readonly disabled = model<boolean>(false);\r\n readonly readonly = input<boolean>(false);\r\n readonly size = input<'normal' | 'large' | 'xlarge' | undefined>();\r\n isImag = computed(() => {\r\n return this.value()?.contentType?.startsWith('image/');\r\n });\r\n ngOnInit(): void {\r\n if (this.readonly()) {\r\n this.disabled.set(true);\r\n }\r\n }\r\n defaultIcon = computed(() => {\r\n switch (this.value()?.extension) {\r\n case '.pdf':\r\n return 'file.file-06';\r\n case '.docx':\r\n case '.doc':\r\n return 'file.file-06';\r\n case '.xlsx':\r\n case '.xls':\r\n return 'file.file-06';\r\n default:\r\n return 'image.image-03';\r\n }\r\n });\r\n}\r\n","<div class=\"flex items-center justify-between gap-2 w-full p-2 overflow-hidden\">\r\n <div class=\"flex gap-2 items-center flex-1 min-w-0 overflow-hidden\">\r\n <mt-avatar\r\n [size]=\"size()\"\r\n [shape]=\"'square'\"\r\n [image]=\"\r\n isImag() && imgPath() ? (imgPath() | secureImage: context()) : ''\r\n \"\r\n [icon]=\"defaultIcon()\"\r\n styleClass=\"text-2xl!\"\r\n >\r\n </mt-avatar>\r\n\r\n <span class=\"truncate\" [mtTooltip]=\"value().name\" tooltipPosition=\"top\">\r\n {{ value().name }}\r\n </span>\r\n </div>\r\n <div class=\"flex items-center justify-center shrink-0\">\r\n @if (!!value() && !loading() && (!disabled() || readonly())) {\r\n <mt-button\r\n variant=\"text\"\r\n icon=\"general.download-01\"\r\n [tooltip]=\"'components.upload.download' | transloco\"\r\n (onClick)=\"ondDownloadFile.emit(value())\"\r\n (click)=\"$event.stopPropagation()\"\r\n >\r\n </mt-button>\r\n }\r\n @if (!disabled() && !readonly() && !!value() && !loading()) {\r\n <mt-button\r\n variant=\"text\"\r\n icon=\"general.trash-01\"\r\n [tooltip]=\"'components.upload.delete' | transloco\"\r\n severity=\"danger\"\r\n (onClick)=\"onDeleteFile.emit(true)\"\r\n (click)=\"$event.stopPropagation()\"\r\n >\r\n </mt-button>\r\n }\r\n </div>\r\n</div>\r\n","import { SecureImagePipe } from '../secure-image.pipe';\r\nimport { Icon } from '@masterteam/icons';\r\nimport { Component, input, model, OnInit, output, signal } from '@angular/core';\r\nimport { Button } from '@masterteam/components/button';\r\nimport { Avatar } from '@masterteam/components/avatar';\r\nimport { HttpContext } from '@angular/common/http';\r\nimport { TranslocoModule } from '@jsverse/transloco';\r\n\r\n@Component({\r\n selector: 'mt-upload-user-preview',\r\n standalone: true,\r\n imports: [Icon, SecureImagePipe, Button, Icon, Avatar, TranslocoModule],\r\n templateUrl: './upload-user-preview.html',\r\n styleUrl: './upload-user-preview.css',\r\n})\r\nexport class UploadUserPreview implements OnInit {\r\n value = input<any | null>(null);\r\n imgPath = input<any | undefined>();\r\n readonly context = input<HttpContext | undefined>(undefined);\r\n loading = input<boolean>(false);\r\n uploadProgress = input<number>(0);\r\n isDragging = input<boolean>(false);\r\n defaultIcon = signal<string>('image.image-03');\r\n onUploadInputClicked = output<any>();\r\n ondDownloadFile = output<any>();\r\n onDeleteFile = output<any>();\r\n onDragOver = output<any>();\r\n onDragLeave = output<any>();\r\n onDrop = output<any>();\r\n readonly disabled = model<boolean>(false);\r\n readonly readonly = input<boolean>(false);\r\n readonly size = input<'normal' | 'large' | 'xlarge' | undefined>();\r\n readonly userImgClass = input<string>('');\r\n OnUploadInputClicked(): void {\r\n if (!this.imgPath() && !this.loading() && !this.disabled()) {\r\n this.onUploadInputClicked.emit(true);\r\n }\r\n }\r\n ngOnInit(): void {\r\n if (this.readonly()) {\r\n this.disabled.set(true);\r\n }\r\n }\r\n OnDragOver(event: DragEvent): void {\r\n this.onDragOver.emit(event);\r\n }\r\n OnDragLeave(event: DragEvent): void {\r\n this.onDragLeave.emit(event);\r\n }\r\n\r\n OnDrop(event: DragEvent): void {\r\n this.onDrop.emit(event);\r\n }\r\n}\r\n","<div\r\n class=\"rounded-full p-1 w-fit\"\r\n [style.background]=\"\r\n 'conic-gradient(var(--p-primary-300) ' +\r\n uploadProgress() +\r\n '%, transparent ' +\r\n uploadProgress() +\r\n '%)'\r\n \"\r\n>\r\n <div\r\n class=\"relative rounded-full w-fit border-2 border-dashed border-gray-300 bg-white\"\r\n [class.opacity-50]=\"isDragging()\"\r\n >\r\n <mt-avatar\r\n [size]=\"size()\"\r\n [image]=\"imgPath() ? (imgPath() | secureImage: context()) : ''\"\r\n [icon]=\"defaultIcon()\"\r\n [styleClass]=\"userImgClass()\"\r\n >\r\n </mt-avatar>\r\n\r\n @if (!loading()) {\r\n <div\r\n class=\"absolute inset-0 flex items-center justify-center rounded-full bg-surface-400/50 opacity-0 hover:opacity-100 transition-opacity\"\r\n [class]=\"!imgPath() && !disabled() ? 'cursor-pointer' : ''\"\r\n (click)=\"OnUploadInputClicked()\"\r\n (dragover)=\"OnDragOver($event)\"\r\n (dragleave)=\"OnDragLeave($event)\"\r\n (drop)=\"OnDrop($event)\"\r\n >\r\n @if (!disabled() && !!imgPath()) {\r\n <mt-button\r\n variant=\"text\"\r\n icon=\"general.download-01\"\r\n [tooltip]=\"'components.upload.download' | transloco\"\r\n (onClick)=\"ondDownloadFile.emit(value())\"\r\n >\r\n </mt-button>\r\n <mt-button\r\n variant=\"text\"\r\n icon=\"general.trash-01\"\r\n [tooltip]=\"'components.upload.delete' | transloco\"\r\n severity=\"danger\"\r\n (onClick)=\"onDeleteFile.emit(true)\"\r\n >\r\n </mt-button>\r\n }\r\n @if (!imgPath() && !disabled()) {\r\n <mt-icon\r\n icon=\"general.upload-01\"\r\n class=\"text-primary-400 text-xl\"\r\n ></mt-icon>\r\n }\r\n </div>\r\n } @else if (loading()) {\r\n <div\r\n class=\"absolute inset-0 flex items-center justify-center rounded-full bg-surface-400/50\"\r\n >\r\n @if (uploadProgress() === 100) {\r\n <mt-icon\r\n icon=\"general.check\"\r\n class=\"text-primary-400 text-2xl\"\r\n ></mt-icon>\r\n } @else {\r\n <small class=\"text-primary-300 font-bold text-lg\">{{\r\n uploadProgress() + \"%\"\r\n }}</small>\r\n }\r\n </div>\r\n }\r\n </div>\r\n</div>\r\n","import { UploadFilePreview } from './upload-file-preview/upload-file-preview';\r\nimport { UploadUserPreview } from './upload-user-preview/upload-user-preview';\r\nimport {\r\n Component,\r\n computed,\r\n inject,\r\n input,\r\n model,\r\n output,\r\n signal,\r\n} from '@angular/core';\r\nimport { ControlValueAccessor, NgControl, Validators } from '@angular/forms';\r\nimport { HttpClient, HttpContext } from '@angular/common/http';\r\nimport { Icon } from '@masterteam/icons';\r\nimport {\r\n catchError,\r\n finalize,\r\n forkJoin,\r\n map,\r\n of,\r\n take,\r\n throwError,\r\n} from 'rxjs';\r\nimport { FieldValidation } from '@masterteam/components/field-validation';\r\nimport { Card } from '@masterteam/components/card';\r\nimport { Button } from '@masterteam/components/button';\r\nimport { TranslocoModule } from '@jsverse/transloco';\r\n\r\ninterface FileMetadata {\r\n id: string;\r\n name: string;\r\n contentType: string;\r\n extension: string;\r\n fileName: string;\r\n size?: number;\r\n}\r\n\r\ninterface MetadataResponse {\r\n data: FileMetadata;\r\n}\r\n\r\n@Component({\r\n selector: 'mt-upload-field',\r\n standalone: true,\r\n imports: [\r\n Icon,\r\n UploadUserPreview,\r\n UploadFilePreview,\r\n FieldValidation,\r\n Card,\r\n Button,\r\n TranslocoModule,\r\n ],\r\n templateUrl: './upload-field.html',\r\n})\r\nexport class UploadField implements ControlValueAccessor {\r\n readonly label = input<string>();\r\n readonly title = input<string>('Upload File');\r\n readonly description = input<string>('Click or drop a file to upload');\r\n readonly endPoint = input<string>('uploader');\r\n readonly size = input<'normal' | 'large' | 'xlarge' | undefined>();\r\n readonly userImgClass = input<string | undefined>(\r\n 'w-25! h-25! text-4xl! text-gray-400!',\r\n );\r\n readonly shape = input<'circle' | 'field' | 'card'>('field');\r\n readonly multiple = input<boolean>(false);\r\n readonly accept = input<string | undefined>('.pdf,.doc,.docx,.xlsx,image/*');\r\n readonly isDragging = model<boolean>(false);\r\n readonly fileSizeLimit = input<number | undefined>();\r\n readonly = input<boolean>(false);\r\n readonly context = input<HttpContext | undefined>(undefined);\r\n\r\n readonly onChange = output<any>();\r\n readonly requiredValidator = Validators.required;\r\n readonly value = signal<any | any[] | null>(null);\r\n readonly files = computed<any[]>(() => {\r\n const value = this.value();\r\n if (Array.isArray(value)) {\r\n return value.filter((item) => item != null);\r\n }\r\n\r\n return value ? [value] : [];\r\n });\r\n readonly primaryFile = computed(() => this.files()[0] ?? null);\r\n readonly imgPath = computed(() => this.resolveImgPath(this.primaryFile()));\r\n readonly disabled = signal<boolean>(false);\r\n readonly uploadProgress = signal<number>(0);\r\n readonly loading = signal<boolean>(false);\r\n\r\n private readonly httpClient = inject(HttpClient);\r\n private readonly pendingUploads = signal(0);\r\n\r\n onTouched: () => void = () => {};\r\n onModelChange: (value: any) => void = () => {};\r\n readonly ngControl = inject(NgControl, { self: true });\r\n\r\n constructor() {\r\n if (this.ngControl) {\r\n this.ngControl.valueAccessor = this;\r\n }\r\n }\r\n\r\n writeValue(value: any): void {\r\n if (Array.isArray(value)) {\r\n const normalized = value.filter((item) => item != null);\r\n const fileIds = normalized.filter(\r\n (item): item is string =>\r\n typeof item === 'string' && item.trim().length > 0,\r\n );\r\n const files = normalized.filter(\r\n (item) => !!item && typeof item === 'object',\r\n );\r\n\r\n if (fileIds.length) {\r\n this.fetchMetadata(fileIds, files, true);\r\n return;\r\n }\r\n\r\n this.value.set(normalized);\r\n return;\r\n }\r\n\r\n if (typeof value === 'string' && value.trim().length > 0) {\r\n this.fetchMetadata([value], [], false);\r\n return;\r\n }\r\n\r\n this.value.set(value ?? null);\r\n }\r\n\r\n registerOnChange(fn: any): void {\r\n this.onModelChange = fn;\r\n }\r\n\r\n registerOnTouched(fn: any): void {\r\n this.onTouched = fn;\r\n }\r\n\r\n setDisabledState(disabled: boolean): void {\r\n this.disabled.set(disabled);\r\n }\r\n\r\n onAdd(item: any): void {\r\n if (this.disabled()) {\r\n return;\r\n }\r\n\r\n const nextValue = this.multiple() ? [...this.files(), item] : item;\r\n this.value.set(nextValue);\r\n this.onModelChange(nextValue);\r\n this.onChange.emit(nextValue);\r\n }\r\n\r\n onDelete(item?: any): void {\r\n if (this.disabled()) {\r\n return;\r\n }\r\n\r\n if (!this.multiple()) {\r\n this.value.set(null);\r\n this.onModelChange(null);\r\n this.onChange.emit(null);\r\n return;\r\n }\r\n\r\n const nextValue = this.files().filter((file) => !isSameFile(file, item));\r\n const resolvedValue = nextValue.length ? nextValue : null;\r\n\r\n this.value.set(resolvedValue);\r\n this.onModelChange(resolvedValue);\r\n this.onChange.emit(resolvedValue);\r\n }\r\n\r\n onFileSelect(event: Event): void {\r\n const input = event.target as HTMLInputElement | null;\r\n const selectedFiles = Array.from(input?.files ?? []);\r\n\r\n if (!selectedFiles.length) {\r\n return;\r\n }\r\n\r\n if (!this.multiple()) {\r\n this.value.set(null);\r\n }\r\n\r\n this.prepareFiles(selectedFiles);\r\n\r\n if (input) {\r\n input.value = '';\r\n }\r\n }\r\n\r\n prepareFiles(files: File[]): void {\r\n this.ngControl.control?.setErrors({ uploading: true });\r\n\r\n if (\r\n this.shape() === 'circle' &&\r\n files.some((file) => !file?.type.startsWith('image/'))\r\n ) {\r\n this.ngControl.control?.setErrors({ invalidFileType: true });\r\n return;\r\n }\r\n\r\n const filesToUpload = this.multiple() ? files : [files[0]];\r\n filesToUpload.forEach((file) => this.uploadFile(file));\r\n }\r\n\r\n uploadFile(file: File): void {\r\n this.pendingUploads.update((count) => count + 1);\r\n this.loading.set(true);\r\n this.uploadProgress.set(10);\r\n\r\n const formData = new FormData();\r\n formData.append('file', file);\r\n\r\n this.httpClient\r\n .post<any>(this.endPoint(), formData, {\r\n reportProgress: true,\r\n observe: 'events',\r\n context: this.context(),\r\n })\r\n .pipe(\r\n finalize(() => {\r\n const pending = Math.max(this.pendingUploads() - 1, 0);\r\n this.pendingUploads.set(pending);\r\n\r\n if (!pending) {\r\n setTimeout(() => {\r\n this.uploadProgress.set(0);\r\n this.loading.set(false);\r\n }, 700);\r\n }\r\n }),\r\n catchError(() => {\r\n this.uploadProgress.set(0);\r\n return throwError(() => new Error('Upload failed'));\r\n }),\r\n )\r\n .subscribe((event: any) => {\r\n if (!event?.body) {\r\n if (event.total) {\r\n this.uploadProgress.set(\r\n Math.round((100 * event.loaded) / event.total),\r\n );\r\n }\r\n return;\r\n }\r\n\r\n this.uploadProgress.set(100);\r\n this.handleUploadDone({ ...event.body?.data, size: file.size });\r\n });\r\n }\r\n\r\n handleUploadDone(file: any): void {\r\n if (!file) {\r\n return;\r\n }\r\n\r\n this.onAdd(file);\r\n\r\n if (this.fileSizeLimit() && file.size > this.fileSizeLimit()!) {\r\n this.ngControl.control?.setErrors({ fileSizeLimited: true });\r\n return;\r\n }\r\n\r\n if (this.pendingUploads() <= 1) {\r\n this.ngControl.control?.setErrors(null);\r\n }\r\n }\r\n\r\n downloadFile(value: any): void {\r\n const downloadUrl = this.resolveImgPath(value);\r\n const downloadFileName = value?.name;\r\n const mimeType = value?.contentType;\r\n\r\n if (!downloadUrl || !mimeType || !downloadFileName) {\r\n console.error('File metadata is incomplete. Cannot download.');\r\n return;\r\n }\r\n\r\n this.httpClient\r\n .get(downloadUrl, {\r\n responseType: 'blob',\r\n context: this.context(),\r\n })\r\n .pipe(take(1))\r\n .subscribe((res: Blob) => {\r\n const blob = new Blob([res], { type: mimeType });\r\n const data = window.URL.createObjectURL(blob);\r\n const link = document.createElement('a');\r\n\r\n link.href = data;\r\n link.download = downloadFileName;\r\n link.click();\r\n\r\n window.URL.revokeObjectURL(data);\r\n });\r\n }\r\n\r\n onDragOver(event: DragEvent): void {\r\n event.preventDefault();\r\n event.stopPropagation();\r\n if (!this.disabled()) {\r\n this.isDragging.set(true);\r\n }\r\n }\r\n\r\n onDragLeave(event: DragEvent): void {\r\n event.preventDefault();\r\n event.stopPropagation();\r\n this.isDragging.set(false);\r\n }\r\n\r\n onDrop(event: DragEvent): void {\r\n event.preventDefault();\r\n event.stopPropagation();\r\n this.isDragging.set(false);\r\n\r\n if (this.disabled()) {\r\n return;\r\n }\r\n\r\n const files = Array.from(event.dataTransfer?.files ?? []);\r\n if (!files.length) {\r\n return;\r\n }\r\n\r\n if (!this.multiple()) {\r\n this.value.set(null);\r\n }\r\n\r\n this.prepareFiles(files);\r\n }\r\n\r\n protected resolveImgPath(value: any): string | undefined {\r\n return value?.fileName ? `${this.endPoint()}/${value.fileName}` : undefined;\r\n }\r\n\r\n private fetchMetadata(\r\n fileIds: string[],\r\n existingFiles: any[] = [],\r\n forceArray = false,\r\n ): void {\r\n const normalizedIds = fileIds\r\n .map((fileId) => fileId.trim())\r\n .filter((fileId) => fileId.length > 0);\r\n\r\n if (!normalizedIds.length) {\r\n this.value.set(forceArray ? existingFiles : (existingFiles[0] ?? null));\r\n return;\r\n }\r\n\r\n this.loading.set(true);\r\n\r\n forkJoin(\r\n normalizedIds.map((fileId) =>\r\n this.httpClient\r\n .get<MetadataResponse>(`${this.endPoint()}/${fileId}/metaData`, {\r\n context: this.context(),\r\n })\r\n .pipe(\r\n take(1),\r\n map((response) => response.data),\r\n catchError((error) => {\r\n console.error('Failed to fetch file metadata:', error);\r\n return of({\r\n id: fileId,\r\n name: fileId,\r\n fileName: fileId,\r\n contentType: '',\r\n extension: '',\r\n } as FileMetadata);\r\n }),\r\n ),\r\n ),\r\n )\r\n .pipe(finalize(() => this.loading.set(false)))\r\n .subscribe((files) => {\r\n const resolvedFiles = [...existingFiles, ...files];\r\n const resolvedValue =\r\n forceArray || this.multiple() || resolvedFiles.length > 1\r\n ? resolvedFiles\r\n : (resolvedFiles[0] ?? null);\r\n\r\n this.value.set(resolvedValue);\r\n });\r\n }\r\n}\r\n\r\nfunction isSameFile(source: any, target: any): boolean {\r\n if (!source || !target) {\r\n return source === target;\r\n }\r\n\r\n return (\r\n source === target ||\r\n (source.id && target.id && source.id === target.id) ||\r\n (source.fileName && target.fileName && source.fileName === target.fileName)\r\n );\r\n}\r\n","<input\r\n #uploadInput\r\n type=\"file\"\r\n name=\"file[]\"\r\n (change)=\"onFileSelect($event)\"\r\n style=\"display: none\"\r\n [multiple]=\"multiple()\"\r\n [accept]=\"shape() === 'circle' ? 'image/*' : accept()\"\r\n/>\r\n\r\n@if (shape() === \"circle\") {\r\n <div class=\"flex flex-col items-center gap-2 w-full\">\r\n <div class=\"flex\">\r\n <div class=\"flex flex-col items-center\">\r\n <mt-upload-user-preview\r\n [value]=\"primaryFile()\"\r\n [imgPath]=\"imgPath()\"\r\n [disabled]=\"disabled()\"\r\n [readonly]=\"readonly()\"\r\n [loading]=\"loading()\"\r\n [size]=\"size()\"\r\n [context]=\"context()\"\r\n [userImgClass]=\"userImgClass()\"\r\n [isDragging]=\"isDragging()\"\r\n [uploadProgress]=\"uploadProgress()\"\r\n (onUploadInputClicked)=\"uploadInput.click()\"\r\n (ondDownloadFile)=\"downloadFile($event)\"\r\n (onDeleteFile)=\"onDelete(primaryFile())\"\r\n (onDragOver)=\"onDragOver($event)\"\r\n (onDragLeave)=\"onDragLeave($event)\"\r\n (onDrop)=\"onDrop($event)\"\r\n ></mt-upload-user-preview>\r\n @if (label()) {\r\n <label\r\n [class.required]=\"\r\n ngControl?.control?.hasValidator(requiredValidator)\r\n \"\r\n [for]=\"ngControl?.name || label()\"\r\n >{{ label() }}</label\r\n >\r\n }\r\n </div>\r\n </div>\r\n </div>\r\n} @else if (shape() === \"card\") {\r\n <mt-card\r\n headless\r\n class=\"border-2 border-dashed border-gray-300 rounded-lg cursor-pointer hover:bg-gray-50\"\r\n >\r\n <div class=\"content flex flex-col gap-5 items-center text-center\">\r\n @if (!files().length && !loading()) {\r\n <div class=\"flex flex-col gap-1\">\r\n @if (title()) {\r\n <div class=\"title text-lg font-semibold\">\r\n {{ title() }}\r\n </div>\r\n }\r\n @if (description()) {\r\n <div\r\n class=\"description text-sm text-muted-foreground secondary text-surface-500\"\r\n >\r\n {{ description() }}\r\n </div>\r\n }\r\n </div>\r\n }\r\n\r\n @if (files().length) {\r\n <div class=\"flex w-full flex-col gap-2\">\r\n @for (file of files(); track $index) {\r\n <mt-upload-file-preview\r\n style=\"width: 100%\"\r\n [value]=\"file\"\r\n [imgPath]=\"resolveImgPath(file)\"\r\n [disabled]=\"disabled()\"\r\n [readonly]=\"readonly()\"\r\n [loading]=\"loading()\"\r\n [context]=\"context()\"\r\n [uploadProgress]=\"uploadProgress()\"\r\n (onUploadInputClicked)=\"uploadInput.click()\"\r\n (ondDownloadFile)=\"downloadFile(file)\"\r\n (onDeleteFile)=\"onDelete(file)\"\r\n />\r\n }\r\n </div>\r\n } @else if (loading()) {\r\n <div class=\"w-full flex gap-3 items-center justify-center p-3\">\r\n <p class=\"text-lg text-gray-500\">\r\n {{\r\n (\"components.upload.uploading\" | transloco) +\r\n uploadProgress() +\r\n \"%\"\r\n }}\r\n </p>\r\n </div>\r\n } @else {\r\n <mt-button\r\n [size]=\"'small'\"\r\n [label]=\"'components.upload.upload' | transloco\"\r\n [icon]=\"'general.upload-01'\"\r\n (onClick)=\"\r\n !loading() && !disabled() && !readonly() ? uploadInput.click() : ''\r\n \"\r\n [disabled]=\"disabled() || loading() || readonly()\"\r\n />\r\n }\r\n </div>\r\n </mt-card>\r\n} @else {\r\n <div class=\"flex flex-col items-start gap-2 w-full\">\r\n @if (label()) {\r\n <label\r\n [class.required]=\"ngControl?.control?.hasValidator(requiredValidator)\"\r\n [for]=\"ngControl?.name || label()\"\r\n >{{ label() }}</label\r\n >\r\n }\r\n\r\n <div\r\n class=\"w-full flex gap-3 items-center justify-center border-2 border-dashed border-gray-300 rounded-lg cursor-pointer hover:bg-gray-50\"\r\n [class]=\"disabled() ? 'bg-gray-50' : ''\"\r\n (click)=\"\r\n !loading() && !disabled() && !readonly() ? uploadInput.click() : ''\r\n \"\r\n [class.border-blue-500]=\"isDragging()\"\r\n [class.bg-blue-50]=\"isDragging()\"\r\n (dragover)=\"onDragOver($event)\"\r\n (dragleave)=\"onDragLeave($event)\"\r\n (drop)=\"onDrop($event)\"\r\n >\r\n @if (files().length) {\r\n <div class=\"flex w-full flex-col gap-2 p-2\">\r\n @for (file of files(); track $index) {\r\n <mt-upload-file-preview\r\n style=\"width: 100%\"\r\n [value]=\"file\"\r\n [imgPath]=\"resolveImgPath(file)\"\r\n [disabled]=\"disabled()\"\r\n [readonly]=\"readonly()\"\r\n [loading]=\"loading()\"\r\n [context]=\"context()\"\r\n [uploadProgress]=\"uploadProgress()\"\r\n (onUploadInputClicked)=\"uploadInput.click()\"\r\n (ondDownloadFile)=\"downloadFile(file)\"\r\n (onDeleteFile)=\"onDelete(file)\"\r\n />\r\n }\r\n </div>\r\n } @else if (loading()) {\r\n <div class=\"w-full flex gap-3 items-center justify-center p-3\">\r\n <p class=\"text-lg text-gray-500\">\r\n {{\r\n (\"components.upload.uploading\" | transloco) +\r\n uploadProgress() +\r\n \"%\"\r\n }}\r\n </p>\r\n </div>\r\n } @else {\r\n <div class=\"w-full flex gap-3 items-center justify-center p-3\">\r\n <mt-icon icon=\"general.upload-01\" />\r\n <p class=\"text-lg text-gray-500\">\r\n {{ \"components.upload.clickOrDrop\" | transloco }}\r\n </p>\r\n </div>\r\n }\r\n </div>\r\n </div>\r\n}\r\n<mt-field-validation [control]=\"ngControl?.control\"></mt-field-validation>\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["finalize","catchError","map"],"mappings":"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"}
1
+ {"version":3,"file":"masterteam-components-upload-field.mjs","sources":["../../../../packages/masterteam/components/upload-field/secure-image.pipe.ts","../../../../packages/masterteam/components/upload-field/upload-file-preview/upload-file-preview.ts","../../../../packages/masterteam/components/upload-field/upload-file-preview/upload-file-preview.html","../../../../packages/masterteam/components/upload-field/upload-user-preview/upload-user-preview.ts","../../../../packages/masterteam/components/upload-field/upload-user-preview/upload-user-preview.html","../../../../packages/masterteam/components/upload-field/upload-field.ts","../../../../packages/masterteam/components/upload-field/upload-field.html","../../../../packages/masterteam/components/upload-field/masterteam-components-upload-field.ts"],"sourcesContent":["import {\r\n filter,\r\n switchMap,\r\n map,\r\n catchError,\r\n tap,\r\n distinctUntilChanged,\r\n finalize,\r\n shareReplay,\r\n} from 'rxjs/operators';\r\nimport { DomSanitizer, SafeUrl } from '@angular/platform-browser';\r\nimport { Subscription, BehaviorSubject, Observable, of } from 'rxjs';\r\nimport {\r\n Pipe,\r\n PipeTransform,\r\n OnDestroy,\r\n ChangeDetectorRef,\r\n inject,\r\n} from '@angular/core';\r\nimport { HttpClient, HttpContext, HttpResponse } from '@angular/common/http';\r\n\r\ntype SecureImageTransformRequest = {\r\n fullPath: string;\r\n cacheKey: string;\r\n context?: HttpContext;\r\n wrapUrl: boolean;\r\n useEndpoint: boolean;\r\n sanitize: boolean;\r\n};\r\n\r\n@Pipe({\r\n name: 'secureImage',\r\n pure: false,\r\n standalone: true,\r\n})\r\nexport class SecureImagePipe implements PipeTransform, OnDestroy {\r\n private static readonly cachedBlobUrls = new Map<string, string>();\r\n private static readonly pendingRequests = new Map<\r\n string,\r\n Observable<string>\r\n >();\r\n\r\n httpClient = inject(HttpClient);\r\n domSanitizer = inject(DomSanitizer);\r\n cdr = inject(ChangeDetectorRef);\r\n constructor() {\r\n this.setUpSubscription();\r\n }\r\n ngOnDestroy(): void {\r\n this.subscription.unsubscribe();\r\n }\r\n private subscription = new Subscription();\r\n private latestValue: string | SafeUrl = '';\r\n private transformValue =\r\n new BehaviorSubject<SecureImageTransformRequest | null>(null);\r\n private loading = false;\r\n\r\n transform(\r\n imagePath: string,\r\n wrapUrlOrContext?: boolean | HttpContext,\r\n contextOrEndpoint?: HttpContext | string,\r\n endPoint: string = 'uploader/',\r\n ): string | SafeUrl {\r\n const hasExtraArgs = arguments.length > 1;\r\n const isWrapFlag = typeof wrapUrlOrContext === 'boolean';\r\n\r\n let context: HttpContext | undefined;\r\n let wrapUrl = true;\r\n let useEndpoint = false;\r\n let endpoint = '';\r\n let sanitize = true;\r\n\r\n if (!hasExtraArgs || isWrapFlag) {\r\n // Backward compatible mode: (imagePath, wrapUrl?, context?, endPoint?)\r\n wrapUrl = isWrapFlag ? wrapUrlOrContext : false;\r\n useEndpoint = true;\r\n endpoint = endPoint;\r\n if (contextOrEndpoint instanceof HttpContext) {\r\n context = contextOrEndpoint;\r\n } else if (typeof contextOrEndpoint === 'string') {\r\n endpoint = contextOrEndpoint;\r\n }\r\n sanitize = false;\r\n } else {\r\n // Components mode: (imagePath, context)\r\n context = wrapUrlOrContext as HttpContext | undefined;\r\n wrapUrl = true;\r\n useEndpoint = false;\r\n endpoint = '';\r\n sanitize = true;\r\n }\r\n\r\n const fullPath = useEndpoint\r\n ? imagePath\r\n ? endpoint + imagePath\r\n : ''\r\n : imagePath;\r\n if (!fullPath || fullPath.includes('null')) {\r\n this.latestValue = '';\r\n this.loading = false;\r\n this.transformValue.next(null);\r\n return '';\r\n }\r\n\r\n this.transformValue.next({\r\n fullPath,\r\n cacheKey: SecureImagePipe.createCacheKey(fullPath, context),\r\n context,\r\n wrapUrl,\r\n useEndpoint,\r\n sanitize,\r\n });\r\n\r\n if (this.loading || !this.latestValue) {\r\n return '';\r\n }\r\n\r\n if (!useEndpoint || wrapUrl) {\r\n return this.latestValue;\r\n }\r\n\r\n return `url('${this.latestValue}')`;\r\n }\r\n\r\n private static createCacheKey(\r\n fullPath: string,\r\n context?: HttpContext,\r\n ): string {\r\n if (!context) {\r\n return `default:${fullPath}`;\r\n }\r\n\r\n const contextSnapshot = Array.from(context.keys())\r\n .map((token) => SecureImagePipe.serializeContextValue(context.get(token)))\r\n .sort()\r\n .join('|');\r\n\r\n return `${contextSnapshot}:${fullPath}`;\r\n }\r\n\r\n private static serializeContextValue(value: unknown): string {\r\n if (value === null) {\r\n return 'null';\r\n }\r\n\r\n if (value === undefined) {\r\n return 'undefined';\r\n }\r\n\r\n if (typeof value !== 'object') {\r\n return String(value);\r\n }\r\n\r\n if (Array.isArray(value)) {\r\n return `[${value\r\n .map((item) => SecureImagePipe.serializeContextValue(item))\r\n .join(',')}]`;\r\n }\r\n\r\n const normalizedEntries = Object.entries(value as Record<string, unknown>)\r\n .sort(([leftKey], [rightKey]) => leftKey.localeCompare(rightKey))\r\n .map(\r\n ([key, entryValue]) =>\r\n `${key}:${SecureImagePipe.serializeContextValue(entryValue)}`,\r\n );\r\n\r\n return `{${normalizedEntries.join(',')}}`;\r\n }\r\n\r\n private getOrLoadBlobUrl(\r\n request: SecureImageTransformRequest,\r\n ): Observable<string> {\r\n const cachedBlobUrl = SecureImagePipe.cachedBlobUrls.get(request.cacheKey);\r\n if (cachedBlobUrl) {\r\n return of(cachedBlobUrl);\r\n }\r\n\r\n const pendingRequest = SecureImagePipe.pendingRequests.get(\r\n request.cacheKey,\r\n );\r\n if (pendingRequest) {\r\n return pendingRequest;\r\n }\r\n\r\n const request$ = this.httpClient\r\n .get(request.fullPath, {\r\n observe: 'response',\r\n responseType: 'blob',\r\n context: request.context,\r\n })\r\n .pipe(\r\n map((response: HttpResponse<Blob>) =>\r\n response.body ? URL.createObjectURL(response.body) : '',\r\n ),\r\n tap((blobUrl: string) => {\r\n if (blobUrl) {\r\n SecureImagePipe.cachedBlobUrls.set(request.cacheKey, blobUrl);\r\n }\r\n }),\r\n finalize(() => {\r\n SecureImagePipe.pendingRequests.delete(request.cacheKey);\r\n }),\r\n shareReplay(1),\r\n );\r\n\r\n SecureImagePipe.pendingRequests.set(request.cacheKey, request$);\r\n\r\n return request$;\r\n }\r\n\r\n private setUpSubscription(): void {\r\n const transformSubscription = this.transformValue\r\n .asObservable()\r\n .pipe(\r\n distinctUntilChanged((previous, current) => {\r\n if (previous === current) {\r\n return true;\r\n }\r\n\r\n if (!previous || !current) {\r\n return previous === current;\r\n }\r\n\r\n return (\r\n previous.cacheKey === current.cacheKey &&\r\n previous.wrapUrl === current.wrapUrl &&\r\n previous.useEndpoint === current.useEndpoint &&\r\n previous.sanitize === current.sanitize\r\n );\r\n }),\r\n switchMap((request: SecureImageTransformRequest | null) => {\r\n if (!request) {\r\n this.loading = false;\r\n return of('');\r\n }\r\n\r\n this.latestValue = '';\r\n this.loading = true;\r\n return this.getOrLoadBlobUrl(request).pipe(\r\n filter((blobUrl) => !!blobUrl),\r\n map((unsafeBlobUrl: string) =>\r\n request.sanitize\r\n ? this.domSanitizer.bypassSecurityTrustUrl(unsafeBlobUrl)\r\n : unsafeBlobUrl,\r\n ),\r\n catchError(() => of('')),\r\n finalize(() => (this.loading = false)),\r\n );\r\n }),\r\n tap((imagePath: string | SafeUrl) => {\r\n this.latestValue = imagePath;\r\n this.cdr.markForCheck();\r\n }),\r\n )\r\n .subscribe();\r\n this.subscription.add(transformSubscription);\r\n }\r\n}\r\n","import {\r\n Component,\r\n computed,\r\n input,\r\n model,\r\n OnInit,\r\n output,\r\n} from '@angular/core';\r\nimport { Button } from '@masterteam/components/button';\r\nimport { SecureImagePipe } from '../secure-image.pipe';\r\nimport { Avatar } from '@masterteam/components/avatar';\r\nimport { HttpContext } from '@angular/common/http';\r\nimport { TranslocoModule } from '@jsverse/transloco';\r\nimport { Tooltip } from '@masterteam/components/tooltip';\r\n\r\n@Component({\r\n selector: 'mt-upload-file-preview',\r\n standalone: true,\r\n imports: [SecureImagePipe, Button, Avatar, TranslocoModule, Tooltip],\r\n templateUrl: './upload-file-preview.html',\r\n styleUrl: './upload-file-preview.scss',\r\n})\r\nexport class UploadFilePreview implements OnInit {\r\n value = input<any | null>(null);\r\n imgPath = input<any | undefined>();\r\n readonly context = input<HttpContext | undefined>(undefined);\r\n loading = input<boolean>(false);\r\n uploadProgress = input<number>(0);\r\n onUploadInputClicked = output<any>();\r\n ondDownloadFile = output<any>();\r\n onDeleteFile = output<any>();\r\n readonly disabled = model<boolean>(false);\r\n readonly readonly = input<boolean>(false);\r\n readonly size = input<'normal' | 'large' | 'xlarge' | undefined>();\r\n isImag = computed(() => {\r\n return this.value()?.contentType?.startsWith('image/');\r\n });\r\n ngOnInit(): void {\r\n if (this.readonly()) {\r\n this.disabled.set(true);\r\n }\r\n }\r\n defaultIcon = computed(() => {\r\n switch (this.value()?.extension) {\r\n case '.pdf':\r\n return 'file.file-06';\r\n case '.docx':\r\n case '.doc':\r\n return 'file.file-06';\r\n case '.xlsx':\r\n case '.xls':\r\n return 'file.file-06';\r\n default:\r\n return 'image.image-03';\r\n }\r\n });\r\n}\r\n","<div class=\"flex items-center justify-between gap-2 w-full p-2 overflow-hidden\">\r\n <div class=\"flex gap-2 items-center flex-1 min-w-0 overflow-hidden\">\r\n <mt-avatar\r\n [size]=\"size()\"\r\n [shape]=\"'square'\"\r\n [image]=\"\r\n isImag() && imgPath() ? (imgPath() | secureImage: context()) : ''\r\n \"\r\n [icon]=\"defaultIcon()\"\r\n styleClass=\"text-2xl!\"\r\n >\r\n </mt-avatar>\r\n\r\n <span class=\"truncate\" [mtTooltip]=\"value().name\" tooltipPosition=\"top\">\r\n {{ value().name }}\r\n </span>\r\n </div>\r\n <div class=\"flex items-center justify-center shrink-0\">\r\n @if (!!value() && !loading() && (!disabled() || readonly())) {\r\n <mt-button\r\n variant=\"text\"\r\n icon=\"general.download-01\"\r\n [tooltip]=\"'components.upload.download' | transloco\"\r\n (onClick)=\"ondDownloadFile.emit(value())\"\r\n (click)=\"$event.stopPropagation()\"\r\n >\r\n </mt-button>\r\n }\r\n @if (!disabled() && !readonly() && !!value() && !loading()) {\r\n <mt-button\r\n variant=\"text\"\r\n icon=\"general.trash-01\"\r\n [tooltip]=\"'components.upload.delete' | transloco\"\r\n severity=\"danger\"\r\n (onClick)=\"onDeleteFile.emit(true)\"\r\n (click)=\"$event.stopPropagation()\"\r\n >\r\n </mt-button>\r\n }\r\n </div>\r\n</div>\r\n","import { SecureImagePipe } from '../secure-image.pipe';\r\nimport { Icon } from '@masterteam/icons';\r\nimport { Component, input, model, OnInit, output, signal } from '@angular/core';\r\nimport { Button } from '@masterteam/components/button';\r\nimport { Avatar } from '@masterteam/components/avatar';\r\nimport { HttpContext } from '@angular/common/http';\r\nimport { TranslocoModule } from '@jsverse/transloco';\r\n\r\n@Component({\r\n selector: 'mt-upload-user-preview',\r\n standalone: true,\r\n imports: [Icon, SecureImagePipe, Button, Icon, Avatar, TranslocoModule],\r\n templateUrl: './upload-user-preview.html',\r\n styleUrl: './upload-user-preview.css',\r\n})\r\nexport class UploadUserPreview implements OnInit {\r\n value = input<any | null>(null);\r\n imgPath = input<any | undefined>();\r\n readonly context = input<HttpContext | undefined>(undefined);\r\n loading = input<boolean>(false);\r\n uploadProgress = input<number>(0);\r\n isDragging = input<boolean>(false);\r\n defaultIcon = signal<string>('image.image-03');\r\n onUploadInputClicked = output<any>();\r\n ondDownloadFile = output<any>();\r\n onDeleteFile = output<any>();\r\n onDragOver = output<any>();\r\n onDragLeave = output<any>();\r\n onDrop = output<any>();\r\n readonly disabled = model<boolean>(false);\r\n readonly readonly = input<boolean>(false);\r\n readonly size = input<'normal' | 'large' | 'xlarge' | undefined>();\r\n readonly userImgClass = input<string>('');\r\n OnUploadInputClicked(): void {\r\n if (!this.imgPath() && !this.loading() && !this.disabled()) {\r\n this.onUploadInputClicked.emit(true);\r\n }\r\n }\r\n ngOnInit(): void {\r\n if (this.readonly()) {\r\n this.disabled.set(true);\r\n }\r\n }\r\n OnDragOver(event: DragEvent): void {\r\n this.onDragOver.emit(event);\r\n }\r\n OnDragLeave(event: DragEvent): void {\r\n this.onDragLeave.emit(event);\r\n }\r\n\r\n OnDrop(event: DragEvent): void {\r\n this.onDrop.emit(event);\r\n }\r\n}\r\n","<div\r\n class=\"rounded-full p-1 w-fit\"\r\n [style.background]=\"\r\n 'conic-gradient(var(--p-primary-300) ' +\r\n uploadProgress() +\r\n '%, transparent ' +\r\n uploadProgress() +\r\n '%)'\r\n \"\r\n>\r\n <div\r\n class=\"relative rounded-full w-fit border-2 border-dashed border-gray-300 bg-white\"\r\n [class.opacity-50]=\"isDragging()\"\r\n >\r\n <mt-avatar\r\n [size]=\"size()\"\r\n [image]=\"imgPath() ? (imgPath() | secureImage: context()) : ''\"\r\n [icon]=\"defaultIcon()\"\r\n [styleClass]=\"userImgClass()\"\r\n >\r\n </mt-avatar>\r\n\r\n @if (!loading()) {\r\n <div\r\n class=\"absolute inset-0 flex items-center justify-center rounded-full bg-surface-400/50 opacity-0 hover:opacity-100 transition-opacity\"\r\n [class]=\"!imgPath() && !disabled() ? 'cursor-pointer' : ''\"\r\n (click)=\"OnUploadInputClicked()\"\r\n (dragover)=\"OnDragOver($event)\"\r\n (dragleave)=\"OnDragLeave($event)\"\r\n (drop)=\"OnDrop($event)\"\r\n >\r\n @if (!disabled() && !!imgPath()) {\r\n <mt-button\r\n variant=\"text\"\r\n icon=\"general.download-01\"\r\n [tooltip]=\"'components.upload.download' | transloco\"\r\n (onClick)=\"ondDownloadFile.emit(value())\"\r\n >\r\n </mt-button>\r\n <mt-button\r\n variant=\"text\"\r\n icon=\"general.trash-01\"\r\n [tooltip]=\"'components.upload.delete' | transloco\"\r\n severity=\"danger\"\r\n (onClick)=\"onDeleteFile.emit(true)\"\r\n >\r\n </mt-button>\r\n }\r\n @if (!imgPath() && !disabled()) {\r\n <mt-icon\r\n icon=\"general.upload-01\"\r\n class=\"text-primary-400 text-xl\"\r\n ></mt-icon>\r\n }\r\n </div>\r\n } @else if (loading()) {\r\n <div\r\n class=\"absolute inset-0 flex items-center justify-center rounded-full bg-surface-400/50\"\r\n >\r\n @if (uploadProgress() === 100) {\r\n <mt-icon\r\n icon=\"general.check\"\r\n class=\"text-primary-400 text-2xl\"\r\n ></mt-icon>\r\n } @else {\r\n <small class=\"text-primary-300 font-bold text-lg\">{{\r\n uploadProgress() + \"%\"\r\n }}</small>\r\n }\r\n </div>\r\n }\r\n </div>\r\n</div>\r\n","import { UploadFilePreview } from './upload-file-preview/upload-file-preview';\r\nimport { UploadUserPreview } from './upload-user-preview/upload-user-preview';\r\nimport {\r\n Component,\r\n computed,\r\n inject,\r\n input,\r\n model,\r\n output,\r\n signal,\r\n} from '@angular/core';\r\nimport { ControlValueAccessor, NgControl, Validators } from '@angular/forms';\r\nimport { HttpClient, HttpContext } from '@angular/common/http';\r\nimport { Icon } from '@masterteam/icons';\r\nimport {\r\n catchError,\r\n finalize,\r\n forkJoin,\r\n map,\r\n of,\r\n take,\r\n throwError,\r\n} from 'rxjs';\r\nimport { FieldValidation } from '@masterteam/components/field-validation';\r\nimport { Card } from '@masterteam/components/card';\r\nimport { Button } from '@masterteam/components/button';\r\nimport { TranslocoModule } from '@jsverse/transloco';\r\n\r\ninterface FileMetadata {\r\n id: string;\r\n name: string;\r\n contentType: string;\r\n extension: string;\r\n fileName: string;\r\n size?: number;\r\n}\r\n\r\ninterface MetadataResponse {\r\n data: FileMetadata;\r\n}\r\n\r\n@Component({\r\n selector: 'mt-upload-field',\r\n standalone: true,\r\n imports: [\r\n Icon,\r\n UploadUserPreview,\r\n UploadFilePreview,\r\n FieldValidation,\r\n Card,\r\n Button,\r\n TranslocoModule,\r\n ],\r\n templateUrl: './upload-field.html',\r\n})\r\nexport class UploadField implements ControlValueAccessor {\r\n readonly label = input<string>();\r\n readonly title = input<string>('Upload File');\r\n readonly description = input<string>('Click or drop a file to upload');\r\n readonly endPoint = input<string>('uploader');\r\n readonly size = input<'normal' | 'large' | 'xlarge' | undefined>();\r\n readonly userImgClass = input<string | undefined>(\r\n 'w-25! h-25! text-4xl! text-gray-400!',\r\n );\r\n readonly shape = input<'circle' | 'field' | 'card'>('field');\r\n readonly multiple = input<boolean>(false);\r\n readonly accept = input<string | undefined>('.pdf,.doc,.docx,.xlsx,image/*');\r\n readonly isDragging = model<boolean>(false);\r\n readonly fileSizeLimit = input<number | undefined>();\r\n readonly = input<boolean>(false);\r\n readonly context = input<HttpContext | undefined>(undefined);\r\n\r\n readonly onChange = output<any>();\r\n readonly requiredValidator = Validators.required;\r\n readonly value = signal<any | any[] | null>(null);\r\n readonly files = computed<any[]>(() => {\r\n const value = this.value();\r\n if (Array.isArray(value)) {\r\n return value.filter((item) => item != null);\r\n }\r\n\r\n return value ? [value] : [];\r\n });\r\n readonly primaryFile = computed(() => this.files()[0] ?? null);\r\n readonly imgPath = computed(() => this.resolveImgPath(this.primaryFile()));\r\n readonly disabled = signal<boolean>(false);\r\n readonly uploadProgress = signal<number>(0);\r\n readonly loading = signal<boolean>(false);\r\n\r\n private readonly httpClient = inject(HttpClient);\r\n private readonly pendingUploads = signal(0);\r\n\r\n onTouched: () => void = () => {};\r\n onModelChange: (value: any) => void = () => {};\r\n readonly ngControl = inject(NgControl, { self: true });\r\n\r\n constructor() {\r\n if (this.ngControl) {\r\n this.ngControl.valueAccessor = this;\r\n }\r\n }\r\n\r\n writeValue(value: any): void {\r\n if (Array.isArray(value)) {\r\n const normalized = value.filter((item) => item != null);\r\n const fileIds = normalized.filter(\r\n (item): item is string =>\r\n typeof item === 'string' && item.trim().length > 0,\r\n );\r\n const files = normalized.filter(\r\n (item) => !!item && typeof item === 'object',\r\n );\r\n\r\n if (fileIds.length) {\r\n this.fetchMetadata(fileIds, files, true);\r\n return;\r\n }\r\n\r\n this.value.set(normalized);\r\n return;\r\n }\r\n\r\n if (typeof value === 'string' && value.trim().length > 0) {\r\n this.fetchMetadata([value], [], false);\r\n return;\r\n }\r\n\r\n this.value.set(value ?? null);\r\n }\r\n\r\n registerOnChange(fn: any): void {\r\n this.onModelChange = fn;\r\n }\r\n\r\n registerOnTouched(fn: any): void {\r\n this.onTouched = fn;\r\n }\r\n\r\n setDisabledState(disabled: boolean): void {\r\n this.disabled.set(disabled);\r\n }\r\n\r\n onAdd(item: any): void {\r\n if (this.disabled()) {\r\n return;\r\n }\r\n\r\n const nextValue = this.multiple() ? [...this.files(), item] : item;\r\n this.value.set(nextValue);\r\n this.onModelChange(nextValue);\r\n this.onChange.emit(nextValue);\r\n }\r\n\r\n onDelete(item?: any): void {\r\n if (this.disabled()) {\r\n return;\r\n }\r\n\r\n if (!this.multiple()) {\r\n this.value.set(null);\r\n this.onModelChange(null);\r\n this.onChange.emit(null);\r\n return;\r\n }\r\n\r\n const nextValue = this.files().filter((file) => !isSameFile(file, item));\r\n const resolvedValue = nextValue.length ? nextValue : null;\r\n\r\n this.value.set(resolvedValue);\r\n this.onModelChange(resolvedValue);\r\n this.onChange.emit(resolvedValue);\r\n }\r\n\r\n onFileSelect(event: Event): void {\r\n const input = event.target as HTMLInputElement | null;\r\n const selectedFiles = Array.from(input?.files ?? []);\r\n\r\n if (!selectedFiles.length) {\r\n return;\r\n }\r\n\r\n if (!this.multiple()) {\r\n this.value.set(null);\r\n }\r\n\r\n this.prepareFiles(selectedFiles);\r\n\r\n if (input) {\r\n input.value = '';\r\n }\r\n }\r\n\r\n prepareFiles(files: File[]): void {\r\n this.ngControl.control?.setErrors({ uploading: true });\r\n\r\n if (\r\n this.shape() === 'circle' &&\r\n files.some((file) => !file?.type.startsWith('image/'))\r\n ) {\r\n this.ngControl.control?.setErrors({ invalidFileType: true });\r\n return;\r\n }\r\n\r\n const filesToUpload = this.multiple() ? files : [files[0]];\r\n filesToUpload.forEach((file) => this.uploadFile(file));\r\n }\r\n\r\n uploadFile(file: File): void {\r\n this.pendingUploads.update((count) => count + 1);\r\n this.loading.set(true);\r\n this.uploadProgress.set(10);\r\n\r\n const formData = new FormData();\r\n formData.append('file', file);\r\n\r\n this.httpClient\r\n .post<any>(this.endPoint(), formData, {\r\n reportProgress: true,\r\n observe: 'events',\r\n context: this.context(),\r\n })\r\n .pipe(\r\n finalize(() => {\r\n const pending = Math.max(this.pendingUploads() - 1, 0);\r\n this.pendingUploads.set(pending);\r\n\r\n if (!pending) {\r\n setTimeout(() => {\r\n this.uploadProgress.set(0);\r\n this.loading.set(false);\r\n }, 700);\r\n }\r\n }),\r\n catchError(() => {\r\n this.uploadProgress.set(0);\r\n return throwError(() => new Error('Upload failed'));\r\n }),\r\n )\r\n .subscribe((event: any) => {\r\n if (!event?.body) {\r\n if (event.total) {\r\n this.uploadProgress.set(\r\n Math.round((100 * event.loaded) / event.total),\r\n );\r\n }\r\n return;\r\n }\r\n\r\n this.uploadProgress.set(100);\r\n this.handleUploadDone({ ...event.body?.data, size: file.size });\r\n });\r\n }\r\n\r\n handleUploadDone(file: any): void {\r\n if (!file) {\r\n return;\r\n }\r\n\r\n this.onAdd(file);\r\n\r\n if (this.fileSizeLimit() && file.size > this.fileSizeLimit()!) {\r\n this.ngControl.control?.setErrors({ fileSizeLimited: true });\r\n return;\r\n }\r\n\r\n if (this.pendingUploads() <= 1) {\r\n this.ngControl.control?.setErrors(null);\r\n }\r\n }\r\n\r\n downloadFile(value: any): void {\r\n const downloadUrl = this.resolveImgPath(value);\r\n const downloadFileName = value?.name;\r\n const mimeType = value?.contentType;\r\n\r\n if (!downloadUrl || !mimeType || !downloadFileName) {\r\n console.error('File metadata is incomplete. Cannot download.');\r\n return;\r\n }\r\n\r\n this.httpClient\r\n .get(downloadUrl, {\r\n responseType: 'blob',\r\n context: this.context(),\r\n })\r\n .pipe(take(1))\r\n .subscribe((res: Blob) => {\r\n const blob = new Blob([res], { type: mimeType });\r\n const data = window.URL.createObjectURL(blob);\r\n const link = document.createElement('a');\r\n\r\n link.href = data;\r\n link.download = downloadFileName;\r\n link.click();\r\n\r\n window.URL.revokeObjectURL(data);\r\n });\r\n }\r\n\r\n onDragOver(event: DragEvent): void {\r\n event.preventDefault();\r\n event.stopPropagation();\r\n if (!this.disabled()) {\r\n this.isDragging.set(true);\r\n }\r\n }\r\n\r\n onDragLeave(event: DragEvent): void {\r\n event.preventDefault();\r\n event.stopPropagation();\r\n this.isDragging.set(false);\r\n }\r\n\r\n onDrop(event: DragEvent): void {\r\n event.preventDefault();\r\n event.stopPropagation();\r\n this.isDragging.set(false);\r\n\r\n if (this.disabled()) {\r\n return;\r\n }\r\n\r\n const files = Array.from(event.dataTransfer?.files ?? []);\r\n if (!files.length) {\r\n return;\r\n }\r\n\r\n if (!this.multiple()) {\r\n this.value.set(null);\r\n }\r\n\r\n this.prepareFiles(files);\r\n }\r\n\r\n protected resolveImgPath(value: any): string | undefined {\r\n return value?.fileName ? `${this.endPoint()}/${value.fileName}` : undefined;\r\n }\r\n\r\n private fetchMetadata(\r\n fileIds: string[],\r\n existingFiles: any[] = [],\r\n forceArray = false,\r\n ): void {\r\n const normalizedIds = fileIds\r\n .map((fileId) => fileId.trim())\r\n .filter((fileId) => fileId.length > 0);\r\n\r\n if (!normalizedIds.length) {\r\n this.value.set(forceArray ? existingFiles : (existingFiles[0] ?? null));\r\n return;\r\n }\r\n\r\n this.loading.set(true);\r\n\r\n forkJoin(\r\n normalizedIds.map((fileId) =>\r\n this.httpClient\r\n .get<MetadataResponse>(`${this.endPoint()}/${fileId}/metaData`, {\r\n context: this.context(),\r\n })\r\n .pipe(\r\n take(1),\r\n map((response) => response.data),\r\n catchError((error) => {\r\n console.error('Failed to fetch file metadata:', error);\r\n return of({\r\n id: fileId,\r\n name: fileId,\r\n fileName: fileId,\r\n contentType: '',\r\n extension: '',\r\n } as FileMetadata);\r\n }),\r\n ),\r\n ),\r\n )\r\n .pipe(finalize(() => this.loading.set(false)))\r\n .subscribe((files) => {\r\n const resolvedFiles = [...existingFiles, ...files];\r\n const resolvedValue =\r\n forceArray || this.multiple() || resolvedFiles.length > 1\r\n ? resolvedFiles\r\n : (resolvedFiles[0] ?? null);\r\n\r\n this.value.set(resolvedValue);\r\n });\r\n }\r\n}\r\n\r\nfunction isSameFile(source: any, target: any): boolean {\r\n if (!source || !target) {\r\n return source === target;\r\n }\r\n\r\n return (\r\n source === target ||\r\n (source.id && target.id && source.id === target.id) ||\r\n (source.fileName && target.fileName && source.fileName === target.fileName)\r\n );\r\n}\r\n","<input\r\n #uploadInput\r\n type=\"file\"\r\n name=\"file[]\"\r\n (change)=\"onFileSelect($event)\"\r\n style=\"display: none\"\r\n [multiple]=\"multiple()\"\r\n [accept]=\"shape() === 'circle' ? 'image/*' : accept()\"\r\n/>\r\n\r\n@if (shape() === \"circle\") {\r\n <div class=\"flex flex-col items-center gap-2 w-full\">\r\n <div class=\"flex\">\r\n <div class=\"flex flex-col items-center\">\r\n <mt-upload-user-preview\r\n [value]=\"primaryFile()\"\r\n [imgPath]=\"imgPath()\"\r\n [disabled]=\"disabled()\"\r\n [readonly]=\"readonly()\"\r\n [loading]=\"loading()\"\r\n [size]=\"size()\"\r\n [context]=\"context()\"\r\n [userImgClass]=\"userImgClass()\"\r\n [isDragging]=\"isDragging()\"\r\n [uploadProgress]=\"uploadProgress()\"\r\n (onUploadInputClicked)=\"uploadInput.click()\"\r\n (ondDownloadFile)=\"downloadFile($event)\"\r\n (onDeleteFile)=\"onDelete(primaryFile())\"\r\n (onDragOver)=\"onDragOver($event)\"\r\n (onDragLeave)=\"onDragLeave($event)\"\r\n (onDrop)=\"onDrop($event)\"\r\n ></mt-upload-user-preview>\r\n @if (label()) {\r\n <label\r\n [class.required]=\"\r\n ngControl?.control?.hasValidator(requiredValidator)\r\n \"\r\n [for]=\"ngControl?.name || label()\"\r\n >{{ label() }}</label\r\n >\r\n }\r\n </div>\r\n </div>\r\n </div>\r\n} @else if (shape() === \"card\") {\r\n <mt-card\r\n headless\r\n class=\"border-2 border-dashed border-gray-300 rounded-lg cursor-pointer hover:bg-gray-50\"\r\n >\r\n <div class=\"content flex flex-col gap-5 items-center text-center\">\r\n @if (!files().length && !loading()) {\r\n <div class=\"flex flex-col gap-1\">\r\n @if (title()) {\r\n <div class=\"title text-lg font-semibold\">\r\n {{ title() }}\r\n </div>\r\n }\r\n @if (description()) {\r\n <div\r\n class=\"description text-sm text-muted-foreground secondary text-surface-500\"\r\n >\r\n {{ description() }}\r\n </div>\r\n }\r\n </div>\r\n }\r\n\r\n @if (files().length) {\r\n <div class=\"flex w-full flex-col gap-2\">\r\n @for (file of files(); track $index) {\r\n <mt-upload-file-preview\r\n style=\"width: 100%\"\r\n [value]=\"file\"\r\n [imgPath]=\"resolveImgPath(file)\"\r\n [disabled]=\"disabled()\"\r\n [readonly]=\"readonly()\"\r\n [loading]=\"loading()\"\r\n [context]=\"context()\"\r\n [uploadProgress]=\"uploadProgress()\"\r\n (onUploadInputClicked)=\"uploadInput.click()\"\r\n (ondDownloadFile)=\"downloadFile(file)\"\r\n (onDeleteFile)=\"onDelete(file)\"\r\n />\r\n }\r\n </div>\r\n } @else if (loading()) {\r\n <div class=\"w-full flex gap-3 items-center justify-center p-3\">\r\n <p class=\"text-lg text-gray-500\">\r\n {{\r\n (\"components.upload.uploading\" | transloco) +\r\n uploadProgress() +\r\n \"%\"\r\n }}\r\n </p>\r\n </div>\r\n } @else {\r\n <mt-button\r\n [size]=\"'small'\"\r\n [label]=\"'components.upload.upload' | transloco\"\r\n [icon]=\"'general.upload-01'\"\r\n (onClick)=\"\r\n !loading() && !disabled() && !readonly() ? uploadInput.click() : ''\r\n \"\r\n [disabled]=\"disabled() || loading() || readonly()\"\r\n />\r\n }\r\n </div>\r\n </mt-card>\r\n} @else {\r\n <div class=\"flex flex-col items-start gap-2 w-full\">\r\n @if (label()) {\r\n <label\r\n [class.required]=\"ngControl?.control?.hasValidator(requiredValidator)\"\r\n [for]=\"ngControl?.name || label()\"\r\n >{{ label() }}</label\r\n >\r\n }\r\n\r\n <div\r\n class=\"w-full flex gap-3 items-center justify-center border-2 border-dashed border-gray-300 rounded-lg cursor-pointer hover:bg-gray-50\"\r\n [class]=\"disabled() ? 'bg-gray-50' : ''\"\r\n (click)=\"\r\n !loading() && !disabled() && !readonly() ? uploadInput.click() : ''\r\n \"\r\n [class.border-blue-500]=\"isDragging()\"\r\n [class.bg-blue-50]=\"isDragging()\"\r\n (dragover)=\"onDragOver($event)\"\r\n (dragleave)=\"onDragLeave($event)\"\r\n (drop)=\"onDrop($event)\"\r\n >\r\n @if (files().length) {\r\n <div class=\"flex w-full flex-col gap-2 p-2\">\r\n @for (file of files(); track $index) {\r\n <mt-upload-file-preview\r\n style=\"width: 100%\"\r\n [value]=\"file\"\r\n [imgPath]=\"resolveImgPath(file)\"\r\n [disabled]=\"disabled()\"\r\n [readonly]=\"readonly()\"\r\n [loading]=\"loading()\"\r\n [context]=\"context()\"\r\n [uploadProgress]=\"uploadProgress()\"\r\n (onUploadInputClicked)=\"uploadInput.click()\"\r\n (ondDownloadFile)=\"downloadFile(file)\"\r\n (onDeleteFile)=\"onDelete(file)\"\r\n />\r\n }\r\n </div>\r\n } @else if (loading()) {\r\n <div class=\"w-full flex gap-3 items-center justify-center p-3\">\r\n <p class=\"text-lg text-gray-500\">\r\n {{\r\n (\"components.upload.uploading\" | transloco) +\r\n uploadProgress() +\r\n \"%\"\r\n }}\r\n </p>\r\n </div>\r\n } @else {\r\n <div class=\"w-full flex gap-3 items-center justify-center p-3\">\r\n <mt-icon icon=\"general.upload-01\" />\r\n <p class=\"text-lg text-gray-500\">\r\n {{ \"components.upload.clickOrDrop\" | transloco }}\r\n </p>\r\n </div>\r\n }\r\n </div>\r\n </div>\r\n}\r\n<mt-field-validation [control]=\"ngControl?.control\"></mt-field-validation>\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["finalize","catchError","map"],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@masterteam/components",
3
- "version": "0.0.113",
3
+ "version": "0.0.115",
4
4
  "publishConfig": {
5
5
  "directory": "../../../dist/masterteam/components",
6
6
  "linkDirectory": true,
@@ -1,4 +1,4 @@
1
- import * as i0 from '@angular/core';
1
+ import * as _angular_core from '@angular/core';
2
2
  import { MTIcon } from '@masterteam/icons';
3
3
 
4
4
  interface StatisticCardData {
@@ -8,9 +8,10 @@ interface StatisticCardData {
8
8
  color: string;
9
9
  }
10
10
  declare class StatisticCard {
11
- readonly data: i0.InputSignal<StatisticCardData>;
12
- static ɵfac: i0.ɵɵFactoryDeclaration<StatisticCard, never>;
13
- static ɵcmp: i0.ɵɵComponentDeclaration<StatisticCard, "mt-statistic-card", never, { "data": { "alias": "data"; "required": true; "isSignal": true; }; }, {}, never, never, true, never>;
11
+ readonly data: _angular_core.InputSignal<StatisticCardData>;
12
+ readonly cardClass: _angular_core.InputSignal<string>;
13
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<StatisticCard, never>;
14
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<StatisticCard, "mt-statistic-card", never, { "data": { "alias": "data"; "required": true; "isSignal": true; }; "cardClass": { "alias": "cardClass"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
14
15
  }
15
16
 
16
17
  export { StatisticCard };
@@ -2,7 +2,7 @@ import * as _angular_core from '@angular/core';
2
2
  import { PipeTransform, OnDestroy, ChangeDetectorRef } from '@angular/core';
3
3
  import { ControlValueAccessor, Validators, NgControl } from '@angular/forms';
4
4
  import { HttpContext, HttpClient } from '@angular/common/http';
5
- import { DomSanitizer } from '@angular/platform-browser';
5
+ import { DomSanitizer, SafeUrl } from '@angular/platform-browser';
6
6
 
7
7
  declare class UploadField implements ControlValueAccessor {
8
8
  readonly label: _angular_core.InputSignal<string | undefined>;
@@ -54,6 +54,8 @@ declare class UploadField implements ControlValueAccessor {
54
54
  }
55
55
 
56
56
  declare class SecureImagePipe implements PipeTransform, OnDestroy {
57
+ private static readonly cachedBlobUrls;
58
+ private static readonly pendingRequests;
57
59
  httpClient: HttpClient;
58
60
  domSanitizer: DomSanitizer;
59
61
  cdr: ChangeDetectorRef;
@@ -63,12 +65,10 @@ declare class SecureImagePipe implements PipeTransform, OnDestroy {
63
65
  private latestValue;
64
66
  private transformValue;
65
67
  private loading;
66
- private context;
67
- private wrapUrl;
68
- private useEndpoint;
69
- private endPoint;
70
- private sanitize;
71
- transform(imagePath: string, wrapUrlOrContext?: boolean | HttpContext, contextOrEndpoint?: HttpContext | string, endPoint?: string): string;
68
+ transform(imagePath: string, wrapUrlOrContext?: boolean | HttpContext, contextOrEndpoint?: HttpContext | string, endPoint?: string): string | SafeUrl;
69
+ private static createCacheKey;
70
+ private static serializeContextValue;
71
+ private getOrLoadBlobUrl;
72
72
  private setUpSubscription;
73
73
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<SecureImagePipe, never>;
74
74
  static ɵpipe: _angular_core.ɵɵPipeDeclaration<SecureImagePipe, "secureImage", true>;