@berenjena/react-dev-panel 2.4.2 → 2.5.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 (95) hide show
  1. package/README.md +43 -1
  2. package/dist/assets/index.css +1 -1
  3. package/dist/assets/index10.css +1 -1
  4. package/dist/assets/index11.css +1 -1
  5. package/dist/assets/index12.css +1 -1
  6. package/dist/assets/index13.css +1 -1
  7. package/dist/assets/index14.css +1 -1
  8. package/dist/assets/index15.css +1 -1
  9. package/dist/assets/index2.css +1 -1
  10. package/dist/assets/index3.css +1 -1
  11. package/dist/assets/index4.css +1 -1
  12. package/dist/assets/index5.css +1 -1
  13. package/dist/assets/index6.css +1 -1
  14. package/dist/assets/index7.css +1 -1
  15. package/dist/assets/index8.css +1 -1
  16. package/dist/assets/index9.css +1 -1
  17. package/dist/components/ControlErrorBoundary/index.d.ts +24 -0
  18. package/dist/components/ControlErrorBoundary/index.js +17 -0
  19. package/dist/components/ControlRenderer/controls/BooleanControl/index.js +10 -9
  20. package/dist/components/ControlRenderer/controls/ButtonControl/index.js +4 -3
  21. package/dist/components/ControlRenderer/controls/ButtonGroupControl/index.js +6 -5
  22. package/dist/components/ControlRenderer/controls/ColorControl/index.js +2 -1
  23. package/dist/components/ControlRenderer/controls/DateControl/index.js +8 -7
  24. package/dist/components/ControlRenderer/controls/DragAndDropControl/index.js +15 -14
  25. package/dist/components/ControlRenderer/controls/LocalStorageControl/index.js +111 -110
  26. package/dist/components/ControlRenderer/controls/MultiSelectControl/index.d.ts +2 -0
  27. package/dist/components/ControlRenderer/controls/MultiSelectControl/index.js +8 -5
  28. package/dist/components/ControlRenderer/controls/MultiSelectControl/types.d.ts +2 -0
  29. package/dist/components/ControlRenderer/controls/NumberControl/index.js +10 -9
  30. package/dist/components/ControlRenderer/controls/RangeControl/index.js +6 -5
  31. package/dist/components/ControlRenderer/controls/SelectControl/index.js +5 -4
  32. package/dist/components/ControlRenderer/controls/SeparatorControl/index.js +2 -1
  33. package/dist/components/ControlRenderer/controls/TextControl/index.js +7 -6
  34. package/dist/components/ControlRenderer/controls/index.js +1 -0
  35. package/dist/components/ControlRenderer/index.js +28 -26
  36. package/dist/components/DevPanel/index.js +12 -11
  37. package/dist/components/DevPanel/types.d.ts +17 -0
  38. package/dist/components/DevPanelPortal/index.js +5 -4
  39. package/dist/components/EmptyContent/index.js +2 -1
  40. package/dist/components/Icon/index.js +11 -10
  41. package/dist/components/Input/index.js +2 -1
  42. package/dist/components/Section/index.js +2 -1
  43. package/dist/components/Select/index.js +11 -10
  44. package/dist/components/Textarea/index.js +5 -4
  45. package/dist/components/index.js +3 -2
  46. package/dist/hooks/useDebounceCallback/index.js +1 -0
  47. package/dist/hooks/useDevPanel/consoleApi.d.ts +37 -0
  48. package/dist/hooks/useDevPanel/consoleApi.js +16 -0
  49. package/dist/hooks/useDevPanel/index.d.ts +5 -1
  50. package/dist/hooks/useDevPanel/index.js +50 -41
  51. package/dist/hooks/useDevPanel/mountDevPanelPortal.d.ts +18 -0
  52. package/dist/hooks/useDevPanel/mountDevPanelPortal.js +20 -0
  53. package/dist/hooks/useDragAndDrop/index.js +1 -0
  54. package/dist/hooks/useHotKey/index.js +4 -3
  55. package/dist/hooks/useHotkeys/index.js +1 -0
  56. package/dist/index.d.ts +1 -0
  57. package/dist/index.js +4 -3
  58. package/dist/managers/DevPanelManager.js +1 -0
  59. package/dist/store/BaseStoreService.d.ts +2 -7
  60. package/dist/store/BaseStoreService.js +14 -7
  61. package/dist/store/ControlPersistenceService.d.ts +2 -0
  62. package/dist/store/ControlPersistenceService.js +34 -26
  63. package/dist/store/SectionsStore.js +3 -2
  64. package/dist/store/UIStore.d.ts +14 -0
  65. package/dist/store/UIStore.js +37 -22
  66. package/dist/utils/className/className.js +6 -5
  67. package/dist/utils/className/index.js +3 -2
  68. package/dist/utils/copyToClipboard/copyToClipboard.js +1 -0
  69. package/dist/utils/copyToClipboard/index.js +3 -2
  70. package/dist/utils/createHotkey/createHotkey.js +4 -3
  71. package/dist/utils/createHotkey/index.js +3 -2
  72. package/dist/utils/debounce/debounce.js +4 -3
  73. package/dist/utils/debounce/index.js +3 -2
  74. package/dist/utils/deepEqual/deepEqual.d.ts +19 -0
  75. package/dist/utils/deepEqual/deepEqual.js +22 -0
  76. package/dist/utils/formatHotkey/formatHotkey.js +1 -0
  77. package/dist/utils/formatHotkey/index.js +1 -0
  78. package/dist/utils/getConstrainedPosition/getConstrainedPosition.js +6 -5
  79. package/dist/utils/getConstrainedPosition/index.js +3 -2
  80. package/dist/utils/getCurrentElementPosition/getCurrentElementPosition.js +1 -0
  81. package/dist/utils/getCurrentElementPosition/index.js +3 -2
  82. package/dist/utils/getPositionAdjustment/getPositionAdjustment.js +6 -5
  83. package/dist/utils/getPositionAdjustment/index.js +3 -2
  84. package/dist/utils/getStringPreview/getStringPreview.js +3 -2
  85. package/dist/utils/getStringPreview/index.js +1 -0
  86. package/dist/utils/hasControlChanged/hasControlChanged.js +7 -5
  87. package/dist/utils/hasControlChanged/index.js +3 -2
  88. package/dist/utils/isMacOS/index.js +3 -2
  89. package/dist/utils/isMacOS/isMacOS.js +3 -2
  90. package/dist/utils/isValidPersistedValue/isValidPersistedValue.d.ts +13 -0
  91. package/dist/utils/isValidPersistedValue/isValidPersistedValue.js +22 -0
  92. package/dist/utils/prettifyJson/index.js +3 -2
  93. package/dist/utils/prettifyJson/prettifyJson.js +5 -4
  94. package/package.json +7 -3
  95. package/dist/assets/index16.css +0 -1
@@ -0,0 +1,22 @@
1
+ "use client";
2
+ function u(e, t) {
3
+ if (Object.is(e, t)) return !0;
4
+ if (typeof e != "object" || e === null || typeof t != "object" || t === null)
5
+ return !1;
6
+ const s = Array.isArray(e), f = Array.isArray(t);
7
+ if (s !== f) return !1;
8
+ if (s && f) {
9
+ if (e.length !== t.length) return !1;
10
+ for (let r = 0; r < e.length; r++)
11
+ if (!u(e[r], t[r])) return !1;
12
+ return !0;
13
+ }
14
+ const l = e, n = t, o = Object.keys(l), c = Object.keys(n);
15
+ if (o.length !== c.length) return !1;
16
+ for (const r of o)
17
+ if (!Object.prototype.hasOwnProperty.call(n, r) || !u(l[r], n[r])) return !1;
18
+ return !0;
19
+ }
20
+ export {
21
+ u as deepEqual
22
+ };
@@ -1,3 +1,4 @@
1
+ "use client";
1
2
  import { isMacOS as p } from "../isMacOS/isMacOS.js";
2
3
  function a(e) {
3
4
  const t = [], s = p();
@@ -1,3 +1,4 @@
1
+ "use client";
1
2
  import { formatHotkey as t } from "./formatHotkey.js";
2
3
  export {
3
4
  t as formatHotkey
@@ -1,10 +1,11 @@
1
- function m(t, i) {
2
- const n = i.getBoundingClientRect(), e = window.innerWidth, o = window.innerHeight, h = 0, c = 0, a = e - n.width, r = o - n.height;
1
+ "use client";
2
+ function s(t, i) {
3
+ const n = i.getBoundingClientRect(), e = window.innerWidth, o = window.innerHeight, c = 0, h = 0, a = e - n.width, r = o - n.height;
3
4
  return {
4
- x: Math.max(h, Math.min(a, t.x)),
5
- y: Math.max(c, Math.min(r, t.y))
5
+ x: Math.max(c, Math.min(a, t.x)),
6
+ y: Math.max(h, Math.min(r, t.y))
6
7
  };
7
8
  }
8
9
  export {
9
- m as getConstrainedPosition
10
+ s as getConstrainedPosition
10
11
  };
@@ -1,4 +1,5 @@
1
- import { getConstrainedPosition as e } from "./getConstrainedPosition.js";
1
+ "use client";
2
+ import { getConstrainedPosition as t } from "./getConstrainedPosition.js";
2
3
  export {
3
- e as getConstrainedPosition
4
+ t as getConstrainedPosition
4
5
  };
@@ -1,3 +1,4 @@
1
+ "use client";
1
2
  function n(e) {
2
3
  const t = e.getBoundingClientRect();
3
4
  return {
@@ -1,4 +1,5 @@
1
- import { getCurrentElementPosition as o } from "./getCurrentElementPosition.js";
1
+ "use client";
2
+ import { getCurrentElementPosition as n } from "./getCurrentElementPosition.js";
2
3
  export {
3
- o as getCurrentElementPosition
4
+ n as getCurrentElementPosition
4
5
  };
@@ -1,13 +1,14 @@
1
- import { getConstrainedPosition as r } from "../getConstrainedPosition/getConstrainedPosition.js";
1
+ "use client";
2
+ import { getConstrainedPosition as e } from "../getConstrainedPosition/getConstrainedPosition.js";
2
3
  import { getCurrentElementPosition as s } from "../getCurrentElementPosition/getCurrentElementPosition.js";
3
- function m(n) {
4
- const t = s(n), o = r(t, n), i = o.x !== t.x || o.y !== t.y;
4
+ function u(o) {
5
+ const t = s(o), n = e(t, o), i = n.x !== t.x || n.y !== t.y;
5
6
  return {
6
7
  currentPosition: t,
7
- constrainedPosition: o,
8
+ constrainedPosition: n,
8
9
  needsAdjustment: i
9
10
  };
10
11
  }
11
12
  export {
12
- m as getPositionAdjustment
13
+ u as getPositionAdjustment
13
14
  };
@@ -1,4 +1,5 @@
1
- import { getPositionAdjustment as e } from "./getPositionAdjustment.js";
1
+ "use client";
2
+ import { getPositionAdjustment as o } from "./getPositionAdjustment.js";
2
3
  export {
3
- e as getPositionAdjustment
4
+ o as getPositionAdjustment
4
5
  };
@@ -1,5 +1,6 @@
1
- function i(r, e = 100) {
2
- return r.length <= e ? r : r.slice(0, e) + "...";
1
+ "use client";
2
+ function i(e, r = 100) {
3
+ return e.length <= r ? e : e.slice(0, r) + "...";
3
4
  }
4
5
  export {
5
6
  i as getStringPreview
@@ -1,3 +1,4 @@
1
+ "use client";
1
2
  import { getStringPreview as t } from "./getStringPreview.js";
2
3
  export {
3
4
  t as getStringPreview
@@ -1,14 +1,16 @@
1
- function a(n, r) {
1
+ "use client";
2
+ import { deepEqual as l } from "../deepEqual/deepEqual.js";
3
+ function p(n, r) {
2
4
  if (!r) return !0;
3
- const i = Object.keys(n), s = Object.keys(r);
4
- if (i.length !== s.length) return !0;
5
+ const i = Object.keys(n), a = Object.keys(r);
6
+ if (i.length !== a.length) return !0;
5
7
  for (const u of i) {
6
8
  const t = n[u], e = r[u];
7
- if (!e || t.type !== e.type || t.label !== e.label || t.disabled !== e.disabled || "value" in t && "value" in e && t.value !== e.value || t.type === "number" && e.type === "number" && (t.min !== e.min || t.max !== e.max || t.step !== e.step) || t.type === "range" && e.type === "range" && (t.min !== e.min || t.max !== e.max || t.step !== e.step) || t.type === "date" && e.type === "date" && (t.min !== e.min || t.max !== e.max) || t.type === "select" && e.type === "select" && JSON.stringify(t.options) !== JSON.stringify(e.options) || t.type === "text" && e.type === "text" && t.placeholder !== e.placeholder)
9
+ if (!e || t.type !== e.type || t.label !== e.label || t.disabled !== e.disabled || "value" in t && "value" in e && t.value !== e.value || t.type === "number" && e.type === "number" && (t.min !== e.min || t.max !== e.max || t.step !== e.step) || t.type === "range" && e.type === "range" && (t.min !== e.min || t.max !== e.max || t.step !== e.step) || t.type === "date" && e.type === "date" && (t.min !== e.min || t.max !== e.max) || t.type === "select" && e.type === "select" && !l(t.options, e.options) || t.type === "text" && e.type === "text" && t.placeholder !== e.placeholder)
8
10
  return !0;
9
11
  }
10
12
  return !1;
11
13
  }
12
14
  export {
13
- a as hasControlsChanged
15
+ p as hasControlsChanged
14
16
  };
@@ -1,4 +1,5 @@
1
- import { hasControlsChanged as a } from "./hasControlChanged.js";
1
+ "use client";
2
+ import { hasControlsChanged as n } from "./hasControlChanged.js";
2
3
  export {
3
- a as hasControlsChanged
4
+ n as hasControlsChanged
4
5
  };
@@ -1,4 +1,5 @@
1
- import { isMacOS as a } from "./isMacOS.js";
1
+ "use client";
2
+ import { isMacOS as i } from "./isMacOS.js";
2
3
  export {
3
- a as isMacOS
4
+ i as isMacOS
4
5
  };
@@ -1,6 +1,7 @@
1
- function e() {
1
+ "use client";
2
+ function a() {
2
3
  return typeof navigator < "u" && "userAgentData" in navigator ? navigator.userAgentData?.platform === "macOS" : typeof navigator < "u" && navigator.userAgent ? /Mac|iPhone|iPad|iPod/i.test(navigator.userAgent) : typeof navigator < "u" && navigator.platform?.toLowerCase().includes("mac") || !1;
3
4
  }
4
5
  export {
5
- e as isMacOS
6
+ a as isMacOS
6
7
  };
@@ -0,0 +1,13 @@
1
+ import { Control, ControlsNames } from '../../components/ControlRenderer/controls/types';
2
+ /**
3
+ * Validates that a value restored from localStorage matches the runtime type
4
+ * expected by a given control before it is fed back into the consumer's
5
+ * `onChange`. Persisted data can be corrupt, stale (control type changed
6
+ * between releases), or tampered with (same-origin/XSS, another tab), so an
7
+ * unchecked value could inject the wrong type into the consumer's state.
8
+ *
9
+ * @param control - The control the value would be applied to
10
+ * @param value - The raw value read from persistence (`unknown`)
11
+ * @returns `true` if the value is safe to apply for this control type
12
+ */
13
+ export declare function isValidPersistedValue(control: Control<ControlsNames>, value: unknown): boolean;
@@ -0,0 +1,22 @@
1
+ "use client";
2
+ function s(t, e) {
3
+ switch (t.type) {
4
+ case "boolean":
5
+ return typeof e == "boolean";
6
+ case "number":
7
+ case "range":
8
+ return typeof e == "number" && Number.isFinite(e);
9
+ case "text":
10
+ case "select":
11
+ case "color":
12
+ case "date":
13
+ return typeof e == "string";
14
+ case "multiselect":
15
+ return Array.isArray(e) && e.every((r) => typeof r == "string");
16
+ default:
17
+ return !1;
18
+ }
19
+ }
20
+ export {
21
+ s as isValidPersistedValue
22
+ };
@@ -1,4 +1,5 @@
1
- import { prettifyJson as t } from "./prettifyJson.js";
1
+ "use client";
2
+ import { prettifyJson as o } from "./prettifyJson.js";
2
3
  export {
3
- t as prettifyJson
4
+ o as prettifyJson
4
5
  };
@@ -1,9 +1,10 @@
1
- function n(r) {
1
+ "use client";
2
+ function n(t) {
2
3
  try {
3
- const t = JSON.parse(r);
4
- return JSON.stringify(t, null, 2);
4
+ const r = JSON.parse(t);
5
+ return JSON.stringify(r, null, 2);
5
6
  } catch {
6
- return r;
7
+ return t;
7
8
  }
8
9
  }
9
10
  export {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "private": false,
3
- "version": "2.4.2",
3
+ "version": "2.5.0",
4
4
  "license": "MIT",
5
5
  "name": "@berenjena/react-dev-panel",
6
6
  "description": "A React development panel with various tools and utilities.",
@@ -23,8 +23,12 @@
23
23
  "module": "./dist/index.js",
24
24
  "exports": {
25
25
  ".": {
26
- "import": "./dist/index.js",
27
- "types": "./dist/index.d.ts"
26
+ "types": "./dist/index.d.ts",
27
+ "import": "./dist/index.js"
28
+ },
29
+ "./*": {
30
+ "types": "./dist/*.d.ts",
31
+ "import": "./dist/*.js"
28
32
  }
29
33
  },
30
34
  "sideEffects": [
@@ -1 +0,0 @@
1
- :root{--dev-panel-font-family: "Inter", -apple-system, BlinkMacSystemFont, "Segoe UI", "Roboto", "Helvetica Neue", Arial, sans-serif;--dev-panel-font-weight-normal: 400;--dev-panel-font-weight-medium: 500;--dev-panel-font-weight-semibold: 600;--dev-panel-font-weight-bold: 700;--dev-panel-font-size-xs: 10px;--dev-panel-font-size-sm: 12px;--dev-panel-font-size-md: 14px;--dev-panel-font-size-lg: 16px;--dev-panel-font-size-xl: 18px;--dev-panel-line-height-tight: 1.25;--dev-panel-line-height-normal: 1.5;--dev-panel-line-height-relaxed: 1.75;--dev-panel-accent-color: #2563eb;--dev-panel-accent-color-hover: #1d4ed8;--dev-panel-accent-color-active: #1e40af;--dev-panel-accent-color-disabled: #2563eb30;--dev-panel-primary-color: #2563eb;--dev-panel-primary-color-hover: #1d4ed8;--dev-panel-primary-color-active: #1e40af;--dev-panel-primary-color-disabled: #2563eb30;--dev-panel-secondary-color: #64748b;--dev-panel-secondary-color-hover: #475569;--dev-panel-secondary-color-active: #334155;--dev-panel-success-color: #10b981;--dev-panel-success-color-hover: #059669;--dev-panel-success-color-active: #047857;--dev-panel-warning-color: #f59e0b;--dev-panel-warning-color-hover: #d97706;--dev-panel-warning-color-active: #b45309;--dev-panel-error-color: #ef4444;--dev-panel-error-color-hover: #dc2626;--dev-panel-error-color-active: #b91c1c;--dev-panel-info-color: #06b6d4;--dev-panel-info-color-hover: #0891b2;--dev-panel-info-color-active: #0e7490;--dev-panel-background-color: #1e293b;--dev-panel-background-color-secondary: #334155;--dev-panel-background-color-tertiary: #475569;--dev-panel-foreground-color: #0f172a;--dev-panel-surface-color: #334155;--dev-panel-surface-color-hover: #475569;--dev-panel-surface-color-active: #64748b;--dev-panel-text-color: #f1f5f9;--dev-panel-text-color-secondary: #cbd5e1;--dev-panel-text-color-muted: #94a3b8;--dev-panel-text-color-disabled: #64748b;--dev-panel-text-color-on-accent: #ffffff;--dev-panel-text-color-on-surface: #f1f5f9;--dev-panel-border-color: #475569;--dev-panel-border-color-light: #64748b;--dev-panel-border-color-strong: #334155;--dev-panel-border-color-accent: #2563eb;--dev-panel-input-background-color: #0f172a;--dev-panel-input-background-color-hover: #1e293b;--dev-panel-input-background-color-focus: #1e293b;--dev-panel-input-border-color: #475569;--dev-panel-input-border-color-hover: #64748b;--dev-panel-input-border-color-focus: #2563eb;--dev-panel-input-text-color: #f1f5f9;--dev-panel-input-placeholder-color: #64748b;--dev-panel-input-border-width: 1px;--dev-panel-spacing-base: 4px;--dev-panel-spacing-xs: calc(var(--dev-panel-spacing-base) * .5);--dev-panel-spacing-sm: var(--dev-panel-spacing-base);--dev-panel-spacing-md: calc(var(--dev-panel-spacing-base) * 2);--dev-panel-spacing-lg: calc(var(--dev-panel-spacing-base) * 3);--dev-panel-spacing-xl: calc(var(--dev-panel-spacing-base) * 4);--dev-panel-spacing-2xl: calc(var(--dev-panel-spacing-base) * 5);--dev-panel-spacing-3xl: calc(var(--dev-panel-spacing-base) * 6);--dev-panel-spacing-4xl: calc(var(--dev-panel-spacing-base) * 8);--dev-panel-spacing: var(--dev-panel-spacing-lg);--dev-panel-shadow-xs: 0 1px 2px 0 rgb(0 0 0 / .05);--dev-panel-shadow-sm: 0 1px 3px 0 rgb(0 0 0 / .1), 0 1px 2px -1px rgb(0 0 0 / .1);--dev-panel-shadow-md: 0 4px 6px -1px rgb(0 0 0 / .1), 0 2px 4px -2px rgb(0 0 0 / .1);--dev-panel-shadow-lg: 0 10px 15px -3px rgb(0 0 0 / .1), 0 4px 6px -4px rgb(0 0 0 / .1);--dev-panel-shadow-xl: 0 20px 25px -5px rgb(0 0 0 / .1), 0 8px 10px -6px rgb(0 0 0 / .1);--dev-panel-shadow-2xl: 0 25px 50px -12px rgb(0 0 0 / .25);--dev-panel-shadow-inner: inset 0 2px 4px 0 rgb(0 0 0 / .05);--dev-panel-shadow: var(--dev-panel-shadow-xl);--dev-panel-border-radius-none: 0;--dev-panel-border-radius-sm: 2px;--dev-panel-border-radius-md: 4px;--dev-panel-border-radius-lg: 6px;--dev-panel-border-radius-xl: 8px;--dev-panel-border-radius-2xl: 12px;--dev-panel-border-radius-full: 9999px;--dev-panel-border-radius: var(--dev-panel-border-radius-lg);--dev-panel-max-width: 400px;--dev-panel-min-width: 280px;--dev-panel-max-height: 600px;--dev-panel-min-height: auto;--dev-panel-header-height: auto;--dev-panel-inputs-height: 32px;--dev-panel-inputs-height-sm: 28px;--dev-panel-inputs-height-lg: 36px;--dev-panel-button-height: 32px;--dev-panel-button-height-sm: 28px;--dev-panel-button-height-lg: 36px;--dev-panel-transition-fast: all .15s cubic-bezier(.4, 0, .2, 1);--dev-panel-transition-normal: all .2s cubic-bezier(.4, 0, .2, 1);--dev-panel-transition-slow: all .3s cubic-bezier(.4, 0, .2, 1);--dev-panel-transition: var(--dev-panel-transition-normal);--dev-panel-z-index-dropdown: 1000;--dev-panel-z-index-sticky: 1020;--dev-panel-z-index-fixed: 1030;--dev-panel-z-index-modal-backdrop: 1040;--dev-panel-z-index-modal: 1050;--dev-panel-z-index-popover: 1060;--dev-panel-z-index-tooltip: 1070;--dev-panel-z-index-toast: 1080;--dev-panel-z-index: var(--dev-panel-z-index-modal);--dev-panel-opacity-0: 0;--dev-panel-opacity-5: .05;--dev-panel-opacity-10: .1;--dev-panel-opacity-20: .2;--dev-panel-opacity-25: .25;--dev-panel-opacity-30: .3;--dev-panel-opacity-40: .4;--dev-panel-opacity-50: .5;--dev-panel-opacity-60: .6;--dev-panel-opacity-70: .7;--dev-panel-opacity-75: .75;--dev-panel-opacity-80: .8;--dev-panel-opacity-90: .9;--dev-panel-opacity-95: .95;--dev-panel-opacity-100: 1;--dev-panel-scrollbar-width: 6px;--dev-panel-scrollbar-track-color: var(--dev-panel-background-color-secondary);--dev-panel-scrollbar-thumb-color: var(--dev-panel-border-color);--dev-panel-scrollbar-thumb-hover-color: var(--dev-panel-border-color-light)}@media (prefers-color-scheme: light){:root{color-scheme:light;--dev-panel-background-color: #f8fafc;--dev-panel-background-color-secondary: #f1f5f9;--dev-panel-background-color-tertiary: #e2e8f0;--dev-panel-foreground-color: #ffffff;--dev-panel-surface-color: #ffffff;--dev-panel-surface-color-hover: #e2e8f0;--dev-panel-surface-color-active: #e2e8f0;--dev-panel-text-color: #0f172a;--dev-panel-text-color-secondary: #334155;--dev-panel-text-color-muted: #64748b;--dev-panel-text-color-disabled: #94a3b8;--dev-panel-text-color-on-accent: #ffffff;--dev-panel-text-color-on-surface: #0f172a;--dev-panel-border-color: #e2e8f0;--dev-panel-border-color-light: #cbd5e1;--dev-panel-border-color-strong: #94a3b8;--dev-panel-border-color-accent: #2563eb;--dev-panel-input-background-color: #ffffff;--dev-panel-input-background-color-hover: #ffcccc;--dev-panel-input-background-color-focus: #ffffff;--dev-panel-input-border-color: #e2e8f0;--dev-panel-input-border-color-hover: #cbd5e1;--dev-panel-input-border-color-focus: #2563eb;--dev-panel-input-text-color: #0f172a;--dev-panel-input-placeholder-color: #64748b;--dev-panel-shadow-xs: 0 1px 2px 0 rgb(0 0 0 / .03);--dev-panel-shadow-sm: 0 1px 3px 0 rgb(0 0 0 / .08), 0 1px 2px -1px rgb(0 0 0 / .08);--dev-panel-shadow-md: 0 4px 6px -1px rgb(0 0 0 / .08), 0 2px 4px -2px rgb(0 0 0 / .08);--dev-panel-shadow-lg: 0 10px 15px -3px rgb(0 0 0 / .08), 0 4px 6px -4px rgb(0 0 0 / .08);--dev-panel-shadow-xl: 0 20px 25px -5px rgb(0 0 0 / .08), 0 8px 10px -6px rgb(0 0 0 / .08);--dev-panel-shadow-2xl: 0 25px 50px -12px rgb(0 0 0 / .15);--dev-panel-shadow-inner: inset 0 2px 4px 0 rgb(0 0 0 / .03);--dev-panel-shadow: var(--dev-panel-shadow-xl);--dev-panel-scrollbar-thumb-color: var(--dev-panel-border-color-light);--dev-panel-scrollbar-thumb-hover-color: var(--dev-panel-border-color-strong)}}:root[data-dev-panel-theme=dark]{color-scheme:dark}:root[data-dev-panel-theme=light]{--dev-panel-background-color: #f8fafc;--dev-panel-background-color-secondary: #f1f5f9;--dev-panel-background-color-tertiary: #e2e8f0;--dev-panel-foreground-color: #ffffff;--dev-panel-surface-color: #ffffff;--dev-panel-surface-color-hover: #e2e8f0;--dev-panel-surface-color-active: #e2e8f0;--dev-panel-text-color: #0f172a;--dev-panel-text-color-secondary: #334155;--dev-panel-text-color-muted: #64748b;--dev-panel-text-color-disabled: #94a3b8;--dev-panel-text-color-on-accent: #ffffff;--dev-panel-text-color-on-surface: #0f172a;--dev-panel-border-color: #e2e8f0;--dev-panel-border-color-light: #cbd5e1;--dev-panel-border-color-strong: #94a3b8;--dev-panel-border-color-accent: #2563eb;--dev-panel-input-background-color: #ffffff;--dev-panel-input-background-color-hover: #ffcccc;--dev-panel-input-background-color-focus: #ffffff;--dev-panel-input-border-color: #e2e8f0;--dev-panel-input-border-color-hover: #cbd5e1;--dev-panel-input-border-color-focus: #2563eb;--dev-panel-input-text-color: #0f172a;--dev-panel-input-placeholder-color: #64748b;--dev-panel-shadow-xs: 0 1px 2px 0 rgb(0 0 0 / .03);--dev-panel-shadow-sm: 0 1px 3px 0 rgb(0 0 0 / .08), 0 1px 2px -1px rgb(0 0 0 / .08);--dev-panel-shadow-md: 0 4px 6px -1px rgb(0 0 0 / .08), 0 2px 4px -2px rgb(0 0 0 / .08);--dev-panel-shadow-lg: 0 10px 15px -3px rgb(0 0 0 / .08), 0 4px 6px -4px rgb(0 0 0 / .08);--dev-panel-shadow-xl: 0 20px 25px -5px rgb(0 0 0 / .08), 0 8px 10px -6px rgb(0 0 0 / .08);--dev-panel-shadow-2xl: 0 25px 50px -12px rgb(0 0 0 / .15);--dev-panel-shadow-inner: inset 0 2px 4px 0 rgb(0 0 0 / .03);--dev-panel-shadow: var(--dev-panel-shadow-xl);--dev-panel-scrollbar-thumb-color: var(--dev-panel-border-color-light);--dev-panel-scrollbar-thumb-hover-color: var(--dev-panel-border-color-strong);color-scheme:light}._switch_1rjjb_217{--switch-width: 44px;--switch-height: 24px;--thumb-size: 20px;--thumb-margin: 1px;position:relative;display:inline-block;width:var(--switch-width);height:var(--switch-height)}._switch_1rjjb_217 input{position:absolute;opacity:0;width:0;height:0;margin:0;pointer-events:none}._switch_1rjjb_217 input:checked+._slider_1rjjb_235{background-color:var(--dev-panel-accent-color, #6366f1);border-color:var(--dev-panel-accent-color, #6366f1)}._switch_1rjjb_217 input:checked+._slider_1rjjb_235:before{left:calc(100% - var(--thumb-size) - var(--thumb-margin));background-color:var(--dev-panel-text-color-on-accent, #ffffff)}._switch_1rjjb_217 input:focus+._slider_1rjjb_235{box-shadow:0 0 0 3px #6366f133}._switch_1rjjb_217 input:focus:not(:focus-visible)+._slider_1rjjb_235{box-shadow:none}._switch_1rjjb_217 input:disabled+._slider_1rjjb_235{opacity:var(--dev-panel-opacity-50, .5);cursor:not-allowed}._switch_1rjjb_217 input:disabled+._slider_1rjjb_235:before{opacity:var(--dev-panel-opacity-70, .7)}._switch_1rjjb_217 ._slider_1rjjb_235{position:absolute;inset:0;background-color:var(--dev-panel-input-background-color, #0f172a);border:1px solid var(--dev-panel-input-border-color, #475569);border-radius:var(--dev-panel-border-radius-full, 9999px);transition:var(--dev-panel-transition, all .2s cubic-bezier(.4, 0, .2, 1));cursor:pointer}._switch_1rjjb_217 ._slider_1rjjb_235:before{content:"";position:absolute;top:var(--thumb-margin);left:var(--thumb-margin);width:var(--thumb-size);height:var(--thumb-size);background-color:var(--dev-panel-text-color-muted, #94a3b8);border-radius:var(--dev-panel-border-radius-full, 9999px);transition:var(--dev-panel-transition, all .2s cubic-bezier(.4, 0, .2, 1));box-shadow:var(--dev-panel-shadow-sm, 0 1px 3px rgba(0, 0, 0, .1))}._switch_1rjjb_217 ._slider_1rjjb_235:hover{border-color:var(--dev-panel-input-border-color-hover, #64748b)}._switch_1rjjb_217 ._slider_1rjjb_235:hover:before{box-shadow:var(--dev-panel-shadow-md, 0 4px 6px rgba(0, 0, 0, .1))}._switch_1rjjb_217 input:disabled+._slider_1rjjb_235:hover{border-color:var(--dev-panel-input-border-color, #475569)}._switch_1rjjb_217 input:disabled+._slider_1rjjb_235:hover:before{box-shadow:var(--dev-panel-shadow-sm, 0 1px 3px rgba(0, 0, 0, .1))}