@luxonis/component-lib 1.0.2 → 1.0.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.css CHANGED
@@ -1 +1 @@
1
- *,: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(59,130,246,.5);--tw-ring-offset-shadow:0 0 #0000;--tw-ring-shadow:0 0 #0000;--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }::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(59,130,246,.5);--tw-ring-offset-shadow:0 0 #0000;--tw-ring-shadow:0 0 #0000;--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }/*! tailwindcss v3.4.17 | MIT License | https://tailwindcss.com*/*,:after,:before{box-sizing:border-box;border:0 solid #e5e7eb}:after,:before{--tw-content:""}:host,html{line-height:1.5;-webkit-text-size-adjust:100%;-moz-tab-size:4;-o-tab-size:4;tab-size:4;font-family:ui-sans-serif,system-ui,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol,Noto Color Emoji;font-feature-settings:normal;font-variation-settings:normal;-webkit-tap-highlight-color:transparent}body{margin:0;line-height:inherit}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,pre,samp{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace;font-feature-settings:normal;font-variation-settings:normal;font-size:1em}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}button,input,optgroup,select,textarea{font-family:inherit;font-feature-settings:inherit;font-variation-settings:inherit;font-size:100%;font-weight:inherit;line-height:inherit;letter-spacing:inherit;color:inherit;margin:0;padding:0}button,select{text-transform:none}button,input:where([type=button]),input:where([type=reset]),input:where([type=submit]){-webkit-appearance:button;background-color:transparent;background-image:none}:-moz-focusring{outline:auto}:-moz-ui-invalid{box-shadow:none}progress{vertical-align:baseline}::-webkit-inner-spin-button,::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}summary{display:list-item}blockquote,dd,dl,figure,h1,h2,h3,h4,h5,h6,hr,p,pre{margin:0}fieldset{margin:0}fieldset,legend{padding:0}menu,ol,ul{list-style:none;margin:0;padding:0}dialog{padding:0}textarea{resize:vertical}input::-moz-placeholder,textarea::-moz-placeholder{opacity:1;color:#9ca3af}input::placeholder,textarea::placeholder{opacity:1;color:#9ca3af}[role=button],button{cursor:pointer}:disabled{cursor:default}audio,canvas,embed,iframe,img,object,svg,video{display:block;vertical-align:middle}img,video{max-width:100%;height:auto}[hidden]:where(:not([hidden=until-found])){display:none}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border-width:0}.pointer-events-none{pointer-events:none}.absolute{position:absolute}.relative{position:relative}.inset-x-0{left:0;right:0}.-bottom-12{bottom:-3rem}.-left-12{left:-3rem}.-right-12{right:-3rem}.-top-12{top:-3rem}.-top-7{top:-1.75rem}.bottom-10{bottom:2.5rem}.left-1\/2{left:50%}.left-12{left:3rem}.right-12{right:3rem}.right-2{right:.5rem}.top-1\/2{top:50%}.top-4{top:1rem}.z-10{z-index:10}.z-50{z-index:50}.z-\[1\]{z-index:1}.z-\[2\]{z-index:2}.-mx-1{margin-left:-.25rem;margin-right:-.25rem}.mx-auto{margin-left:auto;margin-right:auto}.my-1{margin-top:.25rem;margin-bottom:.25rem}.-ml-4{margin-left:-1rem}.-mt-4{margin-top:-1rem}.mt-4{margin-top:1rem}.block{display:block}.inline{display:inline}.flex{display:flex}.inline-flex{display:inline-flex}.table{display:table}.hidden{display:none}.size-14{width:3.5rem;height:3.5rem}.size-3{width:.75rem;height:.75rem}.size-3\.5{width:.875rem;height:.875rem}.size-4{width:1rem;height:1rem}.size-6{width:1.5rem;height:1.5rem}.size-full{width:100%;height:100%}.\!h-\[46px\]{height:46px!important}.h-10{height:2.5rem}.h-12{height:3rem}.h-2{height:.5rem}.h-5{height:1.25rem}.h-6{height:1.5rem}.h-9{height:2.25rem}.h-\[46px\]{height:46px}.h-\[810px\]{height:810px}.h-\[var\(--radix-select-trigger-height\)\]{height:var(--radix-select-trigger-height)}.h-full{height:100%}.h-px{height:1px}.max-h-96{max-height:24rem}.min-h-\[60px\]{min-height:60px}.w-10{width:2.5rem}.w-11{width:2.75rem}.w-5{width:1.25rem}.w-96{width:24rem}.w-fit{width:-moz-fit-content;width:fit-content}.w-full{width:100%}.min-w-\[8rem\]{min-width:8rem}.min-w-\[var\(--radix-select-trigger-width\)\]{min-width:var(--radix-select-trigger-width)}.max-w-105{max-width:424px}.max-w-96{max-width:24rem}.flex-1{flex:1 1 0%}.shrink-0{flex-shrink:0}.grow{flex-grow:1}.caption-bottom{caption-side:bottom}.-translate-x-1\/2{--tw-translate-x:-50%}.-translate-x-1\/2,.-translate-y-1\/2{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-1\/2{--tw-translate-y:-50%}.translate-x-1\/2{--tw-translate-x:50%}.rotate-90,.translate-x-1\/2{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-90{--tw-rotate:90deg}@keyframes expand{0%{transform:scale(0);opacity:.5}to{transform:scale(2);opacity:.1;display:none}}.animate-circle{animation:expand .3s ease-out forwards}.cursor-default{cursor:default}.cursor-pointer{cursor:pointer}.touch-none{touch-action:none}.select-none{-webkit-user-select:none;-moz-user-select:none;user-select:none}.flex-row{flex-direction:row}.flex-row-reverse{flex-direction:row-reverse}.flex-col{flex-direction:column}.items-start{align-items:flex-start}.items-center{align-items:center}.justify-center{justify-content:center}.justify-between{justify-content:space-between}.gap-0{gap:0}.gap-1{gap:.25rem}.gap-1\.5{gap:.375rem}.gap-10{gap:2.5rem}.gap-2{gap:.5rem}.gap-2\.5{gap:.625rem}.gap-3{gap:.75rem}.gap-4{gap:1rem}.gap-6{gap:1.5rem}.gap-8{gap:2rem}.overflow-auto{overflow:auto}.overflow-hidden{overflow:hidden}.text-ellipsis{text-overflow:ellipsis}.whitespace-nowrap{white-space:nowrap}.whitespace-pre-wrap{white-space:pre-wrap}.whitespace-break-spaces{white-space:break-spaces}.text-nowrap{text-wrap:nowrap}.break-words{overflow-wrap:break-word}.break-all{word-break:break-all}.\!rounded-none{border-radius:0!important}.rounded{border-radius:.25rem}.rounded-full{border-radius:9999px}.rounded-lg{border-radius:.5rem}.rounded-md{border-radius:.375rem}.rounded-sm{border-radius:.125rem}.rounded-xl{border-radius:.75rem}.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-none{border-style:none}.border-muted{--tw-border-opacity:1;border-color:rgb(153 153 153/var(--tw-border-opacity,1))}.border-mutedborder{--tw-border-opacity:1;border-color:rgb(120 132 165/var(--tw-border-opacity,1))}.border-primary{--tw-border-opacity:1;border-color:rgb(87 36 232/var(--tw-border-opacity,1))}.border-primaryBorder{border-color:#5724e83d}.border-red-500{--tw-border-opacity:1;border-color:rgb(239 68 68/var(--tw-border-opacity,1))}.border-transparent{border-color:transparent}.border-white{--tw-border-opacity:1;border-color:rgb(255 255 255/var(--tw-border-opacity,1))}.border-white\/30{border-color:hsla(0,0%,100%,.3)}.border-opacity-15{--tw-border-opacity:0.15}.border-opacity-25{--tw-border-opacity:0.25}.bg-black{--tw-bg-opacity:1;background-color:rgb(0 0 0/var(--tw-bg-opacity,1))}.bg-gray-100{--tw-bg-opacity:1;background-color:rgb(243 244 246/var(--tw-bg-opacity,1))}.bg-gray-300{--tw-bg-opacity:1;background-color:rgb(209 213 219/var(--tw-bg-opacity,1))}.bg-muted{--tw-bg-opacity:1;background-color:rgb(153 153 153/var(--tw-bg-opacity,1))}.bg-muted\/50{background-color:hsla(0,0%,60%,.5)}.bg-primary{--tw-bg-opacity:1;background-color:rgb(87 36 232/var(--tw-bg-opacity,1))}.bg-secondary{--tw-bg-opacity:1;background-color:rgb(242 239 249/var(--tw-bg-opacity,1))}.bg-transparent{background-color:transparent}.bg-white{--tw-bg-opacity:1;background-color:rgb(255 255 255/var(--tw-bg-opacity,1))}.bg-white\/10{background-color:hsla(0,0%,100%,.1)}.bg-cover{background-size:cover}.bg-center{background-position:50%}.bg-no-repeat{background-repeat:no-repeat}.fill-black{fill:#000}.fill-current{fill:currentColor}.stroke-black{stroke:#000}.stroke-white{stroke:#fff}.object-cover{-o-object-fit:cover;object-fit:cover}.p-1{padding:.25rem}.p-2{padding:.5rem}.p-3{padding:.75rem}.p-3\.5{padding:.875rem}.p-4{padding:1rem}.px-2{padding-left:.5rem;padding-right:.5rem}.px-2\.5{padding-left:.625rem;padding-right:.625rem}.px-3{padding-left:.75rem;padding-right:.75rem}.px-3\.5{padding-left:.875rem;padding-right:.875rem}.px-4{padding-left:1rem;padding-right:1rem}.px-7{padding-left:1.75rem;padding-right:1.75rem}.py-0{padding-top:0;padding-bottom:0}.py-0\.5{padding-top:.125rem;padding-bottom:.125rem}.py-1{padding-top:.25rem;padding-bottom:.25rem}.py-1\.5{padding-top:.375rem;padding-bottom:.375rem}.py-2{padding-top:.5rem;padding-bottom:.5rem}.py-2\.5{padding-top:.625rem;padding-bottom:.625rem}.py-3{padding-top:.75rem;padding-bottom:.75rem}.py-3\.5{padding-top:.875rem;padding-bottom:.875rem}.py-4{padding-top:1rem}.pb-4,.py-4{padding-bottom:1rem}.pl-2{padding-left:.5rem}.pr-8{padding-right:2rem}.pt-0{padding-top:0}.\!text-left{text-align:left!important}.text-left{text-align:left}.\!text-center{text-align:center!important}.text-center{text-align:center}.text-right{text-align:right}.align-middle{vertical-align:middle}.text-base{font-size:1rem;line-height:1.5rem}.text-captions-mobile{font-size:.875rem;letter-spacing:-.02em}.text-h1-mobile{font-size:2.75rem;letter-spacing:-.02em}.text-h2-mobile{font-size:2.5rem;letter-spacing:-.02em}.text-h3-mobile{font-size:2rem;letter-spacing:-.02em}.text-h4{font-size:2.5rem;letter-spacing:-.02em}.text-h4-mobile{font-size:1.75rem;letter-spacing:-.02em}.text-h5-mobile{font-size:1.5rem;letter-spacing:-.02em}.text-large-mobile,.text-medium-mobile{font-size:1rem;letter-spacing:-.02em}.text-sm{font-size:.875rem;line-height:1.25rem}.text-xs{font-size:.75rem;line-height:1rem}.text-xxs{font-size:.625rem}.font-bold{font-weight:700}.font-medium{font-weight:500}.font-normal{font-weight:400}.font-semibold{font-weight:600}.uppercase{text-transform:uppercase}.capitalize{text-transform:capitalize}.italic{font-style:italic}.leading-110{line-height:110%}.leading-164{line-height:164%}.leading-8{line-height:2rem}.leading-none{line-height:1}.leading-normal{line-height:1.5}.text-black{--tw-text-opacity:1;color:rgb(0 0 0/var(--tw-text-opacity,1))}.text-gray-700{--tw-text-opacity:1;color:rgb(55 65 81/var(--tw-text-opacity,1))}.text-muted{--tw-text-opacity:1;color:rgb(153 153 153/var(--tw-text-opacity,1))}.text-primary{--tw-text-opacity:1;color:rgb(87 36 232/var(--tw-text-opacity,1))}.text-red-500{--tw-text-opacity:1;color:rgb(239 68 68/var(--tw-text-opacity,1))}.text-semimuted{--tw-text-opacity:1;color:rgb(102 102 102/var(--tw-text-opacity,1))}.text-white{--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity,1))}.text-opacity-40{--tw-text-opacity:0.4}.underline{text-decoration-line:underline}.opacity-50{opacity:.5}.opacity-90{opacity:.9}.shadow-lg{--tw-shadow:0 10px 15px -3px rgba(0,0,0,.1),0 4px 6px -4px rgba(0,0,0,.1);--tw-shadow-colored:0 10px 15px -3px var(--tw-shadow-color),0 4px 6px -4px var(--tw-shadow-color)}.shadow-lg,.shadow-md{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 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-sm{--tw-shadow:0 1px 2px 0 rgba(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}.outline{outline-style:solid}.ring-0{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000)}.filter{filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.backdrop-blur-sm{--tw-backdrop-blur:blur(4px);-webkit-backdrop-filter:var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);backdrop-filter:var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia)}.transition-all{transition-property:all;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-colors{transition-property:color,background-color,border-color,text-decoration-color,fill,stroke;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-transform{transition-property:transform;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.placeholder\:text-muted::-moz-placeholder{--tw-text-opacity:1;color:rgb(153 153 153/var(--tw-text-opacity,1))}.placeholder\:text-muted::placeholder{--tw-text-opacity:1;color:rgb(153 153 153/var(--tw-text-opacity,1))}.hover\:bg-muted\/50:hover{background-color:hsla(0,0%,60%,.5)}.hover\:bg-primary\/80:hover{background-color:rgba(87,36,232,.8)}.hover\:bg-secondary:hover{--tw-bg-opacity:1;background-color:rgb(242 239 249/var(--tw-bg-opacity,1))}.hover\:bg-secondary\/80:hover{background-color:rgba(242,239,249,.8)}.hover\:bg-gradient-to-l:hover{background-image:linear-gradient(to left,var(--tw-gradient-stops))}.hover\:from-white\/8:hover{--tw-gradient-from:hsla(0,0%,100%,.08) var(--tw-gradient-from-position);--tw-gradient-to:hsla(0,0%,100%,0) var(--tw-gradient-to-position);--tw-gradient-stops:var(--tw-gradient-from),var(--tw-gradient-to)}.hover\:to-white\/8:hover{--tw-gradient-to:hsla(0,0%,100%,.08) var(--tw-gradient-to-position)}.hover\:stroke-primary:hover{stroke:#5724e8}.hover\:text-primary:hover{--tw-text-opacity:1;color:rgb(87 36 232/var(--tw-text-opacity,1))}.hover\:text-opacity-60:hover{--tw-text-opacity:0.6}.focus\:outline-none:focus{outline:2px solid transparent;outline-offset:2px}.focus\:ring-1:focus{--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)}.focus\:ring-1:focus,.focus\:ring-2:focus{box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000)}.focus\:ring-2:focus{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color)}.focus\:ring-offset-2:focus{--tw-ring-offset-width:2px}.focus-visible\:outline-none:focus-visible{outline:2px solid transparent;outline-offset:2px}.focus-visible\:ring-1:focus-visible{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(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)}.focus-visible\:ring-2:focus-visible{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000)}.focus-visible\:ring-offset-2:focus-visible{--tw-ring-offset-width:2px}.disabled\:pointer-events-none:disabled{pointer-events:none}.disabled\:cursor-not-allowed:disabled{cursor:not-allowed}.disabled\:bg-\[\#D0D0D0\]:disabled{--tw-bg-opacity:1;background-color:rgb(208 208 208/var(--tw-bg-opacity,1))}.disabled\:opacity-50:disabled{opacity:.5}.peer:disabled~.peer-disabled\:cursor-not-allowed{cursor:not-allowed}.peer:disabled~.peer-disabled\:opacity-70{opacity:.7}.aria-selected\:text-black[aria-selected=true]{--tw-text-opacity:1;color:rgb(0 0 0/var(--tw-text-opacity,1))}.aria-selected\:opacity-100[aria-selected=true]{opacity:1}.data-\[disabled\]\:pointer-events-none[data-disabled]{pointer-events:none}.data-\[side\=bottom\]\:translate-y-1[data-side=bottom]{--tw-translate-y:0.25rem}.data-\[side\=bottom\]\:translate-y-1[data-side=bottom],.data-\[side\=left\]\:-translate-x-1[data-side=left]{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))}.data-\[side\=left\]\:-translate-x-1[data-side=left]{--tw-translate-x:-0.25rem}.data-\[side\=right\]\:translate-x-1[data-side=right]{--tw-translate-x:0.25rem}.data-\[side\=right\]\:translate-x-1[data-side=right],.data-\[side\=top\]\:-translate-y-1[data-side=top]{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))}.data-\[side\=top\]\:-translate-y-1[data-side=top]{--tw-translate-y:-0.25rem}.data-\[state\=checked\]\:translate-x-5[data-state=checked]{--tw-translate-x:1.25rem}.data-\[state\=checked\]\:translate-x-5[data-state=checked],.data-\[state\=unchecked\]\:translate-x-0[data-state=unchecked]{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))}.data-\[state\=unchecked\]\:translate-x-0[data-state=unchecked]{--tw-translate-x:0px}@keyframes accordion-up{0%{height:var(--radix-accordion-content-height)}to{height:0}}.data-\[state\=closed\]\:animate-accordion-up[data-state=closed]{animation:accordion-up .2s ease-out}@keyframes accordion-down{0%{height:0}to{height:var(--radix-accordion-content-height)}}.data-\[state\=open\]\:animate-accordion-down[data-state=open]{animation:accordion-down .2s ease-out}.data-\[state\=checked\]\:bg-primary[data-state=checked]{--tw-bg-opacity:1;background-color:rgb(87 36 232/var(--tw-bg-opacity,1))}.data-\[state\=selected\]\:bg-muted[data-state=selected]{--tw-bg-opacity:1;background-color:rgb(153 153 153/var(--tw-bg-opacity,1))}.data-\[disabled\]\:opacity-50[data-disabled]{opacity:.5}@media (min-width:40rem){.sm\:h-\[914px\]{height:914px}.sm\:flex-row{flex-direction:row}.sm\:items-center{align-items:center}.sm\:gap-2{gap:.5rem}.sm\:gap-6{gap:1.5rem}.sm\:\!text-center{text-align:center!important}.sm\:text-2xl{font-size:1.5rem;line-height:2rem}.sm\:text-captions{font-size:.875rem;letter-spacing:-.02em}.sm\:text-h1{font-size:5rem}.sm\:text-h1,.sm\:text-h2{letter-spacing:-.02em}.sm\:text-h2{font-size:4.5rem}.sm\:text-h3{font-size:3rem}.sm\:text-h3,.sm\:text-h4{letter-spacing:-.02em}.sm\:text-h4{font-size:2.5rem}.sm\:text-h5{font-size:2rem;letter-spacing:-.02em}.sm\:text-large{font-size:1.125rem;letter-spacing:-.02em}.sm\:text-medium{font-size:1rem;letter-spacing:-.02em}.sm\:text-sm{font-size:.875rem;line-height:1.25rem}.sm\:text-xl{font-size:1.25rem;line-height:1.75rem}}@media (min-width:48rem){.md\:flex-row{flex-direction:row}.md\:items-end{align-items:flex-end}.md\:justify-start{justify-content:flex-start}.md\:gap-6{gap:1.5rem}.md\:text-sm{font-size:.875rem;line-height:1.25rem}.md\:text-xs{font-size:.75rem;line-height:1rem}}@media (min-width:64rem){.lg\:max-w-\[350px\]{max-width:350px}.lg\:max-w-\[525px\]{max-width:525px}.lg\:items-start{align-items:flex-start}.lg\:\!text-left{text-align:left!important}}@media (min-width:80rem){.xl\:w-auto{width:auto}.xl\:text-h1{font-size:5rem;letter-spacing:-.02em}}.\[\&\:has\(\[role\=checkbox\]\)\]\:pr-0:has([role=checkbox]){padding-right:0}.\[\&\>div\>div\>svg\]\:hover\:border-transparent:hover>div>div>svg{border-color:transparent}.\[\&\>div\>div\]\:hover\:bg-primary:hover>div>div{--tw-bg-opacity:1;background-color:rgb(87 36 232/var(--tw-bg-opacity,1))}.\[\&\>div\>div\]\:hover\:text-white:hover>div>div{--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity,1))}@media (min-width:40rem){.sm\:\[\&\>div\>div\]\:hover\:opacity-45:hover>div>div{opacity:.45}}.\[\&\>span\]\:line-clamp-1>span{overflow:hidden;display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:1}.\[\&\>tr\]\:last\:border-b-0:last-child>tr{border-bottom-width:0}.\[\&\[data-state\=open\]\>svg\]\:rotate-45[data-state=open]>svg{--tw-rotate:45deg;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))}.\[\&\[data-state\=open\]\]\:border-b[data-state=open]{border-bottom-width:1px}.\[\&_tr\:last-child\]\:border-0 tr:last-child{border-width:0}.\[\&_tr\]\:border-b tr{border-bottom-width:1px}
1
+ *,: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(59,130,246,.5);--tw-ring-offset-shadow:0 0 #0000;--tw-ring-shadow:0 0 #0000;--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }::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(59,130,246,.5);--tw-ring-offset-shadow:0 0 #0000;--tw-ring-shadow:0 0 #0000;--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }/*! tailwindcss v3.4.17 | MIT License | https://tailwindcss.com*/*,:after,:before{box-sizing:border-box;border:0 solid #e5e7eb}:after,:before{--tw-content:""}:host,html{line-height:1.5;-webkit-text-size-adjust:100%;-moz-tab-size:4;-o-tab-size:4;tab-size:4;font-family:ui-sans-serif,system-ui,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol,Noto Color Emoji;font-feature-settings:normal;font-variation-settings:normal;-webkit-tap-highlight-color:transparent}body{margin:0;line-height:inherit}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,pre,samp{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace;font-feature-settings:normal;font-variation-settings:normal;font-size:1em}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}button,input,optgroup,select,textarea{font-family:inherit;font-feature-settings:inherit;font-variation-settings:inherit;font-size:100%;font-weight:inherit;line-height:inherit;letter-spacing:inherit;color:inherit;margin:0;padding:0}button,select{text-transform:none}button,input:where([type=button]),input:where([type=reset]),input:where([type=submit]){-webkit-appearance:button;background-color:transparent;background-image:none}:-moz-focusring{outline:auto}:-moz-ui-invalid{box-shadow:none}progress{vertical-align:baseline}::-webkit-inner-spin-button,::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}summary{display:list-item}blockquote,dd,dl,figure,h1,h2,h3,h4,h5,h6,hr,p,pre{margin:0}fieldset{margin:0}fieldset,legend{padding:0}menu,ol,ul{list-style:none;margin:0;padding:0}dialog{padding:0}textarea{resize:vertical}input::-moz-placeholder,textarea::-moz-placeholder{opacity:1;color:#9ca3af}input::placeholder,textarea::placeholder{opacity:1;color:#9ca3af}[role=button],button{cursor:pointer}:disabled{cursor:default}audio,canvas,embed,iframe,img,object,svg,video{display:block;vertical-align:middle}img,video{max-width:100%;height:auto}[hidden]:where(:not([hidden=until-found])){display:none}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border-width:0}.pointer-events-none{pointer-events:none}.static{position:static}.fixed{position:fixed}.absolute{position:absolute}.relative{position:relative}.inset-x-0{left:0;right:0}.-bottom-12{bottom:-3rem}.-left-12{left:-3rem}.-right-12{right:-3rem}.-right-4{right:-1rem}.-top-12{top:-3rem}.-top-2{top:-.5rem}.-top-7{top:-1.75rem}.bottom-10{bottom:2.5rem}.bottom-4{bottom:1rem}.left-1\/2{left:50%}.left-12{left:3rem}.right-12{right:3rem}.right-2{right:.5rem}.right-4{right:1rem}.top-1\/2{top:50%}.top-4{top:1rem}.z-10{z-index:10}.z-50{z-index:50}.z-\[1\]{z-index:1}.z-\[2\]{z-index:2}.-mx-1{margin-left:-.25rem;margin-right:-.25rem}.mx-auto{margin-left:auto;margin-right:auto}.my-1{margin-top:.25rem;margin-bottom:.25rem}.-ml-4{margin-left:-1rem}.-mt-4{margin-top:-1rem}.mt-4{margin-top:1rem}.block{display:block}.inline{display:inline}.flex{display:flex}.inline-flex{display:inline-flex}.table{display:table}.hidden{display:none}.\!size-10{width:2.5rem!important;height:2.5rem!important}.size-0{width:0;height:0}.size-14{width:3.5rem;height:3.5rem}.size-16{width:4rem;height:4rem}.size-3{width:.75rem;height:.75rem}.size-3\.5{width:.875rem;height:.875rem}.size-4{width:1rem;height:1rem}.size-5{width:1.25rem;height:1.25rem}.size-6{width:1.5rem;height:1.5rem}.size-\[32px\]{width:32px;height:32px}.size-full{width:100%;height:100%}.\!h-\[46px\]{height:46px!important}.h-10{height:2.5rem}.h-12{height:3rem}.h-2{height:.5rem}.h-5{height:1.25rem}.h-6{height:1.5rem}.h-8{height:2rem}.h-9{height:2.25rem}.h-\[38px\]{height:38px}.h-\[46px\]{height:46px}.h-\[650px\]{height:650px}.h-\[810px\]{height:810px}.h-\[var\(--radix-select-trigger-height\)\]{height:var(--radix-select-trigger-height)}.h-full{height:100%}.h-px{height:1px}.max-h-96{max-height:24rem}.max-h-\[90vh\]{max-height:90vh}.min-h-0{min-height:0}.min-h-10{min-height:2.5rem}.min-h-16{min-height:4rem}.min-h-\[60px\]{min-height:60px}.min-h-\[96px\]{min-height:96px}.w-10{width:2.5rem}.w-11{width:2.75rem}.w-5{width:1.25rem}.w-96{width:24rem}.w-\[32px\]{width:32px}.w-\[350px\]{width:350px}.w-\[450px\]{width:450px}.w-fit{width:-moz-fit-content;width:fit-content}.w-full{width:100%}.min-w-0{min-width:0}.min-w-10{min-width:2.5rem}.min-w-\[100px\]{min-width:100px}.min-w-\[8rem\]{min-width:8rem}.min-w-\[var\(--radix-select-trigger-width\)\]{min-width:var(--radix-select-trigger-width)}.max-w-105{max-width:424px}.max-w-95vw{max-width:95vw}.max-w-96{max-width:24rem}.max-w-\[75vw\]{max-width:75vw}.max-w-full{max-width:100%}.flex-1{flex:1 1 0%}.shrink-0{flex-shrink:0}.grow{flex-grow:1}.caption-bottom{caption-side:bottom}.-translate-x-1\/2{--tw-translate-x:-50%}.-translate-x-1\/2,.-translate-y-1\/2{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-1\/2{--tw-translate-y:-50%}.translate-x-1\/2{--tw-translate-x:50%}.rotate-90,.translate-x-1\/2{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-90{--tw-rotate:90deg}.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 expand{0%{transform:scale(0);opacity:.5}to{transform:scale(2);opacity:.1;display:none}}.animate-circle{animation:expand .3s ease-out forwards}.cursor-default{cursor:default}.cursor-pointer{cursor:pointer}.touch-none{touch-action:none}.select-none{-webkit-user-select:none;-moz-user-select:none;user-select:none}.resize-none{resize:none}.flex-row{flex-direction:row}.flex-row-reverse{flex-direction:row-reverse}.flex-col{flex-direction:column}.flex-col-reverse{flex-direction:column-reverse}.items-start{align-items:flex-start}.items-end{align-items:flex-end}.items-center{align-items:center}.justify-center{justify-content:center}.justify-between{justify-content:space-between}.gap-0{gap:0}.gap-1{gap:.25rem}.gap-1\.5{gap:.375rem}.gap-10{gap:2.5rem}.gap-2{gap:.5rem}.gap-2\.5{gap:.625rem}.gap-3{gap:.75rem}.gap-4{gap:1rem}.gap-5{gap:1.25rem}.gap-6{gap:1.5rem}.gap-8{gap:2rem}.overflow-auto{overflow:auto}.overflow-hidden{overflow:hidden}.text-ellipsis{text-overflow:ellipsis}.whitespace-nowrap{white-space:nowrap}.whitespace-pre-wrap{white-space:pre-wrap}.whitespace-break-spaces{white-space:break-spaces}.text-nowrap{text-wrap:nowrap}.break-words{overflow-wrap:break-word}.break-all{word-break:break-all}.\!rounded-none{border-radius:0!important}.rounded{border-radius:.25rem}.rounded-\[4px\]{border-radius:4px}.rounded-full{border-radius:9999px}.rounded-lg{border-radius:.5rem}.rounded-md{border-radius:.375rem}.rounded-sm{border-radius:.125rem}.rounded-xl{border-radius:.75rem}.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-none{border-style:none}.border-muted{--tw-border-opacity:1;border-color:rgb(153 153 153/var(--tw-border-opacity,1))}.border-mutedborder{--tw-border-opacity:1;border-color:rgb(120 132 165/var(--tw-border-opacity,1))}.border-primary{--tw-border-opacity:1;border-color:rgb(87 36 232/var(--tw-border-opacity,1))}.border-primaryBorder{border-color:#5724e83d}.border-red-500{--tw-border-opacity:1;border-color:rgb(239 68 68/var(--tw-border-opacity,1))}.border-secondaryBorder{--tw-border-opacity:1;border-color:rgb(220 211 247/var(--tw-border-opacity,1))}.border-transparent{border-color:transparent}.border-white{--tw-border-opacity:1;border-color:rgb(255 255 255/var(--tw-border-opacity,1))}.border-white\/30{border-color:hsla(0,0%,100%,.3)}.border-opacity-15{--tw-border-opacity:0.15}.border-opacity-25{--tw-border-opacity:0.25}.bg-black{--tw-bg-opacity:1;background-color:rgb(0 0 0/var(--tw-bg-opacity,1))}.bg-gray-100{--tw-bg-opacity:1;background-color:rgb(243 244 246/var(--tw-bg-opacity,1))}.bg-gray-300{--tw-bg-opacity:1;background-color:rgb(209 213 219/var(--tw-bg-opacity,1))}.bg-muted{--tw-bg-opacity:1;background-color:rgb(153 153 153/var(--tw-bg-opacity,1))}.bg-muted\/50{background-color:hsla(0,0%,60%,.5)}.bg-primary{--tw-bg-opacity:1;background-color:rgb(87 36 232/var(--tw-bg-opacity,1))}.bg-secondary{--tw-bg-opacity:1;background-color:rgb(242 239 249/var(--tw-bg-opacity,1))}.bg-transparent{background-color:transparent}.bg-white{--tw-bg-opacity:1;background-color:rgb(255 255 255/var(--tw-bg-opacity,1))}.bg-white\/10{background-color:hsla(0,0%,100%,.1)}.bg-cover{background-size:cover}.bg-center{background-position:50%}.bg-no-repeat{background-repeat:no-repeat}.fill-black{fill:#000}.fill-current{fill:currentColor}.stroke-black{stroke:#000}.stroke-white{stroke:#fff}.object-cover{-o-object-fit:cover;object-fit:cover}.\!p-2{padding:.5rem!important}.p-0{padding:0}.p-1{padding:.25rem}.p-2{padding:.5rem}.p-3{padding:.75rem}.p-3\.5{padding:.875rem}.p-4{padding:1rem}.px-2{padding-left:.5rem;padding-right:.5rem}.px-2\.5{padding-left:.625rem;padding-right:.625rem}.px-3{padding-left:.75rem;padding-right:.75rem}.px-3\.5{padding-left:.875rem;padding-right:.875rem}.px-4{padding-left:1rem;padding-right:1rem}.px-7{padding-left:1.75rem;padding-right:1.75rem}.py-0{padding-top:0;padding-bottom:0}.py-0\.5{padding-top:.125rem;padding-bottom:.125rem}.py-1{padding-top:.25rem;padding-bottom:.25rem}.py-1\.5{padding-top:.375rem;padding-bottom:.375rem}.py-2{padding-top:.5rem;padding-bottom:.5rem}.py-2\.5{padding-top:.625rem;padding-bottom:.625rem}.py-3{padding-top:.75rem;padding-bottom:.75rem}.py-3\.5{padding-top:.875rem;padding-bottom:.875rem}.py-4{padding-top:1rem;padding-bottom:1rem}.pb-1{padding-bottom:.25rem}.pb-1\.5{padding-bottom:.375rem}.pb-4{padding-bottom:1rem}.pl-2{padding-left:.5rem}.pl-6{padding-left:1.5rem}.pr-12{padding-right:3rem}.pr-8{padding-right:2rem}.pt-0{padding-top:0}.pt-1{padding-top:.25rem}.pt-1\.5{padding-top:.375rem}.pt-2{padding-top:.5rem}.\!text-left{text-align:left!important}.text-left{text-align:left}.\!text-center{text-align:center!important}.text-center{text-align:center}.text-right{text-align:right}.align-middle{vertical-align:middle}.text-2xl{font-size:1.5rem;line-height:2rem}.text-base{font-size:1rem;line-height:1.5rem}.text-captions-mobile{font-size:.875rem;letter-spacing:-.02em}.text-h1-mobile{font-size:2.75rem;letter-spacing:-.02em}.text-h2-mobile{font-size:2.5rem;letter-spacing:-.02em}.text-h3-mobile{font-size:2rem;letter-spacing:-.02em}.text-h4{font-size:2.5rem;letter-spacing:-.02em}.text-h4-mobile{font-size:1.75rem;letter-spacing:-.02em}.text-h5-mobile{font-size:1.5rem;letter-spacing:-.02em}.text-large-mobile,.text-medium-mobile{font-size:1rem;letter-spacing:-.02em}.text-sm{font-size:.875rem;line-height:1.25rem}.text-xs{font-size:.75rem;line-height:1rem}.text-xxs{font-size:.625rem}.font-bold{font-weight:700}.font-medium{font-weight:500}.font-normal{font-weight:400}.font-semibold{font-weight:600}.uppercase{text-transform:uppercase}.capitalize{text-transform:capitalize}.italic{font-style:italic}.leading-110{line-height:110%}.leading-164{line-height:164%}.leading-8{line-height:2rem}.leading-none{line-height:1}.leading-normal{line-height:1.5}.text-black{--tw-text-opacity:1;color:rgb(0 0 0/var(--tw-text-opacity,1))}.text-current{color:currentColor}.text-gray-700{--tw-text-opacity:1;color:rgb(55 65 81/var(--tw-text-opacity,1))}.text-muted{--tw-text-opacity:1;color:rgb(153 153 153/var(--tw-text-opacity,1))}.text-primary{--tw-text-opacity:1;color:rgb(87 36 232/var(--tw-text-opacity,1))}.text-red-500{--tw-text-opacity:1;color:rgb(239 68 68/var(--tw-text-opacity,1))}.text-semimuted{--tw-text-opacity:1;color:rgb(102 102 102/var(--tw-text-opacity,1))}.text-white{--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity,1))}.text-opacity-40{--tw-text-opacity:0.4}.underline{text-decoration-line:underline}.opacity-50{opacity:.5}.opacity-90{opacity:.9}.shadow-lg{--tw-shadow:0 10px 15px -3px rgba(0,0,0,.1),0 4px 6px -4px rgba(0,0,0,.1);--tw-shadow-colored:0 10px 15px -3px var(--tw-shadow-color),0 4px 6px -4px var(--tw-shadow-color)}.shadow-lg,.shadow-md{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 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-sm{--tw-shadow:0 1px 2px 0 rgba(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}.outline{outline-style:solid}.ring-0{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000)}.filter{filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.backdrop-blur-sm{--tw-backdrop-blur:blur(4px);-webkit-backdrop-filter:var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);backdrop-filter:var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia)}.transition{transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,-webkit-backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter,-webkit-backdrop-filter;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-all{transition-property:all;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-colors{transition-property:color,background-color,border-color,text-decoration-color,fill,stroke;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-none{transition-property:none}.transition-shadow{transition-property:box-shadow;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-transform{transition-property:transform;transition-timing-function:cubic-bezier(.4,0,.2,1)}.duration-150,.transition-transform{transition-duration:.15s}.duration-300{transition-duration:.3s}.ease-in{transition-timing-function:cubic-bezier(.4,0,1,1)}.ease-in-out{transition-timing-function:cubic-bezier(.4,0,.2,1)}.placeholder\:text-muted::-moz-placeholder{--tw-text-opacity:1;color:rgb(153 153 153/var(--tw-text-opacity,1))}.placeholder\:text-muted::placeholder{--tw-text-opacity:1;color:rgb(153 153 153/var(--tw-text-opacity,1))}.hover\:scale-110:hover{--tw-scale-x:1.1;--tw-scale-y:1.1;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))}.hover\:bg-muted\/50:hover{background-color:hsla(0,0%,60%,.5)}.hover\:bg-primary\/80:hover{background-color:rgba(87,36,232,.8)}.hover\:bg-secondary:hover{--tw-bg-opacity:1;background-color:rgb(242 239 249/var(--tw-bg-opacity,1))}.hover\:bg-secondary\/80:hover{background-color:rgba(242,239,249,.8)}.hover\:bg-gradient-to-l:hover{background-image:linear-gradient(to left,var(--tw-gradient-stops))}.hover\:from-white\/8:hover{--tw-gradient-from:hsla(0,0%,100%,.08) var(--tw-gradient-from-position);--tw-gradient-to:hsla(0,0%,100%,0) var(--tw-gradient-to-position);--tw-gradient-stops:var(--tw-gradient-from),var(--tw-gradient-to)}.hover\:to-white\/8:hover{--tw-gradient-to:hsla(0,0%,100%,.08) var(--tw-gradient-to-position)}.hover\:stroke-primary:hover{stroke:#5724e8}.hover\:text-primary:hover{--tw-text-opacity:1;color:rgb(87 36 232/var(--tw-text-opacity,1))}.hover\:text-opacity-60:hover{--tw-text-opacity:0.6}.hover\:shadow-lg:hover{--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);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.focus\:outline-none:focus{outline:2px solid transparent;outline-offset:2px}.focus\:ring-1:focus{--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)}.focus\:ring-1:focus,.focus\:ring-2:focus{box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000)}.focus\:ring-2:focus{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color)}.focus\:ring-offset-2:focus{--tw-ring-offset-width:2px}.focus-visible\:outline-none:focus-visible{outline:2px solid transparent;outline-offset:2px}.focus-visible\:ring-1:focus-visible{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(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)}.focus-visible\:ring-2:focus-visible{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000)}.focus-visible\:ring-\[3px\]:focus-visible{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(3px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000)}.focus-visible\:ring-offset-2:focus-visible{--tw-ring-offset-width:2px}.disabled\:pointer-events-none:disabled{pointer-events:none}.disabled\:cursor-not-allowed:disabled{cursor:not-allowed}.disabled\:bg-\[\#D0D0D0\]:disabled{--tw-bg-opacity:1;background-color:rgb(208 208 208/var(--tw-bg-opacity,1))}.disabled\:opacity-50:disabled{opacity:.5}.peer:disabled~.peer-disabled\:cursor-not-allowed{cursor:not-allowed}.peer:disabled~.peer-disabled\:opacity-70{opacity:.7}.aria-selected\:text-black[aria-selected=true]{--tw-text-opacity:1;color:rgb(0 0 0/var(--tw-text-opacity,1))}.aria-selected\:opacity-100[aria-selected=true]{opacity:1}.data-\[disabled\]\:pointer-events-none[data-disabled]{pointer-events:none}.data-\[side\=bottom\]\:translate-y-1[data-side=bottom]{--tw-translate-y:0.25rem}.data-\[side\=bottom\]\:translate-y-1[data-side=bottom],.data-\[side\=left\]\:-translate-x-1[data-side=left]{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))}.data-\[side\=left\]\:-translate-x-1[data-side=left]{--tw-translate-x:-0.25rem}.data-\[side\=right\]\:translate-x-1[data-side=right]{--tw-translate-x:0.25rem}.data-\[side\=right\]\:translate-x-1[data-side=right],.data-\[side\=top\]\:-translate-y-1[data-side=top]{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))}.data-\[side\=top\]\:-translate-y-1[data-side=top]{--tw-translate-y:-0.25rem}.data-\[state\=checked\]\:translate-x-5[data-state=checked]{--tw-translate-x:1.25rem}.data-\[state\=checked\]\:translate-x-5[data-state=checked],.data-\[state\=unchecked\]\:translate-x-0[data-state=unchecked]{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))}.data-\[state\=unchecked\]\:translate-x-0[data-state=unchecked]{--tw-translate-x:0px}@keyframes accordion-up{0%{height:var(--radix-accordion-content-height)}to{height:0}}.data-\[state\=closed\]\:animate-accordion-up[data-state=closed]{animation:accordion-up .2s ease-out}@keyframes accordion-down{0%{height:0}to{height:var(--radix-accordion-content-height)}}.data-\[state\=open\]\:animate-accordion-down[data-state=open]{animation:accordion-down .2s ease-out}.data-\[state\=checked\]\:border-primary[data-state=checked]{--tw-border-opacity:1;border-color:rgb(87 36 232/var(--tw-border-opacity,1))}.data-\[state\=checked\]\:bg-primary[data-state=checked]{--tw-bg-opacity:1;background-color:rgb(87 36 232/var(--tw-bg-opacity,1))}.data-\[state\=selected\]\:bg-muted[data-state=selected]{--tw-bg-opacity:1;background-color:rgb(153 153 153/var(--tw-bg-opacity,1))}.data-\[disabled\]\:opacity-50[data-disabled]{opacity:.5}@media (min-width:40rem){.sm\:bottom-6{bottom:1.5rem}.sm\:right-6{right:1.5rem}.sm\:h-\[914px\]{height:914px}.sm\:flex-row{flex-direction:row}.sm\:items-center{align-items:center}.sm\:gap-2{gap:.5rem}.sm\:gap-6{gap:1.5rem}.sm\:p-5{padding:1.25rem}.sm\:\!text-center{text-align:center!important}.sm\:text-2xl{font-size:1.5rem;line-height:2rem}.sm\:text-captions{font-size:.875rem;letter-spacing:-.02em}.sm\:text-h1{font-size:5rem}.sm\:text-h1,.sm\:text-h2{letter-spacing:-.02em}.sm\:text-h2{font-size:4.5rem}.sm\:text-h3{font-size:3rem}.sm\:text-h3,.sm\:text-h4{letter-spacing:-.02em}.sm\:text-h4{font-size:2.5rem}.sm\:text-h5{font-size:2rem;letter-spacing:-.02em}.sm\:text-large{font-size:1.125rem;letter-spacing:-.02em}.sm\:text-medium{font-size:1rem;letter-spacing:-.02em}.sm\:text-sm{font-size:.875rem;line-height:1.25rem}.sm\:text-xl{font-size:1.25rem;line-height:1.75rem}}@media (min-width:48rem){.md\:flex-row{flex-direction:row}.md\:items-end{align-items:flex-end}.md\:justify-start{justify-content:flex-start}.md\:gap-6{gap:1.5rem}.md\:text-sm{font-size:.875rem;line-height:1.25rem}.md\:text-xs{font-size:.75rem;line-height:1rem}}@media (min-width:64rem){.lg\:max-w-\[350px\]{max-width:350px}.lg\:max-w-\[525px\]{max-width:525px}.lg\:items-start{align-items:flex-start}.lg\:\!text-left{text-align:left!important}}@media (min-width:80rem){.xl\:w-auto{width:auto}.xl\:text-h1{font-size:5rem;letter-spacing:-.02em}}@media (prefers-color-scheme:dark){.dark\:data-\[state\=checked\]\:bg-primary[data-state=checked]{--tw-bg-opacity:1;background-color:rgb(87 36 232/var(--tw-bg-opacity,1))}}.\[\&\:has\(\[role\=checkbox\]\)\]\:pr-0:has([role=checkbox]){padding-right:0}.\[\&\>div\>div\>svg\]\:hover\:border-transparent:hover>div>div>svg{border-color:transparent}.\[\&\>div\>div\]\:hover\:bg-primary:hover>div>div{--tw-bg-opacity:1;background-color:rgb(87 36 232/var(--tw-bg-opacity,1))}.\[\&\>div\>div\]\:hover\:text-white:hover>div>div{--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity,1))}@media (min-width:40rem){.sm\:\[\&\>div\>div\]\:hover\:opacity-45:hover>div>div{opacity:.45}}.\[\&\>span\]\:line-clamp-1>span{overflow:hidden;display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:1}.\[\&\>tr\]\:last\:border-b-0:last-child>tr{border-bottom-width:0}.\[\&\[data-state\=open\]\>svg\]\:rotate-45[data-state=open]>svg{--tw-rotate:45deg;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))}.\[\&\[data-state\=open\]\]\:border-b[data-state=open]{border-bottom-width:1px}.\[\&_tr\:last-child\]\:border-0 tr:last-child{border-width:0}.\[\&_tr\]\:border-b tr{border-bottom-width:1px}
package/dist/index.d.mts CHANGED
@@ -1,5 +1,5 @@
1
1
  import * as React$1 from 'react';
2
- import React__default, { JSX } from 'react';
2
+ import React__default, { JSX, Dispatch } from 'react';
3
3
  import * as AccordionPrimitive from '@radix-ui/react-accordion';
4
4
  import * as react_jsx_runtime from 'react/jsx-runtime';
5
5
  import * as class_variance_authority_dist_types from 'class-variance-authority/dist/types';
@@ -9,6 +9,7 @@ import * as HoverCardPrimitive from '@radix-ui/react-hover-card';
9
9
  import * as LabelPrimitive from '@radix-ui/react-label';
10
10
  import * as SelectPrimitive from '@radix-ui/react-select';
11
11
  import * as SwitchPrimitives from '@radix-ui/react-switch';
12
+ import * as CheckboxPrimitive from '@radix-ui/react-checkbox';
12
13
  import * as SliderPrimitive from '@radix-ui/react-slider';
13
14
 
14
15
  interface AccordionItemProps extends React$1.ComponentPropsWithoutRef<typeof AccordionPrimitive.Item> {
@@ -220,10 +221,20 @@ declare const Video: React__default.ForwardRefExoticComponent<VideoComponentProp
220
221
  togglePlay: () => void;
221
222
  }>>;
222
223
 
224
+ declare function Checkbox({ className, ...props }: React$1.ComponentProps<typeof CheckboxPrimitive.Root>): react_jsx_runtime.JSX.Element;
225
+
223
226
  interface DualRangeSliderProps extends React$1.ComponentProps<typeof SliderPrimitive.Root> {
224
227
  labelPosition?: 'top' | 'bottom';
225
228
  label?: (value: number | undefined) => React$1.ReactNode;
226
229
  }
227
230
  declare const DualRangeSlider: React$1.ForwardRefExoticComponent<Omit<DualRangeSliderProps, "ref"> & React$1.RefAttributes<HTMLSpanElement>>;
228
231
 
229
- export { Accordion, AccordionContent, AccordionItem, AccordionTrigger, Badge, type BadgeProps, Button, Card, Carousel, type CarouselApi, CarouselContent, CarouselItem, CarouselNext, CarouselPrevious, CodeBlock, Copyright, Description, type DescriptionType, DualRangeSlider, FrostedCard, Hero, HoverCard, HoverCardContent, HoverCardTrigger, Input, Label, SearchBar, Select, SelectContent, SelectGroup, SelectItem, SelectLabel, SelectScrollDownButton, SelectScrollUpButton, SelectSeparator, SelectTrigger, SelectValue, type StyledDescriptionProps, Switch, Table, TableBody, TableCaption, TableCell, TableFooter, TableHead, TableHeader, TableRow, Text, Textarea, Video, badgeVariants, buttonVariants, parseNewLines };
232
+ type ChatButtonProps = {
233
+ chatOpened: boolean;
234
+ setChatOpened: Dispatch<React.SetStateAction<boolean>>;
235
+ messageFromSearch: string;
236
+ setMessageFromSearch: Dispatch<React.SetStateAction<string>>;
237
+ };
238
+ declare function ChatButton(props: ChatButtonProps): React.ReactElement;
239
+
240
+ export { Accordion, AccordionContent, AccordionItem, AccordionTrigger, Badge, type BadgeProps, Button, Card, Carousel, type CarouselApi, CarouselContent, CarouselItem, CarouselNext, CarouselPrevious, ChatButton, Checkbox, CodeBlock, Copyright, Description, type DescriptionType, DualRangeSlider, FrostedCard, Hero, HoverCard, HoverCardContent, HoverCardTrigger, Input, Label, SearchBar, Select, SelectContent, SelectGroup, SelectItem, SelectLabel, SelectScrollDownButton, SelectScrollUpButton, SelectSeparator, SelectTrigger, SelectValue, type StyledDescriptionProps, Switch, Table, TableBody, TableCaption, TableCell, TableFooter, TableHead, TableHeader, TableRow, Text, Textarea, Video, badgeVariants, buttonVariants, parseNewLines };
package/dist/index.d.ts CHANGED
@@ -1,5 +1,5 @@
1
1
  import * as React$1 from 'react';
2
- import React__default, { JSX } from 'react';
2
+ import React__default, { JSX, Dispatch } from 'react';
3
3
  import * as AccordionPrimitive from '@radix-ui/react-accordion';
4
4
  import * as react_jsx_runtime from 'react/jsx-runtime';
5
5
  import * as class_variance_authority_dist_types from 'class-variance-authority/dist/types';
@@ -9,6 +9,7 @@ import * as HoverCardPrimitive from '@radix-ui/react-hover-card';
9
9
  import * as LabelPrimitive from '@radix-ui/react-label';
10
10
  import * as SelectPrimitive from '@radix-ui/react-select';
11
11
  import * as SwitchPrimitives from '@radix-ui/react-switch';
12
+ import * as CheckboxPrimitive from '@radix-ui/react-checkbox';
12
13
  import * as SliderPrimitive from '@radix-ui/react-slider';
13
14
 
14
15
  interface AccordionItemProps extends React$1.ComponentPropsWithoutRef<typeof AccordionPrimitive.Item> {
@@ -220,10 +221,20 @@ declare const Video: React__default.ForwardRefExoticComponent<VideoComponentProp
220
221
  togglePlay: () => void;
221
222
  }>>;
222
223
 
224
+ declare function Checkbox({ className, ...props }: React$1.ComponentProps<typeof CheckboxPrimitive.Root>): react_jsx_runtime.JSX.Element;
225
+
223
226
  interface DualRangeSliderProps extends React$1.ComponentProps<typeof SliderPrimitive.Root> {
224
227
  labelPosition?: 'top' | 'bottom';
225
228
  label?: (value: number | undefined) => React$1.ReactNode;
226
229
  }
227
230
  declare const DualRangeSlider: React$1.ForwardRefExoticComponent<Omit<DualRangeSliderProps, "ref"> & React$1.RefAttributes<HTMLSpanElement>>;
228
231
 
229
- export { Accordion, AccordionContent, AccordionItem, AccordionTrigger, Badge, type BadgeProps, Button, Card, Carousel, type CarouselApi, CarouselContent, CarouselItem, CarouselNext, CarouselPrevious, CodeBlock, Copyright, Description, type DescriptionType, DualRangeSlider, FrostedCard, Hero, HoverCard, HoverCardContent, HoverCardTrigger, Input, Label, SearchBar, Select, SelectContent, SelectGroup, SelectItem, SelectLabel, SelectScrollDownButton, SelectScrollUpButton, SelectSeparator, SelectTrigger, SelectValue, type StyledDescriptionProps, Switch, Table, TableBody, TableCaption, TableCell, TableFooter, TableHead, TableHeader, TableRow, Text, Textarea, Video, badgeVariants, buttonVariants, parseNewLines };
232
+ type ChatButtonProps = {
233
+ chatOpened: boolean;
234
+ setChatOpened: Dispatch<React.SetStateAction<boolean>>;
235
+ messageFromSearch: string;
236
+ setMessageFromSearch: Dispatch<React.SetStateAction<string>>;
237
+ };
238
+ declare function ChatButton(props: ChatButtonProps): React.ReactElement;
239
+
240
+ export { Accordion, AccordionContent, AccordionItem, AccordionTrigger, Badge, type BadgeProps, Button, Card, Carousel, type CarouselApi, CarouselContent, CarouselItem, CarouselNext, CarouselPrevious, ChatButton, Checkbox, CodeBlock, Copyright, Description, type DescriptionType, DualRangeSlider, FrostedCard, Hero, HoverCard, HoverCardContent, HoverCardTrigger, Input, Label, SearchBar, Select, SelectContent, SelectGroup, SelectItem, SelectLabel, SelectScrollDownButton, SelectScrollUpButton, SelectSeparator, SelectTrigger, SelectValue, type StyledDescriptionProps, Switch, Table, TableBody, TableCaption, TableCell, TableFooter, TableHead, TableHeader, TableRow, Text, Textarea, Video, badgeVariants, buttonVariants, parseNewLines };
package/dist/index.js CHANGED
@@ -42,6 +42,8 @@ __export(index_exports, {
42
42
  CarouselItem: () => CarouselItem,
43
43
  CarouselNext: () => CarouselNext,
44
44
  CarouselPrevious: () => CarouselPrevious,
45
+ ChatButton: () => ChatButton,
46
+ Checkbox: () => Checkbox,
45
47
  CodeBlock: () => CodeBlock,
46
48
  Copyright: () => Copyright,
47
49
  Description: () => Description,
@@ -1176,26 +1178,53 @@ var Video = (0, import_react10.forwardRef)(({ src, className }, ref) => {
1176
1178
  });
1177
1179
  Video.displayName = "Video";
1178
1180
 
1181
+ // src/Checkbox.tsx
1182
+ var CheckboxPrimitive = __toESM(require("@radix-ui/react-checkbox"));
1183
+ var import_class_variance_authority18 = require("class-variance-authority");
1184
+ var import_react11 = require("@iconify/react");
1185
+ var import_jsx_runtime21 = require("react/jsx-runtime");
1186
+ function Checkbox({ className, ...props }) {
1187
+ return /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(
1188
+ CheckboxPrimitive.Root,
1189
+ {
1190
+ "data-slot": "checkbox",
1191
+ className: (0, import_class_variance_authority18.cx)(
1192
+ "peer border-input dark:bg-input/30 data-[state=checked]:bg-primary data-[state=checked]:text-primary-foreground dark:data-[state=checked]:bg-primary data-[state=checked]:border-primary focus-visible:border-ring focus-visible:ring-ring/50 aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive size-4 shrink-0 rounded-[4px] border shadow-xs transition-shadow outline-none focus-visible:ring-[3px] disabled:cursor-not-allowed disabled:opacity-50",
1193
+ className
1194
+ ),
1195
+ ...props,
1196
+ children: /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(
1197
+ CheckboxPrimitive.Indicator,
1198
+ {
1199
+ "data-slot": "checkbox-indicator",
1200
+ className: "flex items-center justify-center text-current transition-none",
1201
+ children: /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(import_react11.Icon, { className: "size-3.5 text-white", icon: "lucide:check" })
1202
+ }
1203
+ )
1204
+ }
1205
+ );
1206
+ }
1207
+
1179
1208
  // src/DualRangeSlider.tsx
1180
1209
  var React14 = __toESM(require("react"));
1181
1210
  var SliderPrimitive = __toESM(require("@radix-ui/react-slider"));
1182
- var import_class_variance_authority18 = require("class-variance-authority");
1183
- var import_jsx_runtime21 = require("react/jsx-runtime");
1211
+ var import_class_variance_authority19 = require("class-variance-authority");
1212
+ var import_jsx_runtime22 = require("react/jsx-runtime");
1184
1213
  var DualRangeSlider = React14.forwardRef(
1185
1214
  ({ className, label, labelPosition = "top", ...props }, ref) => {
1186
1215
  const initialValue = Array.isArray(props.value) ? props.value : [props.min, props.max];
1187
- return /* @__PURE__ */ (0, import_jsx_runtime21.jsxs)(
1216
+ return /* @__PURE__ */ (0, import_jsx_runtime22.jsxs)(
1188
1217
  SliderPrimitive.Root,
1189
1218
  {
1190
1219
  ref,
1191
- className: (0, import_class_variance_authority18.cx)("relative flex w-full touch-none select-none items-center", className),
1220
+ className: (0, import_class_variance_authority19.cx)("relative flex w-full touch-none select-none items-center", className),
1192
1221
  ...props,
1193
1222
  children: [
1194
- /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(SliderPrimitive.Track, { className: "relative h-2 w-full grow overflow-hidden rounded-full bg-secondary", children: /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(SliderPrimitive.Range, { className: "absolute h-full bg-primary" }) }),
1195
- initialValue.map((value, index) => /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(React14.Fragment, { children: /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(SliderPrimitive.Thumb, { className: "ring-offset-background focus-visible:ring-ring relative block size-4 rounded-full border-2 border-primary bg-primary transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50", children: label && /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(
1223
+ /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(SliderPrimitive.Track, { className: "relative h-2 w-full grow overflow-hidden rounded-full bg-secondary", children: /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(SliderPrimitive.Range, { className: "absolute h-full bg-primary" }) }),
1224
+ initialValue.map((value, index) => /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(React14.Fragment, { children: /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(SliderPrimitive.Thumb, { className: "ring-offset-background focus-visible:ring-ring relative block size-4 rounded-full border-2 border-primary bg-primary transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50", children: label && /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(
1196
1225
  "span",
1197
1226
  {
1198
- className: (0, import_class_variance_authority18.cx)(
1227
+ className: (0, import_class_variance_authority19.cx)(
1199
1228
  "absolute flex w-full justify-center",
1200
1229
  labelPosition === "top" && "-top-7",
1201
1230
  labelPosition === "bottom" && "top-4"
@@ -1209,6 +1238,251 @@ var DualRangeSlider = React14.forwardRef(
1209
1238
  }
1210
1239
  );
1211
1240
  DualRangeSlider.displayName = "DualRangeSlider";
1241
+
1242
+ // src/LuxonisChat.tsx
1243
+ var import_react12 = require("react");
1244
+ var import_markdown_it = __toESM(require("markdown-it"));
1245
+ var import_react13 = require("@iconify/react");
1246
+ var import_jsx_runtime23 = require("react/jsx-runtime");
1247
+ function ChatButton(props) {
1248
+ const { chatOpened, setChatOpened, messageFromSearch, setMessageFromSearch } = props;
1249
+ const [hold, setHold] = (0, import_react12.useState)(false);
1250
+ const [iconKey, setIconKey] = (0, import_react12.useState)(0);
1251
+ const [loading, setLoading] = (0, import_react12.useState)(false);
1252
+ const [userInput, setUserInput] = (0, import_react12.useState)("");
1253
+ const [messages, setMessages] = (0, import_react12.useState)([
1254
+ {
1255
+ id: -1,
1256
+ user: "bot",
1257
+ message: "Welcome! I'm here to assist you by searching Luxonis documentation and past forum discussions for answers. How can I help you today?",
1258
+ loading: false
1259
+ }
1260
+ ]);
1261
+ const inputRef = (0, import_react12.useRef)(null);
1262
+ const messageListRef = (0, import_react12.useRef)(null);
1263
+ const formRef = (0, import_react12.useRef)(null);
1264
+ const loadingMessages = [
1265
+ "Please wait...",
1266
+ "Hold on...",
1267
+ "One moment...",
1268
+ "Bear with me...",
1269
+ "Just a second...",
1270
+ "Hang tight...",
1271
+ "Give me a moment...",
1272
+ "Stay with me...",
1273
+ "Almost there...",
1274
+ "Please hold on..."
1275
+ ];
1276
+ const fetchData = (0, import_react12.useCallback)(
1277
+ async (message) => {
1278
+ try {
1279
+ const response = await fetch("https://chat.luxonis.com/api/chat", {
1280
+ method: "POST",
1281
+ headers: {
1282
+ "Content-Type": "application/json"
1283
+ },
1284
+ body: JSON.stringify({
1285
+ query: [...messages.slice(1, messages.length), { user: "user", message }].map((m) => {
1286
+ return { role: m.user, content: m.message };
1287
+ }),
1288
+ model: "gpt-4.1"
1289
+ })
1290
+ });
1291
+ if (!response.ok) {
1292
+ throw new Error(`Request failed with status ${response.status}`);
1293
+ }
1294
+ const contentType = response.headers.get("content-type");
1295
+ if (!contentType || !contentType.includes("application/json")) {
1296
+ throw new Error("Response is not in JSON format");
1297
+ }
1298
+ return await response.json();
1299
+ } catch {
1300
+ return null;
1301
+ }
1302
+ },
1303
+ [messages]
1304
+ );
1305
+ const onSubmit = (0, import_react12.useCallback)(
1306
+ async (e) => {
1307
+ e?.preventDefault();
1308
+ if (userInput.trim() !== "") {
1309
+ const id = messages.length - 1;
1310
+ setMessages((prevMessages) => [...prevMessages, { id, user: "user", message: userInput, loading: true }]);
1311
+ setLoading(true);
1312
+ setUserInput("");
1313
+ try {
1314
+ const res = await fetchData(userInput);
1315
+ if (res) {
1316
+ const md = (0, import_markdown_it.default)();
1317
+ const result = md.render(res.content);
1318
+ setMessages((prevMessages) => [
1319
+ ...prevMessages,
1320
+ { id: res.id, user: "bot", message: result, loading: false }
1321
+ ]);
1322
+ } else {
1323
+ setMessages((prevMessages) => [
1324
+ ...prevMessages,
1325
+ { id: id + 1, user: "bot", message: "Something went wrong", loading: false }
1326
+ ]);
1327
+ }
1328
+ } catch (error) {
1329
+ setMessages((prevMessages) => [
1330
+ ...prevMessages,
1331
+ { id: id + 1, user: "bot", message: "Something went wrong", loading: false }
1332
+ ]);
1333
+ }
1334
+ setLoading(false);
1335
+ setMessageFromSearch("");
1336
+ }
1337
+ },
1338
+ [userInput, messages, fetchData, setMessageFromSearch, setLoading]
1339
+ );
1340
+ const handleEnter = (0, import_react12.useCallback)(
1341
+ (e) => {
1342
+ if (e.key === "Enter" && userInput.trim() !== "") {
1343
+ if (!e.shiftKey && userInput.trim() !== "") {
1344
+ e.preventDefault();
1345
+ void onSubmit(void 0);
1346
+ }
1347
+ } else if (e.key === "Enter") {
1348
+ e.preventDefault();
1349
+ }
1350
+ },
1351
+ [userInput, onSubmit]
1352
+ );
1353
+ (0, import_react12.useEffect)(() => {
1354
+ if (messageListRef.current) {
1355
+ const messageList = messageListRef.current;
1356
+ messageList.scrollTop = messageList.scrollHeight;
1357
+ }
1358
+ }, [messages]);
1359
+ (0, import_react12.useEffect)(() => {
1360
+ async function fetchSearchQuery() {
1361
+ setUserInput(`Can you tell me about ${messageFromSearch}`);
1362
+ await onSubmit(void 0);
1363
+ }
1364
+ if (messageFromSearch !== "" && !loading) {
1365
+ void fetchSearchQuery();
1366
+ }
1367
+ }, [messageFromSearch, onSubmit, loading]);
1368
+ return /* @__PURE__ */ (0, import_jsx_runtime23.jsx)("div", { className: "fixed bottom-4 right-4 z-50 sm:bottom-6 sm:right-6", children: /* @__PURE__ */ (0, import_jsx_runtime23.jsxs)(
1369
+ "div",
1370
+ {
1371
+ className: `relative flex max-h-[90vh] max-w-95vw flex-col-reverse items-end gap-5 transition-all duration-300 ${chatOpened ? "h-[650px] min-h-[96px] w-[450px] min-w-[100px]" : "size-0 min-h-0 min-w-0"}`,
1372
+ children: [
1373
+ /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(
1374
+ "button",
1375
+ {
1376
+ onClick: () => {
1377
+ setChatOpened(!chatOpened);
1378
+ setIconKey(iconKey + 1);
1379
+ },
1380
+ onMouseDown: () => setHold(true),
1381
+ onMouseUp: () => setHold(false),
1382
+ style: {
1383
+ transform: `scale(${hold ? 0.9 : 1})`,
1384
+ transition: "transform 0.15s ease-in-out"
1385
+ },
1386
+ className: "size-16 min-h-16 rounded-full bg-primary transition duration-150 ease-in-out hover:scale-110 hover:shadow-lg",
1387
+ children: /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(
1388
+ "div",
1389
+ {
1390
+ style: {
1391
+ animationName: iconKey > 0 ? "rotateInAnimation" : "none",
1392
+ animationDuration: "150ms",
1393
+ animationTimingFunction: "ease-in"
1394
+ },
1395
+ className: "flex items-center justify-center",
1396
+ children: chatOpened ? /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(import_react13.Icon, { icon: "mdi:close", className: "size-[32px] text-white" }) : /* @__PURE__ */ (0, import_jsx_runtime23.jsx)("img", { src: "https://docs.luxonis.com/static/images/icons/chat-icon.svg", width: "32", height: "32", alt: "Chat" })
1397
+ },
1398
+ iconKey
1399
+ )
1400
+ }
1401
+ ),
1402
+ chatOpened && /* @__PURE__ */ (0, import_jsx_runtime23.jsxs)("div", { className: "flex size-full flex-col gap-3 overflow-hidden rounded-md bg-white p-3 shadow-lg sm:p-5", children: [
1403
+ /* @__PURE__ */ (0, import_jsx_runtime23.jsx)("div", { className: "flex h-8 gap-2", children: /* @__PURE__ */ (0, import_jsx_runtime23.jsxs)("h2", { className: "relative text-2xl", children: [
1404
+ /* @__PURE__ */ (0, import_jsx_runtime23.jsx)("a", { target: "_blank", rel: "noopener noreferrer", href: "https://chat.luxonis.com", children: "Chat with Luxonis AI" }),
1405
+ /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(import_react13.Icon, { icon: "mingcute:ai-fill", className: "absolute -right-4 -top-2 size-5 text-primary" })
1406
+ ] }) }),
1407
+ /* @__PURE__ */ (0, import_jsx_runtime23.jsxs)(
1408
+ "div",
1409
+ {
1410
+ ref: messageListRef,
1411
+ className: " flex size-full max-w-full flex-col gap-4 overflow-auto rounded-md border border-secondaryBorder bg-white",
1412
+ children: [
1413
+ messages.map((message) => /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(ChatMessage, { ...message }, message.id)),
1414
+ loading && /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(
1415
+ ChatMessage,
1416
+ {
1417
+ id: -2,
1418
+ user: "bot",
1419
+ message: loadingMessages[Math.floor(Math.random() * loadingMessages.length)],
1420
+ loading: true
1421
+ }
1422
+ )
1423
+ ]
1424
+ }
1425
+ ),
1426
+ /* @__PURE__ */ (0, import_jsx_runtime23.jsxs)(
1427
+ "form",
1428
+ {
1429
+ ref: formRef,
1430
+ onSubmit: (e) => onSubmit(e),
1431
+ className: "relative flex items-center justify-between rounded-md border border-secondaryBorder p-0",
1432
+ children: [
1433
+ /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(
1434
+ "textarea",
1435
+ {
1436
+ className: " w-full resize-none rounded-md border-none bg-white py-4 pl-6 pr-12 focus:outline-none",
1437
+ onKeyDown: (e) => handleEnter(e),
1438
+ value: userInput,
1439
+ onChange: (e) => setUserInput(e.target.value),
1440
+ disabled: loading,
1441
+ ref: inputRef,
1442
+ autoFocus: true,
1443
+ rows: 1,
1444
+ maxLength: 512,
1445
+ name: "userInput",
1446
+ placeholder: loading ? "Waiting for response..." : "Type your question..."
1447
+ }
1448
+ ),
1449
+ /* @__PURE__ */ (0, import_jsx_runtime23.jsx)("div", { className: "absolute right-2 flex items-center", children: /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(
1450
+ Button,
1451
+ {
1452
+ disabled: loading,
1453
+ type: "submit",
1454
+ name: "sendButton",
1455
+ variant: "primary",
1456
+ className: "!size-10 bg-primary !p-2",
1457
+ children: /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(import_react13.Icon, { icon: "mdi:send", className: "text-white" })
1458
+ }
1459
+ ) })
1460
+ ]
1461
+ }
1462
+ )
1463
+ ] })
1464
+ ]
1465
+ }
1466
+ ) });
1467
+ }
1468
+ var ChatMessage = (props) => {
1469
+ return /* @__PURE__ */ (0, import_jsx_runtime23.jsxs)(
1470
+ "div",
1471
+ {
1472
+ className: `flex w-full gap-2 ${props.user === "bot" ? props.loading ? "bg-gray-100 transition-colors" : "bg-gray-100" : "bg-white"}`,
1473
+ children: [
1474
+ /* @__PURE__ */ (0, import_jsx_runtime23.jsx)("div", { className: "flex min-h-10 min-w-10 items-start pl-2 pt-1.5", children: /* @__PURE__ */ (0, import_jsx_runtime23.jsx)("div", { className: "flex items-center justify-center pb-1.5", children: props.user === "user" ? /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(import_react13.Icon, { icon: "mdi:account", className: "h-[38px] w-[32px]" }) : props.loading ? /* @__PURE__ */ (0, import_jsx_runtime23.jsx)("img", { src: "https://static.luxonis.com/images/chatbot.webp", width: "32", height: "32", alt: "Chatbot Icon" }) : /* @__PURE__ */ (0, import_jsx_runtime23.jsx)("img", { src: "https://static.luxonis.com/images/chatbot.webp", width: "32", height: "32", alt: "Chatbot Icon" }) }) }),
1475
+ /* @__PURE__ */ (0, import_jsx_runtime23.jsx)("div", { className: "flex flex-col", children: /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(
1476
+ "div",
1477
+ {
1478
+ className: `chat-rich-text w-[350px] max-w-[75vw] ${props.user === "bot" ? "bg-gray-100" : "bg-white"} break-words pb-1.5 pt-2`,
1479
+ dangerouslySetInnerHTML: { __html: props.message }
1480
+ }
1481
+ ) })
1482
+ ]
1483
+ }
1484
+ );
1485
+ };
1212
1486
  // Annotate the CommonJS export names for ESM import in node:
1213
1487
  0 && (module.exports = {
1214
1488
  Accordion,
@@ -1223,6 +1497,8 @@ DualRangeSlider.displayName = "DualRangeSlider";
1223
1497
  CarouselItem,
1224
1498
  CarouselNext,
1225
1499
  CarouselPrevious,
1500
+ ChatButton,
1501
+ Checkbox,
1226
1502
  CodeBlock,
1227
1503
  Copyright,
1228
1504
  Description,
package/dist/index.mjs CHANGED
@@ -1092,11 +1092,38 @@ var Video = forwardRef8(({ src, className }, ref) => {
1092
1092
  });
1093
1093
  Video.displayName = "Video";
1094
1094
 
1095
+ // src/Checkbox.tsx
1096
+ import * as CheckboxPrimitive from "@radix-ui/react-checkbox";
1097
+ import { cx as cx18 } from "class-variance-authority";
1098
+ import { Icon as Icon6 } from "@iconify/react";
1099
+ import { jsx as jsx21 } from "react/jsx-runtime";
1100
+ function Checkbox({ className, ...props }) {
1101
+ return /* @__PURE__ */ jsx21(
1102
+ CheckboxPrimitive.Root,
1103
+ {
1104
+ "data-slot": "checkbox",
1105
+ className: cx18(
1106
+ "peer border-input dark:bg-input/30 data-[state=checked]:bg-primary data-[state=checked]:text-primary-foreground dark:data-[state=checked]:bg-primary data-[state=checked]:border-primary focus-visible:border-ring focus-visible:ring-ring/50 aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive size-4 shrink-0 rounded-[4px] border shadow-xs transition-shadow outline-none focus-visible:ring-[3px] disabled:cursor-not-allowed disabled:opacity-50",
1107
+ className
1108
+ ),
1109
+ ...props,
1110
+ children: /* @__PURE__ */ jsx21(
1111
+ CheckboxPrimitive.Indicator,
1112
+ {
1113
+ "data-slot": "checkbox-indicator",
1114
+ className: "flex items-center justify-center text-current transition-none",
1115
+ children: /* @__PURE__ */ jsx21(Icon6, { className: "size-3.5 text-white", icon: "lucide:check" })
1116
+ }
1117
+ )
1118
+ }
1119
+ );
1120
+ }
1121
+
1095
1122
  // src/DualRangeSlider.tsx
1096
1123
  import * as React14 from "react";
1097
1124
  import * as SliderPrimitive from "@radix-ui/react-slider";
1098
- import { cx as cx18 } from "class-variance-authority";
1099
- import { jsx as jsx21, jsxs as jsxs11 } from "react/jsx-runtime";
1125
+ import { cx as cx19 } from "class-variance-authority";
1126
+ import { jsx as jsx22, jsxs as jsxs11 } from "react/jsx-runtime";
1100
1127
  var DualRangeSlider = React14.forwardRef(
1101
1128
  ({ className, label, labelPosition = "top", ...props }, ref) => {
1102
1129
  const initialValue = Array.isArray(props.value) ? props.value : [props.min, props.max];
@@ -1104,14 +1131,14 @@ var DualRangeSlider = React14.forwardRef(
1104
1131
  SliderPrimitive.Root,
1105
1132
  {
1106
1133
  ref,
1107
- className: cx18("relative flex w-full touch-none select-none items-center", className),
1134
+ className: cx19("relative flex w-full touch-none select-none items-center", className),
1108
1135
  ...props,
1109
1136
  children: [
1110
- /* @__PURE__ */ jsx21(SliderPrimitive.Track, { className: "relative h-2 w-full grow overflow-hidden rounded-full bg-secondary", children: /* @__PURE__ */ jsx21(SliderPrimitive.Range, { className: "absolute h-full bg-primary" }) }),
1111
- initialValue.map((value, index) => /* @__PURE__ */ jsx21(React14.Fragment, { children: /* @__PURE__ */ jsx21(SliderPrimitive.Thumb, { className: "ring-offset-background focus-visible:ring-ring relative block size-4 rounded-full border-2 border-primary bg-primary transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50", children: label && /* @__PURE__ */ jsx21(
1137
+ /* @__PURE__ */ jsx22(SliderPrimitive.Track, { className: "relative h-2 w-full grow overflow-hidden rounded-full bg-secondary", children: /* @__PURE__ */ jsx22(SliderPrimitive.Range, { className: "absolute h-full bg-primary" }) }),
1138
+ initialValue.map((value, index) => /* @__PURE__ */ jsx22(React14.Fragment, { children: /* @__PURE__ */ jsx22(SliderPrimitive.Thumb, { className: "ring-offset-background focus-visible:ring-ring relative block size-4 rounded-full border-2 border-primary bg-primary transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50", children: label && /* @__PURE__ */ jsx22(
1112
1139
  "span",
1113
1140
  {
1114
- className: cx18(
1141
+ className: cx19(
1115
1142
  "absolute flex w-full justify-center",
1116
1143
  labelPosition === "top" && "-top-7",
1117
1144
  labelPosition === "bottom" && "top-4"
@@ -1125,6 +1152,251 @@ var DualRangeSlider = React14.forwardRef(
1125
1152
  }
1126
1153
  );
1127
1154
  DualRangeSlider.displayName = "DualRangeSlider";
1155
+
1156
+ // src/LuxonisChat.tsx
1157
+ import { useCallback, useEffect as useEffect2, useRef as useRef4, useState as useState5 } from "react";
1158
+ import markdownit from "markdown-it";
1159
+ import { Icon as Icon7 } from "@iconify/react";
1160
+ import { jsx as jsx23, jsxs as jsxs12 } from "react/jsx-runtime";
1161
+ function ChatButton(props) {
1162
+ const { chatOpened, setChatOpened, messageFromSearch, setMessageFromSearch } = props;
1163
+ const [hold, setHold] = useState5(false);
1164
+ const [iconKey, setIconKey] = useState5(0);
1165
+ const [loading, setLoading] = useState5(false);
1166
+ const [userInput, setUserInput] = useState5("");
1167
+ const [messages, setMessages] = useState5([
1168
+ {
1169
+ id: -1,
1170
+ user: "bot",
1171
+ message: "Welcome! I'm here to assist you by searching Luxonis documentation and past forum discussions for answers. How can I help you today?",
1172
+ loading: false
1173
+ }
1174
+ ]);
1175
+ const inputRef = useRef4(null);
1176
+ const messageListRef = useRef4(null);
1177
+ const formRef = useRef4(null);
1178
+ const loadingMessages = [
1179
+ "Please wait...",
1180
+ "Hold on...",
1181
+ "One moment...",
1182
+ "Bear with me...",
1183
+ "Just a second...",
1184
+ "Hang tight...",
1185
+ "Give me a moment...",
1186
+ "Stay with me...",
1187
+ "Almost there...",
1188
+ "Please hold on..."
1189
+ ];
1190
+ const fetchData = useCallback(
1191
+ async (message) => {
1192
+ try {
1193
+ const response = await fetch("https://chat.luxonis.com/api/chat", {
1194
+ method: "POST",
1195
+ headers: {
1196
+ "Content-Type": "application/json"
1197
+ },
1198
+ body: JSON.stringify({
1199
+ query: [...messages.slice(1, messages.length), { user: "user", message }].map((m) => {
1200
+ return { role: m.user, content: m.message };
1201
+ }),
1202
+ model: "gpt-4.1"
1203
+ })
1204
+ });
1205
+ if (!response.ok) {
1206
+ throw new Error(`Request failed with status ${response.status}`);
1207
+ }
1208
+ const contentType = response.headers.get("content-type");
1209
+ if (!contentType || !contentType.includes("application/json")) {
1210
+ throw new Error("Response is not in JSON format");
1211
+ }
1212
+ return await response.json();
1213
+ } catch {
1214
+ return null;
1215
+ }
1216
+ },
1217
+ [messages]
1218
+ );
1219
+ const onSubmit = useCallback(
1220
+ async (e) => {
1221
+ e?.preventDefault();
1222
+ if (userInput.trim() !== "") {
1223
+ const id = messages.length - 1;
1224
+ setMessages((prevMessages) => [...prevMessages, { id, user: "user", message: userInput, loading: true }]);
1225
+ setLoading(true);
1226
+ setUserInput("");
1227
+ try {
1228
+ const res = await fetchData(userInput);
1229
+ if (res) {
1230
+ const md = markdownit();
1231
+ const result = md.render(res.content);
1232
+ setMessages((prevMessages) => [
1233
+ ...prevMessages,
1234
+ { id: res.id, user: "bot", message: result, loading: false }
1235
+ ]);
1236
+ } else {
1237
+ setMessages((prevMessages) => [
1238
+ ...prevMessages,
1239
+ { id: id + 1, user: "bot", message: "Something went wrong", loading: false }
1240
+ ]);
1241
+ }
1242
+ } catch (error) {
1243
+ setMessages((prevMessages) => [
1244
+ ...prevMessages,
1245
+ { id: id + 1, user: "bot", message: "Something went wrong", loading: false }
1246
+ ]);
1247
+ }
1248
+ setLoading(false);
1249
+ setMessageFromSearch("");
1250
+ }
1251
+ },
1252
+ [userInput, messages, fetchData, setMessageFromSearch, setLoading]
1253
+ );
1254
+ const handleEnter = useCallback(
1255
+ (e) => {
1256
+ if (e.key === "Enter" && userInput.trim() !== "") {
1257
+ if (!e.shiftKey && userInput.trim() !== "") {
1258
+ e.preventDefault();
1259
+ void onSubmit(void 0);
1260
+ }
1261
+ } else if (e.key === "Enter") {
1262
+ e.preventDefault();
1263
+ }
1264
+ },
1265
+ [userInput, onSubmit]
1266
+ );
1267
+ useEffect2(() => {
1268
+ if (messageListRef.current) {
1269
+ const messageList = messageListRef.current;
1270
+ messageList.scrollTop = messageList.scrollHeight;
1271
+ }
1272
+ }, [messages]);
1273
+ useEffect2(() => {
1274
+ async function fetchSearchQuery() {
1275
+ setUserInput(`Can you tell me about ${messageFromSearch}`);
1276
+ await onSubmit(void 0);
1277
+ }
1278
+ if (messageFromSearch !== "" && !loading) {
1279
+ void fetchSearchQuery();
1280
+ }
1281
+ }, [messageFromSearch, onSubmit, loading]);
1282
+ return /* @__PURE__ */ jsx23("div", { className: "fixed bottom-4 right-4 z-50 sm:bottom-6 sm:right-6", children: /* @__PURE__ */ jsxs12(
1283
+ "div",
1284
+ {
1285
+ className: `relative flex max-h-[90vh] max-w-95vw flex-col-reverse items-end gap-5 transition-all duration-300 ${chatOpened ? "h-[650px] min-h-[96px] w-[450px] min-w-[100px]" : "size-0 min-h-0 min-w-0"}`,
1286
+ children: [
1287
+ /* @__PURE__ */ jsx23(
1288
+ "button",
1289
+ {
1290
+ onClick: () => {
1291
+ setChatOpened(!chatOpened);
1292
+ setIconKey(iconKey + 1);
1293
+ },
1294
+ onMouseDown: () => setHold(true),
1295
+ onMouseUp: () => setHold(false),
1296
+ style: {
1297
+ transform: `scale(${hold ? 0.9 : 1})`,
1298
+ transition: "transform 0.15s ease-in-out"
1299
+ },
1300
+ className: "size-16 min-h-16 rounded-full bg-primary transition duration-150 ease-in-out hover:scale-110 hover:shadow-lg",
1301
+ children: /* @__PURE__ */ jsx23(
1302
+ "div",
1303
+ {
1304
+ style: {
1305
+ animationName: iconKey > 0 ? "rotateInAnimation" : "none",
1306
+ animationDuration: "150ms",
1307
+ animationTimingFunction: "ease-in"
1308
+ },
1309
+ className: "flex items-center justify-center",
1310
+ children: chatOpened ? /* @__PURE__ */ jsx23(Icon7, { icon: "mdi:close", className: "size-[32px] text-white" }) : /* @__PURE__ */ jsx23("img", { src: "https://docs.luxonis.com/static/images/icons/chat-icon.svg", width: "32", height: "32", alt: "Chat" })
1311
+ },
1312
+ iconKey
1313
+ )
1314
+ }
1315
+ ),
1316
+ chatOpened && /* @__PURE__ */ jsxs12("div", { className: "flex size-full flex-col gap-3 overflow-hidden rounded-md bg-white p-3 shadow-lg sm:p-5", children: [
1317
+ /* @__PURE__ */ jsx23("div", { className: "flex h-8 gap-2", children: /* @__PURE__ */ jsxs12("h2", { className: "relative text-2xl", children: [
1318
+ /* @__PURE__ */ jsx23("a", { target: "_blank", rel: "noopener noreferrer", href: "https://chat.luxonis.com", children: "Chat with Luxonis AI" }),
1319
+ /* @__PURE__ */ jsx23(Icon7, { icon: "mingcute:ai-fill", className: "absolute -right-4 -top-2 size-5 text-primary" })
1320
+ ] }) }),
1321
+ /* @__PURE__ */ jsxs12(
1322
+ "div",
1323
+ {
1324
+ ref: messageListRef,
1325
+ className: " flex size-full max-w-full flex-col gap-4 overflow-auto rounded-md border border-secondaryBorder bg-white",
1326
+ children: [
1327
+ messages.map((message) => /* @__PURE__ */ jsx23(ChatMessage, { ...message }, message.id)),
1328
+ loading && /* @__PURE__ */ jsx23(
1329
+ ChatMessage,
1330
+ {
1331
+ id: -2,
1332
+ user: "bot",
1333
+ message: loadingMessages[Math.floor(Math.random() * loadingMessages.length)],
1334
+ loading: true
1335
+ }
1336
+ )
1337
+ ]
1338
+ }
1339
+ ),
1340
+ /* @__PURE__ */ jsxs12(
1341
+ "form",
1342
+ {
1343
+ ref: formRef,
1344
+ onSubmit: (e) => onSubmit(e),
1345
+ className: "relative flex items-center justify-between rounded-md border border-secondaryBorder p-0",
1346
+ children: [
1347
+ /* @__PURE__ */ jsx23(
1348
+ "textarea",
1349
+ {
1350
+ className: " w-full resize-none rounded-md border-none bg-white py-4 pl-6 pr-12 focus:outline-none",
1351
+ onKeyDown: (e) => handleEnter(e),
1352
+ value: userInput,
1353
+ onChange: (e) => setUserInput(e.target.value),
1354
+ disabled: loading,
1355
+ ref: inputRef,
1356
+ autoFocus: true,
1357
+ rows: 1,
1358
+ maxLength: 512,
1359
+ name: "userInput",
1360
+ placeholder: loading ? "Waiting for response..." : "Type your question..."
1361
+ }
1362
+ ),
1363
+ /* @__PURE__ */ jsx23("div", { className: "absolute right-2 flex items-center", children: /* @__PURE__ */ jsx23(
1364
+ Button,
1365
+ {
1366
+ disabled: loading,
1367
+ type: "submit",
1368
+ name: "sendButton",
1369
+ variant: "primary",
1370
+ className: "!size-10 bg-primary !p-2",
1371
+ children: /* @__PURE__ */ jsx23(Icon7, { icon: "mdi:send", className: "text-white" })
1372
+ }
1373
+ ) })
1374
+ ]
1375
+ }
1376
+ )
1377
+ ] })
1378
+ ]
1379
+ }
1380
+ ) });
1381
+ }
1382
+ var ChatMessage = (props) => {
1383
+ return /* @__PURE__ */ jsxs12(
1384
+ "div",
1385
+ {
1386
+ className: `flex w-full gap-2 ${props.user === "bot" ? props.loading ? "bg-gray-100 transition-colors" : "bg-gray-100" : "bg-white"}`,
1387
+ children: [
1388
+ /* @__PURE__ */ jsx23("div", { className: "flex min-h-10 min-w-10 items-start pl-2 pt-1.5", children: /* @__PURE__ */ jsx23("div", { className: "flex items-center justify-center pb-1.5", children: props.user === "user" ? /* @__PURE__ */ jsx23(Icon7, { icon: "mdi:account", className: "h-[38px] w-[32px]" }) : props.loading ? /* @__PURE__ */ jsx23("img", { src: "https://static.luxonis.com/images/chatbot.webp", width: "32", height: "32", alt: "Chatbot Icon" }) : /* @__PURE__ */ jsx23("img", { src: "https://static.luxonis.com/images/chatbot.webp", width: "32", height: "32", alt: "Chatbot Icon" }) }) }),
1389
+ /* @__PURE__ */ jsx23("div", { className: "flex flex-col", children: /* @__PURE__ */ jsx23(
1390
+ "div",
1391
+ {
1392
+ className: `chat-rich-text w-[350px] max-w-[75vw] ${props.user === "bot" ? "bg-gray-100" : "bg-white"} break-words pb-1.5 pt-2`,
1393
+ dangerouslySetInnerHTML: { __html: props.message }
1394
+ }
1395
+ ) })
1396
+ ]
1397
+ }
1398
+ );
1399
+ };
1128
1400
  export {
1129
1401
  Accordion,
1130
1402
  AccordionContent,
@@ -1138,6 +1410,8 @@ export {
1138
1410
  CarouselItem,
1139
1411
  CarouselNext,
1140
1412
  CarouselPrevious,
1413
+ ChatButton,
1414
+ Checkbox,
1141
1415
  CodeBlock,
1142
1416
  Copyright,
1143
1417
  Description,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@luxonis/component-lib",
3
- "version": "1.0.2",
3
+ "version": "1.0.4",
4
4
  "description": "Luxonis website-component-lib",
5
5
  "publishConfig": {
6
6
  "access": "public"
@@ -37,6 +37,7 @@
37
37
  "@bugsnag/js": "^8.2.0",
38
38
  "@iconify/react": "^6.0.0",
39
39
  "@radix-ui/react-accordion": "^1.2.11",
40
+ "@radix-ui/react-checkbox": "^1.3.2",
40
41
  "@radix-ui/react-hover-card": "^1.1.14",
41
42
  "@radix-ui/react-label": "^2.1.7",
42
43
  "@radix-ui/react-progress": "^1.1.7",
@@ -49,6 +50,7 @@
49
50
  "class-variance-authority": "^0.7.1",
50
51
  "embla-carousel-react": "^8.6.0",
51
52
  "fluid-tailwind": "^1.0.4",
53
+ "markdown-it": "^14.1.0",
52
54
  "react-intersection-observer": "^9.16.0",
53
55
  "zod": "^3.25.23"
54
56
  }