@luxonis/visualizer-protobuf 2.44.0 → 2.45.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.
Files changed (101) hide show
  1. package/dist/{FoxgloveServer-C39Uooyk.js → FoxgloveServer-DNo9aiV3.js} +1 -1
  2. package/dist/{communicator-Rs8pk0Io.js → communicator-DfQQWnlO.js} +2 -1
  3. package/dist/{deserialization.worker-BKq1x9xw.js → deserialization.worker-y8Hqp0K3.js} +4 -4
  4. package/dist/encoding-DqlhpFR2.js +20 -0
  5. package/dist/{foxglove-protocol-CYoMweAY.js → foxglove-protocol-DUzk1IXN.js} +1 -1
  6. package/dist/{index-CJ9fIZ-J.js → index-B5MQNBC-.js} +8 -7
  7. package/dist/{index-aUJRZxmm.js → index-B7UcS8L9.js} +6 -5
  8. package/dist/{index-BrXP6SIZ.js → index-B7X30dhh.js} +6 -5
  9. package/dist/{index--R8PL3a1.js → index-BFwogXBZ.js} +6 -5
  10. package/dist/{index-CGiadoVA.js → index-BWanP6r1.js} +6 -5
  11. package/dist/{index-DXCv8tws.js → index-BWhbg1Ym.js} +6 -5
  12. package/dist/{index-BzDi48AW.js → index-BocHZGIh.js} +6 -5
  13. package/dist/{index-CUGtBqn4.js → index-BscWPxPB.js} +6 -5
  14. package/dist/{index-DKFF_z4v.js → index-BwufpqIX.js} +6 -5
  15. package/dist/{index-BhMsFlKj.js → index-CqMt_2D7.js} +6 -5
  16. package/dist/{index-_Reh-70u.js → index-CvRarm-Z.js} +6 -5
  17. package/dist/{index-Dy_V-DfR.js → index-DPzSleUy.js} +6 -5
  18. package/dist/{index-U1lmcSHD.js → index-DU-cOOXF.js} +6 -5
  19. package/dist/{index-JW_1o4zI.js → index-DUrzP-j-.js} +215 -120
  20. package/dist/{index-BTV3yGFf.js → index-DVqoKIqv.js} +6 -5
  21. package/dist/{index-C9o4w-t2.js → index-DmjG8EP6.js} +6 -5
  22. package/dist/{index-Bsjq5fXE.js → index-DsslwFkg.js} +6 -5
  23. package/dist/{index-DGa0rqWH.js → index-sfCEw8Dv.js} +22 -71
  24. package/dist/{index-DR0APcXh.js → index-uKdBgi5l.js} +6 -5
  25. package/dist/index.js +6 -5
  26. package/dist/lib/src/components/Panel.d.ts +0 -2
  27. package/dist/lib/src/components/Panel.d.ts.map +1 -1
  28. package/dist/lib/src/components/Panel.js +2 -2
  29. package/dist/lib/src/components/Panel.js.map +1 -1
  30. package/dist/lib/src/components/PanelToolbar.d.ts +0 -2
  31. package/dist/lib/src/components/PanelToolbar.d.ts.map +1 -1
  32. package/dist/lib/src/components/PanelToolbar.js +33 -8
  33. package/dist/lib/src/components/PanelToolbar.js.map +1 -1
  34. package/dist/lib/src/connection/foxglove-connection.d.ts +9 -4
  35. package/dist/lib/src/connection/foxglove-connection.d.ts.map +1 -1
  36. package/dist/lib/src/connection/foxglove-connection.js +63 -7
  37. package/dist/lib/src/connection/foxglove-connection.js.map +1 -1
  38. package/dist/lib/src/index.d.ts +5 -5
  39. package/dist/lib/src/index.d.ts.map +1 -1
  40. package/dist/lib/src/index.js +3 -3
  41. package/dist/lib/src/index.js.map +1 -1
  42. package/dist/lib/src/messaging/deserialization/pointcloud/poitcloudPoolManager.d.ts.map +1 -1
  43. package/dist/lib/src/messaging/deserialization/pointcloud/poitcloudPoolManager.js +7 -3
  44. package/dist/lib/src/messaging/deserialization/pointcloud/poitcloudPoolManager.js.map +1 -1
  45. package/dist/lib/src/messaging/event-loop-delay-sampler.d.ts +9 -0
  46. package/dist/lib/src/messaging/event-loop-delay-sampler.d.ts.map +1 -0
  47. package/dist/lib/src/messaging/event-loop-delay-sampler.js +19 -0
  48. package/dist/lib/src/messaging/event-loop-delay-sampler.js.map +1 -0
  49. package/dist/lib/src/messaging/protobuf.d.ts +3 -1
  50. package/dist/lib/src/messaging/protobuf.d.ts.map +1 -1
  51. package/dist/lib/src/messaging/protobuf.js +27 -12
  52. package/dist/lib/src/messaging/protobuf.js.map +1 -1
  53. package/dist/lib/src/messaging/rate-limiter.d.ts +19 -0
  54. package/dist/lib/src/messaging/rate-limiter.d.ts.map +1 -0
  55. package/dist/lib/src/messaging/rate-limiter.js +50 -0
  56. package/dist/lib/src/messaging/rate-limiter.js.map +1 -0
  57. package/dist/lib/src/output.css +2 -15
  58. package/dist/lib/src/panels/ImagePanel.d.ts +2 -2
  59. package/dist/lib/src/panels/ImagePanel.d.ts.map +1 -1
  60. package/dist/lib/src/panels/ImagePanel.js +15 -31
  61. package/dist/lib/src/panels/ImagePanel.js.map +1 -1
  62. package/dist/lib/src/panels/PointCloudPanel.d.ts.map +1 -1
  63. package/dist/lib/src/panels/PointCloudPanel.js +3 -21
  64. package/dist/lib/src/panels/PointCloudPanel.js.map +1 -1
  65. package/dist/lib/src/protobuf.generated/ImgDetections.d.ts +1 -1
  66. package/dist/lib/src/protobuf.generated/ImgDetections.d.ts.map +1 -1
  67. package/dist/lib/src/protobuf.generated/ImgDetections.js +8 -8
  68. package/dist/lib/src/protobuf.generated/ImgDetections.js.map +1 -1
  69. package/dist/lib/src/utils/metrics-manager.d.ts +18 -9
  70. package/dist/lib/src/utils/metrics-manager.d.ts.map +1 -1
  71. package/dist/lib/src/utils/metrics-manager.js +38 -16
  72. package/dist/lib/src/utils/metrics-manager.js.map +1 -1
  73. package/dist/packages/studio-base/src/i18n/en/threeDee.js +2 -2
  74. package/dist/packages/studio-base/src/i18n/en/threeDee.js.map +1 -1
  75. package/dist/packages/studio-base/src/panels/ThreeDeeRender/Renderer.d.ts +1 -1
  76. package/dist/packages/studio-base/src/panels/ThreeDeeRender/Renderer.d.ts.map +1 -1
  77. package/dist/packages/studio-base/src/panels/ThreeDeeRender/Renderer.js +3 -3
  78. package/dist/packages/studio-base/src/panels/ThreeDeeRender/Renderer.js.map +1 -1
  79. package/dist/packages/studio-base/src/panels/ThreeDeeRender/ThreeDeeRender.d.ts +1 -1
  80. package/dist/packages/studio-base/src/panels/ThreeDeeRender/ThreeDeeRender.d.ts.map +1 -1
  81. package/dist/packages/studio-base/src/panels/ThreeDeeRender/ThreeDeeRender.js +8 -4
  82. package/dist/packages/studio-base/src/panels/ThreeDeeRender/ThreeDeeRender.js.map +1 -1
  83. package/dist/packages/studio-base/src/panels/ThreeDeeRender/index.d.ts +1 -1
  84. package/dist/packages/studio-base/src/panels/ThreeDeeRender/index.d.ts.map +1 -1
  85. package/dist/packages/studio-base/src/panels/ThreeDeeRender/index.js +4 -4
  86. package/dist/packages/studio-base/src/panels/ThreeDeeRender/index.js.map +1 -1
  87. package/dist/packages/studio-base/src/panels/ThreeDeeRender/renderables/ImageMode/ImageMode.d.ts +1 -1
  88. package/dist/packages/studio-base/src/panels/ThreeDeeRender/renderables/ImageMode/ImageMode.d.ts.map +1 -1
  89. package/dist/packages/studio-base/src/panels/ThreeDeeRender/renderables/ImageMode/ImageMode.js +3 -3
  90. package/dist/packages/studio-base/src/panels/ThreeDeeRender/renderables/ImageMode/ImageMode.js.map +1 -1
  91. package/dist/packages/studio-base/src/panels/ThreeDeeRender/renderables/ImageMode/MessageHandler.d.ts +2 -2
  92. package/dist/packages/studio-base/src/panels/ThreeDeeRender/renderables/ImageMode/MessageHandler.d.ts.map +1 -1
  93. package/dist/packages/studio-base/src/panels/ThreeDeeRender/renderables/ImageMode/MessageHandler.js +4 -53
  94. package/dist/packages/studio-base/src/panels/ThreeDeeRender/renderables/ImageMode/MessageHandler.js.map +1 -1
  95. package/dist/{encoding-D95pQf33.js → protobuf-DaN_RVVA.js} +61 -34
  96. package/dist/{tslib.es6-C73eoP_E.js → tslib.es6-C2WzYB9K.js} +1 -1
  97. package/dist/{useMessageReducer-jNx5e6JW.js → useMessageReducer-CFyr4HrA.js} +2 -2
  98. package/dist/{worker-BCJnECSn.js → worker-CHw4c4uq.js} +5 -5
  99. package/dist/{worker-ChOPGWcQ.js → worker-DGLIx_li.js} +5 -5
  100. package/package.json +1 -1
  101. package/dist/_commonjsHelpers-E-ZsRS8r.js +0 -32
@@ -1,11 +1,11 @@
1
- import { d as dist$1, e as estimateObjectSize, r as reportError, A as AppError, b as baseFlatten, a as baseEach, c as baseIteratee, f as baseDifference, g as getTag, h as baseKeys, i as baseIsEqual, j as castPath, t as toKey, k as baseGet, l as hasIn, s as sendNotification, m as shallowequal, u as useGuaranteedContext, n as getPanelIdsInsideTabPanels, o as getPanelTypeFromId, T as TAB_PANEL_TYPE, p as removePanelFromTabPanel, q as getPanelIdForType, v as getPathFromNode, w as updateTabPanelLayout, x as getSaveConfigsPayloadForAddedPanel, y as replaceAndRemovePanels, z as inlineTabPanelLayouts, B as getAllPanelIds, C as getConfigsForNestedPanelsInsideTab, D as reorderTabWithinTabPanel, E as moveTabBetweenTabPanels, F as isTabPanelConfig, G as DEFAULT_TAB_PANEL_CONFIG, H as addPanelToTab, I as createAddUpdates, J as filterMap, L as Logger, K as uniq$2, M as useShallowMemo, N as CurrentLayoutContext, O as MessageOrderTracker, P as AppConfigurationContext, _ as __assign$8, Q as __rest$5, R as __spreadArray$5 } from './tslib.es6-C73eoP_E.js';
1
+ import { d as dist$1, e as estimateObjectSize, r as reportError, A as AppError, b as baseFlatten, a as baseEach, c as baseIteratee, f as baseDifference, g as getTag, h as baseKeys, i as baseIsEqual, j as castPath, t as toKey, k as baseGet, l as hasIn, s as sendNotification, m as shallowequal, u as useGuaranteedContext, n as getPanelIdsInsideTabPanels, o as getPanelTypeFromId, T as TAB_PANEL_TYPE, p as removePanelFromTabPanel, q as getPanelIdForType, v as getPathFromNode, w as updateTabPanelLayout, x as getSaveConfigsPayloadForAddedPanel, y as replaceAndRemovePanels, z as inlineTabPanelLayouts, B as getAllPanelIds, C as getConfigsForNestedPanelsInsideTab, D as reorderTabWithinTabPanel, E as moveTabBetweenTabPanels, F as isTabPanelConfig, G as DEFAULT_TAB_PANEL_CONFIG, H as addPanelToTab, I as createAddUpdates, J as filterMap, L as Logger, K as uniq$2, M as useShallowMemo, N as CurrentLayoutContext, O as MessageOrderTracker, P as AppConfigurationContext, _ as __assign$8, Q as __rest$5, R as __spreadArray$5 } from './tslib.es6-C2WzYB9K.js';
2
2
  import { w as wrap$3, p as proxy } from './comlink-DHMAu6X7.js';
3
3
  import { u as uint8ArrayToUint16Array } from './utils-Hzt3wxhG.js';
4
- import { B as BinaryOpcode } from './FoxgloveServer-C39Uooyk.js';
5
- import { g as getDefaultExportFromCjs, c as commonjsGlobal } from './_commonjsHelpers-E-ZsRS8r.js';
4
+ import { p as protobufSchemaNameToType, g as getDefaultExportFromCjs, c as commonjsGlobal } from './protobuf-DaN_RVVA.js';
6
5
  import * as React$1 from 'react';
7
6
  import React__default, { useRef, useMemo, createContext, useContext, forwardRef, createElement, useState, Component, useCallback, useEffect, useLayoutEffect, useReducer, useImperativeHandle, Fragment as Fragment$1, Suspense } from 'react';
8
- import { p as parseFoxgloveMessage } from './foxglove-protocol-CYoMweAY.js';
7
+ import { B as BinaryOpcode } from './FoxgloveServer-DNo9aiV3.js';
8
+ import { p as parseFoxgloveMessage } from './foxglove-protocol-DUzk1IXN.js';
9
9
  import { DndProvider } from 'react-dnd';
10
10
  import { HTML5Backend } from 'react-dnd-html5-backend';
11
11
  import { getLeaves, createRemoveUpdate, updateTree, createHideUpdate, createDragToUpdates, getNodeAtPath, MosaicContext, MosaicWindowContext } from 'react-mosaic-component';
@@ -26,7 +26,7 @@ import { defineGlobalStyles, defineTokens as defineTokens$1, defineKeyframes, de
26
26
 
27
27
  var e=[],t$1=[];function n$1(n,r){if(n&&"undefined"!=typeof document){var a,s=!0===r.prepend?"prepend":"append",d=!0===r.singleTag,i="string"==typeof r.container?document.querySelector(r.container):document.getElementsByTagName("head")[0];if(d){var u=e.indexOf(i);-1===u&&(u=e.push(i)-1,t$1[u]={}),a=t$1[u]&&t$1[u][s]?t$1[u][s]:t$1[u][s]=c();}else a=c();65279===n.charCodeAt(0)&&(n=n.substring(1)),a.styleSheet?a.styleSheet.cssText+=n:a.appendChild(document.createTextNode(n));}function c(){var e=document.createElement("style");if(e.setAttribute("type","text/css"),r.attributes)for(var t=Object.keys(r.attributes),n=0;n<t.length;n++)e.setAttribute(t[n],r.attributes[t[n]]);var a="prepend"===s?"afterbegin":"beforeend";return i.insertAdjacentElement(a,e),e}}
28
28
 
29
- var css$b = "/*! tailwindcss v4.1.8 | MIT License | https://tailwindcss.com */\n@layer properties;\n@layer theme, base, components, utilities;\n@layer theme {\n :root, :host {\n --font-sans: ui-sans-serif, system-ui, sans-serif, \"Apple Color Emoji\",\n \"Segoe UI Emoji\", \"Segoe UI Symbol\", \"Noto Color Emoji\";\n --font-mono: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, \"Liberation Mono\",\n \"Courier New\", monospace;\n --color-gray-700: oklch(0.373 0.034 259.733);\n --color-white: #fff;\n --spacing: 0.25rem;\n --font-weight-semibold: 600;\n --radius-lg: 0.5rem;\n --default-font-family: var(--font-sans);\n --default-mono-font-family: var(--font-mono);\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 :-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 .visible {\n visibility: visible;\n }\n .fixed {\n position: fixed;\n }\n .ml-auto {\n margin-left: auto;\n }\n .flex {\n display: flex;\n }\n .grow {\n flex-grow: 1;\n }\n .flex-col {\n flex-direction: column;\n }\n .items-start {\n align-items: flex-start;\n }\n .overflow-hidden {\n overflow: hidden;\n }\n .rounded {\n border-radius: 0.25rem;\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-solid {\n --tw-border-style: solid;\n border-style: solid;\n }\n .border-\\[\\#d3d3d3d9\\] {\n border-color: #d3d3d3d9;\n }\n .bg-white {\n background-color: var(--color-white);\n }\n .px-4 {\n padding-inline: calc(var(--spacing) * 4);\n }\n .text-\\[14px\\]\\/\\[14px\\] {\n font-size: 14px;\n line-height: 14px;\n }\n .text-\\[20px\\]\\/\\[20px\\] {\n font-size: 20px;\n line-height: 20px;\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-700 {\n color: var(--color-gray-700);\n }\n .outline {\n outline-style: var(--tw-outline-style);\n outline-width: 1px;\n }\n .xl\\:flex-row {\n @media (width >= 80rem) {\n flex-direction: row;\n }\n }\n .xl\\:items-end {\n @media (width >= 80rem) {\n align-items: flex-end;\n }\n }\n .xl\\:pb-\\[2px\\] {\n @media (width >= 80rem) {\n padding-bottom: 2px;\n }\n }\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-outline-style {\n syntax: \"*\";\n inherits: false;\n initial-value: solid;\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-outline-style: solid;\n }\n }\n}\n";
29
+ var css$b = "/*! tailwindcss v4.0.17 | MIT License | https://tailwindcss.com */\n@layer theme, base, components, utilities;\n@layer theme {\n :root, :host {\n --font-sans: ui-sans-serif, system-ui, sans-serif, \"Apple Color Emoji\",\n \"Segoe UI Emoji\", \"Segoe UI Symbol\", \"Noto Color Emoji\";\n --font-mono: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, \"Liberation Mono\",\n \"Courier New\", monospace;\n --color-gray-700: oklch(0.373 0.034 259.733);\n --color-white: #fff;\n --spacing: 0.25rem;\n --font-weight-semibold: 600;\n --radius-lg: 0.5rem;\n --default-font-family: var(--font-sans);\n --default-mono-font-family: var(--font-mono);\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: color-mix(in oklab, currentColor 50%, transparent);\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 :-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 .visible {\n visibility: visible;\n }\n .fixed {\n position: fixed;\n }\n .ml-auto {\n margin-left: auto;\n }\n .flex {\n display: flex;\n }\n .grow {\n flex-grow: 1;\n }\n .flex-col {\n flex-direction: column;\n }\n .items-start {\n align-items: flex-start;\n }\n .overflow-hidden {\n overflow: hidden;\n }\n .rounded {\n border-radius: 0.25rem;\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-solid {\n --tw-border-style: solid;\n border-style: solid;\n }\n .border-\\[\\#d3d3d3d9\\] {\n border-color: #d3d3d3d9;\n }\n .bg-white {\n background-color: var(--color-white);\n }\n .px-4 {\n padding-inline: calc(var(--spacing) * 4);\n }\n .text-\\[14px\\]\\/\\[14px\\] {\n font-size: 14px;\n line-height: 14px;\n }\n .text-\\[20px\\]\\/\\[20px\\] {\n font-size: 20px;\n line-height: 20px;\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-700 {\n color: var(--color-gray-700);\n }\n .outline {\n outline-style: var(--tw-outline-style);\n outline-width: 1px;\n }\n .xl\\:flex-row {\n @media (width >= 80rem) {\n flex-direction: row;\n }\n }\n .xl\\:items-end {\n @media (width >= 80rem) {\n align-items: flex-end;\n }\n }\n .xl\\:pb-\\[2px\\] {\n @media (width >= 80rem) {\n padding-bottom: 2px;\n }\n }\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-outline-style {\n syntax: \"*\";\n inherits: false;\n initial-value: solid;\n}\n";
30
30
  n$1(css$b,{});
31
31
 
32
32
  // This Source Code Form is subject to the terms of the Mozilla Public
@@ -448,20 +448,19 @@ class Condvar {
448
448
  // file, You can obtain one at http://mozilla.org/MPL/2.0/
449
449
 
450
450
  const MAX_SAMPLE_SIZE = 100;
451
+ function constructKeyForTopicRenderMetrics(key, topic) {
452
+ return `${key}:${topic}`;
453
+ }
451
454
  function bytesToMegabits(bytes) {
452
455
  return bytes / (1024 * 1024) * 8;
453
456
  }
454
- class EventMetricsManager {
457
+ class MetricsManager {
455
458
  metrics = {};
456
- registerEvent(topic) {
457
- const currentTime = performance.now();
458
- // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition
459
- this.metrics[topic] ??= [];
460
- this.metrics[topic].unshift(currentTime);
461
- if (this.metrics[topic].length > MAX_SAMPLE_SIZE) {
462
- this.metrics[topic].length = MAX_SAMPLE_SIZE;
463
- }
459
+ getMetrics() {
460
+ return this.metrics;
464
461
  }
462
+ }
463
+ class EventMetricsManager extends MetricsManager {
465
464
  calculate(topic) {
466
465
  const topicMetrics = this.metrics[topic];
467
466
  if (!topicMetrics) {
@@ -477,20 +476,17 @@ class EventMetricsManager {
477
476
  const fps = 1_000 / (totalInterval / (topicMetrics.length - 1));
478
477
  return Math.round(fps);
479
478
  }
480
- }
481
- class ThroughputMetricsManager {
482
- metrics = {};
483
- registerEvent(topic, value) {
484
- const timestamp = performance.now();
479
+ registerEvent(topic) {
480
+ const currentTime = performance.now();
481
+ // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition
485
482
  this.metrics[topic] ??= [];
486
- this.metrics[topic].unshift({
487
- timestamp,
488
- value
489
- });
483
+ this.metrics[topic].unshift(currentTime);
490
484
  if (this.metrics[topic].length > MAX_SAMPLE_SIZE) {
491
485
  this.metrics[topic].length = MAX_SAMPLE_SIZE;
492
486
  }
493
487
  }
488
+ }
489
+ class ThroughputMetricsManager extends MetricsManager {
494
490
  calculate(topic) {
495
491
  const topicMetrics = this.metrics[topic];
496
492
  if (!topicMetrics || topicMetrics.length < 2 || !topicMetrics.at(0) || !topicMetrics.at(-1)) {
@@ -514,7 +510,19 @@ class ThroughputMetricsManager {
514
510
  // Return rounded value
515
511
  return Number(bytesToMegabits(bytesPerSecond).toFixed(2));
516
512
  }
513
+ registerEvent(topic, value) {
514
+ const timestamp = performance.now();
515
+ this.metrics[topic] ??= [];
516
+ this.metrics[topic].unshift({
517
+ timestamp,
518
+ value
519
+ });
520
+ if (this.metrics[topic].length > MAX_SAMPLE_SIZE) {
521
+ this.metrics[topic].length = MAX_SAMPLE_SIZE;
522
+ }
523
+ }
517
524
  }
525
+ const [globalInputEventMetricsManager, globalDecodeMetricsManager, globalRenderMetricsManager, globalThroughputMetricsManager] = [new EventMetricsManager(), new EventMetricsManager(), new EventMetricsManager(), new ThroughputMetricsManager()];
518
526
 
519
527
  // This Source Code Form is subject to the terms of the Mozilla Public
520
528
  // License, v2.0. If a copy of the MPL was not distributed with this
@@ -570,7 +578,7 @@ class DepthToPointcloudWorkerPool {
570
578
  this.workerApis = new Array(WORKER_COUNT).fill(undefined).map(() => wrap$3(new Worker(new URL("pointcloudFromDepth.worker-hil48rbC.js", import.meta.url), {
571
579
  type: "module"
572
580
  })));
573
- this.#metrics = new EventMetricsManager();
581
+ this.#metrics = globalInputEventMetricsManager;
574
582
  this.#metrics.registerEvent("pcl-pool.frameInput");
575
583
  }
576
584
  async queueDepthFrame(data) {
@@ -768,7 +776,7 @@ class DepthToPointcloudWorkerPool {
768
776
  // file, You can obtain one at http://mozilla.org/MPL/2.0/
769
777
 
770
778
  function initWorker(callback) {
771
- const workerWrap = wrap$3(new Worker(new URL("deserialization.worker-BKq1x9xw.js", import.meta.url), {
779
+ const workerWrap = wrap$3(new Worker(new URL("deserialization.worker-y8Hqp0K3.js", import.meta.url), {
772
780
  type: "module",
773
781
  name: `message-decoder`
774
782
  }));
@@ -889,6 +897,73 @@ class PoitCloudSyncFramework {
889
897
  }
890
898
  }
891
899
 
900
+ class EventLoopDelaySampler {
901
+ lastObservedTime = performance.now();
902
+ measuredDelay = 0;
903
+ constructor(refreshInterval = 500) {
904
+ this.intervalId = setInterval(() => {
905
+ const now = performance.now();
906
+ this.measuredDelay = now - this.lastObservedTime - refreshInterval;
907
+ this.lastObservedTime = now;
908
+ }, refreshInterval);
909
+ }
910
+ getDelay() {
911
+ return this.measuredDelay;
912
+ }
913
+ dispose() {
914
+ clearInterval(this.intervalId);
915
+ }
916
+ }
917
+
918
+ class RateLimiter {
919
+ lastObservedState = 1;
920
+ isFlagUp = false;
921
+ eventLoopDelaySampler = new EventLoopDelaySampler();
922
+ constructor(thresholds, handleRateLimiterStateChange, refreshInterval = 1000) {
923
+ this.thresholds = thresholds;
924
+ this.handleRateLimiterStateChange = handleRateLimiterStateChange;
925
+ this.refreshInterval = refreshInterval;
926
+ // Sort thresholds by descending delay cap
927
+ // This way we can find the first threshold that is lower than the current event loop delay easily
928
+ this.thresholds = thresholds.sort((a, b) => b.delayCap - a.delayCap);
929
+ this.intervalId = setInterval(() => {
930
+ this.refreshRateLimiterState();
931
+ }, refreshInterval);
932
+ }
933
+ dispose() {
934
+ this.eventLoopDelaySampler.dispose();
935
+ clearInterval(this.intervalId);
936
+ }
937
+ refreshRateLimiterState() {
938
+ // If we don't know about event loop delay, we can't do anything and return 1
939
+ if (!this.eventLoopDelaySampler.getDelay()) {
940
+ return this.updateModuloCoefficient(1);
941
+ }
942
+
943
+ // Find the first threshold which is smaller than the current event loop delay
944
+ const threshold = this.thresholds.find(threshold => threshold.delayCap <= this.eventLoopDelaySampler.getDelay());
945
+
946
+ // If all caps are higher than the current event loop delay, Viewer is managing the traffic fine -> return 1
947
+ if (!threshold) {
948
+ return this.updateModuloCoefficient(1);
949
+ }
950
+ this.updateModuloCoefficient(threshold.moduloCoefficient);
951
+ }
952
+ updateModuloCoefficient(newRecommendedModuloCoefficient) {
953
+ // If previous value is the same do nothing or the flag is not up yet
954
+ if (this.lastObservedState === newRecommendedModuloCoefficient || !this.isFlagUp) {
955
+ return;
956
+ }
957
+
958
+ // When we first encounter modulo coefficient > 1, we need to set the flag to true as a warning for next time
959
+ this.isFlagUp = newRecommendedModuloCoefficient > 1;
960
+
961
+ // Else update the value and notify the listeners about the new recommended modulo coefficient
962
+ this.lastObservedState = newRecommendedModuloCoefficient;
963
+ this.handleRateLimiterStateChange(newRecommendedModuloCoefficient);
964
+ }
965
+ }
966
+
892
967
  // This Source Code Form is subject to the terms of the Mozilla Public
893
968
  // License, v2.0. If a copy of the MPL was not distributed with this
894
969
  // file, You can obtain one at http://mozilla.org/MPL/2.0/
@@ -921,15 +996,40 @@ class FoxgloveConnection {
921
996
  skipPoitcloud = false;
922
997
  problems = new ProblemManager();
923
998
  resolutions = new Map();
924
- inputMetrics = new EventMetricsManager();
925
- throughputMetrics = new ThroughputMetricsManager();
926
- decodeMetrics = new EventMetricsManager();
999
+ inputMetrics = globalInputEventMetricsManager;
1000
+ decodeMetrics = globalDecodeMetricsManager;
1001
+ throughputMetrics = globalThroughputMetricsManager;
927
1002
  PoitCloudSyncFramework = new PoitCloudSyncFramework();
928
1003
  depthToPointcloudWorkerPool = new DepthToPointcloudWorkerPool((event, frame, message) => {
929
1004
  this.submitPoitcloudFrameCallback(event, frame, message);
930
1005
  });
931
1006
  // message handler
932
1007
 
1008
+ rateLimitModCoefficient = 1;
1009
+ rateLimitCounter = {
1010
+ image: 0,
1011
+ pointCloud: 0,
1012
+ annotations: 0
1013
+ };
1014
+ rateLimiter = new RateLimiter([{
1015
+ delayCap: 100,
1016
+ moduloCoefficient: 2
1017
+ }, {
1018
+ delayCap: 200,
1019
+ moduloCoefficient: 3
1020
+ }, {
1021
+ delayCap: 300,
1022
+ moduloCoefficient: 4
1023
+ }, {
1024
+ delayCap: 400,
1025
+ moduloCoefficient: 5
1026
+ }, {
1027
+ delayCap: 500,
1028
+ moduloCoefficient: 10
1029
+ }], newValue => {
1030
+ console.warn(`Setting rate limiting coefficient to ${newValue}`);
1031
+ this.rateLimitModCoefficient = newValue;
1032
+ });
933
1033
  topics = {};
934
1034
  constructor(id) {
935
1035
  this.id = id;
@@ -941,7 +1041,7 @@ class FoxgloveConnection {
941
1041
  }
942
1042
  getTopicMetrics(topic) {
943
1043
  return {
944
- incomingMessagesFps: this.inputMetrics.calculate(topic),
1044
+ incomingMessagesFps: this.inputMetrics.calculate(constructKeyForTopicRenderMetrics("renderImageFrame", topic)),
945
1045
  decodedMessagesFps: this.decodeMetrics.calculate(topic),
946
1046
  messageThroughput: this.throughputMetrics.calculate(topic),
947
1047
  resolutions: this.resolutions
@@ -951,7 +1051,19 @@ class FoxgloveConnection {
951
1051
  return dist$1.fromMillis(Date.now());
952
1052
  }
953
1053
  onMessagePacket(event, errorCallback) {
954
- this.inputMetrics.registerEvent(event.data.topic);
1054
+ const [imageFrameMetricsKey, annotationsFrameMetricsKey, pointCloudFrameMetricsKey] = React__default.useMemo(() => {
1055
+ return [constructKeyForTopicRenderMetrics("incomingImageFrame", event.data.topic), constructKeyForTopicRenderMetrics("incomingAnnotationsFrame", event.data.topic), constructKeyForTopicRenderMetrics("incomingPointCloudFrame", event.data.topic)];
1056
+ }, [event.data.topic]);
1057
+ const packetType = protobufSchemaNameToType(event.data.schema);
1058
+ const rateLimiterCounterForType = this.rateLimitCounter[packetType];
1059
+ this.rateLimitCounter[packetType] = (rateLimiterCounterForType + 1) % this.rateLimitModCoefficient;
1060
+
1061
+ // If the rate limiting coefficient is not 1 we want to skip messages which
1062
+ if (this.isMessageTypeDominant(packetType, event.data.topic) && this.rateLimitCounter[packetType] !== 0) {
1063
+ console.warn(`Skipping message of type ${packetType} due to rate limiting in topic ${event.data.topic}.`);
1064
+ return;
1065
+ }
1066
+ this.inputMetrics.registerEvent(packetType === "image" ? imageFrameMetricsKey : packetType === "pointCloud" ? pointCloudFrameMetricsKey : annotationsFrameMetricsKey);
955
1067
  this.throughputMetrics.registerEvent(event.data.topic, event.data.buffer.byteLength);
956
1068
  this.messageHandler.handle(event.data, errorCallback);
957
1069
  }
@@ -1084,6 +1196,19 @@ class FoxgloveConnection {
1084
1196
  };
1085
1197
  await this.listener(newPlayerState);
1086
1198
  });
1199
+ isMessageTypeDominant(packetType, topic) {
1200
+ const fpsPerPacketTypeList = [{
1201
+ packetType: "image",
1202
+ incomingFps: globalInputEventMetricsManager.calculate(constructKeyForTopicRenderMetrics("incomingImageFrame", topic))
1203
+ }, {
1204
+ packetType: "annotations",
1205
+ incomingFps: globalInputEventMetricsManager.calculate(constructKeyForTopicRenderMetrics("incomingAnnotationsFrame", topic))
1206
+ }, {
1207
+ packetType: "pointCloud",
1208
+ incomingFps: globalInputEventMetricsManager.calculate(constructKeyForTopicRenderMetrics("incomingPointCloudFrame", topic))
1209
+ }].sort((a, b) => b.incomingFps - a.incomingFps);
1210
+ return fpsPerPacketTypeList.at(0)?.packetType === packetType;
1211
+ }
1087
1212
  }
1088
1213
 
1089
1214
  // biome-ignore lint/suspicious/noExplicitAny: See https://github.com/biomejs/biome/issues/4906
@@ -19974,7 +20099,7 @@ class WebRtcBridge extends ArtificialWorker {
19974
20099
  constructor(automaticTokenRefresh) {
19975
20100
  super();
19976
20101
  this.automaticTokenRefresh = automaticTokenRefresh;
19977
- this.#worker = new Worker(new URL("worker-ChOPGWcQ.js", import.meta.url), {
20102
+ this.#worker = new Worker(new URL("worker-DGLIx_li.js", import.meta.url), {
19978
20103
  type: "module"
19979
20104
  });
19980
20105
  this.#setupArtificialWorker();
@@ -20191,7 +20316,7 @@ class VisualizerConnection extends FoxgloveConnection {
20191
20316
  let worker;
20192
20317
  if (type === "ws") {
20193
20318
  this.#url = data.connectionUrl;
20194
- worker = new Worker(new URL("worker-BCJnECSn.js", import.meta.url), {
20319
+ worker = new Worker(new URL("worker-CHw4c4uq.js", import.meta.url), {
20195
20320
  type: "module"
20196
20321
  });
20197
20322
  } else {
@@ -34420,7 +34545,7 @@ const threeDee$2 = {
34420
34545
  yDeviationHelp: "The Y standard deviation to publish with pose estimates",
34421
34546
  // HUD Items and empty states
34422
34547
  noImageTopicsAvailable: "Waiting for image messages to arrive.",
34423
- imageTopicDNE: "Stream not found",
34548
+ imageTopicDNE: "Stream is loading...",
34424
34549
  calibrationTopicDNE: "Calibration topic does not exist.",
34425
34550
  imageAndCalibrationDNE: "Image and calibration topics do not exist.",
34426
34551
  waitingForCalibrationAndImages: "Waiting for messages…",
@@ -86606,7 +86731,7 @@ function legacy(parser) {
86606
86731
  return new LanguageSupport(StreamLanguage.define(parser));
86607
86732
  }
86608
86733
  function sql$1(dialectName) {
86609
- return import('./index-BhMsFlKj.js').then(m => m.sql({ dialect: m[dialectName] }));
86734
+ return import('./index-CqMt_2D7.js').then(m => m.sql({ dialect: m[dialectName] }));
86610
86735
  }
86611
86736
  /**
86612
86737
  An array of language descriptions for known language packages.
@@ -86617,7 +86742,7 @@ const languages = [
86617
86742
  name: "C",
86618
86743
  extensions: ["c", "h", "ino"],
86619
86744
  load() {
86620
- return import('./index-_Reh-70u.js').then(m => m.cpp());
86745
+ return import('./index-CvRarm-Z.js').then(m => m.cpp());
86621
86746
  }
86622
86747
  }),
86623
86748
  /*@__PURE__*/LanguageDescription.of({
@@ -86625,7 +86750,7 @@ const languages = [
86625
86750
  alias: ["cpp"],
86626
86751
  extensions: ["cpp", "c++", "cc", "cxx", "hpp", "h++", "hh", "hxx"],
86627
86752
  load() {
86628
- return import('./index-_Reh-70u.js').then(m => m.cpp());
86753
+ return import('./index-CvRarm-Z.js').then(m => m.cpp());
86629
86754
  }
86630
86755
  }),
86631
86756
  /*@__PURE__*/LanguageDescription.of({
@@ -86645,7 +86770,7 @@ const languages = [
86645
86770
  name: "Go",
86646
86771
  extensions: ["go"],
86647
86772
  load() {
86648
- return import('./index-CUGtBqn4.js').then(m => m.go());
86773
+ return import('./index-BscWPxPB.js').then(m => m.go());
86649
86774
  }
86650
86775
  }),
86651
86776
  /*@__PURE__*/LanguageDescription.of({
@@ -86660,7 +86785,7 @@ const languages = [
86660
86785
  name: "Java",
86661
86786
  extensions: ["java"],
86662
86787
  load() {
86663
- return import('./index-BTV3yGFf.js').then(m => m.java());
86788
+ return import('./index-DVqoKIqv.js').then(m => m.java());
86664
86789
  }
86665
86790
  }),
86666
86791
  /*@__PURE__*/LanguageDescription.of({
@@ -86676,7 +86801,7 @@ const languages = [
86676
86801
  alias: ["json5"],
86677
86802
  extensions: ["json", "map"],
86678
86803
  load() {
86679
- return import('./index-aUJRZxmm.js').then(m => m.json());
86804
+ return import('./index-B7UcS8L9.js').then(m => m.json());
86680
86805
  }
86681
86806
  }),
86682
86807
  /*@__PURE__*/LanguageDescription.of({
@@ -86690,14 +86815,14 @@ const languages = [
86690
86815
  name: "LESS",
86691
86816
  extensions: ["less"],
86692
86817
  load() {
86693
- return import('./index-BzDi48AW.js').then(m => m.less());
86818
+ return import('./index-BocHZGIh.js').then(m => m.less());
86694
86819
  }
86695
86820
  }),
86696
86821
  /*@__PURE__*/LanguageDescription.of({
86697
86822
  name: "Liquid",
86698
86823
  extensions: ["liquid"],
86699
86824
  load() {
86700
- return import('./index-DXCv8tws.js').then(m => m.liquid());
86825
+ return import('./index-BWhbg1Ym.js').then(m => m.liquid());
86701
86826
  }
86702
86827
  }),
86703
86828
  /*@__PURE__*/LanguageDescription.of({
@@ -86723,7 +86848,7 @@ const languages = [
86723
86848
  name: "PHP",
86724
86849
  extensions: ["php", "php3", "php4", "php5", "php7", "phtml"],
86725
86850
  load() {
86726
- return import('./index-BrXP6SIZ.js').then(m => m.php());
86851
+ return import('./index-B7X30dhh.js').then(m => m.php());
86727
86852
  }
86728
86853
  }),
86729
86854
  /*@__PURE__*/LanguageDescription.of({
@@ -86740,28 +86865,28 @@ const languages = [
86740
86865
  extensions: ["BUILD", "bzl", "py", "pyw"],
86741
86866
  filename: /^(BUCK|BUILD)$/,
86742
86867
  load() {
86743
- return import('./index-U1lmcSHD.js').then(m => m.python());
86868
+ return import('./index-DU-cOOXF.js').then(m => m.python());
86744
86869
  }
86745
86870
  }),
86746
86871
  /*@__PURE__*/LanguageDescription.of({
86747
86872
  name: "Rust",
86748
86873
  extensions: ["rs"],
86749
86874
  load() {
86750
- return import('./index-Bsjq5fXE.js').then(m => m.rust());
86875
+ return import('./index-DsslwFkg.js').then(m => m.rust());
86751
86876
  }
86752
86877
  }),
86753
86878
  /*@__PURE__*/LanguageDescription.of({
86754
86879
  name: "Sass",
86755
86880
  extensions: ["sass"],
86756
86881
  load() {
86757
- return import('./index-DKFF_z4v.js').then(m => m.sass({ indented: true }));
86882
+ return import('./index-BwufpqIX.js').then(m => m.sass({ indented: true }));
86758
86883
  }
86759
86884
  }),
86760
86885
  /*@__PURE__*/LanguageDescription.of({
86761
86886
  name: "SCSS",
86762
86887
  extensions: ["scss"],
86763
86888
  load() {
86764
- return import('./index-DKFF_z4v.js').then(m => m.sass());
86889
+ return import('./index-BwufpqIX.js').then(m => m.sass());
86765
86890
  }
86766
86891
  }),
86767
86892
  /*@__PURE__*/LanguageDescription.of({
@@ -86792,7 +86917,7 @@ const languages = [
86792
86917
  name: "WebAssembly",
86793
86918
  extensions: ["wat", "wast"],
86794
86919
  load() {
86795
- return import('./index-Dy_V-DfR.js').then(m => m.wast());
86920
+ return import('./index-DPzSleUy.js').then(m => m.wast());
86796
86921
  }
86797
86922
  }),
86798
86923
  /*@__PURE__*/LanguageDescription.of({
@@ -86800,7 +86925,7 @@ const languages = [
86800
86925
  alias: ["rss", "wsdl", "xsd"],
86801
86926
  extensions: ["xml", "xsl", "xsd", "svg"],
86802
86927
  load() {
86803
- return import('./index-C9o4w-t2.js').then(m => m.xml());
86928
+ return import('./index-DmjG8EP6.js').then(m => m.xml());
86804
86929
  }
86805
86930
  }),
86806
86931
  /*@__PURE__*/LanguageDescription.of({
@@ -86808,7 +86933,7 @@ const languages = [
86808
86933
  alias: ["yml"],
86809
86934
  extensions: ["yaml", "yml"],
86810
86935
  load() {
86811
- return import('./index-CGiadoVA.js').then(m => m.yaml());
86936
+ return import('./index-BWanP6r1.js').then(m => m.yaml());
86812
86937
  }
86813
86938
  }),
86814
86939
  // Legacy modes ported from CodeMirror 5
@@ -87604,13 +87729,13 @@ const languages = [
87604
87729
  name: "Vue",
87605
87730
  extensions: ["vue"],
87606
87731
  load() {
87607
- return import('./index--R8PL3a1.js').then(m => m.vue());
87732
+ return import('./index-BFwogXBZ.js').then(m => m.vue());
87608
87733
  }
87609
87734
  }),
87610
87735
  /*@__PURE__*/LanguageDescription.of({
87611
87736
  name: "Angular Template",
87612
87737
  load() {
87613
- return import('./index-DR0APcXh.js').then(m => m.angular());
87738
+ return import('./index-uKdBgi5l.js').then(m => m.angular());
87614
87739
  }
87615
87740
  })
87616
87741
  ];
@@ -165796,13 +165921,18 @@ function createEventLoopDelaySampler() {
165796
165921
  var css$1 = "@layer reset, base, tokens, recipes, utilities;\n\n@layer reset{\n html,:host {\n --font-fallback: ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, 'Noto Sans', sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol', 'Noto Color Emoji';\n -webkit-text-size-adjust: 100%;\n -webkit-font-smoothing: antialiased;\n -moz-osx-font-smoothing: grayscale;\n -moz-tab-size: 4;\n tab-size: 4;\n -webkit-tap-highlight-color: transparent;\n line-height: 1.5;\n font-family: var(--global-font-body, var(--font-fallback));\n}\n\n *,::before,::after,::backdrop,::file-selector-button {\n margin: 0px;\n padding: 0px;\n box-sizing: border-box;\n border-width: 0px;\n border-style: solid;\n border-color: var(--global-color-border, currentColor);\n}\n\n hr {\n height: 0px;\n color: inherit;\n border-top-width: 1px;\n}\n\n body {\n height: 100%;\n line-height: inherit;\n}\n\n img {\n border-style: none;\n}\n\n img,svg,video,canvas,audio,iframe,embed,object {\n display: block;\n vertical-align: middle;\n}\n\n img,video {\n max-width: 100%;\n height: auto;\n}\n\n h1,h2,h3,h4,h5,h6 {\n text-wrap: balance;\n font-size: inherit;\n font-weight: inherit;\n}\n\n p,h1,h2,h3,h4,h5,h6 {\n overflow-wrap: break-word;\n}\n\n ol,ul,menu {\n list-style: none;\n}\n\n button,input:where([type='button'], [type='reset'], [type='submit']),::file-selector-button {\n appearance: button;\n -webkit-appearance: button;\n}\n\n button,input,optgroup,select,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 background: var(--colors-transparent);\n}\n\n ::placeholder {\n opacity: 1;\n --placeholder-fallback: color-mix(in srgb, currentColor 50%, transparent);\n color: var(--global-color-placeholder, var(--placeholder-fallback));\n}\n\n textarea {\n resize: vertical;\n}\n\n table {\n text-indent: 0px;\n border-collapse: collapse;\n border-color: inherit;\n}\n\n summary {\n display: list-item;\n}\n\n small {\n font-size: 80%;\n}\n\n sub,sup {\n position: relative;\n vertical-align: baseline;\n font-size: 75%;\n line-height: 0;\n}\n\n sub {\n bottom: -0.25em;\n}\n\n sup {\n top: -0.5em;\n}\n\n dialog {\n padding: 0px;\n}\n\n a {\n color: inherit;\n text-decoration: inherit;\n}\n\n abbr:where([title]) {\n text-decoration: underline dotted;\n}\n\n b,strong {\n font-weight: bolder;\n}\n\n code,kbd,samp,pre {\n --font-mono-fallback: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, 'Liberation Mono', 'Courier New';\n font-feature-settings: normal;\n font-variation-settings: normal;\n font-family: var(--global-font-mono, var(--font-mono-fallback));\n font-size: 1em;\n}\n\n progress {\n vertical-align: baseline;\n}\n\n ::-webkit-search-decoration,::-webkit-search-cancel-button {\n -webkit-appearance: none;\n}\n\n ::-webkit-inner-spin-button,::-webkit-outer-spin-button {\n height: auto;\n}\n\n :-moz-ui-invalid {\n box-shadow: none;\n}\n\n :-moz-focusring {\n outline: auto;\n}\n\n [hidden]:where(:not([hidden='until-found'])) {\n display: none !important;\n}\n}\n\n@layer base{\n :root {\n --made-with-panda: '🐼';\n}\n\n * {\n box-sizing: border-box;\n font-family: var(--fonts-body);\n}\n\n html,body {\n margin: var(--spacing-0);\n padding: var(--spacing-0);\n}\n\n #root {\n display: flex;\n height: 100vh;\n flex-direction: column;\n}\n\n html {\n -moz-osx-font-smoothing: grayscale;\n text-rendering: optimizeLegibility;\n -webkit-font-smoothing: antialiased;\n -webkit-text-size-adjust: 100%;\n}\n\n body {\n background: var(--colors-background);\n color: var(--colors-foreground);\n font-family: var(--fonts-sans);\n}\n\n button {\n color: inherit;\n outline: 2px solid transparent;\n}\n\n *,::before,::after,::backdrop {\n --blur: /*-*/ /*-*/;\n --brightness: /*-*/ /*-*/;\n --contrast: /*-*/ /*-*/;\n --grayscale: /*-*/ /*-*/;\n --hue-rotate: /*-*/ /*-*/;\n --invert: /*-*/ /*-*/;\n --saturate: /*-*/ /*-*/;\n --sepia: /*-*/ /*-*/;\n --drop-shadow: /*-*/ /*-*/;\n --backdrop-blur: /*-*/ /*-*/;\n --backdrop-brightness: /*-*/ /*-*/;\n --backdrop-contrast: /*-*/ /*-*/;\n --backdrop-grayscale: /*-*/ /*-*/;\n --backdrop-hue-rotate: /*-*/ /*-*/;\n --backdrop-invert: /*-*/ /*-*/;\n --backdrop-opacity: /*-*/ /*-*/;\n --backdrop-saturate: /*-*/ /*-*/;\n --backdrop-sepia: /*-*/ /*-*/;\n --gradient-from-position: /*-*/ /*-*/;\n --gradient-to-position: /*-*/ /*-*/;\n --gradient-via-position: /*-*/ /*-*/;\n --scroll-snap-strictness: proximity;\n --border-spacing-x: 0;\n --border-spacing-y: 0;\n --translate-x: 0;\n --translate-y: 0;\n --rotate: 0;\n --rotate-x: 0;\n --rotate-y: 0;\n --skew-x: 0;\n --skew-y: 0;\n --scale-x: 1;\n --scale-y: 1;\n}\n}\n\n@layer tokens{\n :where(:root, :host) {\n --aspect-ratios-square: 1 / 1;\n --aspect-ratios-landscape: 4 / 3;\n --aspect-ratios-portrait: 3 / 4;\n --aspect-ratios-wide: 16 / 9;\n --aspect-ratios-ultrawide: 18 / 5;\n --aspect-ratios-golden: 1.618 / 1;\n --letter-spacings-tighter: -0.05em;\n --letter-spacings-tight: -0.025em;\n --letter-spacings-normal: 0em;\n --letter-spacings-wide: 0.025em;\n --letter-spacings-wider: 0.05em;\n --letter-spacings-widest: 0.1em;\n --blurs-sm: 4px;\n --blurs-base: 8px;\n --blurs-md: 12px;\n --blurs-lg: 16px;\n --blurs-xl: 24px;\n --blurs-2xl: 40px;\n --blurs-3xl: 64px;\n --animations-spin: spin 1s linear infinite;\n --animations-ping: ping 1s cubic-bezier(0, 0, 0.2, 1) infinite;\n --animations-pulse: pulse 2s cubic-bezier(0.4, 0, 0.6, 1) infinite;\n --animations-bounce: bounce 1s infinite;\n --colors-current: currentColor;\n --colors-black: #000;\n --colors-white: #fff;\n --colors-transparent: rgb(0 0 0 / 0);\n --colors-rose-50: #fff1f2;\n --colors-rose-100: #ffe4e6;\n --colors-rose-200: #fecdd3;\n --colors-rose-300: #fda4af;\n --colors-rose-400: #fb7185;\n --colors-rose-500: #f43f5e;\n --colors-rose-600: #e11d48;\n --colors-rose-700: #be123c;\n --colors-rose-800: #9f1239;\n --colors-rose-900: #881337;\n --colors-rose-950: #4c0519;\n --colors-pink-50: #fdf2f8;\n --colors-pink-100: #fce7f3;\n --colors-pink-200: #fbcfe8;\n --colors-pink-300: #f9a8d4;\n --colors-pink-400: #f472b6;\n --colors-pink-500: #ec4899;\n --colors-pink-600: #db2777;\n --colors-pink-700: #be185d;\n --colors-pink-800: #9d174d;\n --colors-pink-900: #831843;\n --colors-pink-950: #500724;\n --colors-fuchsia-50: #fdf4ff;\n --colors-fuchsia-100: #fae8ff;\n --colors-fuchsia-200: #f5d0fe;\n --colors-fuchsia-300: #f0abfc;\n --colors-fuchsia-400: #e879f9;\n --colors-fuchsia-500: #d946ef;\n --colors-fuchsia-600: #c026d3;\n --colors-fuchsia-700: #a21caf;\n --colors-fuchsia-800: #86198f;\n --colors-fuchsia-900: #701a75;\n --colors-fuchsia-950: #4a044e;\n --colors-purple-50: #faf5ff;\n --colors-purple-100: #f3e8ff;\n --colors-purple-200: #e9d5ff;\n --colors-purple-300: #d8b4fe;\n --colors-purple-400: #c084fc;\n --colors-purple-500: #a855f7;\n --colors-purple-600: #9333ea;\n --colors-purple-700: #7e22ce;\n --colors-purple-800: #6b21a8;\n --colors-purple-900: #581c87;\n --colors-purple-950: #3b0764;\n --colors-violet-50: #f5f3ff;\n --colors-violet-100: #ede9fe;\n --colors-violet-200: #ddd6fe;\n --colors-violet-300: #c4b5fd;\n --colors-violet-400: #a78bfa;\n --colors-violet-500: #8b5cf6;\n --colors-violet-600: #7c3aed;\n --colors-violet-700: #6d28d9;\n --colors-violet-800: #5b21b6;\n --colors-violet-900: #4c1d95;\n --colors-violet-950: #2e1065;\n --colors-indigo-50: #eef2ff;\n --colors-indigo-100: #e0e7ff;\n --colors-indigo-200: #c7d2fe;\n --colors-indigo-300: #a5b4fc;\n --colors-indigo-400: #818cf8;\n --colors-indigo-500: #6366f1;\n --colors-indigo-600: #4f46e5;\n --colors-indigo-700: #4338ca;\n --colors-indigo-800: #3730a3;\n --colors-indigo-900: #312e81;\n --colors-indigo-950: #1e1b4b;\n --colors-blue-50: #eff6ff;\n --colors-blue-100: #dbeafe;\n --colors-blue-200: #bfdbfe;\n --colors-blue-300: #93c5fd;\n --colors-blue-400: #60a5fa;\n --colors-blue-500: #3b82f6;\n --colors-blue-600: #2563eb;\n --colors-blue-700: #1d4ed8;\n --colors-blue-800: #1e40af;\n --colors-blue-900: #1e3a8a;\n --colors-blue-950: #172554;\n --colors-sky-50: #f0f9ff;\n --colors-sky-100: #e0f2fe;\n --colors-sky-200: #bae6fd;\n --colors-sky-300: #7dd3fc;\n --colors-sky-400: #38bdf8;\n --colors-sky-500: #0ea5e9;\n --colors-sky-600: #0284c7;\n --colors-sky-700: #0369a1;\n --colors-sky-800: #075985;\n --colors-sky-900: #0c4a6e;\n --colors-sky-950: #082f49;\n --colors-cyan-50: #ecfeff;\n --colors-cyan-100: #cffafe;\n --colors-cyan-200: #a5f3fc;\n --colors-cyan-300: #67e8f9;\n --colors-cyan-400: #22d3ee;\n --colors-cyan-500: #06b6d4;\n --colors-cyan-600: #0891b2;\n --colors-cyan-700: #0e7490;\n --colors-cyan-800: #155e75;\n --colors-cyan-900: #164e63;\n --colors-cyan-950: #083344;\n --colors-teal-50: #f0fdfa;\n --colors-teal-100: #ccfbf1;\n --colors-teal-200: #99f6e4;\n --colors-teal-300: #5eead4;\n --colors-teal-400: #2dd4bf;\n --colors-teal-500: #14b8a6;\n --colors-teal-600: #0d9488;\n --colors-teal-700: #0f766e;\n --colors-teal-800: #115e59;\n --colors-teal-900: #134e4a;\n --colors-teal-950: #042f2e;\n --colors-emerald-50: #ecfdf5;\n --colors-emerald-100: #d1fae5;\n --colors-emerald-200: #a7f3d0;\n --colors-emerald-300: #6ee7b7;\n --colors-emerald-400: #34d399;\n --colors-emerald-500: #10b981;\n --colors-emerald-600: #059669;\n --colors-emerald-700: #047857;\n --colors-emerald-800: #065f46;\n --colors-emerald-900: #064e3b;\n --colors-emerald-950: #022c22;\n --colors-green-50: #f0fdf4;\n --colors-green-100: #dcfce7;\n --colors-green-200: #bbf7d0;\n --colors-green-300: #86efac;\n --colors-green-400: #4ade80;\n --colors-green-500: #22c55e;\n --colors-green-600: #16a34a;\n --colors-green-700: #15803d;\n --colors-green-800: #166534;\n --colors-green-900: #14532d;\n --colors-green-950: #052e16;\n --colors-lime-50: #f7fee7;\n --colors-lime-100: #ecfccb;\n --colors-lime-200: #d9f99d;\n --colors-lime-300: #bef264;\n --colors-lime-400: #a3e635;\n --colors-lime-500: #84cc16;\n --colors-lime-600: #65a30d;\n --colors-lime-700: #4d7c0f;\n --colors-lime-800: #3f6212;\n --colors-lime-900: #365314;\n --colors-lime-950: #1a2e05;\n --colors-yellow-50: #fefce8;\n --colors-yellow-100: #fef9c3;\n --colors-yellow-200: #fef08a;\n --colors-yellow-300: #fde047;\n --colors-yellow-400: #facc15;\n --colors-yellow-500: #eab308;\n --colors-yellow-600: #ca8a04;\n --colors-yellow-700: #a16207;\n --colors-yellow-800: #854d0e;\n --colors-yellow-900: #713f12;\n --colors-yellow-950: #422006;\n --colors-amber-50: #fffbeb;\n --colors-amber-100: #fef3c7;\n --colors-amber-200: #fde68a;\n --colors-amber-300: #fcd34d;\n --colors-amber-400: #fbbf24;\n --colors-amber-500: #f59e0b;\n --colors-amber-600: #d97706;\n --colors-amber-700: #b45309;\n --colors-amber-800: #92400e;\n --colors-amber-900: #78350f;\n --colors-amber-950: #451a03;\n --colors-orange-50: #fff7ed;\n --colors-orange-100: #ffedd5;\n --colors-orange-200: #fed7aa;\n --colors-orange-300: #fdba74;\n --colors-orange-400: #fb923c;\n --colors-orange-500: #f97316;\n --colors-orange-600: #ea580c;\n --colors-orange-700: #c2410c;\n --colors-orange-800: #9a3412;\n --colors-orange-900: #7c2d12;\n --colors-orange-950: #431407;\n --colors-red-50: #fef2f2;\n --colors-red-100: #fee2e2;\n --colors-red-200: #fecaca;\n --colors-red-300: #fca5a5;\n --colors-red-400: #f87171;\n --colors-red-500: #ef4444;\n --colors-red-600: #dc2626;\n --colors-red-700: #b91c1c;\n --colors-red-800: #991b1b;\n --colors-red-900: #7f1d1d;\n --colors-red-950: #450a0a;\n --colors-neutral-50: #fafafa;\n --colors-neutral-100: #f5f5f5;\n --colors-neutral-200: #e5e5e5;\n --colors-neutral-300: #d4d4d4;\n --colors-neutral-400: #a3a3a3;\n --colors-neutral-500: #737373;\n --colors-neutral-600: #525252;\n --colors-neutral-700: #404040;\n --colors-neutral-800: #262626;\n --colors-neutral-900: #171717;\n --colors-neutral-950: #0a0a0a;\n --colors-stone-50: #fafaf9;\n --colors-stone-100: #f5f5f4;\n --colors-stone-200: #e7e5e4;\n --colors-stone-300: #d6d3d1;\n --colors-stone-400: #a8a29e;\n --colors-stone-500: #78716c;\n --colors-stone-600: #57534e;\n --colors-stone-700: #44403c;\n --colors-stone-800: #292524;\n --colors-stone-900: #1c1917;\n --colors-stone-950: #0c0a09;\n --colors-zinc-50: #fafafa;\n --colors-zinc-100: #f4f4f5;\n --colors-zinc-200: #e4e4e7;\n --colors-zinc-300: #d4d4d8;\n --colors-zinc-400: #a1a1aa;\n --colors-zinc-500: #71717a;\n --colors-zinc-600: #52525b;\n --colors-zinc-700: #3f3f46;\n --colors-zinc-800: #27272a;\n --colors-zinc-900: #18181b;\n --colors-zinc-950: #09090b;\n --colors-gray-50: #f9fafb;\n --colors-gray-100: #f3f4f6;\n --colors-gray-200: #e5e7eb;\n --colors-gray-300: #d1d5db;\n --colors-gray-400: #9ca3af;\n --colors-gray-500: #6b7280;\n --colors-gray-600: #4b5563;\n --colors-gray-700: #374151;\n --colors-gray-800: #1f2937;\n --colors-gray-900: #111827;\n --colors-gray-950: #030712;\n --colors-slate-50: #f8fafc;\n --colors-slate-100: #f1f5f9;\n --colors-slate-200: #e2e8f0;\n --colors-slate-300: #cbd5e1;\n --colors-slate-400: #94a3b8;\n --colors-slate-500: #64748b;\n --colors-slate-600: #475569;\n --colors-slate-700: #334155;\n --colors-slate-800: #1e293b;\n --colors-slate-900: #0f172a;\n --colors-slate-950: #020617;\n --colors-grayscale-0: var(--colors-white);\n --colors-grayscale-50: var(--colors-zinc-50);\n --colors-grayscale-100: var(--colors-zinc-100);\n --colors-grayscale-200: var(--colors-zinc-200);\n --colors-grayscale-300: var(--colors-zinc-300);\n --colors-grayscale-400: var(--colors-zinc-400);\n --colors-grayscale-500: var(--colors-zinc-500);\n --colors-grayscale-600: var(--colors-zinc-600);\n --colors-grayscale-700: var(--colors-zinc-700);\n --colors-grayscale-800: var(--colors-zinc-800);\n --colors-grayscale-900: var(--colors-zinc-900);\n --colors-grayscale-950: var(--colors-zinc-950);\n --colors-hover-light-success: #ECFDF3d9;\n --colors-hover-light-warning: #FFFAEBd9;\n --colors-hover-light-error: #FEF3F2d9;\n --colors-hover-light-active: #DCEFFCd9;\n --colors-hover-light-gray: #F2F4F7d9;\n --colors-hover-dark-success: #12B76Ad9;\n --colors-hover-dark-warning: #DC6803d9;\n --colors-hover-dark-error: #F04438d9;\n --colors-hover-dark-active: #4c4ff1d9;\n --colors-hover-dark-gray: #667085d9;\n --colors-light-success: #ECFDF3;\n --colors-light-warning: #FFFAEB;\n --colors-light-error: #FEF3F2;\n --colors-light-active: #DCEFFC;\n --colors-light-gray: #F2F4F7;\n --colors-dark-success: #12B76A;\n --colors-dark-warning: #DC6803;\n --colors-dark-error: #F04438;\n --colors-dark-active: #4c4ff1;\n --colors-dark-gray: #667085;\n --colors-text-normal: #1D2939;\n --colors-text-label: #475467;\n --colors-text-light: #667085;\n --colors-text-success: #027A48;\n --colors-text-warning: #B54708;\n --colors-text-error: #B42318;\n --colors-text-active: #5724e8;\n --colors-text-gray: #344054;\n --colors-decoration-success: #6CE9A6;\n --colors-decoration-warning: #FEC84B;\n --colors-decoration-error: #FDA29B;\n --colors-decoration-active: #8da4f4;\n --colors-decoration-gray: #D0D5DD;\n --fonts-serif: ui-serif, Georgia, Cambria, \"Times New Roman\", Times, serif;\n --fonts-sans: var(--font-inter, Inter), ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, \"Helvetica Neue\", Arial, \"Noto Sans\", sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\", \"Noto Color Emoji\";\n --fonts-body: Inter;\n --fonts-mono: JetBrainsMono;\n --font-sizes-2xs: 0.5rem;\n --font-sizes-2xl: 1.5rem;\n --font-sizes-3xl: 1.875rem;\n --font-sizes-4xl: 2.25rem;\n --font-sizes-5xl: 3rem;\n --font-sizes-6xl: 3.75rem;\n --font-sizes-7xl: 4.5rem;\n --font-sizes-8xl: 6rem;\n --font-sizes-9xl: 8rem;\n --font-sizes-xxs: 10px;\n --font-sizes-xs: 12px;\n --font-sizes-sm: 14px;\n --font-sizes-primary: 16px;\n --font-sizes-md: 20px;\n --font-sizes-lg: 24px;\n --font-sizes-xl: 32px;\n --line-heights-3: .75rem;\n --line-heights-4: 1rem;\n --line-heights-5: 1.25rem;\n --line-heights-6: 1.5rem;\n --line-heights-7: 1.75rem;\n --line-heights-8: 2rem;\n --line-heights-9: 2.25rem;\n --line-heights-10: 2.5rem;\n --line-heights-none: 1;\n --line-heights-tight: 1.25;\n --line-heights-snug: 1.375;\n --line-heights-normal: 1.5;\n --line-heights-relaxed: 1.625;\n --line-heights-loose: 2;\n --line-heights-sm: 20px;\n --line-heights-primary: 24px;\n --line-heights-md: 32px;\n --line-heights-lg: 38px;\n --font-weights-thin: 100;\n --font-weights-extralight: 200;\n --font-weights-light: 300;\n --font-weights-normal: 400;\n --font-weights-medium: 500;\n --font-weights-semibold: 600;\n --font-weights-bold: 700;\n --font-weights-extrabold: 800;\n --font-weights-black: 900;\n --font-weights-primary: 400;\n --font-weights-md: 500;\n --font-weights-lg: 600;\n --font-weights-xl: 800;\n --radii-xs: 0.125rem;\n --radii-sm: calc(var(--radii-radius) - 4px);\n --radii-md: calc(var(--radii-radius) - 2px);\n --radii-lg: var(--radii-radius);\n --radii-xl: calc(var(--radii-radius) + 4px);\n --radii-2xl: 1rem;\n --radii-3xl: 1.5rem;\n --radii-4xl: 2rem;\n --radii-full: 9999px;\n --radii-radius: 0.5rem;\n --radii-common: 6px;\n --sizes-0: 0rem;\n --sizes-1: 0.25rem;\n --sizes-2: 0.5rem;\n --sizes-3: 0.75rem;\n --sizes-4: 1rem;\n --sizes-5: 1.25rem;\n --sizes-6: 1.5rem;\n --sizes-7: 1.75rem;\n --sizes-8: 2rem;\n --sizes-9: 2.25rem;\n --sizes-10: 2.5rem;\n --sizes-11: 2.75rem;\n --sizes-12: 3rem;\n --sizes-14: 3.5rem;\n --sizes-16: 4rem;\n --sizes-20: 5rem;\n --sizes-24: 6rem;\n --sizes-28: 7rem;\n --sizes-32: 8rem;\n --sizes-36: 9rem;\n --sizes-40: 10rem;\n --sizes-44: 11rem;\n --sizes-48: 12rem;\n --sizes-52: 13rem;\n --sizes-56: 14rem;\n --sizes-60: 15rem;\n --sizes-64: 16rem;\n --sizes-72: 18rem;\n --sizes-80: 20rem;\n --sizes-96: 24rem;\n --sizes-0\\.5: 0.125rem;\n --sizes-1\\.5: 0.375rem;\n --sizes-2\\.5: 0.625rem;\n --sizes-3\\.5: 0.875rem;\n --sizes-xs: 20rem;\n --sizes-sm: 24rem;\n --sizes-md: 28rem;\n --sizes-lg: 32rem;\n --sizes-xl: 36rem;\n --sizes-2xl: 42rem;\n --sizes-3xl: 48rem;\n --sizes-4xl: 56rem;\n --sizes-5xl: 64rem;\n --sizes-6xl: 72rem;\n --sizes-7xl: 80rem;\n --sizes-8xl: 90rem;\n --sizes-prose: 65ch;\n --sizes-full: 100%;\n --sizes-min: min-content;\n --sizes-max: max-content;\n --sizes-fit: fit-content;\n --sizes-basic-almost-full: 90%;\n --sizes-card-xs: 175px;\n --sizes-card-sm: 414px;\n --sizes-responsive-card-xs: min(95vw,var(--sizes-card-xs));\n --sizes-responsive-card-sm: min(95vw,var(--sizes-card-sm));\n --sizes-circle: 40px;\n --sizes-container-smaller-xxxs: 80px;\n --sizes-container-smaller-xxs: 120px;\n --sizes-container-smaller-xs: 290px;\n --sizes-container-smaller-sm: 410px;\n --sizes-container-smaller-md: 600px;\n --sizes-container-bigger-xs: 380px;\n --sizes-container-xxs: 150px;\n --sizes-container-xs: 350px;\n --sizes-container-sm: 640px;\n --sizes-container-md: 768px;\n --sizes-container-lg: 1024px;\n --sizes-container-xl: 1280px;\n --sizes-container-xxl: 1440px;\n --sizes-container-content-xl: 729px;\n --sizes-container-content-2xl: 829px;\n --sizes-container-grid-base-size: 220px;\n --sizes-container-grid-label-height: 56px;\n --sizes-container-grid-grid-gap: 28px;\n --sizes-container-side-bar-collapsed: 65px;\n --sizes-container-side-bar-expanded: 210px;\n --sizes-table-cell-min-width: 200px;\n --sizes-table-instances-name-cell: 300px;\n --sizes-table-instances-name: 200px;\n --sizes-table-instances-cell: 180px;\n --sizes-sourcecode-width: 40px;\n --sizes-slider-label: 40px;\n --sizes-slider-thumb-sm: 16px;\n --sizes-slider-thumb-lg: 20px;\n --sizes-skeleton-height: 40px;\n --sizes-skeleton-width: full;\n --sizes-skeleton-button-width: 150px;\n --sizes-skeleton-button-height: var(--sizes-skeleton-height);\n --sizes-skeleton-input-width: 230px;\n --sizes-skeleton-input-height: var(--sizes-skeleton-height);\n --sizes-skeleton-textarea-width: var(--sizes-skeleton-width);\n --sizes-skeleton-textarea-height: 80px;\n --sizes-skeleton-avatar-width: var(--sizes-skeleton-height);\n --sizes-skeleton-avatar-height: var(--sizes-skeleton-height);\n --sizes-skeleton-grid-width-xs: 32px;\n --sizes-skeleton-grid-width-sm: 64px;\n --sizes-skeleton-grid-width-md: 128px;\n --sizes-skeleton-grid-width-lg: 256px;\n --sizes-skeleton-grid-width-xl: 512px;\n --sizes-skeleton-grid-height-xs: 32px;\n --sizes-skeleton-grid-height-sm: 64px;\n --sizes-skeleton-grid-height-md: 128px;\n --sizes-skeleton-grid-height-lg: 256px;\n --sizes-skeleton-grid-height-xl: 512px;\n --sizes-skeleton-table-height-sm: 32px;\n --sizes-skeleton-table-height-md: 64px;\n --sizes-skeleton-table-height-lg: 128px;\n --sizes-skeleton-table-height-xl: 256px;\n --sizes-icon-xxs: 8px;\n --sizes-icon-xs: 16px;\n --sizes-icon-sm: 20px;\n --sizes-icon-md: 24px;\n --sizes-icon-lg: 32px;\n --sizes-icon-xl: 40px;\n --sizes-icon-xxl: 48px;\n --sizes-icon-smaller-xs: 14px;\n --sizes-breakpoint-sm: 640px;\n --sizes-breakpoint-md: 768px;\n --sizes-breakpoint-lg: 1024px;\n --sizes-breakpoint-2lg: 1100px;\n --sizes-breakpoint-xl: 1280px;\n --sizes-breakpoint-2xl: 1536px;\n --spacing-0: 0rem;\n --spacing-1: 0.25rem;\n --spacing-2: 0.5rem;\n --spacing-3: 0.75rem;\n --spacing-4: 1rem;\n --spacing-5: 1.25rem;\n --spacing-6: 1.5rem;\n --spacing-7: 1.75rem;\n --spacing-8: 2rem;\n --spacing-9: 2.25rem;\n --spacing-10: 2.5rem;\n --spacing-11: 2.75rem;\n --spacing-12: 3rem;\n --spacing-14: 3.5rem;\n --spacing-16: 4rem;\n --spacing-20: 5rem;\n --spacing-24: 6rem;\n --spacing-28: 7rem;\n --spacing-32: 8rem;\n --spacing-36: 9rem;\n --spacing-40: 10rem;\n --spacing-44: 11rem;\n --spacing-48: 12rem;\n --spacing-52: 13rem;\n --spacing-56: 14rem;\n --spacing-60: 15rem;\n --spacing-64: 16rem;\n --spacing-72: 18rem;\n --spacing-80: 20rem;\n --spacing-96: 24rem;\n --spacing-0\\.5: 0.125rem;\n --spacing-1\\.5: 0.375rem;\n --spacing-2\\.5: 0.625rem;\n --spacing-3\\.5: 0.875rem;\n --spacing-separator: 10px;\n --spacing-smaller-xs: 4px;\n --spacing-smaller-sm: 12px;\n --spacing-smaller-md: 14px;\n --spacing-xxs: 6px;\n --spacing-xs: 8px;\n --spacing-sm: 16px;\n --spacing-3xs: 24px;\n --spacing-md: 32px;\n --spacing-lg: 64px;\n --shadows-xl: 0 20px 25px -5px rgb(0 0 0 / 0.1), 0 8px 10px -6px rgb(0 0 0 / 0.1);\n --shadows-2xl: 0 25px 50px -12px rgb(0 0 0 / 0.25);\n --shadows-inner: inset 0 2px 4px 0 rgb(0 0 0 / 0.05);\n --shadows-xs: 0px 1px 2px rgba(16, 24, 40, 0.05);\n --shadows-sm: 0px 1px 3px rgba(16, 24, 40, 0.1), 0px 1px 2px rgba(16, 24, 40, 0.06);\n --shadows-md: 0px 4px 8px -2px rgba(16, 24, 40, 0.1), 0px 2px 4px -2px rgba(16, 24, 40, 0.06);\n --shadows-lg: 0px 12px 16px -4px rgba(16, 24, 40, 0.08), 0px 4px 6px -2px rgba(16, 24, 40, 0.03);\n --borders-none: none;\n --borders-outline-base: 1px solid var(--colors-light-gray);\n --borders-border-base: 1px solid var(--colors-decoration-gray);\n --borders-border-error: 1px solid var(--colors-decoration-error);\n --borders-border-success: 1px solid var(--colors-decoration-success);\n --borders-border-active: 1px solid var(--colors-decoration-active);\n --opacity-90: 0.9;\n --easings-default: cubic-bezier(0.4, 0, 0.2, 1);\n --easings-linear: linear;\n --easings-in: cubic-bezier(0.4, 0, 1, 1);\n --easings-out: cubic-bezier(0, 0, 0.2, 1);\n --easings-in-out: cubic-bezier(0.4, 0, 0.2, 1);\n --easings-ease-in-out: cubic-bezier(0.4, 0, 0.2, 1);\n --durations-fastest: 50ms;\n --durations-faster: 100ms;\n --durations-normal: 200ms;\n --durations-slow: 300ms;\n --durations-slower: 400ms;\n --durations-slowest: 500ms;\n --durations-fast: 150ms;\n --breakpoints-sm: 640px;\n --breakpoints-md: 768px;\n --breakpoints-lg: 1024px;\n --breakpoints-2lg: 1100px;\n --breakpoints-xl: 1280px;\n --breakpoints-2xl: 1536px;\n --borders-base: 1px solid var(--colors-border);\n --borders-input: 1px solid var(--colors-input);\n --borders-primary: 1px solid var(--colors-primary);\n --borders-destructive: 1px solid var(--colors-destructive);\n --animations-accordion-down: accordion-down 0.2s ease-out;\n --animations-accordion-up: accordion-up 0.2s ease-out;\n --colors-background: var(--colors-grayscale-0);\n --colors-foreground: var(--colors-grayscale-950);\n --colors-muted: var(--colors-grayscale-100);\n --colors-muted-foreground: var(--colors-grayscale-500);\n --colors-card: var(--colors-grayscale-0);\n --colors-card-foreground: var(--colors-grayscale-950);\n --colors-popover: var(--colors-grayscale-0);\n --colors-popover-foreground: var(--colors-grayscale-950);\n --colors-border: var(--colors-grayscale-200);\n --colors-input: var(--colors-grayscale-200);\n --colors-secondary: var(--colors-grayscale-100);\n --colors-secondary-foreground: var(--colors-grayscale-900);\n --colors-accent: var(--colors-grayscale-100);\n --colors-accent-foreground: var(--colors-grayscale-900);\n --colors-destructive: var(--colors-red-500);\n --colors-destructive-foreground: var(--colors-grayscale-50);\n --colors-ring: var(--colors-grayscale-400);\n --colors-primary-foreground: var(--colors-grayscale-50);\n --colors-primary: var(--colors-dark-active);\n --sizes-icon-primary: var(--sizes-icon-xs);\n}\n\n .dark {\n --colors-background: var(--colors-grayscale-950);\n --colors-foreground: var(--colors-grayscale-50);\n --colors-muted: var(--colors-grayscale-800);\n --colors-muted-foreground: var(--colors-grayscale-400);\n --colors-card: var(--colors-grayscale-950);\n --colors-card-foreground: var(--colors-grayscale-50);\n --colors-popover: var(--colors-grayscale-950);\n --colors-popover-foreground: var(--colors-grayscale-50);\n --colors-border: var(--colors-grayscale-800);\n --colors-input: var(--colors-grayscale-800);\n --colors-secondary: var(--colors-grayscale-800);\n --colors-secondary-foreground: var(--colors-grayscale-50);\n --colors-accent: var(--colors-grayscale-800);\n --colors-accent-foreground: var(--colors-grayscale-50);\n --colors-destructive: var(--colors-red-700);\n --colors-destructive-foreground: var(--colors-red-50);\n --colors-ring: var(--colors-grayscale-300);\n --colors-primary-foreground: var(--colors-grayscale-900)\n}\n\n @keyframes spin {\n to {\n transform: rotate(360deg);\n}\n}\n\n @keyframes ping {\n 75%,100% {\n transform: scale(2);\n opacity: 0;\n}\n}\n\n @keyframes pulse {\n 50% {\n opacity: 0.5;\n}\n}\n\n @keyframes bounce {\n 0%,100% {\n transform: translateY(-25%);\n animation-timing-function: cubic-bezier(0.8,0,1,1);\n}\n\n 50% {\n transform: none;\n animation-timing-function: cubic-bezier(0,0,0.2,1);\n}\n}\n\n @keyframes enter {\n from {\n opacity: var(--shadow-panda-enter-opacity, 1);\n transform: translate3d(var(--shadow-panda-enter-translate-x, 0), var(--shadow-panda-enter-translate-y, 0), 0) scale3d(var(--shadow-panda-enter-scale, 1), var(--shadow-panda-enter-scale, 1), var(--shadow-panda-enter-scale, 1)) rotate(var(--shadow-panda-enter-rotate, 0));\n}\n}\n\n @keyframes exit {\n to {\n opacity: var(--shadow-panda-exit-opacity, 1);\n transform: translate3d(var(--shadow-panda-exit-translate-x, 0), var(--shadow-panda-exit-translate-y, 0), 0) scale3d(var(--shadow-panda-exit-scale, 1), var(--shadow-panda-exit-scale, 1), var(--shadow-panda-exit-scale, 1)) rotate(var(--shadow-panda-exit-rotate, 0));\n}\n}\n\n @keyframes accordion-down {\n from {\n height: var(--sizes-0);\n}\n\n to {\n height: var(--radix-accordion-content-height);\n}\n}\n\n @keyframes accordion-up {\n from {\n height: var(--radix-accordion-content-height);\n}\n\n to {\n height: var(--sizes-0);\n}\n}\n}\n\n@layer recipes{\n @layer _base{\n\n .badge {\n display: inline-flex;\n border-radius: var(--radii-full);\n border: var(--borders-base);\n padding-inline: var(--spacing-2\\.5);\n padding-block: var(--spacing-0\\.5);\n font-size: 0.75rem;\n line-height: 1rem;\n transition-property: var(--transition-prop, color, background-color, border-color, outline-color, text-decoration-color, fill, stroke);\n transition-timing-function: var(--transition-easing, cubic-bezier(0.4, 0, 0.2, 1));\n transition-duration: var(--transition-duration, 150ms);\n --shadow-panda-ring-offset-color: var(--colors-background);\n align-items: center;\n font-weight: var(--font-weights-semibold);\n}\n\n .badge:is(:focus, [data-focus]) {\n outline: 2px solid transparent;\n outline-offset: 2px;\n --shadow-panda-ring-offset-shadow: var(--shadow-panda-ring-inset,) 0 0 0 var(--shadow-panda-ring-offset-width, 0px) var(--shadow-panda-ring-offset-color);\n --shadow-panda-ring-shadow: var(--shadow-panda-ring-inset,) 0 0 0 calc(2px + var(--shadow-panda-ring-offset-width, 0px)) var(--shadow-panda-ring-color);\n box-shadow: var(--shadow-panda-ring-offset-shadow),var(--shadow-panda-ring-shadow),var(--shadow-panda-base-shadow,0 0 #0000);\n --shadow-panda-ring-color: var(--colors-ring);\n --shadow-panda-ring-offset-width: 2px;\n}\n\n .button {\n display: inline-flex;\n border-radius: var(--radii-md);\n font-size: 0.875rem;\n line-height: 1.25rem;\n transition-property: var(--transition-prop, color, background-color, border-color, outline-color, text-decoration-color, fill, stroke);\n transition-timing-function: var(--transition-easing, cubic-bezier(0.4, 0, 0.2, 1));\n transition-duration: var(--transition-duration, 150ms);\n cursor: pointer;\n --shadow-panda-ring-offset-color: var(--colors-background);\n gap: var(--spacing-2);\n align-items: center;\n justify-content: center;\n font-weight: var(--font-weights-medium);\n}\n\n .button:is(:disabled, [disabled], [data-disabled]) {\n pointer-events: none;\n opacity: 50%;\n}\n\n .button:is(:focus-visible, [data-focus-visible]) {\n outline: 2px solid transparent;\n outline-offset: 2px;\n --shadow-panda-ring-offset-shadow: var(--shadow-panda-ring-inset,) 0 0 0 var(--shadow-panda-ring-offset-width, 0px) var(--shadow-panda-ring-offset-color);\n --shadow-panda-ring-shadow: var(--shadow-panda-ring-inset,) 0 0 0 calc(2px + var(--shadow-panda-ring-offset-width, 0px)) var(--shadow-panda-ring-color);\n box-shadow: var(--shadow-panda-ring-offset-shadow),var(--shadow-panda-ring-shadow),var(--shadow-panda-base-shadow,0 0 #0000);\n --shadow-panda-ring-color: var(--colors-ring);\n --shadow-panda-ring-offset-width: 2px;\n}\n\n .label {\n font-size: 0.875rem;\n line-height: var(--line-heights-none);\n font-weight: var(--font-weights-medium);\n}\n\n .peer:is(:disabled, [disabled], [data-disabled]) ~ .label {\n cursor: not-allowed;\n opacity: 0.7;\n}\n\n .separator {\n background: var(--colors-border);\n flex-shrink: 0;\n}\n\n .tableRow {\n border-bottom: var(--borders-base);\n transition-property: var(--transition-prop, color, background-color, border-color, outline-color, text-decoration-color, fill, stroke);\n transition-timing-function: var(--transition-easing, cubic-bezier(0.4, 0, 0.2, 1));\n transition-duration: var(--transition-duration, 150ms);\n}\n\n .tableRow[data-state=selected] {\n --sp-bga: color-mix(in srgb, transparent 0%, var(--colors-muted));\n background-color: var(--sp-bga, var(--colors-muted));\n}\n\n .tableRow:is(:hover, [data-hover]) {\n --sp-bga: color-mix(in srgb, transparent 50%, var(--colors-muted));\n background-color: var(--sp-bga, var(--colors-muted));\n}\n\n .tableCell {\n padding: var(--spacing-4);\n vertical-align: middle;\n}\n\n .tableCell:has([role=checkbox]) {\n padding-right: var(--spacing-0);\n}\n\n .card {\n border-radius: var(--radii-lg);\n border: var(--borders-base);\n background: var(--colors-card);\n color: var(--colors-card-foreground);\n box-shadow: var(--shadows-sm);\n}\n\n .table {\n width: var(--sizes-full);\n caption-side: bottom;\n font-size: 0.875rem;\n line-height: 1.25rem;\n}\n\n .tableBody tr:last-child {\n border-bottom: transparent;\n}\n\n .formItem {\n display: flex;\n gap: var(--spacing-2);\n flex-direction: column;\n}\n\n .formDescription {\n color: var(--colors-muted-foreground);\n}\n\n .formDescription,.formMessage {\n font-size: 0.875rem;\n line-height: 1.25rem;\n}\n\n .formMessage {\n color: var(--colors-destructive);\n font-weight: var(--font-weights-medium);\n}\n\n .input {\n display: flex;\n height: var(--sizes-10);\n width: var(--sizes-full);\n border-radius: var(--radii-md);\n border: var(--borders-input);\n background: var(--colors-background);\n padding-inline: var(--spacing-3);\n padding-block: var(--spacing-2);\n font-size: 0.875rem;\n line-height: 1.25rem;\n --shadow-panda-ring-offset-color: var(--colors-background);\n}\n\n .input::file-selector-button {\n border: var(--borders-none);\n background: var(--colors-transparent);\n font-size: 0.875rem;\n line-height: 1.25rem;\n font-weight: var(--font-weights-medium);\n}\n\n .input::placeholder,.input[data-placeholder] {\n color: var(--colors-muted-foreground);\n}\n\n .input:is(:disabled, [disabled], [data-disabled]) {\n cursor: not-allowed;\n opacity: 0.5;\n}\n\n .input:is(:focus-visible, [data-focus-visible]) {\n outline: 2px solid transparent;\n outline-offset: 2px;\n --shadow-panda-ring-offset-shadow: var(--shadow-panda-ring-inset,) 0 0 0 var(--shadow-panda-ring-offset-width, 0px) var(--shadow-panda-ring-offset-color);\n --shadow-panda-ring-shadow: var(--shadow-panda-ring-inset,) 0 0 0 calc(2px + var(--shadow-panda-ring-offset-width, 0px)) var(--shadow-panda-ring-color);\n box-shadow: var(--shadow-panda-ring-offset-shadow),var(--shadow-panda-ring-shadow),var(--shadow-panda-base-shadow,0 0 #0000);\n --shadow-panda-ring-color: var(--colors-ring);\n --shadow-panda-ring-offset-width: 2px;\n}\n\n .tableContainer {\n width: var(--sizes-full);\n overflow: auto;\n}\n\n .toastViewport {\n position: fixed;\n z-index: 100;\n display: flex;\n max-height: 100vh;\n width: var(--sizes-full);\n padding: var(--spacing-4);\n top: var(--spacing-0);\n flex-direction: column-reverse;\n}\n\n .skeleton {\n animation: var(--animations-pulse);\n border-radius: var(--radii-md);\n background: var(--colors-muted);\n}\n\n @media screen and (min-width: 40rem) {\n .toastViewport {\n bottom: var(--spacing-0);\n right: var(--spacing-0);\n top: auto;\n flex-direction: column;\n}\n}\n\n @media screen and (min-width: 48rem) {\n .toastViewport {\n max-width: 420px;\n}\n}\n}\n\n .icon--size_md {\n height: var(--sizes-4);\n width: var(--sizes-4);\n}\n\n .icon--size_xs {\n height: var(--sizes-2);\n width: var(--sizes-2);\n}\n\n .icon--size_sm {\n height: var(--sizes-3);\n width: var(--sizes-3);\n}\n\n .icon--left_auto {\n margin-left: auto;\n}\n\n .icon--fillCurrent_true {\n fill: currentColor;\n}\n\n .icon--dimmed_true {\n opacity: 0.5;\n}\n\n .badge--variant_default {\n background: var(--colors-primary);\n color: var(--colors-primary-foreground);\n border-color: var(--colors-transparent);\n}\n\n .badge--variant_default:is(:hover, [data-hover]) {\n --sp-bga: color-mix(in srgb, transparent 20%, var(--colors-primary));\n background-color: var(--sp-bga, var(--colors-primary));\n}\n\n .button--variant_ghost:is(:hover, [data-hover]) {\n background: var(--colors-accent);\n color: var(--colors-accent-foreground);\n}\n\n .button--size_sm {\n height: var(--sizes-9);\n border-radius: var(--radii-md);\n padding-inline: var(--spacing-3);\n}\n\n .button--variant_outline {\n border: var(--borders-input);\n background: var(--colors-background);\n}\n\n .button--variant_outline:is(:hover, [data-hover]) {\n background: var(--colors-accent);\n color: var(--colors-accent-foreground);\n}\n\n .button--size_default {\n height: var(--sizes-10);\n padding-inline: var(--spacing-4);\n padding-block: var(--spacing-2);\n}\n\n .button--variant_default {\n background: var(--colors-primary);\n color: var(--colors-primary-foreground);\n}\n\n .button--variant_default:is(:hover, [data-hover]) {\n --sp-bga: color-mix(in srgb, transparent NaN, var(--colors-primary));\n background-color: var(--sp-bga, var(--colors-primary));\n}\n\n .button--size_icon {\n height: var(--sizes-10);\n width: var(--sizes-10);\n}\n\n .button--variant_destructive {\n background: var(--colors-destructive);\n color: var(--colors-destructive-foreground);\n}\n\n .button--variant_destructive:is(:hover, [data-hover]) {\n --sp-bga: color-mix(in srgb, transparent NaN, var(--colors-destructive));\n background-color: var(--sp-bga, var(--colors-destructive));\n}\n\n .button--variant_secondary {\n background: var(--colors-secondary);\n color: var(--colors-secondary-foreground);\n}\n\n .button--variant_secondary:is(:hover, [data-hover]) {\n --sp-bga: color-mix(in srgb, transparent NaN, var(--colors-secondary));\n background-color: var(--sp-bga, var(--colors-secondary));\n}\n\n .button--variant_link {\n color: var(--colors-primary);\n text-underline-offset: 4px;\n}\n\n .button--variant_link:is(:hover, [data-hover]) {\n text-decoration: underline;\n}\n\n .button--size_lg {\n height: var(--sizes-11);\n border-radius: var(--radii-md);\n padding-inline: var(--spacing-8);\n}\n\n .separator--orientation_vertical {\n height: var(--sizes-full);\n width: 1px;\n}\n\n .separator--orientation_horizontal {\n height: 1px;\n width: var(--sizes-full);\n}\n}\n\n@layer recipes.slots{\n @layer _base{\n\n .tooltip__content {\n z-index: 50;\n overflow: hidden;\n border-radius: var(--radii-md);\n border: var(--borders-base);\n background: var(--colors-popover);\n padding-inline: var(--spacing-3);\n padding-block: var(--spacing-1\\.5);\n font-size: 0.875rem;\n line-height: 1.25rem;\n color: var(--colors-popover-foreground);\n box-shadow: var(--shadows-md);\n animation-name: enter;\n animation-duration: var(--durations-fast);\n --shadow-panda-enter-opacity: 0;\n --shadow-panda-enter-scale: 0.95;\n --shadow-panda-enter-rotate: 0;\n --shadow-panda-enter-translate-x: 0;\n --shadow-panda-enter-translate-y: 0;\n}\n\n .tooltip__content[data-state=closed] {\n animation-name: exit;\n animation-duration: var(--durations-fast);\n --shadow-panda-exit-opacity: 0;\n --shadow-panda-exit-scale: 0.95;\n --shadow-panda-exit-rotate: 0;\n --shadow-panda-exit-translate-x: 0;\n --shadow-panda-exit-translate-y: 0;\n}\n\n .tooltip__content[data-side=top] {\n --shadow-panda-enter-translate-y: var(--spacing-2);\n}\n\n .tooltip__content[data-side=bottom] {\n --shadow-panda-enter-translate-y: calc(var(--spacing-2) * -1);\n}\n\n .tooltip__content[data-side=left] {\n --shadow-panda-enter-translate-x: var(--spacing-2);\n}\n\n .tooltip__content[data-side=right] {\n --shadow-panda-enter-translate-x: calc(var(--spacing-2) * -1);\n}\n\n .dropdownMenu__subTrigger {\n display: flex;\n cursor: default;\n -webkit-user-select: none;\n user-select: none;\n border-radius: var(--radii-sm);\n padding-inline: var(--spacing-2);\n padding-block: var(--spacing-1\\.5);\n font-size: 0.875rem;\n line-height: 1.25rem;\n outline: var(--borders-none);\n gap: var(--spacing-2);\n align-items: center;\n}\n\n .dropdownMenu__subTrigger[data-state=open] {\n background: var(--colors-accent);\n}\n\n .dropdownMenu__subTrigger:is(:focus, [data-focus]) {\n background: var(--colors-accent);\n}\n\n .dropdownMenu__subContent {\n z-index: 50;\n min-width: 8rem;\n overflow: hidden;\n border-radius: var(--radii-md);\n border: var(--borders-base);\n background: var(--colors-popover);\n padding: var(--spacing-1);\n color: var(--colors-popover-foreground);\n box-shadow: var(--shadows-lg);\n}\n\n .dropdownMenu__subContent[data-state=open] {\n animation-name: enter;\n animation-duration: var(--durations-fast);\n --shadow-panda-enter-opacity: 0;\n --shadow-panda-enter-scale: 0.95;\n --shadow-panda-enter-rotate: 0;\n --shadow-panda-enter-translate-x: 0;\n --shadow-panda-enter-translate-y: 0;\n}\n\n .dropdownMenu__subContent[data-state=closed] {\n animation-name: exit;\n animation-duration: var(--durations-fast);\n --shadow-panda-exit-opacity: 0;\n --shadow-panda-exit-scale: 0.95;\n --shadow-panda-exit-rotate: 0;\n --shadow-panda-exit-translate-x: 0;\n --shadow-panda-exit-translate-y: 0;\n}\n\n .dropdownMenu__content {\n z-index: 50;\n min-width: 8rem;\n overflow: hidden;\n border-radius: var(--radii-md);\n border: var(--borders-base);\n background: var(--colors-popover);\n padding: var(--spacing-1);\n color: var(--colors-popover-foreground);\n box-shadow: var(--shadows-md);\n}\n\n .dropdownMenu__content[data-state=open] {\n animation-name: enter;\n animation-duration: var(--durations-fast);\n --shadow-panda-enter-opacity: 0;\n --shadow-panda-enter-scale: 0.95;\n --shadow-panda-enter-rotate: 0;\n --shadow-panda-enter-translate-x: 0;\n --shadow-panda-enter-translate-y: 0;\n}\n\n .dropdownMenu__content[data-state=closed] {\n animation-name: exit;\n animation-duration: var(--durations-fast);\n --shadow-panda-exit-opacity: 0;\n --shadow-panda-exit-scale: 0.95;\n --shadow-panda-exit-rotate: 0;\n --shadow-panda-exit-translate-x: 0;\n --shadow-panda-exit-translate-y: 0;\n}\n\n .dropdownMenu__item {\n position: relative;\n display: flex;\n cursor: default;\n -webkit-user-select: none;\n user-select: none;\n border-radius: var(--radii-sm);\n padding-inline: var(--spacing-2);\n padding-block: var(--spacing-1\\.5);\n font-size: 0.875rem;\n line-height: 1.25rem;\n outline: var(--borders-none);\n transition-property: var(--transition-prop, color, background-color, border-color, outline-color, text-decoration-color, fill, stroke);\n transition-timing-function: var(--transition-easing, cubic-bezier(0.4, 0, 0.2, 1));\n transition-duration: var(--transition-duration, 150ms);\n gap: var(--spacing-2);\n align-items: center;\n}\n\n .dropdownMenu__item[data-disabled] {\n pointer-events: none;\n opacity: 0.5;\n}\n\n .dropdownMenu__item:is(:focus, [data-focus]) {\n background: var(--colors-accent);\n color: var(--colors-accent-foreground);\n}\n\n .dropdownMenu__itemIndicator {\n position: absolute;\n display: flex;\n height: var(--sizes-3\\.5);\n width: var(--sizes-3\\.5);\n left: var(--spacing-2);\n align-items: center;\n justify-content: center;\n}\n\n .dropdownMenu__checkboxItem {\n position: relative;\n display: flex;\n cursor: default;\n -webkit-user-select: none;\n user-select: none;\n border-radius: var(--radii-sm);\n padding-block: var(--spacing-1\\.5);\n font-size: 0.875rem;\n line-height: 1.25rem;\n outline: var(--borders-none);\n transition-property: var(--transition-prop, color, background-color, border-color, outline-color, text-decoration-color, fill, stroke);\n transition-timing-function: var(--transition-easing, cubic-bezier(0.4, 0, 0.2, 1));\n transition-duration: var(--transition-duration, 150ms);\n align-items: center;\n padding-left: var(--spacing-8);\n padding-right: var(--spacing-2);\n}\n\n .dropdownMenu__checkboxItem[data-disabled] {\n pointer-events: none;\n opacity: 0.5;\n}\n\n .dropdownMenu__checkboxItem:is(:focus, [data-focus]) {\n background: var(--colors-accent);\n color: var(--colors-accent-foreground);\n}\n\n .dropdownMenu__radioItem {\n position: relative;\n display: flex;\n cursor: default;\n -webkit-user-select: none;\n user-select: none;\n border-radius: var(--radii-sm);\n padding-block: var(--spacing-1\\.5);\n font-size: 0.875rem;\n line-height: 1.25rem;\n outline: var(--borders-none);\n transition-property: var(--transition-prop, color, background-color, border-color, outline-color, text-decoration-color, fill, stroke);\n transition-timing-function: var(--transition-easing, cubic-bezier(0.4, 0, 0.2, 1));\n transition-duration: var(--transition-duration, 150ms);\n align-items: center;\n padding-left: var(--spacing-8);\n padding-right: var(--spacing-2);\n}\n\n .dropdownMenu__radioItem[data-disabled] {\n pointer-events: none;\n opacity: 0.5;\n}\n\n .dropdownMenu__radioItem:is(:focus, [data-focus]) {\n background: var(--colors-accent);\n color: var(--colors-accent-foreground);\n}\n\n .dropdownMenu__label {\n padding-inline: var(--spacing-2);\n padding-block: var(--spacing-1\\.5);\n font-size: 0.875rem;\n line-height: 1.25rem;\n font-weight: var(--font-weights-semibold);\n}\n\n .dropdownMenu__separator {\n margin-inline: calc(var(--spacing-1) * -1);\n margin-block: var(--spacing-1);\n height: 1px;\n background: var(--colors-muted);\n}\n\n .dropdownMenu__shortcut {\n font-size: 0.75rem;\n line-height: 1rem;\n letter-spacing: var(--letter-spacings-widest);\n opacity: 0.6;\n margin-left: auto;\n}\n\n .checkbox__root {\n height: var(--sizes-4);\n width: var(--sizes-4);\n border-radius: var(--radii-sm);\n border: var(--borders-primary);\n cursor: pointer;\n --shadow-panda-ring-offset-color: var(--colors-background);\n flex-shrink: 0;\n}\n\n .checkbox__root:is(:disabled, [disabled], [data-disabled]) {\n cursor: not-allowed;\n opacity: 0.5;\n}\n\n .checkbox__root[data-state=\"checked\"] {\n background: var(--colors-primary);\n color: var(--colors-primary-foreground);\n}\n\n .checkbox__root:is(:focus-visible, [data-focus-visible]) {\n outline: 2px solid transparent;\n outline-offset: 2px;\n --shadow-panda-ring-offset-shadow: var(--shadow-panda-ring-inset,) 0 0 0 var(--shadow-panda-ring-offset-width, 0px) var(--shadow-panda-ring-offset-color);\n --shadow-panda-ring-shadow: var(--shadow-panda-ring-inset,) 0 0 0 calc(2px + var(--shadow-panda-ring-offset-width, 0px)) var(--shadow-panda-ring-color);\n box-shadow: var(--shadow-panda-ring-offset-shadow),var(--shadow-panda-ring-shadow),var(--shadow-panda-base-shadow,0 0 #0000);\n --shadow-panda-ring-color: var(--colors-ring);\n --shadow-panda-ring-offset-width: 2px;\n}\n\n .checkbox__indicator {\n display: flex;\n color: currentColor;\n align-items: center;\n justify-content: center;\n}\n\n .popover__content {\n z-index: 50;\n width: var(--sizes-72);\n border-radius: var(--radii-md);\n border: var(--borders-base);\n background: var(--colors-popover);\n padding: var(--spacing-4);\n color: var(--colors-popover-foreground);\n box-shadow: var(--shadows-md);\n outline: var(--borders-none);\n}\n\n .popover__content[data-state=open] {\n animation-name: enter;\n animation-duration: var(--durations-fast);\n --shadow-panda-enter-opacity: 0;\n --shadow-panda-enter-scale: 0.95;\n --shadow-panda-enter-rotate: 0;\n --shadow-panda-enter-translate-x: 0;\n --shadow-panda-enter-translate-y: 0;\n}\n\n .popover__content[data-state=closed] {\n animation-name: exit;\n animation-duration: var(--durations-fast);\n --shadow-panda-exit-opacity: 0;\n --shadow-panda-exit-scale: 0.95;\n --shadow-panda-exit-rotate: 0;\n --shadow-panda-exit-translate-x: 0;\n --shadow-panda-exit-translate-y: 0;\n}\n\n .popover__content[data-side=top] {\n --shadow-panda-enter-translate-y: var(--spacing-2);\n}\n\n .popover__content[data-side=bottom] {\n --shadow-panda-enter-translate-y: calc(var(--spacing-2) * -1);\n}\n\n .popover__content[data-side=left] {\n --shadow-panda-enter-translate-x: var(--spacing-2);\n}\n\n .popover__content[data-side=right] {\n --shadow-panda-enter-translate-x: calc(var(--spacing-2) * -1);\n}\n\n .calendar__root {\n padding: var(--spacing-3);\n}\n\n .calendar__months {\n display: flex;\n}\n\n .calendar__months > * + * {\n margin-top: var(--spacing-4);\n}\n\n .calendar__months {\n flex-direction: column;\n}\n\n .calendar__month > * + * {\n margin-top: var(--spacing-4);\n}\n\n .calendar__caption {\n display: flex;\n position: relative;\n justify-content: center;\n align-items: center;\n padding-top: var(--spacing-1);\n}\n\n .calendar__caption_label {\n font-size: 0.875rem;\n line-height: 1.25rem;\n font-weight: var(--font-weights-medium);\n}\n\n .calendar__nav {\n display: flex;\n}\n\n .calendar__nav > * + * {\n margin-left: var(--spacing-1);\n}\n\n .calendar__nav {\n align-items: center;\n}\n\n .calendar__nav_button {\n height: var(--sizes-7) !important;\n width: var(--sizes-7) !important;\n padding-inline: var(--spacing-0) !important;\n padding-block: var(--spacing-0) !important;\n background: var(--colors-transparent);\n opacity: 0.5;\n}\n\n .calendar__nav_button:hover {\n opacity: 1;\n}\n\n .calendar__nav_button_previous {\n position: absolute;\n left: var(--spacing-1);\n}\n\n .calendar__nav_button_next {\n position: absolute;\n right: var(--spacing-1);\n}\n\n .calendar__table {\n width: var(--sizes-full);\n border-collapse: collapse;\n}\n\n .calendar__table > * + * {\n margin-top: var(--spacing-1);\n}\n\n .calendar__head_row {\n display: flex;\n}\n\n .calendar__head_cell {\n color: var(--colors-muted-foreground);\n border-radius: var(--radii-md);\n width: var(--sizes-9);\n font-weight: var(--font-weights-normal);\n font-size: 0.8rem;\n}\n\n .calendar__row {\n display: flex;\n width: var(--sizes-full);\n margin-top: var(--spacing-2);\n}\n\n .calendar__cell {\n text-align: center;\n font-size: 0.875rem;\n line-height: 1.25rem;\n padding: var(--spacing-0);\n position: relative;\n}\n\n .calendar__cell:has([aria-selected]) {\n background: var(--colors-accent);\n}\n\n .calendar__cell:focus-within {\n position: relative;\n z-index: 20;\n}\n\n .calendar__cell:first-child:has([aria-selected]) {\n border-top-left-radius: var(--radii-md);\n border-bottom-left-radius: var(--radii-md);\n}\n\n .calendar__cell:last-child:has([aria-selected]) {\n border-top-right-radius: var(--radii-md);\n border-bottom-right-radius: var(--radii-md);\n}\n\n .calendar__day {\n height: var(--sizes-9) !important;\n width: var(--sizes-9) !important;\n padding-inline: var(--spacing-0) !important;\n padding-block: var(--spacing-0) !important;\n font-weight: var(--font-weights-normal);\n}\n\n .calendar__day[aria-selected=\"true\"] {\n opacity: 1;\n}\n\n .calendar__day_selected {\n background: var(--colors-primary);\n color: var(--colors-primary-foreground);\n}\n\n .calendar__day_selected:is(:focus, [data-focus]) {\n background: var(--colors-primary);\n color: var(--colors-primary-foreground);\n}\n\n .calendar__day_selected:is(:hover, [data-hover]) {\n background: var(--colors-primary);\n color: var(--colors-primary-foreground);\n}\n\n .calendar__day_today {\n background: var(--colors-accent);\n color: var(--colors-accent-foreground);\n}\n\n .calendar__day_outside,.calendar__day_disabled {\n color: var(--colors-muted-foreground);\n opacity: 0.5;\n}\n\n .calendar__day_range_start:is(:hover, [data-hover]) {\n background: var(--colors-primary) !important;\n color: var(--colors-primary-foreground) !important;\n}\n\n .calendar__day_range_middle[aria-selected=\"true\"] {\n background: var(--colors-accent);\n color: var(--colors-accent-foreground);\n}\n\n .calendar__day_range_middle[aria-selected=\"true\"]:is(:hover, [data-hover]) {\n background: var(--colors-accent);\n color: var(--colors-accent-foreground);\n}\n\n .calendar__day_range_end:is(:hover, [data-hover]) {\n background: var(--colors-primary) !important;\n color: var(--colors-primary-foreground) !important;\n}\n\n .calendar__day_hidden {\n visibility: hidden;\n}\n\n .accordion__item {\n border-bottom: var(--borders-base);\n}\n\n .accordion__header,.accordion__trigger {\n display: flex;\n}\n\n .accordion__trigger {\n flex: 1 1 0%;\n padding-block: var(--spacing-4);\n transition-property: var(--transition-prop, all);\n transition-timing-function: var(--transition-easing, cubic-bezier(0.4, 0, 0.2, 1));\n transition-duration: var(--transition-duration, 150ms);\n cursor: pointer;\n align-items: center;\n justify-content: space-between;\n font-weight: var(--font-weights-medium);\n}\n\n .accordion__trigger > svg {\n height: var(--sizes-4);\n width: var(--sizes-4);\n transition-property: var(--transition-prop, transform);\n transition-timing-function: var(--transition-easing, cubic-bezier(0.4, 0, 0.2, 1));\n transition-duration: var(--durations-normal);\n flex-shrink: 0;\n --transition-duration: var(--durations-normal);\n}\n\n .accordion__trigger[data-state=open] > svg {\n transform: rotate(180deg);\n}\n\n .accordion__trigger:is(:hover, [data-hover]) {\n text-decoration: underline;\n}\n\n .accordion__content {\n overflow: hidden;\n font-size: 0.875rem;\n line-height: 1.25rem;\n transition-property: var(--transition-prop, all);\n transition-timing-function: var(--transition-easing, cubic-bezier(0.4, 0, 0.2, 1));\n transition-duration: var(--transition-duration, 150ms);\n}\n\n .accordion__content[data-state=closed] {\n animation: var(--animations-accordion-up);\n}\n\n .accordion__content[data-state=open] {\n animation: var(--animations-accordion-down);\n}\n\n .accordion__content > div {\n padding-bottom: var(--spacing-4);\n padding-top: var(--spacing-0);\n}\n\n .progress__root {\n position: relative;\n height: var(--sizes-4);\n width: var(--sizes-full);\n overflow: hidden;\n border-radius: var(--radii-full);\n background: var(--colors-secondary);\n}\n\n .progress__indicator {\n height: var(--sizes-full);\n width: var(--sizes-full);\n flex: 1 1 0%;\n background: var(--colors-primary);\n transition-property: var(--transition-prop, all);\n transition-timing-function: var(--transition-easing, cubic-bezier(0.4, 0, 0.2, 1));\n transition-duration: var(--transition-duration, 150ms);\n}\n\n .dialog__overlay {\n position: fixed;\n inset: var(--spacing-0);\n z-index: 50;\n --sp-bga: color-mix(in srgb, transparent 20%, var(--colors-background));\n background-color: var(--sp-bga, var(--colors-background));\n backdrop-filter: blur(4px);\n}\n\n .dialog__overlay[data-state=open] {\n animation-name: enter;\n animation-duration: var(--durations-fast);\n --shadow-panda-enter-opacity: 0;\n --shadow-panda-enter-scale: 1;\n --shadow-panda-enter-rotate: 0;\n --shadow-panda-enter-translate-x: 0;\n --shadow-panda-enter-translate-y: 0;\n}\n\n .dialog__overlay[data-state=closed] {\n animation-name: exit;\n animation-duration: var(--durations-fast);\n --shadow-panda-exit-opacity: 0;\n --shadow-panda-exit-scale: 1;\n --shadow-panda-exit-rotate: 0;\n --shadow-panda-exit-translate-x: 0;\n --shadow-panda-exit-translate-y: 0;\n}\n\n .dialog__close {\n position: absolute;\n border-radius: var(--radii-sm);\n opacity: 0.7;\n --shadow-panda-ring-offset-color: var(--colors-background);\n transition-property: var(--transition-prop, opacity);\n transition-timing-function: var(--transition-easing, cubic-bezier(0.4, 0, 0.2, 1));\n transition-duration: var(--transition-duration, 150ms);\n cursor: pointer;\n background: var(--colors-accent);\n color: var(--colors-muted-foreground);\n right: var(--spacing-4);\n top: var(--spacing-4);\n}\n\n .dialog__close:is(:disabled, [disabled], [data-disabled]) {\n pointer-events: none;\n}\n\n .dialog__close:is(:focus, [data-focus]) {\n outline: 2px solid transparent;\n outline-offset: 2px;\n --shadow-panda-ring-offset-shadow: var(--shadow-panda-ring-inset,) 0 0 0 var(--shadow-panda-ring-offset-width, 0px) var(--shadow-panda-ring-offset-color);\n --shadow-panda-ring-shadow: var(--shadow-panda-ring-inset,) 0 0 0 calc(2px + var(--shadow-panda-ring-offset-width, 0px)) var(--shadow-panda-ring-color);\n box-shadow: var(--shadow-panda-ring-offset-shadow),var(--shadow-panda-ring-shadow),var(--shadow-panda-base-shadow,0 0 #0000);\n --shadow-panda-ring-color: var(--colors-ring);\n --shadow-panda-ring-offset-width: 2px;\n}\n\n .dialog__close:is(:hover, [data-hover]) {\n opacity: 1;\n}\n\n .dialog__content {\n position: fixed;\n z-index: 50;\n display: grid;\n width: var(--sizes-full);\n max-width: var(--sizes-lg);\n transform: translate(var(--shadow-panda-translate-x, 0), var(--shadow-panda-translate-y, 0)) rotate(var(--shadow-panda-rotate, 0)) skewX(var(--shadow-panda-skew-x, 0)) skewY(var(--shadow-panda-skew-y, 0)) scaleX(var(--shadow-panda-scale-x, 1)) scaleY(var(--shadow-panda-scale-y, 1));\n --shadow-panda-translate-x: -50%;\n --shadow-panda-translate-y: -50%;\n gap: var(--spacing-4);\n border: var(--borders-base);\n background: var(--colors-background);\n padding: var(--spacing-6);\n box-shadow: var(--shadows-lg);\n left: 50%;\n top: 50%;\n --transition-duration: var(--durations-normal);\n transition-duration: var(--durations-normal);\n}\n\n .dialog__content[data-state=open] {\n animation-name: enter;\n animation-duration: var(--durations-fast);\n --shadow-panda-enter-opacity: 0;\n --shadow-panda-enter-scale: 0.95;\n --shadow-panda-enter-rotate: 0;\n --shadow-panda-enter-translate-x: calc(50% * -1);\n --shadow-panda-enter-translate-y: calc(48% * -1);\n}\n\n .dialog__content[data-state=closed] {\n animation-name: exit;\n animation-duration: var(--durations-fast);\n --shadow-panda-exit-opacity: 0;\n --shadow-panda-exit-scale: 0.95;\n --shadow-panda-exit-rotate: 0;\n --shadow-panda-exit-translate-x: calc(50% * -1);\n --shadow-panda-exit-translate-y: calc(48% * -1);\n}\n\n .dialog__header {\n display: flex;\n}\n\n .dialog__header > * + * {\n margin-top: var(--spacing-1\\.5);\n}\n\n .dialog__header {\n text-align: center;\n flex-direction: column;\n}\n\n .dialog__footer {\n display: flex;\n flex-direction: column-reverse;\n}\n\n .dialog__title {\n font-size: 1.125rem;\n line-height: var(--line-heights-none);\n letter-spacing: var(--letter-spacings-tight);\n font-weight: var(--font-weights-semibold);\n}\n\n .dialog__description {\n font-size: 0.875rem;\n line-height: 1.25rem;\n color: var(--colors-muted-foreground);\n}\n\n .toast__root {\n pointer-events: auto;\n position: relative;\n display: flex;\n width: var(--sizes-full);\n gap: var(--spacing-4);\n overflow: hidden;\n border-radius: var(--radii-md);\n border: var(--borders-base);\n padding: var(--spacing-6);\n box-shadow: var(--shadows-lg);\n transition-property: var(--transition-prop, all);\n transition-timing-function: var(--transition-easing, cubic-bezier(0.4, 0, 0.2, 1));\n transition-duration: var(--transition-duration, 150ms);\n align-items: center;\n justify-content: space-between;\n padding-right: var(--spacing-8);\n}\n\n .toast__root[data-swipe=cancel] {\n transform: translateX(0);\n}\n\n .toast__root[data-swipe=end] {\n transform: translateX(var(--radix-toast-swipe-end-x));\n animation-name: exit;\n animation-duration: var(--durations-fast);\n --shadow-panda-exit-opacity: 1;\n --shadow-panda-exit-scale: 1;\n --shadow-panda-exit-rotate: 0;\n --shadow-panda-exit-translate-x: 0;\n --shadow-panda-exit-translate-y: 0;\n}\n\n .toast__root[data-swipe=move] {\n transform: translateX(var(--radix-toast-swipe-move-x));\n transition: none;\n}\n\n .toast__root[data-state=open] {\n animation-name: enter;\n animation-duration: var(--durations-fast);\n --shadow-panda-enter-opacity: 1;\n --shadow-panda-enter-scale: 1;\n --shadow-panda-enter-rotate: 0;\n --shadow-panda-enter-translate-x: 0;\n --shadow-panda-enter-translate-y: calc(100% * -1);\n}\n\n .toast__root[data-state=closed] {\n animation-name: exit;\n animation-duration: var(--durations-fast);\n --shadow-panda-exit-opacity: 0.8;\n --shadow-panda-exit-scale: 1;\n --shadow-panda-exit-rotate: 0;\n --shadow-panda-exit-translate-x: 100%;\n --shadow-panda-exit-translate-y: 0;\n}\n\n .toast__action {\n display: inline-flex;\n height: var(--sizes-8);\n border-radius: var(--radii-md);\n border: var(--borders-base);\n background: var(--colors-transparent);\n padding-inline: var(--spacing-3);\n font-size: 0.875rem;\n line-height: 1.25rem;\n --shadow-panda-ring-offset-color: var(--colors-background);\n transition-property: var(--transition-prop, color, background-color, border-color, outline-color, text-decoration-color, fill, stroke);\n transition-timing-function: var(--transition-easing, cubic-bezier(0.4, 0, 0.2, 1));\n transition-duration: var(--transition-duration, 150ms);\n cursor: pointer;\n flex-shrink: 0;\n align-items: center;\n justify-content: center;\n font-weight: var(--font-weights-medium);\n}\n\n .toast__action:is(:disabled, [disabled], [data-disabled]) {\n pointer-events: none;\n opacity: 0.5;\n}\n\n .toast__action:is(:focus, [data-focus]) {\n outline: 2px solid transparent;\n outline-offset: 2px;\n --shadow-panda-ring-offset-shadow: var(--shadow-panda-ring-inset,) 0 0 0 var(--shadow-panda-ring-offset-width, 0px) var(--shadow-panda-ring-offset-color);\n --shadow-panda-ring-shadow: var(--shadow-panda-ring-inset,) 0 0 0 calc(2px + var(--shadow-panda-ring-offset-width, 0px)) var(--shadow-panda-ring-color);\n box-shadow: var(--shadow-panda-ring-offset-shadow),var(--shadow-panda-ring-shadow),var(--shadow-panda-base-shadow,0 0 #0000);\n --shadow-panda-ring-color: var(--colors-ring);\n --shadow-panda-ring-offset-width: 2px;\n}\n\n .toast__action:is(:hover, [data-hover]) {\n background: var(--colors-secondary);\n}\n\n .toast__close {\n position: absolute;\n border-radius: var(--radii-md);\n padding: var(--spacing-1);\n --sp-ca: color-mix(in srgb, transparent 50%, var(--colors-foreground));\n color: var(--sp-ca, var(--colors-foreground));\n opacity: 0;\n transition-property: var(--transition-prop, opacity);\n transition-timing-function: var(--transition-easing, cubic-bezier(0.4, 0, 0.2, 1));\n transition-duration: var(--transition-duration, 150ms);\n cursor: pointer;\n right: var(--spacing-2);\n top: var(--spacing-2);\n}\n\n .toast__close:is(:focus, [data-focus]) {\n opacity: 1;\n outline: 2px solid transparent;\n outline-offset: 2px;\n --shadow-panda-ring-offset-shadow: var(--shadow-panda-ring-inset,) 0 0 0 var(--shadow-panda-ring-offset-width, 0px) var(--shadow-panda-ring-offset-color);\n --shadow-panda-ring-shadow: var(--shadow-panda-ring-inset,) 0 0 0 calc(2px + var(--shadow-panda-ring-offset-width, 0px)) var(--shadow-panda-ring-color);\n box-shadow: var(--shadow-panda-ring-offset-shadow),var(--shadow-panda-ring-shadow),var(--shadow-panda-base-shadow,0 0 #0000);\n --shadow-panda-ring-color: var(--colors-ring);\n --shadow-panda-ring-offset-width: 2px;\n}\n\n .toast__close:is(:hover, [data-hover]) {\n color: var(--colors-foreground);\n}\n\n .group:is(:hover, [data-hover]) .toast__close {\n opacity: 1;\n}\n\n .toast__title {\n font-weight: var(--font-weights-semibold);\n}\n\n .toast__title,.toast__description {\n font-size: 0.875rem;\n line-height: 1.25rem;\n}\n\n .toast__description {\n opacity: 0.9;\n}\n\n .command-dialog__content {\n overflow: hidden;\n padding: var(--spacing-0) !important;\n box-shadow: var(--shadows-lg) !important;\n}\n\n .command-dialog__command [cmdk-group-heading] {\n padding-inline: var(--spacing-2);\n color: var(--colors-muted-foreground);\n font-weight: var(--font-weights-medium);\n}\n\n .command-dialog__command [cmdk-group] {\n padding-inline: var(--spacing-2);\n}\n\n .command-dialog__command [cmdk-input-wrapper] svg {\n height: var(--sizes-5);\n width: var(--sizes-5);\n}\n\n .command-dialog__command [cmdk-input] {\n height: var(--sizes-12);\n}\n\n .command-dialog__command [cmdk-item] {\n padding-block: var(--spacing-3);\n}\n\n .command-dialog__command [cmdk-item] svg {\n height: var(--sizes-5);\n width: var(--sizes-5);\n}\n\n .command-dialog__command [cmdk-group]:not([hidden]) ~[cmdk-group] {\n padding-top: var(--spacing-0);\n}\n\n .command__root {\n display: flex;\n height: var(--sizes-full);\n width: var(--sizes-full);\n overflow: hidden;\n border-radius: var(--radii-md);\n background: var(--colors-popover);\n color: var(--colors-popover-foreground);\n flex-direction: column;\n}\n\n .command__inputWrapper {\n display: flex;\n border-bottom: var(--borders-base);\n padding-inline: var(--spacing-3);\n align-items: center;\n}\n\n .command__inputSearch {\n height: var(--sizes-4);\n width: var(--sizes-4);\n opacity: 0.5;\n margin-right: var(--spacing-2);\n flex-shrink: 0;\n}\n\n .command__input {\n display: flex;\n height: var(--sizes-11);\n width: var(--sizes-full);\n border-radius: var(--radii-md);\n background: var(--colors-transparent);\n padding-block: var(--spacing-3);\n font-size: 0.875rem;\n line-height: 1.25rem;\n outline: var(--borders-none);\n box-shadow: none;\n}\n\n .command__input::placeholder,.command__input[data-placeholder] {\n color: var(--colors-muted-foreground);\n}\n\n .command__input:is(:disabled, [disabled], [data-disabled]) {\n cursor: not-allowed;\n opacity: 0.5;\n}\n\n .command__list {\n max-height: 300px;\n overflow-y: auto;\n overflow-x: hidden;\n}\n\n .command__empty {\n padding-block: var(--spacing-6);\n text-align: center;\n font-size: 0.875rem;\n line-height: 1.25rem;\n}\n\n .command__group {\n overflow: hidden;\n padding: var(--spacing-1);\n color: var(--colors-foreground);\n}\n\n .command__group [cmdk-group-heading] {\n padding-inline: var(--spacing-2);\n padding-block: var(--spacing-1\\.5);\n font-size: 0.75rem;\n line-height: 1rem;\n color: var(--colors-muted-foreground);\n font-weight: var(--font-weights-medium);\n}\n\n .command__separator {\n margin-inline: calc(var(--spacing-1) * -1);\n height: 1px;\n background: var(--colors-border);\n}\n\n .command__item {\n position: relative;\n display: flex;\n cursor: default;\n -webkit-user-select: none;\n user-select: none;\n border-radius: var(--radii-sm);\n padding-inline: var(--spacing-2);\n padding-block: var(--spacing-1\\.5);\n font-size: 0.875rem;\n line-height: 1.25rem;\n outline: var(--borders-none);\n gap: var(--spacing-2);\n align-items: center;\n}\n\n .command__item[aria-selected=true] {\n background: var(--colors-accent);\n color: var(--colors-accent-foreground);\n}\n\n .command__item[data-disabled] {\n opacity: 0.5;\n}\n\n .command__shortcut {\n font-size: 0.75rem;\n line-height: 1rem;\n letter-spacing: var(--letter-spacings-widest);\n color: var(--colors-muted-foreground);\n margin-left: auto;\n}\n\n .slider__root {\n display: flex;\n touch-action: none;\n -webkit-user-select: none;\n user-select: none;\n align-items: center;\n}\n\n .slider__root,.slider__track {\n position: relative;\n width: var(--sizes-full);\n}\n\n .slider__track {\n height: var(--sizes-2);\n overflow: hidden;\n border-radius: var(--radii-full);\n background: var(--colors-secondary);\n flex-grow: 1;\n}\n\n .slider__range {\n position: absolute;\n height: var(--sizes-full);\n background: var(--colors-primary);\n}\n\n .slider__thumb {\n display: block;\n height: var(--sizes-5);\n width: var(--sizes-5);\n cursor: pointer;\n border-radius: var(--radii-full);\n background: var(--colors-background);\n --shadow-panda-ring-offset-color: var(--colors-background);\n transition-property: var(--transition-prop, color, background-color, border-color, outline-color, text-decoration-color, fill, stroke);\n transition-timing-function: var(--transition-easing, cubic-bezier(0.4, 0, 0.2, 1));\n transition-duration: var(--transition-duration, 150ms);\n border-width: 2px;\n border-style: solid;\n border-color: var(--colors-primary);\n}\n\n .slider__thumb:is(:disabled, [disabled], [data-disabled]) {\n pointer-events: none;\n opacity: 0.5;\n}\n\n .slider__thumb:is(:focus-visible, [data-focus-visible]) {\n outline: 2px solid transparent;\n outline-offset: 2px;\n --shadow-panda-ring-offset-shadow: var(--shadow-panda-ring-inset,) 0 0 0 var(--shadow-panda-ring-offset-width, 0px) var(--shadow-panda-ring-offset-color);\n --shadow-panda-ring-shadow: var(--shadow-panda-ring-inset,) 0 0 0 calc(2px + var(--shadow-panda-ring-offset-width, 0px)) var(--shadow-panda-ring-color);\n box-shadow: var(--shadow-panda-ring-offset-shadow),var(--shadow-panda-ring-shadow),var(--shadow-panda-base-shadow,0 0 #0000);\n --shadow-panda-ring-color: var(--colors-ring);\n --shadow-panda-ring-offset-width: 2px;\n}\n\n @media screen and (min-width: 40rem) {\n .calendar__months > * + * {\n margin-left: var(--spacing-4);\n margin-top: var(--spacing-0);\n}\n\n .calendar__months {\n flex-direction: row;\n}\n .dialog__content {\n border-radius: var(--radii-lg);\n}\n .dialog__header {\n text-align: left;\n}\n .dialog__footer > * + * {\n margin-left: var(--spacing-2);\n}\n\n .dialog__footer {\n flex-direction: row;\n justify-content: flex-end;\n}\n .toast__root[data-state=open] {\n --shadow-panda-enter-translate-y: 100%;\n}\n}\n}\n\n .toast__root--variant_default {\n border: var(--borders-base);\n background: var(--colors-background);\n}\n\n .toast__root--variant_destructive {\n border: var(--borders-destructive);\n background: var(--colors-destructive);\n color: var(--colors-destructive-foreground);\n}\n\n .toast__action--variant_destructive {\n --sp-bca: color-mix(in srgb, transparent 60%, var(--colors-muted));\n border-color: var(--sp-bca, var(--colors-muted));\n}\n\n .toast__action--variant_destructive:is(:focus, [data-focus]) {\n --shadow-panda-ring-color: var(--colors-destructive);\n}\n\n .toast__action--variant_destructive:is(:hover, [data-hover]) {\n --sp-bca: color-mix(in srgb, transparent 70%, var(--colors-destructive));\n border-color: var(--sp-bca, var(--colors-destructive));\n background: var(--colors-destructive);\n color: var(--colors-destructive-foreground);\n}\n\n .toast__close--variant_destructive {\n color: var(--colors-red-300);\n}\n\n .toast__close--variant_destructive:is(:focus, [data-focus]) {\n --shadow-panda-ring-color: var(--colors-red-400);\n --shadow-panda-ring-offset-color: var(--colors-red-600);\n}\n\n .toast__close--variant_destructive:is(:hover, [data-hover]) {\n color: var(--colors-red-50);\n}\n}\n\n@layer utilities{\n\n .c_black {\n color: var(--colors-black);\n}\n\n .c_text\\.active {\n color: var(--colors-text-active);\n}\n\n .c_text\\.gray {\n color: var(--colors-text-gray);\n}\n\n .c_text\\.success {\n color: var(--colors-text-success);\n}\n\n .c_text\\.warning {\n color: var(--colors-text-warning);\n}\n\n .c_text\\.error {\n color: var(--colors-text-error);\n}\n\n .c_white {\n color: var(--colors-white);\n}\n\n .bd_none {\n border: var(--borders-none);\n}\n\n .py_0 {\n padding-block: var(--spacing-0);\n}\n\n .px_0 {\n padding-inline: var(--spacing-0);\n}\n\n .c_text\\.white {\n color: text.white;\n}\n\n .p_sm {\n padding: var(--spacing-sm);\n}\n\n .c_unset {\n color: unset;\n}\n\n .d_flex {\n display: flex;\n}\n\n .pointer-events_visible {\n pointer-events: visible;\n}\n\n .pointer-events_none {\n pointer-events: none;\n}\n\n .cursor_help {\n cursor: help;\n}\n\n .cursor_auto {\n cursor: auto;\n}\n\n .gap_xs {\n gap: var(--spacing-xs);\n}\n\n .white-space_nowrap {\n white-space: nowrap;\n}\n\n .max-w_full {\n max-width: var(--sizes-full);\n}\n\n .tov_ellipsis {\n text-overflow: ellipsis;\n}\n\n .tov_clip {\n text-overflow: clip;\n}\n\n .ov_hidden {\n overflow: hidden;\n}\n\n .gap_smaller\\.xs {\n gap: var(--spacing-smaller-xs);\n}\n\n .py_1 {\n padding-block: var(--spacing-1);\n}\n\n .w_icon\\.xs {\n width: var(--sizes-icon-xs);\n}\n\n .h_icon\\.xs {\n height: var(--sizes-icon-xs);\n}\n\n .c_dark\\.gray {\n color: var(--colors-dark-gray);\n}\n\n .max-w_container\\.smaller\\.xxs {\n max-width: var(--sizes-container-smaller-xxs);\n}\n\n .c_light {\n color: light;\n}\n\n .bdr_common {\n border-radius: var(--radii-common);\n}\n\n .h_lineHeights\\.sm {\n height: lineHeights.sm;\n}\n\n .h_lineHeights\\.xs {\n height: lineHeights.xs;\n}\n\n .cursor_default {\n cursor: default;\n}\n\n .cursor_pointer {\n cursor: pointer;\n}\n\n .d_none {\n display: none;\n}\n\n .bdr-l_0 {\n border-top-left-radius: 0;\n border-bottom-left-radius: 0;\n}\n\n .my_-xs {\n margin-block: calc(var(--spacing-xs) * -1);\n}\n\n .p_smaller\\.sm {\n padding: var(--spacing-smaller-sm);\n}\n\n .c_inherit {\n color: inherit;\n}\n\n .w_auto {\n width: auto;\n}\n\n .h_full {\n height: var(--sizes-full);\n}\n\n .max-h_container\\.smaller\\.xs {\n max-height: var(--sizes-container-smaller-xs);\n}\n\n .w_full {\n width: var(--sizes-full);\n}\n\n .ov_auto {\n overflow: auto;\n}\n\n .gap_sm {\n gap: var(--spacing-sm);\n}\n\n .c_normal {\n color: normal;\n}\n\n .ta_left {\n text-align: left;\n}\n\n .c_label {\n color: label;\n}\n\n .p_0 {\n padding: var(--spacing-0);\n}\n\n .w_circle {\n width: var(--sizes-circle);\n}\n\n .h_circle {\n height: var(--sizes-circle);\n}\n\n .bdr_full {\n border-radius: var(--radii-full);\n}\n\n .c_dark\\.success {\n color: var(--colors-dark-success);\n}\n\n .c_dark\\.error {\n color: var(--colors-dark-error);\n}\n\n .c_dark\\.active {\n color: var(--colors-dark-active);\n}\n\n .c_dark\\.warning {\n color: var(--colors-dark-warning);\n}\n\n .c_dark {\n color: dark;\n}\n\n .bdr_md {\n border-radius: var(--radii-md);\n}\n\n .bd_border\\.base {\n border: var(--borders-border-base);\n}\n\n .h_8 {\n height: var(--sizes-8);\n}\n\n .op_1 {\n opacity: 1;\n}\n\n .pointer-events_auto {\n pointer-events: auto;\n}\n\n .h_9\\! {\n height: var(--sizes-9) !important;\n}\n\n .w_9\\! {\n width: var(--sizes-9) !important;\n}\n\n .px_0\\! {\n padding-inline: var(--spacing-0) !important;\n}\n\n .py_0\\! {\n padding-block: var(--spacing-0) !important;\n}\n\n .max-h_300px {\n max-height: 300px;\n}\n\n .px_xs {\n padding-inline: var(--spacing-xs);\n}\n\n .h_300px {\n height: 300px;\n}\n\n .w_1px {\n width: 1px;\n}\n\n .bg_light\\.gray {\n background: var(--colors-light-gray);\n}\n\n .mx_xs {\n margin-inline: var(--spacing-xs);\n}\n\n .bd_base {\n border: var(--borders-base);\n}\n\n .bd_border\\.success {\n border: var(--borders-border-success);\n}\n\n .bd_border\\.active {\n border: var(--borders-border-active);\n}\n\n .pos_relative {\n position: relative;\n}\n\n .z_1 {\n z-index: 1;\n}\n\n .max-w_container\\.xs {\n max-width: var(--sizes-container-xs);\n}\n\n .py_xs {\n padding-block: var(--spacing-xs);\n}\n\n .px_sm {\n padding-inline: var(--spacing-sm);\n}\n\n .gap_xxs {\n gap: var(--spacing-xxs);\n}\n\n .max-w_card\\.sm {\n max-width: var(--sizes-card-sm);\n}\n\n .flex_0_0_auto {\n flex: 0 0 auto;\n}\n\n .bdr_9999px {\n border-radius: 9999px;\n}\n\n .c_success {\n color: success;\n}\n\n .c_gray {\n color: gray;\n}\n\n .columns_1 {\n columns: 1;\n}\n\n .c_error {\n color: error;\n}\n\n .cursor_not-allowed {\n cursor: not-allowed;\n}\n\n .w_fit-content {\n width: fit-content;\n}\n\n .w_container\\.smaller\\.sm {\n width: var(--sizes-container-smaller-sm);\n}\n\n .max-h_container\\.xs {\n max-height: var(--sizes-container-xs);\n}\n\n .space_y_sm > * + * {\n margin-top: var(--spacing-sm);\n}\n\n .my_md {\n margin-block: var(--spacing-md);\n}\n\n .d_grid {\n display: grid;\n}\n\n .gap_10px {\n gap: 10px;\n}\n\n .w_icon\\.primary {\n width: var(--sizes-icon-primary);\n}\n\n .h_icon\\.primary {\n height: var(--sizes-icon-primary);\n}\n\n .w_icon\\.xxs {\n width: var(--sizes-icon-xxs);\n}\n\n .h_icon\\.xxs {\n height: var(--sizes-icon-xxs);\n}\n\n .w_icon\\.sm {\n width: var(--sizes-icon-sm);\n}\n\n .h_icon\\.sm {\n height: var(--sizes-icon-sm);\n}\n\n .w_icon\\.md {\n width: var(--sizes-icon-md);\n}\n\n .h_icon\\.md {\n height: var(--sizes-icon-md);\n}\n\n .w_icon\\.lg {\n width: var(--sizes-icon-lg);\n}\n\n .h_icon\\.lg {\n height: var(--sizes-icon-lg);\n}\n\n .w_icon\\.xxl {\n width: var(--sizes-icon-xxl);\n}\n\n .h_icon\\.xxl {\n height: var(--sizes-icon-xxl);\n}\n\n .w_icon\\.smaller\\.xs {\n width: var(--sizes-icon-smaller-xs);\n}\n\n .h_icon\\.smaller\\.xs {\n height: var(--sizes-icon-smaller-xs);\n}\n\n .c_dark\\.black {\n color: dark.black;\n}\n\n .c_dark\\.white {\n color: dark.white;\n}\n\n .cursor_inherit {\n cursor: inherit;\n}\n\n .ps_3 {\n padding-inline-start: var(--spacing-3);\n}\n\n .pe_3 {\n padding-inline-end: var(--spacing-3);\n}\n\n .ps_md {\n padding-inline-start: var(--spacing-md);\n}\n\n .pe_md {\n padding-inline-end: var(--spacing-md);\n}\n\n .pos_absolute {\n position: absolute;\n}\n\n .min-w_container\\.xxs {\n min-width: var(--sizes-container-xxs);\n}\n\n .h_auto {\n height: auto;\n}\n\n .max-h_basic\\.almost-full {\n max-height: var(--sizes-basic-almost-full);\n}\n\n .min-h_container\\.smaller\\.xxs {\n min-height: var(--sizes-container-smaller-xxs);\n}\n\n .min-w_min-content {\n min-width: min-content;\n}\n\n .max-w_basic\\.almost-full {\n max-width: var(--sizes-basic-almost-full);\n}\n\n .sr_true {\n position: absolute;\n width: 1px;\n height: 1px;\n padding: 0;\n margin: -1px;\n overflow: hidden;\n clip: rect(0, 0, 0, 0);\n white-space: nowrap;\n border-width: 0;\n}\n\n .ring_none {\n outline: var(--borders-none);\n}\n\n .d_flex\\! {\n display: flex !important;\n}\n\n .d_block {\n display: block;\n}\n\n .wb_break-all {\n word-break: break-all;\n}\n\n .c_primary {\n color: var(--colors-primary);\n}\n\n .gap_0 {\n gap: var(--spacing-0);\n}\n\n .direction_row {\n direction: row;\n}\n\n .bdr-r_0 {\n border-top-right-radius: 0;\n border-bottom-right-radius: 0;\n}\n\n .c_muted\\.foreground {\n color: var(--colors-muted-foreground);\n}\n\n .wb_break-word {\n word-break: break-word;\n}\n\n .white-space_break-spaces {\n white-space: break-spaces;\n}\n\n .c_text\\.normal {\n color: var(--colors-text-normal);\n}\n\n .c_text\\.label {\n color: var(--colors-text-label);\n}\n\n .c_text\\.light {\n color: var(--colors-text-light);\n}\n\n .white-space_pre-wrap {\n white-space: pre-wrap;\n}\n\n .ta_center {\n text-align: center;\n}\n\n .ta_right {\n text-align: right;\n}\n\n .bd_input {\n border: var(--borders-input);\n}\n\n .p_xs {\n padding: var(--spacing-xs);\n}\n\n .cursor_text {\n cursor: text;\n}\n\n .d_inline-block {\n display: inline-block;\n}\n\n .w_300px {\n width: 300px;\n}\n\n .bdr_var\\(--border-radius\\) {\n border-radius: var(--border-radius);\n}\n\n .w_100\\% {\n width: 100%;\n}\n\n .ring_unset {\n outline: unset;\n}\n\n .m_0_-1px_-1px_0 {\n margin: 0 -1px -1px 0;\n}\n\n .z_10 {\n z-index: 10;\n}\n\n .h_100\\% {\n height: 100%;\n}\n\n .c_destructive {\n color: var(--colors-destructive);\n}\n\n .pos_popper {\n position: popper;\n}\n\n .w_slider\\.label {\n width: var(--sizes-slider-label);\n}\n\n .w_slider\\.thumb\\.sm\\! {\n width: var(--sizes-slider-thumb-sm) !important;\n}\n\n .h_slider\\.thumb\\.sm\\! {\n height: var(--sizes-slider-thumb-sm) !important;\n}\n\n .w_slider\\.thumb\\.lg\\! {\n width: var(--sizes-slider-thumb-lg) !important;\n}\n\n .h_slider\\.thumb\\.lg\\! {\n height: var(--sizes-slider-thumb-lg) !important;\n}\n\n .min-w_skeleton\\.button\\.width {\n min-width: var(--sizes-skeleton-button-width);\n}\n\n .min-h_skeleton\\.button\\.height {\n min-height: var(--sizes-skeleton-button-height);\n}\n\n .h_skeleton\\.grid\\.height\\.sm {\n height: var(--sizes-skeleton-grid-height-sm);\n}\n\n .h_skeleton\\.grid\\.height\\.xs {\n height: var(--sizes-skeleton-grid-height-xs);\n}\n\n .h_skeleton\\.grid\\.height\\.md {\n height: var(--sizes-skeleton-grid-height-md);\n}\n\n .h_skeleton\\.grid\\.height\\.lg {\n height: var(--sizes-skeleton-grid-height-lg);\n}\n\n .h_skeleton\\.grid\\.height\\.xl {\n height: var(--sizes-skeleton-grid-height-xl);\n}\n\n .min-w_skeleton\\.input\\.width {\n min-width: var(--sizes-skeleton-input-width);\n}\n\n .min-h_skeleton\\.input\\.height {\n min-height: var(--sizes-skeleton-input-height);\n}\n\n .min-w_full {\n min-width: var(--sizes-full);\n}\n\n .min-h_skeleton\\.height {\n min-height: var(--sizes-skeleton-height);\n}\n\n .min-w_skeleton\\.textarea\\.width {\n min-width: var(--sizes-skeleton-textarea-width);\n}\n\n .min-h_skeleton\\.textarea\\.height {\n min-height: var(--sizes-skeleton-textarea-height);\n}\n\n .pos_right {\n position: right;\n}\n\n .max-w_container\\.sm {\n max-width: var(--sizes-container-sm);\n}\n\n .gap_-25px {\n gap: -25px;\n}\n\n .bd-b_1px_solid_gray {\n border-bottom: 1px solid gray;\n}\n\n .my_-20px {\n margin-block: -20px;\n}\n\n .bd-w_1px {\n border-width: 1px;\n}\n\n .bd-c_transparent {\n border-color: var(--colors-transparent);\n}\n\n .bg-c_transparent {\n background-color: var(--colors-transparent);\n}\n\n .bd-c_dark\\.active {\n border-color: var(--colors-dark-active);\n}\n\n .bg-c_dark\\.active {\n background-color: var(--colors-dark-active);\n}\n\n .bd-c_dark\\.gray {\n border-color: var(--colors-dark-gray);\n}\n\n .bg-c_dark\\.gray {\n background-color: var(--colors-dark-gray);\n}\n\n .bd-c_dark\\.success {\n border-color: var(--colors-dark-success);\n}\n\n .bg-c_dark\\.success {\n background-color: var(--colors-dark-success);\n}\n\n .bd-c_dark\\.warning {\n border-color: var(--colors-dark-warning);\n}\n\n .bg-c_dark\\.warning {\n background-color: var(--colors-dark-warning);\n}\n\n .bd-c_dark\\.error {\n border-color: var(--colors-dark-error);\n}\n\n .bg-c_dark\\.error {\n background-color: var(--colors-dark-error);\n}\n\n .bd-c_white {\n border-color: var(--colors-white);\n}\n\n .bg-c_white {\n background-color: var(--colors-white);\n}\n\n .bd-c_light\\.active {\n border-color: var(--colors-light-active);\n}\n\n .bg-c_light\\.active {\n background-color: var(--colors-light-active);\n}\n\n .bd-c_light\\.gray {\n border-color: var(--colors-light-gray);\n}\n\n .bg-c_light\\.gray {\n background-color: var(--colors-light-gray);\n}\n\n .bd-c_light\\.success {\n border-color: var(--colors-light-success);\n}\n\n .bg-c_light\\.success {\n background-color: var(--colors-light-success);\n}\n\n .bd-c_light\\.warning {\n border-color: var(--colors-light-warning);\n}\n\n .bg-c_light\\.warning {\n background-color: var(--colors-light-warning);\n}\n\n .bd-c_light\\.error {\n border-color: var(--colors-light-error);\n}\n\n .bg-c_light\\.error {\n background-color: var(--colors-light-error);\n}\n\n .bd-c_decoration\\.active {\n border-color: var(--colors-decoration-active);\n}\n\n .bd-c_decoration\\.gray {\n border-color: var(--colors-decoration-gray);\n}\n\n .bd-c_decoration\\.success {\n border-color: var(--colors-decoration-success);\n}\n\n .bd-c_decoration\\.warning {\n border-color: var(--colors-decoration-warning);\n}\n\n .bd-c_decoration\\.error {\n border-color: var(--colors-decoration-error);\n}\n\n .trs-prop_background-color\\,_border-color\\,_color\\,_opacity {\n --transition-prop: background-color, border-color, color, opacity;\n transition-property: background-color, border-color, color, opacity;\n}\n\n .trs-dur_token\\(durations\\.fast\\) {\n --transition-duration: var(--durations-fast);\n transition-duration: var(--durations-fast);\n}\n\n .trs-tmf_token\\(easings\\.easeInOut\\) {\n --transition-easing: var(--easings-ease-in-out);\n transition-timing-function: var(--easings-ease-in-out);\n}\n\n .ai_center {\n align-items: center;\n}\n\n .jc_space-between {\n justify-content: space-between;\n}\n\n .bd-w_thin {\n border-width: thin;\n}\n\n .bg-c_blue {\n background-color: blue;\n}\n\n .bd-c_blueviolet {\n border-color: blueviolet;\n}\n\n .bg-c_\\#C70000 {\n background-color: #C70000;\n}\n\n .bd-c_\\#C70000 {\n border-color: #C70000;\n}\n\n .bg-c_\\#0000A8 {\n background-color: #0000A8;\n}\n\n .bd-c_\\#0000A8 {\n border-color: #0000A8;\n}\n\n .bg-c_\\#00c700 {\n background-color: #00c700;\n}\n\n .bd-c_\\#00c700 {\n border-color: #00c700;\n}\n\n .flex-d_row {\n flex-direction: row;\n}\n\n .flex-d_row-reverse {\n flex-direction: row-reverse;\n}\n\n .jc_space-evenly {\n justify-content: space-evenly;\n}\n\n .pl_1 {\n padding-left: var(--spacing-1);\n}\n\n .li-t_disc {\n list-style-type: disc;\n}\n\n .li-pos_inside {\n list-style-position: inside;\n}\n\n .flex-wrap_nowrap {\n flex-wrap: nowrap;\n}\n\n .flex-sh_0 {\n flex-shrink: 0;\n}\n\n .pr_0 {\n padding-right: var(--spacing-0);\n}\n\n .ov-y_auto {\n overflow-y: auto;\n}\n\n .flex-d_column {\n flex-direction: column;\n}\n\n .flex-g_1 {\n flex-grow: 1;\n}\n\n .bd-b-c_decoration\\.gray {\n border-bottom-color: var(--colors-decoration-gray);\n}\n\n .ai_start {\n align-items: start;\n}\n\n .jc_center {\n justify-content: center;\n}\n\n .jc_end {\n justify-content: end;\n}\n\n .flex-wrap_wrap {\n flex-wrap: wrap;\n}\n\n .flex-g_0 {\n flex-grow: 0;\n}\n\n .jc_flex-start {\n justify-content: flex-start;\n}\n\n .fw_normal {\n font-weight: var(--font-weights-normal);\n}\n\n .leading_10 {\n line-height: var(--line-heights-10);\n}\n\n .pt_xs {\n padding-top: var(--spacing-xs);\n}\n\n .pb_xs {\n padding-bottom: var(--spacing-xs);\n}\n\n .leading_sm {\n line-height: var(--line-heights-sm);\n}\n\n .mt_sm {\n margin-top: var(--spacing-sm);\n}\n\n .jc_flex-end {\n justify-content: flex-end;\n}\n\n .top_0 {\n top: var(--spacing-0);\n}\n\n .bottom_0 {\n bottom: var(--spacing-0);\n}\n\n .left_0 {\n left: var(--spacing-0);\n}\n\n .right_0 {\n right: var(--spacing-0);\n}\n\n .mb_sm {\n margin-bottom: var(--spacing-sm);\n}\n\n .font-style_italic {\n font-style: italic;\n}\n\n .jc_start {\n justify-content: start;\n}\n\n .jc_normal {\n justify-content: normal;\n}\n\n .ml_-xs {\n margin-left: calc(var(--spacing-xs) * -1);\n}\n\n .mr_-xs {\n margin-right: calc(var(--spacing-xs) * -1);\n}\n\n .leading_unset {\n line-height: unset;\n}\n\n .ff_mono {\n font-family: var(--fonts-mono);\n}\n\n .bd-r-w_0 {\n border-right-width: 0;\n}\n\n .bd-r-w_1px {\n border-right-width: 1px;\n}\n\n .leading_lineHeights\\.sm {\n line-height: lineHeights.sm;\n}\n\n .right_5 {\n right: var(--spacing-5);\n}\n\n .right_1 {\n right: var(--spacing-1);\n}\n\n .top_1 {\n top: var(--spacing-1);\n}\n\n .flex-sh_1 {\n flex-shrink: 1;\n}\n\n .mt_xs {\n margin-top: var(--spacing-xs);\n}\n\n .fs_primary {\n font-size: var(--font-sizes-primary);\n}\n\n .fs_xl {\n font-size: var(--font-sizes-xl);\n}\n\n .fs_lg {\n font-size: var(--font-sizes-lg);\n}\n\n .fs_md {\n font-size: var(--font-sizes-md);\n}\n\n .fs_sm {\n font-size: var(--font-sizes-sm);\n}\n\n .fs_xs {\n font-size: var(--font-sizes-xs);\n}\n\n .fs_xxs {\n font-size: var(--font-sizes-xxs);\n}\n\n .fw_primary {\n font-weight: var(--font-weights-primary);\n}\n\n .fw_md {\n font-weight: var(--font-weights-md);\n}\n\n .fw_lg {\n font-weight: var(--font-weights-lg);\n}\n\n .fw_xl {\n font-weight: var(--font-weights-xl);\n}\n\n .ff_body {\n font-family: var(--fonts-body);\n}\n\n .leading_1 {\n line-height: 1;\n}\n\n .bg-c_\\#000 {\n background-color: #000;\n}\n\n .pl_8 {\n padding-left: var(--spacing-8);\n}\n\n .top_100\\% {\n top: 100%;\n}\n\n .left_calc\\(-1_\\*_token\\(sizes\\.slider\\.label\\)_\\/_3\\) {\n left: calc(-1 * var(--sizes-slider-label) / 3);\n}\n\n .grid-af_row {\n grid-auto-flow: row;\n}\n\n .pb_3px {\n padding-bottom: 3px;\n}\n\n .border-style_dotted {\n border-style: dotted;\n}\n\n .fw_lighter {\n font-weight: lighter;\n}\n\n .fw_semibold {\n font-weight: var(--font-weights-semibold);\n}\n\n .\\[\\&\\:first-child\\]\\:bdr-l_common:first-child {\n border-top-left-radius: var(--radii-common);\n border-bottom-left-radius: var(--radii-common);\n}\n\n .\\[\\&\\:last-child\\]\\:bdr-r_common:last-child {\n border-top-right-radius: var(--radii-common);\n border-bottom-right-radius: var(--radii-common);\n}\n\n .\\[\\&_code\\,_\\&_code_\\*\\]\\:ff_mono code,.\\[\\&_code\\,_\\&_code_\\*\\]\\:ff_mono code * {\n font-family: var(--fonts-mono);\n}\n\n .\\[\\&\\:last-child\\]\\:bd-r-w_1px:last-child {\n border-right-width: 1px;\n}\n\n .\\[\\&\\:checked\\]\\:bd-c_decoration\\.active:checked {\n border-color: var(--colors-decoration-active);\n}\n\n .\\[\\&\\:checked\\]\\:bg-c_light\\.active:checked {\n background-color: var(--colors-light-active);\n}\n\n .\\[\\&_\\+_label\\]\\:bd-l-w_0 + label {\n border-left-width: 0;\n}\n\n .hover\\:td_underline:is(:hover, [data-hover]) {\n text-decoration: underline;\n}\n\n .hover\\:cursor_pointer:is(:hover, [data-hover]) {\n cursor: pointer;\n}\n\n .hover\\:bd-c_token\\(colors\\.hover\\.dark\\.active\\):is(:hover, [data-hover]) {\n border-color: var(--colors-hover-dark-active);\n}\n\n .hover\\:bg-c_token\\(colors\\.hover\\.dark\\.active\\):is(:hover, [data-hover]) {\n background-color: var(--colors-hover-dark-active);\n}\n\n .hover\\:bd-c_token\\(colors\\.hover\\.dark\\.gray\\):is(:hover, [data-hover]) {\n border-color: var(--colors-hover-dark-gray);\n}\n\n .hover\\:bg-c_token\\(colors\\.hover\\.dark\\.gray\\):is(:hover, [data-hover]) {\n background-color: var(--colors-hover-dark-gray);\n}\n\n .hover\\:bd-c_token\\(colors\\.hover\\.dark\\.success\\):is(:hover, [data-hover]) {\n border-color: var(--colors-hover-dark-success);\n}\n\n .hover\\:bg-c_token\\(colors\\.hover\\.dark\\.success\\):is(:hover, [data-hover]) {\n background-color: var(--colors-hover-dark-success);\n}\n\n .hover\\:bd-c_token\\(colors\\.hover\\.dark\\.warning\\):is(:hover, [data-hover]) {\n border-color: var(--colors-hover-dark-warning);\n}\n\n .hover\\:bg-c_token\\(colors\\.hover\\.dark\\.warning\\):is(:hover, [data-hover]) {\n background-color: var(--colors-hover-dark-warning);\n}\n\n .hover\\:bd-c_token\\(colors\\.hover\\.dark\\.error\\):is(:hover, [data-hover]) {\n border-color: var(--colors-hover-dark-error);\n}\n\n .hover\\:bg-c_token\\(colors\\.hover\\.dark\\.error\\):is(:hover, [data-hover]) {\n background-color: var(--colors-hover-dark-error);\n}\n\n .hover\\:bd-c_token\\(colors\\.light\\.gray\\):is(:hover, [data-hover]) {\n border-color: var(--colors-light-gray);\n}\n\n .hover\\:bg-c_token\\(colors\\.light\\.gray\\):is(:hover, [data-hover]) {\n background-color: var(--colors-light-gray);\n}\n\n .hover\\:bd-c_token\\(colors\\.light\\.active\\):is(:hover, [data-hover]) {\n border-color: var(--colors-light-active);\n}\n\n .hover\\:bg-c_token\\(colors\\.light\\.active\\):is(:hover, [data-hover]) {\n background-color: var(--colors-light-active);\n}\n\n .hover\\:bd-c_token\\(colors\\.light\\.success\\):is(:hover, [data-hover]) {\n border-color: var(--colors-light-success);\n}\n\n .hover\\:bg-c_token\\(colors\\.light\\.success\\):is(:hover, [data-hover]) {\n background-color: var(--colors-light-success);\n}\n\n .hover\\:bd-c_token\\(colors\\.light\\.warning\\):is(:hover, [data-hover]) {\n border-color: var(--colors-light-warning);\n}\n\n .hover\\:bg-c_token\\(colors\\.light\\.warning\\):is(:hover, [data-hover]) {\n background-color: var(--colors-light-warning);\n}\n\n .hover\\:bd-c_token\\(colors\\.light\\.error\\):is(:hover, [data-hover]) {\n border-color: var(--colors-light-error);\n}\n\n .hover\\:bg-c_token\\(colors\\.light\\.error\\):is(:hover, [data-hover]) {\n background-color: var(--colors-light-error);\n}\n\n .hover\\:bd-c_token\\(colors\\.hover\\.light\\.active\\):is(:hover, [data-hover]) {\n border-color: var(--colors-hover-light-active);\n}\n\n .hover\\:bg-c_token\\(colors\\.hover\\.light\\.active\\):is(:hover, [data-hover]) {\n background-color: var(--colors-hover-light-active);\n}\n\n .hover\\:bd-c_token\\(colors\\.hover\\.light\\.gray\\):is(:hover, [data-hover]) {\n border-color: var(--colors-hover-light-gray);\n}\n\n .hover\\:bg-c_token\\(colors\\.hover\\.light\\.gray\\):is(:hover, [data-hover]) {\n background-color: var(--colors-hover-light-gray);\n}\n\n .hover\\:bd-c_token\\(colors\\.hover\\.light\\.success\\):is(:hover, [data-hover]) {\n border-color: var(--colors-hover-light-success);\n}\n\n .hover\\:bg-c_token\\(colors\\.hover\\.light\\.success\\):is(:hover, [data-hover]) {\n background-color: var(--colors-hover-light-success);\n}\n\n .hover\\:bd-c_token\\(colors\\.hover\\.light\\.warning\\):is(:hover, [data-hover]) {\n border-color: var(--colors-hover-light-warning);\n}\n\n .hover\\:bg-c_token\\(colors\\.hover\\.light\\.warning\\):is(:hover, [data-hover]) {\n background-color: var(--colors-hover-light-warning);\n}\n\n .hover\\:bd-c_token\\(colors\\.hover\\.light\\.error\\):is(:hover, [data-hover]) {\n border-color: var(--colors-hover-light-error);\n}\n\n .hover\\:bg-c_token\\(colors\\.hover\\.light\\.error\\):is(:hover, [data-hover]) {\n background-color: var(--colors-hover-light-error);\n}\n\n .hover\\:bg-c_light\\.success:is(:hover, [data-hover]) {\n background-color: var(--colors-light-success);\n}\n\n .hover\\:bg-c_light\\.active:is(:hover, [data-hover]) {\n background-color: var(--colors-light-active);\n}\n\n .hover\\:bg-c_light\\.error:is(:hover, [data-hover]) {\n background-color: var(--colors-light-error);\n}\n\n .hover\\:bg-c_transparent:is(:hover, [data-hover]) {\n background-color: var(--colors-transparent);\n}\n\n .hover\\:bg-c_hover\\.light\\.active:is(:hover, [data-hover]) {\n background-color: var(--colors-hover-light-active);\n}\n\n .hover\\:bd-c_decoration\\.active:is(:hover, [data-hover]) {\n border-color: var(--colors-decoration-active);\n}\n\n .\\[\\&_\\+_label\\:hover\\]\\:bd-l-w_0 + label:hover {\n border-left-width: 0;\n}\n\n .hover\\:\\[\\&_\\+_label\\]\\:bd-l-w_0:is(:hover, [data-hover]) + label {\n border-left-width: 0;\n}\n\n @media screen and (min-width: 40rem) {\n .sm\\:d_block {\n display: block;\n}\n}\n}";
165797
165922
  n$1(css$1,{});
165798
165923
 
165924
+ const METRICS_UPDATE_INTERVAL = 500;
165799
165925
  function PanelToolbarMetrics({
165800
- renderedFps,
165801
- annotationsFps,
165802
165926
  targetFps,
165803
165927
  metrics,
165804
- inDropdown
165928
+ inDropdown,
165929
+ topic
165805
165930
  }) {
165931
+ const [renderMetricsKey, annotationsMetricsKey] = React__default.useMemo(() => {
165932
+ return [constructKeyForTopicRenderMetrics("renderImageFrame", topic), constructKeyForTopicRenderMetrics("renderAnnotationsFrame", topic)];
165933
+ }, [topic]);
165934
+ const [renderedFps, setRenderedFps] = React__default.useState(globalRenderMetricsManager.calculate(renderMetricsKey));
165935
+ const [annotationsFps, setAnnotationsFps] = React__default.useState(globalRenderMetricsManager.calculate(annotationsMetricsKey));
165806
165936
  const [variant, setVariant] = React__default.useState(inDropdown ? "compact" : "full");
165807
165937
  const eventLoopDelay = createEventLoopDelaySampler();
165808
165938
  const descriptionRef = React__default.useRef(null);
@@ -165816,6 +165946,17 @@ function PanelToolbarMetrics({
165816
165946
  setVariant("full");
165817
165947
  }
165818
165948
  }, [descriptionRef.current?.offsetWidth, inDropdown]);
165949
+
165950
+ // Effect to update the metrics periodically
165951
+ React__default.useEffect(() => {
165952
+ const interval = setInterval(() => {
165953
+ setRenderedFps(globalRenderMetricsManager.calculate(renderMetricsKey));
165954
+ setAnnotationsFps(globalInputEventMetricsManager.calculate(annotationsMetricsKey));
165955
+ }, METRICS_UPDATE_INTERVAL);
165956
+ return () => {
165957
+ clearInterval(interval);
165958
+ };
165959
+ });
165819
165960
  const parentContainer = descriptionRef.current ?? document.body;
165820
165961
  return /*#__PURE__*/React__default.createElement(Flex, {
165821
165962
  direction: "row",
@@ -165866,6 +166007,8 @@ function PanelToolbarMetrics({
165866
166007
  text: `Rendering: ${renderedFps === 0 || !Number.isFinite(renderedFps) ? "-" : renderedFps}\u00A0FPS`
165867
166008
  }), annotationsFps !== undefined && annotationsFps !== 0 && /*#__PURE__*/React__default.createElement(Label$3, {
165868
166009
  text: `Annotations: ${annotationsFps === 0 || !Number.isFinite(annotationsFps) ? "-" : annotationsFps}\u00A0FPS`
166010
+ }), annotationsFps !== undefined && annotationsFps !== 0 && /*#__PURE__*/React__default.createElement(Label$3, {
166011
+ text: `Annotations: ${annotationsFps === 0 || !Number.isFinite(annotationsFps) ? "-" : annotationsFps}\u00A0FPS`
165869
166012
  }), metrics?.messageThroughput !== undefined && /*#__PURE__*/React__default.createElement(Label$3, {
165870
166013
  text: `Throughput: ${metrics.messageThroughput === 0 ? "-" : metrics.messageThroughput}\u00A0Mbps`
165871
166014
  }), eventLoopDelay !== undefined && /*#__PURE__*/React__default.createElement(Label$3, {
@@ -165899,8 +166042,6 @@ const PanelToolbar = ({
165899
166042
  disableAnnotations = false,
165900
166043
  targetFps,
165901
166044
  triggerToast,
165902
- renderedFps,
165903
- annotationsFps,
165904
166045
  toggleTopic,
165905
166046
  toggleFullscreen,
165906
166047
  canMoveUp,
@@ -165916,7 +166057,9 @@ const PanelToolbar = ({
165916
166057
  const connections = useConnections();
165917
166058
  React__default.useEffect(() => {
165918
166059
  // Initial set
165919
- setMetrics(connections.at(0)?.getTopicMetrics(topic));
166060
+ if (!metrics) {
166061
+ setMetrics(connections.at(0)?.getTopicMetrics(topic));
166062
+ }
165920
166063
  const interval = setInterval(() => {
165921
166064
  setMetrics(connections[0]?.getTopicMetrics(topic));
165922
166065
  }, 500);
@@ -165997,10 +166140,9 @@ const PanelToolbar = ({
165997
166140
  })), /*#__PURE__*/React__default.createElement(DropdownMenuContent, {
165998
166141
  ref: wrapperBreakpointRef
165999
166142
  }, /*#__PURE__*/React__default.createElement(PanelToolbarMetrics, {
166000
- renderedFps: renderedFps,
166001
- annotationsFps: annotationsFps,
166002
166143
  targetFps: targetFps,
166003
166144
  metrics: metrics,
166145
+ topic: topic,
166004
166146
  inDropdown: true
166005
166147
  }), kind === "pointCloud" && /*#__PURE__*/React__default.createElement(Tooltip, {
166006
166148
  parentContainer: parentContainer,
@@ -166058,10 +166200,9 @@ const PanelToolbar = ({
166058
166200
  disabled: !canMoveDown,
166059
166201
  icon: MdClose
166060
166202
  }, "Close Stream")))) : /*#__PURE__*/React__default.createElement(React__default.Fragment, null, /*#__PURE__*/React__default.createElement(PanelToolbarMetrics, {
166061
- renderedFps: renderedFps,
166062
- annotationsFps: annotationsFps,
166063
166203
  targetFps: targetFps,
166064
- metrics: metrics
166204
+ metrics: metrics,
166205
+ topic: topic
166065
166206
  }), /*#__PURE__*/React__default.createElement(Flex, {
166066
166207
  direction: "row",
166067
166208
  gap: "xs",
@@ -166182,8 +166323,6 @@ const Panel = ({
166182
166323
  annotationTopics = [],
166183
166324
  extraAnnotationTopics = [],
166184
166325
  targetFps,
166185
- renderedFps,
166186
- annotationsFps,
166187
166326
  renderDelay,
166188
166327
  toggleTopic,
166189
166328
  triggerToast,
@@ -166223,8 +166362,6 @@ const Panel = ({
166223
166362
  setDetections: setDetections,
166224
166363
  disableAnnotations: disableAnnotations,
166225
166364
  targetFps: targetFps,
166226
- renderedFps: renderedFps,
166227
- annotationsFps: annotationsFps,
166228
166365
  renderDelay: renderDelay,
166229
166366
  toggleTopic: toggleTopic,
166230
166367
  toggleFullscreen: toggleFullscreenForThisPanel,
@@ -166267,11 +166404,11 @@ function createRenderDelaySampler() {
166267
166404
  };
166268
166405
  }
166269
166406
 
166270
- const ImagePanelComponent = /*#__PURE__*/React__default.lazy(async () => await import('./index-CJ9fIZ-J.js'));
166407
+ const ImagePanelComponent = /*#__PURE__*/React__default.lazy(async () => await import('./index-B5MQNBC-.js'));
166271
166408
  const ImagePanelBody = ({
166272
166409
  topic,
166273
166410
  frameRenderedEvent,
166274
- annotationsFpsUpdateHandler
166411
+ annotationReceivedEventHandler
166275
166412
  }) => {
166276
166413
  const {
166277
166414
  detections
@@ -166291,48 +166428,26 @@ const ImagePanelBody = ({
166291
166428
  return /*#__PURE__*/React__default.createElement(ImagePanelComponent, {
166292
166429
  overrideConfig: defaultConfig,
166293
166430
  frameRenderedEvent: frameRenderedEvent,
166294
- annotationsFpsUpdateHandler: annotationsFpsUpdateHandler
166431
+ annotationReceivedEventHandler: annotationReceivedEventHandler
166295
166432
  });
166296
166433
  };
166297
166434
  const ImagePanel = /*#__PURE__*/React__default.memo(function ImagePanel(props) {
166298
- const renderedFpsMetricsManagerRef = React__default.useRef(null);
166299
- const [renderedFps, setRenderedFps] = React__default.useState(undefined);
166300
- const [annotationsFps, setAnnotationsFps] = React__default.useState(undefined);
166301
166435
  const {
166302
166436
  averageFrameDelay,
166303
166437
  addFrameTime
166304
166438
  } = createRenderDelaySampler();
166305
- React__default.useEffect(() => {
166306
- renderedFpsMetricsManagerRef.current = new EventMetricsManager();
166307
- }, []);
166308
-
166309
- // biome-ignore lint/correctness/useExhaustiveDependencies: <explanation>
166310
- React__default.useEffect(() => {
166311
- const interval = setInterval(() => {
166312
- if (!renderedFpsMetricsManagerRef.current) {
166313
- console.warn('renderedFpsMetricsManagerRef is null');
166314
- return;
166315
- }
166316
- setRenderedFps(renderedFpsMetricsManagerRef.current.calculate('render'));
166317
- }, 500);
166318
- return () => {
166319
- clearInterval(interval);
166320
- };
166321
- }, [renderedFpsMetricsManagerRef]);
166439
+ const [renderMetricsKey, annotationsMetricsKey] = React__default.useMemo(() => {
166440
+ return [constructKeyForTopicRenderMetrics("renderImageFrame", props.topic), constructKeyForTopicRenderMetrics("renderAnnotationsFrame", props.topic)];
166441
+ }, [props.topic]);
166322
166442
  const handleFrameRendered = React__default.useCallback(frameTime => {
166323
- renderedFpsMetricsManagerRef.current?.registerEvent('render');
166443
+ globalRenderMetricsManager.registerEvent(renderMetricsKey);
166324
166444
  addFrameTime(frameTime);
166325
- }, [addFrameTime]);
166326
- const handleAnnotationsFpsUpdate = React__default.useCallback(fps => {
166327
- setAnnotationsFps(fps);
166328
- }, []);
166445
+ }, [addFrameTime, renderMetricsKey]);
166329
166446
  return /*#__PURE__*/React__default.createElement(Panel, _extends$3({
166330
166447
  kind: "image"
166331
166448
  }, props, {
166332
166449
  toggleTopic: props.toggleTopic,
166333
166450
  toggleFullscreen: props.toggleFullscreen,
166334
- renderedFps: renderedFps,
166335
- annotationsFps: annotationsFps,
166336
166451
  renderDelay: averageFrameDelay,
166337
166452
  canMoveUp: props.canMoveUp,
166338
166453
  moveUp: props.moveUp,
@@ -166341,7 +166456,7 @@ const ImagePanel = /*#__PURE__*/React__default.memo(function ImagePanel(props) {
166341
166456
  }), /*#__PURE__*/React__default.createElement(ImagePanelBody, {
166342
166457
  topic: props.topic,
166343
166458
  frameRenderedEvent: handleFrameRendered,
166344
- annotationsFpsUpdateHandler: handleAnnotationsFpsUpdate
166459
+ annotationReceivedEventHandler: () => globalRenderMetricsManager.registerEvent(annotationsMetricsKey)
166345
166460
  }));
166346
166461
  });
166347
166462
 
@@ -166366,7 +166481,7 @@ const DEFAULT_CAMERA_STATE = {
166366
166481
  // License, v2.0. If a copy of the MPL was not distributed with this
166367
166482
  // file, You can obtain one at http://mozilla.org/MPL/2.0/
166368
166483
 
166369
- const ThreeDeeRenderComponent = /*#__PURE__*/React__default.lazy(async () => await import('./index-DGa0rqWH.js'));
166484
+ const ThreeDeeRenderComponent = /*#__PURE__*/React__default.lazy(async () => await import('./index-sfCEw8Dv.js'));
166370
166485
  const PointCloudPanelBody = ({
166371
166486
  topic,
166372
166487
  frameRenderedEvent
@@ -166426,31 +166541,12 @@ const PointCloudPanel = /*#__PURE__*/React__default.memo(function PointCloudPane
166426
166541
  canMoveDown,
166427
166542
  moveDown
166428
166543
  }) {
166429
- const renderedFpsMetricsManagerRef = React__default.useRef(null);
166430
- const [renderedFps, setRenderedFps] = React__default.useState(undefined);
166431
166544
  const {
166432
166545
  averageFrameDelay,
166433
166546
  addFrameTime
166434
166547
  } = createRenderDelaySampler();
166435
- React__default.useEffect(() => {
166436
- renderedFpsMetricsManagerRef.current = new EventMetricsManager();
166437
- }, []);
166438
-
166439
- // biome-ignore lint/correctness/useExhaustiveDependencies: <explanation>
166440
- React__default.useEffect(() => {
166441
- const interval = setInterval(() => {
166442
- if (!renderedFpsMetricsManagerRef.current) {
166443
- console.warn("renderedFpsMetricsManagerRef is null");
166444
- return;
166445
- }
166446
- setRenderedFps(renderedFpsMetricsManagerRef.current.calculate("render-pt"));
166447
- }, 500);
166448
- return () => {
166449
- clearInterval(interval);
166450
- };
166451
- }, [renderedFpsMetricsManagerRef]);
166452
166548
  const handleFrameRendered = React__default.useCallback(frameTime => {
166453
- renderedFpsMetricsManagerRef.current?.registerEvent("render-pt");
166549
+ globalRenderMetricsManager.registerEvent(constructKeyForTopicRenderMetrics("renderPointCloudFrame", topic));
166454
166550
  addFrameTime(frameTime);
166455
166551
  }, [addFrameTime]);
166456
166552
  return /*#__PURE__*/React__default.createElement(Panel, {
@@ -166458,7 +166554,6 @@ const PointCloudPanel = /*#__PURE__*/React__default.memo(function PointCloudPane
166458
166554
  topic: topic,
166459
166555
  toggleTopic: toggleTopic,
166460
166556
  toggleFullscreen: toggleFullscreen,
166461
- renderedFps: renderedFps,
166462
166557
  renderDelay: averageFrameDelay,
166463
166558
  disableAnnotations: true,
166464
166559
  targetFps: targetFps,
@@ -166473,4 +166568,4 @@ const PointCloudPanel = /*#__PURE__*/React__default.memo(function PointCloudPane
166473
166568
  }));
166474
166569
  });
166475
166570
 
166476
- export { syntaxTree as $, AnalyticsContext as A, PlayerCapabilities as B, assertNever as C, PlayerPresence as D, ErrorDisplay as E, isEqual as F, isDesktopApp as G, createTheme$1 as H, propTypesExports as I, DEFAULT_CAMERA_STATE as J, indentNodeProp as K, LeftSidebarItemKeys as L, continuedIndent as M, foldNodeProp as N, styleTags as O, PropTypes as P, tags$1 as Q, RightSidebarItemKeys as R, Stack$1 as S, LRLanguage as T, LanguageSupport as U, ExternalTokenizer as V, WorkspaceContext as W, LRParser as X, ifNotIn as Y, completeFromList as Z, _extends$3 as _, AppEvent as a, flatIndent as a0, delimitedIndent as a1, foldInside as a2, ContextTracker as a3, LocalTokenGroup as a4, snippetCompletion as a5, IterMode as a6, NodeWeakMap as a7, defineCSSCompletionSource as a8, EditorView as a9, EditorSelection as aa, html$4 as ab, parseMixed as ac, bracketMatchingHandle as ad, javascriptLanguage as ae, VisualizerConnection as af, VisualizerContext as ag, PanelLayout as ah, ImagePanel as ai, PointCloudPanel as aj, EventMetricsManager as ak, ThroughputMetricsManager as al, baseSet as b, createAggregator as c, useTranslation as d, usePanelCatalog as e, flatRest as f, generateUtilityClass as g, EmptyState as h, isEmpty as i, PanelContext as j, PanelCatalogContext as k, usePanelStateStore as l, makeStyles as m, useDefaultPanelTitle as n, useWorkspaceStore as o, WorkspaceStoreSelectors as p, difference as q, usePanelContext as r, useMessagePipeline as s, useHoverValue as t, useAnalytics as u, v4 as v, useSetHoverValue as w, useClearHoverValue as x, useMessagePipelineGetter as y, usePanelSettingsTreeUpdate as z };
166571
+ export { syntaxTree as $, AnalyticsContext as A, PlayerCapabilities as B, assertNever as C, PlayerPresence as D, ErrorDisplay as E, isEqual as F, isDesktopApp as G, createTheme$1 as H, propTypesExports as I, DEFAULT_CAMERA_STATE as J, indentNodeProp as K, LeftSidebarItemKeys as L, continuedIndent as M, foldNodeProp as N, styleTags as O, PropTypes as P, tags$1 as Q, RightSidebarItemKeys as R, Stack$1 as S, LRLanguage as T, LanguageSupport as U, ExternalTokenizer as V, WorkspaceContext as W, LRParser as X, ifNotIn as Y, completeFromList as Z, _extends$3 as _, AppEvent as a, flatIndent as a0, delimitedIndent as a1, foldInside as a2, ContextTracker as a3, LocalTokenGroup as a4, snippetCompletion as a5, IterMode as a6, NodeWeakMap as a7, defineCSSCompletionSource as a8, EditorView as a9, EditorSelection as aa, html$4 as ab, parseMixed as ac, bracketMatchingHandle as ad, javascriptLanguage as ae, VisualizerConnection as af, VisualizerContext as ag, PanelLayout as ah, ImagePanel as ai, PointCloudPanel as aj, globalInputEventMetricsManager as ak, globalDecodeMetricsManager as al, globalRenderMetricsManager as am, globalThroughputMetricsManager as an, baseSet as b, createAggregator as c, useTranslation as d, usePanelCatalog as e, flatRest as f, generateUtilityClass as g, EmptyState as h, isEmpty as i, PanelContext as j, PanelCatalogContext as k, usePanelStateStore as l, makeStyles as m, useDefaultPanelTitle as n, useWorkspaceStore as o, WorkspaceStoreSelectors as p, difference as q, usePanelContext as r, useMessagePipeline as s, useHoverValue as t, useAnalytics as u, v4 as v, useSetHoverValue as w, useClearHoverValue as x, useMessagePipelineGetter as y, usePanelSettingsTreeUpdate as z };