namirasoft-site-react 1.4.557 → 1.4.558

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.
@@ -2,6 +2,7 @@ import { Component, MouseEvent as ReactMouseEvent, ReactNode } from "react";
2
2
  export interface NSSplitterProps {
3
3
  master_content?: ReactNode;
4
4
  detail_content?: ReactNode;
5
+ storage_key?: string;
5
6
  }
6
7
  export declare class NSSplitter extends Component<NSSplitterProps> {
7
8
  private SplitterRef;
@@ -11,12 +12,16 @@ export declare class NSSplitter extends Component<NSSplitterProps> {
11
12
  private DragOffset;
12
13
  private HasUserResized;
13
14
  private MediaQuery;
15
+ private Storage;
14
16
  constructor(props: NSSplitterProps);
15
17
  componentDidMount(): void;
16
18
  componentDidUpdate(prevProps: NSSplitterProps): void;
17
19
  componentWillUnmount(): void;
18
20
  handleViewportChange(): void;
19
21
  updateLayout(force: boolean): void;
22
+ applyHeight(height: number): void;
23
+ loadStoredHeight(): number | null;
24
+ saveStoredHeight(height: number): void;
20
25
  adjustMasterToViewport(): void;
21
26
  handleMouseDown(event: ReactMouseEvent): void;
22
27
  handleMouseUp(): void;
@@ -1,5 +1,6 @@
1
1
  import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
2
2
  import { Component, createRef } from "react";
3
+ import { IStorageLocal } from "namirasoft-core";
3
4
  import Styles from "./NSSplitter.module.css";
4
5
  const MIN_MASTER_HEIGHT = 238;
5
6
  export class NSSplitter extends Component {
@@ -12,6 +13,7 @@ export class NSSplitter extends Component {
12
13
  this.DragOffset = 0;
13
14
  this.HasUserResized = false;
14
15
  this.MediaQuery = null;
16
+ this.Storage = new IStorageLocal();
15
17
  this.handleMouseDown = this.handleMouseDown.bind(this);
16
18
  this.handleMouseUp = this.handleMouseUp.bind(this);
17
19
  this.handleMouseMove = this.handleMouseMove.bind(this);
@@ -21,6 +23,8 @@ export class NSSplitter extends Component {
21
23
  this.MediaQuery = window.matchMedia("(min-width: 992px)");
22
24
  this.MediaQuery.addEventListener("change", this.handleViewportChange);
23
25
  window.addEventListener("resize", this.handleViewportChange);
26
+ if (this.loadStoredHeight() !== null)
27
+ this.HasUserResized = true;
24
28
  this.updateLayout(true);
25
29
  }
26
30
  componentDidUpdate(prevProps) {
@@ -48,7 +52,10 @@ export class NSSplitter extends Component {
48
52
  if (!master_el || !this.MediaQuery)
49
53
  return;
50
54
  if (this.MediaQuery.matches && this.props.detail_content) {
51
- if (force || !this.HasUserResized)
55
+ let stored = this.loadStoredHeight();
56
+ if (stored !== null)
57
+ this.applyHeight(Math.max(MIN_MASTER_HEIGHT, stored));
58
+ else if (force || !this.HasUserResized)
52
59
  this.adjustMasterToViewport();
53
60
  }
54
61
  else {
@@ -56,6 +63,31 @@ export class NSSplitter extends Component {
56
63
  master_el.style.minHeight = "";
57
64
  }
58
65
  }
66
+ applyHeight(height) {
67
+ let master_el = this.MasterPaneRef.current;
68
+ if (master_el) {
69
+ master_el.style.height = height + "px";
70
+ master_el.style.minHeight = height + "px";
71
+ }
72
+ }
73
+ loadStoredHeight() {
74
+ let key = this.props.storage_key;
75
+ if (!key)
76
+ return null;
77
+ let raw = this.Storage.get(key, "");
78
+ if (!raw)
79
+ return null;
80
+ let value = parseInt(raw, 10);
81
+ if (isNaN(value))
82
+ return null;
83
+ return value;
84
+ }
85
+ saveStoredHeight(height) {
86
+ let key = this.props.storage_key;
87
+ if (!key)
88
+ return;
89
+ this.Storage.set(key, String(height));
90
+ }
59
91
  adjustMasterToViewport() {
60
92
  var _a, _b;
61
93
  let master_el = this.MasterPaneRef.current;
@@ -64,8 +96,7 @@ export class NSSplitter extends Component {
64
96
  let master_top = master_el.getBoundingClientRect().top;
65
97
  let gutter_height = (_b = (_a = this.GutterRef.current) === null || _a === void 0 ? void 0 : _a.offsetHeight) !== null && _b !== void 0 ? _b : 0;
66
98
  let height = Math.max(MIN_MASTER_HEIGHT, window.innerHeight - master_top - gutter_height);
67
- master_el.style.height = height + "px";
68
- master_el.style.minHeight = height + "px";
99
+ this.applyHeight(height);
69
100
  }
70
101
  handleMouseDown(event) {
71
102
  var _a;
@@ -82,6 +113,9 @@ export class NSSplitter extends Component {
82
113
  window.removeEventListener("mousemove", this.handleMouseMove);
83
114
  window.removeEventListener("mouseup", this.handleMouseUp);
84
115
  (_a = this.SplitterRef.current) === null || _a === void 0 ? void 0 : _a.classList.remove(Styles.ns_splitter_resizing);
116
+ let master_el = this.MasterPaneRef.current;
117
+ if (master_el)
118
+ this.saveStoredHeight(master_el.offsetHeight);
85
119
  }
86
120
  handleMouseMove(event) {
87
121
  if (this.AnimationFrame)
@@ -93,8 +127,7 @@ export class NSSplitter extends Component {
93
127
  return;
94
128
  let master_top = master_el.getBoundingClientRect().top;
95
129
  let height = Math.max(MIN_MASTER_HEIGHT, event.clientY - this.DragOffset - master_top);
96
- master_el.style.height = height + "px";
97
- master_el.style.minHeight = height + "px";
130
+ this.applyHeight(height);
98
131
  this.HasUserResized = true;
99
132
  });
100
133
  }
@@ -1 +1 @@
1
- {"version":3,"file":"NSSplitter.js","sourceRoot":"","sources":["../../src/components/NSSplitter.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"NSSplitter.js","sourceRoot":"","sources":["../../src/components/NSSplitter.tsx"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -8,7 +8,7 @@
8
8
  "framework": "npm",
9
9
  "application": "package",
10
10
  "private": false,
11
- "version": "1.4.557",
11
+ "version": "1.4.558",
12
12
  "author": "Amir Abolhasani",
13
13
  "license": "MIT",
14
14
  "main": "./dist/main.js",
@@ -24,7 +24,7 @@
24
24
  "@ant-design/icons": "^6.2.5",
25
25
  "@babel/plugin-proposal-private-property-in-object": "^7.21.11",
26
26
  "@babel/plugin-transform-private-property-in-object": "^7.29.7",
27
- "@types/node": "^25.9.3",
27
+ "@types/node": "^26.0.0",
28
28
  "@types/react": "^18.3.12",
29
29
  "@types/react-bootstrap": "^1.1.0",
30
30
  "@types/react-dom": "^18.3.1",
@@ -1,4 +1,5 @@
1
1
  import { Component, createRef, MouseEvent as ReactMouseEvent, ReactNode } from "react";
2
+ import { IStorageLocal } from "namirasoft-core";
2
3
  import Styles from "./NSSplitter.module.css";
3
4
 
4
5
  const MIN_MASTER_HEIGHT = 238;
@@ -7,6 +8,7 @@ export interface NSSplitterProps
7
8
  {
8
9
  master_content?: ReactNode;
9
10
  detail_content?: ReactNode;
11
+ storage_key?: string;
10
12
  }
11
13
 
12
14
  export class NSSplitter extends Component<NSSplitterProps>
@@ -18,6 +20,7 @@ export class NSSplitter extends Component<NSSplitterProps>
18
20
  private DragOffset = 0;
19
21
  private HasUserResized = false;
20
22
  private MediaQuery: MediaQueryList | null = null;
23
+ private Storage = new IStorageLocal();
21
24
 
22
25
  constructor(props: NSSplitterProps)
23
26
  {
@@ -33,6 +36,10 @@ export class NSSplitter extends Component<NSSplitterProps>
33
36
  this.MediaQuery = window.matchMedia("(min-width: 992px)");
34
37
  this.MediaQuery.addEventListener("change", this.handleViewportChange);
35
38
  window.addEventListener("resize", this.handleViewportChange);
39
+
40
+ if (this.loadStoredHeight() !== null)
41
+ this.HasUserResized = true;
42
+
36
43
  this.updateLayout(true);
37
44
  }
38
45
 
@@ -71,7 +78,12 @@ export class NSSplitter extends Component<NSSplitterProps>
71
78
 
72
79
  if (this.MediaQuery.matches && this.props.detail_content)
73
80
  {
74
- if (force || !this.HasUserResized) this.adjustMasterToViewport();
81
+ let stored = this.loadStoredHeight();
82
+
83
+ if (stored !== null)
84
+ this.applyHeight(Math.max(MIN_MASTER_HEIGHT, stored));
85
+ else if (force || !this.HasUserResized)
86
+ this.adjustMasterToViewport();
75
87
  }
76
88
  else
77
89
  {
@@ -80,6 +92,45 @@ export class NSSplitter extends Component<NSSplitterProps>
80
92
  }
81
93
  }
82
94
 
95
+ applyHeight(height: number)
96
+ {
97
+ let master_el = this.MasterPaneRef.current;
98
+
99
+ if (master_el) {
100
+ master_el.style.height = height + "px";
101
+ master_el.style.minHeight = height + "px";
102
+ }
103
+ }
104
+
105
+ loadStoredHeight(): number | null
106
+ {
107
+ let key = this.props.storage_key;
108
+
109
+ if (!key)
110
+ return null;
111
+
112
+ let raw = this.Storage.get(key, "");
113
+
114
+ if (!raw)
115
+ return null;
116
+
117
+ let value = parseInt(raw, 10);
118
+
119
+ if (isNaN(value))
120
+ return null;
121
+
122
+ return value;
123
+ }
124
+
125
+ saveStoredHeight(height: number)
126
+ {
127
+ let key = this.props.storage_key;
128
+
129
+ if (!key) return;
130
+
131
+ this.Storage.set(key, String(height));
132
+ }
133
+
83
134
  adjustMasterToViewport()
84
135
  {
85
136
  let master_el = this.MasterPaneRef.current;
@@ -90,8 +141,7 @@ export class NSSplitter extends Component<NSSplitterProps>
90
141
  let gutter_height = this.GutterRef.current?.offsetHeight ?? 0;
91
142
  let height = Math.max(MIN_MASTER_HEIGHT, window.innerHeight - master_top - gutter_height);
92
143
 
93
- master_el.style.height = height + "px";
94
- master_el.style.minHeight = height + "px";
144
+ this.applyHeight(height);
95
145
  }
96
146
 
97
147
  handleMouseDown(event: ReactMouseEvent)
@@ -112,6 +162,11 @@ export class NSSplitter extends Component<NSSplitterProps>
112
162
  window.removeEventListener("mousemove", this.handleMouseMove);
113
163
  window.removeEventListener("mouseup", this.handleMouseUp);
114
164
  this.SplitterRef.current?.classList.remove(Styles.ns_splitter_resizing);
165
+
166
+ let master_el = this.MasterPaneRef.current;
167
+
168
+ if (master_el)
169
+ this.saveStoredHeight(master_el.offsetHeight);
115
170
  }
116
171
 
117
172
  handleMouseMove(event: MouseEvent)
@@ -129,8 +184,7 @@ export class NSSplitter extends Component<NSSplitterProps>
129
184
  let master_top = master_el.getBoundingClientRect().top;
130
185
  let height = Math.max(MIN_MASTER_HEIGHT, event.clientY - this.DragOffset - master_top);
131
186
 
132
- master_el.style.height = height + "px";
133
- master_el.style.minHeight = height + "px";
187
+ this.applyHeight(height);
134
188
  this.HasUserResized = true;
135
189
  });
136
190
  }