nx 16.5.2 → 16.5.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,3 +1,3 @@
1
- .container{width:100%}@media (min-width:640px){.container{max-width:640px}}@media (min-width:768px){.container{max-width:768px}}@media (min-width:1024px){.container{max-width:1024px}}@media (min-width:1280px){.container{max-width:1280px}}@media (min-width:1536px){.container{max-width:1536px}} /*
1
+ .container{width:100%}@media (min-width:640px){.container{max-width:640px}}@media (min-width:768px){.container{max-width:768px}}@media (min-width:1024px){.container{max-width:1024px}}@media (min-width:1280px){.container{max-width:1280px}}@media (min-width:1536px){.container{max-width:1536px}}.form-input,.form-multiselect,.form-select,.form-textarea{--tw-shadow:0 0 #0000;-webkit-appearance:none;appearance:none;background-color:#fff;border-color:#6b7280;border-radius:0;border-width:1px;font-size:1rem;line-height:1.5rem;padding:.5rem .75rem}.form-input:focus,.form-multiselect:focus,.form-select:focus,.form-textarea:focus{--tw-ring-inset:var(--tw-empty,/*!*/ /*!*/);--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-color:#2563eb;--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color);border-color:#2563eb;box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);outline:2px solid transparent;outline-offset:2px}.form-select{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' viewBox='0 0 20 20'%3E%3Cpath stroke='%236b7280' stroke-linecap='round' stroke-linejoin='round' stroke-width='1.5' d='m6 8 4 4 4-4'/%3E%3C/svg%3E");background-position:right .5rem center;background-repeat:no-repeat;background-size:1.5em 1.5em;padding-right:2.5rem;-webkit-print-color-adjust:exact;print-color-adjust:exact} /*
2
2
  ! tailwindcss v3.2.4 | MIT License | https://tailwindcss.com
3
- */*,:after,:before{border:0 solid #e5e7eb;box-sizing:border-box}:after,:before{--tw-content:""}html{-webkit-text-size-adjust:100%;font-feature-settings:normal;font-family:ui-sans-serif,system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,Noto Sans,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol,Noto Color Emoji;line-height:1.5;tab-size:4}body{line-height:inherit;margin:0}hr{border-top-width:1px;color:inherit;height:0}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;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,pre,samp{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace;font-size:1em}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}table{border-collapse:collapse;border-color:inherit;text-indent:0}button,input,optgroup,select,textarea{color:inherit;font-family:inherit;font-size:100%;font-weight:inherit;line-height:inherit;margin:0;padding:0}button,select{text-transform:none}[type=button],[type=reset],[type=submit],button{-webkit-appearance:button;background-color:transparent;background-image:none}:-moz-focusring{outline:auto}:-moz-ui-invalid{box-shadow:none}progress{vertical-align:baseline}::-webkit-inner-spin-button,::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}summary{display:list-item}blockquote,dd,dl,figure,h1,h2,h3,h4,h5,h6,hr,p,pre{margin:0}fieldset{margin:0}fieldset,legend{padding:0}menu,ol,ul{list-style:none;margin:0;padding:0}textarea{resize:vertical}input::placeholder,textarea::placeholder{color:#9ca3af;opacity:1}[role=button],button{cursor:pointer}:disabled{cursor:default}audio,canvas,embed,iframe,img,object,svg,video{display:block;vertical-align:middle}img,video{height:auto;max-width:100%}[hidden]{display:none}*,:after,:before{--tw-border-spacing-x:0;--tw-border-spacing-y:0;--tw-translate-x:0;--tw-translate-y:0;--tw-rotate:0;--tw-skew-x:0;--tw-skew-y:0;--tw-scale-x:1;--tw-scale-y:1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness:proximity;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-color:rgba(59,130,246,.5);--tw-ring-offset-shadow:0 0 #0000;--tw-ring-shadow:0 0 #0000;--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: }::-webkit-backdrop{--tw-border-spacing-x:0;--tw-border-spacing-y:0;--tw-translate-x:0;--tw-translate-y:0;--tw-rotate:0;--tw-skew-x:0;--tw-skew-y:0;--tw-scale-x:1;--tw-scale-y:1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness:proximity;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-color:rgba(59,130,246,.5);--tw-ring-offset-shadow:0 0 #0000;--tw-ring-shadow:0 0 #0000;--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: }::backdrop{--tw-border-spacing-x:0;--tw-border-spacing-y:0;--tw-translate-x:0;--tw-translate-y:0;--tw-rotate:0;--tw-skew-x:0;--tw-skew-y:0;--tw-scale-x:1;--tw-scale-y:1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness:proximity;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-color:rgba(59,130,246,.5);--tw-ring-offset-shadow:0 0 #0000;--tw-ring-shadow:0 0 #0000;--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: }.sr-only{clip:rect(0,0,0,0);border-width:0;height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;white-space:nowrap;width:1px}.visible{visibility:visible}.invisible{visibility:hidden}.static{position:static}.fixed{position:fixed}.absolute{position:absolute}.relative{position:relative}.inset-y-0{bottom:0;top:0}.top-5{top:1.25rem}.left-5{left:1.25rem}.bottom-4{bottom:1rem}.right-4{right:1rem}.top-1\/2{top:50%}.left-1\/2{left:50%}.right-0{right:0}.right-2{right:.5rem}.top-2{top:.5rem}.top-1{top:.25rem}.right-1{right:.25rem}.z-50{z-index:50}.z-0{z-index:0}.z-10{z-index:10}.-z-10{z-index:-10}.mx-4{margin-left:1rem;margin-right:1rem}.my-2{margin-bottom:.5rem;margin-top:.5rem}.mt-3{margin-top:.75rem}.mr-2{margin-right:.5rem}.mr-4{margin-right:1rem}.-mt-3{margin-top:-.75rem}.-ml-3{margin-left:-.75rem}.mr-1{margin-right:.25rem}.ml-2{margin-left:.5rem}.mt-4{margin-top:1rem}.mt-2{margin-top:.5rem}.mt-8{margin-top:2rem}.ml-3{margin-left:.75rem}.mt-10{margin-top:2.5rem}.-mt-1{margin-top:-.25rem}.-ml-1{margin-left:-.25rem}.mb-3{margin-bottom:.75rem}.mr-3{margin-right:.75rem}.block{display:block}.inline-block{display:inline-block}.inline{display:inline}.flex{display:flex}.inline-flex{display:inline-flex}.grid{display:grid}.h-full{height:100%}.h-10{height:2.5rem}.h-4{height:1rem}.h-6{height:1.5rem}.h-16{height:4rem}.h-5{height:1.25rem}.max-h-\[300px\]{max-height:300px}.w-full{width:100%}.w-72{width:18rem}.w-auto{width:auto}.w-4{width:1rem}.w-6{width:1.5rem}.w-16{width:4rem}.w-5{width:1.25rem}.w-36{width:9rem}.min-w-\[250px\]{min-width:250px}.flex-1{flex:1 1 0%}.flex-grow{flex-grow:1}.origin-top-right{transform-origin:top right}.translate-x-32{--tw-translate-x:8rem}.rotate-45,.translate-x-32{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.rotate-45{--tw-rotate:45deg}.scale-95{--tw-scale-x:.95;--tw-scale-y:.95}.scale-100,.scale-95{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.scale-100{--tw-scale-x:1;--tw-scale-y:1}.transform{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.cursor-pointer{cursor:pointer}.cursor-default{cursor:default}.cursor-text{cursor:text}.select-none{-webkit-user-select:none;user-select:none}.select-text{-webkit-user-select:text;user-select:text}.resize{resize:both}.grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.flex-row{flex-direction:row}.flex-col{flex-direction:column}.items-start{align-items:flex-start}.items-center{align-items:center}.justify-center{justify-content:center}.justify-between{justify-content:space-between}.justify-items-center{justify-items:center}.gap-4{gap:1rem}.divide-y>:not([hidden])~:not([hidden]){--tw-divide-y-reverse:0;border-bottom-width:calc(1px*var(--tw-divide-y-reverse));border-top-width:calc(1px*(1 - var(--tw-divide-y-reverse)))}.divide-slate-200>:not([hidden])~:not([hidden]){--tw-divide-opacity:1;border-color:rgb(226 232 240/var(--tw-divide-opacity))}.overflow-auto{overflow:auto}.overflow-hidden{overflow:hidden}.overflow-y-scroll{overflow-y:scroll}.truncate{overflow:hidden;text-overflow:ellipsis}.truncate,.whitespace-nowrap{white-space:nowrap}.rounded-full{border-radius:9999px}.rounded-md{border-radius:.375rem}.rounded-lg{border-radius:.5rem}.rounded-none{border-radius:0}.rounded-l-md{border-bottom-left-radius:.375rem;border-top-left-radius:.375rem}.rounded-r-md{border-bottom-right-radius:.375rem;border-top-right-radius:.375rem}.border-2{border-width:2px}.border{border-width:1px}.border-b{border-bottom-width:1px}.border-t{border-top-width:1px}.border-r-0{border-right-width:0}.border-solid{border-style:solid}.border-dashed{border-style:dashed}.border-slate-900\/10{border-color:rgba(15,23,42,.1)}.border-slate-300{--tw-border-opacity:1;border-color:rgb(203 213 225/var(--tw-border-opacity))}.border-slate-400\/10{border-color:rgba(148,163,184,.1)}.border-slate-200\/10{border-color:rgba(226,232,240,.1)}.border-purple-500{--tw-border-opacity:1;border-color:rgb(168 85 247/var(--tw-border-opacity))}.border-slate-200{--tw-border-opacity:1;border-color:rgb(226 232 240/var(--tw-border-opacity))}.border-pink-500{--tw-border-opacity:1;border-color:rgb(236 72 153/var(--tw-border-opacity))}.border-blue-500{--tw-border-opacity:1;border-color:rgb(59 130 246/var(--tw-border-opacity))}.border-slate-500{--tw-border-opacity:1;border-color:rgb(100 116 139/var(--tw-border-opacity))}.bg-white{--tw-bg-opacity:1;background-color:rgb(255 255 255/var(--tw-bg-opacity))}.bg-blue-500{--tw-bg-opacity:1;background-color:rgb(59 130 246/var(--tw-bg-opacity))}.bg-slate-50{--tw-bg-opacity:1;background-color:rgb(248 250 252/var(--tw-bg-opacity))}.bg-pink-400{--tw-bg-opacity:1;background-color:rgb(244 114 182/var(--tw-bg-opacity))}.bg-slate-300{--tw-bg-opacity:1;background-color:rgb(203 213 225/var(--tw-bg-opacity))}.bg-slate-500{--tw-bg-opacity:1;background-color:rgb(100 116 139/var(--tw-bg-opacity))}.p-0{padding:0}.p-1{padding:.25rem}.p-2{padding:.5rem}.p-4{padding:1rem}.p-1\.5{padding:.375rem}.p-3{padding:.75rem}.px-4{padding-left:1rem;padding-right:1rem}.py-1{padding-bottom:.25rem;padding-top:.25rem}.py-2{padding-bottom:.5rem;padding-top:.5rem}.px-10{padding-left:2.5rem;padding-right:2.5rem}.px-1{padding-left:.25rem;padding-right:.25rem}.px-2{padding-left:.5rem;padding-right:.5rem}.pb-10{padding-bottom:2.5rem}.pl-2{padding-left:.5rem}.pr-6{padding-right:1.5rem}.pb-0{padding-bottom:0}.pb-2{padding-bottom:.5rem}.text-left{text-align:left}.text-center{text-align:center}.font-mono{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace}.font-sans{font-family:ui-sans-serif,system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,Noto Sans,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol,Noto Color Emoji}.text-xs{font-size:.75rem;line-height:1rem}.text-sm{font-size:.875rem;line-height:1.25rem}.text-lg{font-size:1.125rem;line-height:1.75rem}.font-medium{font-weight:500}.font-normal{font-weight:400}.font-semibold{font-weight:600}.font-light{font-weight:300}.uppercase{text-transform:uppercase}.leading-4{line-height:1rem}.tracking-wide{letter-spacing:.025em}.text-slate-500{--tw-text-opacity:1;color:rgb(100 116 139/var(--tw-text-opacity))}.text-slate-700{--tw-text-opacity:1;color:rgb(51 65 85/var(--tw-text-opacity))}.text-slate-900{--tw-text-opacity:1;color:rgb(15 23 42/var(--tw-text-opacity))}.text-white{--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity))}.text-slate-600{--tw-text-opacity:1;color:rgb(71 85 105/var(--tw-text-opacity))}.text-blue-500{--tw-text-opacity:1;color:rgb(59 130 246/var(--tw-text-opacity))}.text-slate-800{--tw-text-opacity:1;color:rgb(30 41 59/var(--tw-text-opacity))}.text-slate-400{--tw-text-opacity:1;color:rgb(148 163 184/var(--tw-text-opacity))}.text-yellow-500{--tw-text-opacity:1;color:rgb(234 179 8/var(--tw-text-opacity))}.text-gray-700{--tw-text-opacity:1;color:rgb(55 65 81/var(--tw-text-opacity))}.text-slate-50{--tw-text-opacity:1;color:rgb(248 250 252/var(--tw-text-opacity))}.accent-blue-500{accent-color:#3b82f6}.accent-purple-500{accent-color:#a855f7}.opacity-0{opacity:0}.opacity-100{opacity:1}.shadow-lg{--tw-shadow:0 10px 15px -3px rgba(0,0,0,.1),0 4px 6px -4px rgba(0,0,0,.1);--tw-shadow-colored:0 10px 15px -3px var(--tw-shadow-color),0 4px 6px -4px var(--tw-shadow-color)}.shadow-lg,.shadow-sm{box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.shadow-sm{--tw-shadow:0 1px 2px 0 rgba(0,0,0,.05);--tw-shadow-colored:0 1px 2px 0 var(--tw-shadow-color)}.ring-1{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000)}.ring-slate-900\/10{--tw-ring-color:rgba(15,23,42,.1)}.ring-slate-200{--tw-ring-opacity:1;--tw-ring-color:rgb(226 232 240/var(--tw-ring-opacity))}.ring-blue-500{--tw-ring-opacity:1;--tw-ring-color:rgb(59 130 246/var(--tw-ring-opacity))}.ring-slate-500{--tw-ring-opacity:1;--tw-ring-color:rgb(100 116 139/var(--tw-ring-opacity))}.ring-opacity-10{--tw-ring-opacity:0.1}.ring-opacity-5{--tw-ring-opacity:0.05}.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-duration:.15s;transition-property:all;transition-timing-function:cubic-bezier(.4,0,.2,1)}.transition{transition-duration:.15s;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,-webkit-backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter,-webkit-backdrop-filter;transition-timing-function:cubic-bezier(.4,0,.2,1)}.duration-300{transition-duration:.3s}.duration-200{transition-duration:.2s}.duration-100{transition-duration:.1s}.duration-75{transition-duration:75ms}.ease-in-out{transition-timing-function:cubic-bezier(.4,0,.2,1)}.ease-out{transition-timing-function:cubic-bezier(0,0,.2,1)}.ease-in{transition-timing-function:cubic-bezier(.4,0,1,1)}.dark{color-scheme:dark}.placeholder\:font-light::placeholder{font-weight:300}.placeholder\:text-slate-400::placeholder{--tw-text-opacity:1;color:rgb(148 163 184/var(--tw-text-opacity))}.hover\:bg-slate-50:hover{--tw-bg-opacity:1;background-color:rgb(248 250 252/var(--tw-bg-opacity))}.hover\:bg-pink-500:hover{--tw-bg-opacity:1;background-color:rgb(236 72 153/var(--tw-bg-opacity))}.hover\:bg-slate-100:hover{--tw-bg-opacity:1;background-color:rgb(241 245 249/var(--tw-bg-opacity))}.hover\:underline:hover{text-decoration-line:underline}.focus\:outline-none:focus{outline:2px solid transparent;outline-offset:2px}.focus-visible\:ring-2:focus-visible{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000)}.focus-visible\:ring-white:focus-visible{--tw-ring-opacity:1;--tw-ring-color:rgb(255 255 255/var(--tw-ring-opacity))}.focus-visible\:ring-opacity-75:focus-visible{--tw-ring-opacity:0.75}.group:hover .group-hover\:translate-x-0{--tw-translate-x:0px;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.group:hover .group-hover\:opacity-60{opacity:.6}.dark .dark\:divide-slate-800>:not([hidden])~:not([hidden]){--tw-divide-opacity:1;border-color:rgb(30 41 59/var(--tw-divide-opacity))}.dark .dark\:border-slate-300\/10{border-color:rgba(203,213,225,.1)}.dark .dark\:border-slate-600{--tw-border-opacity:1;border-color:rgb(71 85 105/var(--tw-border-opacity))}.dark .dark\:border-purple-600{--tw-border-opacity:1;border-color:rgb(147 51 234/var(--tw-border-opacity))}.dark .dark\:border-slate-700{--tw-border-opacity:1;border-color:rgb(51 65 85/var(--tw-border-opacity))}.dark .dark\:border-fuchsia-800{--tw-border-opacity:1;border-color:rgb(134 25 143/var(--tw-border-opacity))}.dark .dark\:border-sky-500{--tw-border-opacity:1;border-color:rgb(14 165 233/var(--tw-border-opacity))}.dark .dark\:border-slate-900{--tw-border-opacity:1;border-color:rgb(15 23 42/var(--tw-border-opacity))}.dark .dark\:border-slate-800{--tw-border-opacity:1;border-color:rgb(30 41 59/var(--tw-border-opacity))}.dark .dark\:bg-slate-900{--tw-bg-opacity:1;background-color:rgb(15 23 42/var(--tw-bg-opacity))}.dark .dark\:bg-transparent{background-color:transparent}.dark .dark\:bg-sky-500{--tw-bg-opacity:1;background-color:rgb(14 165 233/var(--tw-bg-opacity))}.dark .dark\:bg-slate-800{--tw-bg-opacity:1;background-color:rgb(30 41 59/var(--tw-bg-opacity))}.dark .dark\:bg-\[\#0B1221\]{--tw-bg-opacity:1;background-color:rgb(11 18 33/var(--tw-bg-opacity))}.dark .dark\:bg-fuchsia-700{--tw-bg-opacity:1;background-color:rgb(162 28 175/var(--tw-bg-opacity))}.dark .dark\:bg-slate-600\/30{background-color:rgba(71,85,105,.3)}.dark .dark\:text-slate-400{--tw-text-opacity:1;color:rgb(148 163 184/var(--tw-text-opacity))}.dark .dark\:text-white{--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity))}.dark .dark\:text-sky-500{--tw-text-opacity:1;color:rgb(14 165 233/var(--tw-text-opacity))}.dark .dark\:text-slate-200{--tw-text-opacity:1;color:rgb(226 232 240/var(--tw-text-opacity))}.dark .dark\:text-slate-500{--tw-text-opacity:1;color:rgb(100 116 139/var(--tw-text-opacity))}.dark .dark\:text-yellow-400{--tw-text-opacity:1;color:rgb(250 204 21/var(--tw-text-opacity))}.dark .dark\:text-slate-300{--tw-text-opacity:1;color:rgb(203 213 225/var(--tw-text-opacity))}.dark .dark\:accent-sky-500{accent-color:#0ea5e9}.dark .dark\:ring-0{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000)}.dark .dark\:ring-slate-300\/10{--tw-ring-color:rgba(203,213,225,.1)}.dark .dark\:ring-slate-600{--tw-ring-opacity:1;--tw-ring-color:rgb(71 85 105/var(--tw-ring-opacity))}.dark .dark\:ring-sky-500{--tw-ring-opacity:1;--tw-ring-color:rgb(14 165 233/var(--tw-ring-opacity))}.dark .dark\:ring-slate-700{--tw-ring-opacity:1;--tw-ring-color:rgb(51 65 85/var(--tw-ring-opacity))}.dark .hover\:dark\:bg-slate-700:hover{--tw-bg-opacity:1;background-color:rgb(51 65 85/var(--tw-bg-opacity))}.dark .hover\:dark\:bg-fuchsia-600:hover{--tw-bg-opacity:1;background-color:rgb(192 38 211/var(--tw-bg-opacity))}.dark .dark\:hover\:bg-slate-700:hover{--tw-bg-opacity:1;background-color:rgb(51 65 85/var(--tw-bg-opacity))}@media (min-width:1024px){.lg\:text-xs{font-size:.75rem;line-height:1rem}}
3
+ */*,:after,:before{border:0 solid #e5e7eb;box-sizing:border-box}:after,:before{--tw-content:""}html{-webkit-text-size-adjust:100%;font-feature-settings:normal;font-family:ui-sans-serif,system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,Noto Sans,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol,Noto Color Emoji;line-height:1.5;tab-size:4}body{line-height:inherit;margin:0}hr{border-top-width:1px;color:inherit;height:0}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;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,pre,samp{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace;font-size:1em}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}table{border-collapse:collapse;border-color:inherit;text-indent:0}button,input,optgroup,select,textarea{color:inherit;font-family:inherit;font-size:100%;font-weight:inherit;line-height:inherit;margin:0;padding:0}button,select{text-transform:none}[type=button],[type=reset],[type=submit],button{-webkit-appearance:button;background-color:transparent;background-image:none}:-moz-focusring{outline:auto}:-moz-ui-invalid{box-shadow:none}progress{vertical-align:baseline}::-webkit-inner-spin-button,::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}summary{display:list-item}blockquote,dd,dl,figure,h1,h2,h3,h4,h5,h6,hr,p,pre{margin:0}fieldset{margin:0}fieldset,legend{padding:0}menu,ol,ul{list-style:none;margin:0;padding:0}textarea{resize:vertical}input::placeholder,textarea::placeholder{color:#9ca3af;opacity:1}[role=button],button{cursor:pointer}:disabled{cursor:default}audio,canvas,embed,iframe,img,object,svg,video{display:block;vertical-align:middle}img,video{height:auto;max-width:100%}[hidden]{display:none}*,:after,:before{--tw-border-spacing-x:0;--tw-border-spacing-y:0;--tw-translate-x:0;--tw-translate-y:0;--tw-rotate:0;--tw-skew-x:0;--tw-skew-y:0;--tw-scale-x:1;--tw-scale-y:1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness:proximity;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-color:rgba(59,130,246,.5);--tw-ring-offset-shadow:0 0 #0000;--tw-ring-shadow:0 0 #0000;--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: }::-webkit-backdrop{--tw-border-spacing-x:0;--tw-border-spacing-y:0;--tw-translate-x:0;--tw-translate-y:0;--tw-rotate:0;--tw-skew-x:0;--tw-skew-y:0;--tw-scale-x:1;--tw-scale-y:1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness:proximity;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-color:rgba(59,130,246,.5);--tw-ring-offset-shadow:0 0 #0000;--tw-ring-shadow:0 0 #0000;--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: }::backdrop{--tw-border-spacing-x:0;--tw-border-spacing-y:0;--tw-translate-x:0;--tw-translate-y:0;--tw-rotate:0;--tw-skew-x:0;--tw-skew-y:0;--tw-scale-x:1;--tw-scale-y:1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness:proximity;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-color:rgba(59,130,246,.5);--tw-ring-offset-shadow:0 0 #0000;--tw-ring-shadow:0 0 #0000;--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: }.sr-only{clip:rect(0,0,0,0);border-width:0;height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;white-space:nowrap;width:1px}.visible{visibility:visible}.invisible{visibility:hidden}.static{position:static}.fixed{position:fixed}.absolute{position:absolute}.relative{position:relative}.inset-y-0{bottom:0;top:0}.top-5{top:1.25rem}.left-5{left:1.25rem}.bottom-4{bottom:1rem}.right-4{right:1rem}.top-1\/2{top:50%}.left-1\/2{left:50%}.right-0{right:0}.right-2{right:.5rem}.top-2{top:.5rem}.top-1{top:.25rem}.right-1{right:.25rem}.z-50{z-index:50}.z-0{z-index:0}.z-10{z-index:10}.-z-10{z-index:-10}.mx-4{margin-left:1rem;margin-right:1rem}.my-2{margin-bottom:.5rem;margin-top:.5rem}.mt-3{margin-top:.75rem}.mr-2{margin-right:.5rem}.mr-4{margin-right:1rem}.-mt-3{margin-top:-.75rem}.-ml-3{margin-left:-.75rem}.mr-1{margin-right:.25rem}.ml-2{margin-left:.5rem}.mt-4{margin-top:1rem}.mt-2{margin-top:.5rem}.mt-8{margin-top:2rem}.ml-3{margin-left:.75rem}.mt-10{margin-top:2.5rem}.-mt-1{margin-top:-.25rem}.-ml-1{margin-left:-.25rem}.mb-3{margin-bottom:.75rem}.mr-3{margin-right:.75rem}.block{display:block}.inline-block{display:inline-block}.inline{display:inline}.flex{display:flex}.inline-flex{display:inline-flex}.grid{display:grid}.h-full{height:100%}.h-10{height:2.5rem}.h-4{height:1rem}.h-6{height:1.5rem}.h-16{height:4rem}.h-5{height:1.25rem}.max-h-\[300px\]{max-height:300px}.w-full{width:100%}.w-72{width:18rem}.w-auto{width:auto}.w-4{width:1rem}.w-6{width:1.5rem}.w-16{width:4rem}.w-5{width:1.25rem}.w-36{width:9rem}.min-w-\[250px\]{min-width:250px}.flex-1{flex:1 1 0%}.flex-grow{flex-grow:1}.origin-top-right{transform-origin:top right}.translate-x-32{--tw-translate-x:8rem}.rotate-45,.translate-x-32{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.rotate-45{--tw-rotate:45deg}.scale-95{--tw-scale-x:.95;--tw-scale-y:.95}.scale-100,.scale-95{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.scale-100{--tw-scale-x:1;--tw-scale-y:1}.transform{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.cursor-pointer{cursor:pointer}.cursor-default{cursor:default}.cursor-text{cursor:text}.select-none{-webkit-user-select:none;user-select:none}.select-text{-webkit-user-select:text;user-select:text}.resize{resize:both}.grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.flex-row{flex-direction:row}.flex-col{flex-direction:column}.items-start{align-items:flex-start}.items-center{align-items:center}.justify-center{justify-content:center}.justify-between{justify-content:space-between}.justify-items-center{justify-items:center}.gap-4{gap:1rem}.divide-y>:not([hidden])~:not([hidden]){--tw-divide-y-reverse:0;border-bottom-width:calc(1px*var(--tw-divide-y-reverse));border-top-width:calc(1px*(1 - var(--tw-divide-y-reverse)))}.divide-slate-200>:not([hidden])~:not([hidden]){--tw-divide-opacity:1;border-color:rgb(226 232 240/var(--tw-divide-opacity))}.overflow-auto{overflow:auto}.overflow-hidden{overflow:hidden}.overflow-y-scroll{overflow-y:scroll}.truncate{overflow:hidden;text-overflow:ellipsis}.truncate,.whitespace-nowrap{white-space:nowrap}.rounded-full{border-radius:9999px}.rounded-md{border-radius:.375rem}.rounded-lg{border-radius:.5rem}.rounded-none{border-radius:0}.rounded-l-md{border-bottom-left-radius:.375rem;border-top-left-radius:.375rem}.rounded-r-md{border-bottom-right-radius:.375rem;border-top-right-radius:.375rem}.border-2{border-width:2px}.border{border-width:1px}.border-b{border-bottom-width:1px}.border-t{border-top-width:1px}.border-r-0{border-right-width:0}.border-solid{border-style:solid}.border-dashed{border-style:dashed}.border-slate-900\/10{border-color:rgba(15,23,42,.1)}.border-slate-300{--tw-border-opacity:1;border-color:rgb(203 213 225/var(--tw-border-opacity))}.border-slate-400\/10{border-color:rgba(148,163,184,.1)}.border-slate-200\/10{border-color:rgba(226,232,240,.1)}.border-purple-500{--tw-border-opacity:1;border-color:rgb(168 85 247/var(--tw-border-opacity))}.border-slate-200{--tw-border-opacity:1;border-color:rgb(226 232 240/var(--tw-border-opacity))}.border-pink-500{--tw-border-opacity:1;border-color:rgb(236 72 153/var(--tw-border-opacity))}.border-blue-500{--tw-border-opacity:1;border-color:rgb(59 130 246/var(--tw-border-opacity))}.border-slate-500{--tw-border-opacity:1;border-color:rgb(100 116 139/var(--tw-border-opacity))}.bg-white{--tw-bg-opacity:1;background-color:rgb(255 255 255/var(--tw-bg-opacity))}.bg-blue-500{--tw-bg-opacity:1;background-color:rgb(59 130 246/var(--tw-bg-opacity))}.bg-slate-50{--tw-bg-opacity:1;background-color:rgb(248 250 252/var(--tw-bg-opacity))}.bg-pink-400{--tw-bg-opacity:1;background-color:rgb(244 114 182/var(--tw-bg-opacity))}.bg-slate-300{--tw-bg-opacity:1;background-color:rgb(203 213 225/var(--tw-bg-opacity))}.bg-slate-500{--tw-bg-opacity:1;background-color:rgb(100 116 139/var(--tw-bg-opacity))}.p-0{padding:0}.p-1{padding:.25rem}.p-2{padding:.5rem}.p-4{padding:1rem}.p-1\.5{padding:.375rem}.p-3{padding:.75rem}.px-4{padding-left:1rem;padding-right:1rem}.py-1{padding-bottom:.25rem;padding-top:.25rem}.py-2{padding-bottom:.5rem;padding-top:.5rem}.px-10{padding-left:2.5rem;padding-right:2.5rem}.px-1{padding-left:.25rem;padding-right:.25rem}.px-2{padding-left:.5rem;padding-right:.5rem}.pb-10{padding-bottom:2.5rem}.pl-2{padding-left:.5rem}.pr-6{padding-right:1.5rem}.pb-0{padding-bottom:0}.pb-2{padding-bottom:.5rem}.pl-4{padding-left:1rem}.pr-8{padding-right:2rem}.text-left{text-align:left}.text-center{text-align:center}.font-mono{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace}.font-sans{font-family:ui-sans-serif,system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,Noto Sans,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol,Noto Color Emoji}.text-xs{font-size:.75rem;line-height:1rem}.text-sm{font-size:.875rem;line-height:1.25rem}.text-lg{font-size:1.125rem;line-height:1.75rem}.font-medium{font-weight:500}.font-normal{font-weight:400}.font-semibold{font-weight:600}.font-light{font-weight:300}.uppercase{text-transform:uppercase}.leading-4{line-height:1rem}.tracking-wide{letter-spacing:.025em}.text-slate-500{--tw-text-opacity:1;color:rgb(100 116 139/var(--tw-text-opacity))}.text-slate-700{--tw-text-opacity:1;color:rgb(51 65 85/var(--tw-text-opacity))}.text-slate-900{--tw-text-opacity:1;color:rgb(15 23 42/var(--tw-text-opacity))}.text-white{--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity))}.text-slate-600{--tw-text-opacity:1;color:rgb(71 85 105/var(--tw-text-opacity))}.text-blue-500{--tw-text-opacity:1;color:rgb(59 130 246/var(--tw-text-opacity))}.text-slate-800{--tw-text-opacity:1;color:rgb(30 41 59/var(--tw-text-opacity))}.text-slate-400{--tw-text-opacity:1;color:rgb(148 163 184/var(--tw-text-opacity))}.text-yellow-500{--tw-text-opacity:1;color:rgb(234 179 8/var(--tw-text-opacity))}.text-gray-700{--tw-text-opacity:1;color:rgb(55 65 81/var(--tw-text-opacity))}.text-slate-50{--tw-text-opacity:1;color:rgb(248 250 252/var(--tw-text-opacity))}.accent-blue-500{accent-color:#3b82f6}.accent-purple-500{accent-color:#a855f7}.opacity-0{opacity:0}.opacity-100{opacity:1}.shadow-lg{--tw-shadow:0 10px 15px -3px rgba(0,0,0,.1),0 4px 6px -4px rgba(0,0,0,.1);--tw-shadow-colored:0 10px 15px -3px var(--tw-shadow-color),0 4px 6px -4px var(--tw-shadow-color)}.shadow-lg,.shadow-sm{box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.shadow-sm{--tw-shadow:0 1px 2px 0 rgba(0,0,0,.05);--tw-shadow-colored:0 1px 2px 0 var(--tw-shadow-color)}.ring-1{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000)}.ring-slate-900\/10{--tw-ring-color:rgba(15,23,42,.1)}.ring-slate-200{--tw-ring-opacity:1;--tw-ring-color:rgb(226 232 240/var(--tw-ring-opacity))}.ring-blue-500{--tw-ring-opacity:1;--tw-ring-color:rgb(59 130 246/var(--tw-ring-opacity))}.ring-slate-500{--tw-ring-opacity:1;--tw-ring-color:rgb(100 116 139/var(--tw-ring-opacity))}.ring-opacity-10{--tw-ring-opacity:0.1}.ring-opacity-5{--tw-ring-opacity:0.05}.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-duration:.15s;transition-property:all;transition-timing-function:cubic-bezier(.4,0,.2,1)}.transition{transition-duration:.15s;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,-webkit-backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter,-webkit-backdrop-filter;transition-timing-function:cubic-bezier(.4,0,.2,1)}.duration-300{transition-duration:.3s}.duration-200{transition-duration:.2s}.duration-100{transition-duration:.1s}.duration-75{transition-duration:75ms}.ease-in-out{transition-timing-function:cubic-bezier(.4,0,.2,1)}.ease-out{transition-timing-function:cubic-bezier(0,0,.2,1)}.ease-in{transition-timing-function:cubic-bezier(.4,0,1,1)}.dark{color-scheme:dark}.placeholder\:font-light::placeholder{font-weight:300}.placeholder\:text-slate-400::placeholder{--tw-text-opacity:1;color:rgb(148 163 184/var(--tw-text-opacity))}.hover\:bg-slate-50:hover{--tw-bg-opacity:1;background-color:rgb(248 250 252/var(--tw-bg-opacity))}.hover\:bg-pink-500:hover{--tw-bg-opacity:1;background-color:rgb(236 72 153/var(--tw-bg-opacity))}.hover\:bg-slate-100:hover{--tw-bg-opacity:1;background-color:rgb(241 245 249/var(--tw-bg-opacity))}.hover\:underline:hover{text-decoration-line:underline}.focus\:outline-none:focus{outline:2px solid transparent;outline-offset:2px}.focus-visible\:ring-2:focus-visible{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000)}.focus-visible\:ring-white:focus-visible{--tw-ring-opacity:1;--tw-ring-color:rgb(255 255 255/var(--tw-ring-opacity))}.focus-visible\:ring-opacity-75:focus-visible{--tw-ring-opacity:0.75}.group:hover .group-hover\:translate-x-0{--tw-translate-x:0px;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.group:hover .group-hover\:opacity-60{opacity:.6}.dark .dark\:divide-slate-800>:not([hidden])~:not([hidden]){--tw-divide-opacity:1;border-color:rgb(30 41 59/var(--tw-divide-opacity))}.dark .dark\:border-slate-300\/10{border-color:rgba(203,213,225,.1)}.dark .dark\:border-slate-600{--tw-border-opacity:1;border-color:rgb(71 85 105/var(--tw-border-opacity))}.dark .dark\:border-purple-600{--tw-border-opacity:1;border-color:rgb(147 51 234/var(--tw-border-opacity))}.dark .dark\:border-slate-700{--tw-border-opacity:1;border-color:rgb(51 65 85/var(--tw-border-opacity))}.dark .dark\:border-fuchsia-800{--tw-border-opacity:1;border-color:rgb(134 25 143/var(--tw-border-opacity))}.dark .dark\:border-sky-500{--tw-border-opacity:1;border-color:rgb(14 165 233/var(--tw-border-opacity))}.dark .dark\:border-slate-900{--tw-border-opacity:1;border-color:rgb(15 23 42/var(--tw-border-opacity))}.dark .dark\:border-slate-800{--tw-border-opacity:1;border-color:rgb(30 41 59/var(--tw-border-opacity))}.dark .dark\:bg-slate-900{--tw-bg-opacity:1;background-color:rgb(15 23 42/var(--tw-bg-opacity))}.dark .dark\:bg-transparent{background-color:transparent}.dark .dark\:bg-sky-500{--tw-bg-opacity:1;background-color:rgb(14 165 233/var(--tw-bg-opacity))}.dark .dark\:bg-slate-800{--tw-bg-opacity:1;background-color:rgb(30 41 59/var(--tw-bg-opacity))}.dark .dark\:bg-\[\#0B1221\]{--tw-bg-opacity:1;background-color:rgb(11 18 33/var(--tw-bg-opacity))}.dark .dark\:bg-fuchsia-700{--tw-bg-opacity:1;background-color:rgb(162 28 175/var(--tw-bg-opacity))}.dark .dark\:bg-slate-600\/30{background-color:rgba(71,85,105,.3)}.dark .dark\:text-slate-400{--tw-text-opacity:1;color:rgb(148 163 184/var(--tw-text-opacity))}.dark .dark\:text-white{--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity))}.dark .dark\:text-sky-500{--tw-text-opacity:1;color:rgb(14 165 233/var(--tw-text-opacity))}.dark .dark\:text-slate-200{--tw-text-opacity:1;color:rgb(226 232 240/var(--tw-text-opacity))}.dark .dark\:text-slate-500{--tw-text-opacity:1;color:rgb(100 116 139/var(--tw-text-opacity))}.dark .dark\:text-yellow-400{--tw-text-opacity:1;color:rgb(250 204 21/var(--tw-text-opacity))}.dark .dark\:text-slate-300{--tw-text-opacity:1;color:rgb(203 213 225/var(--tw-text-opacity))}.dark .dark\:accent-sky-500{accent-color:#0ea5e9}.dark .dark\:ring-0{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000)}.dark .dark\:ring-slate-300\/10{--tw-ring-color:rgba(203,213,225,.1)}.dark .dark\:ring-slate-600{--tw-ring-opacity:1;--tw-ring-color:rgb(71 85 105/var(--tw-ring-opacity))}.dark .dark\:ring-sky-500{--tw-ring-opacity:1;--tw-ring-color:rgb(14 165 233/var(--tw-ring-opacity))}.dark .dark\:ring-slate-700{--tw-ring-opacity:1;--tw-ring-color:rgb(51 65 85/var(--tw-ring-opacity))}.dark .hover\:dark\:bg-slate-700:hover{--tw-bg-opacity:1;background-color:rgb(51 65 85/var(--tw-bg-opacity))}.dark .hover\:dark\:bg-fuchsia-600:hover{--tw-bg-opacity:1;background-color:rgb(192 38 211/var(--tw-bg-opacity))}.dark .dark\:hover\:bg-slate-700:hover{--tw-bg-opacity:1;background-color:rgb(51 65 85/var(--tw-bg-opacity))}@media (min-width:1024px){.lg\:text-xs{font-size:.75rem;line-height:1rem}}
@@ -18,7 +18,9 @@ export declare class DaemonClient {
18
18
  private currentResolve;
19
19
  private currentReject;
20
20
  private _enabled;
21
- private _connected;
21
+ private _daemonStatus;
22
+ private _waitForDaemonReady;
23
+ private _daemonReady;
22
24
  private _out;
23
25
  private _err;
24
26
  enabled(): boolean;
@@ -20,9 +20,18 @@ const workspaces_1 = require("../../config/workspaces");
20
20
  const socket_messenger_1 = require("./socket-messenger");
21
21
  const cache_1 = require("../cache");
22
22
  const DAEMON_ENV_SETTINGS = Object.assign(Object.assign({}, process.env), { NX_PROJECT_GLOB_CACHE: 'false', NX_CACHE_PROJECTS_CONFIG: 'false' });
23
+ var DaemonStatus;
24
+ (function (DaemonStatus) {
25
+ DaemonStatus[DaemonStatus["CONNECTING"] = 0] = "CONNECTING";
26
+ DaemonStatus[DaemonStatus["DISCONNECTED"] = 1] = "DISCONNECTED";
27
+ DaemonStatus[DaemonStatus["CONNECTED"] = 2] = "CONNECTED";
28
+ })(DaemonStatus || (DaemonStatus = {}));
23
29
  class DaemonClient {
24
30
  constructor(nxJson) {
25
31
  this.nxJson = nxJson;
32
+ this._daemonStatus = DaemonStatus.DISCONNECTED;
33
+ this._waitForDaemonReady = null;
34
+ this._daemonReady = null;
26
35
  this._out = null;
27
36
  this._err = null;
28
37
  this.reset();
@@ -71,7 +80,8 @@ class DaemonClient {
71
80
  (_c = this._err) === null || _c === void 0 ? void 0 : _c.close();
72
81
  this._out = null;
73
82
  this._err = null;
74
- this._connected = false;
83
+ this._daemonStatus = DaemonStatus.DISCONNECTED;
84
+ this._waitForDaemonReady = new Promise((resolve) => (this._daemonReady = resolve));
75
85
  }
76
86
  requestShutdown() {
77
87
  return tslib_1.__awaiter(this, void 0, void 0, function* () {
@@ -101,20 +111,23 @@ class DaemonClient {
101
111
  registerFileWatcher(config, callback) {
102
112
  return tslib_1.__awaiter(this, void 0, void 0, function* () {
103
113
  yield this.getProjectGraph();
104
- const messenger = new socket_messenger_1.SocketMessenger((0, net_1.connect)(socket_utils_1.FULL_OS_SOCKET_PATH)).listen((message) => {
105
- try {
106
- const parsedMessage = JSON.parse(message);
107
- callback(null, parsedMessage);
108
- }
109
- catch (e) {
110
- callback(e, null);
111
- }
112
- }, () => {
113
- callback('closed', null);
114
- }, (err) => callback(err, null));
115
- yield this.queue.sendToQueue(() => messenger.sendMessage({ type: 'REGISTER_FILE_WATCHER', config }));
114
+ let messenger;
115
+ yield this.queue.sendToQueue(() => {
116
+ messenger = new socket_messenger_1.SocketMessenger((0, net_1.connect)(socket_utils_1.FULL_OS_SOCKET_PATH)).listen((message) => {
117
+ try {
118
+ const parsedMessage = JSON.parse(message);
119
+ callback(null, parsedMessage);
120
+ }
121
+ catch (e) {
122
+ callback(e, null);
123
+ }
124
+ }, () => {
125
+ callback('closed', null);
126
+ }, (err) => callback(err, null));
127
+ return messenger.sendMessage({ type: 'REGISTER_FILE_WATCHER', config });
128
+ });
116
129
  return () => {
117
- messenger.close();
130
+ messenger === null || messenger === void 0 ? void 0 : messenger.close();
118
131
  };
119
132
  });
120
133
  }
@@ -171,7 +184,7 @@ class DaemonClient {
171
184
  // it's ok for the daemon to terminate if the client doesn't wait on
172
185
  // any messages from the daemon
173
186
  if (this.queue.isEmpty()) {
174
- this._connected = false;
187
+ this.reset();
175
188
  }
176
189
  else {
177
190
  output_1.output.error({
@@ -212,12 +225,17 @@ class DaemonClient {
212
225
  }
213
226
  sendMessageToDaemon(message) {
214
227
  return tslib_1.__awaiter(this, void 0, void 0, function* () {
215
- if (!this._connected) {
216
- this._connected = true;
228
+ if (this._daemonStatus == DaemonStatus.DISCONNECTED) {
229
+ this._daemonStatus = DaemonStatus.CONNECTING;
217
230
  if (!(yield this.isServerAvailable())) {
218
231
  yield this.startInBackground();
219
232
  }
220
233
  this.setUpConnection();
234
+ this._daemonStatus = DaemonStatus.CONNECTED;
235
+ this._daemonReady();
236
+ }
237
+ else if (this._daemonStatus == DaemonStatus.CONNECTING) {
238
+ yield this._waitForDaemonReady;
221
239
  }
222
240
  return new Promise((resolve, reject) => {
223
241
  perf_hooks_1.performance.mark('sendMessageToDaemon-start');
@@ -87,7 +87,10 @@ function addUpdatedAndDeletedFiles(createdFiles, updatedFiles, deletedFiles) {
87
87
  }
88
88
  exports.addUpdatedAndDeletedFiles = addUpdatedAndDeletedFiles;
89
89
  function computeWorkspaceConfigHash(projectsConfigurations) {
90
- return (0, file_hasher_1.hashArray)([JSON.stringify(projectsConfigurations)]);
90
+ const projectConfigurationStrings = Object.entries(projectsConfigurations)
91
+ .sort(([projectNameA], [projectNameB]) => projectNameA.localeCompare(projectNameB))
92
+ .map(([projectName, projectConfig]) => `${projectName}:${JSON.stringify(projectConfig)}`);
93
+ return (0, file_hasher_1.hashArray)(projectConfigurationStrings);
91
94
  }
92
95
  /**
93
96
  * Temporary work around to handle nested gitignores. The parcel file watcher doesn't handle them well,
@@ -119,7 +119,7 @@ function readAndCombineAllProjectConfigurations(tree) {
119
119
  const createdFiles = findCreatedProjectFiles(tree);
120
120
  const deletedFiles = findDeletedProjectFiles(tree);
121
121
  const projectFiles = [...globbedFiles, ...createdFiles].filter((r) => deletedFiles.indexOf(r) === -1);
122
- return (0, workspaces_1.buildProjectsConfigurationsFromProjectPaths)(nxJson, projectFiles, (file) => (0, json_1.readJson)(tree, file)).projects;
122
+ return (0, workspaces_1.buildProjectsConfigurationsFromProjectPaths)(nxJson, projectFiles, (file) => (0, json_1.readJson)(tree, file));
123
123
  }
124
124
  /**
125
125
  * Used to ensure that projects created during
@@ -188,7 +188,7 @@ class TaskHasherImpl {
188
188
  return yield this.hashNamedInputForDependencies(d.target, task, input.input || 'default', visited);
189
189
  }
190
190
  else {
191
- const hash = this.hashExternalDependency(d.source, d.target);
191
+ const { hash } = this.hashExternalDependency(d.target);
192
192
  return {
193
193
  value: hash,
194
194
  details: {
@@ -239,17 +239,18 @@ class TaskHasherImpl {
239
239
  }
240
240
  return partialHashes;
241
241
  }
242
- computeExternalDependencyIdentifier(sourceProjectName, targetProjectName) {
243
- return `${sourceProjectName}->${targetProjectName}`;
244
- }
245
- hashExternalDependency(sourceProjectName, targetProjectName, visited = new Set()) {
242
+ hashExternalDependency(projectName, parentProjects = new Set()) {
246
243
  // try to retrieve the hash from cache
247
- if (this.externalDepsHashCache[targetProjectName]) {
248
- return this.externalDepsHashCache[targetProjectName];
244
+ if (this.externalDepsHashCache[projectName]) {
245
+ return {
246
+ fullyResolved: true,
247
+ hash: this.externalDepsHashCache[projectName],
248
+ };
249
249
  }
250
- visited.add(this.computeExternalDependencyIdentifier(sourceProjectName, targetProjectName));
251
- const node = this.projectGraph.externalNodes[targetProjectName];
250
+ parentProjects.add(projectName);
251
+ const node = this.projectGraph.externalNodes[projectName];
252
252
  let partialHash;
253
+ let fullyResolved = true;
253
254
  if (node) {
254
255
  const partialHashes = [];
255
256
  if (node.data.hash) {
@@ -261,10 +262,18 @@ class TaskHasherImpl {
261
262
  partialHashes.push(node.data.version);
262
263
  }
263
264
  // we want to calculate the hash of the entire dependency tree
264
- if (this.projectGraph.dependencies[targetProjectName]) {
265
- this.projectGraph.dependencies[targetProjectName].forEach((d) => {
266
- if (!visited.has(this.computeExternalDependencyIdentifier(targetProjectName, d.target))) {
267
- partialHashes.push(this.hashExternalDependency(targetProjectName, d.target, visited));
265
+ if (this.projectGraph.dependencies[projectName]) {
266
+ this.projectGraph.dependencies[projectName].forEach((d) => {
267
+ if (!parentProjects.has(d.target)) {
268
+ const hashResult = this.hashExternalDependency(d.target, new Set(parentProjects));
269
+ partialHashes.push(hashResult.hash);
270
+ if (!hashResult.fullyResolved) {
271
+ fullyResolved = false;
272
+ }
273
+ }
274
+ else {
275
+ // NOTE: do not store hash to cache since it is only a partial hash
276
+ fullyResolved = false;
268
277
  }
269
278
  });
270
279
  }
@@ -275,10 +284,12 @@ class TaskHasherImpl {
275
284
  // this may occur if dependency is not an npm package
276
285
  // but rather symlinked in node_modules or it's pointing to a remote git repo
277
286
  // in this case we have no information about the versioning of the given package
278
- partialHash = `__${targetProjectName}__`;
287
+ partialHash = `__${projectName}__`;
288
+ }
289
+ if (fullyResolved) {
290
+ this.externalDepsHashCache[projectName] = partialHash;
279
291
  }
280
- this.externalDepsHashCache[targetProjectName] = partialHash;
281
- return partialHash;
292
+ return { fullyResolved, hash: partialHash };
282
293
  }
283
294
  hashTarget(projectName, targetName, selfInputs) {
284
295
  const projectNode = this.projectGraph.nodes[projectName];
@@ -293,7 +304,7 @@ class TaskHasherImpl {
293
304
  target.executor.startsWith(`@nx/`)) {
294
305
  const executorPackage = target.executor.split(':')[0];
295
306
  const executorNodeName = this.findExternalDependencyNodeName(executorPackage);
296
- hash = this.hashExternalDependency(projectName, executorNodeName);
307
+ hash = this.hashExternalDependency(executorNodeName).hash;
297
308
  }
298
309
  else {
299
310
  // use command external dependencies if available to construct the hash
@@ -306,7 +317,7 @@ class TaskHasherImpl {
306
317
  const externalDependencies = input['externalDependencies'];
307
318
  for (let dep of externalDependencies) {
308
319
  dep = this.findExternalDependencyNodeName(dep);
309
- partialHashes.push(this.hashExternalDependency(projectName, dep));
320
+ partialHashes.push(this.hashExternalDependency(dep).hash);
310
321
  }
311
322
  }
312
323
  }
@@ -0,0 +1,2 @@
1
+ import { Tree } from '../../generators/tree';
2
+ export default function updateOutputsGlobs(tree: Tree): Promise<void>;
@@ -0,0 +1,44 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const tslib_1 = require("tslib");
4
+ const project_configuration_1 = require("../../generators/utils/project-configuration");
5
+ const format_changed_files_with_prettier_if_available_1 = require("../../generators/internal-utils/format-changed-files-with-prettier-if-available");
6
+ const json_1 = require("../../generators/utils/json");
7
+ function replaceOutput(output) {
8
+ // replace {projectRoot}/folder/*.(js|map|ts) to {projectRoot}/folder/*.{js,map,ts}
9
+ const regex = /\(([^)]+)\)/g;
10
+ return output.replace(regex, (match, group1) => {
11
+ let replacements = group1.split('|').join(',');
12
+ return `{${replacements}}`;
13
+ });
14
+ }
15
+ function updateOutputsGlobs(tree) {
16
+ var _a;
17
+ return tslib_1.__awaiter(this, void 0, void 0, function* () {
18
+ for (const [projectName, projectConfiguration] of (0, project_configuration_1.getProjects)(tree).entries()) {
19
+ for (const [targetName, targetConfiguration] of Object.entries((_a = projectConfiguration.targets) !== null && _a !== void 0 ? _a : {})) {
20
+ if (!Array.isArray(targetConfiguration.outputs)) {
21
+ continue;
22
+ }
23
+ targetConfiguration.outputs =
24
+ targetConfiguration.outputs.map(replaceOutput);
25
+ }
26
+ (0, project_configuration_1.updateProjectConfiguration)(tree, projectName, projectConfiguration);
27
+ }
28
+ if (tree.exists('nx.json')) {
29
+ (0, json_1.updateJson)(tree, 'nx.json', (json) => {
30
+ var _a;
31
+ for (const [, targetConfiguration] of Object.entries((_a = json.targetDefaults) !== null && _a !== void 0 ? _a : {})) {
32
+ if (!Array.isArray(targetConfiguration.outputs)) {
33
+ continue;
34
+ }
35
+ targetConfiguration.outputs =
36
+ targetConfiguration.outputs.map(replaceOutput);
37
+ }
38
+ return json;
39
+ });
40
+ }
41
+ yield (0, format_changed_files_with_prettier_if_available_1.formatChangedFilesWithPrettierIfAvailable)(tree);
42
+ });
43
+ }
44
+ exports.default = updateOutputsGlobs;
@@ -37,14 +37,13 @@ export const enum WorkspaceErrors {
37
37
  Generic = 'Generic'
38
38
  }
39
39
  /** Get workspace config files based on provided globs */
40
- export function getConfigFiles(workspaceRoot: string, globs: Array<string>): Array<string>
40
+ export function getProjectConfigurations(workspaceRoot: string, globs: Array<string>, parseConfigurations: (arg0: Array<string>) => Record<string, object>): Record<string, object>
41
41
  export interface NxWorkspaceFiles {
42
42
  projectFileMap: Record<string, Array<FileData>>
43
43
  globalFiles: Array<FileData>
44
- configFiles: Array<string>
44
+ projectConfigurations: Record<string, object>
45
45
  }
46
- /** Throws exceptions */
47
- export function getWorkspaceFilesNative(workspaceRoot: string, globs: Array<string>): NxWorkspaceFiles
46
+ export function getWorkspaceFilesNative(workspaceRoot: string, globs: Array<string>, parseConfigurations: (arg0: Array<string>) => Record<string, object>): NxWorkspaceFiles
48
47
  export class Watcher {
49
48
  origin: string
50
49
  /**
@@ -246,7 +246,7 @@ if (!nativeBinding) {
246
246
  throw new Error(`Failed to load native binding`)
247
247
  }
248
248
 
249
- const { expandOutputs, remove, copy, hashArray, hashFile, hashFiles, hashFilesMatchingGlobs, EventType, Watcher, WorkspaceErrors, getConfigFiles, getWorkspaceFilesNative } = nativeBinding
249
+ const { expandOutputs, remove, copy, hashArray, hashFile, hashFiles, hashFilesMatchingGlobs, EventType, Watcher, WorkspaceErrors, getProjectConfigurations, getWorkspaceFilesNative } = nativeBinding
250
250
 
251
251
  module.exports.expandOutputs = expandOutputs
252
252
  module.exports.remove = remove
@@ -258,5 +258,5 @@ module.exports.hashFilesMatchingGlobs = hashFilesMatchingGlobs
258
258
  module.exports.EventType = EventType
259
259
  module.exports.Watcher = Watcher
260
260
  module.exports.WorkspaceErrors = WorkspaceErrors
261
- module.exports.getConfigFiles = getConfigFiles
261
+ module.exports.getProjectConfigurations = getProjectConfigurations
262
262
  module.exports.getWorkspaceFilesNative = getWorkspaceFilesNative
@@ -17,6 +17,7 @@ const pnpm_parser_1 = require("./pnpm-parser");
17
17
  const yarn_parser_1 = require("./yarn-parser");
18
18
  const project_graph_pruning_1 = require("./project-graph-pruning");
19
19
  const package_json_1 = require("./utils/package-json");
20
+ const fileutils_1 = require("../../../utils/fileutils");
20
21
  const YARN_LOCK_FILE = 'yarn.lock';
21
22
  const NPM_LOCK_FILE = 'package-lock.json';
22
23
  const PNPM_LOCK_FILE = 'pnpm-lock.yaml';
@@ -69,7 +70,8 @@ function parseLockFile(packageManager = (0, package_manager_1.detectPackageManag
69
70
  try {
70
71
  if (packageManager === 'yarn') {
71
72
  const content = (0, fs_1.readFileSync)(YARN_LOCK_PATH, 'utf8');
72
- (0, yarn_parser_1.parseYarnLockfile)(content, builder);
73
+ const packageJson = (0, fileutils_1.readJsonFile)('package.json');
74
+ (0, yarn_parser_1.parseYarnLockfile)(content, packageJson, builder);
73
75
  return builder.getUpdatedProjectGraph();
74
76
  }
75
77
  if (packageManager === 'pnpm') {
@@ -124,10 +126,11 @@ exports.getLockFileName = getLockFileName;
124
126
  function createLockFile(packageJson, packageManager = (0, package_manager_1.detectPackageManager)(workspace_root_1.workspaceRoot)) {
125
127
  const normalizedPackageJson = (0, package_json_1.normalizePackageJson)(packageJson);
126
128
  const content = (0, fs_1.readFileSync)(getLockFileName(packageManager), 'utf8');
129
+ const rootPackageJson = (0, fileutils_1.readJsonFile)('package.json');
127
130
  const builder = new project_graph_builder_1.ProjectGraphBuilder();
128
131
  try {
129
132
  if (packageManager === 'yarn') {
130
- (0, yarn_parser_1.parseYarnLockfile)(content, builder);
133
+ (0, yarn_parser_1.parseYarnLockfile)(content, rootPackageJson, builder);
131
134
  const graph = builder.getUpdatedProjectGraph();
132
135
  const prunedGraph = (0, project_graph_pruning_1.pruneProjectGraph)(graph, packageJson);
133
136
  return (0, yarn_parser_1.stringifyYarnLockfile)(prunedGraph, content, normalizedPackageJson);
@@ -1,5 +1,5 @@
1
1
  import { ProjectGraphBuilder } from '../../../project-graph/project-graph-builder';
2
2
  import { NormalizedPackageJson } from './utils/package-json';
3
3
  import { ProjectGraph } from '../../../config/project-graph';
4
- export declare function parseYarnLockfile(lockFileContent: string, builder: ProjectGraphBuilder): void;
4
+ export declare function parseYarnLockfile(lockFileContent: string, packageJson: NormalizedPackageJson, builder: ProjectGraphBuilder): void;
5
5
  export declare function stringifyYarnLockfile(graph: ProjectGraph, rootLockFileContent: string, packageJson: NormalizedPackageJson): string;
@@ -6,12 +6,12 @@ const package_json_1 = require("./utils/package-json");
6
6
  const semver_1 = require("semver");
7
7
  const file_hasher_1 = require("../../../hasher/file-hasher");
8
8
  const object_sort_1 = require("../../../utils/object-sort");
9
- function parseYarnLockfile(lockFileContent, builder) {
9
+ function parseYarnLockfile(lockFileContent, packageJson, builder) {
10
10
  const { parseSyml } = require('@yarnpkg/parsers');
11
11
  const data = parseSyml(lockFileContent);
12
12
  // we use key => node map to avoid duplicate work when parsing keys
13
13
  const keyMap = new Map();
14
- addNodes(data, builder, keyMap);
14
+ addNodes(data, packageJson, builder, keyMap);
15
15
  addDependencies(data, builder, keyMap);
16
16
  }
17
17
  exports.parseYarnLockfile = parseYarnLockfile;
@@ -23,10 +23,11 @@ function getPackageNames(keys) {
23
23
  });
24
24
  return Array.from(packageNames);
25
25
  }
26
- function addNodes(_a, builder, keyMap) {
26
+ function addNodes(_a, packageJson, builder, keyMap) {
27
27
  var { __metadata } = _a, dependencies = tslib_1.__rest(_a, ["__metadata"]);
28
28
  const isBerry = !!__metadata;
29
29
  const nodes = new Map();
30
+ const combinedDeps = Object.assign(Object.assign(Object.assign(Object.assign({}, packageJson.dependencies), packageJson.devDependencies), packageJson.peerDependencies), packageJson.optionalDependencies);
30
31
  Object.entries(dependencies).forEach(([keys, snapshot]) => {
31
32
  // ignore workspace projects & patches
32
33
  if (snapshot.linkType === 'soft' || keys.includes('@patch:')) {
@@ -57,24 +58,21 @@ function addNodes(_a, builder, keyMap) {
57
58
  },
58
59
  };
59
60
  keyMap.set(key, node);
61
+ // use actual version so we can detect it later based on npm package's version
62
+ const mapKey = snapshot.version && version !== snapshot.version
63
+ ? snapshot.version
64
+ : version;
60
65
  if (!nodes.has(packageName)) {
61
- nodes.set(packageName, new Map([[version, node]]));
66
+ nodes.set(packageName, new Map([[mapKey, node]]));
62
67
  }
63
68
  else {
64
- nodes.get(packageName).set(version, node);
69
+ nodes.get(packageName).set(mapKey, node);
65
70
  }
66
71
  });
67
72
  });
68
73
  });
69
74
  for (const [packageName, versionMap] of nodes.entries()) {
70
- let hoistedNode;
71
- if (versionMap.size === 1) {
72
- hoistedNode = versionMap.values().next().value;
73
- }
74
- else {
75
- const hoistedVersion = getHoistedVersion(packageName);
76
- hoistedNode = versionMap.get(hoistedVersion);
77
- }
75
+ const hoistedNode = findHoistedNode(packageName, versionMap, combinedDeps);
78
76
  if (hoistedNode) {
79
77
  hoistedNode.name = `npm:${packageName}`;
80
78
  }
@@ -83,6 +81,34 @@ function addNodes(_a, builder, keyMap) {
83
81
  });
84
82
  }
85
83
  }
84
+ function findHoistedNode(packageName, versionMap, combinedDeps) {
85
+ const hoistedVersion = getHoistedVersion(packageName);
86
+ if (hoistedVersion) {
87
+ return versionMap.get(hoistedVersion);
88
+ }
89
+ const rootVersionSpecifier = combinedDeps[packageName];
90
+ if (!rootVersionSpecifier) {
91
+ return;
92
+ }
93
+ const versions = Array.from(versionMap.keys()).sort((a, b) => (0, semver_1.gt)(a, b) ? -1 : 1);
94
+ // take the highest version found
95
+ if (rootVersionSpecifier === '*') {
96
+ return versionMap.get(versions[0]);
97
+ }
98
+ // take version that satisfies the root version specifier
99
+ let version = versions.find((v) => (0, semver_1.satisfies)(v, rootVersionSpecifier));
100
+ if (!version) {
101
+ // try to find alias version
102
+ version = versions.find((v) => versionMap.get(v).name === `npm:${packageName}@${rootVersionSpecifier}`);
103
+ }
104
+ if (!version) {
105
+ // try to find tarball package
106
+ version = versions.find((v) => versionMap.get(v).data.version !== v);
107
+ }
108
+ if (version) {
109
+ return versionMap.get(version);
110
+ }
111
+ }
86
112
  function findVersion(packageName, key, snapshot, isBerry) {
87
113
  const versionRange = key.slice(packageName.length + 1);
88
114
  // check for alias packages
@@ -1,11 +1,11 @@
1
1
  import { FileData, ProjectFileMap, ProjectGraph } from '../config/project-graph';
2
- import { ProjectsConfigurations } from '../config/workspace-json-project-json';
2
+ import { ProjectConfiguration, ProjectsConfigurations } from '../config/workspace-json-project-json';
3
3
  export declare function createProjectFileMapUsingProjectGraph(graph: ProjectGraph): Promise<ProjectFileMap>;
4
4
  export declare function createProjectFileMap(projectsConfigurations: ProjectsConfigurations, allWorkspaceFiles: FileData[]): {
5
5
  projectFileMap: ProjectFileMap;
6
6
  allWorkspaceFiles: FileData[];
7
7
  };
8
- export declare function updateProjectFileMap(projectsConfigurations: ProjectsConfigurations, projectFileMap: ProjectFileMap, allWorkspaceFiles: FileData[], updatedFiles: Map<string, string>, deletedFiles: string[]): {
8
+ export declare function updateProjectFileMap(projectsConfigurations: Record<string, ProjectConfiguration>, projectFileMap: ProjectFileMap, allWorkspaceFiles: FileData[], updatedFiles: Map<string, string>, deletedFiles: string[]): {
9
9
  projectFileMap: ProjectFileMap;
10
10
  allWorkspaceFiles: FileData[];
11
11
  };
@@ -40,7 +40,7 @@ function createProjectFileMap(projectsConfigurations, allWorkspaceFiles) {
40
40
  exports.createProjectFileMap = createProjectFileMap;
41
41
  function updateProjectFileMap(projectsConfigurations, projectFileMap, allWorkspaceFiles, updatedFiles, deletedFiles) {
42
42
  var _a, _b;
43
- const projectRootMappings = (0, find_project_for_path_1.createProjectRootMappingsFromProjectConfigurations)(projectsConfigurations.projects);
43
+ const projectRootMappings = (0, find_project_for_path_1.createProjectRootMappingsFromProjectConfigurations)(projectsConfigurations);
44
44
  for (const f of updatedFiles.keys()) {
45
45
  const matchingProjectFiles = (_a = projectFileMap[(0, find_project_for_path_1.findProjectForPath)(f, projectRootMappings)]) !== null && _a !== void 0 ? _a : [];
46
46
  if (matchingProjectFiles) {
@@ -1,4 +1,4 @@
1
- import { ProjectsConfigurations } from '../../config/workspace-json-project-json';
1
+ import { ProjectConfiguration, ProjectsConfigurations } from '../../config/workspace-json-project-json';
2
2
  import { NxJsonConfiguration } from '../../config/nx-json';
3
3
  import { FileData } from '../../config/project-graph';
4
4
  /**
@@ -18,4 +18,4 @@ export declare function retrieveWorkspaceFiles(workspaceRoot: string, nxJson: Nx
18
18
  * @param workspaceRoot
19
19
  * @param nxJson
20
20
  */
21
- export declare function retrieveProjectConfigurations(workspaceRoot: string, nxJson: NxJsonConfiguration): Promise<ProjectsConfigurations>;
21
+ export declare function retrieveProjectConfigurations(workspaceRoot: string, nxJson: NxJsonConfiguration): Promise<Record<string, ProjectConfiguration>>;