diff --git a/apps/app/public/common.css b/apps/app/public/common.css
index 3136f6be..12059887 100644
--- a/apps/app/public/common.css
+++ b/apps/app/public/common.css
@@ -1 +1,1673 @@
-/*! tailwindcss v3.3.5 | MIT License | https://tailwindcss.com*/*,: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:Manrope,sans-serif;font-variation-settings:normal;line-height:1.5;-moz-tab-size:4;tab-size:4}body{line-height:inherit;margin:0}h1,h2,h3,h4{font-size:inherit;font-weight:inherit}a{color:inherit;text-decoration:inherit}b{font-weight:bolder}code{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace;font-size:1em}button,select{font-feature-settings:inherit;color:inherit;font-family:inherit;font-size:100%;font-variation-settings:inherit;font-weight:inherit;line-height:inherit;margin:0;padding:0;text-transform:none}[type=button],button{-webkit-appearance:button;background-color:transparent;background-image:none}::-webkit-inner-spin-button,::-webkit-outer-spin-button{height:auto}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}h1,h2,h3,h4,p,ul{margin:0}ul{list-style:none;padding:0}button{cursor:pointer}iframe,img,svg{display:block;vertical-align:middle}img{height:auto;max-width:100%}*,: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-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--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(138,219,201,.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-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--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(138,219,201,.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: }.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}}.pointer-events-none{pointer-events:none}.fixed{position:fixed}.absolute{position:absolute}.relative{position:relative}.inset-0{inset:0}.bottom-2{bottom:.5rem}.right-0{right:0}.right-2{right:.5rem}.top-0{top:0}.top-2{top:.5rem}.-z-50{z-index:-50}.z-10{z-index:10}.z-50{z-index:50}.m-2{margin:.5rem}.-my-1{margin-bottom:-.25rem;margin-top:-.25rem}.mx-auto{margin-left:auto;margin-right:auto}.mb-0{margin-bottom:0}.mb-2{margin-bottom:.5rem}.mb-3{margin-bottom:.75rem}.mb-4{margin-bottom:1rem}.ml-1{margin-left:.25rem}.ml-10{margin-left:2.5rem}.ml-2{margin-left:.5rem}.ml-4{margin-left:1rem}.mr-1{margin-right:.25rem}.mr-2{margin-right:.5rem}.mr-3{margin-right:.75rem}.mt-1{margin-top:.25rem}.mt-10{margin-top:2.5rem}.mt-2{margin-top:.5rem}.inline-block{display:inline-block}.flex{display:flex}.inline-flex{display:inline-flex}.h-16{height:4rem}.h-4{height:1rem}.h-45{height:11.93rem}.h-5{height:1.25rem}.h-7{height:1.75rem}.h-72{height:18rem}.h-8{height:2rem}.h-80{height:20rem}.h-auto{height:auto}.h-full{height:100%}.h-screen{height:100vh}.max-h-60{max-height:15rem}.w-20{width:5rem}.w-4{width:1rem}.w-44{width:11rem}.w-5{width:1.25rem}.w-60{width:15rem}.w-65{width:16.5rem}.w-7{width:1.75rem}.w-80{width:20rem}.w-full{width:100%}.max-w-full{max-width:100%}.max-w-xs{max-width:20rem}.flex-1{flex:1 1 0%}.flex-shrink-0{flex-shrink:0}@keyframes pulse{50%{opacity:.5}}.animate-pulse{animation:pulse 2s cubic-bezier(.4,0,.6,1) infinite}.cursor-pointer{cursor:pointer}.touch-none{touch-action:none}.select-none{user-select:none}.appearance-none{appearance:none}.flex-col{flex-direction:column}.flex-wrap{flex-wrap:wrap}.items-center{align-items:center}.justify-center{justify-content:center}.justify-between{justify-content:space-between}.gap-2{gap:.5rem}.gap-3{gap:.75rem}.space-x-2>:not([hidden])~:not([hidden]){--tw-space-x-reverse:0;margin-left:calc(.5rem*(1 - var(--tw-space-x-reverse)));margin-right:calc(.5rem*var(--tw-space-x-reverse))}.space-y-4>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-bottom:calc(1rem*var(--tw-space-y-reverse));margin-top:calc(1rem*(1 - var(--tw-space-y-reverse)))}.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)))}.overflow-hidden,.truncate{overflow:hidden}.truncate{text-overflow:ellipsis;white-space:nowrap}.break-words{overflow-wrap:break-word}.break-all{word-break:break-all}.rounded{border-radius:.25rem}.rounded-full{border-radius:9999px}.rounded-lg{border-radius:.5rem}.rounded-md{border-radius:.375rem}.rounded-b-lg{border-bottom-left-radius:.5rem;border-bottom-right-radius:.5rem}.rounded-bl-md{border-bottom-left-radius:.375rem}.rounded-tr{border-top-right-radius:.25rem}.border{border-width:1px}.border-2{border-width:2px}.border-b{border-bottom-width:1px}.border-t{border-top-width:1px}.border-solid{border-style:solid}.border-gray-100{--tw-border-opacity:1;border-color:rgb(243 244 246/var(--tw-border-opacity))}.border-neargreen-200{--tw-border-opacity:1;border-color:rgb(51 142 123/var(--tw-border-opacity))}.bg-black{--tw-bg-opacity:1;background-color:rgb(27 27 27/var(--tw-bg-opacity))}.bg-gray-100{--tw-bg-opacity:1;background-color:rgb(243 244 246/var(--tw-bg-opacity))}.bg-gray-200{--tw-bg-opacity:1;background-color:rgb(229 231 235/var(--tw-bg-opacity))}.bg-gray-400{--tw-bg-opacity:1;background-color:rgb(156 163 175/var(--tw-bg-opacity))}.bg-gray-50{--tw-bg-opacity:1;background-color:rgb(249 250 251/var(--tw-bg-opacity))}.bg-green-500{--tw-bg-opacity:1;background-color:rgb(13 73 74/var(--tw-bg-opacity))}.bg-neargreen-200{--tw-bg-opacity:1;background-color:rgb(51 142 123/var(--tw-bg-opacity))}.bg-warning-light{--tw-bg-opacity:1;background-color:rgb(235 199 199/var(--tw-bg-opacity))}.bg-white{--tw-bg-opacity:1;background-color:rgb(255 255 255/var(--tw-bg-opacity))}.bg-opacity-10{--tw-bg-opacity:0.1}.bg-opacity-90{--tw-bg-opacity:0.9}.fill-current{fill:currentColor}.fill-white{fill:#fff}.p-0{padding:0}.p-1{padding:.25rem}.p-3{padding:.75rem}.px-1{padding-left:.25rem;padding-right:.25rem}.px-2{padding-left:.5rem;padding-right:.5rem}.px-3{padding-left:.75rem;padding-right:.75rem}.py-1{padding-bottom:.25rem;padding-top:.25rem}.py-2{padding-bottom:.5rem;padding-top:.5rem}.py-3{padding-bottom:.75rem;padding-top:.75rem}.py-4{padding-bottom:1rem;padding-top:1rem}.pb-2{padding-bottom:.5rem}.pr-2{padding-right:.5rem}.pt-1{padding-top:.25rem}.pt-3{padding-top:.75rem}.pt-4{padding-top:1rem}.text-center{text-align:center}.text-right{text-align:right}.align-middle{vertical-align:middle}.text-3xl{font-size:1.875rem;line-height:2.25rem}.text-lg{font-size:1.125rem;line-height:1.75rem}.text-sm{font-size:.875rem;line-height:1.25rem}.text-xl{font-size:1.25rem;line-height:1.75rem}.text-xs{font-size:.75rem;line-height:1rem}.font-bold{font-weight:700}.font-medium{font-weight:500}.font-normal{font-weight:400}.font-semibold{font-weight:600}.font-thin{font-weight:100}.leading-6{line-height:1.5rem}.leading-8{line-height:2rem}.text-black{--tw-text-opacity:1;color:rgb(27 27 27/var(--tw-text-opacity))}.text-blue-600{--tw-text-opacity:1;color:rgb(128 209 191/var(--tw-text-opacity))}.text-gray-400{--tw-text-opacity:1;color:rgb(156 163 175/var(--tw-text-opacity))}.text-gray-500{--tw-text-opacity:1;color:rgb(107 114 128/var(--tw-text-opacity))}.text-gray-600{--tw-text-opacity:1;color:rgb(75 85 99/var(--tw-text-opacity))}.text-gray-700{--tw-text-opacity:1;color:rgb(55 65 81/var(--tw-text-opacity))}.text-green-500{--tw-text-opacity:1;color:rgb(13 73 74/var(--tw-text-opacity))}.text-warning-dark{--tw-text-opacity:1;color:rgb(191 79 79/var(--tw-text-opacity))}.text-white{--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity))}.no-underline{text-decoration-line:none}.shadow{--tw-shadow:0 1px 3px 0 rgba(0,0,0,.1),0 1px 2px -1px rgba(0,0,0,.1);--tw-shadow-colored:0 1px 3px 0 var(--tw-shadow-color),0 1px 2px -1px var(--tw-shadow-color)}.shadow,.shadow-lg{box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.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-md{--tw-shadow:0 4px 6px -1px rgba(0,0,0,.1),0 2px 4px -2px rgba(0,0,0,.1);--tw-shadow-colored:0 4px 6px -1px var(--tw-shadow-color),0 2px 4px -2px var(--tw-shadow-color)}.shadow-md,.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)}.outline-none{outline:2px solid transparent;outline-offset:2px}.drop-shadow-md{--tw-drop-shadow:drop-shadow(0 4px 3px rgba(0,0,0,.07)) drop-shadow(0 2px 2px rgba(0,0,0,.06));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-colors{transition-duration:.15s;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke;transition-timing-function:cubic-bezier(.4,0,.2,1)}.ease-out{transition-timing-function:cubic-bezier(0,0,.2,1)}b{font-weight:600}.soft-shadow{box-shadow:0 2.6px 6.3px rgba(0,0,0,.06),0 6.3px 16px rgba(0,0,0,.04),0 12px 32.6px rgba(0,0,0,.027),0 21.4px 67.2px rgba(0,0,0,.018),0 43px 184px rgba(0,0,0,.011)}
\ No newline at end of file
+/*
+! tailwindcss v3.3.5 | MIT License | https://tailwindcss.com
+*//*
+1. Prevent padding and border from affecting element width. (https://github.com/mozdevs/cssremedy/issues/4)
+2. Allow adding a border to an element by just adding a border-width. (https://github.com/tailwindcss/tailwindcss/pull/116)
+*/
+
+*,
+::before,
+::after {
+ box-sizing: border-box; /* 1 */
+ border-width: 0; /* 2 */
+ border-style: solid; /* 2 */
+ border-color: #e5e7eb; /* 2 */
+}
+
+::before,
+::after {
+ --tw-content: '';
+}
+
+/*
+1. Use a consistent sensible line-height in all browsers.
+2. Prevent adjustments of font size after orientation changes in iOS.
+3. Use a more readable tab size.
+4. Use the user's configured `sans` font-family by default.
+5. Use the user's configured `sans` font-feature-settings by default.
+6. Use the user's configured `sans` font-variation-settings by default.
+*/
+
+html {
+ line-height: 1.5; /* 1 */
+ -webkit-text-size-adjust: 100%; /* 2 */
+ -moz-tab-size: 4; /* 3 */
+ -o-tab-size: 4;
+ tab-size: 4; /* 3 */
+ font-family: 'Manrope', sans-serif; /* 4 */
+ font-feature-settings: normal; /* 5 */
+ font-variation-settings: normal; /* 6 */
+}
+
+/*
+1. Remove the margin in all browsers.
+2. Inherit line-height from `html` so users can set them as a class directly on the `html` element.
+*/
+
+body {
+ margin: 0; /* 1 */
+ line-height: inherit; /* 2 */
+}
+
+/*
+1. Add the correct height in Firefox.
+2. Correct the inheritance of border color in Firefox. (https://bugzilla.mozilla.org/show_bug.cgi?id=190655)
+3. Ensure horizontal rules are visible by default.
+*/
+
+hr {
+ height: 0; /* 1 */
+ color: inherit; /* 2 */
+ border-top-width: 1px; /* 3 */
+}
+
+/*
+Add the correct text decoration in Chrome, Edge, and Safari.
+*/
+
+abbr:where([title]) {
+ -webkit-text-decoration: underline dotted;
+ text-decoration: underline dotted;
+}
+
+/*
+Remove the default font size and weight for headings.
+*/
+
+h1,
+h2,
+h3,
+h4,
+h5,
+h6 {
+ font-size: inherit;
+ font-weight: inherit;
+}
+
+/*
+Reset links to optimize for opt-in styling instead of opt-out.
+*/
+
+a {
+ color: inherit;
+ text-decoration: inherit;
+}
+
+/*
+Add the correct font weight in Edge and Safari.
+*/
+
+b,
+strong {
+ font-weight: bolder;
+}
+
+/*
+1. Use the user's configured `mono` font family by default.
+2. Correct the odd `em` font sizing in all browsers.
+*/
+
+code,
+kbd,
+samp,
+pre {
+ font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace; /* 1 */
+ font-size: 1em; /* 2 */
+}
+
+/*
+Add the correct font size in all browsers.
+*/
+
+small {
+ font-size: 80%;
+}
+
+/*
+Prevent `sub` and `sup` elements from affecting the line height in all browsers.
+*/
+
+sub,
+sup {
+ font-size: 75%;
+ line-height: 0;
+ position: relative;
+ vertical-align: baseline;
+}
+
+sub {
+ bottom: -0.25em;
+}
+
+sup {
+ top: -0.5em;
+}
+
+/*
+1. Remove text indentation from table contents in Chrome and Safari. (https://bugs.chromium.org/p/chromium/issues/detail?id=999088, https://bugs.webkit.org/show_bug.cgi?id=201297)
+2. Correct table border color inheritance in all Chrome and Safari. (https://bugs.chromium.org/p/chromium/issues/detail?id=935729, https://bugs.webkit.org/show_bug.cgi?id=195016)
+3. Remove gaps between table borders by default.
+*/
+
+table {
+ text-indent: 0; /* 1 */
+ border-color: inherit; /* 2 */
+ border-collapse: collapse; /* 3 */
+}
+
+/*
+1. Change the font styles in all browsers.
+2. Remove the margin in Firefox and Safari.
+3. Remove default padding in all browsers.
+*/
+
+button,
+input,
+optgroup,
+select,
+textarea {
+ font-family: inherit; /* 1 */
+ font-feature-settings: inherit; /* 1 */
+ font-variation-settings: inherit; /* 1 */
+ font-size: 100%; /* 1 */
+ font-weight: inherit; /* 1 */
+ line-height: inherit; /* 1 */
+ color: inherit; /* 1 */
+ margin: 0; /* 2 */
+ padding: 0; /* 3 */
+}
+
+/*
+Remove the inheritance of text transform in Edge and Firefox.
+*/
+
+button,
+select {
+ text-transform: none;
+}
+
+/*
+1. Correct the inability to style clickable types in iOS and Safari.
+2. Remove default button styles.
+*/
+
+button,
+[type='button'],
+[type='reset'],
+[type='submit'] {
+ -webkit-appearance: button; /* 1 */
+ background-color: transparent; /* 2 */
+ background-image: none; /* 2 */
+}
+
+/*
+Use the modern Firefox focus style for all focusable elements.
+*/
+
+:-moz-focusring {
+ outline: auto;
+}
+
+/*
+Remove the additional `:invalid` styles in Firefox. (https://github.com/mozilla/gecko-dev/blob/2f9eacd9d3d995c937b4251a5557d95d494c9be1/layout/style/res/forms.css#L728-L737)
+*/
+
+:-moz-ui-invalid {
+ box-shadow: none;
+}
+
+/*
+Add the correct vertical alignment in Chrome and Firefox.
+*/
+
+progress {
+ vertical-align: baseline;
+}
+
+/*
+Correct the cursor style of increment and decrement buttons in Safari.
+*/
+
+::-webkit-inner-spin-button,
+::-webkit-outer-spin-button {
+ height: auto;
+}
+
+/*
+1. Correct the odd appearance in Chrome and Safari.
+2. Correct the outline style in Safari.
+*/
+
+[type='search'] {
+ -webkit-appearance: textfield; /* 1 */
+ outline-offset: -2px; /* 2 */
+}
+
+/*
+Remove the inner padding in Chrome and Safari on macOS.
+*/
+
+::-webkit-search-decoration {
+ -webkit-appearance: none;
+}
+
+/*
+1. Correct the inability to style clickable types in iOS and Safari.
+2. Change font properties to `inherit` in Safari.
+*/
+
+::-webkit-file-upload-button {
+ -webkit-appearance: button; /* 1 */
+ font: inherit; /* 2 */
+}
+
+/*
+Add the correct display in Chrome and Safari.
+*/
+
+summary {
+ display: list-item;
+}
+
+/*
+Removes the default spacing and border for appropriate elements.
+*/
+
+blockquote,
+dl,
+dd,
+h1,
+h2,
+h3,
+h4,
+h5,
+h6,
+hr,
+figure,
+p,
+pre {
+ margin: 0;
+}
+
+fieldset {
+ margin: 0;
+ padding: 0;
+}
+
+legend {
+ padding: 0;
+}
+
+ol,
+ul,
+menu {
+ list-style: none;
+ margin: 0;
+ padding: 0;
+}
+
+/*
+Reset default styling for dialogs.
+*/
+dialog {
+ padding: 0;
+}
+
+/*
+Prevent resizing textareas horizontally by default.
+*/
+
+textarea {
+ resize: vertical;
+}
+
+/*
+1. Reset the default placeholder opacity in Firefox. (https://github.com/tailwindlabs/tailwindcss/issues/3300)
+2. Set the default placeholder color to the user's configured gray 400 color.
+*/
+
+input::-moz-placeholder, textarea::-moz-placeholder {
+ opacity: 1; /* 1 */
+ color: #9ca3af; /* 2 */
+}
+
+input::placeholder,
+textarea::placeholder {
+ opacity: 1; /* 1 */
+ color: #9ca3af; /* 2 */
+}
+
+/*
+Set the default cursor for buttons.
+*/
+
+button,
+[role="button"] {
+ cursor: pointer;
+}
+
+/*
+Make sure disabled buttons don't get the pointer cursor.
+*/
+:disabled {
+ cursor: default;
+}
+
+/*
+1. Make replaced elements `display: block` by default. (https://github.com/mozdevs/cssremedy/issues/14)
+2. Add `vertical-align: middle` to align replaced elements more sensibly by default. (https://github.com/jensimmons/cssremedy/issues/14#issuecomment-634934210)
+ This can trigger a poorly considered lint error in some tools but is included by design.
+*/
+
+img,
+svg,
+video,
+canvas,
+audio,
+iframe,
+embed,
+object {
+ display: block; /* 1 */
+ vertical-align: middle; /* 2 */
+}
+
+/*
+Constrain images and videos to the parent width and preserve their intrinsic aspect ratio. (https://github.com/mozdevs/cssremedy/issues/14)
+*/
+
+img,
+video {
+ max-width: 100%;
+ height: auto;
+}
+
+/* Make elements with the HTML hidden attribute stay hidden by default */
+[hidden] {
+ display: none;
+}
+
+*, ::before, ::after {
+ --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-gradient-from-position: ;
+ --tw-gradient-via-position: ;
+ --tw-gradient-to-position: ;
+ --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: rgb(138 219 201 / 0.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-gradient-from-position: ;
+ --tw-gradient-via-position: ;
+ --tw-gradient-to-position: ;
+ --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: rgb(138 219 201 / 0.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: ;
+}
+.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;
+ }
+}
+.pointer-events-none {
+ pointer-events: none;
+}
+.fixed {
+ position: fixed;
+}
+.absolute {
+ position: absolute;
+}
+.relative {
+ position: relative;
+}
+.inset-0 {
+ inset: 0px;
+}
+.bottom-2 {
+ bottom: 0.5rem;
+}
+.left-\[50\%\] {
+ left: 50%;
+}
+.right-0 {
+ right: 0px;
+}
+.right-2 {
+ right: 0.5rem;
+}
+.top-0 {
+ top: 0px;
+}
+.top-2 {
+ top: 0.5rem;
+}
+.top-\[50\%\] {
+ top: 50%;
+}
+.-z-50 {
+ z-index: -50;
+}
+.z-0 {
+ z-index: 0;
+}
+.z-10 {
+ z-index: 10;
+}
+.z-50 {
+ z-index: 50;
+}
+.order-1 {
+ order: 1;
+}
+.order-2 {
+ order: 2;
+}
+.col-span-2 {
+ grid-column: span 2 / span 2;
+}
+.m-2 {
+ margin: 0.5rem;
+}
+.-my-1 {
+ margin-top: -0.25rem;
+ margin-bottom: -0.25rem;
+}
+.mx-3 {
+ margin-left: 0.75rem;
+ margin-right: 0.75rem;
+}
+.mx-auto {
+ margin-left: auto;
+ margin-right: auto;
+}
+.-mt-14 {
+ margin-top: -3.5rem;
+}
+.-mt-48 {
+ margin-top: -12rem;
+}
+.mb-0 {
+ margin-bottom: 0px;
+}
+.mb-10 {
+ margin-bottom: 2.5rem;
+}
+.mb-2 {
+ margin-bottom: 0.5rem;
+}
+.mb-3 {
+ margin-bottom: 0.75rem;
+}
+.mb-4 {
+ margin-bottom: 1rem;
+}
+.ml-1 {
+ margin-left: 0.25rem;
+}
+.ml-10 {
+ margin-left: 2.5rem;
+}
+.ml-2 {
+ margin-left: 0.5rem;
+}
+.ml-4 {
+ margin-left: 1rem;
+}
+.ml-auto {
+ margin-left: auto;
+}
+.mr-1 {
+ margin-right: 0.25rem;
+}
+.mr-2 {
+ margin-right: 0.5rem;
+}
+.mr-3 {
+ margin-right: 0.75rem;
+}
+.mt-1 {
+ margin-top: 0.25rem;
+}
+.mt-10 {
+ margin-top: 2.5rem;
+}
+.mt-2 {
+ margin-top: 0.5rem;
+}
+.block {
+ display: block;
+}
+.inline-block {
+ display: inline-block;
+}
+.flex {
+ display: flex;
+}
+.inline-flex {
+ display: inline-flex;
+}
+.table {
+ display: table;
+}
+.grid {
+ display: grid;
+}
+.h-10 {
+ height: 2.5rem;
+}
+.h-16 {
+ height: 4rem;
+}
+.h-3 {
+ height: 0.75rem;
+}
+.h-4 {
+ height: 1rem;
+}
+.h-45 {
+ height: 11.93rem;
+}
+.h-5 {
+ height: 1.25rem;
+}
+.h-7 {
+ height: 1.75rem;
+}
+.h-72 {
+ height: 18rem;
+}
+.h-8 {
+ height: 2rem;
+}
+.h-80 {
+ height: 20rem;
+}
+.h-9 {
+ height: 2.25rem;
+}
+.h-\[57px\] {
+ height: 57px;
+}
+.h-auto {
+ height: auto;
+}
+.h-full {
+ height: 100%;
+}
+.h-screen {
+ height: 100vh;
+}
+.max-h-60 {
+ max-height: 15rem;
+}
+.max-h-\[85vh\] {
+ max-height: 85vh;
+}
+.w-10 {
+ width: 2.5rem;
+}
+.w-14 {
+ width: 3.5rem;
+}
+.w-20 {
+ width: 5rem;
+}
+.w-24 {
+ width: 6rem;
+}
+.w-3 {
+ width: 0.75rem;
+}
+.w-32 {
+ width: 8rem;
+}
+.w-36 {
+ width: 9rem;
+}
+.w-4 {
+ width: 1rem;
+}
+.w-44 {
+ width: 11rem;
+}
+.w-5 {
+ width: 1.25rem;
+}
+.w-60 {
+ width: 15rem;
+}
+.w-65 {
+ width: 16.5rem;
+}
+.w-7 {
+ width: 1.75rem;
+}
+.w-80 {
+ width: 20rem;
+}
+.w-9 {
+ width: 2.25rem;
+}
+.w-full {
+ width: 100%;
+}
+.min-w-full {
+ min-width: 100%;
+}
+.max-w-\[110px\] {
+ max-width: 110px;
+}
+.max-w-\[120px\] {
+ max-width: 120px;
+}
+.max-w-\[450px\] {
+ max-width: 450px;
+}
+.max-w-\[80px\] {
+ max-width: 80px;
+}
+.max-w-full {
+ max-width: 100%;
+}
+.max-w-xs {
+ max-width: 20rem;
+}
+.flex-1 {
+ flex: 1 1 0%;
+}
+.flex-shrink-0 {
+ flex-shrink: 0;
+}
+.flex-grow {
+ flex-grow: 1;
+}
+.translate-x-\[-50\%\] {
+ --tw-translate-x: -50%;
+ 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));
+}
+.translate-y-\[-50\%\] {
+ --tw-translate-y: -50%;
+ 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-0 {
+ --tw-rotate: 0deg;
+ 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-180 {
+ --tw-rotate: 180deg;
+ 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));
+}
+.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));
+}
+@keyframes pulse {
+
+ 50% {
+ opacity: .5;
+ }
+}
+.animate-pulse {
+ animation: pulse 2s cubic-bezier(0.4, 0, 0.6, 1) infinite;
+}
+.cursor-pointer {
+ cursor: pointer;
+}
+.touch-none {
+ touch-action: none;
+}
+.select-none {
+ -webkit-user-select: none;
+ -moz-user-select: none;
+ user-select: none;
+}
+.appearance-none {
+ -webkit-appearance: none;
+ -moz-appearance: none;
+ appearance: none;
+}
+.grid-flow-col {
+ grid-auto-flow: column;
+}
+.grid-cols-1 {
+ grid-template-columns: repeat(1, minmax(0, 1fr));
+}
+.grid-cols-2 {
+ grid-template-columns: repeat(2, minmax(0, 1fr));
+}
+.grid-rows-2 {
+ grid-template-rows: repeat(2, minmax(0, 1fr));
+}
+.grid-rows-3 {
+ grid-template-rows: repeat(3, minmax(0, 1fr));
+}
+.flex-row {
+ flex-direction: row;
+}
+.flex-col {
+ flex-direction: column;
+}
+.flex-wrap {
+ flex-wrap: wrap;
+}
+.items-center {
+ align-items: center;
+}
+.justify-end {
+ justify-content: flex-end;
+}
+.justify-center {
+ justify-content: center;
+}
+.justify-between {
+ justify-content: space-between;
+}
+.gap-2 {
+ gap: 0.5rem;
+}
+.gap-3 {
+ gap: 0.75rem;
+}
+.gap-4 {
+ gap: 1rem;
+}
+.space-x-2 > :not([hidden]) ~ :not([hidden]) {
+ --tw-space-x-reverse: 0;
+ margin-right: calc(0.5rem * var(--tw-space-x-reverse));
+ margin-left: calc(0.5rem * calc(1 - var(--tw-space-x-reverse)));
+}
+.space-y-4 > :not([hidden]) ~ :not([hidden]) {
+ --tw-space-y-reverse: 0;
+ margin-top: calc(1rem * calc(1 - var(--tw-space-y-reverse)));
+ margin-bottom: calc(1rem * var(--tw-space-y-reverse));
+}
+.divide-y > :not([hidden]) ~ :not([hidden]) {
+ --tw-divide-y-reverse: 0;
+ border-top-width: calc(1px * calc(1 - var(--tw-divide-y-reverse)));
+ border-bottom-width: calc(1px * var(--tw-divide-y-reverse));
+}
+.divide-gray-200 > :not([hidden]) ~ :not([hidden]) {
+ --tw-divide-opacity: 1;
+ border-color: rgb(229 231 235 / var(--tw-divide-opacity));
+}
+.overflow-hidden {
+ overflow: hidden;
+}
+.overflow-x-auto {
+ overflow-x: auto;
+}
+.truncate {
+ overflow: hidden;
+ text-overflow: ellipsis;
+ white-space: nowrap;
+}
+.whitespace-nowrap {
+ white-space: nowrap;
+}
+.break-words {
+ overflow-wrap: break-word;
+}
+.break-all {
+ word-break: break-all;
+}
+.rounded {
+ border-radius: 0.25rem;
+}
+.rounded-\[10px\] {
+ border-radius: 10px;
+}
+.rounded-\[6px\] {
+ border-radius: 6px;
+}
+.rounded-full {
+ border-radius: 9999px;
+}
+.rounded-lg {
+ border-radius: 0.5rem;
+}
+.rounded-md {
+ border-radius: 0.375rem;
+}
+.rounded-xl {
+ border-radius: 0.75rem;
+}
+.rounded-b-lg {
+ border-bottom-right-radius: 0.5rem;
+ border-bottom-left-radius: 0.5rem;
+}
+.rounded-bl-md {
+ border-bottom-left-radius: 0.375rem;
+}
+.rounded-tr {
+ border-top-right-radius: 0.25rem;
+}
+.border {
+ border-width: 1px;
+}
+.border-2 {
+ border-width: 2px;
+}
+.border-b {
+ border-bottom-width: 1px;
+}
+.border-t {
+ border-top-width: 1px;
+}
+.border-solid {
+ border-style: solid;
+}
+.border-gray-100 {
+ --tw-border-opacity: 1;
+ border-color: rgb(243 244 246 / var(--tw-border-opacity));
+}
+.border-green-900\/10 {
+ border-color: rgb(0 33 34 / 0.1);
+}
+.border-neargreen-200 {
+ --tw-border-opacity: 1;
+ border-color: rgb(51 142 123 / var(--tw-border-opacity));
+}
+.bg-black {
+ --tw-bg-opacity: 1;
+ background-color: rgb(27 27 27 / var(--tw-bg-opacity));
+}
+.bg-blue-900\/10 {
+ background-color: rgb(76 189 187 / 0.1);
+}
+.bg-emerald-50 {
+ --tw-bg-opacity: 1;
+ background-color: rgb(236 253 245 / var(--tw-bg-opacity));
+}
+.bg-gray-100 {
+ --tw-bg-opacity: 1;
+ background-color: rgb(243 244 246 / var(--tw-bg-opacity));
+}
+.bg-gray-200 {
+ --tw-bg-opacity: 1;
+ background-color: rgb(229 231 235 / var(--tw-bg-opacity));
+}
+.bg-gray-300 {
+ --tw-bg-opacity: 1;
+ background-color: rgb(209 213 219 / var(--tw-bg-opacity));
+}
+.bg-gray-400 {
+ --tw-bg-opacity: 1;
+ background-color: rgb(156 163 175 / var(--tw-bg-opacity));
+}
+.bg-gray-50 {
+ --tw-bg-opacity: 1;
+ background-color: rgb(249 250 251 / var(--tw-bg-opacity));
+}
+.bg-green-100 {
+ --tw-bg-opacity: 1;
+ background-color: rgb(53 113 114 / var(--tw-bg-opacity));
+}
+.bg-green-500 {
+ --tw-bg-opacity: 1;
+ background-color: rgb(13 73 74 / var(--tw-bg-opacity));
+}
+.bg-neargreen-200 {
+ --tw-bg-opacity: 1;
+ background-color: rgb(51 142 123 / var(--tw-bg-opacity));
+}
+.bg-red-50 {
+ --tw-bg-opacity: 1;
+ background-color: rgb(254 242 242 / var(--tw-bg-opacity));
+}
+.bg-warning-light {
+ --tw-bg-opacity: 1;
+ background-color: rgb(235 199 199 / var(--tw-bg-opacity));
+}
+.bg-white {
+ --tw-bg-opacity: 1;
+ background-color: rgb(255 255 255 / var(--tw-bg-opacity));
+}
+.bg-yellow-50 {
+ --tw-bg-opacity: 1;
+ background-color: rgb(254 252 232 / var(--tw-bg-opacity));
+}
+.bg-opacity-10 {
+ --tw-bg-opacity: 0.1;
+}
+.bg-opacity-90 {
+ --tw-bg-opacity: 0.9;
+}
+.bg-hero-pattern {
+ background-image: url('/images/wavey-fingerprint.png');
+}
+.fill-current {
+ fill: currentColor;
+}
+.fill-white {
+ fill: #fff;
+}
+.p-0 {
+ padding: 0px;
+}
+.p-0\.5 {
+ padding: 0.125rem;
+}
+.p-1 {
+ padding: 0.25rem;
+}
+.p-1\.5 {
+ padding: 0.375rem;
+}
+.p-2 {
+ padding: 0.5rem;
+}
+.p-3 {
+ padding: 0.75rem;
+}
+.p-\[25px\] {
+ padding: 25px;
+}
+.px-1 {
+ padding-left: 0.25rem;
+ padding-right: 0.25rem;
+}
+.px-2 {
+ padding-left: 0.5rem;
+ padding-right: 0.5rem;
+}
+.px-3 {
+ padding-left: 0.75rem;
+ padding-right: 0.75rem;
+}
+.px-5 {
+ padding-left: 1.25rem;
+ padding-right: 1.25rem;
+}
+.px-6 {
+ padding-left: 1.5rem;
+ padding-right: 1.5rem;
+}
+.py-1 {
+ padding-top: 0.25rem;
+ padding-bottom: 0.25rem;
+}
+.py-2 {
+ padding-top: 0.5rem;
+ padding-bottom: 0.5rem;
+}
+.py-3 {
+ padding-top: 0.75rem;
+ padding-bottom: 0.75rem;
+}
+.py-4 {
+ padding-top: 1rem;
+ padding-bottom: 1rem;
+}
+.py-5 {
+ padding-top: 1.25rem;
+ padding-bottom: 1.25rem;
+}
+.py-8 {
+ padding-top: 2rem;
+ padding-bottom: 2rem;
+}
+.pb-2 {
+ padding-bottom: 0.5rem;
+}
+.pb-3 {
+ padding-bottom: 0.75rem;
+}
+.pb-5 {
+ padding-bottom: 1.25rem;
+}
+.pb-8 {
+ padding-bottom: 2rem;
+}
+.pl-2 {
+ padding-left: 0.5rem;
+}
+.pl-5 {
+ padding-left: 1.25rem;
+}
+.pl-6 {
+ padding-left: 1.5rem;
+}
+.pr-2 {
+ padding-right: 0.5rem;
+}
+.pr-4 {
+ padding-right: 1rem;
+}
+.pt-1 {
+ padding-top: 0.25rem;
+}
+.pt-14 {
+ padding-top: 3.5rem;
+}
+.pt-3 {
+ padding-top: 0.75rem;
+}
+.pt-4 {
+ padding-top: 1rem;
+}
+.pt-8 {
+ padding-top: 2rem;
+}
+.text-left {
+ text-align: left;
+}
+.text-center {
+ text-align: center;
+}
+.text-right {
+ text-align: right;
+}
+.align-middle {
+ vertical-align: middle;
+}
+.align-bottom {
+ vertical-align: bottom;
+}
+.text-2xl {
+ font-size: 1.5rem;
+ line-height: 2rem;
+}
+.text-3xl {
+ font-size: 1.875rem;
+ line-height: 2.25rem;
+}
+.text-lg {
+ font-size: 1.125rem;
+ line-height: 1.75rem;
+}
+.text-sm {
+ font-size: 0.875rem;
+ line-height: 1.25rem;
+}
+.text-xl {
+ font-size: 1.25rem;
+ line-height: 1.75rem;
+}
+.text-xs {
+ font-size: 0.75rem;
+ line-height: 1rem;
+}
+.font-bold {
+ font-weight: 700;
+}
+.font-medium {
+ font-weight: 500;
+}
+.font-normal {
+ font-weight: 400;
+}
+.font-semibold {
+ font-weight: 600;
+}
+.font-thin {
+ font-weight: 100;
+}
+.uppercase {
+ text-transform: uppercase;
+}
+.leading-6 {
+ line-height: 1.5rem;
+}
+.leading-7 {
+ line-height: 1.75rem;
+}
+.leading-8 {
+ line-height: 2rem;
+}
+.tracking-wider {
+ letter-spacing: 0.05em;
+}
+.text-black {
+ --tw-text-opacity: 1;
+ color: rgb(27 27 27 / var(--tw-text-opacity));
+}
+.text-blue-600 {
+ --tw-text-opacity: 1;
+ color: rgb(128 209 191 / var(--tw-text-opacity));
+}
+.text-emerald-500 {
+ --tw-text-opacity: 1;
+ color: rgb(16 185 129 / var(--tw-text-opacity));
+}
+.text-gray-400 {
+ --tw-text-opacity: 1;
+ color: rgb(156 163 175 / var(--tw-text-opacity));
+}
+.text-gray-500 {
+ --tw-text-opacity: 1;
+ color: rgb(107 114 128 / var(--tw-text-opacity));
+}
+.text-gray-600 {
+ --tw-text-opacity: 1;
+ color: rgb(75 85 99 / var(--tw-text-opacity));
+}
+.text-gray-700 {
+ --tw-text-opacity: 1;
+ color: rgb(55 65 81 / var(--tw-text-opacity));
+}
+.text-green-400 {
+ --tw-text-opacity: 1;
+ color: rgb(23 83 84 / var(--tw-text-opacity));
+}
+.text-green-500 {
+ --tw-text-opacity: 1;
+ color: rgb(13 73 74 / var(--tw-text-opacity));
+}
+.text-nearblue-600 {
+ --tw-text-opacity: 1;
+ color: rgb(75 85 99 / var(--tw-text-opacity));
+}
+.text-neargreen {
+ --tw-text-opacity: 1;
+ color: rgb(53 193 84 / var(--tw-text-opacity));
+}
+.text-red-500 {
+ --tw-text-opacity: 1;
+ color: rgb(239 68 68 / var(--tw-text-opacity));
+}
+.text-warning-dark {
+ --tw-text-opacity: 1;
+ color: rgb(191 79 79 / var(--tw-text-opacity));
+}
+.text-white {
+ --tw-text-opacity: 1;
+ color: rgb(255 255 255 / var(--tw-text-opacity));
+}
+.text-yellow-500 {
+ --tw-text-opacity: 1;
+ color: rgb(234 179 8 / var(--tw-text-opacity));
+}
+.no-underline {
+ text-decoration-line: none;
+}
+.shadow {
+ --tw-shadow: 0 1px 3px 0 rgb(0 0 0 / 0.1), 0 1px 2px -1px rgb(0 0 0 / 0.1);
+ --tw-shadow-colored: 0 1px 3px 0 var(--tw-shadow-color), 0 1px 2px -1px var(--tw-shadow-color);
+ box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);
+}
+.shadow-\[0_2px_10px\] {
+ --tw-shadow: 0 2px 10px;
+ --tw-shadow-colored: 0 2px 10px var(--tw-shadow-color);
+ box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);
+}
+.shadow-\[hsl\(206_22\%_7\%_\/_35\%\)_0px_10px_38px_-10px\2c _hsl\(206_22\%_7\%_\/_20\%\)_0px_10px_20px_-15px\] {
+ --tw-shadow: hsl(206 22% 7% / 35%) 0px 10px 38px -10px, hsl(206 22% 7% / 20%) 0px 10px 20px -15px;
+ --tw-shadow-colored: 0px 10px 38px -10px var(--tw-shadow-color), 0px 10px 20px -15px var(--tw-shadow-color);
+ box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);
+}
+.shadow-lg {
+ --tw-shadow: 0 10px 15px -3px rgb(0 0 0 / 0.1), 0 4px 6px -4px rgb(0 0 0 / 0.1);
+ --tw-shadow-colored: 0 10px 15px -3px var(--tw-shadow-color), 0 4px 6px -4px var(--tw-shadow-color);
+ box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);
+}
+.shadow-md {
+ --tw-shadow: 0 4px 6px -1px rgb(0 0 0 / 0.1), 0 2px 4px -2px rgb(0 0 0 / 0.1);
+ --tw-shadow-colored: 0 4px 6px -1px var(--tw-shadow-color), 0 2px 4px -2px var(--tw-shadow-color);
+ 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 rgb(0 0 0 / 0.05);
+ --tw-shadow-colored: 0 1px 2px 0 var(--tw-shadow-color);
+ box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);
+}
+.outline-none {
+ outline: 2px solid transparent;
+ outline-offset: 2px;
+}
+.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-inset {
+ --tw-ring-inset: inset;
+}
+.ring-gray-500\/10 {
+ --tw-ring-color: rgb(107 114 128 / 0.1);
+}
+.drop-shadow-md {
+ --tw-drop-shadow: drop-shadow(0 4px 3px rgb(0 0 0 / 0.07)) drop-shadow(0 2px 2px rgb(0 0 0 / 0.06));
+ 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-colors {
+ transition-property: color, background-color, border-color, text-decoration-color, fill, stroke;
+ transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
+ transition-duration: 150ms;
+}
+.transition-transform {
+ transition-property: transform;
+ transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
+ transition-duration: 150ms;
+}
+.duration-700 {
+ transition-duration: 700ms;
+}
+.duration-\[160ms\] {
+ transition-duration: 160ms;
+}
+.ease-out {
+ transition-timing-function: cubic-bezier(0, 0, 0.2, 1);
+}
+
+b,
+strong {
+ font-weight: 600;
+}
+
+pre[class*='language-'] {
+ margin: 0 !important;
+}
+
+pre[class*='language-']>code {
+ border-left: 4px solid #2d8f44 !important;
+ box-shadow: -1px 0px 0px 0px #2d8f44, 0px 0px 0px 1px #dfdfdf !important;
+}
+
+.soft-shadow {
+ box-shadow: 0 2.6px 6.3px rgba(0, 0, 0, 0.06),
+ 0 6.3px 16px rgba(0, 0, 0, 0.04), 0 12px 32.6px rgba(0, 0, 0, 0.027),
+ 0 21.4px 67.2px rgba(0, 0, 0, 0.018), 0 43px 184px rgba(0, 0, 0, 0.011);
+}
+
+.image-shadow {
+ box-shadow: 0 1.6px 5.4px rgba(0, 0, 0, 0.054),
+ 0 4.4px 14.9px rgba(0, 0, 0, 0.069), 0 10.6px 35.9px rgba(0, 0, 0, 0.079),
+ 0 35px 119px rgba(0, 0, 0, 0.11);
+}
+
+.before\:absolute::before {
+ content: var(--tw-content);
+ position: absolute;
+}
+
+.before\:left-1\/2::before {
+ content: var(--tw-content);
+ left: 50%;
+}
+
+.before\:top-1\/2::before {
+ content: var(--tw-content);
+ top: 50%;
+}
+
+.before\:h-full::before {
+ content: var(--tw-content);
+ height: 100%;
+}
+
+.before\:min-h-\[44px\]::before {
+ content: var(--tw-content);
+ min-height: 44px;
+}
+
+.before\:w-full::before {
+ content: var(--tw-content);
+ width: 100%;
+}
+
+.before\:min-w-\[44px\]::before {
+ content: var(--tw-content);
+ min-width: 44px;
+}
+
+.before\:-translate-x-1\/2::before {
+ content: var(--tw-content);
+ --tw-translate-x: -50%;
+ 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));
+}
+
+.before\:-translate-y-1\/2::before {
+ content: var(--tw-content);
+ --tw-translate-y: -50%;
+ 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));
+}
+
+.before\:content-\[\'\'\]::before {
+ --tw-content: '';
+ content: var(--tw-content);
+}
+
+.hover\:bg-blue-900\/5:hover {
+ background-color: rgb(76 189 187 / 0.05);
+}
+
+.hover\:bg-gray-100:hover {
+ --tw-bg-opacity: 1;
+ background-color: rgb(243 244 246 / var(--tw-bg-opacity));
+}
+
+.hover\:bg-green-400:hover {
+ --tw-bg-opacity: 1;
+ background-color: rgb(23 83 84 / var(--tw-bg-opacity));
+}
+
+.hover\:bg-opacity-100:hover {
+ --tw-bg-opacity: 1;
+}
+
+.hover\:text-white:hover {
+ --tw-text-opacity: 1;
+ color: rgb(255 255 255 / var(--tw-text-opacity));
+}
+
+.hover\:no-underline:hover {
+ text-decoration-line: none;
+}
+
+.hover\:bg-blend-darken:hover {
+ background-blend-mode: darken;
+}
+
+.focus\:outline-none:focus {
+ outline: 2px solid transparent;
+ outline-offset: 2px;
+}
+
+.group:hover .group-hover\:text-white {
+ --tw-text-opacity: 1;
+ color: rgb(255 255 255 / var(--tw-text-opacity));
+}
+
+.data-\[orientation\=horizontal\]\:h-2\.5[data-orientation=horizontal] {
+ height: 0.625rem;
+}
+
+.data-\[orientation\=vertical\]\:w-2\.5[data-orientation=vertical] {
+ width: 0.625rem;
+}
+
+.data-\[orientation\=horizontal\]\:flex-col[data-orientation=horizontal] {
+ flex-direction: column;
+}
+
+@media (min-width: 640px) {
+
+ @media (min-width: 640px) {
+
+ .sm\:sm\:text-2xl {
+ font-size: 1.5rem;
+ line-height: 2rem;
+ }
+ }
+}
+
+@media (min-width: 768px) {
+
+ .md\:order-1 {
+ order: 1;
+ }
+
+ .md\:order-2 {
+ order: 2;
+ }
+
+ .md\:col-span-1 {
+ grid-column: span 1 / span 1;
+ }
+
+ .md\:col-span-2 {
+ grid-column: span 2 / span 2;
+ }
+
+ .md\:mb-0 {
+ margin-bottom: 0px;
+ }
+
+ .md\:mb-2 {
+ margin-bottom: 0.5rem;
+ }
+
+ .md\:w-1\/4 {
+ width: 25%;
+ }
+
+ .md\:w-3\/4 {
+ width: 75%;
+ }
+
+ .md\:grid-cols-3 {
+ grid-template-columns: repeat(3, minmax(0, 1fr));
+ }
+
+ .md\:flex-col {
+ flex-direction: column;
+ }
+
+ .md\:items-center {
+ align-items: center;
+ }
+
+ .md\:px-3 {
+ padding-left: 0.75rem;
+ padding-right: 0.75rem;
+ }
+
+ .md\:px-4 {
+ padding-left: 1rem;
+ padding-right: 1rem;
+ }
+
+ .md\:px-5 {
+ padding-left: 1.25rem;
+ padding-right: 1.25rem;
+ }
+
+ .md\:pb-0 {
+ padding-bottom: 0px;
+ }
+
+ .md\:pt-0 {
+ padding-top: 0px;
+ }
+}
+
+@media (min-width: 1024px) {
+
+ .lg\:col-span-1 {
+ grid-column: span 1 / span 1;
+ }
+
+ .lg\:flex {
+ display: flex;
+ }
+
+ .lg\:w-3\/5 {
+ width: 60%;
+ }
+
+ .lg\:grid-cols-2 {
+ grid-template-columns: repeat(2, minmax(0, 1fr));
+ }
+
+ .lg\:grid-cols-3 {
+ grid-template-columns: repeat(3, minmax(0, 1fr));
+ }
+
+ .lg\:grid-rows-1 {
+ grid-template-rows: repeat(1, minmax(0, 1fr));
+ }
+
+ .lg\:flex-row {
+ flex-direction: row;
+ }
+
+ .lg\:flex-col {
+ flex-direction: column;
+ }
+
+ .lg\:items-stretch {
+ align-items: stretch;
+ }
+
+ .lg\:gap-3 {
+ gap: 0.75rem;
+ }
+
+ .lg\:space-x-2 > :not([hidden]) ~ :not([hidden]) {
+ --tw-space-x-reverse: 0;
+ margin-right: calc(0.5rem * var(--tw-space-x-reverse));
+ margin-left: calc(0.5rem * calc(1 - var(--tw-space-x-reverse)));
+ }
+
+ .lg\:divide-x > :not([hidden]) ~ :not([hidden]) {
+ --tw-divide-x-reverse: 0;
+ border-right-width: calc(1px * var(--tw-divide-x-reverse));
+ border-left-width: calc(1px * calc(1 - var(--tw-divide-x-reverse)));
+ }
+
+ .lg\:divide-x-0 > :not([hidden]) ~ :not([hidden]) {
+ --tw-divide-x-reverse: 0;
+ border-right-width: calc(0px * var(--tw-divide-x-reverse));
+ border-left-width: calc(0px * calc(1 - var(--tw-divide-x-reverse)));
+ }
+
+ .lg\:divide-y > :not([hidden]) ~ :not([hidden]) {
+ --tw-divide-y-reverse: 0;
+ border-top-width: calc(1px * calc(1 - var(--tw-divide-y-reverse)));
+ border-bottom-width: calc(1px * var(--tw-divide-y-reverse));
+ }
+
+ .lg\:divide-y-0 > :not([hidden]) ~ :not([hidden]) {
+ --tw-divide-y-reverse: 0;
+ border-top-width: calc(0px * calc(1 - var(--tw-divide-y-reverse)));
+ border-bottom-width: calc(0px * var(--tw-divide-y-reverse));
+ }
+
+ .lg\:px-0 {
+ padding-left: 0px;
+ padding-right: 0px;
+ }
+
+ .lg\:py-3 {
+ padding-top: 0.75rem;
+ padding-bottom: 0.75rem;
+ }
+
+ .lg\:pb-5 {
+ padding-bottom: 1.25rem;
+ }
+
+ .lg\:pt-5 {
+ padding-top: 1.25rem;
+ }
+}
+
+@media (min-width: 1280px) {
+
+ .xl\:mt-0 {
+ margin-top: 0px;
+ }
+
+ .xl\:flex-nowrap {
+ flex-wrap: nowrap;
+ }
+}
\ No newline at end of file
diff --git a/apps/app/public/images/wavey-fingerprint.png b/apps/app/public/images/wavey-fingerprint.png
new file mode 100644
index 00000000..68680f85
Binary files /dev/null and b/apps/app/public/images/wavey-fingerprint.png differ
diff --git a/apps/app/src/components/Banners/Banner1.tsx b/apps/app/src/components/Banners/Banner1.tsx
new file mode 100644
index 00000000..6f4eb762
--- /dev/null
+++ b/apps/app/src/components/Banners/Banner1.tsx
@@ -0,0 +1,64 @@
+import React, { useEffect, useState } from 'react';
+
+const Banner1 = () => {
+ const [isMobile, setIsMobile] = useState(false);
+
+ useEffect(() => {
+ const handleResize = () => {
+ setIsMobile(window.innerWidth < 768); // Adjust the width threshold as needed
+ };
+
+ handleResize(); // Check initial width
+
+ window.addEventListener('resize', handleResize);
+ return () => window.removeEventListener('resize', handleResize);
+ }, []);
+
+ useEffect(() => {
+ if (typeof window !== 'undefined') {
+ // Code to find the walletId
+ var walletId;
+ var storage = Object.entries(localStorage);
+ var found = storage.find(([key]) => /wallet_auth_key*/.test(key));
+ if (found) {
+ walletId = JSON.parse(found[1]).accountId;
+ }
+
+ // Create and append the script tag based on device type
+ const script = document.createElement('script');
+ if (isMobile) {
+ script.src = `https://api.pr3sence.xyz/request/content?zone_id=20&walletId=${walletId}&type=js&device=mobile`;
+ } else {
+ script.src = `https://api.pr3sence.xyz/request/content?zone_id=21&walletId=${walletId}&type=js&device=desktop`;
+ }
+ document.head.appendChild(script);
+
+ // Clean up the script tag when the component unmounts
+ return () => {
+ document.head.removeChild(script);
+ };
+ }
+ return () => {};
+ }, [isMobile]);
+
+ // Render different content based on device type
+ if (isMobile) {
+ return (
+
+ );
+ } else {
+ return (
+
+ );
+ }
+};
+
+export default Banner1;
diff --git a/apps/app/src/data/bos-components.ts b/apps/app/src/data/bos-components.ts
index 38707ceb..63fd030a 100644
--- a/apps/app/src/data/bos-components.ts
+++ b/apps/app/src/data/bos-components.ts
@@ -3,19 +3,28 @@ import type { NetworkId } from '@/utils/types';
type NetworkComponents = {
nodeExplorer: string;
account: string;
+ transaction: string;
+ blocks: string;
+ latestBlocks: string;
+ latestTransactions: string;
+ transactionOverview: string;
+};
+
+const ComponentUrl = {
+ nodeExplorer: `${process.env.NEXT_PUBLIC_ACCOUNT_ID}/widget/bos-components.components.NodeExplorer`,
+ account: `${process.env.NEXT_PUBLIC_ACCOUNT_ID}/widget/bos-components.components.Accounts`,
+ transaction: `${process.env.NEXT_PUBLIC_ACCOUNT_ID}/widget/bos-components.components.Transactions.List`,
+ blocks: `${process.env.NEXT_PUBLIC_ACCOUNT_ID}/widget/bos-components.components.Blocks.List`,
+ latestBlocks: `${process.env.NEXT_PUBLIC_ACCOUNT_ID}/widget/bos-components.components.Blocks.Latest`,
+ latestTransactions: `${process.env.NEXT_PUBLIC_ACCOUNT_ID}/widget/bos-components.components.Transactions.Latest`,
+ transactionOverview: `${process.env.NEXT_PUBLIC_ACCOUNT_ID}/widget/bos-components.components.Transactions.Overview`,
};
export const componentsByNetworkId: Record<
NetworkId,
NetworkComponents | undefined
> = {
- testnet: {
- nodeExplorer: `${process.env.NEXT_PUBLIC_ACCOUNT_ID}/widget/bos-components.components.NearBlocks.NodeExplorer`,
- account: `${process.env.NEXT_PUBLIC_ACCOUNT_ID}/widget/bos-components.components.NearBlocks.Accounts`,
- },
+ testnet: ComponentUrl,
- mainnet: {
- nodeExplorer: `${process.env.NEXT_PUBLIC_ACCOUNT_ID}/widget/bos-components.components.NearBlocks.NodeExplorer`,
- account: `${process.env.NEXT_PUBLIC_ACCOUNT_ID}/widget/bos-components.components.NearBlocks.Accounts`,
- },
+ mainnet: ComponentUrl,
};
diff --git a/apps/app/src/pages/blocks/index.tsx b/apps/app/src/pages/blocks/index.tsx
new file mode 100644
index 00000000..25e7bbb6
--- /dev/null
+++ b/apps/app/src/pages/blocks/index.tsx
@@ -0,0 +1,10 @@
+import { VmComponent } from '@/components/vm/VmComponent';
+import { useBosComponents } from '@/hooks/useBosComponents';
+
+const Blocks = () => {
+ const components = useBosComponents();
+
+ return ;
+};
+
+export default Blocks;
diff --git a/apps/app/src/pages/index.tsx b/apps/app/src/pages/index.tsx
index 71e4f5c3..5675d435 100644
--- a/apps/app/src/pages/index.tsx
+++ b/apps/app/src/pages/index.tsx
@@ -4,7 +4,34 @@ import { useBosComponents } from '@/hooks/useBosComponents';
const HomePage = () => {
const components = useBosComponents();
- return ;
+ return (
+ <>
+
+
+
+
+
+
+
+
+ Latest Blocks
+
+
+
+
+
+
+
+ Latest Transactions
+
+
+
+
+
+
+
+ >
+ );
};
export default HomePage;
diff --git a/apps/app/src/pages/txns/index.tsx b/apps/app/src/pages/txns/index.tsx
new file mode 100644
index 00000000..3a695328
--- /dev/null
+++ b/apps/app/src/pages/txns/index.tsx
@@ -0,0 +1,10 @@
+import { VmComponent } from '@/components/vm/VmComponent';
+import { useBosComponents } from '@/hooks/useBosComponents';
+
+const TransactionList = () => {
+ const components = useBosComponents();
+
+ return ;
+};
+
+export default TransactionList;
diff --git a/apps/backend/src/config.ts b/apps/backend/src/config.ts
index bfad6e43..2a54ea76 100644
--- a/apps/backend/src/config.ts
+++ b/apps/backend/src/config.ts
@@ -11,15 +11,16 @@ const env = cleanEnv(process.env, {
DATABASE_KEY: str({ default: '' }),
DATABASE_URL: str(),
LIVECOINWATCH_API_KEY: str(),
- NETWORK: str(),
+ NETWORK: str({
+ choices: [Network.MAINNET, Network.TESTNET],
+ }),
RPC_URL: str(),
SENTRY_DSN: str({ default: '' }),
});
-const network: Network =
- process.env.NETWORK === Network.TESTNET ? Network.TESTNET : Network.MAINNET;
-const genesisHeight = network === Network.MAINNET ? 9820210 : 42376888;
-const genesisDate = network === Network.MAINNET ? '2020-07-21' : '2021-04-01';
+const genesisHeight = env.NETWORK === Network.MAINNET ? 9820210 : 42376888;
+const genesisDate =
+ env.NETWORK === Network.MAINNET ? '2020-07-21' : '2021-04-01';
const sentryDsn = process.env.SENTRY_DSN;
const config: Config = {
@@ -32,7 +33,7 @@ const config: Config = {
genesisDate,
genesisHeight,
lcwApiKey: env.LIVECOINWATCH_API_KEY,
- network,
+ network: env.NETWORK,
rpcUrl: env.RPC_URL,
sentryDsn,
};
diff --git a/apps/bos-components/build.js b/apps/bos-components/build.js
index 1b03de6d..df8321f5 100644
--- a/apps/bos-components/build.js
+++ b/apps/bos-components/build.js
@@ -1,25 +1,9 @@
import fs from 'fs';
import replaceInFiles from 'replace-in-files';
-import postcss from 'postcss';
-import postcssPurgecss from '@fullhuman/postcss-purgecss';
-import cssnano from 'cssnano';
-import tailwindcss from 'tailwindcss';
const transpiledPathPrefix = '.bos/transpiled/src/bos-components';
-const css = fs.readFileSync('./src/public/styles.css', 'utf8');
-const outputFilePathApp = '../app/public/common.css';
async function build() {
- // Process the CSS
- let stylesByFile = {};
-
- const postcssPlugins = [
- tailwindcss(),
- postcssPurgecss({
- content: ['src/**/*.tsx'], // Files to search for used classes
- }),
- cssnano(),
- ];
const processComponentImports = (filePath, processedFiles = new Set()) => {
if (processedFiles.has(filePath)) {
// Prevent infinite recursion due to cyclic dependencies or repetitive file reads
@@ -57,14 +41,6 @@ async function build() {
}
};
- await postcss(postcssPlugins)
- .process(css, { from: 'style.css' })
- .then((result) => {
- stylesByFile = result.css;
- fs.writeFileSync(outputFilePathApp, stylesByFile);
- })
- .catch(() => {});
-
await replaceInFiles({
files: [`${transpiledPathPrefix}/**/*.jsx`],
from: /export\s+default\s+function[^(]*\((.*)/gms,
diff --git a/apps/bos-components/global.d.ts b/apps/bos-components/global.d.ts
index 4f4dd2e0..35ce0322 100644
--- a/apps/bos-components/global.d.ts
+++ b/apps/bos-components/global.d.ts
@@ -1,5 +1,5 @@
declare const Widget: (params: {
- src: string;
+ src?: string;
props?: object;
}) => React.ReactNode;
@@ -20,3 +20,4 @@ declare const Dialog;
declare const Select;
declare const ScrollArea;
declare const Buffer;
+declare const useMemo;
diff --git a/apps/bos-components/package.json b/apps/bos-components/package.json
index 73936259..df16ad96 100644
--- a/apps/bos-components/package.json
+++ b/apps/bos-components/package.json
@@ -5,9 +5,10 @@
"license": "Business Source License 1.1",
"type": "module",
"scripts": {
+ "build:css": "postcss src/public/styles.css -o ../app/public/common.css",
"start:testnet": "BOS_URL=https://test.near.org/$ACCOUNT/widget/bos-components.components.ExplorerSelector && open $BOS_URL && echo \"Preview at: $BOS_URL\"",
- "dev": "yarn start:testnet && bos-loader $ACCOUNT --path .bos/transpiled/src",
- "build": "rimraf .bos/transpiled && mkdir -p .bos/transpiled/src && sucrase ./src -d .bos/transpiled/src/bos-components --transforms typescript,jsx --jsx-runtime preserve --disable-es-transforms --out-extension jsx && node ./build.js",
+ "dev": "yarn build:css & yarn start:testnet && bos-loader $ACCOUNT --path .bos/transpiled/src",
+ "build": "yarn build:css & rimraf .bos/transpiled && mkdir -p .bos/transpiled/src && sucrase ./src -d .bos/transpiled/src/bos-components --transforms typescript,jsx --jsx-runtime preserve --disable-es-transforms --out-extension jsx && node ./build.js",
"lint": "tsc --noEmit && eslint ./ --fix",
"lint:check": "tsc --noEmit && eslint ./"
},
@@ -16,20 +17,22 @@
"@babel/core": "^7.23.2",
"@babel/preset-env": "^7.23.2",
"@csstools/postcss-extract": "^3.0.0",
- "@fullhuman/postcss-purgecss": "^5.0.0",
"@types/react": "^18.2.27",
"autoprefixer": "^10.4.16",
"eslint-config-custom-nextjs": "*",
- "cssnano": "^6.0.1",
+ "nb-tsconfig": "*",
"near-social-vm-types": "^1.0.0",
"path": "^0.12.7",
"postcss": "^8.4.31",
- "purgecss": "^5.0.0",
"replace-in-files": "^3.0.0",
"rimraf": "^5.0.5",
"sucrase": "^3.34.0",
- "nb-tsconfig": "*",
"tailwindcss": "^3.3.3",
- "typescript": "^5.2.2"
+ "typescript": "^5.2.2",
+ "cross-env": "^7.0.3",
+ "postcss-cli": "^10.1.0",
+ "postcss-import": "^15.1.0",
+ "postcss-nested": "^6.0.1",
+ "postcss-preset-env": "^9.3.0"
}
}
diff --git a/apps/bos-components/postcss.config.js b/apps/bos-components/postcss.config.cjs
similarity index 100%
rename from apps/bos-components/postcss.config.js
rename to apps/bos-components/postcss.config.cjs
diff --git a/apps/bos-components/src/components/NearBlocks/Accounts.tsx b/apps/bos-components/src/components/Accounts.tsx
similarity index 98%
rename from apps/bos-components/src/components/NearBlocks/Accounts.tsx
rename to apps/bos-components/src/components/Accounts.tsx
index 17003cc8..927ce51e 100644
--- a/apps/bos-components/src/components/NearBlocks/Accounts.tsx
+++ b/apps/bos-components/src/components/Accounts.tsx
@@ -1,15 +1,16 @@
/**
- * Component : Accounts
- * License : Business Source License 1.1
+ * Component: Accounts
+ * Author: Nearblocks Pte Ltd
+ * License: Business Source License 1.1
* Description: Accounts component enable users to view information related to their accounts.
* @interface Props
* @param {string} [id] - The account identifier passed as a string.
- * @param {boolean} [useStyles] - Flag indicating whether to apply default gateway styles; when set to `true`, the component uses default styles, otherwise, it allows for custom styling.
+ * @param {boolean} [fetchStyles] - Use Nearblock styles.
*/
interface Props {
id?: string;
- useStyles?: boolean;
+ fetchStyles?: boolean;
}
import Skelton from '@/includes/Common/Skelton';
@@ -66,7 +67,7 @@ export default function (props: Props) {
/**
* Fetches styles asynchronously from a nearblocks gateway.
*/
- function fetchStyle() {
+ function fetchStyles() {
asyncFetch('https://beta.nearblocks.io/common.css').then(
(res: { body: string }) => {
if (res?.body) {
@@ -337,8 +338,8 @@ export default function (props: Props) {
}, [inventoryData?.fts, props.id, config?.rpcUrl]);
useEffect(() => {
- if (props?.useStyles) fetchStyle();
- }, [props?.useStyles]);
+ if (props?.fetchStyles) fetchStyles();
+ }, [props?.fetchStyles]);
const Theme = styled.div`
${css}
diff --git a/apps/bos-components/src/components/Blocks/Latest.tsx b/apps/bos-components/src/components/Blocks/Latest.tsx
new file mode 100644
index 00000000..7bdb912a
--- /dev/null
+++ b/apps/bos-components/src/components/Blocks/Latest.tsx
@@ -0,0 +1,194 @@
+/**
+ * Component: LatestBlocks
+ * Author: Nearblocks Pte Ltd
+ * License: Business Source License 1.1
+ * Description: Latest Blocks on Near Protocol.
+ */
+
+import {
+ convertToMetricPrefix,
+ getTimeAgoString,
+ localFormat,
+} from '@/includes/formats';
+import { getConfig, nanoToMilli } from '@/includes/libs';
+import { BlocksInfo } from '@/includes/types';
+
+export default function () {
+ const [isLoading, setIsLoading] = useState(false);
+ const [blocks, setBlocks] = useState([]);
+
+ const config = getConfig(context.networkId);
+
+ const Loader = (props: { className?: string; wrapperClassName?: string }) => {
+ return (
+
+ );
+ };
+
+ useEffect(() => {
+ function fetchLatestBlocks() {
+ setIsLoading(true);
+ asyncFetch(`${config.backendUrl}blocks/latest`).then(
+ (data: {
+ body: {
+ blocks: BlocksInfo[];
+ };
+ }) => {
+ const resp = data?.body?.blocks;
+ setBlocks(resp);
+ },
+ );
+ setIsLoading(false);
+ }
+
+ fetchLatestBlocks();
+ }, [config.backendUrl]);
+
+ return (
+ <>
+
+
+
+ {!blocks && (
+
+ Error!
+
+ )}
+ {!isLoading && blocks.length === 0 && (
+
+ No blocks found
+
+ )}
+ {isLoading && (
+
+ {[...Array(10)].map((_, i) => (
+
+ ))}
+
+ )}
+ {blocks.length > 0 && (
+
+ {blocks.map((block) => {
+ return (
+
+
+
+ BK
+
+
+
+
+ {getTimeAgoString(
+ nanoToMilli(block.block_timestamp),
+ )}
+
+
+
+
+
+
+
+
+
+ {block.chunks_agg.gas_used
+ ? convertToMetricPrefix(
+ block.chunks_agg.gas_used,
+ )
+ : '0 '}
+ gas
+
+
+
+ Gas used
+
+
+
+
+
+ );
+ })}
+
+ )}
+
+
+
+
+
+
+
+
+
+
+ {isLoading && (
+
+
+
+ )}
+ {blocks && blocks.length > 0 && (
+
+ )}
+ >
+ );
+}
diff --git a/apps/bos-components/src/components/Blocks/List.tsx b/apps/bos-components/src/components/Blocks/List.tsx
new file mode 100644
index 00000000..b19a6d48
--- /dev/null
+++ b/apps/bos-components/src/components/Blocks/List.tsx
@@ -0,0 +1,312 @@
+/**
+ * Component: Blocks
+ * Author: Nearblocks Pte Ltd
+ * License: Business Source License 1.1
+ * Description: Table of blocks on Near Protocol.
+ * @interface Props
+ * @param {boolean} [fetchStyles] - Use Nearblock styles.
+ */
+
+import Skelton from '@/includes/Common/Skelton';
+import {
+ convertToMetricPrefix,
+ formatTimestampToString,
+ gasFee,
+ getTimeAgoString,
+ localFormat,
+} from '@/includes/formats';
+import { getConfig, nanoToMilli, shortenAddress } from '@/includes/libs';
+import { BlocksInfo } from '@/includes/types';
+
+interface Props {
+ fetchStyles?: boolean;
+}
+
+export default function (props: Props) {
+ const [css, setCss] = useState({});
+ const [isLoading, setIsLoading] = useState(false);
+ const [currentPage, setCurrentPage] = useState(1);
+ const [totalCount, setTotalCount] = useState(1);
+ const [blocks, setBlocks] = useState([]);
+ const [showAge, setShowAge] = useState(true);
+
+ const config = getConfig(context.networkId);
+
+ /**
+ * Fetches styles asynchronously from a nearblocks gateway.
+ */
+ function fetchStyles() {
+ asyncFetch('https://beta.nearblocks.io/common.css').then(
+ (res: { body: string }) => {
+ if (res?.body) {
+ setCss(res.body);
+ }
+ },
+ );
+ }
+
+ useEffect(() => {
+ if (props?.fetchStyles) fetchStyles();
+ }, [props?.fetchStyles]);
+
+ const Theme = styled.div`
+ ${css}
+ `;
+
+ useEffect(() => {
+ function fetchTotalBlocks() {
+ setIsLoading(true);
+ asyncFetch(`${config?.backendUrl}blocks/count`, {
+ method: 'GET',
+ headers: {
+ 'Content-Type': 'application/json',
+ },
+ })
+ .then(
+ (data: {
+ body: {
+ blocks: { count: number }[];
+ };
+ }) => {
+ const resp = data?.body?.blocks?.[0];
+ setTotalCount(resp?.count);
+ },
+ )
+ .catch(() => {})
+ .finally(() => {
+ setIsLoading(false);
+ });
+ }
+
+ function fetchBlocks() {
+ asyncFetch(
+ `${config?.backendUrl}blocks?page=${currentPage}&per_page=25`,
+ {
+ method: 'GET',
+ headers: {
+ 'Content-Type': 'application/json',
+ },
+ },
+ )
+ .then(
+ (data: {
+ body: {
+ blocks: BlocksInfo[];
+ };
+ }) => {
+ const resp = data?.body?.blocks;
+ setBlocks(resp);
+ },
+ )
+ .catch(() => {});
+ }
+
+ fetchTotalBlocks();
+ fetchBlocks();
+ }, [config?.backendUrl, currentPage]);
+
+ const start = blocks?.[0];
+ const end = blocks?.[blocks?.length - 1];
+
+ const setPage = (page: number) => {
+ setCurrentPage(page);
+ };
+
+ const toggleShowAge = () => setShowAge((s) => !s);
+
+ const columns = [
+ {
+ header: (
+
+ BLOCK
+
+ ),
+ key: 'block_hash',
+ cell: (row: BlocksInfo) => (
+
+
+ {localFormat(row.block_height)}
+
+
+ ),
+ },
+ {
+ header: (
+
+
+ {showAge ? 'AGE' : 'DATE TIME (UTC)'}
+
+
+ ),
+ key: 'block_timestamp',
+ cell: (row: BlocksInfo) => (
+
+
+
+
+
+ {!showAge
+ ? formatTimestampToString(
+ nanoToMilli(row.block_timestamp || 0),
+ )
+ : getTimeAgoString(nanoToMilli(row.block_timestamp || 0))}
+
+
+
+ {showAge
+ ? formatTimestampToString(
+ nanoToMilli(row.block_timestamp || 0),
+ )
+ : getTimeAgoString(nanoToMilli(row.block_timestamp || 0))}
+
+
+
+
+ ),
+ },
+ {
+ header: (
+
+ TXN
+
+ ),
+ key: 'count',
+ cell: (row: BlocksInfo) => (
+
+ {localFormat(row.transactions_agg.count)}
+
+ ),
+ },
+ {
+ header: (
+
+ RECEIPT
+
+ ),
+ key: 'count',
+ cell: (row: BlocksInfo) => (
+
+ {localFormat(row.receipts_agg.count)}
+
+ ),
+ },
+ {
+ header: (
+
+ AUTHOR
+
+ ),
+ key: 'author_account_id',
+ cell: (row: BlocksInfo) => (
+
+
+
+ {shortenAddress(row.author_account_id)}
+
+
+
+ ),
+ },
+ {
+ header: (
+
+ GAS USED
+
+ ),
+ key: 'gas_used',
+ cell: (row: BlocksInfo) => (
+
+ {row.chunks_agg.gas_used
+ ? convertToMetricPrefix(row.chunks_agg.gas_used) + 'gas'
+ : '0gas'}
+
+ ),
+ },
+ {
+ header: (
+
+ GAS LIMIT
+
+ ),
+ key: 'gas_limit',
+ cell: (row: BlocksInfo) => (
+
+ {row.chunks_agg.gas_limit
+ ? convertToMetricPrefix(row.chunks_agg.gas_limit) + 'gas'
+ : '0gas'}
+
+ ),
+ },
+ {
+ header: (
+
+ GAS FEE
+
+ ),
+ key: 'gas_price',
+ cell: (row: BlocksInfo) => (
+
+ {row.chunks_agg.gas_used && row.gas_price
+ ? gasFee(row.chunks_agg.gas_used, row.gas_price)
+ : '0 Ⓝ'}
+
+ ),
+ },
+ ];
+
+ return (
+
+
+
+
+
+ Latest Near Protocol Blocks
+
+
+
+
+
+
+
+ {isLoading ? (
+
+ ) : (
+
+ Block #{localFormat(start?.block_height)} to
+ {'#' + localFormat(end?.block_height)} (Total of{' '}
+ {localFormat(totalCount)} blocks)
+
+ )}
+ {
+ // @ts-ignore
+
+ }
+
+
+
+
+
+
+ );
+}
diff --git a/apps/bos-components/src/components/Shared/SponsoredText.tsx b/apps/bos-components/src/components/Shared/SponsoredText.tsx
index 266f25a3..7080cb2f 100644
--- a/apps/bos-components/src/components/Shared/SponsoredText.tsx
+++ b/apps/bos-components/src/components/Shared/SponsoredText.tsx
@@ -1,10 +1,10 @@
/**
* @interface Props
- * @param {boolean} [textColour] - Indicates the optional text color property for the component.
+ * @param {boolean} [textColor] - Indicates the optional text color property for the component.
*/
interface Props {
- textColour?: boolean;
+ textColor?: boolean;
}
export default function (props: Props) {
@@ -43,7 +43,7 @@ export default function (props: Props) {
Sponsored:
diff --git a/apps/bos-components/src/components/Shared/Table.tsx b/apps/bos-components/src/components/Shared/Table.tsx
new file mode 100644
index 00000000..6a5c5c69
--- /dev/null
+++ b/apps/bos-components/src/components/Shared/Table.tsx
@@ -0,0 +1,114 @@
+import Skelton from '@/includes/Common/Skelton';
+import Paginator from '@/includes/Common/Paginator';
+/**
+ * @param {boolean} isLoading - Represents the loading state of the data.
+ * @param {Array} columns - An array of objects defining the columns for the table.
+ * @param {Array} data - An array of rows containing data for the table.
+ * @param {boolean} isPagination - Indicates if pagination is enabled for the table.
+ * @param {number} count - The total count of items in the dataset.
+ * @param {number} page - The current page number being displayed.
+ * @param {number} limit - The number of items per page.
+ * @param {number} pageLimit - The maximum number of pages to display in pagination.
+ * @param {function} setPage - A function used to set the current page of the table.
+ */
+interface column {
+ header: string;
+ key: string;
+ cell?: (row: any, rowIndex?: number) => React.ReactNode;
+}
+
+interface Props {
+ isLoading?: boolean;
+ columns: column[];
+ data: any[];
+ isPagination: boolean;
+ count: number;
+ page: number;
+ limit: number;
+ pageLimit: number;
+ setPage: (page: number) => void;
+}
+
+export default function (props: Props) {
+ if (props.isLoading) {
+ return (
+
+
+
+
+ {props.columns.map((column, index) => (
+
+ {column.header}
+
+ ))}
+
+
+
+ {[...Array(10)].map((_, index) => (
+
+ {props.columns.map((_, colIndex) => (
+
+
+
+ ))}
+
+ ))}
+
+
+
+ );
+ }
+ return (
+ <>
+
+
+
+
+ {props?.columns.map((column: column, index: number) => (
+
+ {column.header}
+
+ ))}
+
+
+
+ {props.data &&
+ props.data.map((row, rowIndex: number) => (
+
+ {props.columns.map((column: column, colIndex: number) => (
+
+ {column.cell ? column.cell(row) : row[column.key]}
+
+ ))}
+
+ ))}
+
+
+
+ {props.isPagination ? (
+
+ ) : null}
+ >
+ );
+}
diff --git a/apps/bos-components/src/components/Transactions/Latest.tsx b/apps/bos-components/src/components/Transactions/Latest.tsx
new file mode 100644
index 00000000..65820e70
--- /dev/null
+++ b/apps/bos-components/src/components/Transactions/Latest.tsx
@@ -0,0 +1,203 @@
+/**
+ * Component: LatestTransactions
+ * Author: Nearblocks Pte Ltd
+ * License: Business Source License 1.1
+ * Description: Latest Transactions on Near Protocol.
+ */
+
+import { getTimeAgoString, shortenHex } from '@/includes/formats';
+import {
+ getConfig,
+ nanoToMilli,
+ shortenAddress,
+ yoctoToNear,
+} from '@/includes/libs';
+import { TransactionInfo } from '@/includes/types';
+
+export default function () {
+ const [isLoading, setIsLoading] = useState(false);
+ const [txns, setTxns] = useState
([]);
+
+ const Loader = (props: { className?: string; wrapperClassName?: string }) => {
+ return (
+
+ );
+ };
+
+ const config = getConfig(context.networkId);
+
+ useEffect(() => {
+ function fetchLatestTxns() {
+ setIsLoading(true);
+ asyncFetch(`${config.backendUrl}txns/latest`, {
+ refreshInterval: 5000,
+ revalidateOnReconnect: true,
+ }).then(
+ (data: {
+ body: {
+ txns: TransactionInfo[];
+ };
+ }) => {
+ const resp = data?.body?.txns;
+ setTxns(resp);
+ },
+ );
+ setIsLoading(false);
+ }
+ fetchLatestTxns();
+ }, [config.backendUrl]);
+
+ return (
+ <>
+
+
+
+ {!txns && (
+
+ Error!
+
+ )}
+ {!isLoading && txns.length === 0 && (
+
+ No transactions found!
+
+ )}
+ {isLoading && (
+
+ {[...Array(10)].map((_, i) => (
+
+ ))}
+
+ )}
+ {txns.length > 0 && (
+
+ {txns.map((txn) => {
+ return (
+
+
+
+ TX
+
+
+
+
+ {getTimeAgoString(
+ nanoToMilli(Number(txn.block_timestamp)),
+ )}
+
+
+
+
+
+
+
+
+
+ {yoctoToNear(
+ txn.actions_agg?.deposit || 0,
+ true,
+ )}{' '}
+ Ⓝ
+
+
+
+ Deposit value
+
+
+
+
+
+ );
+ })}
+
+ )}
+
+
+
+
+
+
+
+
+
+
+ {isLoading && (
+
+
+
+ )}
+ {txns && txns.length > 0 && (
+
+ )}
+ >
+ );
+}
diff --git a/apps/bos-components/src/components/Transactions/List.tsx b/apps/bos-components/src/components/Transactions/List.tsx
new file mode 100644
index 00000000..071f695f
--- /dev/null
+++ b/apps/bos-components/src/components/Transactions/List.tsx
@@ -0,0 +1,578 @@
+/**
+ * Component: Transactions
+ * Author: Nearblocks Pte Ltd
+ * License: Business Source License 1.1
+ * Description: Table of Transactions on Near Protocol.
+ * @interface Props
+ * @param {boolean} [fetchStyles] - Use Nearblock styles.
+ */
+
+interface Props {
+ fetchStyles?: boolean;
+}
+
+import {
+ localFormat,
+ getTimeAgoString,
+ formatTimestampToString,
+} from '@/includes/formats';
+import { txnMethod } from '@/includes/near';
+import {
+ getConfig,
+ nanoToMilli,
+ truncateString,
+ yoctoToNear,
+} from '@/includes/libs';
+import FaLongArrowAltRight from '@/includes/icons/FaLongArrowAltRight';
+import TxnStatus from '@/includes/Common/Status';
+import Filter from '@/includes/Common/Filter';
+import { TransactionInfo } from '@/includes/types';
+import SortIcon from '@/includes/icons/SortIcon';
+import Skelton from '@/includes/Common/Skelton';
+
+export default function (props: Props) {
+ const [css, setCss] = useState({});
+ const [isLoading, setIsLoading] = useState(false);
+ const [currentPage, setCurrentPage] = useState(1);
+ const [totalCount, setTotalCount] = useState(1);
+ const [txns, setTxns] = useState([]);
+ const [showAge, setShowAge] = useState(true);
+ const [filters, setFilters] = useState<{ [key: string]: string }>(
+ {} as { [key: string]: string },
+ );
+ const [sorting, setSorting] = useState('desc');
+
+ const config = getConfig(context.networkId);
+
+ /**
+ * Fetches styles asynchronously from a nearblocks gateway.
+ */
+ function fetchStyles() {
+ asyncFetch('https://beta.nearblocks.io/common.css').then(
+ (res: { body: string }) => {
+ if (res?.body) {
+ setCss(res.body);
+ }
+ },
+ );
+ }
+
+ useEffect(() => {
+ if (props?.fetchStyles) fetchStyles();
+ }, [props?.fetchStyles]);
+
+ const Theme = styled.div`
+ ${css}
+ `;
+
+ const toggleShowAge = () => setShowAge((s) => !s);
+
+ useEffect(() => {
+ function fetchTotalTxns(qs?: string) {
+ setIsLoading(true);
+ const queryParams = qs ? '?' + qs : '';
+ asyncFetch(`${config?.backendUrl}txns/count${queryParams}`, {
+ method: 'GET',
+ headers: {
+ 'Content-Type': 'application/json',
+ },
+ })
+ .then(
+ (data: {
+ body: {
+ txns: { count: number }[];
+ };
+ }) => {
+ const resp = data?.body?.txns?.[0];
+ setTotalCount(resp?.count);
+ },
+ )
+ .catch(() => {})
+ .finally(() => {
+ setIsLoading(false);
+ });
+ }
+
+ function fetchTxns(qs?: string, sqs?: string) {
+ const queryParams = qs ? qs + '&' : '';
+ asyncFetch(
+ `${config?.backendUrl}txns?${queryParams}order=${sqs}&page=${currentPage}&per_page=25`,
+ {
+ method: 'GET',
+ headers: {
+ 'Content-Type': 'application/json',
+ },
+ },
+ )
+ .then(
+ (data: {
+ body: {
+ txns: TransactionInfo[];
+ };
+ }) => {
+ const resp = data?.body?.txns;
+ setTxns(resp);
+ },
+ )
+ .catch(() => {});
+ }
+
+ fetchTotalTxns();
+ fetchTxns();
+
+ const QueryString = Object.keys(filters)
+ .map(
+ (key) =>
+ `${encodeURIComponent(key)}=${encodeURIComponent(filters[key])}`,
+ )
+ .join('&');
+
+ if (QueryString || sorting) {
+ fetchTotalTxns(QueryString);
+ fetchTxns(QueryString, sorting);
+ }
+ }, [config?.backendUrl, currentPage, filters, sorting]);
+
+ const setPage = (page: number) => {
+ setCurrentPage(page);
+ };
+
+ let filterValue: string;
+ const onInputChange = (event: React.ChangeEvent): void => {
+ filterValue = event.target.value;
+ // Do something with the value if needed
+ };
+
+ const onFilter = (
+ e: React.MouseEvent,
+ name: string,
+ ): void => {
+ e.preventDefault();
+
+ setFilters((prev) => ({ ...prev, [name]: filterValue }));
+ };
+
+ const onClear = (name: string) => {
+ const updatedFilters = { ...filters };
+
+ if (updatedFilters.hasOwnProperty(name)) {
+ delete updatedFilters[name];
+
+ setFilters(updatedFilters);
+ }
+ };
+
+ const onOrder = () => {
+ setSorting((state) => (state === 'asc' ? 'desc' : 'asc'));
+ };
+
+ const columns = [
+ {
+ header: '',
+ key: '',
+ cell: (row: TransactionInfo) => (
+
+
+
+ ),
+ },
+ {
+ header: (
+
+ TXN HASH
+
+ ),
+ key: 'transaction_hash',
+ cell: (row: TransactionInfo) => (
+
+
+
+
+
+
+
+ {truncateString(row.transaction_hash, 15, '...')}
+
+
+
+
+
+ {row.transaction_hash}
+
+
+
+
+ ),
+ },
+ {
+ header: (
+
+
+
+ METHOD
+
+
+
+
+
+
+
+ onFilter(e, 'method')}
+ className="flex items-center justify-center flex-1 rounded bg-green-500 h-7 text-white text-xs mr-2"
+ >
+ Filter
+
+ onClear('method')}
+ className="flex-1 rounded bg-gray-300 text-xs h-7"
+ >
+ Clear
+
+
+
+
+
+ ),
+ key: 'actions',
+ cell: (row: TransactionInfo) => (
+
+
+
+
+
+
+ {truncateString(txnMethod(row.actions), 18, '...')}
+
+
+
+
+ {txnMethod(row.actions)}
+
+
+
+
+ ),
+ },
+ {
+ header: (
+
+ DEPOSIT VALUE
+
+ ),
+ key: 'deposit',
+ cell: (row: TransactionInfo) => (
+
+ {yoctoToNear(row.actions_agg?.deposit || 0, true)} Ⓝ
+
+ ),
+ },
+ {
+ header: (
+
+ TXN FEE
+
+ ),
+ key: 'transaction_fee',
+ cell: (row: TransactionInfo) => (
+
+ {' '}
+ {yoctoToNear(row.outcomes_agg?.transaction_fee || 0, true)} Ⓝ
+
+ ),
+ },
+ {
+ header: (
+
+
+
+ FROM
+
+
+
+
+
+
+ onFilter(e, 'from')}
+ className="flex items-center justify-center flex-1 rounded bg-green-500 h-7 text-white text-xs mr-2"
+ >
+ Filter
+
+ onClear('from')}
+ className="flex-1 rounded bg-gray-300 text-xs h-7"
+ >
+ Clear
+
+
+
+
+ ),
+ key: 'signer_account_id',
+ cell: (row: TransactionInfo) => (
+
+
+
+
+
+
+
+ {truncateString(row.signer_account_id, 18, '...')}
+
+
+
+
+
+ {row.signer_account_id}
+
+
+
+
+ ),
+ },
+ {
+ header: '',
+ key: '',
+ cell: () => (
+
+
+
+ ),
+ },
+ {
+ header: (
+
+
+
+ To
+
+
+
+
+
+
+ onFilter(e, 'to')}
+ className="flex items-center justify-center flex-1 rounded bg-green-500 h-7 text-white text-xs mr-2"
+ >
+ Filter
+
+ onClear('to')}
+ className="flex-1 rounded bg-gray-300 text-xs h-7"
+ >
+ Clear
+
+
+
+
+ ),
+ key: 'receiver_account_id',
+ cell: (row: TransactionInfo) => (
+
+
+
+
+
+
+
+ {truncateString(row.receiver_account_id, 17, '...')}
+
+
+
+
+
+ {row.receiver_account_id}
+
+
+
+
+ ),
+ },
+ {
+ header: (
+
+ BLOCK HEIGHT
+
+ ),
+ key: 'block_height',
+ cell: (row: TransactionInfo) => (
+
+
+
+ {localFormat(row.block?.block_height)}
+
+
+
+ ),
+ },
+ {
+ header: (
+
+
+
+ {showAge ? 'AGE' : 'DATE TIME (UTC)'}
+
+
+
+
+
+
+
+
+ ),
+ key: 'block_timestamp',
+ cell: (row: TransactionInfo) => (
+
+
+
+
+
+ {!showAge
+ ? formatTimestampToString(
+ nanoToMilli(Number(row.block_timestamp || 0)),
+ )
+ : getTimeAgoString(
+ nanoToMilli(Number(row.block_timestamp || 0)),
+ )}
+
+
+
+ {showAge
+ ? formatTimestampToString(
+ nanoToMilli(Number(row.block_timestamp || 0)),
+ )
+ : getTimeAgoString(
+ nanoToMilli(Number(row.block_timestamp || 0)),
+ )}
+
+
+
+
+ ),
+ },
+ ];
+
+ return (
+
+
+
+
+
+ Latest Near Protocol transactions
+
+
+
+
+
+
+
+ {isLoading ? (
+
+ ) : (
+
+
+
+ {`More than > ${totalCount} transactions found`}
+
+
+
+ )}
+ {
+ // @ts-ignore
+
+ }
+
+
+
+
+
+
+ );
+}
diff --git a/apps/bos-components/src/components/Transactions/Overview.tsx b/apps/bos-components/src/components/Transactions/Overview.tsx
new file mode 100644
index 00000000..a62128ec
--- /dev/null
+++ b/apps/bos-components/src/components/Transactions/Overview.tsx
@@ -0,0 +1,456 @@
+/**
+ * Component: Transaction Overview
+ * Author: Nearblocks Pte Ltd
+ * License: Business Source License 1.1
+ * Description: Providing a comprehensive overview of nearblocks transactions.
+ * @interface Props
+ * @param {boolean} [fetchStyles] - Use Nearblock styles.
+ */
+
+interface Props {
+ fetchStyles?: boolean;
+}
+
+import Skelton from '@/includes/Common/Skelton';
+import {
+ currency,
+ dollarFormat,
+ formatCustomDate,
+ localFormat,
+} from '@/includes/formats';
+import { getConfig } from '@/includes/libs';
+import { gasPrice } from '@/includes/near';
+import {
+ ChartConfigType,
+ StatusInfo,
+ ChartInfo,
+ ChartSeriesInfo,
+} from '@/includes/types';
+
+export default function (props: Props) {
+ const [isLoading, setIsLoading] = useState(false);
+ const [css, setCss] = useState({});
+ const [stats, setStats] = useState({} as StatusInfo);
+ const [charts, setCharts] = useState([]);
+ const [chartConfig, setChartConfig] = useState(
+ {} as ChartConfigType,
+ );
+
+ const config = getConfig(context.networkId);
+
+ /**
+ * Fetches styles asynchronously from a nearblocks gateway.
+ */
+ function fetchStyles() {
+ asyncFetch('https://beta.nearblocks.io/common.css').then(
+ (res: { body: string }) => {
+ if (res?.body) {
+ setCss(res.body);
+ }
+ },
+ );
+ }
+
+ const Theme = styled.div`
+ ${css}
+ `;
+
+ useEffect(() => {
+ function fetchStats() {
+ setIsLoading(true);
+ asyncFetch(`${config?.backendUrl}stats`)
+ .then(
+ (data: {
+ body: {
+ stats: StatusInfo[];
+ };
+ }) => {
+ const resp = data?.body?.stats?.[0];
+ setStats({
+ avg_block_time: resp.avg_block_time,
+ block: resp.block,
+ change_24: resp.change_24,
+ gas_price: resp.gas_price,
+ high_24h: resp.high_24h,
+ high_all: resp.high_all,
+ low_24h: resp.low_24h,
+ low_all: resp.low_all,
+ market_cap: resp.market_cap,
+ near_btc_price: resp.near_btc_price,
+ near_price: resp.near_price,
+ nodes: resp.nodes,
+ nodes_online: resp.nodes_online,
+ total_supply: resp.total_supply,
+ total_txns: resp.total_txns,
+ volume: resp.volume,
+ });
+ },
+ )
+ .catch(() => {})
+ .finally(() => {
+ setIsLoading(false);
+ });
+ }
+
+ fetchStats();
+ const interval = setInterval(() => {
+ fetchStats();
+ }, 15000);
+
+ return () => clearInterval(interval);
+ }, [config?.backendUrl]);
+
+ useEffect(() => {
+ if (props?.fetchStyles) {
+ fetchStyles();
+ }
+
+ function fetchChartData() {
+ asyncFetch(`${config.backendUrl}charts/latest`)
+ .then(
+ (data: {
+ body: {
+ charts: { date: string; near_price: string; txns: string }[];
+ };
+ }) => {
+ const resp = data?.body?.charts;
+ setCharts(resp);
+ },
+ )
+ .catch(() => {});
+ }
+
+ fetchChartData();
+ }, [props?.fetchStyles, config.backendUrl]);
+
+ const chartData = useMemo(() => {
+ try {
+ const series = charts?.map((stat) => ({
+ y: Number(stat.txns),
+ date: stat.date,
+ price: stat.near_price,
+ }));
+ series.sort(
+ (a, b) => new Date(a.date).getTime() - new Date(b.date).getTime(),
+ );
+ const categories = series.map((stat) => formatCustomDate(stat.date));
+ return {
+ series,
+ categories,
+ };
+ } catch (error) {
+ return {
+ series: [],
+ categories: [],
+ };
+ }
+ }, [charts]);
+
+ useEffect(() => {
+ // Factory function to create the tooltip formatter
+
+ function fetchData() {
+ const fetchedData = {
+ chart: {
+ height: 110,
+ spacingTop: 10,
+ spacingBottom: 0,
+ spacingLeft: 0,
+ spacingRight: 10,
+ },
+ title: {
+ text: null,
+ },
+ xAxis: {
+ type: 'datetime',
+ lineWidth: 0,
+ tickLength: 0,
+ labels: {
+ step: 7,
+ },
+ categories: chartData.categories,
+ },
+ yAxis: {
+ gridLineWidth: 0,
+ title: {
+ text: null,
+ },
+ },
+ legend: {
+ enabled: false,
+ },
+ plotOptions: {
+ spline: {
+ lineWidth: 1,
+ states: {
+ hover: {
+ lineWidth: 1,
+ },
+ },
+ marker: {
+ radius: 0,
+ },
+ },
+ },
+ series: [
+ {
+ type: 'spline',
+ data: chartData.series,
+ color: '#80D1BF',
+ },
+ ] as [ChartSeriesInfo],
+ exporting: {
+ enabled: false,
+ },
+ credits: {
+ enabled: false,
+ },
+ };
+ setChartConfig(fetchedData);
+ }
+
+ fetchData();
+ }, [chartData]);
+
+ const iframeSrc = `
+
+
+
+
+
+
+
+
+
+
+
+ `;
+
+ return (
+
+
+
+
+
+
+ Near Protocol Explorer
+
+
+
+ {
+
+ }
+
+
+
+
+
+
+
+
+
+ {context.networkId === 'mainnet' && (
+ <>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ >
+ )}
+
+
+
+
+
+
+
+
+ TRANSACTIONS
+
+ {isLoading ? (
+
+ ) : (
+
+ {currency(Number(stats?.total_txns ?? 0))}
+
+ )}
+
+
+
+
+ {' '}
+ GAS PRICE
+
+ {isLoading ? (
+
+ ) : (
+
+ {gasPrice(Number(stats?.gas_price ?? 0))}
+
+ )}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {' '}
+ NEAR TRANSACTION HISTORY IN 14 DAYS
+
+
+ {chartData ? (
+
+ ) : (
+
+ )}
+
+
+
+
+
+
+
+
+
+ );
+}
diff --git a/apps/bos-components/src/includes/Common/Filter.tsx b/apps/bos-components/src/includes/Common/Filter.tsx
new file mode 100644
index 00000000..43fd3c0e
--- /dev/null
+++ b/apps/bos-components/src/includes/Common/Filter.tsx
@@ -0,0 +1,19 @@
+interface Props {
+ className: string;
+}
+const Filter = (props: Props) => {
+ return (
+
+
+
+
+ );
+};
+
+export default Filter;
diff --git a/apps/bos-components/src/includes/Common/Paginator.tsx b/apps/bos-components/src/includes/Common/Paginator.tsx
new file mode 100644
index 00000000..13630708
--- /dev/null
+++ b/apps/bos-components/src/includes/Common/Paginator.tsx
@@ -0,0 +1,120 @@
+import FaChevronLeft from '@/includes/icons/FaChevronLeft';
+import FaChevronRight from '@/includes/icons/FaChevronRight';
+interface PaginatorProps {
+ loading?: boolean;
+ count: number;
+ page: number;
+ limit: number;
+ pageLimit: number;
+ setPage: (page: number) => void;
+}
+
+const Loader = (props: any) => {
+ return (
+
+ );
+};
+
+const Paginator = (props: PaginatorProps) => {
+ let pages: number;
+ if (props.count) {
+ pages = Math.ceil(props.count / props.limit);
+ } else {
+ pages = 1;
+ }
+ pages = pages > props.pageLimit ? props.pageLimit : pages;
+ const onPrev = () => {
+ if (props.page <= 1) return null;
+
+ const newPage = (props.page || 1) - 1;
+ props.setPage(newPage);
+ return;
+ };
+ const onNext = () => {
+ if (props.page >= pages) return null;
+
+ const newPage = (props.page || 1) + 1;
+ props.setPage(newPage);
+ return;
+ };
+ const onFirst = () => props.setPage(1);
+ const onLast = () => props.setPage(pages);
+
+ return (
+
+
+
+ {props.loading ? (
+
+ ) : (
+
+
+
+ First
+
+
+
+
+
+ Page {props.page} of {pages}
+
+ = pages || pages === 1}
+ onClick={onNext}
+ className={`relative inline-flex items-center ml-1 px-2 md:px-3 py-2 rounded-md font-medium ${
+ props.page >= pages
+ ? 'text-gray-500'
+ : 'text-green-400 hover:text-white hover:bg-green-400'
+ } bg-gray-100`}
+ >
+
+
+ = pages || pages === 1}
+ onClick={onLast}
+ className={`relative inline-flex items-center px-2 ml-1 md:px-3 py-2 text-xs font-medium rounded-md ${
+ props.page >= pages
+ ? 'text-gray-500'
+ : 'text-green-400 hover:text-white hover:bg-green-400'
+ } bg-gray-100 `}
+ >
+ Last
+
+
+
+ )}
+
+
+ );
+};
+
+export default Paginator;
diff --git a/apps/bos-components/src/includes/Common/Status.tsx b/apps/bos-components/src/includes/Common/Status.tsx
new file mode 100644
index 00000000..47678fb0
--- /dev/null
+++ b/apps/bos-components/src/includes/Common/Status.tsx
@@ -0,0 +1,54 @@
+interface Props {
+ status: boolean;
+ showLabel: boolean;
+}
+import FaCheckCircle from '@/includes/icons/FaCheckCircle';
+import FaTimesCircle from '@/includes/icons/FaTimesCircle';
+import FaHourglassStart from '@/includes/icons/FaHourglassStart';
+
+const getOptions = (status: boolean) => {
+ switch (status) {
+ case null:
+ return {
+ bg: 'bg-yellow-50',
+ text: 'text-yellow-500',
+ icon: FaHourglassStart,
+ label: 'Pending',
+ };
+ case false:
+ return {
+ bg: 'bg-red-50',
+ text: 'text-red-500',
+ icon: FaTimesCircle,
+ label: 'Failure',
+ };
+
+ default:
+ return {
+ bg: 'bg-emerald-50',
+ text: 'text-emerald-500',
+ icon: FaCheckCircle,
+ label: 'Success',
+ };
+ }
+};
+
+const TxnStatus = (props: Props) => {
+ const option = getOptions(props.status);
+ const Icon = option.icon;
+
+ return (
+
+
+
+ {props.showLabel && {option.label} }
+
+
+ );
+};
+
+export default TxnStatus;
diff --git a/apps/bos-components/src/includes/formats.ts b/apps/bos-components/src/includes/formats.ts
index e2cdf314..f38e08c4 100644
--- a/apps/bos-components/src/includes/formats.ts
+++ b/apps/bos-components/src/includes/formats.ts
@@ -1,3 +1,5 @@
+import { yoctoToNear } from '@/includes/libs';
+
export function localFormat(number: number) {
const formattedNumber = Number(number).toLocaleString('en', {
minimumFractionDigits: 0,
@@ -88,3 +90,150 @@ export function convertToUTC(timestamp: number, hour: boolean) {
return formattedDate;
}
+
+export function getTimeAgoString(timestamp: number) {
+ const currentUTC = Date.now();
+ const date = new Date(timestamp);
+ const seconds = Math.floor((currentUTC - date.getTime()) / 1000);
+
+ const intervals = {
+ year: seconds / (60 * 60 * 24 * 365),
+ month: seconds / (60 * 60 * 24 * 30),
+ week: seconds / (60 * 60 * 24 * 7),
+ day: seconds / (60 * 60 * 24),
+ hour: seconds / (60 * 60),
+ minute: seconds / 60,
+ };
+
+ if (intervals.year > 1) {
+ return Math.floor(intervals.year) + ' years ago';
+ } else if (intervals.month > 1) {
+ return Math.floor(intervals.month) + ' months ago';
+ } else if (intervals.week > 1) {
+ return Math.floor(intervals.week) + ' weeks ago';
+ } else if (intervals.day > 1) {
+ return Math.floor(intervals.day) + ' days ago';
+ } else if (intervals.hour > 1) {
+ return Math.floor(intervals.hour) + ' hours ago';
+ } else if (intervals.minute > 1) {
+ return Math.floor(intervals.minute) + ' minutes ago';
+ } else {
+ return 'a few seconds ago';
+ }
+}
+
+export function formatWithCommas(number: string) {
+ return number.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ',');
+}
+
+export function formatTimestampToString(timestamp: number) {
+ const date = new Date(timestamp);
+
+ // Format the date to 'YYYY-MM-DD HH:mm:ss' format
+ const formattedDate = date.toISOString().replace('T', ' ').split('.')[0];
+
+ return formattedDate;
+}
+
+export function convertToMetricPrefix(number: number) {
+ const prefixes = ['', 'k', 'M', 'G', 'T', 'P', 'E', 'Z', 'Y']; // Metric prefixes
+
+ let count = 0;
+ while (Math.abs(number) >= 1000 && count < prefixes.length - 1) {
+ number /= 1000;
+ count++;
+ }
+
+ return number.toFixed(2) + prefixes[count];
+}
+
+export function gasFee(gas: number, price: number) {
+ const near = yoctoToNear(Big(gas).mul(Big(price)).toString(), true);
+
+ return `${near} Ⓝ`;
+}
+
+export function currency(number: number): string {
+ let absNumber = Math.abs(number);
+
+ const suffixes = ['', 'K', 'M', 'B', 'T', 'Q'];
+ let suffixIndex = 0;
+
+ while (absNumber >= 1000 && suffixIndex < suffixes.length - 1) {
+ absNumber /= 1000;
+ suffixIndex++;
+ }
+
+ let shortNumber = parseFloat(absNumber.toFixed(2));
+
+ return (number < 0 ? '-' : '') + shortNumber + ' ' + suffixes[suffixIndex];
+}
+
+export function formatDate(dateString: string) {
+ const inputDate = new Date(dateString);
+
+ const days = [
+ 'Sunday',
+ 'Monday',
+ 'Tuesday',
+ 'Wednesday',
+ 'Thursday',
+ 'Friday',
+ 'Saturday',
+ ];
+ const months = [
+ 'January',
+ 'February',
+ 'March',
+ 'April',
+ 'May',
+ 'June',
+ 'July',
+ 'August',
+ 'September',
+ 'October',
+ 'November',
+ 'December',
+ ];
+
+ const dayOfWeek = days[inputDate.getDay()];
+ const month = months[inputDate.getMonth()];
+ const day = inputDate.getDate();
+ const year = inputDate.getFullYear();
+
+ const formattedDate = dayOfWeek + ', ' + month + ' ' + day + ', ' + year;
+ return formattedDate;
+}
+
+export function formatCustomDate(inputDate: string) {
+ var date = new Date(inputDate);
+
+ // Array of month names
+ var monthNames = [
+ 'Jan',
+ 'Feb',
+ 'Mar',
+ 'Apr',
+ 'May',
+ 'Jun',
+ 'Jul',
+ 'Aug',
+ 'Sep',
+ 'Oct',
+ 'Nov',
+ 'Dec',
+ ];
+
+ // Get month and day
+ var month = monthNames[date.getMonth()];
+ var day = date.getDate();
+
+ // Create formatted date string in "MMM DD" format
+ var formattedDate = month + ' ' + (day < 10 ? '0' + day : day);
+
+ return formattedDate;
+}
+
+export function shortenHex(address: string) {
+ return `${address && address.substr(0, 6)}...${address.substr(-4)}`;
+}
diff --git a/apps/bos-components/src/includes/icons/ArrowUp.tsx b/apps/bos-components/src/includes/icons/ArrowUp.tsx
new file mode 100644
index 00000000..3756f5f3
--- /dev/null
+++ b/apps/bos-components/src/includes/icons/ArrowUp.tsx
@@ -0,0 +1,19 @@
+interface Props {
+ className: string;
+}
+const ArrowUp = (props: Props) => {
+ return (
+
+
+
+
+ );
+};
+
+export default ArrowUp;
diff --git a/apps/bos-components/src/includes/icons/FaCheckCircle.tsx b/apps/bos-components/src/includes/icons/FaCheckCircle.tsx
new file mode 100644
index 00000000..2099af29
--- /dev/null
+++ b/apps/bos-components/src/includes/icons/FaCheckCircle.tsx
@@ -0,0 +1,12 @@
+const FaCheckCircle = () => {
+ return (
+
+
+
+ );
+};
+
+export default FaCheckCircle;
diff --git a/apps/bos-components/src/includes/icons/FaChevronLeft.tsx b/apps/bos-components/src/includes/icons/FaChevronLeft.tsx
new file mode 100644
index 00000000..0f1d95e2
--- /dev/null
+++ b/apps/bos-components/src/includes/icons/FaChevronLeft.tsx
@@ -0,0 +1,19 @@
+const FaChevronLeft = () => {
+ return (
+
+
+
+ );
+};
+
+export default FaChevronLeft;
diff --git a/apps/bos-components/src/includes/icons/FaChevronRight.tsx b/apps/bos-components/src/includes/icons/FaChevronRight.tsx
new file mode 100644
index 00000000..d36e4a65
--- /dev/null
+++ b/apps/bos-components/src/includes/icons/FaChevronRight.tsx
@@ -0,0 +1,19 @@
+const FaChevronRight = () => {
+ return (
+
+
+
+ );
+};
+
+export default FaChevronRight;
diff --git a/apps/bos-components/src/includes/icons/FaHourglassStart.tsx b/apps/bos-components/src/includes/icons/FaHourglassStart.tsx
new file mode 100644
index 00000000..7a676bd8
--- /dev/null
+++ b/apps/bos-components/src/includes/icons/FaHourglassStart.tsx
@@ -0,0 +1,12 @@
+const FaHourglassStart = () => {
+ return (
+
+
+
+ );
+};
+
+export default FaHourglassStart;
diff --git a/apps/bos-components/src/includes/icons/FaLongArrowAltRight.tsx b/apps/bos-components/src/includes/icons/FaLongArrowAltRight.tsx
new file mode 100644
index 00000000..90aa967c
--- /dev/null
+++ b/apps/bos-components/src/includes/icons/FaLongArrowAltRight.tsx
@@ -0,0 +1,12 @@
+const FaLongArrowAltRight = () => {
+ return (
+
+
+
+ );
+};
+
+export default FaLongArrowAltRight;
diff --git a/apps/bos-components/src/includes/icons/FaTimesCircle.tsx b/apps/bos-components/src/includes/icons/FaTimesCircle.tsx
new file mode 100644
index 00000000..67d24b1d
--- /dev/null
+++ b/apps/bos-components/src/includes/icons/FaTimesCircle.tsx
@@ -0,0 +1,12 @@
+const FaTimesCircle = () => {
+ return (
+
+
+
+ );
+};
+
+export default FaTimesCircle;
diff --git a/apps/bos-components/src/includes/icons/SortIcon.tsx b/apps/bos-components/src/includes/icons/SortIcon.tsx
new file mode 100644
index 00000000..e3bedb24
--- /dev/null
+++ b/apps/bos-components/src/includes/icons/SortIcon.tsx
@@ -0,0 +1,16 @@
+interface Props {
+ order: string;
+}
+import ArrowUp from '@/includes/icons/ArrowUp';
+
+const SortIcon = (props: Props) => {
+ return (
+
+ );
+};
+
+export default SortIcon;
diff --git a/apps/bos-components/src/includes/libs.ts b/apps/bos-components/src/includes/libs.ts
index 8f8e8ad8..af61c9ab 100644
--- a/apps/bos-components/src/includes/libs.ts
+++ b/apps/bos-components/src/includes/libs.ts
@@ -1,4 +1,35 @@
-import { localFormat } from '@/includes/formats';
+import { localFormat, formatWithCommas } from '@/includes/formats';
+
+export function convertAmountToReadableString(amount: number, type: string) {
+ if (!amount) return null;
+
+ let value;
+ let suffix;
+
+ const nearNomination = Math.pow(10, 24);
+
+ const amountInNear = Number(amount) / nearNomination;
+
+ if (type === 'totalSupply' || type === 'totalStakeAmount') {
+ value = formatWithCommas((amountInNear / 1e6).toFixed(1));
+ suffix = 'M';
+ } else if (type === 'seatPriceAmount') {
+ value = formatWithCommas(Math.round(amountInNear).toString());
+ } else {
+ value = amount.toString();
+ }
+ return `${value}${suffix}`;
+}
+
+export function convertTimestampToTime(timestamp: number) {
+ const hours = Math.floor(timestamp / 3600);
+ const minutes = Math.floor((timestamp % 3600) / 60);
+ const seconds = Math.floor(timestamp % 60);
+
+ return `${hours.toString().padStart(2, '0')}H ${minutes
+ .toString()
+ .padStart(2, '0')}M ${seconds.toString().padStart(2, '0')}S`;
+}
export function yoctoToNear(yocto: number, format: boolean) {
const YOCTO_PER_NEAR = Big(10).pow(24).toString();
@@ -42,7 +73,7 @@ export function getConfig(network: string) {
return {
ownerId: 'nearblocks.near',
nodeUrl: 'https://rpc.mainnet.near.org',
- backendUrl: 'https://api.nearblocks.io/v1/',
+ backendUrl: 'https://api-beta.nearblocks.io/v1/',
rpcUrl: 'https://archival-rpc.testnet.near.org',
appUrl: 'https://nearblocks.io/',
};
@@ -50,7 +81,7 @@ export function getConfig(network: string) {
return {
ownerId: 'nearblocks.testnet',
nodeUrl: 'https://rpc.testnet.near.org',
- backendUrl: 'https://api-testnet.nearblocks.io/v1/',
+ backendUrl: 'https://api-testnet-beta.nearblocks.io/v1/',
rpcUrl: 'https://archival-rpc.testnet.near.org',
appUrl: 'https://testnet.nearblocks.io/',
};
diff --git a/apps/bos-components/src/includes/near.ts b/apps/bos-components/src/includes/near.ts
index 17437b1f..f19a034e 100644
--- a/apps/bos-components/src/includes/near.ts
+++ b/apps/bos-components/src/includes/near.ts
@@ -1,3 +1,6 @@
+import { localFormat } from '@/includes/formats';
+import { yoctoToNear } from '@/includes/libs';
+
export function encodeArgs(args: object) {
if (!args || typeof args === 'undefined') return '';
@@ -9,3 +12,24 @@ export function decodeArgs(args: number[]) {
const encodedString = Buffer.from(args).toString('base64');
return JSON.parse(Buffer.from(encodedString, 'base64').toString());
}
+
+export function txnMethod(actions: { action: string; method: string }[]) {
+ const count = actions?.length || 0;
+
+ if (!count) return 'Unknown';
+ if (count > 1) return 'Batch Transaction';
+
+ const action = actions[0];
+
+ if (action.action === 'FUNCTION_CALL') {
+ return action.method;
+ }
+
+ return action.action;
+}
+
+export function gasPrice(yacto: number) {
+ const near = Big(yoctoToNear(yacto, false)).mul(Big(10).pow(12)).toString();
+
+ return `${localFormat(near)} Ⓝ / Tgas`;
+}
diff --git a/apps/bos-components/src/includes/types.ts b/apps/bos-components/src/includes/types.ts
index 17202e0a..8d52833f 100644
--- a/apps/bos-components/src/includes/types.ts
+++ b/apps/bos-components/src/includes/types.ts
@@ -97,3 +97,126 @@ export type FtInfo = {
amount: number;
tokens: TokenListInfo[];
};
+
+export type BlocksInfo = {
+ author_account_id: string;
+ block_hash: string;
+ block_height: number;
+ block_timestamp: number;
+ chunks_agg: {
+ gas_limit: number;
+ gas_used: number;
+ };
+ gas_price: number;
+ receipts_agg: {
+ count: number;
+ };
+ transactions_agg: {
+ count: number;
+ };
+};
+
+export type StatusInfo = {
+ avg_block_time: number;
+ block: number;
+ change_24: number;
+ gas_price: number;
+ high_24h: number;
+ high_all: number;
+ low_24h: number;
+ low_all: number;
+ market_cap: number;
+ near_btc_price: number;
+ near_price: number;
+ nodes: number;
+ nodes_online: number;
+ total_supply: number;
+ total_txns: number;
+ volume: number;
+};
+export type ChartSeriesInfo = {
+ type: string;
+ data: number[];
+ color: string;
+};
+
+export type ChartConfigType = {
+ chart: {
+ height: number;
+ spacingTop: number;
+ spacingBottom: number;
+ spacingLeft: number;
+ spacingRight: number;
+ };
+ title: {
+ text: null;
+ };
+ xAxis: {
+ type: string;
+ lineWidth: number;
+ tickLength: number;
+ labels: {
+ step: number;
+ };
+ categories: string;
+ };
+ yAxis: {
+ gridLineWidth: number;
+ title: {
+ text: null;
+ };
+ };
+ legend: {
+ enabled: boolean;
+ };
+ plotOptions: {
+ spline: {
+ lineWidth: number;
+ states: {
+ hover: {
+ lineWidth: number;
+ };
+ };
+ marker: {
+ radius: number;
+ };
+ };
+ };
+ series: [ChartSeriesInfo];
+ exporting: {
+ enabled: boolean;
+ };
+ credits: {
+ enabled: boolean;
+ };
+};
+
+export type ChartInfo = {
+ date: string;
+ near_price: string;
+ txns: string;
+};
+
+export type TransactionInfo = {
+ actions: {
+ action: string;
+ method: string;
+ }[];
+ actions_agg: {
+ deposit: number;
+ };
+ block: {
+ block_height: number;
+ };
+ block_timestamp: string;
+ included_in_block_hash: string;
+ outcomes: {
+ status: boolean;
+ };
+ outcomes_agg: {
+ transaction_fee: number;
+ };
+ receiver_account_id: string;
+ signer_account_id: string;
+ transaction_hash: string;
+};
diff --git a/apps/bos-components/tailwind.config.js b/apps/bos-components/tailwind.config.js
index c3bd879e..ec60bb5a 100644
--- a/apps/bos-components/tailwind.config.js
+++ b/apps/bos-components/tailwind.config.js
@@ -76,6 +76,10 @@ module.exports = {
borderRadius: {
'4xl': '30px',
},
+ backgroundImage: (theme) => ({
+ 'hero-pattern': "url('/images/wavey-fingerprint.png')",
+ 'error-pattern': "url('/images/leaf_nearscan.jpg')",
+ }),
},
},
plugins: [],
diff --git a/apps/indexer-balance/src/config.ts b/apps/indexer-balance/src/config.ts
index 8708408f..86788dcd 100644
--- a/apps/indexer-balance/src/config.ts
+++ b/apps/indexer-balance/src/config.ts
@@ -1,4 +1,5 @@
-import { cleanEnv, str } from 'envalid';
+import { cleanEnv, str, url } from 'envalid';
+import { types } from 'near-lake-framework';
import { Network } from 'nb-types';
@@ -9,19 +10,31 @@ const env = cleanEnv(process.env, {
DATABASE_CERT: str({ default: '' }),
DATABASE_KEY: str({ default: '' }),
DATABASE_URL: str(),
- NETWORK: str(),
+ NETWORK: str({
+ choices: [Network.MAINNET, Network.TESTNET],
+ }),
REDIS_URL: str(),
RPC_URL: str(),
+ S3_ENDPOINT: url({ default: '' }),
SENTRY_DSN: str({ default: '' }),
});
-const network: Network =
- env.NETWORK === Network.TESTNET ? Network.TESTNET : Network.MAINNET;
+let s3Endpoint: null | types.EndpointConfig = null;
const s3BucketName =
- network === Network.MAINNET
+ env.NETWORK === Network.MAINNET
? 'near-lake-data-mainnet'
: 'near-lake-data-testnet';
+if (env.S3_ENDPOINT) {
+ const endpoint = new URL(env.S3_ENDPOINT);
+ s3Endpoint = {
+ hostname: endpoint.hostname,
+ path: endpoint.pathname,
+ port: +endpoint.port || 80,
+ protocol: endpoint.protocol,
+ };
+}
+
const config: Config = {
cacheExpiry: 60 * 60, // cache expiry time in seconds (1 hour)
dbCa: env.DATABASE_CA,
@@ -30,11 +43,12 @@ const config: Config = {
dbUrl: env.DATABASE_URL,
delta: 100, // start from blocks earlier on sync interuption
insertLimit: 1_000, // records to insert into the db at a time
- network: network,
+ network: env.NETWORK,
preloadSize: 100, // blocks to preload in nearlake
redisUrl: env.REDIS_URL,
rpcUrl: env.RPC_URL,
s3BucketName,
+ s3Endpoint,
s3RegionName: 'eu-central-1',
sentryDsn: env.SENTRY_DSN,
startBlockHeight: 0,
diff --git a/apps/indexer-balance/src/services/stream.ts b/apps/indexer-balance/src/services/stream.ts
index 1de1d689..aa6e70ae 100644
--- a/apps/indexer-balance/src/services/stream.ts
+++ b/apps/indexer-balance/src/services/stream.ts
@@ -15,6 +15,10 @@ const lakeConfig: types.LakeConfig = {
startBlockHeight: config.startBlockHeight,
};
+if (config.s3Endpoint) {
+ lakeConfig.s3Endpoint = config.s3Endpoint;
+}
+
export const syncData = async () => {
const settings = await knex('settings').where({ key: balanceKey }).first();
const latestBlock = settings?.value?.sync;
diff --git a/apps/indexer-balance/src/types/types.ts b/apps/indexer-balance/src/types/types.ts
index bc48c6e2..400d84bb 100644
--- a/apps/indexer-balance/src/types/types.ts
+++ b/apps/indexer-balance/src/types/types.ts
@@ -1,3 +1,5 @@
+import { types } from 'near-lake-framework';
+
import { Network, StateChangeCauseView, StateChangeValueView } from 'nb-types';
export type Config = {
@@ -13,6 +15,7 @@ export type Config = {
redisUrl: string;
rpcUrl: string;
s3BucketName: string;
+ s3Endpoint: null | types.EndpointConfig;
s3RegionName: string;
sentryDsn?: string;
startBlockHeight: number;
diff --git a/apps/indexer-base/src/config.ts b/apps/indexer-base/src/config.ts
index a4c59bae..58e00133 100644
--- a/apps/indexer-base/src/config.ts
+++ b/apps/indexer-base/src/config.ts
@@ -1,4 +1,5 @@
-import { cleanEnv, str } from 'envalid';
+import { cleanEnv, str, url } from 'envalid';
+import { types } from 'near-lake-framework';
import { Network } from 'nb-types';
@@ -9,22 +10,36 @@ const env = cleanEnv(process.env, {
DATABASE_CERT: str({ default: '' }),
DATABASE_KEY: str({ default: '' }),
DATABASE_URL: str(),
- NETWORK: str(),
+ NETWORK: str({
+ choices: [Network.MAINNET, Network.TESTNET],
+ }),
REDIS_URL: str(),
+ S3_ENDPOINT: url(),
SENTRY_DSN: str({ default: '' }),
});
-const network: Network =
- env.NETWORK === Network.TESTNET ? Network.TESTNET : Network.MAINNET;
-const genesisHeight = network === Network.MAINNET ? 9_820_210 : 42_376_888;
+const genesisHeight = env.NETWORK === Network.MAINNET ? 9_820_210 : 42_376_888;
const genesisTimestamp =
- network === Network.MAINNET ? '1595350551591948000' : '1596166782911378000';
-const genesisFile = `https://s3-us-west-1.amazonaws.com/build.nearprotocol.com/nearcore-deploy/${network}/genesis.json`;
+ env.NETWORK === Network.MAINNET
+ ? '1595350551591948000'
+ : '1596166782911378000';
+const genesisFile = `https://s3-us-west-1.amazonaws.com/build.nearprotocol.com/nearcore-deploy/${env.NETWORK}/genesis.json`;
+let s3Endpoint: null | types.EndpointConfig = null;
const s3BucketName =
- network === Network.MAINNET
+ env.NETWORK === Network.MAINNET
? 'near-lake-data-mainnet'
: 'near-lake-data-testnet';
+if (env.S3_ENDPOINT) {
+ const endpoint = new URL(env.S3_ENDPOINT);
+ s3Endpoint = {
+ hostname: endpoint.hostname,
+ path: endpoint.pathname,
+ port: +endpoint.port || 80,
+ protocol: endpoint.protocol,
+ };
+}
+
const config: Config = {
cacheExpiry: 5 * 60, // cache expiry time in seconds (5 min)
dbCa: env.DATABASE_CA,
@@ -36,10 +51,11 @@ const config: Config = {
genesisHeight,
genesisTimestamp,
insertLimit: 1_000, // records to insert into the db at a time
- network: network,
+ network: env.NETWORK,
preloadSize: 100, // blocks to preload in nearlake
redisUrl: env.REDIS_URL,
s3BucketName,
+ s3Endpoint,
s3RegionName: 'eu-central-1',
sentryDsn: env.SENTRY_DSN,
};
diff --git a/apps/indexer-base/src/services/stream.ts b/apps/indexer-base/src/services/stream.ts
index 9ba57378..f15a7169 100644
--- a/apps/indexer-base/src/services/stream.ts
+++ b/apps/indexer-base/src/services/stream.ts
@@ -21,6 +21,10 @@ const lakeConfig: types.LakeConfig = {
startBlockHeight: config.genesisHeight,
};
+if (config.s3Endpoint) {
+ lakeConfig.s3Endpoint = config.s3Endpoint;
+}
+
export const syncData = async () => {
const block = await knex('blocks').orderBy('block_height', 'desc').first();
diff --git a/apps/indexer-base/src/types/types.ts b/apps/indexer-base/src/types/types.ts
index a3416e3b..9506fbad 100644
--- a/apps/indexer-base/src/types/types.ts
+++ b/apps/indexer-base/src/types/types.ts
@@ -17,6 +17,7 @@ export interface Config {
preloadSize: number;
redisUrl: string;
s3BucketName: string;
+ s3Endpoint: null | types.EndpointConfig;
s3RegionName: string;
sentryDsn?: string;
}
diff --git a/apps/indexer-events/src/config.ts b/apps/indexer-events/src/config.ts
index 53e9e102..5ea54224 100644
--- a/apps/indexer-events/src/config.ts
+++ b/apps/indexer-events/src/config.ts
@@ -1,4 +1,5 @@
-import { cleanEnv, str } from 'envalid';
+import { cleanEnv, str, url } from 'envalid';
+import { types } from 'near-lake-framework';
import { Network } from 'nb-types';
@@ -9,19 +10,31 @@ const env = cleanEnv(process.env, {
DATABASE_CERT: str({ default: '' }),
DATABASE_KEY: str({ default: '' }),
DATABASE_URL: str(),
- NETWORK: str(),
+ NETWORK: str({
+ choices: [Network.MAINNET, Network.TESTNET],
+ }),
REDIS_URL: str(),
RPC_URL: str(),
+ S3_ENDPOINT: url(),
SENTRY_DSN: str({ default: '' }),
});
-const network: Network =
- env.NETWORK === Network.TESTNET ? Network.TESTNET : Network.MAINNET;
+let s3Endpoint: null | types.EndpointConfig = null;
const s3BucketName =
- network === Network.MAINNET
+ env.NETWORK === Network.MAINNET
? 'near-lake-data-mainnet'
: 'near-lake-data-testnet';
+if (env.S3_ENDPOINT) {
+ const endpoint = new URL(env.S3_ENDPOINT);
+ s3Endpoint = {
+ hostname: endpoint.hostname,
+ path: endpoint.pathname,
+ port: +endpoint.port || 80,
+ protocol: endpoint.protocol,
+ };
+}
+
const config: Config = {
cacheExpiry: 60 * 60, // cache expiry time in seconds (1 hour)
dbCa: env.DATABASE_CA,
@@ -30,11 +43,12 @@ const config: Config = {
dbUrl: env.DATABASE_URL,
delta: 100, // start from blocks earlier on sync interuption
insertLimit: 1_000, // records to insert into the db at a time
- network: network,
+ network: env.NETWORK,
preloadSize: 100, // blocks to preload in nearlake
redisUrl: env.REDIS_URL,
rpcUrl: env.RPC_URL,
s3BucketName,
+ s3Endpoint,
s3RegionName: 'eu-central-1',
sentryDsn: env.SENTRY_DSN,
startBlockHeight: 30_181_500,
diff --git a/apps/indexer-events/src/services/stream.ts b/apps/indexer-events/src/services/stream.ts
index 2604e58b..2bb7dcd5 100644
--- a/apps/indexer-events/src/services/stream.ts
+++ b/apps/indexer-events/src/services/stream.ts
@@ -15,6 +15,10 @@ const lakeConfig: types.LakeConfig = {
startBlockHeight: config.startBlockHeight,
};
+if (config.s3Endpoint) {
+ lakeConfig.s3Endpoint = config.s3Endpoint;
+}
+
export const syncData = async () => {
const settings = await knex('settings').where({ key: eventsKey }).first();
const latestBlock = settings?.value?.sync;
diff --git a/apps/indexer-events/src/types/types.ts b/apps/indexer-events/src/types/types.ts
index 40a031a5..d85f77ca 100644
--- a/apps/indexer-events/src/types/types.ts
+++ b/apps/indexer-events/src/types/types.ts
@@ -16,6 +16,7 @@ export type Config = {
redisUrl: string;
rpcUrl: string;
s3BucketName: string;
+ s3Endpoint: null | types.EndpointConfig;
s3RegionName: string;
sentryDsn?: string;
startBlockHeight: number;
diff --git a/apps/nearblocks/public/common.css b/apps/nearblocks/public/common.css
new file mode 100644
index 00000000..a4d3f607
--- /dev/null
+++ b/apps/nearblocks/public/common.css
@@ -0,0 +1,1526 @@
+/*
+! tailwindcss v3.3.5 | MIT License | https://tailwindcss.com
+*//*
+1. Prevent padding and border from affecting element width. (https://github.com/mozdevs/cssremedy/issues/4)
+2. Allow adding a border to an element by just adding a border-width. (https://github.com/tailwindcss/tailwindcss/pull/116)
+*/
+
+*,
+::before,
+::after {
+ box-sizing: border-box; /* 1 */
+ border-width: 0; /* 2 */
+ border-style: solid; /* 2 */
+ border-color: #e5e7eb; /* 2 */
+}
+
+::before,
+::after {
+ --tw-content: '';
+}
+
+/*
+1. Use a consistent sensible line-height in all browsers.
+2. Prevent adjustments of font size after orientation changes in iOS.
+3. Use a more readable tab size.
+4. Use the user's configured `sans` font-family by default.
+5. Use the user's configured `sans` font-feature-settings by default.
+6. Use the user's configured `sans` font-variation-settings by default.
+*/
+
+html {
+ line-height: 1.5; /* 1 */
+ -webkit-text-size-adjust: 100%; /* 2 */
+ -moz-tab-size: 4; /* 3 */
+ -o-tab-size: 4;
+ tab-size: 4; /* 3 */
+ font-family: 'Manrope', sans-serif; /* 4 */
+ font-feature-settings: normal; /* 5 */
+ font-variation-settings: normal; /* 6 */
+}
+
+/*
+1. Remove the margin in all browsers.
+2. Inherit line-height from `html` so users can set them as a class directly on the `html` element.
+*/
+
+body {
+ margin: 0; /* 1 */
+ line-height: inherit; /* 2 */
+}
+
+/*
+1. Add the correct height in Firefox.
+2. Correct the inheritance of border color in Firefox. (https://bugzilla.mozilla.org/show_bug.cgi?id=190655)
+3. Ensure horizontal rules are visible by default.
+*/
+
+hr {
+ height: 0; /* 1 */
+ color: inherit; /* 2 */
+ border-top-width: 1px; /* 3 */
+}
+
+/*
+Add the correct text decoration in Chrome, Edge, and Safari.
+*/
+
+abbr:where([title]) {
+ -webkit-text-decoration: underline dotted;
+ text-decoration: underline dotted;
+}
+
+/*
+Remove the default font size and weight for headings.
+*/
+
+h1,
+h2,
+h3,
+h4,
+h5,
+h6 {
+ font-size: inherit;
+ font-weight: inherit;
+}
+
+/*
+Reset links to optimize for opt-in styling instead of opt-out.
+*/
+
+a {
+ color: inherit;
+ text-decoration: inherit;
+}
+
+/*
+Add the correct font weight in Edge and Safari.
+*/
+
+b,
+strong {
+ font-weight: bolder;
+}
+
+/*
+1. Use the user's configured `mono` font family by default.
+2. Correct the odd `em` font sizing in all browsers.
+*/
+
+code,
+kbd,
+samp,
+pre {
+ font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace; /* 1 */
+ font-size: 1em; /* 2 */
+}
+
+/*
+Add the correct font size in all browsers.
+*/
+
+small {
+ font-size: 80%;
+}
+
+/*
+Prevent `sub` and `sup` elements from affecting the line height in all browsers.
+*/
+
+sub,
+sup {
+ font-size: 75%;
+ line-height: 0;
+ position: relative;
+ vertical-align: baseline;
+}
+
+sub {
+ bottom: -0.25em;
+}
+
+sup {
+ top: -0.5em;
+}
+
+/*
+1. Remove text indentation from table contents in Chrome and Safari. (https://bugs.chromium.org/p/chromium/issues/detail?id=999088, https://bugs.webkit.org/show_bug.cgi?id=201297)
+2. Correct table border color inheritance in all Chrome and Safari. (https://bugs.chromium.org/p/chromium/issues/detail?id=935729, https://bugs.webkit.org/show_bug.cgi?id=195016)
+3. Remove gaps between table borders by default.
+*/
+
+table {
+ text-indent: 0; /* 1 */
+ border-color: inherit; /* 2 */
+ border-collapse: collapse; /* 3 */
+}
+
+/*
+1. Change the font styles in all browsers.
+2. Remove the margin in Firefox and Safari.
+3. Remove default padding in all browsers.
+*/
+
+button,
+input,
+optgroup,
+select,
+textarea {
+ font-family: inherit; /* 1 */
+ font-feature-settings: inherit; /* 1 */
+ font-variation-settings: inherit; /* 1 */
+ font-size: 100%; /* 1 */
+ font-weight: inherit; /* 1 */
+ line-height: inherit; /* 1 */
+ color: inherit; /* 1 */
+ margin: 0; /* 2 */
+ padding: 0; /* 3 */
+}
+
+/*
+Remove the inheritance of text transform in Edge and Firefox.
+*/
+
+button,
+select {
+ text-transform: none;
+}
+
+/*
+1. Correct the inability to style clickable types in iOS and Safari.
+2. Remove default button styles.
+*/
+
+button,
+[type='button'],
+[type='reset'],
+[type='submit'] {
+ -webkit-appearance: button; /* 1 */
+ background-color: transparent; /* 2 */
+ background-image: none; /* 2 */
+}
+
+/*
+Use the modern Firefox focus style for all focusable elements.
+*/
+
+:-moz-focusring {
+ outline: auto;
+}
+
+/*
+Remove the additional `:invalid` styles in Firefox. (https://github.com/mozilla/gecko-dev/blob/2f9eacd9d3d995c937b4251a5557d95d494c9be1/layout/style/res/forms.css#L728-L737)
+*/
+
+:-moz-ui-invalid {
+ box-shadow: none;
+}
+
+/*
+Add the correct vertical alignment in Chrome and Firefox.
+*/
+
+progress {
+ vertical-align: baseline;
+}
+
+/*
+Correct the cursor style of increment and decrement buttons in Safari.
+*/
+
+::-webkit-inner-spin-button,
+::-webkit-outer-spin-button {
+ height: auto;
+}
+
+/*
+1. Correct the odd appearance in Chrome and Safari.
+2. Correct the outline style in Safari.
+*/
+
+[type='search'] {
+ -webkit-appearance: textfield; /* 1 */
+ outline-offset: -2px; /* 2 */
+}
+
+/*
+Remove the inner padding in Chrome and Safari on macOS.
+*/
+
+::-webkit-search-decoration {
+ -webkit-appearance: none;
+}
+
+/*
+1. Correct the inability to style clickable types in iOS and Safari.
+2. Change font properties to `inherit` in Safari.
+*/
+
+::-webkit-file-upload-button {
+ -webkit-appearance: button; /* 1 */
+ font: inherit; /* 2 */
+}
+
+/*
+Add the correct display in Chrome and Safari.
+*/
+
+summary {
+ display: list-item;
+}
+
+/*
+Removes the default spacing and border for appropriate elements.
+*/
+
+blockquote,
+dl,
+dd,
+h1,
+h2,
+h3,
+h4,
+h5,
+h6,
+hr,
+figure,
+p,
+pre {
+ margin: 0;
+}
+
+fieldset {
+ margin: 0;
+ padding: 0;
+}
+
+legend {
+ padding: 0;
+}
+
+ol,
+ul,
+menu {
+ list-style: none;
+ margin: 0;
+ padding: 0;
+}
+
+/*
+Reset default styling for dialogs.
+*/
+dialog {
+ padding: 0;
+}
+
+/*
+Prevent resizing textareas horizontally by default.
+*/
+
+textarea {
+ resize: vertical;
+}
+
+/*
+1. Reset the default placeholder opacity in Firefox. (https://github.com/tailwindlabs/tailwindcss/issues/3300)
+2. Set the default placeholder color to the user's configured gray 400 color.
+*/
+
+input::-moz-placeholder, textarea::-moz-placeholder {
+ opacity: 1; /* 1 */
+ color: #9ca3af; /* 2 */
+}
+
+input::placeholder,
+textarea::placeholder {
+ opacity: 1; /* 1 */
+ color: #9ca3af; /* 2 */
+}
+
+/*
+Set the default cursor for buttons.
+*/
+
+button,
+[role="button"] {
+ cursor: pointer;
+}
+
+/*
+Make sure disabled buttons don't get the pointer cursor.
+*/
+:disabled {
+ cursor: default;
+}
+
+/*
+1. Make replaced elements `display: block` by default. (https://github.com/mozdevs/cssremedy/issues/14)
+2. Add `vertical-align: middle` to align replaced elements more sensibly by default. (https://github.com/jensimmons/cssremedy/issues/14#issuecomment-634934210)
+ This can trigger a poorly considered lint error in some tools but is included by design.
+*/
+
+img,
+svg,
+video,
+canvas,
+audio,
+iframe,
+embed,
+object {
+ display: block; /* 1 */
+ vertical-align: middle; /* 2 */
+}
+
+/*
+Constrain images and videos to the parent width and preserve their intrinsic aspect ratio. (https://github.com/mozdevs/cssremedy/issues/14)
+*/
+
+img,
+video {
+ max-width: 100%;
+ height: auto;
+}
+
+/* Make elements with the HTML hidden attribute stay hidden by default */
+[hidden] {
+ display: none;
+}
+
+*, ::before, ::after {
+ --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-gradient-from-position: ;
+ --tw-gradient-via-position: ;
+ --tw-gradient-to-position: ;
+ --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: rgb(138 219 201 / 0.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-gradient-from-position: ;
+ --tw-gradient-via-position: ;
+ --tw-gradient-to-position: ;
+ --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: rgb(138 219 201 / 0.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: ;
+}
+.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;
+ }
+}
+.pointer-events-none {
+ pointer-events: none;
+}
+.fixed {
+ position: fixed;
+}
+.absolute {
+ position: absolute;
+}
+.relative {
+ position: relative;
+}
+.inset-0 {
+ inset: 0px;
+}
+.bottom-2 {
+ bottom: 0.5rem;
+}
+.left-\[50\%\] {
+ left: 50%;
+}
+.right-0 {
+ right: 0px;
+}
+.right-2 {
+ right: 0.5rem;
+}
+.top-0 {
+ top: 0px;
+}
+.top-2 {
+ top: 0.5rem;
+}
+.top-\[50\%\] {
+ top: 50%;
+}
+.-z-50 {
+ z-index: -50;
+}
+.z-0 {
+ z-index: 0;
+}
+.z-10 {
+ z-index: 10;
+}
+.z-50 {
+ z-index: 50;
+}
+.order-1 {
+ order: 1;
+}
+.order-2 {
+ order: 2;
+}
+.col-span-2 {
+ grid-column: span 2 / span 2;
+}
+.m-2 {
+ margin: 0.5rem;
+}
+.-my-1 {
+ margin-top: -0.25rem;
+ margin-bottom: -0.25rem;
+}
+.mx-3 {
+ margin-left: 0.75rem;
+ margin-right: 0.75rem;
+}
+.mx-auto {
+ margin-left: auto;
+ margin-right: auto;
+}
+.-mt-14 {
+ margin-top: -3.5rem;
+}
+.-mt-48 {
+ margin-top: -12rem;
+}
+.mb-0 {
+ margin-bottom: 0px;
+}
+.mb-2 {
+ margin-bottom: 0.5rem;
+}
+.mb-3 {
+ margin-bottom: 0.75rem;
+}
+.mb-4 {
+ margin-bottom: 1rem;
+}
+.mb-6 {
+ margin-bottom: 1.5rem;
+}
+.ml-1 {
+ margin-left: 0.25rem;
+}
+.ml-10 {
+ margin-left: 2.5rem;
+}
+.ml-2 {
+ margin-left: 0.5rem;
+}
+.ml-4 {
+ margin-left: 1rem;
+}
+.ml-auto {
+ margin-left: auto;
+}
+.mr-1 {
+ margin-right: 0.25rem;
+}
+.mr-2 {
+ margin-right: 0.5rem;
+}
+.mr-3 {
+ margin-right: 0.75rem;
+}
+.mt-1 {
+ margin-top: 0.25rem;
+}
+.mt-10 {
+ margin-top: 2.5rem;
+}
+.mt-2 {
+ margin-top: 0.5rem;
+}
+.block {
+ display: block;
+}
+.inline-block {
+ display: inline-block;
+}
+.flex {
+ display: flex;
+}
+.inline-flex {
+ display: inline-flex;
+}
+.table {
+ display: table;
+}
+.grid {
+ display: grid;
+}
+.h-10 {
+ height: 2.5rem;
+}
+.h-16 {
+ height: 4rem;
+}
+.h-3 {
+ height: 0.75rem;
+}
+.h-4 {
+ height: 1rem;
+}
+.h-45 {
+ height: 11.93rem;
+}
+.h-5 {
+ height: 1.25rem;
+}
+.h-7 {
+ height: 1.75rem;
+}
+.h-72 {
+ height: 18rem;
+}
+.h-8 {
+ height: 2rem;
+}
+.h-80 {
+ height: 20rem;
+}
+.h-\[57px\] {
+ height: 57px;
+}
+.h-auto {
+ height: auto;
+}
+.h-full {
+ height: 100%;
+}
+.h-screen {
+ height: 100vh;
+}
+.max-h-60 {
+ max-height: 15rem;
+}
+.max-h-\[85vh\] {
+ max-height: 85vh;
+}
+.w-10 {
+ width: 2.5rem;
+}
+.w-14 {
+ width: 3.5rem;
+}
+.w-20 {
+ width: 5rem;
+}
+.w-24 {
+ width: 6rem;
+}
+.w-3 {
+ width: 0.75rem;
+}
+.w-32 {
+ width: 8rem;
+}
+.w-36 {
+ width: 9rem;
+}
+.w-4 {
+ width: 1rem;
+}
+.w-44 {
+ width: 11rem;
+}
+.w-5 {
+ width: 1.25rem;
+}
+.w-60 {
+ width: 15rem;
+}
+.w-65 {
+ width: 16.5rem;
+}
+.w-7 {
+ width: 1.75rem;
+}
+.w-80 {
+ width: 20rem;
+}
+.w-full {
+ width: 100%;
+}
+.min-w-full {
+ min-width: 100%;
+}
+.max-w-\[110px\] {
+ max-width: 110px;
+}
+.max-w-\[120px\] {
+ max-width: 120px;
+}
+.max-w-\[450px\] {
+ max-width: 450px;
+}
+.max-w-\[80px\] {
+ max-width: 80px;
+}
+.max-w-full {
+ max-width: 100%;
+}
+.max-w-xs {
+ max-width: 20rem;
+}
+.flex-1 {
+ flex: 1 1 0%;
+}
+.flex-shrink-0 {
+ flex-shrink: 0;
+}
+.translate-x-\[-50\%\] {
+ --tw-translate-x: -50%;
+ 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));
+}
+.translate-y-\[-50\%\] {
+ --tw-translate-y: -50%;
+ 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-0 {
+ --tw-rotate: 0deg;
+ 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-180 {
+ --tw-rotate: 180deg;
+ 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));
+}
+.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));
+}
+@keyframes pulse {
+
+ 50% {
+ opacity: .5;
+ }
+}
+.animate-pulse {
+ animation: pulse 2s cubic-bezier(0.4, 0, 0.6, 1) infinite;
+}
+.cursor-pointer {
+ cursor: pointer;
+}
+.touch-none {
+ touch-action: none;
+}
+.select-none {
+ -webkit-user-select: none;
+ -moz-user-select: none;
+ user-select: none;
+}
+.appearance-none {
+ -webkit-appearance: none;
+ -moz-appearance: none;
+ appearance: none;
+}
+.grid-cols-1 {
+ grid-template-columns: repeat(1, minmax(0, 1fr));
+}
+.grid-cols-2 {
+ grid-template-columns: repeat(2, minmax(0, 1fr));
+}
+.flex-col {
+ flex-direction: column;
+}
+.flex-wrap {
+ flex-wrap: wrap;
+}
+.items-center {
+ align-items: center;
+}
+.justify-end {
+ justify-content: flex-end;
+}
+.justify-center {
+ justify-content: center;
+}
+.justify-between {
+ justify-content: space-between;
+}
+.gap-2 {
+ gap: 0.5rem;
+}
+.gap-3 {
+ gap: 0.75rem;
+}
+.gap-4 {
+ gap: 1rem;
+}
+.space-x-2 > :not([hidden]) ~ :not([hidden]) {
+ --tw-space-x-reverse: 0;
+ margin-right: calc(0.5rem * var(--tw-space-x-reverse));
+ margin-left: calc(0.5rem * calc(1 - var(--tw-space-x-reverse)));
+}
+.space-y-4 > :not([hidden]) ~ :not([hidden]) {
+ --tw-space-y-reverse: 0;
+ margin-top: calc(1rem * calc(1 - var(--tw-space-y-reverse)));
+ margin-bottom: calc(1rem * var(--tw-space-y-reverse));
+}
+.divide-y > :not([hidden]) ~ :not([hidden]) {
+ --tw-divide-y-reverse: 0;
+ border-top-width: calc(1px * calc(1 - var(--tw-divide-y-reverse)));
+ border-bottom-width: calc(1px * var(--tw-divide-y-reverse));
+}
+.divide-gray-200 > :not([hidden]) ~ :not([hidden]) {
+ --tw-divide-opacity: 1;
+ border-color: rgb(229 231 235 / var(--tw-divide-opacity));
+}
+.overflow-hidden {
+ overflow: hidden;
+}
+.overflow-x-auto {
+ overflow-x: auto;
+}
+.truncate {
+ overflow: hidden;
+ text-overflow: ellipsis;
+ white-space: nowrap;
+}
+.whitespace-nowrap {
+ white-space: nowrap;
+}
+.break-words {
+ overflow-wrap: break-word;
+}
+.break-all {
+ word-break: break-all;
+}
+.rounded {
+ border-radius: 0.25rem;
+}
+.rounded-\[10px\] {
+ border-radius: 10px;
+}
+.rounded-\[6px\] {
+ border-radius: 6px;
+}
+.rounded-full {
+ border-radius: 9999px;
+}
+.rounded-lg {
+ border-radius: 0.5rem;
+}
+.rounded-md {
+ border-radius: 0.375rem;
+}
+.rounded-xl {
+ border-radius: 0.75rem;
+}
+.rounded-b-lg {
+ border-bottom-right-radius: 0.5rem;
+ border-bottom-left-radius: 0.5rem;
+}
+.rounded-bl-md {
+ border-bottom-left-radius: 0.375rem;
+}
+.rounded-tr {
+ border-top-right-radius: 0.25rem;
+}
+.border {
+ border-width: 1px;
+}
+.border-2 {
+ border-width: 2px;
+}
+.border-b {
+ border-bottom-width: 1px;
+}
+.border-t {
+ border-top-width: 1px;
+}
+.border-solid {
+ border-style: solid;
+}
+.border-gray-100 {
+ --tw-border-opacity: 1;
+ border-color: rgb(243 244 246 / var(--tw-border-opacity));
+}
+.border-green-900\/10 {
+ border-color: rgb(0 33 34 / 0.1);
+}
+.border-neargreen-200 {
+ --tw-border-opacity: 1;
+ border-color: rgb(51 142 123 / var(--tw-border-opacity));
+}
+.bg-black {
+ --tw-bg-opacity: 1;
+ background-color: rgb(27 27 27 / var(--tw-bg-opacity));
+}
+.bg-blue-900\/10 {
+ background-color: rgb(76 189 187 / 0.1);
+}
+.bg-emerald-50 {
+ --tw-bg-opacity: 1;
+ background-color: rgb(236 253 245 / var(--tw-bg-opacity));
+}
+.bg-gray-100 {
+ --tw-bg-opacity: 1;
+ background-color: rgb(243 244 246 / var(--tw-bg-opacity));
+}
+.bg-gray-200 {
+ --tw-bg-opacity: 1;
+ background-color: rgb(229 231 235 / var(--tw-bg-opacity));
+}
+.bg-gray-300 {
+ --tw-bg-opacity: 1;
+ background-color: rgb(209 213 219 / var(--tw-bg-opacity));
+}
+.bg-gray-400 {
+ --tw-bg-opacity: 1;
+ background-color: rgb(156 163 175 / var(--tw-bg-opacity));
+}
+.bg-gray-50 {
+ --tw-bg-opacity: 1;
+ background-color: rgb(249 250 251 / var(--tw-bg-opacity));
+}
+.bg-green-100 {
+ --tw-bg-opacity: 1;
+ background-color: rgb(53 113 114 / var(--tw-bg-opacity));
+}
+.bg-green-500 {
+ --tw-bg-opacity: 1;
+ background-color: rgb(13 73 74 / var(--tw-bg-opacity));
+}
+.bg-neargreen-200 {
+ --tw-bg-opacity: 1;
+ background-color: rgb(51 142 123 / var(--tw-bg-opacity));
+}
+.bg-red-50 {
+ --tw-bg-opacity: 1;
+ background-color: rgb(254 242 242 / var(--tw-bg-opacity));
+}
+.bg-warning-light {
+ --tw-bg-opacity: 1;
+ background-color: rgb(235 199 199 / var(--tw-bg-opacity));
+}
+.bg-white {
+ --tw-bg-opacity: 1;
+ background-color: rgb(255 255 255 / var(--tw-bg-opacity));
+}
+.bg-yellow-50 {
+ --tw-bg-opacity: 1;
+ background-color: rgb(254 252 232 / var(--tw-bg-opacity));
+}
+.bg-opacity-10 {
+ --tw-bg-opacity: 0.1;
+}
+.bg-opacity-90 {
+ --tw-bg-opacity: 0.9;
+}
+.fill-current {
+ fill: currentColor;
+}
+.fill-white {
+ fill: #fff;
+}
+.p-0 {
+ padding: 0px;
+}
+.p-0\.5 {
+ padding: 0.125rem;
+}
+.p-1 {
+ padding: 0.25rem;
+}
+.p-1\.5 {
+ padding: 0.375rem;
+}
+.p-2 {
+ padding: 0.5rem;
+}
+.p-3 {
+ padding: 0.75rem;
+}
+.p-\[25px\] {
+ padding: 25px;
+}
+.px-1 {
+ padding-left: 0.25rem;
+ padding-right: 0.25rem;
+}
+.px-2 {
+ padding-left: 0.5rem;
+ padding-right: 0.5rem;
+}
+.px-3 {
+ padding-left: 0.75rem;
+ padding-right: 0.75rem;
+}
+.px-5 {
+ padding-left: 1.25rem;
+ padding-right: 1.25rem;
+}
+.px-6 {
+ padding-left: 1.5rem;
+ padding-right: 1.5rem;
+}
+.py-1 {
+ padding-top: 0.25rem;
+ padding-bottom: 0.25rem;
+}
+.py-2 {
+ padding-top: 0.5rem;
+ padding-bottom: 0.5rem;
+}
+.py-3 {
+ padding-top: 0.75rem;
+ padding-bottom: 0.75rem;
+}
+.py-4 {
+ padding-top: 1rem;
+ padding-bottom: 1rem;
+}
+.py-8 {
+ padding-top: 2rem;
+ padding-bottom: 2rem;
+}
+.pb-2 {
+ padding-bottom: 0.5rem;
+}
+.pl-2 {
+ padding-left: 0.5rem;
+}
+.pl-5 {
+ padding-left: 1.25rem;
+}
+.pl-6 {
+ padding-left: 1.5rem;
+}
+.pr-2 {
+ padding-right: 0.5rem;
+}
+.pt-1 {
+ padding-top: 0.25rem;
+}
+.pt-3 {
+ padding-top: 0.75rem;
+}
+.pt-4 {
+ padding-top: 1rem;
+}
+.pt-8 {
+ padding-top: 2rem;
+}
+.text-left {
+ text-align: left;
+}
+.text-center {
+ text-align: center;
+}
+.text-right {
+ text-align: right;
+}
+.align-middle {
+ vertical-align: middle;
+}
+.align-bottom {
+ vertical-align: bottom;
+}
+.text-3xl {
+ font-size: 1.875rem;
+ line-height: 2.25rem;
+}
+.text-lg {
+ font-size: 1.125rem;
+ line-height: 1.75rem;
+}
+.text-sm {
+ font-size: 0.875rem;
+ line-height: 1.25rem;
+}
+.text-xl {
+ font-size: 1.25rem;
+ line-height: 1.75rem;
+}
+.text-xs {
+ font-size: 0.75rem;
+ line-height: 1rem;
+}
+.font-bold {
+ font-weight: 700;
+}
+.font-medium {
+ font-weight: 500;
+}
+.font-normal {
+ font-weight: 400;
+}
+.font-semibold {
+ font-weight: 600;
+}
+.font-thin {
+ font-weight: 100;
+}
+.uppercase {
+ text-transform: uppercase;
+}
+.leading-6 {
+ line-height: 1.5rem;
+}
+.leading-7 {
+ line-height: 1.75rem;
+}
+.leading-8 {
+ line-height: 2rem;
+}
+.tracking-wider {
+ letter-spacing: 0.05em;
+}
+.text-black {
+ --tw-text-opacity: 1;
+ color: rgb(27 27 27 / var(--tw-text-opacity));
+}
+.text-blue-600 {
+ --tw-text-opacity: 1;
+ color: rgb(128 209 191 / var(--tw-text-opacity));
+}
+.text-emerald-500 {
+ --tw-text-opacity: 1;
+ color: rgb(16 185 129 / var(--tw-text-opacity));
+}
+.text-gray-400 {
+ --tw-text-opacity: 1;
+ color: rgb(156 163 175 / var(--tw-text-opacity));
+}
+.text-gray-500 {
+ --tw-text-opacity: 1;
+ color: rgb(107 114 128 / var(--tw-text-opacity));
+}
+.text-gray-600 {
+ --tw-text-opacity: 1;
+ color: rgb(75 85 99 / var(--tw-text-opacity));
+}
+.text-gray-700 {
+ --tw-text-opacity: 1;
+ color: rgb(55 65 81 / var(--tw-text-opacity));
+}
+.text-green-400 {
+ --tw-text-opacity: 1;
+ color: rgb(23 83 84 / var(--tw-text-opacity));
+}
+.text-green-500 {
+ --tw-text-opacity: 1;
+ color: rgb(13 73 74 / var(--tw-text-opacity));
+}
+.text-nearblue-600 {
+ --tw-text-opacity: 1;
+ color: rgb(75 85 99 / var(--tw-text-opacity));
+}
+.text-red-500 {
+ --tw-text-opacity: 1;
+ color: rgb(239 68 68 / var(--tw-text-opacity));
+}
+.text-warning-dark {
+ --tw-text-opacity: 1;
+ color: rgb(191 79 79 / var(--tw-text-opacity));
+}
+.text-white {
+ --tw-text-opacity: 1;
+ color: rgb(255 255 255 / var(--tw-text-opacity));
+}
+.text-yellow-500 {
+ --tw-text-opacity: 1;
+ color: rgb(234 179 8 / var(--tw-text-opacity));
+}
+.no-underline {
+ text-decoration-line: none;
+}
+.shadow {
+ --tw-shadow: 0 1px 3px 0 rgb(0 0 0 / 0.1), 0 1px 2px -1px rgb(0 0 0 / 0.1);
+ --tw-shadow-colored: 0 1px 3px 0 var(--tw-shadow-color), 0 1px 2px -1px var(--tw-shadow-color);
+ box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);
+}
+.shadow-\[0_2px_10px\] {
+ --tw-shadow: 0 2px 10px;
+ --tw-shadow-colored: 0 2px 10px var(--tw-shadow-color);
+ box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);
+}
+.shadow-\[hsl\(206_22\%_7\%_\/_35\%\)_0px_10px_38px_-10px\2c _hsl\(206_22\%_7\%_\/_20\%\)_0px_10px_20px_-15px\] {
+ --tw-shadow: hsl(206 22% 7% / 35%) 0px 10px 38px -10px, hsl(206 22% 7% / 20%) 0px 10px 20px -15px;
+ --tw-shadow-colored: 0px 10px 38px -10px var(--tw-shadow-color), 0px 10px 20px -15px var(--tw-shadow-color);
+ box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);
+}
+.shadow-lg {
+ --tw-shadow: 0 10px 15px -3px rgb(0 0 0 / 0.1), 0 4px 6px -4px rgb(0 0 0 / 0.1);
+ --tw-shadow-colored: 0 10px 15px -3px var(--tw-shadow-color), 0 4px 6px -4px var(--tw-shadow-color);
+ box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);
+}
+.shadow-md {
+ --tw-shadow: 0 4px 6px -1px rgb(0 0 0 / 0.1), 0 2px 4px -2px rgb(0 0 0 / 0.1);
+ --tw-shadow-colored: 0 4px 6px -1px var(--tw-shadow-color), 0 2px 4px -2px var(--tw-shadow-color);
+ 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 rgb(0 0 0 / 0.05);
+ --tw-shadow-colored: 0 1px 2px 0 var(--tw-shadow-color);
+ box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);
+}
+.outline-none {
+ outline: 2px solid transparent;
+ outline-offset: 2px;
+}
+.drop-shadow-md {
+ --tw-drop-shadow: drop-shadow(0 4px 3px rgb(0 0 0 / 0.07)) drop-shadow(0 2px 2px rgb(0 0 0 / 0.06));
+ 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-colors {
+ transition-property: color, background-color, border-color, text-decoration-color, fill, stroke;
+ transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
+ transition-duration: 150ms;
+}
+.transition-transform {
+ transition-property: transform;
+ transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
+ transition-duration: 150ms;
+}
+.duration-700 {
+ transition-duration: 700ms;
+}
+.duration-\[160ms\] {
+ transition-duration: 160ms;
+}
+.ease-out {
+ transition-timing-function: cubic-bezier(0, 0, 0.2, 1);
+}
+
+b,
+strong {
+ font-weight: 600;
+}
+
+pre[class*='language-'] {
+ margin: 0 !important;
+}
+
+pre[class*='language-']>code {
+ border-left: 4px solid #2d8f44 !important;
+ box-shadow: -1px 0px 0px 0px #2d8f44, 0px 0px 0px 1px #dfdfdf !important;
+}
+
+.soft-shadow {
+ box-shadow: 0 2.6px 6.3px rgba(0, 0, 0, 0.06),
+ 0 6.3px 16px rgba(0, 0, 0, 0.04), 0 12px 32.6px rgba(0, 0, 0, 0.027),
+ 0 21.4px 67.2px rgba(0, 0, 0, 0.018), 0 43px 184px rgba(0, 0, 0, 0.011);
+}
+
+.image-shadow {
+ box-shadow: 0 1.6px 5.4px rgba(0, 0, 0, 0.054),
+ 0 4.4px 14.9px rgba(0, 0, 0, 0.069), 0 10.6px 35.9px rgba(0, 0, 0, 0.079),
+ 0 35px 119px rgba(0, 0, 0, 0.11);
+}
+
+.before\:absolute::before {
+ content: var(--tw-content);
+ position: absolute;
+}
+
+.before\:left-1\/2::before {
+ content: var(--tw-content);
+ left: 50%;
+}
+
+.before\:top-1\/2::before {
+ content: var(--tw-content);
+ top: 50%;
+}
+
+.before\:h-full::before {
+ content: var(--tw-content);
+ height: 100%;
+}
+
+.before\:min-h-\[44px\]::before {
+ content: var(--tw-content);
+ min-height: 44px;
+}
+
+.before\:w-full::before {
+ content: var(--tw-content);
+ width: 100%;
+}
+
+.before\:min-w-\[44px\]::before {
+ content: var(--tw-content);
+ min-width: 44px;
+}
+
+.before\:-translate-x-1\/2::before {
+ content: var(--tw-content);
+ --tw-translate-x: -50%;
+ 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));
+}
+
+.before\:-translate-y-1\/2::before {
+ content: var(--tw-content);
+ --tw-translate-y: -50%;
+ 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));
+}
+
+.before\:content-\[\'\'\]::before {
+ --tw-content: '';
+ content: var(--tw-content);
+}
+
+.hover\:bg-blue-900\/5:hover {
+ background-color: rgb(76 189 187 / 0.05);
+}
+
+.hover\:bg-gray-100:hover {
+ --tw-bg-opacity: 1;
+ background-color: rgb(243 244 246 / var(--tw-bg-opacity));
+}
+
+.hover\:bg-green-400:hover {
+ --tw-bg-opacity: 1;
+ background-color: rgb(23 83 84 / var(--tw-bg-opacity));
+}
+
+.hover\:bg-opacity-100:hover {
+ --tw-bg-opacity: 1;
+}
+
+.hover\:text-white:hover {
+ --tw-text-opacity: 1;
+ color: rgb(255 255 255 / var(--tw-text-opacity));
+}
+
+.hover\:no-underline:hover {
+ text-decoration-line: none;
+}
+
+.hover\:bg-blend-darken:hover {
+ background-blend-mode: darken;
+}
+
+.focus\:outline-none:focus {
+ outline: 2px solid transparent;
+ outline-offset: 2px;
+}
+
+.group:hover .group-hover\:text-white {
+ --tw-text-opacity: 1;
+ color: rgb(255 255 255 / var(--tw-text-opacity));
+}
+
+.data-\[orientation\=horizontal\]\:h-2\.5[data-orientation=horizontal] {
+ height: 0.625rem;
+}
+
+.data-\[orientation\=vertical\]\:w-2\.5[data-orientation=vertical] {
+ width: 0.625rem;
+}
+
+.data-\[orientation\=horizontal\]\:flex-col[data-orientation=horizontal] {
+ flex-direction: column;
+}
+
+@media (min-width: 640px) {
+
+ @media (min-width: 640px) {
+
+ .sm\:sm\:text-2xl {
+ font-size: 1.5rem;
+ line-height: 2rem;
+ }
+ }
+}
+
+@media (min-width: 768px) {
+
+ .md\:order-1 {
+ order: 1;
+ }
+
+ .md\:order-2 {
+ order: 2;
+ }
+
+ .md\:col-span-1 {
+ grid-column: span 1 / span 1;
+ }
+
+ .md\:mb-0 {
+ margin-bottom: 0px;
+ }
+
+ .md\:mb-10 {
+ margin-bottom: 2.5rem;
+ }
+
+ .md\:mb-2 {
+ margin-bottom: 0.5rem;
+ }
+
+ .md\:w-1\/4 {
+ width: 25%;
+ }
+
+ .md\:w-3\/4 {
+ width: 75%;
+ }
+
+ .md\:grid-cols-3 {
+ grid-template-columns: repeat(3, minmax(0, 1fr));
+ }
+
+ .md\:flex-col {
+ flex-direction: column;
+ }
+
+ .md\:items-center {
+ align-items: center;
+ }
+
+ .md\:px-3 {
+ padding-left: 0.75rem;
+ padding-right: 0.75rem;
+ }
+
+ .md\:px-4 {
+ padding-left: 1rem;
+ padding-right: 1rem;
+ }
+}
+
+@media (min-width: 1024px) {
+
+ .lg\:flex {
+ display: flex;
+ }
+
+ .lg\:grid-cols-2 {
+ grid-template-columns: repeat(2, minmax(0, 1fr));
+ }
+
+ .lg\:flex-row {
+ flex-direction: row;
+ }
+
+ .lg\:gap-3 {
+ gap: 0.75rem;
+ }
+
+ .lg\:space-x-2 > :not([hidden]) ~ :not([hidden]) {
+ --tw-space-x-reverse: 0;
+ margin-right: calc(0.5rem * var(--tw-space-x-reverse));
+ margin-left: calc(0.5rem * calc(1 - var(--tw-space-x-reverse)));
+ }
+}
+
+@media (min-width: 1280px) {
+
+ .xl\:mt-0 {
+ margin-top: 0px;
+ }
+
+ .xl\:flex-nowrap {
+ flex-wrap: nowrap;
+ }
+}
\ No newline at end of file
diff --git a/mainnet-backend.yml b/mainnet-backend.yml
index 408c67bb..57cadd28 100644
--- a/mainnet-backend.yml
+++ b/mainnet-backend.yml
@@ -8,4 +8,4 @@ services:
restart: always
extra_hosts:
- "host.docker.internal:host-gateway"
- env_file: mainnet.env
+ env_file: mainnet.backend.env
diff --git a/mainnet-indexer.yml b/mainnet-indexer.yml
index 51188b64..344d657a 100644
--- a/mainnet-indexer.yml
+++ b/mainnet-indexer.yml
@@ -8,7 +8,7 @@ services:
restart: always
extra_hosts:
- "host.docker.internal:host-gateway"
- env_file: mainnet.env
+ env_file: mainnet.indexer.env
indexer-balance:
container_name: mainnet-indexer-balance
build:
@@ -17,7 +17,7 @@ services:
restart: always
extra_hosts:
- "host.docker.internal:host-gateway"
- env_file: mainnet.env
+ env_file: mainnet.indexer.env
indexer-events:
container_name: mainnet-indexer-events
build:
@@ -26,7 +26,7 @@ services:
restart: always
extra_hosts:
- "host.docker.internal:host-gateway"
- env_file: mainnet.env
+ env_file: mainnet.indexer.env
redis:
container_name: mainnet-redis
image: redis:7.2-alpine
diff --git a/mainnet-web.yml b/mainnet-web.yml
index d3f3c081..53c3cf31 100644
--- a/mainnet-web.yml
+++ b/mainnet-web.yml
@@ -8,4 +8,14 @@ services:
restart: always
extra_hosts:
- "host.docker.internal:host-gateway"
- env_file: mainnet.env
+ env_file: mainnet.web.env
+ redis:
+ container_name: mainnet-redis
+ image: redis:7.2-alpine
+ command: redis-server --appendonly yes --appendfsync always
+ restart: always
+ volumes:
+ - redis-data:/mnt/redis
+
+volumes:
+ redis-data:
diff --git a/mainnet.env.example b/mainnet.backend.env.example
similarity index 50%
rename from mainnet.env.example
rename to mainnet.backend.env.example
index ac1c0642..bf53c4c0 100644
--- a/mainnet.env.example
+++ b/mainnet.backend.env.example
@@ -1,8 +1,6 @@
DATABASE_URL=
-REDIS_URL=
RPC_URL=
NETWORK=mainnet
-SENTRY_DSN=
DATABASE_CA=
DATABASE_CERT=
@@ -12,14 +10,4 @@ COINMARKETCAP_API_KEY=
LIVECOINWATCH_API_KEY=
COINGECKO_API_KEY=
-AWS_ACCESS_KEY_ID=
-AWS_SECRET_ACCESS_KEY=
-JWT_SECRET=
-STRIPE_SECRET=
-STRIPE_WEBHOOK_SECRET=
-
-SMTP_HOST=
-SMTP_PORT=
-SMTP_USER=
-SMTP_PASS=
-SMTP_EMAIL=
+SENTRY_DSN=
diff --git a/mainnet.indexer.env.example b/mainnet.indexer.env.example
new file mode 100644
index 00000000..6527245b
--- /dev/null
+++ b/mainnet.indexer.env.example
@@ -0,0 +1,14 @@
+DATABASE_URL=
+REDIS_URL=
+RPC_URL=
+NETWORK=mainnet
+
+AWS_ACCESS_KEY_ID=
+AWS_SECRET_ACCESS_KEY=
+S3_ENDPOINT=
+
+DATABASE_CA=
+DATABASE_CERT=
+DATABASE_KEY=
+
+SENTRY_DSN=
diff --git a/mainnet.web.env.example b/mainnet.web.env.example
new file mode 100644
index 00000000..3888e354
--- /dev/null
+++ b/mainnet.web.env.example
@@ -0,0 +1,13 @@
+DATABASE_URL=
+REDIS_URL=
+RPC_URL=
+NETWORK=mainnet
+
+MAINNET_DB_URL=
+MAINNET_REDIS_URL=
+
+DATABASE_CA=
+DATABASE_CERT=
+DATABASE_KEY=
+
+SENTRY_DSN=
diff --git a/testnet-backend.yml b/testnet-backend.yml
index 24c76417..2dcd9de3 100644
--- a/testnet-backend.yml
+++ b/testnet-backend.yml
@@ -8,4 +8,4 @@ services:
restart: always
extra_hosts:
- "host.docker.internal:host-gateway"
- env_file: testnet.env
+ env_file: testnet.backend.env
diff --git a/testnet-indexer.yml b/testnet-indexer.yml
index 49bda9d3..7b1fb39e 100644
--- a/testnet-indexer.yml
+++ b/testnet-indexer.yml
@@ -8,7 +8,7 @@ services:
restart: always
extra_hosts:
- "host.docker.internal:host-gateway"
- env_file: testnet.env
+ env_file: testnet.indexer.env
indexer-balance:
container_name: testnet-indexer-balance
build:
@@ -17,7 +17,7 @@ services:
restart: always
extra_hosts:
- "host.docker.internal:host-gateway"
- env_file: testnet.env
+ env_file: testnet.indexer.env
indexer-events:
container_name: testnet-indexer-events
build:
@@ -26,7 +26,7 @@ services:
restart: always
extra_hosts:
- "host.docker.internal:host-gateway"
- env_file: testnet.env
+ env_file: testnet.indexer.env
redis:
container_name: testnet-redis
image: redis:7.2-alpine
diff --git a/testnet-web.yml b/testnet-web.yml
index acac0596..7b00bfcb 100644
--- a/testnet-web.yml
+++ b/testnet-web.yml
@@ -8,4 +8,14 @@ services:
restart: always
extra_hosts:
- "host.docker.internal:host-gateway"
- env_file: testnet.env
+ env_file: testnet.web.env
+ redis:
+ container_name: testnet-redis
+ image: redis:7.2-alpine
+ command: redis-server --appendonly yes --appendfsync always
+ restart: always
+ volumes:
+ - redis-data:/mnt/redis
+
+volumes:
+ redis-data:
diff --git a/testnet.backend.env.example b/testnet.backend.env.example
new file mode 100644
index 00000000..e20b7115
--- /dev/null
+++ b/testnet.backend.env.example
@@ -0,0 +1,13 @@
+DATABASE_URL=
+RPC_URL=
+NETWORK=testnet
+
+DATABASE_CA=
+DATABASE_CERT=
+DATABASE_KEY=
+
+COINMARKETCAP_API_KEY=
+LIVECOINWATCH_API_KEY=
+COINGECKO_API_KEY=
+
+SENTRY_DSN=
diff --git a/testnet.env.example b/testnet.env.example
deleted file mode 100644
index ac1c0642..00000000
--- a/testnet.env.example
+++ /dev/null
@@ -1,25 +0,0 @@
-DATABASE_URL=
-REDIS_URL=
-RPC_URL=
-NETWORK=mainnet
-SENTRY_DSN=
-
-DATABASE_CA=
-DATABASE_CERT=
-DATABASE_KEY=
-
-COINMARKETCAP_API_KEY=
-LIVECOINWATCH_API_KEY=
-COINGECKO_API_KEY=
-
-AWS_ACCESS_KEY_ID=
-AWS_SECRET_ACCESS_KEY=
-JWT_SECRET=
-STRIPE_SECRET=
-STRIPE_WEBHOOK_SECRET=
-
-SMTP_HOST=
-SMTP_PORT=
-SMTP_USER=
-SMTP_PASS=
-SMTP_EMAIL=
diff --git a/testnet.indexer.env.example b/testnet.indexer.env.example
new file mode 100644
index 00000000..a52d1fe5
--- /dev/null
+++ b/testnet.indexer.env.example
@@ -0,0 +1,14 @@
+DATABASE_URL=
+REDIS_URL=
+RPC_URL=
+NETWORK=testnet
+
+AWS_ACCESS_KEY_ID=
+AWS_SECRET_ACCESS_KEY=
+S3_ENDPOINT=
+
+DATABASE_CA=
+DATABASE_CERT=
+DATABASE_KEY=
+
+SENTRY_DSN=
diff --git a/testnet.web.env.example b/testnet.web.env.example
new file mode 100644
index 00000000..1b1860e9
--- /dev/null
+++ b/testnet.web.env.example
@@ -0,0 +1,13 @@
+DATABASE_URL=
+REDIS_URL=
+RPC_URL=
+NETWORK=testnet
+
+MAINNET_DB_URL=
+MAINNET_REDIS_URL=
+
+DATABASE_CA=
+DATABASE_CERT=
+DATABASE_KEY=
+
+SENTRY_DSN=
diff --git a/yarn.lock b/yarn.lock
index decafe26..d77a33b7 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -1582,6 +1582,81 @@
resolved "https://registry.yarnpkg.com/@breejs/later/-/later-4.1.0.tgz#9246907f46cc9e9c9af37d791ab468d98921bcc1"
integrity sha512-QgGnZ9b7o4k0Ai1ZbTJWwZpZcFK9d+Gb+DyNt4UT9x6IEIs5HVu0iIlmgzGqN+t9MoJSpSPo9S/Mm51UtHr3JA==
+"@csstools/cascade-layer-name-parser@^1.0.5":
+ version "1.0.5"
+ resolved "https://registry.yarnpkg.com/@csstools/cascade-layer-name-parser/-/cascade-layer-name-parser-1.0.5.tgz#c4d276e32787651df0007af22c9fa70d9c9ca3c2"
+ integrity sha512-v/5ODKNBMfBl0us/WQjlfsvSlYxfZLhNMVIsuCPib2ulTwGKYbKJbwqw671+qH9Y4wvWVnu7LBChvml/wBKjFg==
+
+"@csstools/color-helpers@^3.0.2":
+ version "3.0.2"
+ resolved "https://registry.yarnpkg.com/@csstools/color-helpers/-/color-helpers-3.0.2.tgz#6571d289af8bfcc3a8d75357b35e6d17a8ba6848"
+ integrity sha512-NMVs/l7Y9eIKL5XjbCHEgGcG8LOUT2qVcRjX6EzkCdlvftHVKr2tHIPzHavfrULRZ5Q2gxrJ9f44dAlj6fX97Q==
+
+"@csstools/css-calc@^1.1.4":
+ version "1.1.4"
+ resolved "https://registry.yarnpkg.com/@csstools/css-calc/-/css-calc-1.1.4.tgz#70bf4c5b379cdc256d3936bf4a21e3a3454a3d68"
+ integrity sha512-ZV1TSmToiNcQL1P3hfzlzZzA02mmVkVmXGaUDUqpYUG84PmLhVSZpKX+KfxAuOcK7de04UXSQPBrAvaya6iiGg==
+
+"@csstools/css-color-parser@^1.4.0":
+ version "1.4.0"
+ resolved "https://registry.yarnpkg.com/@csstools/css-color-parser/-/css-color-parser-1.4.0.tgz#c8517457dcb6ad080848b1583aa029ab61221ce8"
+ integrity sha512-SlGd8E6ron24JYQPQAIzu5tvmWi1H4sDKTdA7UDnwF45oJv7AVESbOlOO1YjfBhrQFuvLWUgKiOY9DwGoAxwTA==
+ dependencies:
+ "@csstools/color-helpers" "^3.0.2"
+ "@csstools/css-calc" "^1.1.4"
+
+"@csstools/css-parser-algorithms@2.3.2", "@csstools/css-parser-algorithms@^2.3.2":
+ version "2.3.2"
+ resolved "https://registry.yarnpkg.com/@csstools/css-parser-algorithms/-/css-parser-algorithms-2.3.2.tgz#1e0d581dbf4518cb3e939c3b863cb7180c8cedad"
+ integrity sha512-sLYGdAdEY2x7TSw9FtmdaTrh2wFtRJO5VMbBrA8tEqEod7GEggFmxTSK9XqExib3yMuYNcvcTdCZIP6ukdjAIA==
+
+"@csstools/css-tokenizer@^2.2.1":
+ version "2.2.1"
+ resolved "https://registry.yarnpkg.com/@csstools/css-tokenizer/-/css-tokenizer-2.2.1.tgz#9dc431c9a5f61087af626e41ac2a79cce7bb253d"
+ integrity sha512-Zmsf2f/CaEPWEVgw29odOj+WEVoiJy9s9NOv5GgNY9mZ1CZ7394By6wONrONrTsnNDv6F9hR02nvFihrGVGHBg==
+
+"@csstools/media-query-list-parser@^2.1.5":
+ version "2.1.5"
+ resolved "https://registry.yarnpkg.com/@csstools/media-query-list-parser/-/media-query-list-parser-2.1.5.tgz#94bc8b3c3fd7112a40b7bf0b483e91eba0654a0f"
+ integrity sha512-IxVBdYzR8pYe89JiyXQuYk4aVVoCPhMJkz6ElRwlVysjwURTsTk/bmY/z4FfeRE+CRBMlykPwXEVUg8lThv7AQ==
+
+"@csstools/postcss-cascade-layers@^4.0.1":
+ version "4.0.1"
+ resolved "https://registry.yarnpkg.com/@csstools/postcss-cascade-layers/-/postcss-cascade-layers-4.0.1.tgz#43d12cb0ffe9ab461bc41143dc554c6e1cb633e6"
+ integrity sha512-UYFuFL9GgVnftg9v7tBvVEBRLaBeAD66euD+yYy5fYCUld9ZIWTJNCE30hm6STMEdt6FL5xzeVw1lAZ1tpvUEg==
+ dependencies:
+ "@csstools/selector-specificity" "^3.0.0"
+ postcss-selector-parser "^6.0.13"
+
+"@csstools/postcss-color-function@^3.0.7":
+ version "3.0.7"
+ resolved "https://registry.yarnpkg.com/@csstools/postcss-color-function/-/postcss-color-function-3.0.7.tgz#646b0c3e3805e4bb9c1e240bce807f1cc6ccdfea"
+ integrity sha512-/PIB20G1TPCXmQlaJLWIYzTZRZpj6csT4ijgnshIj/kcmniIRroAfDa0xSWnfuO1eNo0NptIaPU7jzUukWn55Q==
+ dependencies:
+ "@csstools/css-color-parser" "^1.4.0"
+ "@csstools/css-parser-algorithms" "^2.3.2"
+ "@csstools/css-tokenizer" "^2.2.1"
+ "@csstools/postcss-progressive-custom-properties" "^3.0.2"
+
+"@csstools/postcss-color-mix-function@^2.0.7":
+ version "2.0.7"
+ resolved "https://registry.yarnpkg.com/@csstools/postcss-color-mix-function/-/postcss-color-mix-function-2.0.7.tgz#0fc9b638bd6b9578a52a50e3af66109ae52dc2b6"
+ integrity sha512-57/g8aGo5eKFjEeJMiRKh8Qq43K2rCyk5ZZTvJ34TNl4zUtYU5DvLkIkOnhCtL8/a4z9oMA42aOnFPddRrScUQ==
+ dependencies:
+ "@csstools/css-color-parser" "^1.4.0"
+ "@csstools/css-parser-algorithms" "^2.3.2"
+ "@csstools/css-tokenizer" "^2.2.1"
+ "@csstools/postcss-progressive-custom-properties" "^3.0.2"
+
+"@csstools/postcss-exponential-functions@^1.0.1":
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/@csstools/postcss-exponential-functions/-/postcss-exponential-functions-1.0.1.tgz#0d938f58ba5ac5c362e09ad22b5768b04ee82650"
+ integrity sha512-ZLK2iSK4DUxeypGce2PnQSdYugUqDTwxnhNiq1o6OyKMNYgYs4eKbvEhFG8JKr1sJWbeqBi5jRr0017l2EWVvg==
+ dependencies:
+ "@csstools/css-calc" "^1.1.4"
+ "@csstools/css-parser-algorithms" "^2.3.2"
+ "@csstools/css-tokenizer" "^2.2.1"
+
"@csstools/postcss-extract@^3.0.0":
version "3.0.0"
resolved "https://registry.yarnpkg.com/@csstools/postcss-extract/-/postcss-extract-3.0.0.tgz#f40e9b238b3a93216d82091f57dd24f1c1ff1f6a"
@@ -1589,6 +1664,194 @@
dependencies:
postcss-selector-parser "^6.0.13"
+"@csstools/postcss-font-format-keywords@^3.0.0":
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/@csstools/postcss-font-format-keywords/-/postcss-font-format-keywords-3.0.0.tgz#9ca3a3ca67122862addf8a1c0c61a6db02dea1cc"
+ integrity sha512-ntkGj+1uDa/u6lpjPxnkPcjJn7ChO/Kcy08YxctOZI7vwtrdYvFhmE476dq8bj1yna306+jQ9gzXIG/SWfOaRg==
+ dependencies:
+ postcss-value-parser "^4.2.0"
+
+"@csstools/postcss-gamut-mapping@^1.0.0":
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/@csstools/postcss-gamut-mapping/-/postcss-gamut-mapping-1.0.0.tgz#a23d2c4bd2bd89b2ed3c5d2e062c069ad18745e0"
+ integrity sha512-6UQyK8l9YaG5Ao5rBDcCnKHrLsHiQ1E0zeFQuqDJqEtinVzAPb/MwSw3TenZXL1Rnd7th3tb+4CBFHBXdW5tbQ==
+ dependencies:
+ "@csstools/css-color-parser" "^1.4.0"
+ "@csstools/css-parser-algorithms" "2.3.2"
+ "@csstools/css-tokenizer" "^2.2.1"
+
+"@csstools/postcss-gradients-interpolation-method@^4.0.7":
+ version "4.0.7"
+ resolved "https://registry.yarnpkg.com/@csstools/postcss-gradients-interpolation-method/-/postcss-gradients-interpolation-method-4.0.7.tgz#e5c2628157fb9dea9aa8cd9c84fdcc2a842af91b"
+ integrity sha512-GT1CzE/Tyr/ei4j5BwKESkHAgg+Gzys/0mAY7W+UiR+XrcYk5hDbOrE/YJIx1rflfO/7La1bDoZtA0YnLl4qNA==
+ dependencies:
+ "@csstools/css-color-parser" "^1.4.0"
+ "@csstools/css-parser-algorithms" "^2.3.2"
+ "@csstools/css-tokenizer" "^2.2.1"
+ "@csstools/postcss-progressive-custom-properties" "^3.0.2"
+
+"@csstools/postcss-hwb-function@^3.0.6":
+ version "3.0.6"
+ resolved "https://registry.yarnpkg.com/@csstools/postcss-hwb-function/-/postcss-hwb-function-3.0.6.tgz#7d56583c6c8607352718a802f87e51edf4f9365e"
+ integrity sha512-uQgWt2Ho2yy2S6qthWY7mD5v57NKxi6dD1NB8nAybU5bJSsm+hLXRGm3/zbOH4xNrqO3Cl60DFSNlSrUME3Xjg==
+ dependencies:
+ "@csstools/css-color-parser" "^1.4.0"
+ "@csstools/css-parser-algorithms" "^2.3.2"
+ "@csstools/css-tokenizer" "^2.2.1"
+
+"@csstools/postcss-ic-unit@^3.0.2":
+ version "3.0.2"
+ resolved "https://registry.yarnpkg.com/@csstools/postcss-ic-unit/-/postcss-ic-unit-3.0.2.tgz#08b62de51a3636ba40ba8e77cef4619a6e636aac"
+ integrity sha512-n28Er7W9qc48zNjJnvTKuVHY26/+6YlA9WzJRksIHiAWOMxSH5IksXkw7FpkIOd+jLi59BMrX/BWrZMgjkLBHg==
+ dependencies:
+ "@csstools/postcss-progressive-custom-properties" "^3.0.2"
+ postcss-value-parser "^4.2.0"
+
+"@csstools/postcss-initial@^1.0.0":
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/@csstools/postcss-initial/-/postcss-initial-1.0.0.tgz#e35ec12143a654b384fb81623970deeacedb0769"
+ integrity sha512-1l7iHHjIl5qmVeGItugr4ZOlCREDP71mNKqoEyxlosIoiu3Os1nPWMHpuCvDLCLiWI/ONTOg3nzJh7gwHOrqUA==
+
+"@csstools/postcss-is-pseudo-class@^4.0.3":
+ version "4.0.3"
+ resolved "https://registry.yarnpkg.com/@csstools/postcss-is-pseudo-class/-/postcss-is-pseudo-class-4.0.3.tgz#d8b04ff5eefb1a9bc8f1ab99b8f3b6b04b704480"
+ integrity sha512-/dt5M9Ty/x3Yiq0Nm/5PJJzwkVFchJgdjKVnryBPtoMCb9ohb/nDIJOwr/Wr3hK3FDs1EA1GE6PyRYsUmQPS8Q==
+ dependencies:
+ "@csstools/selector-specificity" "^3.0.0"
+ postcss-selector-parser "^6.0.13"
+
+"@csstools/postcss-logical-float-and-clear@^2.0.0":
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/@csstools/postcss-logical-float-and-clear/-/postcss-logical-float-and-clear-2.0.0.tgz#15e1b5d16dce01ad1e676167d0909e3958234eb5"
+ integrity sha512-Wki4vxsF6icRvRz8eF9bPpAvwaAt0RHwhVOyzfoFg52XiIMjb6jcbHkGxwpJXP4DVrnFEwpwmrz5aTRqOW82kg==
+
+"@csstools/postcss-logical-overflow@^1.0.0":
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/@csstools/postcss-logical-overflow/-/postcss-logical-overflow-1.0.0.tgz#dbc18226f6cc6a83981184564ed9229a860f6033"
+ integrity sha512-cIrZ8f7bGGvr+W53nEuMspcwaeaI2YTmz6LZ4yiAO5z14/PQgOOv+Pn+qjvPOPoadeY2BmpaoTzZKvdAQuM17w==
+
+"@csstools/postcss-logical-overscroll-behavior@^1.0.0":
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/@csstools/postcss-logical-overscroll-behavior/-/postcss-logical-overscroll-behavior-1.0.0.tgz#93f60a71f75dab89b471166e6c3d44c8ef1b76b8"
+ integrity sha512-e89S2LWjnxf0SB2wNUAbqDyFb/Fow/tlOe1XqOLbNx4rf3LrQokM9qldVx7sarnddml3ORE5LDUmlKpPOOeJTA==
+
+"@csstools/postcss-logical-resize@^2.0.0":
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/@csstools/postcss-logical-resize/-/postcss-logical-resize-2.0.0.tgz#751bd5aab335c9973e346e3edacb2a0a16fa8296"
+ integrity sha512-lCQ1aX8c5+WI4t5EoYf3alTzJNNocMqTb+u1J9CINdDhFh1fjovqK+0aHalUHsNstZmzFPNzIkU4Mb3eM9U8SA==
+ dependencies:
+ postcss-value-parser "^4.2.0"
+
+"@csstools/postcss-logical-viewport-units@^2.0.3":
+ version "2.0.3"
+ resolved "https://registry.yarnpkg.com/@csstools/postcss-logical-viewport-units/-/postcss-logical-viewport-units-2.0.3.tgz#95e7195660bb8b05cd46f13d0495fe427e2db988"
+ integrity sha512-xeVxqND5rlQyqLGdH7rX34sIm/JbbQKxpKQP8oD1YQqUHHCLQR9NUS57WqJKajxKN6AcNAMWJhb5LUH5RfPcyA==
+ dependencies:
+ "@csstools/css-tokenizer" "^2.2.1"
+
+"@csstools/postcss-media-minmax@^1.1.0":
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/@csstools/postcss-media-minmax/-/postcss-media-minmax-1.1.0.tgz#8d46317b6686cd49e05870ae3c8993e49a54149c"
+ integrity sha512-t5Li/DPC5QmW/6VFLfUvsw/4dNYYseWR0tOXDeJg/9EKUodBgNawz5tuk5vYKtNvoj+Q08odMuXcpS5YJj0AFA==
+ dependencies:
+ "@csstools/css-calc" "^1.1.4"
+ "@csstools/css-parser-algorithms" "^2.3.2"
+ "@csstools/css-tokenizer" "^2.2.1"
+ "@csstools/media-query-list-parser" "^2.1.5"
+
+"@csstools/postcss-media-queries-aspect-ratio-number-values@^2.0.3":
+ version "2.0.3"
+ resolved "https://registry.yarnpkg.com/@csstools/postcss-media-queries-aspect-ratio-number-values/-/postcss-media-queries-aspect-ratio-number-values-2.0.3.tgz#a74355c828a13ede8e8390bcf2701a34a60696b3"
+ integrity sha512-IPL8AvnwMYW+cWtp+j8cW3MFN0RyXNT4hLOvs6Rf2N+NcbvXhSyKxZuE3W9Cv4KjaNoNoGx1d0UhT6tktq6tUw==
+ dependencies:
+ "@csstools/css-parser-algorithms" "^2.3.2"
+ "@csstools/css-tokenizer" "^2.2.1"
+ "@csstools/media-query-list-parser" "^2.1.5"
+
+"@csstools/postcss-nested-calc@^3.0.0":
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/@csstools/postcss-nested-calc/-/postcss-nested-calc-3.0.0.tgz#b9069f5e1c2ea08de3840a5922e39af4e0ecf4b1"
+ integrity sha512-HsB66aDWAouOwD/GcfDTS0a7wCuVWaTpXcjl5VKP0XvFxDiU+r0T8FG7xgb6ovZNZ+qzvGIwRM+CLHhDgXrYgQ==
+ dependencies:
+ postcss-value-parser "^4.2.0"
+
+"@csstools/postcss-normalize-display-values@^3.0.1":
+ version "3.0.1"
+ resolved "https://registry.yarnpkg.com/@csstools/postcss-normalize-display-values/-/postcss-normalize-display-values-3.0.1.tgz#8bacd4fa20434de67a7b1f4f64f6e4476922a98d"
+ integrity sha512-nUvRxI+ALJwkxZdPU4EDyuM380vP91sAGvI3jAOHs/sr3jfcCOzLkY6xKI1Mr526kZ3RivmMoYM/xq+XFyE/bw==
+ dependencies:
+ postcss-value-parser "^4.2.0"
+
+"@csstools/postcss-oklab-function@^3.0.7":
+ version "3.0.7"
+ resolved "https://registry.yarnpkg.com/@csstools/postcss-oklab-function/-/postcss-oklab-function-3.0.7.tgz#4daff9e85b7f68ea744f2898f73e81d6fe47c0d7"
+ integrity sha512-vBFTQD3CARB3u/XIGO44wWbcO7xG/4GsYqJlcPuUGRSK8mtxes6n4vvNFlIByyAZy2k4d4RY63nyvTbMpeNTaQ==
+ dependencies:
+ "@csstools/css-color-parser" "^1.4.0"
+ "@csstools/css-parser-algorithms" "^2.3.2"
+ "@csstools/css-tokenizer" "^2.2.1"
+ "@csstools/postcss-progressive-custom-properties" "^3.0.2"
+
+"@csstools/postcss-progressive-custom-properties@^3.0.2":
+ version "3.0.2"
+ resolved "https://registry.yarnpkg.com/@csstools/postcss-progressive-custom-properties/-/postcss-progressive-custom-properties-3.0.2.tgz#0c18152160a425950cb69a12a9add55af4f688e7"
+ integrity sha512-YEvTozk1SxnV/PGL5DllBVDuLQ+jiQhyCSQiZJ6CwBMU5JQ9hFde3i1qqzZHuclZfptjrU0JjlX4ePsOhxNzHw==
+ dependencies:
+ postcss-value-parser "^4.2.0"
+
+"@csstools/postcss-relative-color-syntax@^2.0.7":
+ version "2.0.7"
+ resolved "https://registry.yarnpkg.com/@csstools/postcss-relative-color-syntax/-/postcss-relative-color-syntax-2.0.7.tgz#1d017aa25e3cda513cf00401a91899e9d3b83659"
+ integrity sha512-2AiFbJSVF4EyymLxme4JzSrbXykHolx8DdZECHjYKMhoulhKLltx5ccYgtrK3BmXGd3v3nJrWFCc8JM8bjuiOg==
+ dependencies:
+ "@csstools/css-color-parser" "^1.4.0"
+ "@csstools/css-parser-algorithms" "^2.3.2"
+ "@csstools/css-tokenizer" "^2.2.1"
+ "@csstools/postcss-progressive-custom-properties" "^3.0.2"
+
+"@csstools/postcss-scope-pseudo-class@^3.0.0":
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/@csstools/postcss-scope-pseudo-class/-/postcss-scope-pseudo-class-3.0.0.tgz#23f32181b7de9a33e7c7c71f7620b78284955b82"
+ integrity sha512-GFNVsD97OuEcfHmcT0/DAZWAvTM/FFBDQndIOLawNc1Wq8YqpZwBdHa063Lq+Irk7azygTT+Iinyg3Lt76p7rg==
+ dependencies:
+ postcss-selector-parser "^6.0.13"
+
+"@csstools/postcss-stepped-value-functions@^3.0.2":
+ version "3.0.2"
+ resolved "https://registry.yarnpkg.com/@csstools/postcss-stepped-value-functions/-/postcss-stepped-value-functions-3.0.2.tgz#a902395efbf9c5c30a6d902a7c65549fb3f49309"
+ integrity sha512-I3wX44MZVv+tDuWfrd3BTvRB/YRIM2F5v1MBtTI89sxpFn47mNpTwpPYUOGPVCgKlRDfZSlxIUYhUQmqRQZZFQ==
+ dependencies:
+ "@csstools/css-calc" "^1.1.4"
+ "@csstools/css-parser-algorithms" "^2.3.2"
+ "@csstools/css-tokenizer" "^2.2.1"
+
+"@csstools/postcss-text-decoration-shorthand@^3.0.3":
+ version "3.0.3"
+ resolved "https://registry.yarnpkg.com/@csstools/postcss-text-decoration-shorthand/-/postcss-text-decoration-shorthand-3.0.3.tgz#e0708cf41f94013837edca1c6db23d5d6dd3c10e"
+ integrity sha512-d5J9m49HhqXRcw1S6vTZuviHi/iknUKGjBpChiNK1ARg9sSa3b8m5lsWz5Izs8ISORZdv2bZRwbw5Z2R6gQ9kQ==
+ dependencies:
+ "@csstools/color-helpers" "^3.0.2"
+ postcss-value-parser "^4.2.0"
+
+"@csstools/postcss-trigonometric-functions@^3.0.2":
+ version "3.0.2"
+ resolved "https://registry.yarnpkg.com/@csstools/postcss-trigonometric-functions/-/postcss-trigonometric-functions-3.0.2.tgz#b03d045015fc6e16d81e36e5783c545b5590a2f2"
+ integrity sha512-AwzNhF4QOKaLOKvMljwwFkeYXwufhRO15G+kKohHkyoNOL75xWkN+W2Y9ik9tSeAyDv+cYNlYaF+o/a79WjVjg==
+ dependencies:
+ "@csstools/css-calc" "^1.1.4"
+ "@csstools/css-parser-algorithms" "^2.3.2"
+ "@csstools/css-tokenizer" "^2.2.1"
+
+"@csstools/postcss-unset-value@^3.0.0":
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/@csstools/postcss-unset-value/-/postcss-unset-value-3.0.0.tgz#6d2f08140b41d3e70d805ccd2baaf64a6f59fdac"
+ integrity sha512-P0JD1WHh3avVyKKRKjd0dZIjCEeaBer8t1BbwGMUDtSZaLhXlLNBqZ8KkqHzYWXOJgHleXAny2/sx8LYl6qhEA==
+
+"@csstools/selector-specificity@^3.0.0":
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/@csstools/selector-specificity/-/selector-specificity-3.0.0.tgz#798622546b63847e82389e473fd67f2707d82247"
+ integrity sha512-hBI9tfBtuPIi885ZsZ32IMEU/5nlZH/KOVYJCOh7gyMxaVLGmLedYqFN6Ui1LXkI8JlC8IsuC0rF0btcRZKd5g==
+
"@emotion/is-prop-valid@^1.1.0":
version "1.2.1"
resolved "https://registry.yarnpkg.com/@emotion/is-prop-valid/-/is-prop-valid-1.2.1.tgz#23116cf1ed18bfeac910ec6436561ecb1a3885cc"
@@ -2377,13 +2640,6 @@
resolved "https://registry.yarnpkg.com/@floating-ui/utils/-/utils-0.1.6.tgz#22958c042e10b67463997bd6ea7115fe28cbcaf9"
integrity sha512-OfX7E2oUDYxtBvsuS4e/jSn4Q9Qb6DzgeYtsAdkPZ47znpoNsMgZw0+tVijiv3uGNR6dgNlty6r9rzIzHjtd/A==
-"@fullhuman/postcss-purgecss@^5.0.0":
- version "5.0.0"
- resolved "https://registry.yarnpkg.com/@fullhuman/postcss-purgecss/-/postcss-purgecss-5.0.0.tgz#70db9a537c73750fbcf745b49573db758daba1d8"
- integrity sha512-onDS/b/2pMRzqSoj4qOs2tYFmOpaspjTAgvACIHMPiicu1ptajiBruTrjBzTKdxWdX0ldaBb7wj8nEaTLyFkJw==
- dependencies:
- purgecss "^5.0.0"
-
"@hapi/hoek@^9.0.0":
version "9.3.0"
resolved "https://registry.yarnpkg.com/@hapi/hoek/-/hoek-9.3.0.tgz#8368869dcb735be2e7f5cb7647de78e167a251fb"
@@ -4328,11 +4584,6 @@
dependencies:
tslib "^2.4.0"
-"@trysound/sax@0.2.0":
- version "0.2.0"
- resolved "https://registry.yarnpkg.com/@trysound/sax/-/sax-0.2.0.tgz#cccaab758af56761eb7bf37af6f03f326dd798ad"
- integrity sha512-L7z9BgrNEcYyUYtF+HaEfiS5ebkh9jXqbszz7pC0hRBPaatV0XjSD3+eHrpqFemQfgwiFF0QPIarnIihIDn7OA==
-
"@types/accepts@*":
version "1.3.6"
resolved "https://registry.yarnpkg.com/@types/accepts/-/accepts-1.3.6.tgz#5e33830c8ed7b6025976738c88540df2e85b6d91"
@@ -5661,11 +5912,6 @@ body-parser@1.20.1:
type-is "~1.6.18"
unpipe "1.0.0"
-boolbase@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/boolbase/-/boolbase-1.0.0.tgz#68dff5fbe60c51eb37725ea9e3ed310dcc1e776e"
- integrity sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==
-
boolean@^3.2.0:
version "3.2.0"
resolved "https://registry.yarnpkg.com/boolean/-/boolean-3.2.0.tgz#9e5294af4e98314494cbb17979fa54ca159f116b"
@@ -5743,7 +5989,7 @@ brorand@^1.1.0:
resolved "https://registry.yarnpkg.com/brorand/-/brorand-1.1.0.tgz#12c25efe40a45e3c323eb8675a0a0ce57b22371f"
integrity sha512-cKV8tMCEpQs4hK/ik71d6LrPOnpkpGBR0wzxqr68g2m/LB2GxVYQroAjMJZRVM1Y4BCjCKc3vAamxSzOY2RP+w==
-browserslist@^4.0.0, browserslist@^4.21.10, browserslist@^4.21.4, browserslist@^4.21.9, browserslist@^4.22.1:
+browserslist@^4.21.10, browserslist@^4.21.9, browserslist@^4.22.1:
version "4.22.1"
resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.22.1.tgz#ba91958d1a59b87dab6fed8dfbcb3da5e2e9c619"
integrity sha512-FEVc202+2iuClEhZhrWy6ZiAcRLvNMyYcxZ8raemul1DYVOVdFsbqckWLdsixQZCpJlwe77Z3UTalE7jsjnKfQ==
@@ -5864,21 +6110,6 @@ camelize@^1.0.0:
resolved "https://registry.yarnpkg.com/camelize/-/camelize-1.0.1.tgz#89b7e16884056331a35d6b5ad064332c91daa6c3"
integrity sha512-dU+Tx2fsypxTgtLoE36npi3UqcjSSMNYfkqgmoEhtZrraP5VWq0K7FkWVTYa8eMPtnU/G2txVsfdCJTn9uzpuQ==
-caniuse-api@^3.0.0:
- version "3.0.0"
- resolved "https://registry.yarnpkg.com/caniuse-api/-/caniuse-api-3.0.0.tgz#5e4d90e2274961d46291997df599e3ed008ee4c0"
- integrity sha512-bsTwuIg/BZZK/vreVTYYbSWoe2F+71P7K5QGEX+pT250DZbfU1MQ5prOKpPR+LL6uWKK3KMwMCAS74QB3Um1uw==
- dependencies:
- browserslist "^4.0.0"
- caniuse-lite "^1.0.0"
- lodash.memoize "^4.1.2"
- lodash.uniq "^4.5.0"
-
-caniuse-lite@^1.0.0:
- version "1.0.30001561"
- resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001561.tgz#752f21f56f96f1b1a52e97aae98c57c562d5d9da"
- integrity sha512-NTt0DNoKe958Q0BE0j0c1V9jbUzhBxHIEJy7asmGrpE0yG63KTV7PLHPnK2E1O9RsQrQ081I3NLuXGS6zht3cw==
-
caniuse-lite@^1.0.30001406, caniuse-lite@^1.0.30001538, caniuse-lite@^1.0.30001541:
version "1.0.30001554"
resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001554.tgz#ba80d88dff9acbc0cd4b7535fc30e0191c5e2e2a"
@@ -5936,7 +6167,7 @@ character-reference-invalid@^1.0.0:
resolved "https://registry.yarnpkg.com/character-reference-invalid/-/character-reference-invalid-1.1.4.tgz#083329cda0eae272ab3dbbf37e9a382c13af1560"
integrity sha512-mKKUkUbhPpQlCOfIuZkvSEgktjPFIsZKRRbC6KWVEMvlzblj3i3asQv5ODsrwt0N3pHAEvjP8KTQPHkp0+6jOg==
-chokidar@^3.4.0, chokidar@^3.5.2, chokidar@^3.5.3:
+chokidar@^3.3.0, chokidar@^3.4.0, chokidar@^3.5.2, chokidar@^3.5.3:
version "3.5.3"
resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.5.3.tgz#1cf37c8707b932bd1af1ae22c0432e2acd1903bd"
integrity sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==
@@ -5986,6 +6217,15 @@ cliui@^6.0.0:
strip-ansi "^6.0.0"
wrap-ansi "^6.2.0"
+cliui@^8.0.1:
+ version "8.0.1"
+ resolved "https://registry.yarnpkg.com/cliui/-/cliui-8.0.1.tgz#0c04b075db02cbfe60dc8e6cf2f5486b1a3608aa"
+ integrity sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==
+ dependencies:
+ string-width "^4.2.0"
+ strip-ansi "^6.0.1"
+ wrap-ansi "^7.0.0"
+
cluster-key-slot@1.1.2, cluster-key-slot@^1.1.0:
version "1.1.2"
resolved "https://registry.yarnpkg.com/cluster-key-slot/-/cluster-key-slot-1.1.2.tgz#88ddaa46906e303b5de30d3153b7d9fe0a0c19ac"
@@ -6027,11 +6267,6 @@ color-name@~1.1.4:
resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2"
integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==
-colord@^2.9.1:
- version "2.9.3"
- resolved "https://registry.yarnpkg.com/colord/-/colord-2.9.3.tgz#4f8ce919de456f1d5c1c368c307fe20f3e59fb43"
- integrity sha512-jeC1axXpnb0/2nn/Y1LPuLdgXBLH7aDcHu4KEKfqw3CUhX7ZpfBSlPKyqXE6btIgEzfWtrX3/tyBCaCvXvMkOw==
-
colorette@2.0.19:
version "2.0.19"
resolved "https://registry.yarnpkg.com/colorette/-/colorette-2.0.19.tgz#cdf044f47ad41a0f4b56b3a0d5b4e6e1a2d5a798"
@@ -6077,16 +6312,6 @@ commander@^4.0.0, commander@^4.0.1:
resolved "https://registry.yarnpkg.com/commander/-/commander-4.1.1.tgz#9fd602bd936294e9e9ef46a3f4d6964044b18068"
integrity sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==
-commander@^7.2.0:
- version "7.2.0"
- resolved "https://registry.yarnpkg.com/commander/-/commander-7.2.0.tgz#a36cb57d0b501ce108e4d20559a150a391d97ab7"
- integrity sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==
-
-commander@^9.0.0:
- version "9.5.0"
- resolved "https://registry.yarnpkg.com/commander/-/commander-9.5.0.tgz#bc08d1eb5cedf7ccb797a96199d41c7bc3e60d30"
- integrity sha512-KRs7WVDKg86PWiuAqhDrAQnTXZKraVcCc6vFdL14qrZ/DcWwuRo7VoiYXalXO7S5GKpqYiVEwCbgFDfxNHKJBQ==
-
compute-scroll-into-view@^3.0.2:
version "3.1.0"
resolved "https://registry.yarnpkg.com/compute-scroll-into-view/-/compute-scroll-into-view-3.1.0.tgz#753f11d972596558d8fe7c6bcbc8497690ab4c87"
@@ -6153,6 +6378,13 @@ cron-validate@^1.4.3:
dependencies:
yup "0.32.9"
+cross-env@^7.0.3:
+ version "7.0.3"
+ resolved "https://registry.yarnpkg.com/cross-env/-/cross-env-7.0.3.tgz#865264b29677dc015ba8418918965dd232fc54cf"
+ integrity sha512-+/HKd6EgcQCJGh2PSjZuUitQBQynKor4wrFbRg4DtAgS1aWO+gU52xpH7M9ScGgXSYmAVS9bIJ8EzuaGw0oNAw==
+ dependencies:
+ cross-spawn "^7.0.1"
+
cross-fetch@^3.1.4:
version "3.1.8"
resolved "https://registry.yarnpkg.com/cross-fetch/-/cross-fetch-3.1.8.tgz#0327eba65fd68a7d119f8fb2bf9334a1a7956f82"
@@ -6160,7 +6392,7 @@ cross-fetch@^3.1.4:
dependencies:
node-fetch "^2.6.12"
-cross-spawn@^7.0.0, cross-spawn@^7.0.2, cross-spawn@^7.0.3:
+cross-spawn@^7.0.0, cross-spawn@^7.0.1, cross-spawn@^7.0.2, cross-spawn@^7.0.3:
version "7.0.3"
resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6"
integrity sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==
@@ -6169,26 +6401,31 @@ cross-spawn@^7.0.0, cross-spawn@^7.0.2, cross-spawn@^7.0.3:
shebang-command "^2.0.0"
which "^2.0.1"
+css-blank-pseudo@^6.0.0:
+ version "6.0.0"
+ resolved "https://registry.yarnpkg.com/css-blank-pseudo/-/css-blank-pseudo-6.0.0.tgz#2bc6f812a5f60296c04c55b1696bad4300dcdbcc"
+ integrity sha512-VbfLlOWO7sBHBTn6pwDQzc07Z0SDydgDBfNfCE0nvrehdBNv9RKsuupIRa/qal0+fBZhAALyQDPMKz5lnvcchw==
+ dependencies:
+ postcss-selector-parser "^6.0.13"
+
css-color-keywords@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/css-color-keywords/-/css-color-keywords-1.0.0.tgz#fea2616dc676b2962686b3af8dbdbe180b244e05"
integrity sha512-FyyrDHZKEjXDpNJYvVsV960FiqQyXc/LlYmsxl2BcdMb2WPx0OGRVgTg55rPSyLSNMqP52R9r8geSp7apN3Ofg==
-css-declaration-sorter@^6.3.1:
- version "6.4.1"
- resolved "https://registry.yarnpkg.com/css-declaration-sorter/-/css-declaration-sorter-6.4.1.tgz#28beac7c20bad7f1775be3a7129d7eae409a3a71"
- integrity sha512-rtdthzxKuyq6IzqX6jEcIzQF/YqccluefyCYheovBOLhFT/drQA9zj/UbRAa9J7C0o6EG6u3E6g+vKkay7/k3g==
-
-css-select@^5.1.0:
- version "5.1.0"
- resolved "https://registry.yarnpkg.com/css-select/-/css-select-5.1.0.tgz#b8ebd6554c3637ccc76688804ad3f6a6fdaea8a6"
- integrity sha512-nwoRF1rvRRnnCqqY7updORDsuqKzqYJ28+oSMaJMMgOauh3fvwHqMS7EZpIPqK8GL+g9mKxF1vP/ZjSeNjEVHg==
+css-has-pseudo@^6.0.0:
+ version "6.0.0"
+ resolved "https://registry.yarnpkg.com/css-has-pseudo/-/css-has-pseudo-6.0.0.tgz#b8c8f39a19bc83c5be59fd251510a7e443c47968"
+ integrity sha512-X+r+JBuoO37FBOWVNhVJhxtSBUFHgHbrcc0CjFT28JEdOw1qaDwABv/uunyodUuSy2hMPe9j/HjssxSlvUmKjg==
dependencies:
- boolbase "^1.0.0"
- css-what "^6.1.0"
- domhandler "^5.0.2"
- domutils "^3.0.1"
- nth-check "^2.0.1"
+ "@csstools/selector-specificity" "^3.0.0"
+ postcss-selector-parser "^6.0.13"
+ postcss-value-parser "^4.2.0"
+
+css-prefers-color-scheme@^9.0.0:
+ version "9.0.0"
+ resolved "https://registry.yarnpkg.com/css-prefers-color-scheme/-/css-prefers-color-scheme-9.0.0.tgz#7e9b74062655ea15490e359cb456a3b9f4c93327"
+ integrity sha512-03QGAk/FXIRseDdLb7XAiu6gidQ0Nd8945xuM7VFVPpc6goJsG9uIO8xQjTxwbPdPIIV4o4AJoOJyt8gwDl67g==
css-to-react-native@^3.0.0:
version "3.2.0"
@@ -6199,87 +6436,16 @@ css-to-react-native@^3.0.0:
css-color-keywords "^1.0.0"
postcss-value-parser "^4.0.2"
-css-tree@^2.2.1:
- version "2.3.1"
- resolved "https://registry.yarnpkg.com/css-tree/-/css-tree-2.3.1.tgz#10264ce1e5442e8572fc82fbe490644ff54b5c20"
- integrity sha512-6Fv1DV/TYw//QF5IzQdqsNDjx/wc8TrMBZsqjL9eW01tWb7R7k/mq+/VXfJCl7SoD5emsJop9cOByJZfs8hYIw==
- dependencies:
- mdn-data "2.0.30"
- source-map-js "^1.0.1"
-
-css-tree@~2.2.0:
- version "2.2.1"
- resolved "https://registry.yarnpkg.com/css-tree/-/css-tree-2.2.1.tgz#36115d382d60afd271e377f9c5f67d02bd48c032"
- integrity sha512-OA0mILzGc1kCOCSJerOeqDxDQ4HOh+G8NbOJFOTgOCzpw7fCBubk0fEyxp8AgOL/jvLgYA/uV0cMbe43ElF1JA==
- dependencies:
- mdn-data "2.0.28"
- source-map-js "^1.0.1"
-
-css-what@^6.1.0:
- version "6.1.0"
- resolved "https://registry.yarnpkg.com/css-what/-/css-what-6.1.0.tgz#fb5effcf76f1ddea2c81bdfaa4de44e79bac70f4"
- integrity sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==
+cssdb@^7.9.0:
+ version "7.9.0"
+ resolved "https://registry.yarnpkg.com/cssdb/-/cssdb-7.9.0.tgz#d42d8269ff3d3e1c366280ab1f9f6207057b262c"
+ integrity sha512-WPMT9seTQq6fPAa1yN4zjgZZeoTriSN2LqW9C+otjar12DQIWA4LuSfFrvFJiKp4oD0xIk1vumDLw8K9ur4NBw==
cssesc@^3.0.0:
version "3.0.0"
resolved "https://registry.yarnpkg.com/cssesc/-/cssesc-3.0.0.tgz#37741919903b868565e1c09ea747445cd18983ee"
integrity sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==
-cssnano-preset-default@^6.0.1:
- version "6.0.1"
- resolved "https://registry.yarnpkg.com/cssnano-preset-default/-/cssnano-preset-default-6.0.1.tgz#2a93247140d214ddb9f46bc6a3562fa9177fe301"
- integrity sha512-7VzyFZ5zEB1+l1nToKyrRkuaJIx0zi/1npjvZfbBwbtNTzhLtlvYraK/7/uqmX2Wb2aQtd983uuGw79jAjLSuQ==
- dependencies:
- css-declaration-sorter "^6.3.1"
- cssnano-utils "^4.0.0"
- postcss-calc "^9.0.0"
- postcss-colormin "^6.0.0"
- postcss-convert-values "^6.0.0"
- postcss-discard-comments "^6.0.0"
- postcss-discard-duplicates "^6.0.0"
- postcss-discard-empty "^6.0.0"
- postcss-discard-overridden "^6.0.0"
- postcss-merge-longhand "^6.0.0"
- postcss-merge-rules "^6.0.1"
- postcss-minify-font-values "^6.0.0"
- postcss-minify-gradients "^6.0.0"
- postcss-minify-params "^6.0.0"
- postcss-minify-selectors "^6.0.0"
- postcss-normalize-charset "^6.0.0"
- postcss-normalize-display-values "^6.0.0"
- postcss-normalize-positions "^6.0.0"
- postcss-normalize-repeat-style "^6.0.0"
- postcss-normalize-string "^6.0.0"
- postcss-normalize-timing-functions "^6.0.0"
- postcss-normalize-unicode "^6.0.0"
- postcss-normalize-url "^6.0.0"
- postcss-normalize-whitespace "^6.0.0"
- postcss-ordered-values "^6.0.0"
- postcss-reduce-initial "^6.0.0"
- postcss-reduce-transforms "^6.0.0"
- postcss-svgo "^6.0.0"
- postcss-unique-selectors "^6.0.0"
-
-cssnano-utils@^4.0.0:
- version "4.0.0"
- resolved "https://registry.yarnpkg.com/cssnano-utils/-/cssnano-utils-4.0.0.tgz#d1da885ec04003ab19505ff0e62e029708d36b08"
- integrity sha512-Z39TLP+1E0KUcd7LGyF4qMfu8ZufI0rDzhdyAMsa/8UyNUU8wpS0fhdBxbQbv32r64ea00h4878gommRVg2BHw==
-
-cssnano@^6.0.1:
- version "6.0.1"
- resolved "https://registry.yarnpkg.com/cssnano/-/cssnano-6.0.1.tgz#87c38c4cd47049c735ab756d7e77ac3ca855c008"
- integrity sha512-fVO1JdJ0LSdIGJq68eIxOqFpIJrZqXUsBt8fkrBcztCQqAjQD51OhZp7tc0ImcbwXD4k7ny84QTV90nZhmqbkg==
- dependencies:
- cssnano-preset-default "^6.0.1"
- lilconfig "^2.1.0"
-
-csso@5.0.5:
- version "5.0.5"
- resolved "https://registry.yarnpkg.com/csso/-/csso-5.0.5.tgz#f9b7fe6cc6ac0b7d90781bb16d5e9874303e2ca6"
- integrity sha512-0LrrStPOdJj+SPCCrGhzryycLjwcgUSHBtxNA8aIDxf0GLsRh1cKYhB00Gd1lDOS4yGH69+SNn13+TWbVHETFQ==
- dependencies:
- css-tree "~2.2.0"
-
csstype@^3.0.2:
version "3.1.2"
resolved "https://registry.yarnpkg.com/csstype/-/csstype-3.1.2.tgz#1d4bf9d572f11c14031f0436e1c10bc1f571f50b"
@@ -6420,6 +6586,11 @@ depd@~1.1.2:
resolved "https://registry.yarnpkg.com/depd/-/depd-1.1.2.tgz#9bcd52e14c097763e749b274c4346ed2e560b5a9"
integrity sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==
+dependency-graph@^0.11.0:
+ version "0.11.0"
+ resolved "https://registry.yarnpkg.com/dependency-graph/-/dependency-graph-0.11.0.tgz#ac0ce7ed68a54da22165a85e97a01d53f5eb2e27"
+ integrity sha512-JeMq7fEshyepOWDfcfHK06N3MhyPhz++vtqWhMT5O9A3K42rdsEDpfdVqjaqaAhsw6a+ZqeDvQVtD0hFHQWrzg==
+
dequal@^2.0.0, dequal@^2.0.3:
version "2.0.3"
resolved "https://registry.yarnpkg.com/dequal/-/dequal-2.0.3.tgz#2644214f1997d39ed0ee0ece72335490a7ac67be"
@@ -6494,36 +6665,6 @@ dom-helpers@^5.0.1, dom-helpers@^5.2.0, dom-helpers@^5.2.1:
"@babel/runtime" "^7.8.7"
csstype "^3.0.2"
-dom-serializer@^2.0.0:
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/dom-serializer/-/dom-serializer-2.0.0.tgz#e41b802e1eedf9f6cae183ce5e622d789d7d8e53"
- integrity sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==
- dependencies:
- domelementtype "^2.3.0"
- domhandler "^5.0.2"
- entities "^4.2.0"
-
-domelementtype@^2.3.0:
- version "2.3.0"
- resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-2.3.0.tgz#5c45e8e869952626331d7aab326d01daf65d589d"
- integrity sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==
-
-domhandler@^5.0.2, domhandler@^5.0.3:
- version "5.0.3"
- resolved "https://registry.yarnpkg.com/domhandler/-/domhandler-5.0.3.tgz#cc385f7f751f1d1fc650c21374804254538c7d31"
- integrity sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==
- dependencies:
- domelementtype "^2.3.0"
-
-domutils@^3.0.1:
- version "3.1.0"
- resolved "https://registry.yarnpkg.com/domutils/-/domutils-3.1.0.tgz#c47f551278d3dc4b0b1ab8cbb42d751a6f0d824e"
- integrity sha512-H78uMmQtI2AhgDJjWeQmHwJJ2bLPD3GMmO7Zja/ZZh84wkm+4ut+IUnUdRa8uCGX88DiVx1j6FRe1XfxEgjEZA==
- dependencies:
- dom-serializer "^2.0.0"
- domelementtype "^2.3.0"
- domhandler "^5.0.3"
-
duplexify@^4.1.2:
version "4.1.2"
resolved "https://registry.yarnpkg.com/duplexify/-/duplexify-4.1.2.tgz#18b4f8d28289132fa0b9573c898d9f903f81c7b0"
@@ -6609,11 +6750,6 @@ enhanced-resolve@^5.12.0:
graceful-fs "^4.2.4"
tapable "^2.2.0"
-entities@^4.2.0:
- version "4.5.0"
- resolved "https://registry.yarnpkg.com/entities/-/entities-4.5.0.tgz#5d268ea5e7113ec74c4d033b79ea5a35a488fb48"
- integrity sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==
-
envalid@8.0.0:
version "8.0.0"
resolved "https://registry.yarnpkg.com/envalid/-/envalid-8.0.0.tgz#2314451e18e88051c98540ab60640e330279e486"
@@ -7362,6 +7498,15 @@ fresh@0.5.2:
resolved "https://registry.yarnpkg.com/fresh/-/fresh-0.5.2.tgz#3d8cadd90d976569fa835ab1f8e4b23a105605a7"
integrity sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==
+fs-extra@^11.0.0:
+ version "11.2.0"
+ resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-11.2.0.tgz#e70e17dfad64232287d01929399e0ea7c86b0e5b"
+ integrity sha512-PmDi3uwK5nFuXh7XDTlVnS17xJS7vW36is2+w3xcv8SVxiB4NyATf4ctkVY5bkSjX0Y4nbvZCq1/EjtEyr9ktw==
+ dependencies:
+ graceful-fs "^4.2.0"
+ jsonfile "^6.0.1"
+ universalify "^2.0.0"
+
fs-readdir-recursive@^1.1.0:
version "1.1.0"
resolved "https://registry.yarnpkg.com/fs-readdir-recursive/-/fs-readdir-recursive-1.1.0.tgz#e32fc030a2ccee44a6b5371308da54be0b397d27"
@@ -7407,7 +7552,7 @@ gensync@^1.0.0-beta.2:
resolved "https://registry.yarnpkg.com/gensync/-/gensync-1.0.0-beta.2.tgz#32a6ee76c3d7f52d46b2b1ae5d93fea8580a25e0"
integrity sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==
-get-caller-file@^2.0.1:
+get-caller-file@^2.0.1, get-caller-file@^2.0.5:
version "2.0.5"
resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e"
integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==
@@ -7432,6 +7577,11 @@ get-package-type@^0.1.0:
resolved "https://registry.yarnpkg.com/get-package-type/-/get-package-type-0.1.0.tgz#8de2d803cff44df3bc6c456e6668b36c3926e11a"
integrity sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==
+get-stdin@^9.0.0:
+ version "9.0.0"
+ resolved "https://registry.yarnpkg.com/get-stdin/-/get-stdin-9.0.0.tgz#3983ff82e03d56f1b2ea0d3e60325f39d703a575"
+ integrity sha512-dVKBjfWisLAicarI2Sf+JuBE/DghV4UzNAVe9yhEJuzeREd3JhOTE9cUaJTeSa77fsbQUK3pcOpJfM59+VKZaA==
+
get-stream@^6.0.1:
version "6.0.1"
resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-6.0.1.tgz#a262d8eef67aced57c2852ad6167526a43cbf7b7"
@@ -7518,7 +7668,7 @@ glob@^7.1.3, glob@^7.1.6, glob@^7.2.0:
once "^1.3.0"
path-is-absolute "^1.0.0"
-glob@^8.0.0, glob@^8.0.3:
+glob@^8.0.0:
version "8.1.0"
resolved "https://registry.yarnpkg.com/glob/-/glob-8.1.0.tgz#d388f656593ef708ee3e34640fdfb99a9fd1c33e"
integrity sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==
@@ -7548,7 +7698,7 @@ globalthis@^1.0.3:
dependencies:
define-properties "^1.1.3"
-globby@13.2.2:
+globby@13.2.2, globby@^13.0.0:
version "13.2.2"
resolved "https://registry.yarnpkg.com/globby/-/globby-13.2.2.tgz#63b90b1bf68619c2135475cbd4e71e66aa090592"
integrity sha512-Y1zNGV+pzQdh7H39l9zgB4PJqjRNqydvdYCDG4HFXM4XuvSaQQlEc91IU1yALL8gUTDomgBAfz3XJdmUS+oo0w==
@@ -7578,7 +7728,7 @@ gopd@^1.0.1:
dependencies:
get-intrinsic "^1.1.3"
-graceful-fs@^4.2.4:
+graceful-fs@^4.1.6, graceful-fs@^4.2.0, graceful-fs@^4.2.4:
version "4.2.11"
resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.11.tgz#4183e4e8bf08bb6e05bbb2f7d2e0c8f712ca40e3"
integrity sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==
@@ -8266,6 +8416,15 @@ json5@^2.2.3:
resolved "https://registry.yarnpkg.com/json5/-/json5-2.2.3.tgz#78cd6f1a19bdc12b73db5ad0c61efd66c1e29283"
integrity sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==
+jsonfile@^6.0.1:
+ version "6.1.0"
+ resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-6.1.0.tgz#bc55b2634793c679ec6403094eb13698a6ec0aae"
+ integrity sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==
+ dependencies:
+ universalify "^2.0.0"
+ optionalDependencies:
+ graceful-fs "^4.1.6"
+
"jsx-ast-utils@^2.4.1 || ^3.0.0", jsx-ast-utils@^3.3.3:
version "3.3.5"
resolved "https://registry.yarnpkg.com/jsx-ast-utils/-/jsx-ast-utils-3.3.5.tgz#4766bd05a8e2a11af222becd19e15575e52a853a"
@@ -8346,6 +8505,11 @@ lilconfig@^2.0.5, lilconfig@^2.1.0:
resolved "https://registry.yarnpkg.com/lilconfig/-/lilconfig-2.1.0.tgz#78e23ac89ebb7e1bfbf25b18043de756548e7f52"
integrity sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==
+lilconfig@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/lilconfig/-/lilconfig-3.0.0.tgz#f8067feb033b5b74dab4602a5f5029420be749bc"
+ integrity sha512-K2U4W2Ff5ibV7j7ydLr+zLAkIg5JJ4lPn1Ltsdt+Tz/IjQ8buJ55pZAxoP34lqIiwtF9iAvtLv3JGv7CAyAg+g==
+
lines-and-columns@^1.1.6:
version "1.2.4"
resolved "https://registry.yarnpkg.com/lines-and-columns/-/lines-and-columns-1.2.4.tgz#eca284f75d2965079309dc0ad9255abb2ebc1632"
@@ -8470,21 +8634,11 @@ lodash.isequal@4.5.0:
resolved "https://registry.yarnpkg.com/lodash.isequal/-/lodash.isequal-4.5.0.tgz#415c4478f2bcc30120c22ce10ed3226f7d3e18e0"
integrity sha512-pDo3lu8Jhfjqls6GkMgpahsF9kCyayhgykjyLMNFTKWrpVdAQtYyB4muAMWozBB4ig/dtWAmsMxLEI8wuz+DYQ==
-lodash.memoize@^4.1.2:
- version "4.1.2"
- resolved "https://registry.yarnpkg.com/lodash.memoize/-/lodash.memoize-4.1.2.tgz#bcc6c49a42a2840ed997f323eada5ecd182e0bfe"
- integrity sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag==
-
lodash.merge@^4.6.2:
version "4.6.2"
resolved "https://registry.yarnpkg.com/lodash.merge/-/lodash.merge-4.6.2.tgz#558aa53b43b661e1925a0afdfa36a9a1085fe57a"
integrity sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==
-lodash.uniq@^4.5.0:
- version "4.5.0"
- resolved "https://registry.yarnpkg.com/lodash.uniq/-/lodash.uniq-4.5.0.tgz#d0225373aeb652adc1bc82e4945339a842754773"
- integrity sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ==
-
lodash.uniqby@4.5.0:
version "4.5.0"
resolved "https://registry.yarnpkg.com/lodash.uniqby/-/lodash.uniqby-4.5.0.tgz#a3a17bbf62eeb6240f491846e97c1c4e2a5e1e21"
@@ -8694,16 +8848,6 @@ mdast-util-to-string@^3.0.0, mdast-util-to-string@^3.1.0:
dependencies:
"@types/mdast" "^3.0.0"
-mdn-data@2.0.28:
- version "2.0.28"
- resolved "https://registry.yarnpkg.com/mdn-data/-/mdn-data-2.0.28.tgz#5ec48e7bef120654539069e1ae4ddc81ca490eba"
- integrity sha512-aylIc7Z9y4yzHYAJNuESG3hfhC+0Ibp/MAMiaOZgNv4pmEdFyfZhhhny4MNiAfWdBQ1RQ2mfDWmM1x8SvGyp8g==
-
-mdn-data@2.0.30:
- version "2.0.30"
- resolved "https://registry.yarnpkg.com/mdn-data/-/mdn-data-2.0.30.tgz#ce4df6f80af6cfbe218ecd5c552ba13c4dfa08cc"
- integrity sha512-GaqWWShW4kv/G9IEucWScBx9G1/vsFZZJUO+tD26M8J8z3Kw5RDQjaoZe03YAClgeS/SWPOcb4nkFBTEi5DUEA==
-
mdurl@^1.0.0:
version "1.0.1"
resolved "https://registry.yarnpkg.com/mdurl/-/mdurl-1.0.1.tgz#fe85b2ec75a59037f2adfec100fd6c601761152e"
@@ -9406,13 +9550,6 @@ npm-run-path@^5.1.0:
dependencies:
path-key "^4.0.0"
-nth-check@^2.0.1:
- version "2.1.1"
- resolved "https://registry.yarnpkg.com/nth-check/-/nth-check-2.1.1.tgz#c9eab428effce36cd6b92c924bdb000ef1f1ed1d"
- integrity sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==
- dependencies:
- boolbase "^1.0.0"
-
numbered@^1.1.0:
version "1.1.0"
resolved "https://registry.yarnpkg.com/numbered/-/numbered-1.1.0.tgz#9fcd79564c73a84b9574e8370c3d8e58fe3c133c"
@@ -9953,51 +10090,135 @@ pngjs@^5.0.0:
resolved "https://registry.yarnpkg.com/pngjs/-/pngjs-5.0.0.tgz#e79dd2b215767fd9c04561c01236df960bce7fbb"
integrity sha512-40QW5YalBNfQo5yRYmiw7Yz6TKKVr3h6970B2YE+3fQpsWcrbj1PzJgxeJ19DRQjhMbKPIuMY8rFaXc8moolVw==
-postcss-calc@^9.0.0:
+postcss-attribute-case-insensitive@^6.0.2:
+ version "6.0.2"
+ resolved "https://registry.yarnpkg.com/postcss-attribute-case-insensitive/-/postcss-attribute-case-insensitive-6.0.2.tgz#e843091859323342e461878d201ee70278809e01"
+ integrity sha512-IRuCwwAAQbgaLhxQdQcIIK0dCVXg3XDUnzgKD8iwdiYdwU4rMWRWyl/W9/0nA4ihVpq5pyALiHB2veBJ0292pw==
+ dependencies:
+ postcss-selector-parser "^6.0.10"
+
+postcss-clamp@^4.1.0:
+ version "4.1.0"
+ resolved "https://registry.yarnpkg.com/postcss-clamp/-/postcss-clamp-4.1.0.tgz#7263e95abadd8c2ba1bd911b0b5a5c9c93e02363"
+ integrity sha512-ry4b1Llo/9zz+PKC+030KUnPITTJAHeOwjfAyyB60eT0AorGLdzp52s31OsPRHRf8NchkgFoG2y6fCfn1IV1Ow==
+ dependencies:
+ postcss-value-parser "^4.2.0"
+
+postcss-cli@^10.1.0:
+ version "10.1.0"
+ resolved "https://registry.yarnpkg.com/postcss-cli/-/postcss-cli-10.1.0.tgz#f6658c4998a1c35bd66cd71009132b2d12e04f80"
+ integrity sha512-Zu7PLORkE9YwNdvOeOVKPmWghprOtjFQU3srMUGbdz3pHJiFh7yZ4geiZFMkjMfB0mtTFR3h8RemR62rPkbOPA==
+ dependencies:
+ chokidar "^3.3.0"
+ dependency-graph "^0.11.0"
+ fs-extra "^11.0.0"
+ get-stdin "^9.0.0"
+ globby "^13.0.0"
+ picocolors "^1.0.0"
+ postcss-load-config "^4.0.0"
+ postcss-reporter "^7.0.0"
+ pretty-hrtime "^1.0.3"
+ read-cache "^1.0.0"
+ slash "^5.0.0"
+ yargs "^17.0.0"
+
+postcss-color-functional-notation@^6.0.2:
+ version "6.0.2"
+ resolved "https://registry.yarnpkg.com/postcss-color-functional-notation/-/postcss-color-functional-notation-6.0.2.tgz#5fa38d36cd0e2ea9db7fd6f2f2a1ffb2c0796a8d"
+ integrity sha512-FsjSmlSufuiFBsIqQ++VxFmvX7zKndZpBkHmfXr4wqhvzM92FTEkAh703iqWTl1U3faTgqioIqCbfqdWiFVwtw==
+ dependencies:
+ "@csstools/postcss-progressive-custom-properties" "^3.0.2"
+ postcss-value-parser "^4.2.0"
+
+postcss-color-hex-alpha@^9.0.2:
+ version "9.0.2"
+ resolved "https://registry.yarnpkg.com/postcss-color-hex-alpha/-/postcss-color-hex-alpha-9.0.2.tgz#6d3ed50342802469880981a1999515d003ff7d79"
+ integrity sha512-SfPjgr//VQ/DOCf80STIAsdAs7sbIbxATvVmd+Ec7JvR8onz9pjawhq3BJM3Pie40EE3TyB0P6hft16D33Nlyg==
+ dependencies:
+ postcss-value-parser "^4.2.0"
+
+postcss-color-rebeccapurple@^9.0.1:
version "9.0.1"
- resolved "https://registry.yarnpkg.com/postcss-calc/-/postcss-calc-9.0.1.tgz#a744fd592438a93d6de0f1434c572670361eb6c6"
- integrity sha512-TipgjGyzP5QzEhsOZUaIkeO5mKeMFpebWzRogWG/ysonUlnHcq5aJe0jOjpfzUU8PeSaBQnrE8ehR0QA5vs8PQ==
+ resolved "https://registry.yarnpkg.com/postcss-color-rebeccapurple/-/postcss-color-rebeccapurple-9.0.1.tgz#d1266b9a9571ca478c8ce7ad97a15727eac3c6b2"
+ integrity sha512-ds4cq5BjRieizVb2PnvbJ0omg9VCo2/KzluvoFZbxuGpsGJ5BQSD93CHBooinEtangCM5YqUOerGDl4xGmOb6Q==
dependencies:
- postcss-selector-parser "^6.0.11"
postcss-value-parser "^4.2.0"
-postcss-colormin@^6.0.0:
- version "6.0.0"
- resolved "https://registry.yarnpkg.com/postcss-colormin/-/postcss-colormin-6.0.0.tgz#d4250652e952e1c0aca70c66942da93d3cdeaafe"
- integrity sha512-EuO+bAUmutWoZYgHn2T1dG1pPqHU6L4TjzPlu4t1wZGXQ/fxV16xg2EJmYi0z+6r+MGV1yvpx1BHkUaRrPa2bw==
+postcss-custom-media@^10.0.2:
+ version "10.0.2"
+ resolved "https://registry.yarnpkg.com/postcss-custom-media/-/postcss-custom-media-10.0.2.tgz#70a244bbc59fc953ab6573e4e2c9624639aef08a"
+ integrity sha512-zcEFNRmDm2fZvTPdI1pIW3W//UruMcLosmMiCdpQnrCsTRzWlKQPYMa1ud9auL0BmrryKK1+JjIGn19K0UjO/w==
+ dependencies:
+ "@csstools/cascade-layer-name-parser" "^1.0.5"
+ "@csstools/css-parser-algorithms" "^2.3.2"
+ "@csstools/css-tokenizer" "^2.2.1"
+ "@csstools/media-query-list-parser" "^2.1.5"
+
+postcss-custom-properties@^13.3.2:
+ version "13.3.2"
+ resolved "https://registry.yarnpkg.com/postcss-custom-properties/-/postcss-custom-properties-13.3.2.tgz#88952f883003d897ade5c836e1e005b09a12f02b"
+ integrity sha512-2Coszybpo8lpLY24vy2CYv9AasiZ39/bs8Imv0pWMq55Gl8NWzfc24OAo3zIX7rc6uUJAqESnVOMZ6V6lpMjJA==
dependencies:
- browserslist "^4.21.4"
- caniuse-api "^3.0.0"
- colord "^2.9.1"
+ "@csstools/cascade-layer-name-parser" "^1.0.5"
+ "@csstools/css-parser-algorithms" "^2.3.2"
+ "@csstools/css-tokenizer" "^2.2.1"
postcss-value-parser "^4.2.0"
-postcss-convert-values@^6.0.0:
- version "6.0.0"
- resolved "https://registry.yarnpkg.com/postcss-convert-values/-/postcss-convert-values-6.0.0.tgz#ec94a954957e5c3f78f0e8f65dfcda95280b8996"
- integrity sha512-U5D8QhVwqT++ecmy8rnTb+RL9n/B806UVaS3m60lqle4YDFcpbS3ae5bTQIh3wOGUSDHSEtMYLs/38dNG7EYFw==
+postcss-custom-selectors@^7.1.6:
+ version "7.1.6"
+ resolved "https://registry.yarnpkg.com/postcss-custom-selectors/-/postcss-custom-selectors-7.1.6.tgz#6d28812998dcd48f61a6a538141fc16cf2c42123"
+ integrity sha512-svsjWRaxqL3vAzv71dV0/65P24/FB8TbPX+lWyyf9SZ7aZm4S4NhCn7N3Bg+Z5sZunG3FS8xQ80LrCU9hb37cw==
dependencies:
- browserslist "^4.21.4"
+ "@csstools/cascade-layer-name-parser" "^1.0.5"
+ "@csstools/css-parser-algorithms" "^2.3.2"
+ "@csstools/css-tokenizer" "^2.2.1"
+ postcss-selector-parser "^6.0.13"
+
+postcss-dir-pseudo-class@^8.0.0:
+ version "8.0.0"
+ resolved "https://registry.yarnpkg.com/postcss-dir-pseudo-class/-/postcss-dir-pseudo-class-8.0.0.tgz#9e4e37d170f672520d3f38fd8376db0ca04d4e9c"
+ integrity sha512-Oy5BBi0dWPwij/IA+yDYj+/OBMQ9EPqAzTHeSNUYrUWdll/PRJmcbiUj0MNcsBi681I1gcSTLvMERPaXzdbvJg==
+ dependencies:
+ postcss-selector-parser "^6.0.13"
+
+postcss-double-position-gradients@^5.0.2:
+ version "5.0.2"
+ resolved "https://registry.yarnpkg.com/postcss-double-position-gradients/-/postcss-double-position-gradients-5.0.2.tgz#a55ed4d6a395f324aa5535ea8c42c74e8ace2651"
+ integrity sha512-KTbvdOOy8z8zb0BTkEg4/1vqlRlApdvjw8/pFoehgQl0WVO+fezDGlvo0B8xRA+XccA7ohkQCULKNsiNOx70Cw==
+ dependencies:
+ "@csstools/postcss-progressive-custom-properties" "^3.0.2"
postcss-value-parser "^4.2.0"
-postcss-discard-comments@^6.0.0:
- version "6.0.0"
- resolved "https://registry.yarnpkg.com/postcss-discard-comments/-/postcss-discard-comments-6.0.0.tgz#9ca335e8b68919f301b24ba47dde226a42e535fe"
- integrity sha512-p2skSGqzPMZkEQvJsgnkBhCn8gI7NzRH2683EEjrIkoMiwRELx68yoUJ3q3DGSGuQ8Ug9Gsn+OuDr46yfO+eFw==
+postcss-focus-visible@^9.0.0:
+ version "9.0.0"
+ resolved "https://registry.yarnpkg.com/postcss-focus-visible/-/postcss-focus-visible-9.0.0.tgz#a81227428d6f1e524099c6581f7c7132f987e382"
+ integrity sha512-zA4TbVaIaT8npZBEROhZmlc+GBKE8AELPHXE7i4TmIUEQhw/P/mSJfY9t6tBzpQ1rABeGtEOHYrW4SboQeONMQ==
+ dependencies:
+ postcss-selector-parser "^6.0.13"
-postcss-discard-duplicates@^6.0.0:
- version "6.0.0"
- resolved "https://registry.yarnpkg.com/postcss-discard-duplicates/-/postcss-discard-duplicates-6.0.0.tgz#c26177a6c33070922e67e9a92c0fd23d443d1355"
- integrity sha512-bU1SXIizMLtDW4oSsi5C/xHKbhLlhek/0/yCnoMQany9k3nPBq+Ctsv/9oMmyqbR96HYHxZcHyK2HR5P/mqoGA==
+postcss-focus-within@^8.0.0:
+ version "8.0.0"
+ resolved "https://registry.yarnpkg.com/postcss-focus-within/-/postcss-focus-within-8.0.0.tgz#8304380dd2dadc1c2dcfa52816ff86be7736fc16"
+ integrity sha512-E7+J9nuQzZaA37D/MUZMX1K817RZGDab8qw6pFwzAkDd/QtlWJ9/WTKmzewNiuxzeq6WWY7ATiRePVoDKp+DnA==
+ dependencies:
+ postcss-selector-parser "^6.0.13"
-postcss-discard-empty@^6.0.0:
- version "6.0.0"
- resolved "https://registry.yarnpkg.com/postcss-discard-empty/-/postcss-discard-empty-6.0.0.tgz#06c1c4fce09e22d2a99e667c8550eb8a3a1b9aee"
- integrity sha512-b+h1S1VT6dNhpcg+LpyiUrdnEZfICF0my7HAKgJixJLW7BnNmpRH34+uw/etf5AhOlIhIAuXApSzzDzMI9K/gQ==
+postcss-font-variant@^5.0.0:
+ version "5.0.0"
+ resolved "https://registry.yarnpkg.com/postcss-font-variant/-/postcss-font-variant-5.0.0.tgz#efd59b4b7ea8bb06127f2d031bfbb7f24d32fa66"
+ integrity sha512-1fmkBaCALD72CK2a9i468mA/+tr9/1cBxRRMXOUaZqO43oWPR5imcyPjXwuv7PXbCid4ndlP5zWhidQVVa3hmA==
-postcss-discard-overridden@^6.0.0:
- version "6.0.0"
- resolved "https://registry.yarnpkg.com/postcss-discard-overridden/-/postcss-discard-overridden-6.0.0.tgz#49c5262db14e975e349692d9024442de7cd8e234"
- integrity sha512-4VELwssYXDFigPYAZ8vL4yX4mUepF/oCBeeIT4OXsJPYOtvJumyz9WflmJWTfDwCUcpDR+z0zvCWBXgTx35SVw==
+postcss-gap-properties@^5.0.0:
+ version "5.0.0"
+ resolved "https://registry.yarnpkg.com/postcss-gap-properties/-/postcss-gap-properties-5.0.0.tgz#3bd77f3d51facb1da404b4edd72b8203929385a5"
+ integrity sha512-YjsEEL6890P7MCv6fch6Am1yq0EhQCJMXyT4LBohiu87+4/WqR7y5W3RIv53WdA901hhytgRvjlrAhibhW4qsA==
+
+postcss-image-set-function@^6.0.1:
+ version "6.0.1"
+ resolved "https://registry.yarnpkg.com/postcss-image-set-function/-/postcss-image-set-function-6.0.1.tgz#e2bba0a0536a0c70f63933f7c5df68742e9615ca"
+ integrity sha512-VlZncC9hhZ5tg0JllY4g6Z28BeoPO8DIkelioEEkXL0AA0IORlqYpTi2L8TUnl4YQrlwvBgxVy+mdZJw5R/cIQ==
+ dependencies:
+ postcss-value-parser "^4.2.0"
postcss-import@^15.1.0:
version "15.1.0"
@@ -10015,6 +10236,24 @@ postcss-js@^4.0.1:
dependencies:
camelcase-css "^2.0.1"
+postcss-lab-function@^6.0.7:
+ version "6.0.7"
+ resolved "https://registry.yarnpkg.com/postcss-lab-function/-/postcss-lab-function-6.0.7.tgz#b1dd0ad5a4c993b7695614239754b9be48f3b24b"
+ integrity sha512-4d1lhDVPukHFqkMv4G5vVcK+tgY52vwb5uR1SWKOaO5389r2q8fMxBWuXSW+YtbCOEGP0/X9KERi9E9le2pJuw==
+ dependencies:
+ "@csstools/css-color-parser" "^1.4.0"
+ "@csstools/css-parser-algorithms" "^2.3.2"
+ "@csstools/css-tokenizer" "^2.2.1"
+ "@csstools/postcss-progressive-custom-properties" "^3.0.2"
+
+postcss-load-config@^4.0.0:
+ version "4.0.2"
+ resolved "https://registry.yarnpkg.com/postcss-load-config/-/postcss-load-config-4.0.2.tgz#7159dcf626118d33e299f485d6afe4aff7c4a3e3"
+ integrity sha512-bSVhyJGL00wMVoPUzAVAnbEoWyqRxkjv64tUl427SKnPrENtq6hJwUojroMz2VB+Q1edmi4IfrAPpami5VVgMQ==
+ dependencies:
+ lilconfig "^3.0.0"
+ yaml "^2.3.4"
+
postcss-load-config@^4.0.1:
version "4.0.1"
resolved "https://registry.yarnpkg.com/postcss-load-config/-/postcss-load-config-4.0.1.tgz#152383f481c2758274404e4962743191d73875bd"
@@ -10023,56 +10262,13 @@ postcss-load-config@^4.0.1:
lilconfig "^2.0.5"
yaml "^2.1.1"
-postcss-merge-longhand@^6.0.0:
- version "6.0.0"
- resolved "https://registry.yarnpkg.com/postcss-merge-longhand/-/postcss-merge-longhand-6.0.0.tgz#6f627b27db939bce316eaa97e22400267e798d69"
- integrity sha512-4VSfd1lvGkLTLYcxFuISDtWUfFS4zXe0FpF149AyziftPFQIWxjvFSKhA4MIxMe4XM3yTDgQMbSNgzIVxChbIg==
- dependencies:
- postcss-value-parser "^4.2.0"
- stylehacks "^6.0.0"
-
-postcss-merge-rules@^6.0.1:
- version "6.0.1"
- resolved "https://registry.yarnpkg.com/postcss-merge-rules/-/postcss-merge-rules-6.0.1.tgz#39f165746404e646c0f5c510222ccde4824a86aa"
- integrity sha512-a4tlmJIQo9SCjcfiCcCMg/ZCEe0XTkl/xK0XHBs955GWg9xDX3NwP9pwZ78QUOWB8/0XCjZeJn98Dae0zg6AAw==
- dependencies:
- browserslist "^4.21.4"
- caniuse-api "^3.0.0"
- cssnano-utils "^4.0.0"
- postcss-selector-parser "^6.0.5"
-
-postcss-minify-font-values@^6.0.0:
- version "6.0.0"
- resolved "https://registry.yarnpkg.com/postcss-minify-font-values/-/postcss-minify-font-values-6.0.0.tgz#68d4a028f9fa5f61701974724b2cc9445d8e6070"
- integrity sha512-zNRAVtyh5E8ndZEYXA4WS8ZYsAp798HiIQ1V2UF/C/munLp2r1UGHwf1+6JFu7hdEhJFN+W1WJQKBrtjhFgEnA==
- dependencies:
- postcss-value-parser "^4.2.0"
-
-postcss-minify-gradients@^6.0.0:
- version "6.0.0"
- resolved "https://registry.yarnpkg.com/postcss-minify-gradients/-/postcss-minify-gradients-6.0.0.tgz#22b5c88cc63091dadbad34e31ff958404d51d679"
- integrity sha512-wO0F6YfVAR+K1xVxF53ueZJza3L+R3E6cp0VwuXJQejnNUH0DjcAFe3JEBeTY1dLwGa0NlDWueCA1VlEfiKgAA==
- dependencies:
- colord "^2.9.1"
- cssnano-utils "^4.0.0"
- postcss-value-parser "^4.2.0"
-
-postcss-minify-params@^6.0.0:
- version "6.0.0"
- resolved "https://registry.yarnpkg.com/postcss-minify-params/-/postcss-minify-params-6.0.0.tgz#2b3a85a9e3b990d7a16866f430f5fd1d5961b539"
- integrity sha512-Fz/wMQDveiS0n5JPcvsMeyNXOIMrwF88n7196puSuQSWSa+/Ofc1gDOSY2xi8+A4PqB5dlYCKk/WfqKqsI+ReQ==
+postcss-logical@^7.0.0:
+ version "7.0.0"
+ resolved "https://registry.yarnpkg.com/postcss-logical/-/postcss-logical-7.0.0.tgz#9a83426e716e3c8f957dda3fd874edbcf22c754e"
+ integrity sha512-zYf3vHkoW82f5UZTEXChTJvH49Yl9X37axTZsJGxrCG2kOUwtaAoz9E7tqYg0lsIoJLybaL8fk/2mOi81zVIUw==
dependencies:
- browserslist "^4.21.4"
- cssnano-utils "^4.0.0"
postcss-value-parser "^4.2.0"
-postcss-minify-selectors@^6.0.0:
- version "6.0.0"
- resolved "https://registry.yarnpkg.com/postcss-minify-selectors/-/postcss-minify-selectors-6.0.0.tgz#5046c5e8680a586e5a0cad52cc9aa36d6be5bda2"
- integrity sha512-ec/q9JNCOC2CRDNnypipGfOhbYPuUkewGwLnbv6omue/PSASbHSU7s6uSQ0tcFRVv731oMIx8k0SP4ZX6be/0g==
- dependencies:
- postcss-selector-parser "^6.0.5"
-
postcss-nested@^6.0.1:
version "6.0.1"
resolved "https://registry.yarnpkg.com/postcss-nested/-/postcss-nested-6.0.1.tgz#f83dc9846ca16d2f4fa864f16e9d9f7d0961662c"
@@ -10080,92 +10276,132 @@ postcss-nested@^6.0.1:
dependencies:
postcss-selector-parser "^6.0.11"
-postcss-normalize-charset@^6.0.0:
- version "6.0.0"
- resolved "https://registry.yarnpkg.com/postcss-normalize-charset/-/postcss-normalize-charset-6.0.0.tgz#36cc12457259064969fb96f84df491652a4b0975"
- integrity sha512-cqundwChbu8yO/gSWkuFDmKrCZ2vJzDAocheT2JTd0sFNA4HMGoKMfbk2B+J0OmO0t5GUkiAkSM5yF2rSLUjgQ==
-
-postcss-normalize-display-values@^6.0.0:
- version "6.0.0"
- resolved "https://registry.yarnpkg.com/postcss-normalize-display-values/-/postcss-normalize-display-values-6.0.0.tgz#8d2961415078644d8c6bbbdaf9a2fdd60f546cd4"
- integrity sha512-Qyt5kMrvy7dJRO3OjF7zkotGfuYALETZE+4lk66sziWSPzlBEt7FrUshV6VLECkI4EN8Z863O6Nci4NXQGNzYw==
- dependencies:
- postcss-value-parser "^4.2.0"
-
-postcss-normalize-positions@^6.0.0:
- version "6.0.0"
- resolved "https://registry.yarnpkg.com/postcss-normalize-positions/-/postcss-normalize-positions-6.0.0.tgz#25b96df99a69f8925f730eaee0be74416865e301"
- integrity sha512-mPCzhSV8+30FZyWhxi6UoVRYd3ZBJgTRly4hOkaSifo0H+pjDYcii/aVT4YE6QpOil15a5uiv6ftnY3rm0igPg==
+postcss-nesting@^12.0.1:
+ version "12.0.1"
+ resolved "https://registry.yarnpkg.com/postcss-nesting/-/postcss-nesting-12.0.1.tgz#abb76d15dfd59a9f7d03b4464f53b60a4d3795c4"
+ integrity sha512-6LCqCWP9pqwXw/njMvNK0hGY44Fxc4B2EsGbn6xDcxbNRzP8GYoxT7yabVVMLrX3quqOJ9hg2jYMsnkedOf8pA==
dependencies:
- postcss-value-parser "^4.2.0"
+ "@csstools/selector-specificity" "^3.0.0"
+ postcss-selector-parser "^6.0.13"
-postcss-normalize-repeat-style@^6.0.0:
- version "6.0.0"
- resolved "https://registry.yarnpkg.com/postcss-normalize-repeat-style/-/postcss-normalize-repeat-style-6.0.0.tgz#ddf30ad8762feb5b1eb97f39f251acd7b8353299"
- integrity sha512-50W5JWEBiOOAez2AKBh4kRFm2uhrT3O1Uwdxz7k24aKtbD83vqmcVG7zoIwo6xI2FZ/HDlbrCopXhLeTpQib1A==
- dependencies:
- postcss-value-parser "^4.2.0"
+postcss-opacity-percentage@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/postcss-opacity-percentage/-/postcss-opacity-percentage-2.0.0.tgz#c0a56060cd4586e3f954dbde1efffc2deed53002"
+ integrity sha512-lyDrCOtntq5Y1JZpBFzIWm2wG9kbEdujpNt4NLannF+J9c8CgFIzPa80YQfdza+Y+yFfzbYj/rfoOsYsooUWTQ==
-postcss-normalize-string@^6.0.0:
- version "6.0.0"
- resolved "https://registry.yarnpkg.com/postcss-normalize-string/-/postcss-normalize-string-6.0.0.tgz#948282647a51e409d69dde7910f0ac2ff97cb5d8"
- integrity sha512-KWkIB7TrPOiqb8ZZz6homet2KWKJwIlysF5ICPZrXAylGe2hzX/HSf4NTX2rRPJMAtlRsj/yfkrWGavFuB+c0w==
+postcss-overflow-shorthand@^5.0.0:
+ version "5.0.0"
+ resolved "https://registry.yarnpkg.com/postcss-overflow-shorthand/-/postcss-overflow-shorthand-5.0.0.tgz#1ed6d6c532cdf52b5dabec06662dc63f9207855c"
+ integrity sha512-2rlxDyeSics/hC2FuMdPnWiP9WUPZ5x7FTuArXLFVpaSQ2woPSfZS4RD59HuEokbZhs/wPUQJ1E3MT6zVv94MQ==
dependencies:
postcss-value-parser "^4.2.0"
-postcss-normalize-timing-functions@^6.0.0:
- version "6.0.0"
- resolved "https://registry.yarnpkg.com/postcss-normalize-timing-functions/-/postcss-normalize-timing-functions-6.0.0.tgz#5f13e650b8c43351989fc5de694525cc2539841c"
- integrity sha512-tpIXWciXBp5CiFs8sem90IWlw76FV4oi6QEWfQwyeREVwUy39VSeSqjAT7X0Qw650yAimYW5gkl2Gd871N5SQg==
- dependencies:
- postcss-value-parser "^4.2.0"
+postcss-page-break@^3.0.4:
+ version "3.0.4"
+ resolved "https://registry.yarnpkg.com/postcss-page-break/-/postcss-page-break-3.0.4.tgz#7fbf741c233621622b68d435babfb70dd8c1ee5f"
+ integrity sha512-1JGu8oCjVXLa9q9rFTo4MbeeA5FMe00/9C7lN4va606Rdb+HkxXtXsmEDrIraQ11fGz/WvKWa8gMuCKkrXpTsQ==
-postcss-normalize-unicode@^6.0.0:
- version "6.0.0"
- resolved "https://registry.yarnpkg.com/postcss-normalize-unicode/-/postcss-normalize-unicode-6.0.0.tgz#741b3310f874616bdcf07764f5503695d3604730"
- integrity sha512-ui5crYkb5ubEUDugDc786L/Me+DXp2dLg3fVJbqyAl0VPkAeALyAijF2zOsnZyaS1HyfPuMH0DwyY18VMFVNkg==
+postcss-place@^9.0.0:
+ version "9.0.0"
+ resolved "https://registry.yarnpkg.com/postcss-place/-/postcss-place-9.0.0.tgz#7e47851bf40d16ce06f6013453b706100ca6c102"
+ integrity sha512-qLEPD9VPH5opDVemwmRaujODF9nExn24VOC3ghgVLEvfYN7VZLwJHes0q/C9YR5hI2UC3VgBE8Wkdp1TxCXhtg==
dependencies:
- browserslist "^4.21.4"
postcss-value-parser "^4.2.0"
-postcss-normalize-url@^6.0.0:
- version "6.0.0"
- resolved "https://registry.yarnpkg.com/postcss-normalize-url/-/postcss-normalize-url-6.0.0.tgz#d0a31e962a16401fb7deb7754b397a323fb650b4"
- integrity sha512-98mvh2QzIPbb02YDIrYvAg4OUzGH7s1ZgHlD3fIdTHLgPLRpv1ZTKJDnSAKr4Rt21ZQFzwhGMXxpXlfrUBKFHw==
- dependencies:
+postcss-preset-env@^9.3.0:
+ version "9.3.0"
+ resolved "https://registry.yarnpkg.com/postcss-preset-env/-/postcss-preset-env-9.3.0.tgz#58f296087cf3dc18cb75af11954c6c5822220327"
+ integrity sha512-ycw6doPrqV6QxDCtgiyGDef61bEfiSc59HGM4gOw/wxQxmKnhuEery61oOC/5ViENz/ycpRsuhTexs1kUBTvVw==
+ dependencies:
+ "@csstools/postcss-cascade-layers" "^4.0.1"
+ "@csstools/postcss-color-function" "^3.0.7"
+ "@csstools/postcss-color-mix-function" "^2.0.7"
+ "@csstools/postcss-exponential-functions" "^1.0.1"
+ "@csstools/postcss-font-format-keywords" "^3.0.0"
+ "@csstools/postcss-gamut-mapping" "^1.0.0"
+ "@csstools/postcss-gradients-interpolation-method" "^4.0.7"
+ "@csstools/postcss-hwb-function" "^3.0.6"
+ "@csstools/postcss-ic-unit" "^3.0.2"
+ "@csstools/postcss-initial" "^1.0.0"
+ "@csstools/postcss-is-pseudo-class" "^4.0.3"
+ "@csstools/postcss-logical-float-and-clear" "^2.0.0"
+ "@csstools/postcss-logical-overflow" "^1.0.0"
+ "@csstools/postcss-logical-overscroll-behavior" "^1.0.0"
+ "@csstools/postcss-logical-resize" "^2.0.0"
+ "@csstools/postcss-logical-viewport-units" "^2.0.3"
+ "@csstools/postcss-media-minmax" "^1.1.0"
+ "@csstools/postcss-media-queries-aspect-ratio-number-values" "^2.0.3"
+ "@csstools/postcss-nested-calc" "^3.0.0"
+ "@csstools/postcss-normalize-display-values" "^3.0.1"
+ "@csstools/postcss-oklab-function" "^3.0.7"
+ "@csstools/postcss-progressive-custom-properties" "^3.0.2"
+ "@csstools/postcss-relative-color-syntax" "^2.0.7"
+ "@csstools/postcss-scope-pseudo-class" "^3.0.0"
+ "@csstools/postcss-stepped-value-functions" "^3.0.2"
+ "@csstools/postcss-text-decoration-shorthand" "^3.0.3"
+ "@csstools/postcss-trigonometric-functions" "^3.0.2"
+ "@csstools/postcss-unset-value" "^3.0.0"
+ autoprefixer "^10.4.16"
+ browserslist "^4.22.1"
+ css-blank-pseudo "^6.0.0"
+ css-has-pseudo "^6.0.0"
+ css-prefers-color-scheme "^9.0.0"
+ cssdb "^7.9.0"
+ postcss-attribute-case-insensitive "^6.0.2"
+ postcss-clamp "^4.1.0"
+ postcss-color-functional-notation "^6.0.2"
+ postcss-color-hex-alpha "^9.0.2"
+ postcss-color-rebeccapurple "^9.0.1"
+ postcss-custom-media "^10.0.2"
+ postcss-custom-properties "^13.3.2"
+ postcss-custom-selectors "^7.1.6"
+ postcss-dir-pseudo-class "^8.0.0"
+ postcss-double-position-gradients "^5.0.2"
+ postcss-focus-visible "^9.0.0"
+ postcss-focus-within "^8.0.0"
+ postcss-font-variant "^5.0.0"
+ postcss-gap-properties "^5.0.0"
+ postcss-image-set-function "^6.0.1"
+ postcss-lab-function "^6.0.7"
+ postcss-logical "^7.0.0"
+ postcss-nesting "^12.0.1"
+ postcss-opacity-percentage "^2.0.0"
+ postcss-overflow-shorthand "^5.0.0"
+ postcss-page-break "^3.0.4"
+ postcss-place "^9.0.0"
+ postcss-pseudo-class-any-link "^9.0.0"
+ postcss-replace-overflow-wrap "^4.0.0"
+ postcss-selector-not "^7.0.1"
postcss-value-parser "^4.2.0"
-postcss-normalize-whitespace@^6.0.0:
- version "6.0.0"
- resolved "https://registry.yarnpkg.com/postcss-normalize-whitespace/-/postcss-normalize-whitespace-6.0.0.tgz#accb961caa42e25ca4179b60855b79b1f7129d4d"
- integrity sha512-7cfE1AyLiK0+ZBG6FmLziJzqQCpTQY+8XjMhMAz8WSBSCsCNNUKujgIgjCAmDT3cJ+3zjTXFkoD15ZPsckArVw==
+postcss-pseudo-class-any-link@^9.0.0:
+ version "9.0.0"
+ resolved "https://registry.yarnpkg.com/postcss-pseudo-class-any-link/-/postcss-pseudo-class-any-link-9.0.0.tgz#5fb5b700e0ecdc845a94eb433b8ccff756cbf660"
+ integrity sha512-QNCYIL98VKFKY6HGDEJpF6+K/sg9bxcUYnOmNHJxZS5wsFDFaVoPeG68WAuhsqwbIBSo/b9fjEnTwY2mTSD+uA==
dependencies:
- postcss-value-parser "^4.2.0"
+ postcss-selector-parser "^6.0.13"
-postcss-ordered-values@^6.0.0:
- version "6.0.0"
- resolved "https://registry.yarnpkg.com/postcss-ordered-values/-/postcss-ordered-values-6.0.0.tgz#374704cdff25560d44061d17ba3c6308837a3218"
- integrity sha512-K36XzUDpvfG/nWkjs6d1hRBydeIxGpKS2+n+ywlKPzx1nMYDYpoGbcjhj5AwVYJK1qV2/SDoDEnHzlPD6s3nMg==
- dependencies:
- cssnano-utils "^4.0.0"
- postcss-value-parser "^4.2.0"
+postcss-replace-overflow-wrap@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/postcss-replace-overflow-wrap/-/postcss-replace-overflow-wrap-4.0.0.tgz#d2df6bed10b477bf9c52fab28c568b4b29ca4319"
+ integrity sha512-KmF7SBPphT4gPPcKZc7aDkweHiKEEO8cla/GjcBK+ckKxiZslIu3C4GCRW3DNfL0o7yW7kMQu9xlZ1kXRXLXtw==
-postcss-reduce-initial@^6.0.0:
- version "6.0.0"
- resolved "https://registry.yarnpkg.com/postcss-reduce-initial/-/postcss-reduce-initial-6.0.0.tgz#7d16e83e60e27e2fa42f56ec0b426f1da332eca7"
- integrity sha512-s2UOnidpVuXu6JiiI5U+fV2jamAw5YNA9Fdi/GRK0zLDLCfXmSGqQtzpUPtfN66RtCbb9fFHoyZdQaxOB3WxVA==
+postcss-reporter@^7.0.0:
+ version "7.0.5"
+ resolved "https://registry.yarnpkg.com/postcss-reporter/-/postcss-reporter-7.0.5.tgz#e55bd0fdf8d17e4f25fb55e9143fcd79349a2ceb"
+ integrity sha512-glWg7VZBilooZGOFPhN9msJ3FQs19Hie7l5a/eE6WglzYqVeH3ong3ShFcp9kDWJT1g2Y/wd59cocf9XxBtkWA==
dependencies:
- browserslist "^4.21.4"
- caniuse-api "^3.0.0"
+ picocolors "^1.0.0"
+ thenby "^1.3.4"
-postcss-reduce-transforms@^6.0.0:
- version "6.0.0"
- resolved "https://registry.yarnpkg.com/postcss-reduce-transforms/-/postcss-reduce-transforms-6.0.0.tgz#28ff2601a6d9b96a2f039b3501526e1f4d584a46"
- integrity sha512-FQ9f6xM1homnuy1wLe9lP1wujzxnwt1EwiigtWwuyf8FsqqXUDUp2Ulxf9A5yjlUOTdCJO6lonYjg1mgqIIi2w==
+postcss-selector-not@^7.0.1:
+ version "7.0.1"
+ resolved "https://registry.yarnpkg.com/postcss-selector-not/-/postcss-selector-not-7.0.1.tgz#8142e90c8eb6c8c5faecb3e9d96d4353d02e94fb"
+ integrity sha512-1zT5C27b/zeJhchN7fP0kBr16Cc61mu7Si9uWWLoA3Px/D9tIJPKchJCkUH3tPO5D0pCFmGeApAv8XpXBQJ8SQ==
dependencies:
- postcss-value-parser "^4.2.0"
+ postcss-selector-parser "^6.0.10"
-postcss-selector-parser@^6.0.11, postcss-selector-parser@^6.0.13, postcss-selector-parser@^6.0.4, postcss-selector-parser@^6.0.5, postcss-selector-parser@^6.0.7:
+postcss-selector-parser@^6.0.10, postcss-selector-parser@^6.0.11, postcss-selector-parser@^6.0.13:
version "6.0.13"
resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-6.0.13.tgz#d05d8d76b1e8e173257ef9d60b706a8e5e99bf1b"
integrity sha512-EaV1Gl4mUEV4ddhDnv/xtj7sxwrwxdetHdWUGnT4VJQf+4d05v6lHYZr8N573k5Z0BViss7BDhfWtKS3+sfAqQ==
@@ -10173,21 +10409,6 @@ postcss-selector-parser@^6.0.11, postcss-selector-parser@^6.0.13, postcss-select
cssesc "^3.0.0"
util-deprecate "^1.0.2"
-postcss-svgo@^6.0.0:
- version "6.0.0"
- resolved "https://registry.yarnpkg.com/postcss-svgo/-/postcss-svgo-6.0.0.tgz#7b18742d38d4505a0455bbe70d52b49f00eaf69d"
- integrity sha512-r9zvj/wGAoAIodn84dR/kFqwhINp5YsJkLoujybWG59grR/IHx+uQ2Zo+IcOwM0jskfYX3R0mo+1Kip1VSNcvw==
- dependencies:
- postcss-value-parser "^4.2.0"
- svgo "^3.0.2"
-
-postcss-unique-selectors@^6.0.0:
- version "6.0.0"
- resolved "https://registry.yarnpkg.com/postcss-unique-selectors/-/postcss-unique-selectors-6.0.0.tgz#c94e9b0f7bffb1203894e42294b5a1b3fb34fbe1"
- integrity sha512-EPQzpZNxOxP7777t73RQpZE5e9TrnCrkvp7AH7a0l89JmZiPnS82y216JowHXwpBCQitfyxrof9TK3rYbi7/Yw==
- dependencies:
- postcss-selector-parser "^6.0.5"
-
postcss-value-parser@^4.0.0, postcss-value-parser@^4.0.2, postcss-value-parser@^4.2.0:
version "4.2.0"
resolved "https://registry.yarnpkg.com/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz#723c09920836ba6d3e5af019f92bc0971c02e514"
@@ -10202,7 +10423,7 @@ postcss@8.4.14:
picocolors "^1.0.0"
source-map-js "^1.0.2"
-postcss@^8.4.23, postcss@^8.4.31, postcss@^8.4.4, postcss@~8.4:
+postcss@^8.4.23, postcss@^8.4.31, postcss@~8.4:
version "8.4.31"
resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.4.31.tgz#92b451050a9f914da6755af352bdc0192508656d"
integrity sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ==
@@ -10280,6 +10501,11 @@ prettier@^2.7.1:
resolved "https://registry.yarnpkg.com/prettier/-/prettier-2.8.8.tgz#e8c5d7e98a4305ffe3de2e1fc4aca1a71c28b1da"
integrity sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q==
+pretty-hrtime@^1.0.3:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/pretty-hrtime/-/pretty-hrtime-1.0.3.tgz#b7e3ea42435a4c9b2759d99e0f201eb195802ee1"
+ integrity sha512-66hKPCr+72mlfiSjlEB1+45IjXSqvVAIy6mocupoww4tBFE9R9IhwwUGoI4G++Tc9Aq+2rxOt0RFU6gPcrte0A==
+
prismjs@^1.27.0:
version "1.29.0"
resolved "https://registry.yarnpkg.com/prismjs/-/prismjs-1.29.0.tgz#f113555a8fa9b57c35e637bba27509dcf802dd12"
@@ -10375,16 +10601,6 @@ punycode@^2.1.0:
resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.3.0.tgz#f67fa67c94da8f4d0cfff981aee4118064199b8f"
integrity sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==
-purgecss@^5.0.0:
- version "5.0.0"
- resolved "https://registry.yarnpkg.com/purgecss/-/purgecss-5.0.0.tgz#08526ba3fef95e42c54503ca59d3f2ee8d6e5189"
- integrity sha512-RAnuxrGuVyLLTr8uMbKaxDRGWMgK5CCYDfRyUNNcaz5P3kGgD2b7ymQGYEyo2ST7Tl/ScwFgf5l3slKMxHSbrw==
- dependencies:
- commander "^9.0.0"
- glob "^8.0.3"
- postcss "^8.4.4"
- postcss-selector-parser "^6.0.7"
-
qrcode@1.4.4:
version "1.4.4"
resolved "https://registry.yarnpkg.com/qrcode/-/qrcode-1.4.4.tgz#f0c43568a7e7510a55efc3b88d9602f71963ea83"
@@ -11170,6 +11386,11 @@ slash@^4.0.0:
resolved "https://registry.yarnpkg.com/slash/-/slash-4.0.0.tgz#2422372176c4c6c5addb5e2ada885af984b396a7"
integrity sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew==
+slash@^5.0.0:
+ version "5.1.0"
+ resolved "https://registry.yarnpkg.com/slash/-/slash-5.1.0.tgz#be3adddcdf09ac38eebe8dcdc7b1a57a75b095ce"
+ integrity sha512-ZA6oR3T/pEyuqwMgAKT0/hAv8oAXckzbkmR0UkUosQ+Mc4RxGoJkRmwHgHufaenlyAgE1Mxgpdcrf75y6XcnDg==
+
sonic-boom@^2.2.1:
version "2.8.0"
resolved "https://registry.yarnpkg.com/sonic-boom/-/sonic-boom-2.8.0.tgz#c1def62a77425090e6ad7516aad8eb402e047611"
@@ -11184,7 +11405,7 @@ sonic-boom@^3.0.0, sonic-boom@^3.7.0:
dependencies:
atomic-sleep "^1.0.0"
-source-map-js@^1.0.1, source-map-js@^1.0.2:
+source-map-js@^1.0.2:
version "1.0.2"
resolved "https://registry.yarnpkg.com/source-map-js/-/source-map-js-1.0.2.tgz#adbc361d9c62df380125e7f161f71c826f1e490c"
integrity sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==
@@ -11263,7 +11484,7 @@ strict-uri-encode@^2.0.0:
resolved "https://registry.yarnpkg.com/strict-uri-encode/-/strict-uri-encode-2.0.0.tgz#b9c7330c7042862f6b142dc274bbcc5866ce3546"
integrity sha512-QwiXZgpRcKkhTj2Scnn++4PKtWsH0kpzZ62L2R6c/LUVYv7hVnZqcg2+sMuT6R7Jusu1vviK/MFsu6kNJfWlEQ==
-"string-width-cjs@npm:string-width@^4.2.0", string-width@^4.1.0, string-width@^4.2.0:
+"string-width-cjs@npm:string-width@^4.2.0", string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.3:
name string-width-cjs
version "4.2.3"
resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010"
@@ -11411,14 +11632,6 @@ styled-jsx@5.1.1:
dependencies:
client-only "0.0.1"
-stylehacks@^6.0.0:
- version "6.0.0"
- resolved "https://registry.yarnpkg.com/stylehacks/-/stylehacks-6.0.0.tgz#9fdd7c217660dae0f62e14d51c89f6c01b3cb738"
- integrity sha512-+UT589qhHPwz6mTlCLSt/vMNTJx8dopeJlZAlBMJPWA3ORqu6wmQY7FBXf+qD+FsqoBJODyqNxOUP3jdntFRdw==
- dependencies:
- browserslist "^4.21.4"
- postcss-selector-parser "^6.0.4"
-
sucrase@^3.32.0, sucrase@^3.34.0:
version "3.34.0"
resolved "https://registry.yarnpkg.com/sucrase/-/sucrase-3.34.0.tgz#1e0e2d8fcf07f8b9c3569067d92fbd8690fb576f"
@@ -11451,18 +11664,6 @@ supports-preserve-symlinks-flag@^1.0.0:
resolved "https://registry.yarnpkg.com/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz#6eda4bd344a3c94aea376d4cc31bc77311039e09"
integrity sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==
-svgo@^3.0.2:
- version "3.0.3"
- resolved "https://registry.yarnpkg.com/svgo/-/svgo-3.0.3.tgz#8cdfece6d4a0dc1dc116766d806daf817c1798b8"
- integrity sha512-X4UZvLhOglD5Xrp834HzGHf8RKUW0Ahigg/08yRO1no9t2NxffOkMiQ0WmaMIbaGlVTlSst2zWANsdhz5ybXgA==
- dependencies:
- "@trysound/sax" "0.2.0"
- commander "^7.2.0"
- css-select "^5.1.0"
- css-tree "^2.2.1"
- csso "5.0.5"
- picocolors "^1.0.0"
-
swagger-ui-dist@>=4.11.0:
version "5.9.1"
resolved "https://registry.yarnpkg.com/swagger-ui-dist/-/swagger-ui-dist-5.9.1.tgz#d0bcd614e3752da02df141846348f84468ae815e"
@@ -11523,6 +11724,11 @@ text-table@^0.2.0:
resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4"
integrity sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==
+thenby@^1.3.4:
+ version "1.3.4"
+ resolved "https://registry.yarnpkg.com/thenby/-/thenby-1.3.4.tgz#81581f6e1bb324c6dedeae9bfc28e59b1a2201cc"
+ integrity sha512-89Gi5raiWA3QZ4b2ePcEwswC3me9JIg+ToSgtE0JWeCynLnLxNr/f9G+xfo9K+Oj4AFdom8YNJjibIARTJmapQ==
+
thenify-all@^1.0.0:
version "1.6.0"
resolved "https://registry.yarnpkg.com/thenify-all/-/thenify-all-1.6.0.tgz#1a1918d402d8fc3f98fbf234db0bcc8cc10e9726"
@@ -11881,6 +12087,11 @@ unist-util-visit@^4.0.0:
unist-util-is "^5.0.0"
unist-util-visit-parents "^5.1.1"
+universalify@^2.0.0:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/universalify/-/universalify-2.0.1.tgz#168efc2180964e6386d061e094df61afe239b18d"
+ integrity sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==
+
unpipe@1.0.0, unpipe@~1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec"
@@ -12071,7 +12282,7 @@ which@^2.0.1:
dependencies:
isexe "^2.0.0"
-"wrap-ansi-cjs@npm:wrap-ansi@^7.0.0":
+"wrap-ansi-cjs@npm:wrap-ansi@^7.0.0", wrap-ansi@^7.0.0:
version "7.0.0"
resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43"
integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==
@@ -12137,6 +12348,11 @@ y18n@^4.0.0:
resolved "https://registry.yarnpkg.com/y18n/-/y18n-4.0.3.tgz#b5f259c82cd6e336921efd7bfd8bf560de9eeedf"
integrity sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==
+y18n@^5.0.5:
+ version "5.0.8"
+ resolved "https://registry.yarnpkg.com/y18n/-/y18n-5.0.8.tgz#7f4934d0f7ca8c56f95314939ddcd2dd91ce1d55"
+ integrity sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==
+
yallist@4.0.0, yallist@^4.0.0:
version "4.0.0"
resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72"
@@ -12152,6 +12368,11 @@ yaml@^2.1.1:
resolved "https://registry.yarnpkg.com/yaml/-/yaml-2.3.3.tgz#01f6d18ef036446340007db8e016810e5d64aad9"
integrity sha512-zw0VAJxgeZ6+++/su5AFoqBbZbrEakwu+X0M5HmcwUiBL7AzcuPKjj5we4xfQLp78LkEMpD0cOnUhmgOVy3KdQ==
+yaml@^2.3.4:
+ version "2.3.4"
+ resolved "https://registry.yarnpkg.com/yaml/-/yaml-2.3.4.tgz#53fc1d514be80aabf386dc6001eb29bf3b7523b2"
+ integrity sha512-8aAvwVUSHpfEqTQ4w/KMlf3HcRdt50E5ODIQJBw1fQ5RL34xabzxtUlzTXVqc4rkZsPbvrXKWnABCD7kWSmocA==
+
yargs-parser@^13.1.2:
version "13.1.2"
resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-13.1.2.tgz#130f09702ebaeef2650d54ce6e3e5706f7a4fb38"
@@ -12168,6 +12389,11 @@ yargs-parser@^18.1.2:
camelcase "^5.0.0"
decamelize "^1.2.0"
+yargs-parser@^21.1.1:
+ version "21.1.1"
+ resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-21.1.1.tgz#9096bceebf990d21bb31fa9516e0ede294a77d35"
+ integrity sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==
+
yargs@^13.2.4:
version "13.3.2"
resolved "https://registry.yarnpkg.com/yargs/-/yargs-13.3.2.tgz#ad7ffefec1aa59565ac915f82dccb38a9c31a2dd"
@@ -12201,6 +12427,19 @@ yargs@^15.3.1:
y18n "^4.0.0"
yargs-parser "^18.1.2"
+yargs@^17.0.0:
+ version "17.7.2"
+ resolved "https://registry.yarnpkg.com/yargs/-/yargs-17.7.2.tgz#991df39aca675a192b816e1e0363f9d75d2aa269"
+ integrity sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==
+ dependencies:
+ cliui "^8.0.1"
+ escalade "^3.1.1"
+ get-caller-file "^2.0.5"
+ require-directory "^2.1.1"
+ string-width "^4.2.3"
+ y18n "^5.0.5"
+ yargs-parser "^21.1.1"
+
yocto-queue@^0.1.0:
version "0.1.0"
resolved "https://registry.yarnpkg.com/yocto-queue/-/yocto-queue-0.1.0.tgz#0294eb3dee05028d31ee1a5fa2c556a6aaf10a1b"