@berenjena/react-dev-panel 1.0.1 → 1.0.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (83) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +305 -1
  3. package/dist/UIStore-CQdr4U-2.js +227 -0
  4. package/dist/assets/ButtonControl.css +1 -1
  5. package/dist/assets/ControlRenderer.css +1 -0
  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/RangeControl.css +1 -0
  10. package/dist/assets/Section.css +1 -1
  11. package/dist/assets/SeparatorControl.css +1 -0
  12. package/dist/assets/index.css +1 -1
  13. package/dist/assets/index2.css +1 -0
  14. package/dist/components/ControlRenderer/ControlRenderer.js +30 -6
  15. package/dist/components/ControlRenderer/controls/BooleanControl/BooleanControl.js +9 -10
  16. package/dist/components/ControlRenderer/controls/ButtonControl/ButtonControl.js +3 -3
  17. package/dist/components/ControlRenderer/controls/ColorControl/ColorControl.js +13 -9
  18. package/dist/components/ControlRenderer/controls/DateControl/DateControl.d.ts +29 -0
  19. package/dist/components/ControlRenderer/controls/DateControl/DateControl.js +31 -0
  20. package/dist/components/ControlRenderer/controls/DateControl/index.d.ts +1 -0
  21. package/dist/components/ControlRenderer/controls/DateControl/index.js +4 -0
  22. package/dist/components/ControlRenderer/controls/DateControl/types.d.ts +12 -0
  23. package/dist/components/ControlRenderer/controls/RangeControl/RangeControl.d.ts +30 -0
  24. package/dist/components/ControlRenderer/controls/RangeControl/RangeControl.js +40 -0
  25. package/dist/components/ControlRenderer/controls/RangeControl/index.d.ts +1 -0
  26. package/dist/components/ControlRenderer/controls/RangeControl/index.js +4 -0
  27. package/dist/components/ControlRenderer/controls/RangeControl/types.d.ts +13 -0
  28. package/dist/components/ControlRenderer/controls/SelectControl/SelectControl.js +6 -9
  29. package/dist/components/ControlRenderer/controls/SeparatorControl/SeparatorControl.d.ts +30 -0
  30. package/dist/components/ControlRenderer/controls/SeparatorControl/SeparatorControl.js +14 -0
  31. package/dist/components/ControlRenderer/controls/SeparatorControl/index.d.ts +1 -0
  32. package/dist/components/ControlRenderer/controls/SeparatorControl/index.js +4 -0
  33. package/dist/components/ControlRenderer/controls/SeparatorControl/types.d.ts +10 -0
  34. package/dist/components/ControlRenderer/controls/index.d.ts +3 -1
  35. package/dist/components/ControlRenderer/controls/index.js +13 -39
  36. package/dist/components/ControlRenderer/controls/types.d.ts +6 -0
  37. package/dist/components/ControlRenderer/index.js +1 -1
  38. package/dist/components/DevPanel/DevPanel.js +36 -35
  39. package/dist/components/DevPanel/types.d.ts +9 -4
  40. package/dist/components/EmptyContent/EmptyContent.js +2 -2
  41. package/dist/components/Input/Input.js +3 -3
  42. package/dist/components/Logger/index.d.ts +20 -0
  43. package/dist/components/Logger/index.js +85 -0
  44. package/dist/components/Section/Section.js +17 -16
  45. package/dist/components/index.d.ts +1 -0
  46. package/dist/components/index.js +6 -5
  47. package/dist/hooks/useDebounceCallback/index.d.ts +1 -0
  48. package/dist/hooks/useDebounceCallback/index.js +4 -0
  49. package/dist/hooks/useDebounceCallback/useDebounceCallback.d.ts +8 -0
  50. package/dist/hooks/useDebounceCallback/useDebounceCallback.js +17 -0
  51. package/dist/hooks/useDevPanel/useDevPanel.js +12 -12
  52. package/dist/hooks/useDragAndDrop/useDragAndDrop.d.ts +1 -1
  53. package/dist/hooks/useHotkeys/types.d.ts +14 -0
  54. package/dist/hooks/useHotkeys/useHotkey.d.ts +1 -2
  55. package/dist/hooks/useHotkeys/useHotkeys.d.ts +1 -2
  56. package/dist/index.d.ts +2 -0
  57. package/dist/index.js +9 -8
  58. package/dist/store/BaseStoreService.d.ts +90 -0
  59. package/dist/store/BaseStoreService.js +90 -0
  60. package/dist/store/SectionsStore.d.ts +40 -0
  61. package/dist/store/SectionsStore.js +7 -0
  62. package/dist/store/UIStore.d.ts +88 -0
  63. package/dist/store/UIStore.js +11 -0
  64. package/dist/store/index.d.ts +3 -0
  65. package/dist/store/index.js +13 -0
  66. package/dist/utils/createHotkey/createHotkey.d.ts +1 -1
  67. package/dist/utils/formatHotkey/formatHotkey.d.ts +1 -1
  68. package/dist/utils/getConstrainedPosition/getConstrainedPosition.d.ts +1 -1
  69. package/dist/utils/getCurrentElementPosition/getCurrentElementPosition.d.ts +1 -1
  70. package/dist/utils/getPositionAdjustment/getPositionAdjustment.d.ts +2 -2
  71. package/dist/utils/hasControlChanged/hasControlChanged.js +5 -5
  72. package/dist/utils/index.d.ts +0 -1
  73. package/dist/utils/index.js +16 -23
  74. package/package.json +27 -21
  75. package/dist/assets/SelectControl.css +0 -1
  76. package/dist/components/logger.d.ts +0 -5
  77. package/dist/components/logger.js +0 -7
  78. package/dist/types.d.ts +0 -18
  79. package/dist/utils/store/index.d.ts +0 -1
  80. package/dist/utils/store/index.js +0 -9
  81. package/dist/utils/store/store.d.ts +0 -40
  82. package/dist/utils/store/store.js +0 -103
  83. package/dist/vite-env.d.ts +0 -1
package/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2025 Berenjenas
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/README.md CHANGED
@@ -1 +1,305 @@
1
- # React dev panel
1
+ # React Dev Panel
2
+
3
+ ![NPM Version](https://badgen.net/npm/v/@berenjena/react-dev-panel)
4
+ ![npm package minimized gzipped size](<https://img.shields.io/bundlejs/size/%40berenjena%2Freact-dev-panel?label=Bundle%20size%20(gzip)>)
5
+ [![License: MIT](https://badgen.net/npm/license/@berenjena/react-dev-panel)](https://opensource.org/licenses/MIT)
6
+ [![Weekly Downloads](https://badgen.net/npm/dw/@berenjena/react-dev-panel)](https://www.npmjs.com/package/@berenjena/react-dev-panel)
7
+
8
+ A powerful, type-safe React development panel that provides an intuitive interface for controlling component props, debugging state, and rapid prototyping during development.
9
+
10
+ ## ✨ Features
11
+
12
+ - 🎛️ **Rich Control Types** - Boolean, Number, Text, Select, Color, Range, Date, Button, and Separator controls
13
+ - 🎨 **Themeable** - Consistent design system with CSS custom properties
14
+ - ⌨️ **Keyboard Shortcuts** - Quick access with customizable hotkeys
15
+ - 📖 **TypeScript First** - Full type safety and IntelliSense support
16
+ - 🚀 **Zero Dependencies** - Only requires React (peer dependency)
17
+ - 📦 **Bundle Size**: ![npm package minimized gzipped size](<https://img.shields.io/bundlejs/size/%40berenjena%2Freact-dev-panel?label=Bundle%20size%20(gzip)>)
18
+
19
+ ## 📦 Installation
20
+
21
+ ```bash
22
+ npm install -D @berenjena/react-dev-panel
23
+ ```
24
+
25
+ ```bash
26
+ yarn add -D @berenjena/react-dev-panel
27
+ ```
28
+
29
+ ```bash
30
+ pnpm add -D @berenjena/react-dev-panel
31
+ ```
32
+
33
+ ## 🚀 Quick Start
34
+
35
+ ### Basic Usage
36
+
37
+ ```tsx
38
+ import { useState } from "react";
39
+ import { useDevPanel, DevPanel } from "@berenjena/react-dev-panel";
40
+
41
+ function App() {
42
+ const [name, setName] = useState("John Doe");
43
+ const [age, setAge] = useState(25);
44
+ const [isActive, setIsActive] = useState(true);
45
+ const [theme, setTheme] = useState("dark");
46
+
47
+ useDevPanel("User Settings", {
48
+ name: {
49
+ type: "text",
50
+ value: name,
51
+ label: "Full Name",
52
+ onChange: setName,
53
+ },
54
+ age: {
55
+ type: "number",
56
+ value: age,
57
+ label: "Age",
58
+ min: 0,
59
+ max: 120,
60
+ onChange: setAge,
61
+ },
62
+ isActive: {
63
+ type: "boolean",
64
+ value: isActive,
65
+ label: "Active User",
66
+ onChange: setIsActive,
67
+ },
68
+ theme: {
69
+ type: "select",
70
+ value: theme,
71
+ label: "Theme",
72
+ options: ["light", "dark", "auto"],
73
+ onChange: setTheme,
74
+ },
75
+ });
76
+
77
+ return (
78
+ <div>
79
+ <h1>Hello, {name}!</h1>
80
+ <p>Age: {age}</p>
81
+ <p>Status: {isActive ? "Active" : "Inactive"}</p>
82
+ <p>Theme: {theme}</p>
83
+
84
+ <DevPanel />
85
+ </div>
86
+ );
87
+ }
88
+ ```
89
+
90
+ ## 🎛️ Control Types
91
+
92
+ React Dev Panel provides rich control types for different data types. Here are some quick examples:
93
+
94
+ ### Text Control
95
+
96
+ ```tsx
97
+ {
98
+ type: 'text',
99
+ value: 'Hello World',
100
+ label: 'Message',
101
+ placeholder: 'Enter message...',
102
+ onChange: (value: string) => setValue(value),
103
+ }
104
+ ```
105
+
106
+ ### Number Control
107
+
108
+ ```tsx
109
+ {
110
+ type: 'number',
111
+ value: 42,
112
+ label: 'Count',
113
+ min: 0,
114
+ max: 100,
115
+ onChange: (value: number) => setValue(value),
116
+ }
117
+ ```
118
+
119
+ ### Boolean Control
120
+
121
+ ```tsx
122
+ {
123
+ type: 'boolean',
124
+ value: true,
125
+ label: 'Enable Feature',
126
+ onChange: (value: boolean) => setValue(value),
127
+ }
128
+ ```
129
+
130
+ ### Button Control
131
+
132
+ ```tsx
133
+ {
134
+ type: 'button',
135
+ label: 'Reset Values',
136
+ onClick: () => resetToDefaults(),
137
+ }
138
+ ```
139
+
140
+ **📖 [View all control types and detailed documentation →](./guides/CONTROLS.md)**
141
+
142
+ ## 🎨 Styling and Theming
143
+
144
+ The dev panel uses CSS custom properties for easy theming. Here's a quick example:
145
+
146
+ ```css
147
+ :root {
148
+ --dev-panel-background-color: #1a1a1a;
149
+ --dev-panel-text-color: #ffffff;
150
+ --dev-panel-accent-color: #ff6200;
151
+ --dev-panel-border-color: #333333;
152
+ }
153
+ ```
154
+
155
+ **📖 [Complete theming guide and customization options →](./guides/STYLING.md)**
156
+
157
+ ## ⌨️ Keyboard Shortcuts
158
+
159
+ The dev panel supports customizable keyboard shortcuts:
160
+
161
+ ```tsx
162
+ import { useHotkeys } from "@berenjena/react-dev-panel";
163
+
164
+ function App() {
165
+ useHotkeys([
166
+ {
167
+ keys: ["ctrl", "d"],
168
+ action: () => toggleDevPanel(),
169
+ description: "Toggle Dev Panel",
170
+ },
171
+ {
172
+ keys: ["ctrl", "shift", "r"],
173
+ action: () => resetAllValues(),
174
+ description: "Reset All Values",
175
+ },
176
+ ]);
177
+ }
178
+ ```
179
+
180
+ ## 🔧 Advanced Usage
181
+
182
+ ### Multiple Panel Groups
183
+
184
+ ```tsx
185
+ function App() {
186
+ // Group 1: User Settings
187
+ useDevPanel("User", {
188
+ name: { type: "text", value: name, onChange: setName },
189
+ age: { type: "number", value: age, onChange: setAge },
190
+ });
191
+
192
+ // Group 2: App Settings
193
+ useDevPanel("App", {
194
+ theme: { type: "select", value: theme, options: ["light", "dark"], onChange: setTheme },
195
+ debug: { type: "boolean", value: debug, onChange: setDebug },
196
+ });
197
+
198
+ return <DevPanel />;
199
+ }
200
+ ```
201
+
202
+ **📖 [Advanced patterns, state management, and optimization →](./guides/ADVANCED_USAGE.md)**
203
+
204
+ ### Event Handling Options
205
+
206
+ React Dev Panel supports two different event handling strategies for input controls:
207
+
208
+ **onChange Event**: Provides real-time updates as the user types or interacts with the control. This is ideal for immediate feedback and live previews, but may trigger more frequent re-renders.
209
+
210
+ **onBlur Event**: Updates the value only when the user finishes interacting with the control (loses focus). This approach is more performance-friendly for expensive operations and provides a better user experience when dealing with API calls or heavy computations.
211
+
212
+ ```tsx
213
+ {
214
+ type: 'text',
215
+ value: searchTerm,
216
+ event: 'onChange', // Real-time updates
217
+ onChange: setSearchTerm,
218
+ }
219
+
220
+ {
221
+ type: 'number',
222
+ value: price,
223
+ event: 'onBlur', // Update only when focus is lost
224
+ onChange: setPrice,
225
+ }
226
+ ```
227
+
228
+ ## 📚 Documentation
229
+
230
+ ### Core Guides
231
+
232
+ - **[Control Types](./guides/CONTROLS.md)** - Complete guide to all available controls
233
+ - **[Event Handling](./guides/EVENT_HANDLING.md)** - onChange vs onBlur strategies and best practices
234
+ - **[Styling & Theming](./guides/STYLING.md)** - Customization, themes, and responsive design
235
+ - **[Advanced Usage](./guides/ADVANCED_USAGE.md)** - Complex patterns, state management, and optimization
236
+
237
+ ### Development
238
+
239
+ - **[Development Guide](./guides/DEVELOPMENT.md)** - Setup, contributing, and project structure
240
+
241
+ ## 📚 API Reference
242
+
243
+ ### `useDevPanel(groupName: string, controls: ControlsGroup)`
244
+
245
+ Registers a group of controls with the dev panel.
246
+
247
+ **Parameters:**
248
+
249
+ - `groupName` - Unique identifier for the control group
250
+ - `controls` - Object containing control definitions
251
+
252
+ ### `<DevPanel />`
253
+
254
+ Main component that renders the development panel.
255
+
256
+ **Props:**
257
+
258
+ - `panelTitle?: string` - Custom title for the panel
259
+ - `position?: { x: number, y: number }` - Initial position
260
+ - `defaultExpanded?: boolean` - Whether the panel starts expanded
261
+
262
+ ### `useHotkeys(hotkeys: Hotkey[])`
263
+
264
+ Registers keyboard shortcuts.
265
+
266
+ **Parameters:**
267
+
268
+ - `hotkeys` - Array of hotkey definitions with keys, action, and description
269
+
270
+ ## 🛠️ Development
271
+
272
+ Want to contribute or set up the project locally?
273
+
274
+ **📖 [Development setup, contributing guidelines, and project structure →](./guides/DEVELOPMENT.md)**
275
+
276
+ ## 📖 Storybook
277
+
278
+ Explore all components and controls in our Storybook:
279
+
280
+ ```bash
281
+ npm run storybook
282
+ ```
283
+
284
+ Visit `http://localhost:6006` to see interactive examples and documentation.
285
+
286
+ ## 🤝 Contributing
287
+
288
+ We welcome contributions! Please see our [Contributing Guide](CONTRIBUTING.md) for details.
289
+
290
+ 1. Fork the repository
291
+ 2. Create your feature branch (`git checkout -b feature/amazing-feature`)
292
+ 3. Commit your changes (`git commit -m 'Add some amazing feature'`)
293
+ 4. Push to the branch (`git push origin feature/amazing-feature`)
294
+ 5. Open a Pull Request
295
+
296
+ ## 🔗 Links
297
+
298
+ - [NPM Package](https://www.npmjs.com/package/@berenjena/react-dev-panel)
299
+ - [GitHub Repository](https://github.com/Berenjenas/react-dev-panel)
300
+ - [Bug Reports](https://github.com/Berenjenas/react-dev-panel/issues)
301
+ - [Berenjena](https://berenjena.com.ar)
302
+
303
+ ---
304
+
305
+ Made with ❤️ by the [Berenjena](https://berenjena.com.ar) team
@@ -0,0 +1,227 @@
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 +1 @@
1
- ._button_e2m3l_1{width:100%;padding:var(--dev-panel-spacing-xs) var(--dev-panel-spacing-sm);height:var(--dev-panel-inputs-height);border:none;border-radius:4px;font-size:11px;font-weight:500;background-color:var(--dev-panel-accent-color);color:var(--dev-panel-text-color-highlight);cursor:pointer;transition:var(--dev-panel-transition)}._button_e2m3l_1:hover:not(:disabled){background-color:color-mix(in srgb,var(--dev-panel-accent-color) 80%,transparent)}._button_e2m3l_1:disabled{background-color:color-mix(in srgb,var(--dev-panel-accent-color) 20%,var(--dev-panel-background-color));cursor:not-allowed}
1
+ ._button_1cetu_1{width:100%;min-height:var(--dev-panel-inputs-height);padding:var(--dev-panel-spacing-xs) var(--dev-panel-spacing-sm);border:none;border-radius:4px;font-size:11px;font-weight:500;background-color:var(--dev-panel-accent-color);color:var(--dev-panel-text-color-highlight);cursor:pointer;transition:var(--dev-panel-transition)}._button_1cetu_1:hover:not(:disabled){background-color:color-mix(in srgb,var(--dev-panel-accent-color) 80%,transparent)}._button_1cetu_1:disabled{background-color:color-mix(in srgb,var(--dev-panel-accent-color) 20%,var(--dev-panel-background-color));cursor:not-allowed}
@@ -0,0 +1 @@
1
+ ._controlRendererContainer_eix3y_1{gap:var(--dev-panel-spacing-xs);display:grid}._controlRendererContainer_eix3y_1 ._controlContainer_eix3y_5{gap:var(--dev-panel-spacing-sm);display:grid;height:100%;align-items:center;overflow:hidden;color:var(--dev-panel-text-color)}._controlRendererContainer_eix3y_1 ._controlContainer_eix3y_5:not(._fullWidth_eix3y_13){grid-template-columns:100px 1fr}._controlRendererContainer_eix3y_1 ._controlContainer_eix3y_5 ._controlWrapper_eix3y_16{display:flex;justify-content:flex-end}._controlRendererContainer_eix3y_1 ._controlContainer_eix3y_5 ._label_eix3y_20{text-align:start;font-weight:500;font-size:var(--dev-panel-font-size-xs);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}._controlRendererContainer_eix3y_1 ._description_eix3y_28,._controlRendererContainer_eix3y_1 ._loading_eix3y_29{font-size:var(--dev-panel-font-size-xs);color:var(--dev-panel-text-color-muted)}._controlRendererContainer_eix3y_1 ._description_eix3y_28{text-align:right}
@@ -1 +1 @@
1
- :root{--dev-panel-font-family: Helvetica, Arial, Sans-Serif;--dev-panel-font-size-xs: 12px;--dev-panel-font-size-sm: 14px;--dev-panel-font-size-md: 16px;--dev-panel-font-size-lg: 18px;--dev-panel-accent-color: #6663fd;--dev-panel-primary-color: #6663fd;--dev-panel-secondary-color: #1c1c1c;--dev-panel-background-color: #3e3d40;--dev-panel-highlight-color: #f0f0f0;--dev-panel-foreground-color: #313133;--dev-panel-border-color: #a1a1a1;--dev-panel-text-color: #e0e0e0;--dev-panel-text-color-muted: #b0b0b0;--dev-panel-input-background-color: #302f32;--dev-panel-text-color-highlight: #fbfffa;--dev-panel-spacing-xs: 4px;--dev-panel-spacing-sm: 8px;--dev-panel-spacing-md: 10px;--dev-panel-spacing-lg: 14px;--dev-panel-shadow: 0 8px 24px rgba(0, 0, 0, .2);--dev-panel-max-width: 320px;--dev-panel-max-height: 80vh;--dev-panel-inputs-height: 24px;--dev-panel-border-radius: 6px;--dev-panel-transition: all .2s cubic-bezier(.4, 0, .2, 1)}._devPanelContainer_1rv6u_30{position:fixed;z-index:9998;border-radius:var(--dev-panel-border-radius);box-shadow:0 8px 24px #0003;width:var(--dev-panel-max-width);max-height:var(--dev-panel-max-height);overflow:hidden;-webkit-user-select:none;user-select:none;font-family:var(--dev-panel-font-family)}._devPanelContainer_1rv6u_30 ._header_1rv6u_41{display:flex;align-items:center;justify-content:space-between;padding:var(--dev-panel-spacing-xs);background:var(--dev-panel-foreground-color);cursor:move;color:var(--dev-panel-text-color)}._devPanelContainer_1rv6u_30 ._title_1rv6u_50{font-size:var(--dev-panel-font-size-xs);font-weight:600;display:flex;align-items:center;gap:var(--dev-panel-spacing-sm);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}._devPanelContainer_1rv6u_30 ._button_1rv6u_60{background:none;border:none;color:inherit;font-size:var(--dev-panel-font-size-sm);cursor:pointer;padding:var(--dev-panel-spacing-xs) var(--dev-panel-spacing-sm);border-radius:4px;transition:all .2s ease}._devPanelContainer_1rv6u_30 ._button_1rv6u_60:hover{background:var(--dev-panel-highlight-color);color:#333}._devPanelContainer_1rv6u_30 ._button_1rv6u_60:active{transform:scale(.95)}._content_1rv6u_78{max-height:calc(var(--dev-panel-max-height) - 48px);overflow-y:auto;background-color:var(--dev-panel-background-color)}._content_1rv6u_78::-webkit-scrollbar{width:6px}._content_1rv6u_78::-webkit-scrollbar-track{background:#f1f1f1}._content_1rv6u_78::-webkit-scrollbar-thumb{background:#c1c1c1;border-radius:3px}._content_1rv6u_78::-webkit-scrollbar-thumb:hover{background:#a8a8a8}
1
+ ._devPanelContainer_1vath_1{position:fixed;z-index:9998;border-radius:var(--dev-panel-border-radius);box-shadow:0 8px 24px #0003;width:var(--dev-panel-max-width);max-height:var(--dev-panel-max-height);overflow:hidden;user-select:none;font-family:var(--dev-panel-font-family)}._devPanelContainer_1vath_1 ._header_1vath_12{display:flex;align-items:center;justify-content:space-between;padding:var(--dev-panel-spacing-xs);background:var(--dev-panel-foreground-color);cursor:move;color:var(--dev-panel-text-color)}._devPanelContainer_1vath_1 ._title_1vath_21{font-size:var(--dev-panel-font-size-xs);font-weight:600;display:flex;align-items:center;gap:var(--dev-panel-spacing-sm);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}._devPanelContainer_1vath_1 ._button_1vath_31{background:none;border:none;color:inherit;font-size:var(--dev-panel-font-size-sm);cursor:pointer;padding:var(--dev-panel-spacing-xs) var(--dev-panel-spacing-sm);border-radius:4px;transition:all .2s ease}._devPanelContainer_1vath_1 ._button_1vath_31:hover{background:var(--dev-panel-highlight-color);color:#333}._devPanelContainer_1vath_1 ._button_1vath_31:active{transform:scale(.95)}._devPanelContainer_1vath_1 ._button_1vath_31>svg{display:block;height:1rem;transition:transform ease .2s}._devPanelContainer_1vath_1 ._button_1vath_31>svg._collapsed_1vath_53{transform:rotate(180deg)}._devPanelContainer_1vath_1 ._button_1vath_31>svg path{fill:currentColor}._content_1vath_60{max-height:calc(var(--dev-panel-max-height) - 48px);overflow-y:auto;background-color:var(--dev-panel-background-color)}._content_1vath_60::-webkit-scrollbar{width:6px}._content_1vath_60::-webkit-scrollbar-track{background:#f1f1f1}._content_1vath_60::-webkit-scrollbar-thumb{background:#c1c1c1;border-radius:3px}._content_1vath_60::-webkit-scrollbar-thumb:hover{background:#a8a8a8}
@@ -1 +1 @@
1
- ._empty_1re8c_1{text-align:center;color:#888;font-size:12px;padding:30px 0}._empty_1re8c_1 code{background:#f8f9fa;padding:2px 4px;border-radius:3px;font-family:Monaco,Menlo,Ubuntu Mono,monospace}@media (prefers-color-scheme: dark){._empty_1re8c_1{color:#b0b0b0}._empty_1re8c_1 code{background:#333;color:#e0e0e0}}
1
+ ._empty_1xo8g_1{text-align:center;color:#888;font-size:12px;padding:30px 0}._empty_1xo8g_1 code{background:#f8f9fa;padding:2px 4px;border-radius:3px}@media (prefers-color-scheme: dark){._empty_1xo8g_1{color:#b0b0b0}._empty_1xo8g_1 code{background:#333;color:#e0e0e0}}
@@ -1 +1 @@
1
- ._input_w2bi0_1{width:100%;height:var(--dev-panel-inputs-height);border:0;border-radius:var(--dev-panel-border-radius);cursor:pointer;padding:0;background-color:transparent;color:var(--dev-panel-text-color-highlight)}._input_w2bi0_1:last-of-type{background-color:var(--dev-panel-input-background-color);padding-left:var(--dev-panel-spacing-xs)}._input_w2bi0_1:focus{outline:none}._input_w2bi0_1:disabled{cursor:not-allowed;opacity:.6}._input_w2bi0_1::placeholder{color:var(--dev-panel-text-color-muted)}
1
+ ._input_161wd_1{width:100%;height:var(--dev-panel-inputs-height);border:0;border-radius:var(--dev-panel-border-radius);cursor:pointer;padding:0;background-color:transparent;color:var(--dev-panel-text-color-highlight)}._input_161wd_1:last-of-type{background-color:var(--dev-panel-input-background-color);padding-left:var(--dev-panel-spacing-xs)}._input_161wd_1:focus{outline:none}._input_161wd_1:disabled{cursor:not-allowed;opacity:.6}._input_161wd_1::placeholder{color:var(--dev-panel-text-color-muted)}._input_161wd_1[type=date]::-webkit-calendar-picker-indicator{color:currentColor;opacity:1;filter:invert(1)}._input_161wd_1[type=date]::-moz-calendar-picker-indicator{color:currentColor;opacity:1}
@@ -0,0 +1 @@
1
+ ._container_1ewrb_1{display:grid;grid-template-columns:1fr auto;gap:var(--dev-panel-spacing-sm);align-items:center;width:100%}._range_1ewrb_9{-webkit-appearance:none;appearance:none;width:100%;height:4px;border-radius:2px;background:var(--dev-panel-input-background-color);outline:none;cursor:pointer;transition:var(--dev-panel-transition)}._range_1ewrb_9::-webkit-slider-thumb{-webkit-appearance:none;appearance:none;width:16px;height:16px;border-radius:50%;background:var(--dev-panel-accent-color);cursor:pointer;border:2px solid var(--dev-panel-background-color);box-shadow:0 1px 3px #0003;transition:var(--dev-panel-transition)}._range_1ewrb_9::-webkit-slider-thumb:hover{transform:scale(1.1);box-shadow:0 2px 6px #0000004d}._range_1ewrb_9::-webkit-slider-thumb:active{transform:scale(.95)}._range_1ewrb_9::-moz-range-thumb{width:16px;height:16px;border-radius:50%;background:var(--dev-panel-accent-color);cursor:pointer;border:2px solid var(--dev-panel-background-color);box-shadow:0 1px 3px #0003;transition:var(--dev-panel-transition)}._range_1ewrb_9::-moz-range-thumb:hover{transform:scale(1.1);box-shadow:0 2px 6px #0000004d}._range_1ewrb_9::-moz-range-thumb:active{transform:scale(.95)}._range_1ewrb_9::-moz-range-track{width:100%;height:4px;border-radius:2px;background:var(--dev-panel-input-background-color);border:none}._range_1ewrb_9::-ms-track{width:100%;height:4px;background:transparent;border-color:transparent;color:transparent}._range_1ewrb_9::-ms-fill-lower{background:var(--dev-panel-accent-color);border-radius:2px}._range_1ewrb_9::-ms-fill-upper{background:var(--dev-panel-input-background-color);border-radius:2px}._range_1ewrb_9::-ms-thumb{width:16px;height:16px;border-radius:50%;background:var(--dev-panel-accent-color);cursor:pointer;border:2px solid var(--dev-panel-background-color);box-shadow:0 1px 3px #0003}._range_1ewrb_9:disabled{cursor:not-allowed;opacity:.6}._range_1ewrb_9:disabled::-webkit-slider-thumb{cursor:not-allowed;background:var(--dev-panel-text-color-muted)}._range_1ewrb_9:disabled::-moz-range-thumb{cursor:not-allowed;background:var(--dev-panel-text-color-muted)}._range_1ewrb_9:disabled::-ms-thumb{cursor:not-allowed;background:var(--dev-panel-text-color-muted)}._range_1ewrb_9:focus{outline:none}._range_1ewrb_9:focus::-webkit-slider-thumb{box-shadow:0 0 0 3px rgba(var(--dev-panel-accent-color-rgb),.3)}._range_1ewrb_9:focus::-moz-range-thumb{box-shadow:0 0 0 3px rgba(var(--dev-panel-accent-color-rgb),.3)}._range_1ewrb_9:focus::-ms-thumb{box-shadow:0 0 0 3px rgba(var(--dev-panel-accent-color-rgb),.3)}._value_1ewrb_116{font-size:var(--dev-panel-font-size-xs);color:var(--dev-panel-text-color);font-weight:500;min-width:2ch;text-align:right;user-select:none}
@@ -1 +1 @@
1
- ._section_19u37_1{padding:var(--dev-panel-spacing-sm);overflow:hidden}._section_19u37_1:last-child{margin-bottom:0}._section_19u37_1 ._header_19u37_8{display:flex;align-items:center;justify-content:space-between;cursor:pointer;transition:background .2s ease}._section_19u37_1 ._header_19u37_8 ._title_19u37_15{font-size:11px;font-weight:600;color:var(--dev-panel-text-color)}._section_19u37_1 ._header_19u37_8 ._toggle_19u37_20{font-size:10px;color:var(--dev-panel-border-color);transition:transform .2s ease}._section_19u37_1 ._content_19u37_25{position:relative;padding:var(--dev-panel-spacing-sm) 0 0 var(--dev-panel-spacing-sm);display:grid;grid-template-columns:100%;gap:var(--dev-panel-spacing-sm);transition:opacity .25s}._section_19u37_1 ._content_19u37_25:after{content:"";position:absolute;left:0;bottom:0;width:2px;height:calc(100% - var(--dev-panel-spacing-sm));background-color:var(--dev-panel-border-color);transform:translate(-50%)}@media (prefers-color-scheme: dark){._section_19u37_1,._section_19u37_1 ._header_19u37_8{border-color:#555}._section_19u37_1 ._header_19u37_8 ._title_19u37_15{color:#e0e0e0}._section_19u37_1 ._toggle_19u37_20{color:#b0b0b0}}
1
+ ._section_1vgul_1{padding:var(--dev-panel-spacing-sm);overflow:hidden}._section_1vgul_1:last-child{margin-bottom:0}._section_1vgul_1 ._header_1vgul_8{display:flex;align-items:center;justify-content:space-between;cursor:pointer;transition:background .2s ease}._section_1vgul_1 ._header_1vgul_8 ._title_1vgul_15{font-size:11px;font-weight:600;color:var(--dev-panel-text-color)}._section_1vgul_1 ._header_1vgul_8 ._toggle_1vgul_20{font-size:10px;color:var(--dev-panel-border-color)}._section_1vgul_1 ._header_1vgul_8 ._toggle_1vgul_20>svg{display:block;height:1rem;transition:transform .2s ease}._section_1vgul_1 ._header_1vgul_8 ._toggle_1vgul_20>svg._collapsed_1vgul_29{transform:rotate(90deg)}._section_1vgul_1 ._header_1vgul_8 ._toggle_1vgul_20>svg path{fill:currentColor}._section_1vgul_1 ._content_1vgul_35{position:relative;padding:var(--dev-panel-spacing-sm) 0 0 var(--dev-panel-spacing-sm);display:grid;grid-template-columns:100%;gap:var(--dev-panel-spacing-sm);transition:opacity .25s}._section_1vgul_1 ._content_1vgul_35:after{content:"";position:absolute;left:0;bottom:0;width:2px;height:calc(100% - var(--dev-panel-spacing-sm));background-color:var(--dev-panel-border-color);transform:translate(-50%)}@media (prefers-color-scheme: dark){._section_1vgul_1,._section_1vgul_1 ._header_1vgul_8{border-color:#555}._section_1vgul_1 ._header_1vgul_8 ._title_1vgul_15{color:#e0e0e0}._section_1vgul_1 ._toggle_1vgul_20{color:#b0b0b0}}
@@ -0,0 +1 @@
1
+ ._line_12cvo_1{width:100%;height:1px;background-color:var(--dev-panel-border-color);margin:var(--dev-panel-spacing-sm) 0;opacity:.3}._space_12cvo_9{height:var(--dev-panel-spacing-md);width:100%}._labelContainer_12cvo_14{display:flex;align-items:center;margin:var(--dev-panel-spacing-md) 0 var(--dev-panel-spacing-sm) 0;position:relative}._labelContainer_12cvo_14:before{content:"";flex:1;height:1px;background-color:var(--dev-panel-border-color);opacity:.3;margin-right:var(--dev-panel-spacing-sm)}._labelContainer_12cvo_14:after{content:"";flex:1;height:1px;background-color:var(--dev-panel-border-color);opacity:.3;margin-left:var(--dev-panel-spacing-sm)}._label_12cvo_14{font-size:var(--dev-panel-font-size-xs);font-weight:600;color:var(--dev-panel-text-color-muted);text-transform:uppercase;letter-spacing:.5px;white-space:nowrap;padding:0 var(--dev-panel-spacing-xs)}
@@ -1 +1 @@
1
- ._controlRendererContainer_eix3y_1{gap:var(--dev-panel-spacing-xs);display:grid}._controlRendererContainer_eix3y_1 ._controlContainer_eix3y_5{gap:var(--dev-panel-spacing-sm);display:grid;height:100%;align-items:center;overflow:hidden;color:var(--dev-panel-text-color)}._controlRendererContainer_eix3y_1 ._controlContainer_eix3y_5:not(._fullWidth_eix3y_13){grid-template-columns:100px 1fr}._controlRendererContainer_eix3y_1 ._controlContainer_eix3y_5 ._controlWrapper_eix3y_16{display:flex;justify-content:flex-end}._controlRendererContainer_eix3y_1 ._controlContainer_eix3y_5 ._label_eix3y_20{text-align:start;font-weight:500;font-size:var(--dev-panel-font-size-xs);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}._controlRendererContainer_eix3y_1 ._description_eix3y_28,._controlRendererContainer_eix3y_1 ._loading_eix3y_29{font-size:var(--dev-panel-font-size-xs);color:var(--dev-panel-text-color-muted)}._controlRendererContainer_eix3y_1 ._description_eix3y_28{text-align:right}
1
+ :root{--dev-panel-font-family: Helvetica, Arial, Sans-Serif;--dev-panel-font-size-xs: 12px;--dev-panel-font-size-sm: 14px;--dev-panel-font-size-md: 16px;--dev-panel-font-size-lg: 18px;--dev-panel-accent-color: #6663fd;--dev-panel-primary-color: #6663fd;--dev-panel-secondary-color: #1c1c1c;--dev-panel-background-color: #3e3d40;--dev-panel-highlight-color: #f0f0f0;--dev-panel-foreground-color: #313133;--dev-panel-border-color: #a1a1a1;--dev-panel-text-color: #e0e0e0;--dev-panel-text-color-muted: #b0b0b0;--dev-panel-input-background-color: #302f32;--dev-panel-text-color-highlight: #fbfffa;--dev-panel-spacing-xs: 4px;--dev-panel-spacing-sm: 8px;--dev-panel-spacing-md: 10px;--dev-panel-spacing-lg: 14px;--dev-panel-shadow: 0 8px 24px rgba(0, 0, 0, .2);--dev-panel-max-width: 320px;--dev-panel-max-height: 80vh;--dev-panel-inputs-height: 24px;--dev-panel-border-radius: 6px;--dev-panel-transition: all .2s cubic-bezier(.4, 0, .2, 1)}
@@ -0,0 +1 @@
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,8 +1,32 @@
1
- import "react/jsx-runtime";
2
- import "react";
3
- import "../../utils/className/className.js";
4
- import "../../utils/store/store.js";
5
- import { ControlRenderer as i } from "./controls/index.js";
1
+ import { jsxs as t, jsx as n } from "react/jsx-runtime";
2
+ import { Suspense as a } from "react";
3
+ import { className as c } from "../../utils/className/className.js";
4
+ import { controls as d } from "./controls/index.js";
5
+ import '../../assets/ControlRenderer.css';const p = "_controlRendererContainer_eix3y_1", _ = "_controlContainer_eix3y_5", m = "_fullWidth_eix3y_13", u = "_controlWrapper_eix3y_16", y = "_label_eix3y_20", f = "_description_eix3y_28", C = "_loading_eix3y_29", r = {
6
+ controlRendererContainer: p,
7
+ controlContainer: _,
8
+ fullWidth: m,
9
+ controlWrapper: u,
10
+ label: y,
11
+ description: f,
12
+ loading: C
13
+ }, h = ["button", "buttonGroup", "separator"];
14
+ function v({ name: i, control: e }) {
15
+ const l = e?.label || i;
16
+ function s() {
17
+ if (!e || !e.type)
18
+ return /* @__PURE__ */ n("div", { className: r.error, children: "Control type is not defined" });
19
+ const o = d[e.type];
20
+ return o ? /* @__PURE__ */ n(a, { fallback: /* @__PURE__ */ n("div", { className: r.loading, children: "Loading control..." }), children: /* @__PURE__ */ n(o, { control: e }) }) : /* @__PURE__ */ n("div", { children: "Unknown control type" });
21
+ }
22
+ return /* @__PURE__ */ t("div", { className: r.controlRendererContainer, children: [
23
+ /* @__PURE__ */ t("div", { ...c(r.controlContainer, { [r.fullWidth]: h.includes(e.type) }), children: [
24
+ e?.type !== "button" && e?.type !== "separator" && /* @__PURE__ */ n("label", { className: r.label, children: l }),
25
+ /* @__PURE__ */ n("div", { className: r.controlWrapper, children: s() })
26
+ ] }),
27
+ e?.description && /* @__PURE__ */ n("span", { className: r.description, children: e.description })
28
+ ] });
29
+ }
6
30
  export {
7
- i as ControlRenderer
31
+ v as ControlRenderer
8
32
  };