@berenjena/react-dev-panel 1.0.4 → 2.1.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 (139) hide show
  1. package/README.md +75 -52
  2. package/dist/assets/index.css +1 -1
  3. package/dist/assets/index10.css +1 -0
  4. package/dist/assets/index11.css +1 -0
  5. package/dist/assets/index12.css +1 -0
  6. package/dist/assets/index13.css +1 -0
  7. package/dist/assets/index2.css +1 -1
  8. package/dist/assets/index3.css +1 -0
  9. package/dist/assets/index4.css +1 -0
  10. package/dist/assets/index5.css +1 -0
  11. package/dist/assets/index6.css +1 -0
  12. package/dist/assets/index7.css +1 -0
  13. package/dist/assets/index8.css +1 -0
  14. package/dist/assets/index9.css +1 -0
  15. package/dist/components/ControlRenderer/controls/BooleanControl/index.d.ts +32 -1
  16. package/dist/components/ControlRenderer/controls/BooleanControl/index.js +24 -2
  17. package/dist/components/ControlRenderer/controls/ButtonControl/index.d.ts +33 -1
  18. package/dist/components/ControlRenderer/controls/ButtonControl/index.js +8 -2
  19. package/dist/components/ControlRenderer/controls/ButtonGroupControl/index.d.ts +37 -1
  20. package/dist/components/ControlRenderer/controls/ButtonGroupControl/index.js +20 -2
  21. package/dist/components/ControlRenderer/controls/ColorControl/index.d.ts +23 -1
  22. package/dist/components/ControlRenderer/controls/ColorControl/index.js +67 -2
  23. package/dist/components/ControlRenderer/controls/ColorControl/types.d.ts +14 -0
  24. package/dist/components/ControlRenderer/controls/DateControl/index.d.ts +41 -1
  25. package/dist/components/ControlRenderer/controls/DateControl/index.js +29 -2
  26. package/dist/components/ControlRenderer/controls/MultiSelectControl/index.d.ts +28 -0
  27. package/dist/components/ControlRenderer/controls/MultiSelectControl/index.js +18 -0
  28. package/dist/components/ControlRenderer/controls/MultiSelectControl/types.d.ts +11 -0
  29. package/dist/components/ControlRenderer/controls/NumberControl/index.d.ts +45 -1
  30. package/dist/components/ControlRenderer/controls/NumberControl/index.js +30 -2
  31. package/dist/components/ControlRenderer/controls/RangeControl/index.d.ts +46 -1
  32. package/dist/components/ControlRenderer/controls/RangeControl/index.js +38 -2
  33. package/dist/components/ControlRenderer/controls/SelectControl/index.d.ts +39 -1
  34. package/dist/components/ControlRenderer/controls/SelectControl/index.js +6 -2
  35. package/dist/components/ControlRenderer/controls/SeparatorControl/index.d.ts +39 -1
  36. package/dist/components/ControlRenderer/controls/SeparatorControl/index.js +12 -2
  37. package/dist/components/ControlRenderer/controls/TextControl/index.d.ts +40 -1
  38. package/dist/components/ControlRenderer/controls/TextControl/index.js +28 -2
  39. package/dist/components/ControlRenderer/controls/index.d.ts +2 -0
  40. package/dist/components/ControlRenderer/controls/index.js +1 -0
  41. package/dist/components/ControlRenderer/controls/types.d.ts +2 -0
  42. package/dist/components/ControlRenderer/index.d.ts +6 -1
  43. package/dist/components/ControlRenderer/index.js +50 -2
  44. package/dist/components/DevPanel/index.d.ts +11 -1
  45. package/dist/components/DevPanel/index.js +69 -2
  46. package/dist/components/DevPanel/types.d.ts +36 -5
  47. package/dist/components/DevPanelPortal/index.d.ts +9 -0
  48. package/dist/components/DevPanelPortal/index.js +17 -0
  49. package/dist/components/EmptyContent/index.d.ts +1 -1
  50. package/dist/components/EmptyContent/index.js +17 -2
  51. package/dist/components/Icon/index.d.ts +16 -0
  52. package/dist/components/Icon/index.js +31 -0
  53. package/dist/components/Input/index.d.ts +1 -1
  54. package/dist/components/Input/index.js +8 -2
  55. package/dist/components/Section/index.d.ts +7 -1
  56. package/dist/components/Section/index.js +23 -2
  57. package/dist/components/Select/index.d.ts +15 -1
  58. package/dist/components/Select/index.js +176 -2
  59. package/dist/components/index.d.ts +3 -2
  60. package/dist/components/index.js +8 -6
  61. package/dist/hooks/useDebounceCallback/index.d.ts +8 -1
  62. package/dist/hooks/useDebounceCallback/index.js +15 -2
  63. package/dist/hooks/useDevPanel/index.d.ts +29 -1
  64. package/dist/hooks/useDevPanel/index.js +22 -2
  65. package/dist/hooks/useDragAndDrop/index.d.ts +20 -1
  66. package/dist/hooks/useDragAndDrop/index.js +53 -2
  67. package/dist/hooks/{useHotkeys/useHotkey.d.ts → useHotKey/index.d.ts} +1 -1
  68. package/dist/hooks/{useHotkeys/useHotkey.js → useHotKey/index.js} +1 -1
  69. package/dist/hooks/useHotkeys/index.d.ts +37 -2
  70. package/dist/hooks/useHotkeys/index.js +29 -4
  71. package/dist/index.d.ts +0 -1
  72. package/dist/index.js +2 -8
  73. package/dist/managers/DevPanelManager.d.ts +85 -0
  74. package/dist/managers/DevPanelManager.js +119 -0
  75. package/dist/store/SectionsStore.js +112 -5
  76. package/dist/store/UIStore.d.ts +78 -2
  77. package/dist/store/UIStore.js +176 -9
  78. package/dist/utils/getPositionAdjustment/getPositionAdjustment.d.ts +3 -2
  79. package/dist/utils/getPositionAdjustment/getPositionAdjustment.js +1 -4
  80. package/package.json +53 -30
  81. package/dist/UIStore-CQdr4U-2.js +0 -227
  82. package/dist/assets/BooleanControl.css +0 -1
  83. package/dist/assets/ButtonControl.css +0 -1
  84. package/dist/assets/ButtonGroupControl.css +0 -1
  85. package/dist/assets/ColorControl.css +0 -1
  86. package/dist/assets/ControlRenderer.css +0 -1
  87. package/dist/assets/DevPanel.css +0 -1
  88. package/dist/assets/EmptyContent.css +0 -1
  89. package/dist/assets/Input.css +0 -1
  90. package/dist/assets/RangeControl.css +0 -1
  91. package/dist/assets/Section.css +0 -1
  92. package/dist/assets/Select.css +0 -1
  93. package/dist/assets/SeparatorControl.css +0 -1
  94. package/dist/components/ControlRenderer/ControlRenderer.d.ts +0 -6
  95. package/dist/components/ControlRenderer/ControlRenderer.js +0 -32
  96. package/dist/components/ControlRenderer/controls/BooleanControl/BooleanControl.d.ts +0 -16
  97. package/dist/components/ControlRenderer/controls/BooleanControl/BooleanControl.js +0 -24
  98. package/dist/components/ControlRenderer/controls/ButtonControl/ButtonControl.d.ts +0 -16
  99. package/dist/components/ControlRenderer/controls/ButtonControl/ButtonControl.js +0 -10
  100. package/dist/components/ControlRenderer/controls/ButtonGroupControl/ButtonGroupControl.d.ts +0 -2
  101. package/dist/components/ControlRenderer/controls/ButtonGroupControl/ButtonGroupControl.js +0 -22
  102. package/dist/components/ControlRenderer/controls/ColorControl/ColorControl.d.ts +0 -16
  103. package/dist/components/ControlRenderer/controls/ColorControl/ColorControl.js +0 -27
  104. package/dist/components/ControlRenderer/controls/DateControl/DateControl.d.ts +0 -29
  105. package/dist/components/ControlRenderer/controls/DateControl/DateControl.js +0 -31
  106. package/dist/components/ControlRenderer/controls/NumberControl/NumberControl.d.ts +0 -30
  107. package/dist/components/ControlRenderer/controls/NumberControl/NumberControl.js +0 -32
  108. package/dist/components/ControlRenderer/controls/RangeControl/RangeControl.d.ts +0 -30
  109. package/dist/components/ControlRenderer/controls/RangeControl/RangeControl.js +0 -40
  110. package/dist/components/ControlRenderer/controls/SelectControl/SelectControl.d.ts +0 -15
  111. package/dist/components/ControlRenderer/controls/SelectControl/SelectControl.js +0 -11
  112. package/dist/components/ControlRenderer/controls/SeparatorControl/SeparatorControl.d.ts +0 -30
  113. package/dist/components/ControlRenderer/controls/SeparatorControl/SeparatorControl.js +0 -14
  114. package/dist/components/ControlRenderer/controls/TextControl/TextControl.d.ts +0 -29
  115. package/dist/components/ControlRenderer/controls/TextControl/TextControl.js +0 -30
  116. package/dist/components/DevPanel/DevPanel.d.ts +0 -11
  117. package/dist/components/DevPanel/DevPanel.js +0 -67
  118. package/dist/components/EmptyContent/EmptyContent.d.ts +0 -1
  119. package/dist/components/EmptyContent/EmptyContent.js +0 -18
  120. package/dist/components/Input/Input.d.ts +0 -1
  121. package/dist/components/Input/Input.js +0 -10
  122. package/dist/components/Logger/index.d.ts +0 -20
  123. package/dist/components/Logger/index.js +0 -85
  124. package/dist/components/Section/Section.d.ts +0 -7
  125. package/dist/components/Section/Section.js +0 -24
  126. package/dist/components/Select/Select.d.ts +0 -1
  127. package/dist/components/Select/Select.js +0 -10
  128. package/dist/hooks/useDebounceCallback/useDebounceCallback.d.ts +0 -8
  129. package/dist/hooks/useDebounceCallback/useDebounceCallback.js +0 -17
  130. package/dist/hooks/useDevPanel/useDevPanel.d.ts +0 -24
  131. package/dist/hooks/useDevPanel/useDevPanel.js +0 -15
  132. package/dist/hooks/useDragAndDrop/useDragAndDrop.d.ts +0 -16
  133. package/dist/hooks/useDragAndDrop/useDragAndDrop.js +0 -55
  134. package/dist/hooks/useHotkeys/useHotkeys.d.ts +0 -37
  135. package/dist/hooks/useHotkeys/useHotkeys.js +0 -31
  136. package/dist/store/index.d.ts +0 -3
  137. package/dist/store/index.js +0 -13
  138. package/dist/utils/index.d.ts +0 -9
  139. package/dist/utils/index.js +0 -20
@@ -11,8 +11,10 @@ import { DevPanelUIState, Position } from '../components/DevPanel/types';
11
11
  * const {
12
12
  * isVisible,
13
13
  * position,
14
+ * currentTheme,
14
15
  * setVisible,
15
- * setPosition
16
+ * setPosition,
17
+ * setTheme
16
18
  * } = useDevPanelUI();
17
19
  * ```
18
20
  */
@@ -20,6 +22,9 @@ export declare function useDevPanelUI(): DevPanelUIState & {
20
22
  setVisible: (visible: boolean) => void;
21
23
  setCollapsed: (collapsed: boolean) => void;
22
24
  setPosition: (position: Position) => void;
25
+ setTheme: (theme: string) => void;
26
+ resetTheme: () => void;
27
+ getCurrentTheme: () => string;
23
28
  reset: () => void;
24
29
  };
25
30
  /**
@@ -59,6 +64,46 @@ export declare function useDevPanelCollapsed(): boolean;
59
64
  * ```
60
65
  */
61
66
  export declare function useDevPanelPosition(): Position;
67
+ /**
68
+ * React hook that subscribes only to the current theme state.
69
+ * Optimized for components that only need to know the current theme.
70
+ *
71
+ * @returns String indicating the current theme name
72
+ *
73
+ * @example
74
+ * ```typescript
75
+ * const currentTheme = useCurrentTheme();
76
+ * console.log(`Current theme is: ${currentTheme}`);
77
+ * ```
78
+ */
79
+ export declare function useCurrentTheme(): string;
80
+ /**
81
+ * React hook that provides access to the complete dev panel theme state and actions.
82
+ * Uses useSyncExternalStore for optimal performance and React 18 compatibility.
83
+ *
84
+ * @returns Object containing the current theme state and all available theme actions
85
+ *
86
+ * @example
87
+ * ```typescript
88
+ * const {
89
+ * currentTheme,
90
+ * setTheme,
91
+ * resetTheme
92
+ * } = useDevPanelTheme();
93
+ *
94
+ * // Set a specific theme
95
+ * setTheme("dark");
96
+ *
97
+ * // Reset to auto theme
98
+ * resetTheme();
99
+ * ```
100
+ */
101
+ export declare function useDevPanelTheme(): {
102
+ currentTheme: string;
103
+ setTheme: (theme: string) => void;
104
+ resetTheme: () => void;
105
+ getCurrentTheme: () => string;
106
+ };
62
107
  /**
63
108
  * React hook that provides access to all dev panel UI actions without subscribing to state.
64
109
  * Ideal for components that only need to trigger UI actions without rendering on state changes.
@@ -67,7 +112,7 @@ export declare function useDevPanelPosition(): Position;
67
112
  *
68
113
  * @example
69
114
  * ```typescript
70
- * const { setVisible, setPosition, reset } = useDevPanelUIActions();
115
+ * const { setVisible, setPosition, setTheme, reset } = useDevPanelUIActions();
71
116
  *
72
117
  * // Toggle panel visibility
73
118
  * setVisible(true);
@@ -75,6 +120,9 @@ export declare function useDevPanelPosition(): Position;
75
120
  * // Update position
76
121
  * setPosition({ x: 100, y: 100 });
77
122
  *
123
+ * // Set theme
124
+ * setTheme("dark");
125
+ *
78
126
  * // Reset UI state
79
127
  * reset();
80
128
  * ```
@@ -83,6 +131,34 @@ export declare function useDevPanelUIActions(): {
83
131
  setVisible: (visible: boolean) => void;
84
132
  setCollapsed: (collapsed: boolean) => void;
85
133
  setPosition: (position: Position) => void;
134
+ setTheme: (theme: string) => void;
135
+ resetTheme: () => void;
136
+ getCurrentTheme: () => string;
86
137
  reset: () => void;
87
138
  };
139
+ /**
140
+ * React hook that provides access to all dev panel theme actions without subscribing to state.
141
+ * Ideal for components that only need to trigger theme actions without rendering on state changes.
142
+ *
143
+ * @returns Object containing all available theme actions
144
+ *
145
+ * @example
146
+ * ```typescript
147
+ * const { setTheme, resetTheme } = useDevPanelThemeActions();
148
+ *
149
+ * // Switch to dark theme
150
+ * setTheme("dark");
151
+ *
152
+ * // Switch to neon theme
153
+ * setTheme("neon");
154
+ *
155
+ * // Reset to auto theme
156
+ * resetTheme();
157
+ * ```
158
+ */
159
+ export declare function useDevPanelThemeActions(): {
160
+ setTheme: (theme: string) => void;
161
+ resetTheme: () => void;
162
+ getCurrentTheme: () => string;
163
+ };
88
164
  export declare const useDevPanelStore: typeof useDevPanelUI;
@@ -1,11 +1,178 @@
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 r } from "react";
2
+ import { BaseStoreService as o } from "./BaseStoreService.js";
3
+ const u = "dev-panel-ui-storage", h = { x: 20, y: 20 }, n = {
4
+ isVisible: !1,
5
+ isCollapsed: !1,
6
+ position: h,
7
+ currentTheme: "auto"
8
+ };
9
+ class a extends o {
10
+ /**
11
+ * Creates a new DevPanelUIService instance and loads persisted state from localStorage.
12
+ */
13
+ constructor() {
14
+ super(u, n, !0, !0), this.applyTheme(this.getSnapshot().currentTheme);
15
+ }
16
+ /**
17
+ * Transforms current state to persistable format.
18
+ *
19
+ * @param state - The current UI state
20
+ * @returns The state in persistable format
21
+ * @protected
22
+ */
23
+ toPersistableState(t) {
24
+ return {
25
+ isVisible: t.isVisible,
26
+ isCollapsed: t.isCollapsed,
27
+ position: t.position,
28
+ currentTheme: t.currentTheme
29
+ };
30
+ }
31
+ /**
32
+ * Transforms persisted state back to current state format.
33
+ *
34
+ * @param persistedState - The persisted UI state
35
+ * @param defaultState - The default state to fall back to
36
+ * @returns The state in current format
37
+ * @protected
38
+ */
39
+ fromPersistedState(t, s) {
40
+ return {
41
+ ...s,
42
+ ...t
43
+ };
44
+ }
45
+ /**
46
+ * Gets the service name for error messages.
47
+ *
48
+ * @returns The service name
49
+ * @protected
50
+ */
51
+ getServiceName() {
52
+ return "UI";
53
+ }
54
+ /**
55
+ * Applies the theme to the document root element using data attributes.
56
+ *
57
+ * @param theme - Theme name to apply
58
+ * @private
59
+ */
60
+ applyTheme(t) {
61
+ const s = document.documentElement;
62
+ t === "auto" || t === "" ? s.removeAttribute("data-dev-panel-theme") : s.setAttribute("data-dev-panel-theme", t);
63
+ }
64
+ /**
65
+ * Sets the visibility state of the dev panel.
66
+ *
67
+ * @param visible - Whether the panel should be visible
68
+ */
69
+ setVisible = (t) => {
70
+ this.setState((s) => ({ ...s, isVisible: t }));
71
+ };
72
+ /**
73
+ * Sets the collapsed state of the dev panel.
74
+ *
75
+ * @param collapsed - Whether the panel should be collapsed
76
+ */
77
+ setCollapsed = (t) => {
78
+ this.setState((s) => ({ ...s, isCollapsed: t }));
79
+ };
80
+ /**
81
+ * Updates the position of the dev panel.
82
+ *
83
+ * @param position - New position coordinates {x, y}
84
+ */
85
+ setPosition = (t) => {
86
+ this.setState((s) => ({ ...s, position: t }));
87
+ };
88
+ /**
89
+ * Sets the current theme and applies it to the document.
90
+ *
91
+ * @param theme - Theme name to set
92
+ */
93
+ setTheme = (t) => {
94
+ this.setState((s) => ({ ...s, currentTheme: t })), this.applyTheme(t);
95
+ };
96
+ /**
97
+ * Resets the theme to the default "auto" theme.
98
+ */
99
+ resetTheme = () => {
100
+ this.setTheme("auto");
101
+ };
102
+ /**
103
+ * Gets the current theme name.
104
+ *
105
+ * @returns The current theme name
106
+ */
107
+ getCurrentTheme = () => this.getSnapshot().currentTheme;
108
+ /**
109
+ * Resets the dev panel UI to its default state.
110
+ * Resets position, theme, and sets visibility and collapse to false.
111
+ */
112
+ reset = () => {
113
+ this.setState(() => ({ ...n })), this.applyTheme(n.currentTheme);
114
+ };
115
+ }
116
+ const e = new a();
117
+ function l() {
118
+ return {
119
+ ...r(e.subscribe, e.getSnapshot),
120
+ setVisible: e.setVisible,
121
+ setCollapsed: e.setCollapsed,
122
+ setPosition: e.setPosition,
123
+ setTheme: e.setTheme,
124
+ resetTheme: e.resetTheme,
125
+ getCurrentTheme: e.getCurrentTheme,
126
+ reset: e.reset
127
+ };
128
+ }
129
+ function c() {
130
+ return r(e.subscribe, () => e.getSnapshot().isVisible);
131
+ }
132
+ function p() {
133
+ return r(e.subscribe, () => e.getSnapshot().isCollapsed);
134
+ }
135
+ function b() {
136
+ return r(e.subscribe, () => e.getSnapshot().position);
137
+ }
138
+ function S() {
139
+ return r(e.subscribe, () => e.getSnapshot().currentTheme);
140
+ }
141
+ function d() {
142
+ return {
143
+ currentTheme: r(e.subscribe, () => e.getSnapshot().currentTheme),
144
+ setTheme: e.setTheme,
145
+ resetTheme: e.resetTheme,
146
+ getCurrentTheme: e.getCurrentTheme
147
+ };
148
+ }
149
+ function C() {
150
+ return {
151
+ setVisible: e.setVisible,
152
+ setCollapsed: e.setCollapsed,
153
+ setPosition: e.setPosition,
154
+ setTheme: e.setTheme,
155
+ resetTheme: e.resetTheme,
156
+ getCurrentTheme: e.getCurrentTheme,
157
+ reset: e.reset
158
+ };
159
+ }
160
+ function g() {
161
+ return {
162
+ setTheme: e.setTheme,
163
+ resetTheme: e.resetTheme,
164
+ getCurrentTheme: e.getCurrentTheme
165
+ };
166
+ }
167
+ const P = l;
4
168
  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
169
+ S as useCurrentTheme,
170
+ p as useDevPanelCollapsed,
171
+ b as useDevPanelPosition,
172
+ P as useDevPanelStore,
173
+ d as useDevPanelTheme,
174
+ g as useDevPanelThemeActions,
175
+ l as useDevPanelUI,
176
+ C as useDevPanelUIActions,
177
+ c as useDevPanelVisible
11
178
  };
@@ -1,10 +1,11 @@
1
+ import { Position } from '../../components/DevPanel/types';
1
2
  /**
2
3
  * Checks if a position adjustment is needed after window resize
3
4
  * @param element - The HTML element to check
4
5
  * @returns Object containing the current position, constrained position, and whether adjustment is needed
5
6
  */
6
7
  export declare function getPositionAdjustment(element: HTMLElement): {
7
- currentPosition: import('../../components/DevPanel/types').Position;
8
- constrainedPosition: import('../../components/DevPanel/types').Position;
8
+ currentPosition: Position;
9
+ constrainedPosition: Position;
9
10
  needsAdjustment: boolean;
10
11
  };
@@ -1,10 +1,7 @@
1
1
  import { getConstrainedPosition as r } from "../getConstrainedPosition/getConstrainedPosition.js";
2
2
  import { getCurrentElementPosition as s } from "../getCurrentElementPosition/getCurrentElementPosition.js";
3
3
  function m(n) {
4
- const t = s(n), o = r(
5
- t,
6
- n
7
- ), i = o.x !== t.x || o.y !== t.y;
4
+ const t = s(n), o = r(t, n), i = o.x !== t.x || o.y !== t.y;
8
5
  return {
9
6
  currentPosition: t,
10
7
  constrainedPosition: o,
package/package.json CHANGED
@@ -1,23 +1,26 @@
1
1
  {
2
2
  "private": false,
3
- "version": "1.0.4",
4
- "type": "module",
5
- "module": "./dist/index.js",
3
+ "version": "2.1.0",
4
+ "license": "MIT",
6
5
  "name": "@berenjena/react-dev-panel",
7
6
  "description": "A React development panel with various tools and utilities.",
8
- "keywords": [
9
- "react",
10
- "development",
11
- "panel",
12
- "tools",
13
- "utilities"
14
- ],
7
+ "type": "module",
15
8
  "homepage": "https://github.com/Berenjenas/react-dev-panel",
16
9
  "bugs": "https://github.com/Berenjenas/react-dev-panel/issues",
17
10
  "repository": {
18
11
  "type": "git",
19
12
  "url": "git+https://github.com/Berenjenas/react-dev-panel.git"
20
13
  },
14
+ "keywords": [
15
+ "react",
16
+ "development",
17
+ "panel",
18
+ "tools",
19
+ "utilities",
20
+ "gui",
21
+ "devtools"
22
+ ],
23
+ "module": "./dist/index.js",
21
24
  "exports": {
22
25
  ".": {
23
26
  "import": "./dist/index.js",
@@ -31,7 +34,6 @@
31
34
  "dist"
32
35
  ],
33
36
  "types": "./dist/index.d.ts",
34
- "license": "MIT",
35
37
  "contributors": [
36
38
  {
37
39
  "name": "David Gallegos",
@@ -55,49 +57,70 @@
55
57
  "lint:fix": "eslint . --ext ts,tsx --fix",
56
58
  "format": "prettier --check .",
57
59
  "format:fix": "prettier --write .",
58
- "stylelint": "stylelint **/*.css",
59
- "stylelint:fix": "stylelint **/*.css --fix",
60
+ "stylelint": "stylelint **/*.scss",
61
+ "stylelint:fix": "stylelint **/*.scss --fix",
60
62
  "storybook": "storybook dev -p 6006",
61
63
  "build-storybook": "storybook build --output-dir docs",
62
64
  "deploy-storybook": "npm run build-storybook && gh-pages -d docs",
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
+ "prepare": "npx husky",
73
+ "commit": "git-cz"
74
+ },
75
+ "publishConfig": {
76
+ "access": "public"
67
77
  },
68
78
  "peerDependencies": {
69
79
  "react": ">=18.0.0",
70
80
  "react-dom": ">=18.0.0"
71
81
  },
72
82
  "devDependencies": {
73
- "@eslint/js": "^9.30.1",
83
+ "@changesets/cli": "^2.29.5",
84
+ "@commitlint/cli": "^19.8.1",
85
+ "@commitlint/config-conventional": "^19.8.1",
86
+ "@commitlint/cz-commitlint": "^19.8.1",
87
+ "@eslint/js": "^9.32.0",
74
88
  "@rollup/plugin-terser": "^0.4.4",
75
- "@storybook/addon-docs": "^9.0.17",
76
- "@storybook/react-vite": "^9.0.17",
77
- "@types/node": "^24.0.15",
78
- "@types/react": "^19.1.8",
79
- "@types/react-dom": "^19.1.6",
80
- "@vitejs/plugin-react-swc": "^3.10.2",
89
+ "@storybook/addon-docs": "^9.1.0",
90
+ "@storybook/react-vite": "^9.1.0",
91
+ "@types/node": "^24.1.0",
92
+ "@types/react": "^19.1.9",
93
+ "@types/react-dom": "^19.1.7",
94
+ "@vitejs/plugin-react-swc": "^3.11.0",
81
95
  "@vitest/coverage-v8": "^3.2.4",
82
96
  "@vitest/ui": "^3.2.4",
83
- "eslint": "^9.30.1",
97
+ "commitizen": "^4.3.1",
98
+ "eslint": "^9.32.0",
99
+ "eslint-plugin-react": "^7.37.5",
84
100
  "eslint-plugin-react-hooks": "^5.2.0",
85
- "eslint-plugin-react-refresh": "^0.4.20",
86
101
  "eslint-plugin-simple-import-sort": "^12.1.1",
87
- "eslint-plugin-storybook": "^9.0.17",
102
+ "eslint-plugin-storybook": "^9.1.0",
88
103
  "gh-pages": "^6.3.0",
89
104
  "glob": "^11.0.3",
90
105
  "globals": "^16.3.0",
91
106
  "happy-dom": "^18.0.1",
92
- "react": "^19.1.0",
93
- "react-dom": "^19.1.0",
107
+ "husky": "^9.1.7",
108
+ "inquirer": "^9.3.7",
109
+ "react": "^19.1.1",
110
+ "react-dom": "^19.1.1",
94
111
  "sass-embedded": "^1.89.2",
95
- "storybook": "^9.0.17",
96
- "typescript": "~5.8.3",
97
- "typescript-eslint": "^8.35.1",
98
- "vite": "^7.0.4",
112
+ "storybook": "^9.1.0",
113
+ "stylelint": "^16.23.0",
114
+ "typescript": "^5.9.2",
115
+ "typescript-eslint": "^8.39.0",
116
+ "vite": "^7.0.6",
99
117
  "vite-plugin-dts": "^4.5.4",
100
118
  "vite-plugin-lib-inject-css": "^2.2.2",
101
119
  "vitest": "^3.2.4"
120
+ },
121
+ "config": {
122
+ "commitizen": {
123
+ "path": "@commitlint/cz-commitlint"
124
+ }
102
125
  }
103
126
  }
@@ -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
- ._switch_1i71a_1{--width: 42px;--height: 20px;--thumb-size: 12px;--thumb-offset: 3px;--thumb-checked-offset: calc(var(--width) - var(--thumb-size) - calc(var(--thumb-offset) * 2) - calc(var(--thumb-offset) / 2));--track-background: var(--dev-panel-input-background-color);--track-border: color-mix(in srgb, var(--dev-panel-border-color) 50%, transparent);--thumb-background: var(--dev-panel-text-color);--thumb-checked-background: white;--focus-ring-color: var(--dev-panel-accent-color);position:relative;display:inline-block;width:var(--width);height:var(--height)}._switch_1i71a_1 input{position:absolute;opacity:0;width:0;height:0;margin:0;pointer-events:none}._switch_1i71a_1 input:checked+._slider_1i71a_25{background-color:var(--focus-ring-color)}._switch_1i71a_1 input:checked+._slider_1i71a_25:before{transform:translate(var(--thumb-checked-offset));background-color:var(--thumb-checked-background)}._switch_1i71a_1 input:focus+._slider_1i71a_25{box-shadow:none;outline:none}._switch_1i71a_1 input:disabled+._slider_1i71a_25{opacity:.5;cursor:not-allowed}._switch_1i71a_1 input:disabled+._slider_1i71a_25:before{opacity:.7}._switch_1i71a_1 ._slider_1i71a_25{position:absolute;inset:0;background-color:var(--dev-panel-input-background-color);border:1px solid color-mix(in srgb,var(--dev-panel-border-color) 20%,transparent);border-radius:var(--dev-panel-border-radius);cursor:pointer;transition:var(--dev-panel-transition)}._switch_1i71a_1 ._slider_1i71a_25:before{content:"";position:absolute;top:var(--thumb-offset);left:var(--thumb-offset);width:var(--thumb-size);height:var(--thumb-size);background-color:var(--thumb-background);border-radius:calc(var(--dev-panel-border-radius) - 2px);transition:var(--dev-panel-transition);transform:scale(.95)}._switch_1i71a_1 ._slider_1i71a_25:hover{border-color:var(--dev-panel-accent-color)}._switch_1i71a_1 ._slider_1i71a_25:hover:before{box-shadow:0 2px 6px #00000026}