@berenjena/react-dev-panel 1.0.4 → 2.0.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 (78) hide show
  1. package/dist/assets/BooleanControl.css +1 -1
  2. package/dist/assets/ButtonControl.css +1 -1
  3. package/dist/assets/ButtonGroupControl.css +1 -1
  4. package/dist/assets/ColorControl.css +1 -1
  5. package/dist/assets/ControlRenderer.css +1 -1
  6. package/dist/assets/DevPanel.css +1 -1
  7. package/dist/assets/EmptyContent.css +1 -1
  8. package/dist/assets/Input.css +1 -1
  9. package/dist/assets/MultiSelectControl.css +1 -0
  10. package/dist/assets/RangeControl.css +1 -1
  11. package/dist/assets/Section.css +1 -1
  12. package/dist/assets/Select.css +1 -1
  13. package/dist/assets/SeparatorControl.css +1 -1
  14. package/dist/assets/index.css +1 -1
  15. package/dist/components/ControlRenderer/ControlRenderer.js +38 -18
  16. package/dist/components/ControlRenderer/controls/BooleanControl/BooleanControl.d.ts +20 -4
  17. package/dist/components/ControlRenderer/controls/BooleanControl/BooleanControl.js +16 -14
  18. package/dist/components/ControlRenderer/controls/ButtonControl/ButtonControl.d.ts +22 -5
  19. package/dist/components/ControlRenderer/controls/ButtonControl/ButtonControl.js +2 -2
  20. package/dist/components/ControlRenderer/controls/ButtonGroupControl/ButtonGroupControl.d.ts +35 -0
  21. package/dist/components/ControlRenderer/controls/ButtonGroupControl/ButtonGroupControl.js +2 -2
  22. package/dist/components/ControlRenderer/controls/ColorControl/ColorControl.d.ts +13 -6
  23. package/dist/components/ControlRenderer/controls/ColorControl/ColorControl.js +61 -19
  24. package/dist/components/ControlRenderer/controls/ColorControl/types.d.ts +14 -0
  25. package/dist/components/ControlRenderer/controls/DateControl/DateControl.d.ts +17 -5
  26. package/dist/components/ControlRenderer/controls/DateControl/DateControl.js +12 -12
  27. package/dist/components/ControlRenderer/controls/MultiSelectControl/MultiSelectControl.d.ts +28 -0
  28. package/dist/components/ControlRenderer/controls/MultiSelectControl/MultiSelectControl.js +131 -0
  29. package/dist/components/ControlRenderer/controls/MultiSelectControl/index.d.ts +1 -0
  30. package/dist/components/ControlRenderer/controls/MultiSelectControl/index.js +4 -0
  31. package/dist/components/ControlRenderer/controls/MultiSelectControl/types.d.ts +11 -0
  32. package/dist/components/ControlRenderer/controls/NumberControl/NumberControl.d.ts +26 -11
  33. package/dist/components/ControlRenderer/controls/NumberControl/NumberControl.js +14 -14
  34. package/dist/components/ControlRenderer/controls/RangeControl/RangeControl.d.ts +27 -11
  35. package/dist/components/ControlRenderer/controls/RangeControl/RangeControl.js +19 -19
  36. package/dist/components/ControlRenderer/controls/SelectControl/SelectControl.d.ts +29 -5
  37. package/dist/components/ControlRenderer/controls/SeparatorControl/SeparatorControl.d.ts +16 -7
  38. package/dist/components/ControlRenderer/controls/SeparatorControl/SeparatorControl.js +6 -6
  39. package/dist/components/ControlRenderer/controls/TextControl/TextControl.d.ts +24 -13
  40. package/dist/components/ControlRenderer/controls/TextControl/TextControl.js +15 -15
  41. package/dist/components/ControlRenderer/controls/index.d.ts +2 -0
  42. package/dist/components/ControlRenderer/controls/index.js +1 -0
  43. package/dist/components/ControlRenderer/controls/types.d.ts +2 -0
  44. package/dist/components/DevPanel/DevPanel.js +46 -41
  45. package/dist/components/DevPanel/types.d.ts +24 -0
  46. package/dist/components/DevPanelPortal/DevPanelPortal.d.ts +8 -0
  47. package/dist/components/DevPanelPortal/DevPanelPortal.js +17 -0
  48. package/dist/components/DevPanelPortal/index.d.ts +1 -0
  49. package/dist/components/DevPanelPortal/index.js +4 -0
  50. package/dist/components/EmptyContent/EmptyContent.js +5 -5
  51. package/dist/components/Icon/index.d.ts +16 -0
  52. package/dist/components/Icon/index.js +31 -0
  53. package/dist/components/Input/Input.js +4 -4
  54. package/dist/components/Section/Section.js +16 -15
  55. package/dist/components/Select/Select.js +1 -1
  56. package/dist/components/index.d.ts +3 -2
  57. package/dist/components/index.js +8 -6
  58. package/dist/hooks/useDevPanel/useDevPanel.d.ts +10 -5
  59. package/dist/hooks/useDevPanel/useDevPanel.js +25215 -12
  60. package/dist/hooks/useDragAndDrop/useDragAndDrop.d.ts +5 -1
  61. package/dist/hooks/useDragAndDrop/useDragAndDrop.js +24 -24
  62. package/dist/index.d.ts +0 -1
  63. package/dist/index.js +2 -8
  64. package/dist/managers/DevPanelManager.d.ts +85 -0
  65. package/dist/managers/DevPanelManager.js +119 -0
  66. package/dist/managers/index.d.ts +1 -0
  67. package/dist/managers/index.js +4 -0
  68. package/dist/store/SectionsStore.js +112 -5
  69. package/dist/store/ThemeStore.d.ts +68 -0
  70. package/dist/store/ThemeStore.js +102 -0
  71. package/dist/store/UIStore.js +115 -9
  72. package/dist/store/index.d.ts +1 -0
  73. package/dist/store/index.js +16 -11
  74. package/package.json +12 -3
  75. package/dist/UIStore-CQdr4U-2.js +0 -227
  76. package/dist/assets/index2.css +0 -1
  77. package/dist/components/Logger/index.d.ts +0 -20
  78. package/dist/components/Logger/index.js +0 -85
@@ -1,11 +1,117 @@
1
- import "react";
2
- import "./BaseStoreService.js";
3
- import { d as o, e as n, g as i, b as P, f as t, c as u } from "../UIStore-CQdr4U-2.js";
1
+ import { useSyncExternalStore as i } from "react";
2
+ import { BaseStoreService as r } from "./BaseStoreService.js";
3
+ const l = "dev-panel-ui-storage", a = { x: 20, y: 20 }, o = {
4
+ isVisible: !1,
5
+ isCollapsed: !1,
6
+ position: a
7
+ };
8
+ class u extends r {
9
+ /**
10
+ * Creates a new DevPanelUIService instance and loads persisted state from localStorage.
11
+ */
12
+ constructor() {
13
+ super(l, o, !0, !0);
14
+ }
15
+ /**
16
+ * Transforms current state to persistable format.
17
+ *
18
+ * @param state - The current UI state
19
+ * @returns The state in persistable format
20
+ * @protected
21
+ */
22
+ toPersistableState(s) {
23
+ return {
24
+ ...s
25
+ };
26
+ }
27
+ /**
28
+ * Transforms persisted state back to current state format.
29
+ *
30
+ * @param persistedState - The persisted UI state
31
+ * @param defaultState - The default state to fall back to
32
+ * @returns The state in current format
33
+ * @protected
34
+ */
35
+ fromPersistedState(s, t) {
36
+ return {
37
+ ...t,
38
+ ...s
39
+ };
40
+ }
41
+ /**
42
+ * Gets the service name for error messages.
43
+ *
44
+ * @returns The service name
45
+ * @protected
46
+ */
47
+ getServiceName() {
48
+ return "UI";
49
+ }
50
+ /**
51
+ * Sets the visibility state of the dev panel.
52
+ *
53
+ * @param visible - Whether the panel should be visible
54
+ */
55
+ setVisible = (s) => {
56
+ this.setState((t) => ({ ...t, isVisible: s }));
57
+ };
58
+ /**
59
+ * Sets the collapsed state of the dev panel.
60
+ *
61
+ * @param collapsed - Whether the panel should be collapsed
62
+ */
63
+ setCollapsed = (s) => {
64
+ this.setState((t) => ({ ...t, isCollapsed: s }));
65
+ };
66
+ /**
67
+ * Updates the position of the dev panel.
68
+ *
69
+ * @param position - New position coordinates {x, y}
70
+ */
71
+ setPosition = (s) => {
72
+ this.setState((t) => ({ ...t, position: s }));
73
+ };
74
+ /**
75
+ * Resets the dev panel UI to its default state.
76
+ * Resets position and sets visibility and collapse to false.
77
+ */
78
+ reset = () => {
79
+ this.setState(() => ({ ...o }));
80
+ };
81
+ }
82
+ const e = new u();
83
+ function c() {
84
+ return {
85
+ ...i(e.subscribe, e.getSnapshot),
86
+ setVisible: e.setVisible,
87
+ setCollapsed: e.setCollapsed,
88
+ setPosition: e.setPosition,
89
+ reset: e.reset
90
+ };
91
+ }
92
+ function b() {
93
+ return i(e.subscribe, () => e.getSnapshot().isVisible);
94
+ }
95
+ function P() {
96
+ return i(e.subscribe, () => e.getSnapshot().isCollapsed);
97
+ }
98
+ function d() {
99
+ return i(e.subscribe, () => e.getSnapshot().position);
100
+ }
101
+ function v() {
102
+ return {
103
+ setVisible: e.setVisible,
104
+ setCollapsed: e.setCollapsed,
105
+ setPosition: e.setPosition,
106
+ reset: e.reset
107
+ };
108
+ }
109
+ const f = c;
4
110
  export {
5
- o as useDevPanelCollapsed,
6
- n as useDevPanelPosition,
7
- i as useDevPanelStore,
8
- P as useDevPanelUI,
9
- t as useDevPanelUIActions,
10
- u as useDevPanelVisible
111
+ P as useDevPanelCollapsed,
112
+ d as useDevPanelPosition,
113
+ f as useDevPanelStore,
114
+ c as useDevPanelUI,
115
+ v as useDevPanelUIActions,
116
+ b as useDevPanelVisible
11
117
  };
@@ -1,3 +1,4 @@
1
1
  export * from './BaseStoreService';
2
2
  export * from './SectionsStore';
3
+ export * from './ThemeStore';
3
4
  export * from './UIStore';
@@ -1,13 +1,18 @@
1
- import { BaseStoreService as a } from "./BaseStoreService.js";
2
- import { d as o, e as l, a as i, u as t, g as u, b as v, f as P, c as D } from "../UIStore-CQdr4U-2.js";
1
+ import { BaseStoreService as o } from "./BaseStoreService.js";
2
+ import { useDevPanelSectionActions as l, useDevPanelSections as r } from "./SectionsStore.js";
3
+ import { useCurrentTheme as a, useDevPanelTheme as u, useDevPanelThemeActions as v } from "./ThemeStore.js";
4
+ import { useDevPanelCollapsed as i, useDevPanelPosition as D, useDevPanelStore as m, useDevPanelUI as c, useDevPanelUIActions as p, useDevPanelVisible as S } from "./UIStore.js";
3
5
  export {
4
- a as BaseStoreService,
5
- o as useDevPanelCollapsed,
6
- l as useDevPanelPosition,
7
- i as useDevPanelSectionActions,
8
- t as useDevPanelSections,
9
- u as useDevPanelStore,
10
- v as useDevPanelUI,
11
- P as useDevPanelUIActions,
12
- D as useDevPanelVisible
6
+ o as BaseStoreService,
7
+ a as useCurrentTheme,
8
+ i as useDevPanelCollapsed,
9
+ D as useDevPanelPosition,
10
+ l as useDevPanelSectionActions,
11
+ r as useDevPanelSections,
12
+ m as useDevPanelStore,
13
+ u as useDevPanelTheme,
14
+ v as useDevPanelThemeActions,
15
+ c as useDevPanelUI,
16
+ p as useDevPanelUIActions,
17
+ S as useDevPanelVisible
13
18
  };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "private": false,
3
- "version": "1.0.4",
3
+ "version": "2.0.0",
4
4
  "type": "module",
5
5
  "module": "./dist/index.js",
6
6
  "name": "@berenjena/react-dev-panel",
@@ -10,7 +10,9 @@
10
10
  "development",
11
11
  "panel",
12
12
  "tools",
13
- "utilities"
13
+ "utilities",
14
+ "gui",
15
+ "devtools"
14
16
  ],
15
17
  "homepage": "https://github.com/Berenjenas/react-dev-panel",
16
18
  "bugs": "https://github.com/Berenjenas/react-dev-panel/issues",
@@ -63,13 +65,20 @@
63
65
  "test": "vitest",
64
66
  "test:ui": "vitest --ui",
65
67
  "coverage": "vitest run --coverage",
66
- "prepublishOnly": "vitest run && npm run build"
68
+ "prepublishOnly": "vitest run && npm run build",
69
+ "changeset": "changeset",
70
+ "prerelease": "vitest run && npm run build",
71
+ "release": "changeset publish"
72
+ },
73
+ "publishConfig": {
74
+ "access": "public"
67
75
  },
68
76
  "peerDependencies": {
69
77
  "react": ">=18.0.0",
70
78
  "react-dom": ">=18.0.0"
71
79
  },
72
80
  "devDependencies": {
81
+ "@changesets/cli": "^2.29.5",
73
82
  "@eslint/js": "^9.30.1",
74
83
  "@rollup/plugin-terser": "^0.4.4",
75
84
  "@storybook/addon-docs": "^9.0.17",
@@ -1,227 +0,0 @@
1
- import { useSyncExternalStore as n } from "react";
2
- import { BaseStoreService as c } from "./store/BaseStoreService.js";
3
- const S = "dev-panel-sections-storage";
4
- class p extends c {
5
- /**
6
- * Creates a new DevPanelSectionsService instance.
7
- */
8
- constructor() {
9
- super(S, {}, !1, !1);
10
- }
11
- /**
12
- * Transforms current sections state to persistable format.
13
- * Since this store doesn't persist, this method returns a dummy value.
14
- *
15
- * @param _state - The current sections state (unused)
16
- * @returns Empty persistable state
17
- * @protected
18
- */
19
- toPersistableState(e) {
20
- return { sectionCollapseState: {} };
21
- }
22
- /**
23
- * Transforms persisted state back to current state format.
24
- * Since this store doesn't persist, this method returns the default state.
25
- *
26
- * @param _persistedState - The persisted sections state (unused)
27
- * @param defaultState - The default state to fall back to
28
- * @returns The default state
29
- * @protected
30
- */
31
- fromPersistedState(e, t) {
32
- return t;
33
- }
34
- /**
35
- * Gets the service name for error messages.
36
- *
37
- * @returns The service name
38
- * @protected
39
- */
40
- getServiceName() {
41
- return "sections";
42
- }
43
- /**
44
- * Registers a new section with the dev panel.
45
- * If a section with the same name already exists, it preserves the existing collapse state.
46
- * New sections start in expanded state (isCollapsed: false).
47
- *
48
- * @param name - Unique name for the section
49
- * @param controls - Array of control configurations for the section
50
- */
51
- registerSection = (e, t) => {
52
- this.setState((i) => {
53
- const u = i[e]?.isCollapsed ?? !1;
54
- return {
55
- ...i,
56
- [e]: {
57
- name: e,
58
- controls: t,
59
- isCollapsed: u
60
- }
61
- };
62
- });
63
- };
64
- /**
65
- * Removes a section from the dev panel.
66
- *
67
- * @param name - Name of the section to remove
68
- */
69
- unregisterSection = (e) => {
70
- this.setState((t) => {
71
- const { [e]: i, ...a } = t;
72
- return a;
73
- });
74
- };
75
- /**
76
- * Toggles the collapsed state of a specific section.
77
- *
78
- * @param name - Name of the section to toggle
79
- */
80
- toggleSectionCollapse = (e) => {
81
- this.setState((t) => {
82
- const i = t[e];
83
- return i ? {
84
- ...t,
85
- [e]: {
86
- ...i,
87
- isCollapsed: !i.isCollapsed
88
- }
89
- } : t;
90
- });
91
- };
92
- /**
93
- * Clears all sections.
94
- */
95
- reset = () => {
96
- this.setState(() => ({}));
97
- };
98
- }
99
- const o = new p();
100
- function C() {
101
- return n(o.subscribe, o.getSnapshot);
102
- }
103
- function h() {
104
- return {
105
- registerSection: o.registerSection,
106
- unregisterSection: o.unregisterSection,
107
- toggleSectionCollapse: o.toggleSectionCollapse,
108
- reset: o.reset
109
- };
110
- }
111
- const g = "dev-panel-ui-storage", d = { x: 20, y: 20 }, l = {
112
- isVisible: !1,
113
- isCollapsed: !1,
114
- position: d
115
- };
116
- class b extends c {
117
- /**
118
- * Creates a new DevPanelUIService instance and loads persisted state from localStorage.
119
- */
120
- constructor() {
121
- super(g, l, !0, !0);
122
- }
123
- /**
124
- * Transforms current state to persistable format.
125
- *
126
- * @param state - The current UI state
127
- * @returns The state in persistable format
128
- * @protected
129
- */
130
- toPersistableState(e) {
131
- return {
132
- ...e
133
- };
134
- }
135
- /**
136
- * Transforms persisted state back to current state format.
137
- *
138
- * @param persistedState - The persisted UI state
139
- * @param defaultState - The default state to fall back to
140
- * @returns The state in current format
141
- * @protected
142
- */
143
- fromPersistedState(e, t) {
144
- return {
145
- ...t,
146
- ...e
147
- };
148
- }
149
- /**
150
- * Gets the service name for error messages.
151
- *
152
- * @returns The service name
153
- * @protected
154
- */
155
- getServiceName() {
156
- return "UI";
157
- }
158
- /**
159
- * Sets the visibility state of the dev panel.
160
- *
161
- * @param visible - Whether the panel should be visible
162
- */
163
- setVisible = (e) => {
164
- this.setState((t) => ({ ...t, isVisible: e }));
165
- };
166
- /**
167
- * Sets the collapsed state of the dev panel.
168
- *
169
- * @param collapsed - Whether the panel should be collapsed
170
- */
171
- setCollapsed = (e) => {
172
- this.setState((t) => ({ ...t, isCollapsed: e }));
173
- };
174
- /**
175
- * Updates the position of the dev panel.
176
- *
177
- * @param position - New position coordinates {x, y}
178
- */
179
- setPosition = (e) => {
180
- this.setState((t) => ({ ...t, position: e }));
181
- };
182
- /**
183
- * Resets the dev panel UI to its default state.
184
- * Resets position and sets visibility and collapse to false.
185
- */
186
- reset = () => {
187
- this.setState(() => ({ ...l }));
188
- };
189
- }
190
- const s = new b();
191
- function P() {
192
- return {
193
- ...n(s.subscribe, s.getSnapshot),
194
- setVisible: s.setVisible,
195
- setCollapsed: s.setCollapsed,
196
- setPosition: s.setPosition,
197
- reset: s.reset
198
- };
199
- }
200
- function D() {
201
- return n(s.subscribe, () => s.getSnapshot().isVisible);
202
- }
203
- function V() {
204
- return n(s.subscribe, () => s.getSnapshot().isCollapsed);
205
- }
206
- function x() {
207
- return n(s.subscribe, () => s.getSnapshot().position);
208
- }
209
- function m() {
210
- return {
211
- setVisible: s.setVisible,
212
- setCollapsed: s.setCollapsed,
213
- setPosition: s.setPosition,
214
- reset: s.reset
215
- };
216
- }
217
- const I = P;
218
- export {
219
- h as a,
220
- P as b,
221
- D as c,
222
- V as d,
223
- x as e,
224
- m as f,
225
- I as g,
226
- C as u
227
- };
@@ -1 +0,0 @@
1
- ._logger_t8a3p_1{position:fixed;bottom:20px;left:20px;width:400px;max-width:calc(100vw - 40px);max-height:calc(100vh - 80px);background:#fff;border:1px solid #e1e5e9;border-radius:8px;box-shadow:0 8px 32px #0000001f;z-index:9999;font-family:system-ui,-apple-system,sans-serif;overflow:hidden;transition:all .3s ease}._logger_t8a3p_1._dark_t8a3p_17{background:#1e1e1e;border-color:#333;color:#e0e0e0}._logger_t8a3p_1._collapsed_t8a3p_22{height:50px;overflow:hidden}._header_t8a3p_27{display:flex;align-items:center;justify-content:space-between;padding:12px 16px;background:#f8f9fa;border-bottom:1px solid #e1e5e9;cursor:pointer;user-select:none;transition:background-color .2s ease}._dark_t8a3p_17 ._header_t8a3p_27{background:#2a2a2a;border-bottom-color:#333}._header_t8a3p_27:hover{background:#e9ecef}._dark_t8a3p_17 ._header_t8a3p_27:hover{background:#333}._title_t8a3p_49{display:flex;align-items:center;gap:.5rem;font-weight:600;font-size:14px;color:#495057;margin:0}._dark_t8a3p_17 ._title_t8a3p_49{color:#e0e0e0}._controls_t8a3p_62{display:flex;align-items:center;gap:8px}._toggleButton_t8a3p_68{background:none;border:none;cursor:pointer;padding:4px;border-radius:4px;color:#6c757d;font-size:16px;display:flex;align-items:center;justify-content:center;transition:all .2s ease}._dark_t8a3p_17 ._toggleButton_t8a3p_68{color:#adb5bd}._toggleButton_t8a3p_68:hover{background:#dee2e6;color:#495057}._dark_t8a3p_17 ._toggleButton_t8a3p_68:hover{background:#495057;color:#e0e0e0}._toggleButton_t8a3p_68>svg{display:block;height:1rem;transition:transform ease .2s}._toggleButton_t8a3p_68>svg._collapsed_t8a3p_22{transform:rotate(180deg)}._toggleButton_t8a3p_68>svg path{fill:currentColor}._closeButton_t8a3p_104{background:none;border:none;cursor:pointer;padding:4px;border-radius:4px;color:#dc3545;font-size:14px;font-weight:700;display:flex;align-items:center;justify-content:center;width:20px;height:20px;transition:all .2s ease}._closeButton_t8a3p_104:hover{background:#f5c6cb;color:#721c24}._dark_t8a3p_17 ._closeButton_t8a3p_104:hover{background:#721c24;color:#f5c6cb}._content_t8a3p_129{padding:16px;overflow:auto;max-height:calc(100vh - 160px);background:#fff}._dark_t8a3p_17 ._content_t8a3p_129{background:#1e1e1e}._jsonDisplay_t8a3p_139{font-family:SF Mono,Monaco,Cascadia Code,Roboto Mono,Consolas,Courier New,monospace;font-size:12px;line-height:1.4;margin:0;white-space:pre-wrap;word-break:break-all;color:#212529}._dark_t8a3p_17 ._jsonDisplay_t8a3p_139{color:#e0e0e0}._empty_t8a3p_152{color:#6c757d;font-style:italic;text-align:center;padding:20px}._dark_t8a3p_17 ._empty_t8a3p_152{color:#adb5bd}._badge_t8a3p_162{display:flex;justify-content:center;align-items:center;background:#007bff;color:#fff;width:1rem;height:1rem;border-radius:50%;padding:4px;font-size:10px;font-weight:600}._badge_t8a3p_162._updated_t8a3p_175{background:#28a745;animation:_pulse_t8a3p_1 .6s ease-in-out}@keyframes _pulse_t8a3p_1{0%{transform:scale(1)}50%{transform:scale(1.1)}to{transform:scale(1)}}._content_t8a3p_129::-webkit-scrollbar{width:6px}._content_t8a3p_129::-webkit-scrollbar-track{background:#f1f1f1;border-radius:3px}._dark_t8a3p_17 ._content_t8a3p_129::-webkit-scrollbar-track{background:#333}._content_t8a3p_129::-webkit-scrollbar-thumb{background:#c1c1c1;border-radius:3px}._dark_t8a3p_17 ._content_t8a3p_129::-webkit-scrollbar-thumb{background:#555}._content_t8a3p_129::-webkit-scrollbar-thumb:hover{background:#a8a8a8}._dark_t8a3p_17 ._content_t8a3p_129::-webkit-scrollbar-thumb:hover{background:#777}
@@ -1,20 +0,0 @@
1
- type LoggerProps = {
2
- /** The data object to display in JSON format */
3
- items: object;
4
- /** Optional title for the logger panel */
5
- title?: string;
6
- /** Theme preference - 'auto' detects system preference */
7
- theme?: "light" | "dark" | "auto";
8
- /** Whether the logger should start collapsed */
9
- defaultCollapsed?: boolean;
10
- /** Whether the logger should be visible by default */
11
- defaultVisible?: boolean;
12
- /** Callback function called when the logger is closed */
13
- onClose?: () => void;
14
- };
15
- /**
16
- * A floating, collapsible logger component that displays object data in JSON format.
17
- * @returns JSX element or null if not visible
18
- */
19
- export declare function Logger({ items, title, theme, defaultCollapsed, defaultVisible, onClose }: LoggerProps): import("react/jsx-runtime").JSX.Element | null;
20
- export {};
@@ -1,85 +0,0 @@
1
- import { jsxs as r, jsx as e } from "react/jsx-runtime";
2
- import { useState as l, useRef as D, useEffect as h } from "react";
3
- import { className as I } from "../../utils/className/className.js";
4
- import '../../assets/index2.css';const O = "_logger_t8a3p_1", L = "_dark_t8a3p_17", S = "_collapsed_t8a3p_22", J = "_header_t8a3p_27", $ = "_title_t8a3p_49", A = "_controls_t8a3p_62", z = "_toggleButton_t8a3p_68", H = "_closeButton_t8a3p_104", M = "_content_t8a3p_129", R = "_jsonDisplay_t8a3p_139", T = "_empty_t8a3p_152", U = "_badge_t8a3p_162", V = "_updated_t8a3p_175", t = {
5
- logger: O,
6
- dark: L,
7
- collapsed: S,
8
- header: J,
9
- title: $,
10
- controls: A,
11
- toggleButton: z,
12
- closeButton: H,
13
- content: M,
14
- jsonDisplay: R,
15
- empty: T,
16
- badge: U,
17
- updated: V
18
- };
19
- function F({ items: s, title: m = "Logger", theme: c = "auto", defaultCollapsed: f = !0, defaultVisible: y = !0, onClose: p }) {
20
- const [a, v] = l(f), [N, b] = l(y), [C, d] = l(!1), [k, g] = l(!1), [u, w] = l(0), i = D("");
21
- function _() {
22
- v(!a);
23
- }
24
- function B() {
25
- b(!1), p?.();
26
- }
27
- function x(o) {
28
- try {
29
- return JSON.stringify(o, null, 2);
30
- } catch (n) {
31
- return `Error formatting JSON: ${n}`;
32
- }
33
- }
34
- if (h(() => {
35
- if (c === "auto") {
36
- const o = window.matchMedia("(prefers-color-scheme: dark)");
37
- d(o.matches);
38
- const n = (E) => d(E.matches);
39
- return o.addEventListener("change", n), () => o.removeEventListener("change", n);
40
- } else
41
- d(c === "dark");
42
- }, [c]), h(() => {
43
- const o = JSON.stringify(s), n = Object.keys(s).length;
44
- i.current && i.current !== o && (g(!0), setTimeout(() => g(!1), 600)), w(n), i.current = o;
45
- }, [s]), !N) return null;
46
- const j = !s || Object.keys(s).length === 0;
47
- return /* @__PURE__ */ r("div", { className: `${t.logger} ${C ? t.dark : ""} ${a ? t.collapsed : ""}`, children: [
48
- /* @__PURE__ */ r("div", { className: t.header, onClick: _, children: [
49
- /* @__PURE__ */ r("h3", { className: t.title, children: [
50
- m,
51
- u > 0 && /* @__PURE__ */ e("span", { ...I(t.badge, { [t.updated]: k }), children: u })
52
- ] }),
53
- /* @__PURE__ */ r("div", { className: t.controls, children: [
54
- /* @__PURE__ */ e(
55
- "button",
56
- {
57
- className: t.toggleButton,
58
- onClick: _,
59
- type: "button",
60
- "aria-label": a ? "Expand logger" : "Collapse logger",
61
- title: a ? "Expand" : "Collapse",
62
- children: /* @__PURE__ */ e("svg", { xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 24 24", className: a ? t.collapsed : void 0, children: /* @__PURE__ */ e("path", { d: "M16.843 10.211A.75.75 0 0 0 16.251 9H7.75a.75.75 0 0 0-.591 1.212l4.258 5.498a.746.746 0 0 0 1.183-.001l4.243-5.498z" }) })
63
- }
64
- ),
65
- p && /* @__PURE__ */ e(
66
- "button",
67
- {
68
- className: t.closeButton,
69
- type: "button",
70
- "aria-label": "Close logger",
71
- title: "Close",
72
- onClick: (o) => {
73
- o.stopPropagation(), B();
74
- },
75
- children: /* @__PURE__ */ e("svg", { xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 24 24", children: /* @__PURE__ */ e("path", { d: "m12 10.93 5.719-5.72a.749.749 0 1 1 1.062 1.062l-5.72 5.719 5.719 5.719a.75.75 0 1 1-1.061 1.062L12 13.053l-5.719 5.719A.75.75 0 0 1 5.22 17.71l5.719-5.719-5.72-5.719A.752.752 0 0 1 6.281 5.21z" }) })
76
- }
77
- )
78
- ] })
79
- ] }),
80
- !a && /* @__PURE__ */ e("div", { className: t.content, children: j ? /* @__PURE__ */ e("div", { className: t.empty, children: "No data to display" }) : /* @__PURE__ */ e("pre", { className: t.jsonDisplay, children: /* @__PURE__ */ e("code", { children: x(s) }) }) })
81
- ] });
82
- }
83
- export {
84
- F as Logger
85
- };