@unblind/react 0.1.0-alpha.0
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 +3 -0
- package/dist/index.css.map +1 -0
- package/dist/index.d.mts +520 -0
- package/dist/index.d.ts +520 -0
- package/dist/index.js +2 -0
- package/dist/index.js.map +1 -0
- package/dist/index.mjs +2 -0
- package/dist/index.mjs.map +1 -0
- package/package.json +54 -0
package/dist/index.css
ADDED
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
@layer properties;@layer theme,base,components,utilities;@layer theme{:root,:host{--font-sans: Inter, sans-serif;--font-mono: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace;--color-red-500: oklch(63.7% .237 25.331);--color-slate-50: oklch(98.4% .003 247.858);--color-slate-100: oklch(96.8% .007 247.896);--color-slate-200: oklch(92.9% .013 255.508);--color-slate-300: oklch(86.9% .022 252.894);--color-slate-400: oklch(70.4% .04 256.788);--color-slate-500: oklch(55.4% .046 257.417);--color-slate-600: oklch(44.6% .043 257.281);--color-slate-700: oklch(37.2% .044 257.287);--color-slate-900: oklch(20.8% .042 265.755);--color-gray-100: oklch(96.7% .003 264.542);--color-gray-200: oklch(92.8% .006 264.531);--color-gray-400: oklch(70.7% .022 261.325);--color-gray-500: oklch(55.1% .027 264.364);--color-zinc-400: oklch(70.5% .015 286.067);--color-zinc-800: oklch(27.4% .006 286.033);--color-zinc-900: oklch(21% .006 285.885);--color-black: #000;--color-white: #fff;--spacing: .25rem;--text-xs: .75rem;--text-xs--line-height: calc(1 / .75);--text-sm: .875rem;--text-sm--line-height: calc(1.25 / .875);--font-weight-normal: 400;--font-weight-medium: 500;--font-weight-semibold: 600;--radius-lg: .5rem;--blur-sm: 8px;--default-transition-duration: .15s;--default-transition-timing-function: cubic-bezier(.4, 0, .2, 1);--default-font-family: var(--font-sans);--default-font-feature-settings: var(--font-sans--font-feature-settings);--default-mono-font-family: var(--font-mono);--font-sans--font-feature-settings: "cv11"}}@layer base{*,:after,:before,::backdrop,::file-selector-button{box-sizing:border-box;margin:0;padding:0;border:0 solid}html,:host{line-height:1.5;-webkit-text-size-adjust:100%;tab-size:4;font-family:var(--default-font-family, ui-sans-serif, system-ui, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji");font-feature-settings:var(--default-font-feature-settings, normal);font-variation-settings:var(--default-font-variation-settings, normal);-webkit-tap-highlight-color:transparent}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;-webkit-text-decoration:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:var(--default-mono-font-family, ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace);font-feature-settings:var(--default-mono-font-feature-settings, normal);font-variation-settings:var(--default-mono-font-variation-settings, normal);font-size:1em}small{font-size:80%}sub,sup{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}:-moz-focusring{outline:auto}progress{vertical-align:baseline}summary{display:list-item}ol,ul,menu{list-style:none}img,svg,video,canvas,audio,iframe,embed,object{display:block;vertical-align:middle}img,video{max-width:100%;height:auto}button,input,select,optgroup,textarea,::file-selector-button{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;border-radius:0;background-color:transparent;opacity:1}:where(select:is([multiple],[size])) optgroup{font-weight:bolder}:where(select:is([multiple],[size])) optgroup option{padding-inline-start:20px}::file-selector-button{margin-inline-end:4px}::placeholder{opacity:1}@supports (not (-webkit-appearance: -apple-pay-button)) or (contain-intrinsic-size: 1px){::placeholder{color:currentcolor;@supports (color: color-mix(in lab,red,red)){color:color-mix(in oklab,currentcolor 50%,transparent)}}}textarea{resize:vertical}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-date-and-time-value{min-height:1lh;text-align:inherit}::-webkit-datetime-edit{display:inline-flex}::-webkit-datetime-edit-fields-wrapper{padding:0}::-webkit-datetime-edit,::-webkit-datetime-edit-year-field,::-webkit-datetime-edit-month-field,::-webkit-datetime-edit-day-field,::-webkit-datetime-edit-hour-field,::-webkit-datetime-edit-minute-field,::-webkit-datetime-edit-second-field,::-webkit-datetime-edit-millisecond-field,::-webkit-datetime-edit-meridiem-field{padding-block:0}::-webkit-calendar-picker-indicator{line-height:1}:-moz-ui-invalid{box-shadow:none}button,input:where([type=button],[type=reset],[type=submit]),::file-selector-button{appearance:button}::-webkit-inner-spin-button,::-webkit-outer-spin-button{height:auto}[hidden]:where(:not([hidden=until-found])){display:none!important}}@layer utilities{.fixed{position:fixed}.relative{position:relative}.sticky{position:sticky}.top-0{top:calc(var(--spacing) * 0)}.z-10{z-index:10}.container{width:100%;@media(width>=40rem){max-width:40rem}@media(width>=48rem){max-width:48rem}@media(width>=64rem){max-width:64rem}@media(width>=80rem){max-width:80rem}@media(width>=96rem){max-width:96rem}}.mx-auto{margin-inline:auto}.my-1{margin-block:calc(var(--spacing) * 1)}.mt-0\.5{margin-top:calc(var(--spacing) * .5)}.mt-2{margin-top:calc(var(--spacing) * 2)}.block{display:block}.flex{display:flex}.grid{display:grid}.inline{display:inline}.size-2{width:calc(var(--spacing) * 2);height:calc(var(--spacing) * 2)}.size-5{width:calc(var(--spacing) * 5);height:calc(var(--spacing) * 5)}.h-10{height:calc(var(--spacing) * 10)}.h-full{height:100%}.h-px{height:1px}.w-10{width:calc(var(--spacing) * 10)}.w-\[320px\]{width:320px}.w-full{width:100%}.min-w-0{min-width:calc(var(--spacing) * 0)}.shrink-0{flex-shrink:0}.resize{resize:both}.flex-col{flex-direction:column}.flex-wrap{flex-wrap:wrap}.items-center{align-items:center}.justify-between{justify-content:space-between}.justify-center{justify-content:center}.gap-1{gap:calc(var(--spacing) * 1)}.gap-2\.5{gap:calc(var(--spacing) * 2.5)}.gap-4{gap:calc(var(--spacing) * 4)}.gap-x-3{column-gap:calc(var(--spacing) * 3)}.gap-y-0\.5{row-gap:calc(var(--spacing) * .5)}.truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.overflow-hidden{overflow:hidden}.rounded-full{border-radius:calc(infinity * 1px)}.rounded-lg{border-radius:var(--radius-lg)}.border{border-style:var(--tw-border-style);border-width:1px}.border-t{border-top-style:var(--tw-border-style);border-top-width:1px}.border-gray-100{border-color:var(--color-gray-100)}.border-gray-200{border-color:var(--color-gray-200)}.border-gray-200\/80{border-color:color-mix(in srgb,oklch(92.8% .006 264.531) 80%,transparent);@supports (color: color-mix(in lab,red,red)){border-color:color-mix(in oklab,var(--color-gray-200) 80%,transparent)}}.bg-gray-100{background-color:var(--color-gray-100)}.bg-gray-200{background-color:var(--color-gray-200)}.bg-white{background-color:var(--color-white)}.bg-white\/95{background-color:color-mix(in srgb,#fff 95%,transparent);@supports (color: color-mix(in lab,red,red)){background-color:color-mix(in oklab,var(--color-white) 95%,transparent)}}.px-3{padding-inline:calc(var(--spacing) * 3)}.py-1{padding-block:calc(var(--spacing) * 1)}.py-1\.5{padding-block:calc(var(--spacing) * 1.5)}.pt-2\.5{padding-top:calc(var(--spacing) * 2.5)}.pt-3{padding-top:calc(var(--spacing) * 3)}.pb-2{padding-bottom:calc(var(--spacing) * 2)}.pb-3{padding-bottom:calc(var(--spacing) * 3)}.pl-4\.5{padding-left:calc(var(--spacing) * 4.5)}.text-center{text-align:center}.text-sm{font-size:var(--text-sm);line-height:var(--tw-leading, var(--text-sm--line-height))}.text-xs{font-size:var(--text-xs);line-height:var(--tw-leading, var(--text-xs--line-height))}.font-medium{--tw-font-weight: var(--font-weight-medium);font-weight:var(--font-weight-medium)}.font-normal{--tw-font-weight: var(--font-weight-normal);font-weight:var(--font-weight-normal)}.font-semibold{--tw-font-weight: var(--font-weight-semibold);font-weight:var(--font-weight-semibold)}.whitespace-nowrap{white-space:nowrap}.text-gray-400{color:var(--color-gray-400)}.text-gray-500{color:var(--color-gray-500)}.text-red-500{color:var(--color-red-500)}.text-slate-400{color:var(--color-slate-400)}.text-slate-500{color:var(--color-slate-500)}.text-slate-600{color:var(--color-slate-600)}.text-slate-700{color:var(--color-slate-700)}.text-slate-900{color:var(--color-slate-900)}.text-zinc-400{color:var(--color-zinc-400)}.italic{font-style:italic}.tabular-nums{--tw-numeric-spacing: tabular-nums;font-variant-numeric:var(--tw-ordinal,) var(--tw-slashed-zero,) var(--tw-numeric-figure,) var(--tw-numeric-spacing,) var(--tw-numeric-fraction,)}.opacity-70{opacity:70%}.shadow-sm{--tw-shadow: 0 1px 3px 0 var(--tw-shadow-color, rgb(0 0 0 / .1)), 0 1px 2px -1px var(--tw-shadow-color, rgb(0 0 0 / .1));box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-xl{--tw-shadow: 0 20px 25px -5px var(--tw-shadow-color, rgb(0 0 0 / .1)), 0 8px 10px -6px var(--tw-shadow-color, rgb(0 0 0 / .1));box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.ring-1{--tw-ring-shadow: var(--tw-ring-inset,) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color, currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.ring-black\/5{--tw-ring-color: color-mix(in srgb, #000 5%, transparent);@supports (color: color-mix(in lab,red,red)){--tw-ring-color: color-mix(in oklab, var(--color-black) 5%, transparent)}}.ring-gray-200\/40{--tw-ring-color: color-mix(in srgb, oklch(92.8% .006 264.531) 40%, transparent);@supports (color: color-mix(in lab,red,red)){--tw-ring-color: color-mix(in oklab, var(--color-gray-200) 40%, transparent)}}.filter{filter:var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,)}.backdrop-blur-sm{--tw-backdrop-blur: blur(var(--blur-sm));-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-colors{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to;transition-timing-function:var(--tw-ease, var(--default-transition-timing-function));transition-duration:var(--tw-duration, var(--default-transition-duration))}.hover\:bg-slate-50{&:hover{@media(hover:hover){background-color:var(--color-slate-50)}}}.dark\:border-white\/5{&:where(.dark,.dark *){border-color:color-mix(in srgb,#fff 5%,transparent);@supports (color: color-mix(in lab,red,red)){border-color:color-mix(in oklab,var(--color-white) 5%,transparent)}}}.dark\:border-white\/10{&:where(.dark,.dark *){border-color:color-mix(in srgb,#fff 10%,transparent);@supports (color: color-mix(in lab,red,red)){border-color:color-mix(in oklab,var(--color-white) 10%,transparent)}}}.dark\:bg-white\/15{&:where(.dark,.dark *){background-color:color-mix(in srgb,#fff 15%,transparent);@supports (color: color-mix(in lab,red,red)){background-color:color-mix(in oklab,var(--color-white) 15%,transparent)}}}.dark\:bg-zinc-800{&:where(.dark,.dark *){background-color:var(--color-zinc-800)}}.dark\:bg-zinc-900{&:where(.dark,.dark *){background-color:var(--color-zinc-900)}}.dark\:bg-zinc-900\/95{&:where(.dark,.dark *){background-color:color-mix(in srgb,oklch(21% .006 285.885) 95%,transparent);@supports (color: color-mix(in lab,red,red)){background-color:color-mix(in oklab,var(--color-zinc-900) 95%,transparent)}}}.dark\:text-gray-400{&:where(.dark,.dark *){color:var(--color-gray-400)}}.dark\:text-gray-500{&:where(.dark,.dark *){color:var(--color-gray-500)}}.dark\:text-slate-100{&:where(.dark,.dark *){color:var(--color-slate-100)}}.dark\:text-slate-200{&:where(.dark,.dark *){color:var(--color-slate-200)}}.dark\:text-slate-300{&:where(.dark,.dark *){color:var(--color-slate-300)}}.dark\:text-slate-400{&:where(.dark,.dark *){color:var(--color-slate-400)}}.dark\:text-white{&:where(.dark,.dark *){color:var(--color-white)}}.dark\:ring-white\/10{&:where(.dark,.dark *){--tw-ring-color: color-mix(in srgb, #fff 10%, transparent);@supports (color: color-mix(in lab,red,red)){--tw-ring-color: color-mix(in oklab, var(--color-white) 10%, transparent)}}}.dark\:ring-zinc-800\/40{&:where(.dark,.dark *){--tw-ring-color: color-mix(in srgb, oklch(27.4% .006 286.033) 40%, transparent);@supports (color: color-mix(in lab,red,red)){--tw-ring-color: color-mix(in oklab, var(--color-zinc-800) 40%, transparent)}}}.dark\:hover\:bg-white\/5{&:where(.dark,.dark *){&:hover{@media(hover:hover){background-color:color-mix(in srgb,#fff 5%,transparent);@supports (color: color-mix(in lab,red,red)){background-color:color-mix(in oklab,var(--color-white) 5%,transparent)}}}}}}.uplot,.uplot *,.uplot *:before,.uplot *:after{box-sizing:border-box}.uplot{font-family:system-ui,-apple-system,Segoe UI,Roboto,Helvetica Neue,Arial,Noto Sans,sans-serif,"Apple Color Emoji","Segoe UI Emoji",Segoe UI Symbol,"Noto Color Emoji";line-height:1.5;width:min-content}.u-title{text-align:center;font-size:18px;font-weight:700}.u-wrap{position:relative;user-select:none}.u-over,.u-under{position:absolute}.u-under{overflow:hidden}.uplot canvas{display:block;position:relative;width:100%;height:100%}.u-axis{position:absolute}.u-legend{font-size:14px;margin:auto;text-align:center}.u-inline{display:block}.u-inline *{display:inline-block}.u-inline tr{margin-right:16px}.u-legend th{font-weight:600}.u-legend th>*{vertical-align:middle;display:inline-block}.u-legend .u-marker{width:1em;height:1em;margin-right:4px;background-clip:padding-box!important}.u-inline.u-live th:after{content:":";vertical-align:middle}.u-inline:not(.u-live) .u-value{display:none}.u-series>*{padding:4px}.u-series th{cursor:pointer}.u-legend .u-off>*{opacity:.3}.u-select{background:#00000012;position:absolute;pointer-events:none}.u-cursor-x,.u-cursor-y{position:absolute;left:0;top:0;pointer-events:none;will-change:transform}.u-hz .u-cursor-x,.u-vt .u-cursor-y{height:100%;border-right:1px dashed #607D8B}.u-hz .u-cursor-y,.u-vt .u-cursor-x{width:100%;border-bottom:1px dashed #607D8B}.u-cursor-pt{position:absolute;top:0;left:0;border-radius:50%;border:0 solid;pointer-events:none;will-change:transform;background-clip:padding-box!important}.u-axis.u-off,.u-select.u-off,.u-cursor-x.u-off,.u-cursor-y.u-off,.u-cursor-pt.u-off{display:none}@property --tw-border-style{syntax: "*"; inherits: false; initial-value: solid;}@property --tw-font-weight{syntax: "*"; inherits: false;}@property --tw-ordinal{syntax: "*"; inherits: false;}@property --tw-slashed-zero{syntax: "*"; inherits: false;}@property --tw-numeric-figure{syntax: "*"; inherits: false;}@property --tw-numeric-spacing{syntax: "*"; inherits: false;}@property --tw-numeric-fraction{syntax: "*"; inherits: false;}@property --tw-shadow{syntax: "*"; inherits: false; initial-value: 0 0 #0000;}@property --tw-shadow-color{syntax: "*"; inherits: false;}@property --tw-shadow-alpha{syntax: "<percentage>"; inherits: false; initial-value: 100%;}@property --tw-inset-shadow{syntax: "*"; inherits: false; initial-value: 0 0 #0000;}@property --tw-inset-shadow-color{syntax: "*"; inherits: false;}@property --tw-inset-shadow-alpha{syntax: "<percentage>"; inherits: false; initial-value: 100%;}@property --tw-ring-color{syntax: "*"; inherits: false;}@property --tw-ring-shadow{syntax: "*"; inherits: false; initial-value: 0 0 #0000;}@property --tw-inset-ring-color{syntax: "*"; inherits: false;}@property --tw-inset-ring-shadow{syntax: "*"; inherits: false; initial-value: 0 0 #0000;}@property --tw-ring-inset{syntax: "*"; inherits: false;}@property --tw-ring-offset-width{syntax: "<length>"; inherits: false; initial-value: 0px;}@property --tw-ring-offset-color{syntax: "*"; inherits: false; initial-value: #fff;}@property --tw-ring-offset-shadow{syntax: "*"; inherits: false; initial-value: 0 0 #0000;}@property --tw-blur{syntax: "*"; inherits: false;}@property --tw-brightness{syntax: "*"; inherits: false;}@property --tw-contrast{syntax: "*"; inherits: false;}@property --tw-grayscale{syntax: "*"; inherits: false;}@property --tw-hue-rotate{syntax: "*"; inherits: false;}@property --tw-invert{syntax: "*"; inherits: false;}@property --tw-opacity{syntax: "*"; inherits: false;}@property --tw-saturate{syntax: "*"; inherits: false;}@property --tw-sepia{syntax: "*"; inherits: false;}@property --tw-drop-shadow{syntax: "*"; inherits: false;}@property --tw-drop-shadow-color{syntax: "*"; inherits: false;}@property --tw-drop-shadow-alpha{syntax: "<percentage>"; inherits: false; initial-value: 100%;}@property --tw-drop-shadow-size{syntax: "*"; inherits: false;}@property --tw-backdrop-blur{syntax: "*"; inherits: false;}@property --tw-backdrop-brightness{syntax: "*"; inherits: false;}@property --tw-backdrop-contrast{syntax: "*"; inherits: false;}@property --tw-backdrop-grayscale{syntax: "*"; inherits: false;}@property --tw-backdrop-hue-rotate{syntax: "*"; inherits: false;}@property --tw-backdrop-invert{syntax: "*"; inherits: false;}@property --tw-backdrop-opacity{syntax: "*"; inherits: false;}@property --tw-backdrop-saturate{syntax: "*"; inherits: false;}@property --tw-backdrop-sepia{syntax: "*"; inherits: false;}@layer properties{@supports ((-webkit-hyphens: none) and (not (margin-trim: inline))) or ((-moz-orient: inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-border-style: solid;--tw-font-weight: initial;--tw-ordinal: initial;--tw-slashed-zero: initial;--tw-numeric-figure: initial;--tw-numeric-spacing: initial;--tw-numeric-fraction: initial;--tw-shadow: 0 0 #0000;--tw-shadow-color: initial;--tw-shadow-alpha: 100%;--tw-inset-shadow: 0 0 #0000;--tw-inset-shadow-color: initial;--tw-inset-shadow-alpha: 100%;--tw-ring-color: initial;--tw-ring-shadow: 0 0 #0000;--tw-inset-ring-color: initial;--tw-inset-ring-shadow: 0 0 #0000;--tw-ring-inset: initial;--tw-ring-offset-width: 0px;--tw-ring-offset-color: #fff;--tw-ring-offset-shadow: 0 0 #0000;--tw-blur: initial;--tw-brightness: initial;--tw-contrast: initial;--tw-grayscale: initial;--tw-hue-rotate: initial;--tw-invert: initial;--tw-opacity: initial;--tw-saturate: initial;--tw-sepia: initial;--tw-drop-shadow: initial;--tw-drop-shadow-color: initial;--tw-drop-shadow-alpha: 100%;--tw-drop-shadow-size: initial;--tw-backdrop-blur: initial;--tw-backdrop-brightness: initial;--tw-backdrop-contrast: initial;--tw-backdrop-grayscale: initial;--tw-backdrop-hue-rotate: initial;--tw-backdrop-invert: initial;--tw-backdrop-opacity: initial;--tw-backdrop-saturate: initial;--tw-backdrop-sepia: initial}}}
|
|
2
|
+
/*! tailwindcss v4.1.18 | MIT License | https://tailwindcss.com */
|
|
3
|
+
/*# sourceMappingURL=index.css.map */
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/styles.css"],"sourcesContent":["/*! tailwindcss v4.1.18 | MIT License | https://tailwindcss.com */\n@layer properties;\n@layer theme, base, components, utilities;\n@layer theme {\n :root, :host {\n --font-sans: Inter, sans-serif;\n --font-mono: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, \"Liberation Mono\",\n \"Courier New\", monospace;\n --color-red-500: oklch(63.7% 0.237 25.331);\n --color-slate-50: oklch(98.4% 0.003 247.858);\n --color-slate-100: oklch(96.8% 0.007 247.896);\n --color-slate-200: oklch(92.9% 0.013 255.508);\n --color-slate-300: oklch(86.9% 0.022 252.894);\n --color-slate-400: oklch(70.4% 0.04 256.788);\n --color-slate-500: oklch(55.4% 0.046 257.417);\n --color-slate-600: oklch(44.6% 0.043 257.281);\n --color-slate-700: oklch(37.2% 0.044 257.287);\n --color-slate-900: oklch(20.8% 0.042 265.755);\n --color-gray-100: oklch(96.7% 0.003 264.542);\n --color-gray-200: oklch(92.8% 0.006 264.531);\n --color-gray-400: oklch(70.7% 0.022 261.325);\n --color-gray-500: oklch(55.1% 0.027 264.364);\n --color-zinc-400: oklch(70.5% 0.015 286.067);\n --color-zinc-800: oklch(27.4% 0.006 286.033);\n --color-zinc-900: oklch(21% 0.006 285.885);\n --color-black: #000;\n --color-white: #fff;\n --spacing: 0.25rem;\n --text-xs: 0.75rem;\n --text-xs--line-height: calc(1 / 0.75);\n --text-sm: 0.875rem;\n --text-sm--line-height: calc(1.25 / 0.875);\n --font-weight-normal: 400;\n --font-weight-medium: 500;\n --font-weight-semibold: 600;\n --radius-lg: 0.5rem;\n --blur-sm: 8px;\n --default-transition-duration: 150ms;\n --default-transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);\n --default-font-family: var(--font-sans);\n --default-font-feature-settings: var(--font-sans--font-feature-settings);\n --default-mono-font-family: var(--font-mono);\n --font-sans--font-feature-settings: \"cv11\";\n }\n}\n@layer base {\n *, ::after, ::before, ::backdrop, ::file-selector-button {\n box-sizing: border-box;\n margin: 0;\n padding: 0;\n border: 0 solid;\n }\n html, :host {\n line-height: 1.5;\n -webkit-text-size-adjust: 100%;\n tab-size: 4;\n font-family: var(--default-font-family, ui-sans-serif, system-ui, sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\", \"Noto Color Emoji\");\n font-feature-settings: var(--default-font-feature-settings, normal);\n font-variation-settings: var(--default-font-variation-settings, normal);\n -webkit-tap-highlight-color: transparent;\n }\n hr {\n height: 0;\n color: inherit;\n border-top-width: 1px;\n }\n abbr:where([title]) {\n -webkit-text-decoration: underline dotted;\n text-decoration: underline dotted;\n }\n h1, h2, h3, h4, h5, h6 {\n font-size: inherit;\n font-weight: inherit;\n }\n a {\n color: inherit;\n -webkit-text-decoration: inherit;\n text-decoration: inherit;\n }\n b, strong {\n font-weight: bolder;\n }\n code, kbd, samp, pre {\n font-family: var(--default-mono-font-family, ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, \"Liberation Mono\", \"Courier New\", monospace);\n font-feature-settings: var(--default-mono-font-feature-settings, normal);\n font-variation-settings: var(--default-mono-font-variation-settings, normal);\n font-size: 1em;\n }\n small {\n font-size: 80%;\n }\n sub, sup {\n font-size: 75%;\n line-height: 0;\n position: relative;\n vertical-align: baseline;\n }\n sub {\n bottom: -0.25em;\n }\n sup {\n top: -0.5em;\n }\n table {\n text-indent: 0;\n border-color: inherit;\n border-collapse: collapse;\n }\n :-moz-focusring {\n outline: auto;\n }\n progress {\n vertical-align: baseline;\n }\n summary {\n display: list-item;\n }\n ol, ul, menu {\n list-style: none;\n }\n img, svg, video, canvas, audio, iframe, embed, object {\n display: block;\n vertical-align: middle;\n }\n img, video {\n max-width: 100%;\n height: auto;\n }\n button, input, select, optgroup, textarea, ::file-selector-button {\n font: inherit;\n font-feature-settings: inherit;\n font-variation-settings: inherit;\n letter-spacing: inherit;\n color: inherit;\n border-radius: 0;\n background-color: transparent;\n opacity: 1;\n }\n :where(select:is([multiple], [size])) optgroup {\n font-weight: bolder;\n }\n :where(select:is([multiple], [size])) optgroup option {\n padding-inline-start: 20px;\n }\n ::file-selector-button {\n margin-inline-end: 4px;\n }\n ::placeholder {\n opacity: 1;\n }\n @supports (not (-webkit-appearance: -apple-pay-button)) or (contain-intrinsic-size: 1px) {\n ::placeholder {\n color: currentcolor;\n @supports (color: color-mix(in lab, red, red)) {\n color: color-mix(in oklab, currentcolor 50%, transparent);\n }\n }\n }\n textarea {\n resize: vertical;\n }\n ::-webkit-search-decoration {\n -webkit-appearance: none;\n }\n ::-webkit-date-and-time-value {\n min-height: 1lh;\n text-align: inherit;\n }\n ::-webkit-datetime-edit {\n display: inline-flex;\n }\n ::-webkit-datetime-edit-fields-wrapper {\n padding: 0;\n }\n ::-webkit-datetime-edit, ::-webkit-datetime-edit-year-field, ::-webkit-datetime-edit-month-field, ::-webkit-datetime-edit-day-field, ::-webkit-datetime-edit-hour-field, ::-webkit-datetime-edit-minute-field, ::-webkit-datetime-edit-second-field, ::-webkit-datetime-edit-millisecond-field, ::-webkit-datetime-edit-meridiem-field {\n padding-block: 0;\n }\n ::-webkit-calendar-picker-indicator {\n line-height: 1;\n }\n :-moz-ui-invalid {\n box-shadow: none;\n }\n button, input:where([type=\"button\"], [type=\"reset\"], [type=\"submit\"]), ::file-selector-button {\n appearance: button;\n }\n ::-webkit-inner-spin-button, ::-webkit-outer-spin-button {\n height: auto;\n }\n [hidden]:where(:not([hidden=\"until-found\"])) {\n display: none !important;\n }\n}\n@layer utilities {\n .fixed {\n position: fixed;\n }\n .relative {\n position: relative;\n }\n .sticky {\n position: sticky;\n }\n .top-0 {\n top: calc(var(--spacing) * 0);\n }\n .z-10 {\n z-index: 10;\n }\n .container {\n width: 100%;\n @media (width >= 40rem) {\n max-width: 40rem;\n }\n @media (width >= 48rem) {\n max-width: 48rem;\n }\n @media (width >= 64rem) {\n max-width: 64rem;\n }\n @media (width >= 80rem) {\n max-width: 80rem;\n }\n @media (width >= 96rem) {\n max-width: 96rem;\n }\n }\n .mx-auto {\n margin-inline: auto;\n }\n .my-1 {\n margin-block: calc(var(--spacing) * 1);\n }\n .mt-0\\.5 {\n margin-top: calc(var(--spacing) * 0.5);\n }\n .mt-2 {\n margin-top: calc(var(--spacing) * 2);\n }\n .block {\n display: block;\n }\n .flex {\n display: flex;\n }\n .grid {\n display: grid;\n }\n .inline {\n display: inline;\n }\n .size-2 {\n width: calc(var(--spacing) * 2);\n height: calc(var(--spacing) * 2);\n }\n .size-5 {\n width: calc(var(--spacing) * 5);\n height: calc(var(--spacing) * 5);\n }\n .h-10 {\n height: calc(var(--spacing) * 10);\n }\n .h-full {\n height: 100%;\n }\n .h-px {\n height: 1px;\n }\n .w-10 {\n width: calc(var(--spacing) * 10);\n }\n .w-\\[320px\\] {\n width: 320px;\n }\n .w-full {\n width: 100%;\n }\n .min-w-0 {\n min-width: calc(var(--spacing) * 0);\n }\n .shrink-0 {\n flex-shrink: 0;\n }\n .resize {\n resize: both;\n }\n .flex-col {\n flex-direction: column;\n }\n .flex-wrap {\n flex-wrap: wrap;\n }\n .items-center {\n align-items: center;\n }\n .justify-between {\n justify-content: space-between;\n }\n .justify-center {\n justify-content: center;\n }\n .gap-1 {\n gap: calc(var(--spacing) * 1);\n }\n .gap-2\\.5 {\n gap: calc(var(--spacing) * 2.5);\n }\n .gap-4 {\n gap: calc(var(--spacing) * 4);\n }\n .gap-x-3 {\n column-gap: calc(var(--spacing) * 3);\n }\n .gap-y-0\\.5 {\n row-gap: calc(var(--spacing) * 0.5);\n }\n .truncate {\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n }\n .overflow-hidden {\n overflow: hidden;\n }\n .rounded-full {\n border-radius: calc(infinity * 1px);\n }\n .rounded-lg {\n border-radius: var(--radius-lg);\n }\n .border {\n border-style: var(--tw-border-style);\n border-width: 1px;\n }\n .border-t {\n border-top-style: var(--tw-border-style);\n border-top-width: 1px;\n }\n .border-gray-100 {\n border-color: var(--color-gray-100);\n }\n .border-gray-200 {\n border-color: var(--color-gray-200);\n }\n .border-gray-200\\/80 {\n border-color: color-mix(in srgb, oklch(92.8% 0.006 264.531) 80%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n border-color: color-mix(in oklab, var(--color-gray-200) 80%, transparent);\n }\n }\n .bg-gray-100 {\n background-color: var(--color-gray-100);\n }\n .bg-gray-200 {\n background-color: var(--color-gray-200);\n }\n .bg-white {\n background-color: var(--color-white);\n }\n .bg-white\\/95 {\n background-color: color-mix(in srgb, #fff 95%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--color-white) 95%, transparent);\n }\n }\n .px-3 {\n padding-inline: calc(var(--spacing) * 3);\n }\n .py-1 {\n padding-block: calc(var(--spacing) * 1);\n }\n .py-1\\.5 {\n padding-block: calc(var(--spacing) * 1.5);\n }\n .pt-2\\.5 {\n padding-top: calc(var(--spacing) * 2.5);\n }\n .pt-3 {\n padding-top: calc(var(--spacing) * 3);\n }\n .pb-2 {\n padding-bottom: calc(var(--spacing) * 2);\n }\n .pb-3 {\n padding-bottom: calc(var(--spacing) * 3);\n }\n .pl-4\\.5 {\n padding-left: calc(var(--spacing) * 4.5);\n }\n .text-center {\n text-align: center;\n }\n .text-sm {\n font-size: var(--text-sm);\n line-height: var(--tw-leading, var(--text-sm--line-height));\n }\n .text-xs {\n font-size: var(--text-xs);\n line-height: var(--tw-leading, var(--text-xs--line-height));\n }\n .font-medium {\n --tw-font-weight: var(--font-weight-medium);\n font-weight: var(--font-weight-medium);\n }\n .font-normal {\n --tw-font-weight: var(--font-weight-normal);\n font-weight: var(--font-weight-normal);\n }\n .font-semibold {\n --tw-font-weight: var(--font-weight-semibold);\n font-weight: var(--font-weight-semibold);\n }\n .whitespace-nowrap {\n white-space: nowrap;\n }\n .text-gray-400 {\n color: var(--color-gray-400);\n }\n .text-gray-500 {\n color: var(--color-gray-500);\n }\n .text-red-500 {\n color: var(--color-red-500);\n }\n .text-slate-400 {\n color: var(--color-slate-400);\n }\n .text-slate-500 {\n color: var(--color-slate-500);\n }\n .text-slate-600 {\n color: var(--color-slate-600);\n }\n .text-slate-700 {\n color: var(--color-slate-700);\n }\n .text-slate-900 {\n color: var(--color-slate-900);\n }\n .text-zinc-400 {\n color: var(--color-zinc-400);\n }\n .italic {\n font-style: italic;\n }\n .tabular-nums {\n --tw-numeric-spacing: tabular-nums;\n font-variant-numeric: var(--tw-ordinal,) var(--tw-slashed-zero,) var(--tw-numeric-figure,) var(--tw-numeric-spacing,) var(--tw-numeric-fraction,);\n }\n .opacity-70 {\n opacity: 70%;\n }\n .shadow-sm {\n --tw-shadow: 0 1px 3px 0 var(--tw-shadow-color, rgb(0 0 0 / 0.1)), 0 1px 2px -1px var(--tw-shadow-color, rgb(0 0 0 / 0.1));\n box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);\n }\n .shadow-xl {\n --tw-shadow: 0 20px 25px -5px var(--tw-shadow-color, rgb(0 0 0 / 0.1)), 0 8px 10px -6px var(--tw-shadow-color, rgb(0 0 0 / 0.1));\n box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);\n }\n .ring-1 {\n --tw-ring-shadow: var(--tw-ring-inset,) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color, currentcolor);\n box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);\n }\n .ring-black\\/5 {\n --tw-ring-color: color-mix(in srgb, #000 5%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n --tw-ring-color: color-mix(in oklab, var(--color-black) 5%, transparent);\n }\n }\n .ring-gray-200\\/40 {\n --tw-ring-color: color-mix(in srgb, oklch(92.8% 0.006 264.531) 40%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n --tw-ring-color: color-mix(in oklab, var(--color-gray-200) 40%, transparent);\n }\n }\n .filter {\n 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,);\n }\n .backdrop-blur-sm {\n --tw-backdrop-blur: blur(var(--blur-sm));\n -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,);\n 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,);\n }\n .transition-colors {\n transition-property: color, background-color, border-color, outline-color, text-decoration-color, fill, stroke, --tw-gradient-from, --tw-gradient-via, --tw-gradient-to;\n transition-timing-function: var(--tw-ease, var(--default-transition-timing-function));\n transition-duration: var(--tw-duration, var(--default-transition-duration));\n }\n .hover\\:bg-slate-50 {\n &:hover {\n @media (hover: hover) {\n background-color: var(--color-slate-50);\n }\n }\n }\n .dark\\:border-white\\/5 {\n &:where(.dark, .dark *) {\n border-color: color-mix(in srgb, #fff 5%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n border-color: color-mix(in oklab, var(--color-white) 5%, transparent);\n }\n }\n }\n .dark\\:border-white\\/10 {\n &:where(.dark, .dark *) {\n border-color: color-mix(in srgb, #fff 10%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n border-color: color-mix(in oklab, var(--color-white) 10%, transparent);\n }\n }\n }\n .dark\\:bg-white\\/15 {\n &:where(.dark, .dark *) {\n background-color: color-mix(in srgb, #fff 15%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--color-white) 15%, transparent);\n }\n }\n }\n .dark\\:bg-zinc-800 {\n &:where(.dark, .dark *) {\n background-color: var(--color-zinc-800);\n }\n }\n .dark\\:bg-zinc-900 {\n &:where(.dark, .dark *) {\n background-color: var(--color-zinc-900);\n }\n }\n .dark\\:bg-zinc-900\\/95 {\n &:where(.dark, .dark *) {\n background-color: color-mix(in srgb, oklch(21% 0.006 285.885) 95%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--color-zinc-900) 95%, transparent);\n }\n }\n }\n .dark\\:text-gray-400 {\n &:where(.dark, .dark *) {\n color: var(--color-gray-400);\n }\n }\n .dark\\:text-gray-500 {\n &:where(.dark, .dark *) {\n color: var(--color-gray-500);\n }\n }\n .dark\\:text-slate-100 {\n &:where(.dark, .dark *) {\n color: var(--color-slate-100);\n }\n }\n .dark\\:text-slate-200 {\n &:where(.dark, .dark *) {\n color: var(--color-slate-200);\n }\n }\n .dark\\:text-slate-300 {\n &:where(.dark, .dark *) {\n color: var(--color-slate-300);\n }\n }\n .dark\\:text-slate-400 {\n &:where(.dark, .dark *) {\n color: var(--color-slate-400);\n }\n }\n .dark\\:text-white {\n &:where(.dark, .dark *) {\n color: var(--color-white);\n }\n }\n .dark\\:ring-white\\/10 {\n &:where(.dark, .dark *) {\n --tw-ring-color: color-mix(in srgb, #fff 10%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n --tw-ring-color: color-mix(in oklab, var(--color-white) 10%, transparent);\n }\n }\n }\n .dark\\:ring-zinc-800\\/40 {\n &:where(.dark, .dark *) {\n --tw-ring-color: color-mix(in srgb, oklch(27.4% 0.006 286.033) 40%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n --tw-ring-color: color-mix(in oklab, var(--color-zinc-800) 40%, transparent);\n }\n }\n }\n .dark\\:hover\\:bg-white\\/5 {\n &:where(.dark, .dark *) {\n &:hover {\n @media (hover: hover) {\n background-color: color-mix(in srgb, #fff 5%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--color-white) 5%, transparent);\n }\n }\n }\n }\n }\n}\n.uplot, .uplot *, .uplot *::before, .uplot *::after {\n box-sizing: border-box;\n}\n.uplot {\n font-family: system-ui, -apple-system, \"Segoe UI\", Roboto, \"Helvetica Neue\", Arial, \"Noto Sans\", sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\", \"Noto Color Emoji\";\n line-height: 1.5;\n width: min-content;\n}\n.u-title {\n text-align: center;\n font-size: 18px;\n font-weight: bold;\n}\n.u-wrap {\n position: relative;\n user-select: none;\n}\n.u-over, .u-under {\n position: absolute;\n}\n.u-under {\n overflow: hidden;\n}\n.uplot canvas {\n display: block;\n position: relative;\n width: 100%;\n height: 100%;\n}\n.u-axis {\n position: absolute;\n}\n.u-legend {\n font-size: 14px;\n margin: auto;\n text-align: center;\n}\n.u-inline {\n display: block;\n}\n.u-inline * {\n display: inline-block;\n}\n.u-inline tr {\n margin-right: 16px;\n}\n.u-legend th {\n font-weight: 600;\n}\n.u-legend th > * {\n vertical-align: middle;\n display: inline-block;\n}\n.u-legend .u-marker {\n width: 1em;\n height: 1em;\n margin-right: 4px;\n background-clip: padding-box !important;\n}\n.u-inline.u-live th::after {\n content: \":\";\n vertical-align: middle;\n}\n.u-inline:not(.u-live) .u-value {\n display: none;\n}\n.u-series > * {\n padding: 4px;\n}\n.u-series th {\n cursor: pointer;\n}\n.u-legend .u-off > * {\n opacity: 0.3;\n}\n.u-select {\n background: rgba(0,0,0,0.07);\n position: absolute;\n pointer-events: none;\n}\n.u-cursor-x, .u-cursor-y {\n position: absolute;\n left: 0;\n top: 0;\n pointer-events: none;\n will-change: transform;\n}\n.u-hz .u-cursor-x, .u-vt .u-cursor-y {\n height: 100%;\n border-right: 1px dashed #607D8B;\n}\n.u-hz .u-cursor-y, .u-vt .u-cursor-x {\n width: 100%;\n border-bottom: 1px dashed #607D8B;\n}\n.u-cursor-pt {\n position: absolute;\n top: 0;\n left: 0;\n border-radius: 50%;\n border: 0 solid;\n pointer-events: none;\n will-change: transform;\n background-clip: padding-box !important;\n}\n.u-axis.u-off, .u-select.u-off, .u-cursor-x.u-off, .u-cursor-y.u-off, .u-cursor-pt.u-off {\n display: none;\n}\n@property --tw-border-style {\n syntax: \"*\";\n inherits: false;\n initial-value: solid;\n}\n@property --tw-font-weight {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-ordinal {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-slashed-zero {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-numeric-figure {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-numeric-spacing {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-numeric-fraction {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-shadow {\n syntax: \"*\";\n inherits: false;\n initial-value: 0 0 #0000;\n}\n@property --tw-shadow-color {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-shadow-alpha {\n syntax: \"<percentage>\";\n inherits: false;\n initial-value: 100%;\n}\n@property --tw-inset-shadow {\n syntax: \"*\";\n inherits: false;\n initial-value: 0 0 #0000;\n}\n@property --tw-inset-shadow-color {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-inset-shadow-alpha {\n syntax: \"<percentage>\";\n inherits: false;\n initial-value: 100%;\n}\n@property --tw-ring-color {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-ring-shadow {\n syntax: \"*\";\n inherits: false;\n initial-value: 0 0 #0000;\n}\n@property --tw-inset-ring-color {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-inset-ring-shadow {\n syntax: \"*\";\n inherits: false;\n initial-value: 0 0 #0000;\n}\n@property --tw-ring-inset {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-ring-offset-width {\n syntax: \"<length>\";\n inherits: false;\n initial-value: 0px;\n}\n@property --tw-ring-offset-color {\n syntax: \"*\";\n inherits: false;\n initial-value: #fff;\n}\n@property --tw-ring-offset-shadow {\n syntax: \"*\";\n inherits: false;\n initial-value: 0 0 #0000;\n}\n@property --tw-blur {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-brightness {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-contrast {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-grayscale {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-hue-rotate {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-invert {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-opacity {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-saturate {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-sepia {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-drop-shadow {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-drop-shadow-color {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-drop-shadow-alpha {\n syntax: \"<percentage>\";\n inherits: false;\n initial-value: 100%;\n}\n@property --tw-drop-shadow-size {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-backdrop-blur {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-backdrop-brightness {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-backdrop-contrast {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-backdrop-grayscale {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-backdrop-hue-rotate {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-backdrop-invert {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-backdrop-opacity {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-backdrop-saturate {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-backdrop-sepia {\n syntax: \"*\";\n inherits: false;\n}\n@layer properties {\n @supports ((-webkit-hyphens: none) and (not (margin-trim: inline))) or ((-moz-orient: inline) and (not (color:rgb(from red r g b)))) {\n *, ::before, ::after, ::backdrop {\n --tw-border-style: solid;\n --tw-font-weight: initial;\n --tw-ordinal: initial;\n --tw-slashed-zero: initial;\n --tw-numeric-figure: initial;\n --tw-numeric-spacing: initial;\n --tw-numeric-fraction: initial;\n --tw-shadow: 0 0 #0000;\n --tw-shadow-color: initial;\n --tw-shadow-alpha: 100%;\n --tw-inset-shadow: 0 0 #0000;\n --tw-inset-shadow-color: initial;\n --tw-inset-shadow-alpha: 100%;\n --tw-ring-color: initial;\n --tw-ring-shadow: 0 0 #0000;\n --tw-inset-ring-color: initial;\n --tw-inset-ring-shadow: 0 0 #0000;\n --tw-ring-inset: initial;\n --tw-ring-offset-width: 0px;\n --tw-ring-offset-color: #fff;\n --tw-ring-offset-shadow: 0 0 #0000;\n --tw-blur: initial;\n --tw-brightness: initial;\n --tw-contrast: initial;\n --tw-grayscale: initial;\n --tw-hue-rotate: initial;\n --tw-invert: initial;\n --tw-opacity: initial;\n --tw-saturate: initial;\n --tw-sepia: initial;\n --tw-drop-shadow: initial;\n --tw-drop-shadow-color: initial;\n --tw-drop-shadow-alpha: 100%;\n --tw-drop-shadow-size: initial;\n --tw-backdrop-blur: initial;\n --tw-backdrop-brightness: initial;\n --tw-backdrop-contrast: initial;\n --tw-backdrop-grayscale: initial;\n --tw-backdrop-hue-rotate: initial;\n --tw-backdrop-invert: initial;\n --tw-backdrop-opacity: initial;\n --tw-backdrop-saturate: initial;\n --tw-backdrop-sepia: initial;\n }\n }\n}\n"],"mappings":"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","names":[]}
|
package/dist/index.d.mts
ADDED
|
@@ -0,0 +1,520 @@
|
|
|
1
|
+
import * as react_jsx_runtime from 'react/jsx-runtime';
|
|
2
|
+
import React$1, { ReactNode, PropsWithChildren } from 'react';
|
|
3
|
+
import { QueryClient, QueryClientConfig } from '@tanstack/react-query';
|
|
4
|
+
import { StringValue } from 'ms';
|
|
5
|
+
import uPlot from 'uplot';
|
|
6
|
+
|
|
7
|
+
type UnblindClientConfig = {
|
|
8
|
+
/**
|
|
9
|
+
* Base URL that client-side hooks will use.
|
|
10
|
+
* Should point to the host app endpoint that is proxied by middleware.
|
|
11
|
+
* Defaults to `/api/unblind`.
|
|
12
|
+
*/
|
|
13
|
+
apiBaseUrl: string;
|
|
14
|
+
/**
|
|
15
|
+
* Optional custom fetch implementation (for tests or advanced setups).
|
|
16
|
+
* When not provided, the global `fetch` will be used.
|
|
17
|
+
*/
|
|
18
|
+
fetchImpl?: typeof fetch;
|
|
19
|
+
};
|
|
20
|
+
type UnblindClientProviderProps = {
|
|
21
|
+
children: ReactNode;
|
|
22
|
+
/**
|
|
23
|
+
* Optional QueryClient instance. If not provided, a new one will be created.
|
|
24
|
+
* Useful if you already have a QueryClientProvider in your app and want to reuse it.
|
|
25
|
+
*/
|
|
26
|
+
queryClient?: QueryClient;
|
|
27
|
+
/**
|
|
28
|
+
* Optional QueryClientConfig. If not provided, a default one will be used.
|
|
29
|
+
* Useful if you already have a QueryClientProvider in your app and want to reuse it.
|
|
30
|
+
*/
|
|
31
|
+
queryClientConfig?: QueryClientConfig | undefined;
|
|
32
|
+
/**
|
|
33
|
+
* Optional API base URL override. Defaults to `/api/unblind`.
|
|
34
|
+
*/
|
|
35
|
+
apiBaseUrl?: string;
|
|
36
|
+
/**
|
|
37
|
+
* Optional custom fetch implementation (for tests or advanced setups).
|
|
38
|
+
*/
|
|
39
|
+
fetchImpl?: typeof fetch;
|
|
40
|
+
};
|
|
41
|
+
/**
|
|
42
|
+
* UnblindClientProvider sets up the QueryClientProvider (for React Query)
|
|
43
|
+
* and the Unblind client configuration context.
|
|
44
|
+
*
|
|
45
|
+
* @example
|
|
46
|
+
* ```tsx
|
|
47
|
+
* import { UnblindClientProvider } from '@unblind/react';
|
|
48
|
+
*
|
|
49
|
+
* function App() {
|
|
50
|
+
* return (
|
|
51
|
+
* <UnblindClientProvider apiBaseUrl="/api/unblind">
|
|
52
|
+
* <YourComponents />
|
|
53
|
+
* </UnblindClientProvider>
|
|
54
|
+
* );
|
|
55
|
+
* }
|
|
56
|
+
* ```
|
|
57
|
+
*/
|
|
58
|
+
declare function UnblindClientProvider({ children, queryClient: providedQueryClient, queryClientConfig: providedQueryClientConfig, apiBaseUrl, fetchImpl, }: UnblindClientProviderProps): react_jsx_runtime.JSX.Element;
|
|
59
|
+
/**
|
|
60
|
+
* Access the Unblind client configuration.
|
|
61
|
+
*
|
|
62
|
+
* @throws Error if called outside of an UnblindClientProvider.
|
|
63
|
+
* This ensures that QueryClientProvider is always available for hooks.
|
|
64
|
+
*/
|
|
65
|
+
declare function useUnblindClientConfig(): UnblindClientConfig;
|
|
66
|
+
/**
|
|
67
|
+
* Hook to refresh all timeseries data.
|
|
68
|
+
* Invalidates all queries with the 'unblind' and 'timeseries' keys,
|
|
69
|
+
* causing them to refetch automatically.
|
|
70
|
+
*
|
|
71
|
+
* @example
|
|
72
|
+
* ```tsx
|
|
73
|
+
* function Dashboard() {
|
|
74
|
+
* const refresh = useRefresh();
|
|
75
|
+
* return (
|
|
76
|
+
* <>
|
|
77
|
+
* <button onClick={() => refresh()}>Refresh</button>
|
|
78
|
+
* <TimeseriesChart metrics={["cpu"]} />
|
|
79
|
+
* </>
|
|
80
|
+
* );
|
|
81
|
+
* }
|
|
82
|
+
* ```
|
|
83
|
+
*/
|
|
84
|
+
declare function useRefresh(): () => Promise<void>;
|
|
85
|
+
|
|
86
|
+
interface TooltipItem {
|
|
87
|
+
metric: string | HTMLElement | undefined;
|
|
88
|
+
color: string;
|
|
89
|
+
value?: number;
|
|
90
|
+
formattedValue?: string;
|
|
91
|
+
attributes?: Record<string, any>;
|
|
92
|
+
}
|
|
93
|
+
interface TooltipProps {
|
|
94
|
+
timestamp: number;
|
|
95
|
+
items: TooltipItem[];
|
|
96
|
+
timeZone?: string;
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
/**
|
|
100
|
+
* Shared types for Unblind React library.
|
|
101
|
+
*/
|
|
102
|
+
|
|
103
|
+
type MetricType = "gauge" | "sum" | "histogram" | "summary" | "exphistogram";
|
|
104
|
+
/**
|
|
105
|
+
* Aggregation operators available for metric queries.
|
|
106
|
+
*/
|
|
107
|
+
type AggregationOperator = "avg" | "sum" | "max" | "min" | "p90" | "p99" | "p50";
|
|
108
|
+
/**
|
|
109
|
+
* Attribute filter with a specific value.
|
|
110
|
+
*/
|
|
111
|
+
interface AttributeWithValue {
|
|
112
|
+
name: string;
|
|
113
|
+
value: string;
|
|
114
|
+
}
|
|
115
|
+
/**
|
|
116
|
+
* Metric metadata returned by the API.
|
|
117
|
+
*/
|
|
118
|
+
interface MetricMetadata {
|
|
119
|
+
name: string;
|
|
120
|
+
description: string;
|
|
121
|
+
displayName?: string;
|
|
122
|
+
unit: {
|
|
123
|
+
code?: string;
|
|
124
|
+
name?: string;
|
|
125
|
+
synonym?: string;
|
|
126
|
+
category?: string;
|
|
127
|
+
};
|
|
128
|
+
type: MetricType;
|
|
129
|
+
operator?: AggregationOperator;
|
|
130
|
+
}
|
|
131
|
+
/**
|
|
132
|
+
* List of metric metadata.
|
|
133
|
+
*/
|
|
134
|
+
type MetricMetadataList = Array<MetricMetadata>;
|
|
135
|
+
/**
|
|
136
|
+
* A single time series data point.
|
|
137
|
+
*/
|
|
138
|
+
interface Serie {
|
|
139
|
+
metric: string;
|
|
140
|
+
attributes: Array<AttributeWithValue>;
|
|
141
|
+
values: Array<number>;
|
|
142
|
+
queryName?: string;
|
|
143
|
+
queryIndex: number;
|
|
144
|
+
isEmpty?: boolean;
|
|
145
|
+
}
|
|
146
|
+
/**
|
|
147
|
+
* Query definition for timeseries requests.
|
|
148
|
+
*/
|
|
149
|
+
interface TimeseriesQuery {
|
|
150
|
+
queryName?: string;
|
|
151
|
+
metrics: Array<string>;
|
|
152
|
+
groupBy?: Array<string>;
|
|
153
|
+
operator?: AggregationOperator;
|
|
154
|
+
attributes?: Partial<Record<string, Array<string>>>;
|
|
155
|
+
}
|
|
156
|
+
/**
|
|
157
|
+
* Chart types available
|
|
158
|
+
*/
|
|
159
|
+
type ChartType = "bar" | "line" | "area" | "step";
|
|
160
|
+
/**
|
|
161
|
+
* Time Range definition:
|
|
162
|
+
*
|
|
163
|
+
* e.g. 5secs, 4h, 3 days, and so on.
|
|
164
|
+
*/
|
|
165
|
+
type TimeRange = StringValue;
|
|
166
|
+
interface Log {
|
|
167
|
+
timestamp: number;
|
|
168
|
+
trace_id?: string;
|
|
169
|
+
span_id?: string;
|
|
170
|
+
severity_text: Severity;
|
|
171
|
+
attributes?: Record<string, string>;
|
|
172
|
+
service_name?: string;
|
|
173
|
+
body?: string;
|
|
174
|
+
}
|
|
175
|
+
/**
|
|
176
|
+
* Default paginated response structure
|
|
177
|
+
*/
|
|
178
|
+
type PaginatedResponse<T> = {
|
|
179
|
+
data: Array<T>;
|
|
180
|
+
next_page?: string;
|
|
181
|
+
};
|
|
182
|
+
/**
|
|
183
|
+
* Different severity values based on OTEL
|
|
184
|
+
* https://opentelemetry.io/docs/specs/otel/logs/data-model/#field-severitytext
|
|
185
|
+
*/
|
|
186
|
+
type Severity = "TRACE" | "DEBUG" | "INFO" | "WARN" | "ERROR" | "FATAL";
|
|
187
|
+
type Colors = Array<string> | ((serie: Serie, index: number) => string);
|
|
188
|
+
/**
|
|
189
|
+
* Interval expressed in milliseconds.
|
|
190
|
+
*/
|
|
191
|
+
type Interval = number;
|
|
192
|
+
type TimeConfig = {
|
|
193
|
+
/**
|
|
194
|
+
* Optional time range. If not provided, will use timeRange from the provider.
|
|
195
|
+
* Ignored if startTime and endTime are provided.
|
|
196
|
+
*/
|
|
197
|
+
timeRange?: TimeRange;
|
|
198
|
+
/**
|
|
199
|
+
* Optional start time (Unix timestamp in milliseconds).
|
|
200
|
+
* If provided along with endTime, takes priority over timeRange.
|
|
201
|
+
*/
|
|
202
|
+
startTime?: number;
|
|
203
|
+
/**
|
|
204
|
+
* Optional end time (Unix timestamp in milliseconds).
|
|
205
|
+
* If provided along with startTime, takes priority over timeRange.
|
|
206
|
+
*/
|
|
207
|
+
endTime?: number;
|
|
208
|
+
};
|
|
209
|
+
/**
|
|
210
|
+
* Base query configuration for timeseries data.
|
|
211
|
+
* Used across components and providers.
|
|
212
|
+
*/
|
|
213
|
+
type TimeseriesQueryConfig = TimeConfig & {
|
|
214
|
+
/**
|
|
215
|
+
* Optional interval in milliseconds. If not provided, will use interval from the provider.
|
|
216
|
+
*/
|
|
217
|
+
interval?: Interval;
|
|
218
|
+
/**
|
|
219
|
+
* Optional attributes filter. If not provided, will use attributes from the provider.
|
|
220
|
+
*/
|
|
221
|
+
attributes?: Record<string, Array<string>>;
|
|
222
|
+
/**
|
|
223
|
+
* Optional groupBy. If not provided, will use groupBy from the provider.
|
|
224
|
+
*/
|
|
225
|
+
groupBy?: Array<string>;
|
|
226
|
+
/**
|
|
227
|
+
* Optional aggregation operator. If not provided, will use the operator from the provider.
|
|
228
|
+
*/
|
|
229
|
+
operator?: AggregationOperator;
|
|
230
|
+
};
|
|
231
|
+
/**
|
|
232
|
+
* Visual/presentation configuration for charts.
|
|
233
|
+
*/
|
|
234
|
+
interface ChartVisualConfig {
|
|
235
|
+
/**
|
|
236
|
+
* Optional color configuration
|
|
237
|
+
*/
|
|
238
|
+
colors?: Colors;
|
|
239
|
+
/**
|
|
240
|
+
* Optional order for rendering results.
|
|
241
|
+
* Defaults to false
|
|
242
|
+
*/
|
|
243
|
+
orderByValues?: boolean;
|
|
244
|
+
}
|
|
245
|
+
/**
|
|
246
|
+
* Appearance configuration for Unblind components.
|
|
247
|
+
*
|
|
248
|
+
* Allows consumers to override internal UI components used for
|
|
249
|
+
* loading, empty, and error states.
|
|
250
|
+
*
|
|
251
|
+
* Overrides can be provided globally via UnblindScope or
|
|
252
|
+
* locally per component.
|
|
253
|
+
*
|
|
254
|
+
* This API customizes presentation only; component state and data
|
|
255
|
+
* fetching logic remain internal.
|
|
256
|
+
*/
|
|
257
|
+
type Appearance = {
|
|
258
|
+
components?: {
|
|
259
|
+
Loading?: React.ComponentType;
|
|
260
|
+
Error?: React.ComponentType;
|
|
261
|
+
Empty?: React.ComponentType;
|
|
262
|
+
Tooltip?: React.ComponentType<TooltipProps>;
|
|
263
|
+
};
|
|
264
|
+
} & ChartVisualConfig;
|
|
265
|
+
type TimeseriesProps = TimeseriesQueryConfig & {
|
|
266
|
+
/**
|
|
267
|
+
* Array of metric names to display in the chart.
|
|
268
|
+
*/
|
|
269
|
+
metrics: Array<string>;
|
|
270
|
+
};
|
|
271
|
+
|
|
272
|
+
type UnblindScopeConfig = TimeseriesQueryConfig & {
|
|
273
|
+
/**
|
|
274
|
+
* Optional appearance configuration for all components
|
|
275
|
+
* within this scope.
|
|
276
|
+
*
|
|
277
|
+
* Use this to globally override UI components such as loading,
|
|
278
|
+
* or error states.
|
|
279
|
+
*
|
|
280
|
+
* Local overrides passed directly to a component take
|
|
281
|
+
* precedence over this configuration.
|
|
282
|
+
*
|
|
283
|
+
* @example
|
|
284
|
+
* ```tsx
|
|
285
|
+
* <UnblindScope
|
|
286
|
+
* appearance={{
|
|
287
|
+
* components: {
|
|
288
|
+
* Loading: CustomLoading,
|
|
289
|
+
* Error: CustomError,
|
|
290
|
+
* },
|
|
291
|
+
* }}
|
|
292
|
+
* >
|
|
293
|
+
* <App />
|
|
294
|
+
* </UnblindScope>
|
|
295
|
+
* ```
|
|
296
|
+
*/
|
|
297
|
+
appearance?: Appearance;
|
|
298
|
+
};
|
|
299
|
+
type UnblindScopeProps = UnblindScopeConfig & PropsWithChildren;
|
|
300
|
+
/**
|
|
301
|
+
* UnblindScope provides scoped configuration for all Unblind components (charts, logs, etc).
|
|
302
|
+
* This includes default time ranges, intervals, attributes, groupBy, operator, appearance, and colors.
|
|
303
|
+
*
|
|
304
|
+
* When nested, child scopes inherit defaults from parent scopes and can override specific values.
|
|
305
|
+
* This allows you to set global defaults (like appearance) at the top level and override
|
|
306
|
+
* settings (like timeRange) in nested scopes.
|
|
307
|
+
*
|
|
308
|
+
* @example
|
|
309
|
+
* ```tsx
|
|
310
|
+
* import { UnblindScope } from '@unblind/react';
|
|
311
|
+
*
|
|
312
|
+
* function App() {
|
|
313
|
+
* return (
|
|
314
|
+
* <UnblindScope
|
|
315
|
+
* appearance={{ components: { Loading: CustomLoading } }}
|
|
316
|
+
* timeRange="24h"
|
|
317
|
+
* >
|
|
318
|
+
* // Components here use 24h and CustomLoading
|
|
319
|
+
*
|
|
320
|
+
* <UnblindScope timeRange="1h">
|
|
321
|
+
* // Components here use 1h but still inherit CustomLoading
|
|
322
|
+
* </UnblindScope>
|
|
323
|
+
* </UnblindScope>
|
|
324
|
+
* );
|
|
325
|
+
* }
|
|
326
|
+
* ```
|
|
327
|
+
*/
|
|
328
|
+
declare function UnblindScope({ children, timeRange, startTime, endTime, interval, attributes, groupBy, operator, appearance, }: UnblindScopeProps): react_jsx_runtime.JSX.Element;
|
|
329
|
+
type UseScopeReturn = TimeseriesQueryConfig & {
|
|
330
|
+
timeRange: TimeRange;
|
|
331
|
+
appearance: {
|
|
332
|
+
components: {
|
|
333
|
+
Loading: React$1.ComponentType;
|
|
334
|
+
Error: React$1.ComponentType;
|
|
335
|
+
Empty: React$1.ComponentType;
|
|
336
|
+
Tooltip?: React$1.ComponentType<TooltipProps>;
|
|
337
|
+
};
|
|
338
|
+
colors: Colors;
|
|
339
|
+
orderByValues?: boolean;
|
|
340
|
+
};
|
|
341
|
+
};
|
|
342
|
+
/**
|
|
343
|
+
* Hook to access the scoped configuration from UnblindScope.
|
|
344
|
+
* Returns all configuration including time range, attributes,
|
|
345
|
+
* groupBy, operator, colors, and UI components.
|
|
346
|
+
*
|
|
347
|
+
* @example
|
|
348
|
+
* ```tsx
|
|
349
|
+
* function MyChart() {
|
|
350
|
+
* const { timeRange, colors, appearance } = useScope();
|
|
351
|
+
* // Use configuration...
|
|
352
|
+
* }
|
|
353
|
+
* ```
|
|
354
|
+
*/
|
|
355
|
+
declare function useScope(): UseScopeReturn;
|
|
356
|
+
|
|
357
|
+
type UnblindProviderProps = UnblindClientProviderProps & UnblindScopeProps & PropsWithChildren;
|
|
358
|
+
/**
|
|
359
|
+
* UnblindProvider is required for all Unblind hooks to work.
|
|
360
|
+
* It sets up both the QueryClientProvider (for React Query) and the Unblind configuration context.
|
|
361
|
+
* This is a convenience wrapper around UnblindClientProvider and UnblindScope.
|
|
362
|
+
*
|
|
363
|
+
* @example
|
|
364
|
+
* ```tsx
|
|
365
|
+
* import { UnblindProvider } from '@unblind/react';
|
|
366
|
+
*
|
|
367
|
+
* function App() {
|
|
368
|
+
* return (
|
|
369
|
+
* <UnblindProvider apiBaseUrl="/api/unblind">
|
|
370
|
+
* <YourComponents />
|
|
371
|
+
* </UnblindProvider>
|
|
372
|
+
* );
|
|
373
|
+
* }
|
|
374
|
+
* ```
|
|
375
|
+
*/
|
|
376
|
+
declare function UnblindProvider({ children, queryClient, apiBaseUrl, fetchImpl, timeRange, startTime, endTime, interval, attributes, groupBy, operator, appearance, }: UnblindProviderProps): react_jsx_runtime.JSX.Element;
|
|
377
|
+
|
|
378
|
+
interface UseMetricsReturn {
|
|
379
|
+
list: MetricMetadataList | undefined;
|
|
380
|
+
isLoading: boolean;
|
|
381
|
+
hasError: boolean;
|
|
382
|
+
refetch: () => void;
|
|
383
|
+
}
|
|
384
|
+
/**
|
|
385
|
+
* Hook to fetch the list of available metrics metadata.
|
|
386
|
+
*
|
|
387
|
+
* @returns Object containing the metrics list, loading state, error state, and refetch function.
|
|
388
|
+
*/
|
|
389
|
+
declare function useMetrics(): UseMetricsReturn;
|
|
390
|
+
|
|
391
|
+
interface UseTimeseriesParams extends Pick<TimeseriesQueryConfig, "timeRange" | "startTime" | "endTime" | "interval"> {
|
|
392
|
+
/**
|
|
393
|
+
* Array of queries to execute.
|
|
394
|
+
*/
|
|
395
|
+
queries: Array<TimeseriesQuery>;
|
|
396
|
+
}
|
|
397
|
+
interface UseTimeseriesReturn {
|
|
398
|
+
data: {
|
|
399
|
+
series: Serie[];
|
|
400
|
+
times: number[];
|
|
401
|
+
metadata: Record<string, MetricMetadata>;
|
|
402
|
+
};
|
|
403
|
+
isLoading: boolean;
|
|
404
|
+
isFetching: boolean;
|
|
405
|
+
hasError: boolean;
|
|
406
|
+
refetch: () => void;
|
|
407
|
+
}
|
|
408
|
+
/**
|
|
409
|
+
* Hook to fetch timeseries data for metrics.
|
|
410
|
+
*
|
|
411
|
+
* @param params - Configuration object with queries, and either timeRange or startTime/endTime, plus optional interval.
|
|
412
|
+
* @returns Object containing timeseries data, loading states, and error state.
|
|
413
|
+
*/
|
|
414
|
+
declare function useTimeseries({ queries, timeRange, startTime, endTime, interval, }: UseTimeseriesParams): UseTimeseriesReturn;
|
|
415
|
+
|
|
416
|
+
interface Usage {
|
|
417
|
+
date: string;
|
|
418
|
+
metrics: {
|
|
419
|
+
units: number;
|
|
420
|
+
};
|
|
421
|
+
logs: {
|
|
422
|
+
bytes: number;
|
|
423
|
+
units: number;
|
|
424
|
+
};
|
|
425
|
+
}
|
|
426
|
+
type UseUsageParams = TimeConfig;
|
|
427
|
+
interface UseUsageReturn {
|
|
428
|
+
usage: Array<Usage>;
|
|
429
|
+
isLoading: boolean;
|
|
430
|
+
hasError: boolean;
|
|
431
|
+
refetch: () => void;
|
|
432
|
+
}
|
|
433
|
+
/**
|
|
434
|
+
* Hook to fetch usage data.
|
|
435
|
+
*
|
|
436
|
+
* @param params - Configuration object with optional timeRange.
|
|
437
|
+
* @returns Object containing usage data, loading state, and error state.
|
|
438
|
+
*/
|
|
439
|
+
declare function useUsage({ timeRange, startTime, endTime, }: UseUsageParams): UseUsageReturn;
|
|
440
|
+
|
|
441
|
+
type UseLogsParams = {
|
|
442
|
+
/**
|
|
443
|
+
* Array of filters to apply to the logs query.
|
|
444
|
+
*/
|
|
445
|
+
filters: Array<AttributeWithValue>;
|
|
446
|
+
} & TimeConfig;
|
|
447
|
+
interface UseLogsReturn {
|
|
448
|
+
logs: Array<Log>;
|
|
449
|
+
isLoading: boolean;
|
|
450
|
+
hasError: boolean;
|
|
451
|
+
hasNextPage: boolean;
|
|
452
|
+
fetchNextPage: () => void;
|
|
453
|
+
isFetchingNextPage: boolean;
|
|
454
|
+
refetch: () => void;
|
|
455
|
+
}
|
|
456
|
+
/**
|
|
457
|
+
* Hook to fetch logs data with infinite scroll pagination.
|
|
458
|
+
*
|
|
459
|
+
* @param params - Configuration object with timeRange and filters.
|
|
460
|
+
* @returns Object containing logs data, loading states, and pagination controls.
|
|
461
|
+
*/
|
|
462
|
+
declare function useLogs({ timeRange, filters, startTime, endTime, }: UseLogsParams): UseLogsReturn;
|
|
463
|
+
|
|
464
|
+
declare function useTheme(): boolean;
|
|
465
|
+
|
|
466
|
+
type TimeseriesChartProps = TimeseriesProps & {
|
|
467
|
+
/**
|
|
468
|
+
* Chart type. Defaults to "line".
|
|
469
|
+
*/
|
|
470
|
+
type?: ChartType;
|
|
471
|
+
/**
|
|
472
|
+
* Optional className for the chart container.
|
|
473
|
+
*/
|
|
474
|
+
className?: string;
|
|
475
|
+
/**
|
|
476
|
+
* Optional appearance configuration for this chart
|
|
477
|
+
*/
|
|
478
|
+
appearance?: Appearance;
|
|
479
|
+
};
|
|
480
|
+
/**
|
|
481
|
+
* TimeseriesChart component that displays time series data for the given metrics.
|
|
482
|
+
* It uses values from the UnblindProvider for timeRange, attributes, groupBy, and operator
|
|
483
|
+
* if not explicitly provided as props.
|
|
484
|
+
*
|
|
485
|
+
* @example Using [UnblindProvider]
|
|
486
|
+
* ```tsx
|
|
487
|
+
* <UnblindProvider timeRange="1h">
|
|
488
|
+
* <TimeseriesChart metrics={["host.cpu"]} />
|
|
489
|
+
* <TimeseriesChart metrics={["host.memory"]} />
|
|
490
|
+
* </UnblindProvider>
|
|
491
|
+
* ```
|
|
492
|
+
*
|
|
493
|
+
* @example Using <UnblindScope>
|
|
494
|
+
* ```tsx
|
|
495
|
+
* <UnblindScope timeRange="1h">
|
|
496
|
+
* <TimeseriesChart metrics={["host.cpu"]} />
|
|
497
|
+
* <TimeseriesChart metrics={["host.memory"]} />
|
|
498
|
+
* </UnblindScope>
|
|
499
|
+
* ```
|
|
500
|
+
*/
|
|
501
|
+
declare function TimeseriesChart({ metrics, operator: propOperator, attributes: propAttributes, groupBy: propGroupBy, timeRange: propTimeRange, startTime: propStartTime, endTime: propEndTime, interval: propInterval, type, className, appearance: propAppearance, }: TimeseriesChartProps): react_jsx_runtime.JSX.Element;
|
|
502
|
+
|
|
503
|
+
interface ChartProps extends ChartVisualConfig {
|
|
504
|
+
times: Array<number>;
|
|
505
|
+
series: Serie[];
|
|
506
|
+
metadata: Record<string, MetricMetadata>;
|
|
507
|
+
type: "bar" | "line" | "area" | "step";
|
|
508
|
+
className?: string;
|
|
509
|
+
timeZone?: string;
|
|
510
|
+
options?: uPlot.Options;
|
|
511
|
+
tooltipAppearance?: React.ComponentType<TooltipProps>;
|
|
512
|
+
}
|
|
513
|
+
/**
|
|
514
|
+
* Renders a chart for time series data
|
|
515
|
+
*/
|
|
516
|
+
declare function Chart(props: ChartProps): react_jsx_runtime.JSX.Element;
|
|
517
|
+
|
|
518
|
+
declare function Divider({ className, ...props }: React$1.ComponentPropsWithoutRef<"hr">): react_jsx_runtime.JSX.Element;
|
|
519
|
+
|
|
520
|
+
export { type AggregationOperator, type Appearance, type AttributeWithValue, Chart, type ChartProps, type ChartType, type ChartVisualConfig, type Colors, Divider, type Interval, type Log, type MetricMetadata, type MetricMetadataList, type MetricType, type PaginatedResponse, type Serie, type Severity, type TimeConfig, type TimeRange, TimeseriesChart, type TimeseriesChartProps, type TimeseriesProps, type TimeseriesQuery, type TimeseriesQueryConfig, type TooltipProps, type UnblindClientConfig, UnblindClientProvider, type UnblindClientProviderProps, UnblindProvider, type UnblindProviderProps, UnblindScope, type UnblindScopeConfig, type UnblindScopeProps, type Usage, type UseLogsParams, type UseLogsReturn, type UseMetricsReturn, type UseScopeReturn, type UseTimeseriesParams, type UseTimeseriesReturn, type UseUsageParams, type UseUsageReturn, useLogs, useMetrics, useRefresh, useScope, useTheme, useTimeseries, useUnblindClientConfig, useUsage };
|