@berenjena/react-dev-panel 1.0.1 → 1.0.3

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 (71) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +444 -1
  3. package/dist/assets/ButtonControl.css +1 -1
  4. package/dist/assets/ControlRenderer.css +1 -0
  5. package/dist/assets/DevPanel.css +1 -1
  6. package/dist/assets/EmptyContent.css +1 -1
  7. package/dist/assets/Input.css +1 -1
  8. package/dist/assets/RangeControl.css +1 -0
  9. package/dist/assets/Section.css +1 -1
  10. package/dist/assets/SeparatorControl.css +1 -0
  11. package/dist/assets/index.css +1 -1
  12. package/dist/assets/index2.css +1 -0
  13. package/dist/components/ControlRenderer/ControlRenderer.js +30 -6
  14. package/dist/components/ControlRenderer/controls/BooleanControl/BooleanControl.js +9 -10
  15. package/dist/components/ControlRenderer/controls/ButtonControl/ButtonControl.js +3 -3
  16. package/dist/components/ControlRenderer/controls/DateControl/DateControl.d.ts +29 -0
  17. package/dist/components/ControlRenderer/controls/DateControl/DateControl.js +31 -0
  18. package/dist/components/ControlRenderer/controls/DateControl/index.d.ts +1 -0
  19. package/dist/components/ControlRenderer/controls/DateControl/index.js +4 -0
  20. package/dist/components/ControlRenderer/controls/DateControl/types.d.ts +12 -0
  21. package/dist/components/ControlRenderer/controls/RangeControl/RangeControl.d.ts +30 -0
  22. package/dist/components/ControlRenderer/controls/RangeControl/RangeControl.js +40 -0
  23. package/dist/components/ControlRenderer/controls/RangeControl/index.d.ts +1 -0
  24. package/dist/components/ControlRenderer/controls/RangeControl/index.js +4 -0
  25. package/dist/components/ControlRenderer/controls/RangeControl/types.d.ts +13 -0
  26. package/dist/components/ControlRenderer/controls/SelectControl/SelectControl.js +6 -9
  27. package/dist/components/ControlRenderer/controls/SeparatorControl/SeparatorControl.d.ts +30 -0
  28. package/dist/components/ControlRenderer/controls/SeparatorControl/SeparatorControl.js +14 -0
  29. package/dist/components/ControlRenderer/controls/SeparatorControl/index.d.ts +1 -0
  30. package/dist/components/ControlRenderer/controls/SeparatorControl/index.js +4 -0
  31. package/dist/components/ControlRenderer/controls/SeparatorControl/types.d.ts +10 -0
  32. package/dist/components/ControlRenderer/controls/index.d.ts +3 -1
  33. package/dist/components/ControlRenderer/controls/index.js +13 -39
  34. package/dist/components/ControlRenderer/controls/types.d.ts +6 -0
  35. package/dist/components/ControlRenderer/index.js +1 -1
  36. package/dist/components/DevPanel/DevPanel.js +38 -37
  37. package/dist/components/DevPanel/types.d.ts +7 -4
  38. package/dist/components/EmptyContent/EmptyContent.js +2 -2
  39. package/dist/components/Input/Input.js +3 -3
  40. package/dist/components/Logger/index.d.ts +20 -0
  41. package/dist/components/Logger/index.js +85 -0
  42. package/dist/components/Section/Section.js +17 -16
  43. package/dist/components/index.d.ts +1 -0
  44. package/dist/components/index.js +6 -5
  45. package/dist/hooks/useDevPanel/useDevPanel.js +10 -10
  46. package/dist/hooks/useDragAndDrop/useDragAndDrop.d.ts +1 -1
  47. package/dist/hooks/useHotkeys/types.d.ts +14 -0
  48. package/dist/hooks/useHotkeys/useHotkey.d.ts +1 -2
  49. package/dist/hooks/useHotkeys/useHotkeys.d.ts +1 -2
  50. package/dist/index.d.ts +2 -0
  51. package/dist/index.js +9 -8
  52. package/dist/store/store.d.ts +106 -0
  53. package/dist/store/store.js +239 -0
  54. package/dist/utils/createHotkey/createHotkey.d.ts +1 -1
  55. package/dist/utils/formatHotkey/formatHotkey.d.ts +1 -1
  56. package/dist/utils/getConstrainedPosition/getConstrainedPosition.d.ts +1 -1
  57. package/dist/utils/getCurrentElementPosition/getCurrentElementPosition.d.ts +1 -1
  58. package/dist/utils/getPositionAdjustment/getPositionAdjustment.d.ts +2 -2
  59. package/dist/utils/hasControlChanged/hasControlChanged.js +5 -5
  60. package/dist/utils/index.d.ts +0 -1
  61. package/dist/utils/index.js +16 -23
  62. package/package.json +27 -21
  63. package/dist/assets/SelectControl.css +0 -1
  64. package/dist/components/logger.d.ts +0 -5
  65. package/dist/components/logger.js +0 -7
  66. package/dist/types.d.ts +0 -18
  67. package/dist/utils/store/store.d.ts +0 -40
  68. package/dist/utils/store/store.js +0 -103
  69. package/dist/vite-env.d.ts +0 -1
  70. /package/dist/{utils/store → store}/index.d.ts +0 -0
  71. /package/dist/{utils/store → store}/index.js +0 -0
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,444 @@
1
- # React dev panel
1
+ # React Dev Panel
2
+
3
+ [![npm version](https://badge.fury.io/js/@berenjena%2Freact-dev-panel.svg)](https://badge.fury.io/js/@berenjena%2Freact-dev-panel)
4
+ [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)
5
+ [![Weekly Downloads](https://img.shields.io/npm/dw/@berenjena/react-dev-panel)](https://www.npmjs.com/package/@berenjena/react-dev-panel)
6
+ ![npm package minimized gzipped size](https://img.shields.io/bundlejs/size/%40berenjena%2Freact-dev-panel?label=gzipped)
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
+ - 📱 **Responsive** - Adapts to different screen sizes and can be positioned anywhere
15
+ - ⌨️ **Keyboard Shortcuts** - Quick access with customizable hotkeys
16
+ - 🔄 **State Management** - Built-in state persistence
17
+ - 📖 **TypeScript First** - Full type safety and IntelliSense support
18
+ - 🚀 **Zero Dependencies** - Only requires React (peer dependency)
19
+
20
+ ## 📊 Package Stats
21
+
22
+ - **Bundle Size**: ~35KB (minified)
23
+ - **Total Files**: 142
24
+ - **License**: MIT
25
+
26
+ ## 🆕 What's New
27
+
28
+ ### Recent Updates (v1.0.1+)
29
+
30
+ - **🔄 Zero External Dependencies**: Replaced Zustand with React's built-in `useSyncExternalStore` for state management
31
+ - **📊 Logger Component**: New floating, collapsible logger component for debugging object data in JSON format
32
+ - **⚡ Performance Optimizations**: Selective subscriptions for better re-render performance
33
+ - **🔧 Development Mode Improvements**: Removed development mode checks - panel now works in all environments
34
+ - **📝 Enhanced Documentation**: Comprehensive code documentation and better TypeScript support
35
+
36
+ ## 📦 Installation
37
+
38
+ ```bash
39
+ npm install -D @berenjena/react-dev-panel
40
+ ```
41
+
42
+ ```bash
43
+ yarn add -D @berenjena/react-dev-panel
44
+ ```
45
+
46
+ ```bash
47
+ pnpm add -D @berenjena/react-dev-panel
48
+ ```
49
+
50
+ ## 🚀 Quick Start
51
+
52
+ ### Basic Usage
53
+
54
+ ```tsx
55
+ import { useState } from "react";
56
+ import { useDevPanel, DevPanel } from "@berenjena/react-dev-panel";
57
+
58
+ function App() {
59
+ const [name, setName] = useState("John Doe");
60
+ const [age, setAge] = useState(25);
61
+ const [isActive, setIsActive] = useState(true);
62
+ const [theme, setTheme] = useState("dark");
63
+
64
+ useDevPanel("User Settings", {
65
+ name: {
66
+ type: "text",
67
+ value: name,
68
+ label: "Full Name",
69
+ onChange: setName,
70
+ },
71
+ age: {
72
+ type: "number",
73
+ value: age,
74
+ label: "Age",
75
+ min: 0,
76
+ max: 120,
77
+ onChange: setAge,
78
+ },
79
+ isActive: {
80
+ type: "boolean",
81
+ value: isActive,
82
+ label: "Active User",
83
+ onChange: setIsActive,
84
+ },
85
+ theme: {
86
+ type: "select",
87
+ value: theme,
88
+ label: "Theme",
89
+ options: ["light", "dark", "auto"],
90
+ onChange: setTheme,
91
+ },
92
+ });
93
+
94
+ return (
95
+ <div>
96
+ <h1>Hello, {name}!</h1>
97
+ <p>Age: {age}</p>
98
+ <p>Status: {isActive ? "Active" : "Inactive"}</p>
99
+ <p>Theme: {theme}</p>
100
+
101
+ <DevPanel />
102
+ </div>
103
+ );
104
+ }
105
+ ```
106
+
107
+ ## 🎛️ Control Types
108
+
109
+ ### Text Control
110
+
111
+ ```tsx
112
+ {
113
+ type: 'text',
114
+ value: 'Hello World',
115
+ label: 'Message',
116
+ placeholder: 'Enter message...',
117
+ event: 'onBlur', // or 'onChange'
118
+ onChange: (value: string) => setValue(value),
119
+ }
120
+ ```
121
+
122
+ ### Number Control
123
+
124
+ ```tsx
125
+ {
126
+ type: 'number',
127
+ value: 42,
128
+ label: 'Count',
129
+ min: 0,
130
+ max: 100,
131
+ step: 1,
132
+ onChange: (value: number) => setValue(value),
133
+ }
134
+ ```
135
+
136
+ ### Boolean Control
137
+
138
+ ```tsx
139
+ {
140
+ type: 'boolean',
141
+ value: true,
142
+ label: 'Enable Feature',
143
+ onChange: (value: boolean) => setValue(value),
144
+ }
145
+ ```
146
+
147
+ ### Select Control
148
+
149
+ ```tsx
150
+ {
151
+ type: 'select',
152
+ value: 'option1',
153
+ label: 'Choose Option',
154
+ options: ['option1', 'option2', 'option3'],
155
+ // or with labels:
156
+ options: [
157
+ { label: 'Option 1', value: 'opt1' },
158
+ { label: 'Option 2', value: 'opt2' },
159
+ ],
160
+ onChange: (value: string) => setValue(value),
161
+ }
162
+ ```
163
+
164
+ ### Color Control
165
+
166
+ ```tsx
167
+ {
168
+ type: 'color',
169
+ value: '#ff6200',
170
+ label: 'Brand Color',
171
+ onChange: (value: string) => setValue(value),
172
+ }
173
+ ```
174
+
175
+ ### Range Control
176
+
177
+ ```tsx
178
+ {
179
+ type: 'range',
180
+ value: 50,
181
+ label: 'Volume',
182
+ min: 0,
183
+ max: 100,
184
+ step: 1,
185
+ onChange: (value: number) => setValue(value),
186
+ }
187
+ ```
188
+
189
+ ### Date Control
190
+
191
+ ```tsx
192
+ {
193
+ type: 'date',
194
+ value: '2025-07-26',
195
+ label: 'Start Date',
196
+ min: '2025-01-01',
197
+ max: '2025-12-31',
198
+ onChange: (value: string) => setValue(value),
199
+ }
200
+ ```
201
+
202
+ ### Button Control
203
+
204
+ ```tsx
205
+ {
206
+ type: 'button',
207
+ label: 'Reset Values',
208
+ onClick: () => resetToDefaults(),
209
+ }
210
+ ```
211
+
212
+ ### Button Group Control
213
+
214
+ ```tsx
215
+ {
216
+ type: 'buttonGroup',
217
+ label: 'Actions',
218
+ buttons: [
219
+ { label: 'Save', onClick: handleSave },
220
+ { label: 'Load', onClick: handleLoad },
221
+ { label: 'Reset', onClick: handleReset, disabled: true },
222
+ ],
223
+ }
224
+ ```
225
+
226
+ ### Separator Control
227
+
228
+ ```tsx
229
+ // Line separator
230
+ { type: 'separator' }
231
+
232
+ // Space separator
233
+ { type: 'separator', style: 'space' }
234
+
235
+ // Label separator
236
+ { type: 'separator', style: 'label', label: 'Advanced Settings' }
237
+ ```
238
+
239
+ ## 🎨 Styling and Theming
240
+
241
+ The dev panel uses CSS custom properties for easy theming:
242
+
243
+ ```css
244
+ :root {
245
+ --dev-panel-background-color: #1a1a1a;
246
+ --dev-panel-text-color: #ffffff;
247
+ --dev-panel-text-color-highlight: #ffffff;
248
+ --dev-panel-text-color-muted: #888888;
249
+ --dev-panel-accent-color: #ff6200;
250
+ --dev-panel-border-color: #333333;
251
+ --dev-panel-input-background-color: #2a2a2a;
252
+ --dev-panel-highlight-color: #ff620020;
253
+ --dev-panel-font-size-xs: 11px;
254
+ --dev-panel-font-size-sm: 12px;
255
+ --dev-panel-spacing-xs: 4px;
256
+ --dev-panel-spacing-sm: 8px;
257
+ --dev-panel-spacing-md: 16px;
258
+ --dev-panel-border-radius: 4px;
259
+ --dev-panel-inputs-height: 24px;
260
+ --dev-panel-transition: all 0.2s ease;
261
+ }
262
+ ```
263
+
264
+ ### Custom Panel Positioning
265
+
266
+ ```tsx
267
+ <DevPanel panelTitle="Custom Panel" position={{ x: 100, y: 100 }} defaultExpanded={true} />
268
+ ```
269
+
270
+ ## ⌨️ Keyboard Shortcuts
271
+
272
+ The dev panel supports customizable keyboard shortcuts:
273
+
274
+ ```tsx
275
+ import { useHotkeys } from "@berenjena/react-dev-panel";
276
+
277
+ function App() {
278
+ useHotkeys([
279
+ {
280
+ keys: ["ctrl", "d"],
281
+ action: () => toggleDevPanel(),
282
+ description: "Toggle Dev Panel",
283
+ },
284
+ {
285
+ keys: ["ctrl", "shift", "r"],
286
+ action: () => resetAllValues(),
287
+ description: "Reset All Values",
288
+ },
289
+ ]);
290
+ }
291
+ ```
292
+
293
+ ## 🔧 Advanced Usage
294
+
295
+ ### Multiple Panel Groups
296
+
297
+ ```tsx
298
+ function App() {
299
+ // Group 1: User Settings
300
+ useDevPanel("User", {
301
+ name: { type: "text", value: name, onChange: setName },
302
+ age: { type: "number", value: age, onChange: setAge },
303
+ });
304
+
305
+ // Group 2: App Settings
306
+ useDevPanel("App", {
307
+ theme: { type: "select", value: theme, options: ["light", "dark"], onChange: setTheme },
308
+ debug: { type: "boolean", value: debug, onChange: setDebug },
309
+ });
310
+
311
+ return <DevPanel />;
312
+ }
313
+ ```
314
+
315
+ ### Conditional Controls
316
+
317
+ ```tsx
318
+ useDevPanel("Settings", {
319
+ mode: {
320
+ type: "select",
321
+ value: mode,
322
+ options: ["simple", "advanced"],
323
+ onChange: setMode,
324
+ },
325
+ // Only show advanced settings when mode is 'advanced'
326
+ ...(mode === "advanced" && {
327
+ separator1: { type: "separator", style: "label", label: "Advanced" },
328
+ complexValue: {
329
+ type: "range",
330
+ value: complexValue,
331
+ min: 0,
332
+ max: 1000,
333
+ onChange: setComplexValue,
334
+ },
335
+ }),
336
+ });
337
+ ```
338
+
339
+ ### Event Handling Options
340
+
341
+ ```tsx
342
+ {
343
+ type: 'text',
344
+ value: searchTerm,
345
+ event: 'onChange', // Real-time updates
346
+ onChange: setSearchTerm,
347
+ }
348
+
349
+ {
350
+ type: 'number',
351
+ value: price,
352
+ event: 'onBlur', // Update only when focus is lost
353
+ onChange: setPrice,
354
+ }
355
+ ```
356
+
357
+ ## 📚 API Reference
358
+
359
+ ### `useDevPanel(groupName: string, controls: ControlsGroup)`
360
+
361
+ Registers a group of controls with the dev panel.
362
+
363
+ **Parameters:**
364
+
365
+ - `groupName` - Unique identifier for the control group
366
+ - `controls` - Object containing control definitions
367
+
368
+ ### `<DevPanel />`
369
+
370
+ Main component that renders the development panel.
371
+
372
+ **Props:**
373
+
374
+ - `panelTitle?: string` - Custom title for the panel
375
+ - `position?: { x: number, y: number }` - Initial position
376
+ - `defaultExpanded?: boolean` - Whether the panel starts expanded
377
+
378
+ ### `useHotkeys(hotkeys: Hotkey[])`
379
+
380
+ Registers keyboard shortcuts.
381
+
382
+ **Parameters:**
383
+
384
+ - `hotkeys` - Array of hotkey definitions with keys, action, and description
385
+
386
+ ## 🛠️ Development
387
+
388
+ ### Prerequisites
389
+
390
+ - Node.js 18+
391
+ - React 18+
392
+
393
+ ### Setup
394
+
395
+ ```bash
396
+ git clone https://github.com/Berenjenas/react-dev-panel.git
397
+ cd react-dev-panel
398
+ npm install
399
+ ```
400
+
401
+ ### Available Scripts
402
+
403
+ ```bash
404
+ npm run dev # Start development server
405
+ npm run build # Build for production
406
+ npm run storybook # Start Storybook
407
+ npm run test # Run tests
408
+ npm run lint # Lint code
409
+ ```
410
+
411
+ ## 📖 Storybook
412
+
413
+ Explore all components and controls in our Storybook:
414
+
415
+ ```bash
416
+ npm run storybook
417
+ ```
418
+
419
+ Visit `http://localhost:6006` to see interactive examples and documentation.
420
+
421
+ ## 🤝 Contributing
422
+
423
+ We welcome contributions! Please see our [Contributing Guide](CONTRIBUTING.md) for details.
424
+
425
+ 1. Fork the repository
426
+ 2. Create your feature branch (`git checkout -b feature/amazing-feature`)
427
+ 3. Commit your changes (`git commit -m 'Add some amazing feature'`)
428
+ 4. Push to the branch (`git push origin feature/amazing-feature`)
429
+ 5. Open a Pull Request
430
+
431
+ ## 📄 License
432
+
433
+ This project is licensed under the MIT License - see the [LICENSE](LICENSE) file for details.
434
+
435
+ ## 🔗 Links
436
+
437
+ - [NPM Package](https://www.npmjs.com/package/@berenjena/react-dev-panel)
438
+ - [GitHub Repository](https://github.com/Berenjenas/react-dev-panel)
439
+ - [Bug Reports](https://github.com/Berenjenas/react-dev-panel/issues)
440
+ - [Berenjena](https://berenjena.com.ar)
441
+
442
+ ---
443
+
444
+ Made with ❤️ by the [Berenjena](https://berenjena.com.ar) team
@@ -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
  };
@@ -1,25 +1,24 @@
1
- import { jsxs as c, jsx as a } from "react/jsx-runtime";
2
- import { className as t } from "../../../../utils/className/className.js";
3
- import "../../../../utils/store/store.js";
4
- import '../../../../assets/BooleanControl.css';const l = "_slider_1i71a_25", e = {
1
+ import { jsxs as i, jsx as a } from "react/jsx-runtime";
2
+ import { className as l } from "../../../../utils/className/className.js";
3
+ import '../../../../assets/BooleanControl.css';const t = "_slider_1i71a_25", e = {
5
4
  switch: "_switch_1i71a_1",
6
- slider: l
5
+ slider: t
7
6
  };
8
- function d({ control: s }) {
9
- return /* @__PURE__ */ c("label", { className: e.switch, children: [
7
+ function r({ control: s }) {
8
+ return /* @__PURE__ */ i("label", { className: e.switch, children: [
10
9
  /* @__PURE__ */ a(
11
10
  "input",
12
11
  {
13
12
  type: "checkbox",
14
13
  checked: s.value,
15
14
  disabled: s.disabled,
16
- onChange: (i) => s.onChange(i.target.checked),
15
+ onChange: (c) => s.onChange(c.target.checked),
17
16
  className: e.checkbox
18
17
  }
19
18
  ),
20
- /* @__PURE__ */ a("span", { ...t(e.slider, e.round) })
19
+ /* @__PURE__ */ a("span", { ...l(e.slider, e.round) })
21
20
  ] });
22
21
  }
23
22
  export {
24
- d as BooleanControl
23
+ r as BooleanControl
25
24
  };
@@ -1,10 +1,10 @@
1
1
  import { jsx as n } from "react/jsx-runtime";
2
- import '../../../../assets/ButtonControl.css';const o = "_button_e2m3l_1", e = {
2
+ import '../../../../assets/ButtonControl.css';const o = "_button_1cetu_1", e = {
3
3
  button: o
4
4
  };
5
- function s({ control: t }) {
5
+ function u({ control: t }) {
6
6
  return /* @__PURE__ */ n("button", { onClick: t.onClick, disabled: t.disabled, className: e.button, children: t.label });
7
7
  }
8
8
  export {
9
- s as ButtonControl
9
+ u as ButtonControl
10
10
  };
@@ -0,0 +1,29 @@
1
+ import { DateControlProps } from './types';
2
+ /**
3
+ * Component that renders a date control with configurable event handling
4
+ * @param control - The control to render
5
+ * @param control.event - When to trigger onChange: "onChange" (real-time) or "onBlur" (on focus loss). Defaults to "onBlur"
6
+ * @returns The date control component
7
+ *
8
+ * @example
9
+ * ```typescript
10
+ * // Real-time updates
11
+ * <DateControl control={{
12
+ * type: 'date',
13
+ * value: '2025-07-26',
14
+ * min: '2025-01-01',
15
+ * max: '2025-12-31',
16
+ * event: 'onChange',
17
+ * onChange: (value) => setValue(value)
18
+ * }} />
19
+ *
20
+ * // Updates only when losing focus (default)
21
+ * <DateControl control={{
22
+ * type: 'date',
23
+ * value: '2025-07-26',
24
+ * event: 'onBlur',
25
+ * onChange: (value) => setValue(value)
26
+ * }} />
27
+ * ```
28
+ */
29
+ export declare function DateControl({ control }: DateControlProps): import("react/jsx-runtime").JSX.Element;