@aiquants/resize-panels 1.8.1 → 2.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (81) hide show
  1. package/README.md +213 -108
  2. package/dist/GlobalDebugOverlay-Cf3GOn2A.cjs +1 -0
  3. package/dist/{GlobalDebugOverlay-DYCR0FIu.js → GlobalDebugOverlay-DQtUdNeF.js} +28 -28
  4. package/dist/debugOverlayStore-D7FT6zPE.js +135 -0
  5. package/dist/debugOverlayStore-DY09saU8.cjs +1 -0
  6. package/dist/index-DZ0itiBD.js +1299 -0
  7. package/dist/index-DqATP_BA.cjs +2 -0
  8. package/dist/index.cjs +1 -1
  9. package/dist/index.d.ts +2 -29
  10. package/dist/index.js +25 -13
  11. package/dist/src/GlobalDebugOverlay.d.ts.map +1 -0
  12. package/dist/src/Panel.d.ts +46 -0
  13. package/dist/src/Panel.d.ts.map +1 -0
  14. package/dist/src/PanelDebugInfo.d.ts +34 -0
  15. package/dist/src/PanelDebugInfo.d.ts.map +1 -0
  16. package/dist/src/PanelGroup.d.ts.map +1 -0
  17. package/dist/{PanelResizeHandle.d.ts → src/PanelResizeHandle.d.ts} +1 -1
  18. package/dist/src/PanelResizeHandle.d.ts.map +1 -0
  19. package/dist/src/allocateLayout.d.ts +60 -0
  20. package/dist/src/allocateLayout.d.ts.map +1 -0
  21. package/dist/src/context.d.ts.map +1 -0
  22. package/dist/{debugOverlayStore.d.ts → src/debugOverlayStore.d.ts} +10 -2
  23. package/dist/src/debugOverlayStore.d.ts.map +1 -0
  24. package/dist/src/hooks.d.ts +48 -0
  25. package/dist/src/hooks.d.ts.map +1 -0
  26. package/dist/src/index.d.ts +32 -0
  27. package/dist/src/index.d.ts.map +1 -0
  28. package/dist/src/reducer.d.ts +49 -0
  29. package/dist/src/reducer.d.ts.map +1 -0
  30. package/dist/src/roundHalfToEven.d.ts.map +1 -0
  31. package/dist/src/types.d.ts +481 -0
  32. package/dist/src/types.d.ts.map +1 -0
  33. package/dist/src/utils/simple-logger.d.ts.map +1 -0
  34. package/dist/src/utils.d.ts +164 -0
  35. package/dist/src/utils.d.ts.map +1 -0
  36. package/dist/styles/resize-panels.standalone.css +1 -1
  37. package/dist/tests/support/dom-harness.d.ts +89 -0
  38. package/dist/tests/support/dom-harness.d.ts.map +1 -0
  39. package/package.json +3 -3
  40. package/src/GlobalDebugOverlay.tsx +3 -3
  41. package/src/Panel.tsx +203 -541
  42. package/src/PanelDebugInfo.tsx +52 -106
  43. package/src/PanelGroup.tsx +27 -42
  44. package/src/PanelResizeHandle.tsx +544 -504
  45. package/src/allocateLayout.ts +412 -0
  46. package/src/debugOverlayStore.ts +19 -15
  47. package/src/hooks.ts +187 -779
  48. package/src/index.ts +37 -6
  49. package/src/reducer.ts +364 -1126
  50. package/src/types.ts +282 -65
  51. package/src/utils.ts +205 -164
  52. package/dist/GlobalDebugOverlay-afs0vF-Q.cjs +0 -1
  53. package/dist/GlobalDebugOverlay.d.ts.map +0 -1
  54. package/dist/Panel.d.ts +0 -7
  55. package/dist/Panel.d.ts.map +0 -1
  56. package/dist/PanelDebugInfo.d.ts +0 -26
  57. package/dist/PanelDebugInfo.d.ts.map +0 -1
  58. package/dist/PanelGroup.d.ts.map +0 -1
  59. package/dist/PanelResizeHandle.d.ts.map +0 -1
  60. package/dist/context.d.ts.map +0 -1
  61. package/dist/debugOverlayStore-Cntyxboe.js +0 -141
  62. package/dist/debugOverlayStore-Dkl-fHoa.cjs +0 -1
  63. package/dist/debugOverlayStore.d.ts.map +0 -1
  64. package/dist/hooks.d.ts +0 -45
  65. package/dist/hooks.d.ts.map +0 -1
  66. package/dist/index-BzgId8aQ.js +0 -1972
  67. package/dist/index-xTV-c0PN.cjs +0 -2
  68. package/dist/index.d.ts.map +0 -1
  69. package/dist/reducer.d.ts +0 -39
  70. package/dist/reducer.d.ts.map +0 -1
  71. package/dist/roundHalfToEven.d.ts.map +0 -1
  72. package/dist/types.d.ts +0 -253
  73. package/dist/types.d.ts.map +0 -1
  74. package/dist/utils/simple-logger.d.ts.map +0 -1
  75. package/dist/utils.d.ts +0 -61
  76. package/dist/utils.d.ts.map +0 -1
  77. /package/dist/{GlobalDebugOverlay.d.ts → src/GlobalDebugOverlay.d.ts} +0 -0
  78. /package/dist/{PanelGroup.d.ts → src/PanelGroup.d.ts} +0 -0
  79. /package/dist/{context.d.ts → src/context.d.ts} +0 -0
  80. /package/dist/{roundHalfToEven.d.ts → src/roundHalfToEven.d.ts} +0 -0
  81. /package/dist/{utils → src/utils}/simple-logger.d.ts +0 -0
@@ -1,141 +0,0 @@
1
- import { useSyncExternalStore as x } from "react";
2
- const D = (s) => JSON.stringify(
3
- s.map((e) => ({
4
- id: e.id,
5
- size: e.size,
6
- percentageSize: e.percentageSize ?? null,
7
- preferredPercentageSize: e.preferredPercentageSize ?? null,
8
- preferredPixelSize: e.preferredPixelSize ?? null,
9
- sizeUnit: e.sizeUnit,
10
- originalPixelSize: e.originalPixelSize ?? null,
11
- minSize: e.minSize ?? null,
12
- maxSize: e.maxSize ?? null,
13
- autoMinSize: e.autoMinSize ?? null,
14
- collapseFromStart: e.collapseFromStart,
15
- collapseFromEnd: e.collapseFromEnd,
16
- collapsedByDirection: e.collapsedByDirection ?? null,
17
- collapsed: e.collapsed ?? !1,
18
- sizeBeforeCollapse: e.sizeBeforeCollapse ?? null,
19
- preferredPercentageSizeBeforeCollapse: e.preferredPercentageSizeBeforeCollapse ?? null,
20
- preferredPixelSizeBeforeCollapse: e.preferredPixelSizeBeforeCollapse ?? null,
21
- measuredPixelSizeBeforeCollapse: e.measuredPixelSizeBeforeCollapse ?? null,
22
- pixelAdjustPriority: e.pixelAdjustPriority ?? null,
23
- flexAdjustPriority: e.flexAdjustPriority ?? null,
24
- measuredPixelSize: e.measuredPixelSize ?? null,
25
- measuredPercentageSize: e.measuredPercentageSize ?? null
26
- }))
27
- ), k = (s) => JSON.stringify(
28
- s.map((e) => ({
29
- id: e.id,
30
- thickness: e.thickness,
31
- visible: e.visible,
32
- direction: e.direction,
33
- startPanelId: e.startPanelId ?? null,
34
- endPanelId: e.endPanelId ?? null
35
- }))
36
- ), H = () => {
37
- const s = /* @__PURE__ */ new Set(), e = /* @__PURE__ */ new Map(), d = /* @__PURE__ */ new Set();
38
- let c = null, v = 0, u = !0, h = [], P = {
39
- ownerId: null,
40
- groups: h
41
- };
42
- const y = () => {
43
- for (const i of s)
44
- i();
45
- }, p = () => {
46
- u = !0, y();
47
- }, z = () => {
48
- const i = c;
49
- if (i && d.has(i))
50
- return !1;
51
- c = null;
52
- const r = d.values().next();
53
- return r.done || (c = r.value), i !== c;
54
- };
55
- return {
56
- subscribe: (i) => (s.add(i), () => {
57
- s.delete(i);
58
- }),
59
- getSnapshot: () => (z() && (u = !0), u && (h = Array.from(e.values()).sort((r, n) => r.index - n.index).map(({ serializedPanels: r, serializedHandles: n, ...S }) => S), P = {
60
- ownerId: c,
61
- groups: h
62
- }, u = !1), P),
63
- getOwnerId: () => (z() && (u = !0), c),
64
- enableGroup: (i) => {
65
- const r = d.size;
66
- d.add(i), d.size !== r && z() && p();
67
- },
68
- disableGroup: (i) => {
69
- d.delete(i) && z() && p();
70
- },
71
- updateGroup: (i, r) => {
72
- const n = e.get(i), S = n?.index ?? v++, m = D(r.panels), b = k(r.handles), G = n?.displayName !== r.displayName, C = n?.direction !== r.direction, O = n ? n.containerSize.width !== r.containerSize.width || n.containerSize.height !== r.containerSize.height : !0;
73
- let f = n?.serializedPanels !== m;
74
- if (!f && n)
75
- if (n.panels.length !== r.panels.length)
76
- f = !0;
77
- else
78
- for (let o = 0; o < r.panels.length; o += 1) {
79
- const l = n.panels[o], t = r.panels[o];
80
- if (!(l && t)) {
81
- f = !0;
82
- break;
83
- }
84
- if (l.id !== t.id || l.size !== t.size || l.percentageSize !== t.percentageSize || l.collapsed !== t.collapsed || l.measuredPixelSize !== t.measuredPixelSize || l.measuredPercentageSize !== t.measuredPercentageSize) {
85
- f = !0;
86
- break;
87
- }
88
- }
89
- let g = n?.serializedHandles !== b;
90
- if (!g && n)
91
- if (n.handles.length !== r.handles.length)
92
- g = !0;
93
- else
94
- for (let o = 0; o < r.handles.length; o += 1) {
95
- const l = n.handles[o], t = r.handles[o];
96
- if (!(l && t)) {
97
- g = !0;
98
- break;
99
- }
100
- if (l.id !== t.id || l.thickness !== t.thickness || l.visible !== t.visible || l.direction !== t.direction || l.startPanelId !== t.startPanelId || l.endPanelId !== t.endPanelId) {
101
- g = !0;
102
- break;
103
- }
104
- }
105
- if (!n && r.panels.length === 0 && r.handles.length === 0 || n && !G && !C && !O && !f && !g)
106
- return;
107
- const w = r.panels.map((o) => ({ ...o })), I = r.handles.map((o) => ({ ...o })), B = { ...r.containerSize };
108
- e.set(i, {
109
- groupId: i,
110
- displayName: r.displayName,
111
- direction: r.direction,
112
- containerSize: B,
113
- panels: w,
114
- handles: I,
115
- index: S,
116
- serializedPanels: m,
117
- serializedHandles: b
118
- }), p();
119
- },
120
- removeGroup: (i) => {
121
- const r = e.delete(i), n = d.delete(i), S = z();
122
- (r || n || S) && p();
123
- }
124
- };
125
- }, a = H(), U = () => x(a.subscribe, a.getOwnerId, a.getOwnerId), q = () => x(a.subscribe, a.getSnapshot, a.getSnapshot), K = (s) => {
126
- a.enableGroup(s);
127
- }, L = (s) => {
128
- a.disableGroup(s);
129
- }, Q = (s, e) => {
130
- a.updateGroup(s, e);
131
- }, R = (s) => {
132
- a.removeGroup(s);
133
- };
134
- export {
135
- L as disableDebugOverlayGroup,
136
- K as enableDebugOverlayGroup,
137
- R as removeDebugOverlayGroup,
138
- Q as updateDebugOverlayGroup,
139
- U as useDebugOverlayOwnerId,
140
- q as useDebugOverlaySnapshot
141
- };
@@ -1 +0,0 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const y=require("react"),B=s=>JSON.stringify(s.map(e=>({id:e.id,size:e.size,percentageSize:e.percentageSize??null,preferredPercentageSize:e.preferredPercentageSize??null,preferredPixelSize:e.preferredPixelSize??null,sizeUnit:e.sizeUnit,originalPixelSize:e.originalPixelSize??null,minSize:e.minSize??null,maxSize:e.maxSize??null,autoMinSize:e.autoMinSize??null,collapseFromStart:e.collapseFromStart,collapseFromEnd:e.collapseFromEnd,collapsedByDirection:e.collapsedByDirection??null,collapsed:e.collapsed??!1,sizeBeforeCollapse:e.sizeBeforeCollapse??null,preferredPercentageSizeBeforeCollapse:e.preferredPercentageSizeBeforeCollapse??null,preferredPixelSizeBeforeCollapse:e.preferredPixelSizeBeforeCollapse??null,measuredPixelSizeBeforeCollapse:e.measuredPixelSizeBeforeCollapse??null,pixelAdjustPriority:e.pixelAdjustPriority??null,flexAdjustPriority:e.flexAdjustPriority??null,measuredPixelSize:e.measuredPixelSize??null,measuredPercentageSize:e.measuredPercentageSize??null}))),k=s=>JSON.stringify(s.map(e=>({id:e.id,thickness:e.thickness,visible:e.visible,direction:e.direction,startPanelId:e.startPanelId??null,endPanelId:e.endPanelId??null}))),H=()=>{const s=new Set,e=new Map,d=new Set;let c=null,v=0,u=!0,b=[],h={ownerId:null,groups:b};const x=()=>{for(const i of s)i()},f=()=>{u=!0,x()},g=()=>{const i=c;if(i&&d.has(i))return!1;c=null;const r=d.values().next();return r.done||(c=r.value),i!==c};return{subscribe:i=>(s.add(i),()=>{s.delete(i)}),getSnapshot:()=>(g()&&(u=!0),u&&(b=Array.from(e.values()).sort((r,n)=>r.index-n.index).map(({serializedPanels:r,serializedHandles:n,...S})=>S),h={ownerId:c,groups:b},u=!1),h),getOwnerId:()=>(g()&&(u=!0),c),enableGroup:i=>{const r=d.size;d.add(i),d.size!==r&&g()&&f()},disableGroup:i=>{d.delete(i)&&g()&&f()},updateGroup:(i,r)=>{const n=e.get(i),S=n?.index??v++,P=B(r.panels),m=k(r.handles),O=n?.displayName!==r.displayName,G=n?.direction!==r.direction,C=n?n.containerSize.width!==r.containerSize.width||n.containerSize.height!==r.containerSize.height:!0;let z=n?.serializedPanels!==P;if(!z&&n)if(n.panels.length!==r.panels.length)z=!0;else for(let o=0;o<r.panels.length;o+=1){const l=n.panels[o],t=r.panels[o];if(!(l&&t)){z=!0;break}if(l.id!==t.id||l.size!==t.size||l.percentageSize!==t.percentageSize||l.collapsed!==t.collapsed||l.measuredPixelSize!==t.measuredPixelSize||l.measuredPercentageSize!==t.measuredPercentageSize){z=!0;break}}let p=n?.serializedHandles!==m;if(!p&&n)if(n.handles.length!==r.handles.length)p=!0;else for(let o=0;o<r.handles.length;o+=1){const l=n.handles[o],t=r.handles[o];if(!(l&&t)){p=!0;break}if(l.id!==t.id||l.thickness!==t.thickness||l.visible!==t.visible||l.direction!==t.direction||l.startPanelId!==t.startPanelId||l.endPanelId!==t.endPanelId){p=!0;break}}if(!n&&r.panels.length===0&&r.handles.length===0||n&&!O&&!G&&!C&&!z&&!p)return;const w=r.panels.map(o=>({...o})),D=r.handles.map(o=>({...o})),I={...r.containerSize};e.set(i,{groupId:i,displayName:r.displayName,direction:r.direction,containerSize:I,panels:w,handles:D,index:S,serializedPanels:P,serializedHandles:m}),f()},removeGroup:i=>{const r=e.delete(i),n=d.delete(i),S=g();(r||n||S)&&f()}}},a=H(),N=()=>y.useSyncExternalStore(a.subscribe,a.getOwnerId,a.getOwnerId),j=()=>y.useSyncExternalStore(a.subscribe,a.getSnapshot,a.getSnapshot),A=s=>{a.enableGroup(s)},E=s=>{a.disableGroup(s)},F=(s,e)=>{a.updateGroup(s,e)},M=s=>{a.removeGroup(s)};exports.disableDebugOverlayGroup=E;exports.enableDebugOverlayGroup=A;exports.removeDebugOverlayGroup=M;exports.updateDebugOverlayGroup=F;exports.useDebugOverlayOwnerId=N;exports.useDebugOverlaySnapshot=j;
@@ -1 +0,0 @@
1
- {"version":3,"file":"debugOverlayStore.d.ts","sourceRoot":"","sources":["../src/debugOverlayStore.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,KAAK,EAAE,aAAa,EAAE,cAAc,EAAE,eAAe,EAAE,sBAAsB,EAAE,MAAM,SAAS,CAAA;AAErG;;;GAGG;AACH,MAAM,MAAM,oBAAoB,GAAG;IAC/B,OAAO,EAAE,MAAM,GAAG,IAAI,CAAA;IACtB,MAAM,EAAE,eAAe,EAAE,CAAA;CAC5B,CAAA;AAED;;;GAGG;AACH,MAAM,MAAM,eAAe,GAAG;IAC1B,OAAO,EAAE,MAAM,CAAA;IACf,WAAW,EAAE,MAAM,CAAA;IACnB,SAAS,EAAE,cAAc,CAAA;IACzB,aAAa,EAAE,aAAa,CAAA;IAC5B,MAAM,EAAE,eAAe,EAAE,CAAA;IACzB,OAAO,EAAE,sBAAsB,EAAE,CAAA;IACjC,KAAK,EAAE,MAAM,CAAA;CAChB,CAAA;AAED,KAAK,gBAAgB,GAAG;IACpB,WAAW,EAAE,MAAM,CAAA;IACnB,SAAS,EAAE,cAAc,CAAA;IACzB,aAAa,EAAE,aAAa,CAAA;IAC5B,MAAM,EAAE,eAAe,EAAE,CAAA;IACzB,OAAO,EAAE,sBAAsB,EAAE,CAAA;CACpC,CAAA;AA2QD;;;GAGG;AACH,eAAO,MAAM,sBAAsB,qBAElC,CAAA;AAED;;;GAGG;AACH,eAAO,MAAM,uBAAuB,4BAEnC,CAAA;AAED;;;GAGG;AACH,eAAO,MAAM,uBAAuB,GAAI,SAAS,MAAM,SAEtD,CAAA;AAED;;;GAGG;AACH,eAAO,MAAM,wBAAwB,GAAI,SAAS,MAAM,SAEvD,CAAA;AAED;;;GAGG;AACH,eAAO,MAAM,uBAAuB,GAAI,SAAS,MAAM,EAAE,QAAQ,gBAAgB,SAEhF,CAAA;AAED;;;GAGG;AACH,eAAO,MAAM,uBAAuB,GAAI,SAAS,MAAM,SAEtD,CAAA"}
package/dist/hooks.d.ts DELETED
@@ -1,45 +0,0 @@
1
- import { CSSProperties } from 'react';
2
- import { LayoutConstraintViolation, PanelCollapseDirection, PanelGroupProps, PanelLayoutData, PanelMeasurement, ResizeHandleLayoutData } from './types';
3
- /**
4
- * Orchestrate registration, constraint resolution, measurement sync, and persistence for a panel group.
5
- * パネルグループにおける登録処理・制約判定・計測同期・永続化の統括。
6
- */
7
- export declare const useResizablePanels: ({ direction, style, onLayout, autoSaveId, showDebugInfo }: PanelGroupProps) => {
8
- groupRef: import('react').RefObject<HTMLDivElement | null>;
9
- contextValue: {
10
- direction: import('./types').PanelDirection;
11
- panels: PanelLayoutData[];
12
- containerSize: {
13
- width: number;
14
- height: number;
15
- };
16
- isContainerReady: boolean;
17
- showDebugInfo: boolean;
18
- registerPanel: (panel: PanelLayoutData) => void;
19
- unregisterPanel: (id: string) => void;
20
- resizePanels: (leftId: string, rightId: string, leftSize: number, rightSize: number) => void;
21
- collapsePanel: (id: string, from: PanelCollapseDirection) => void;
22
- expandPanel: (id: string, from: PanelCollapseDirection, targetSize?: number) => void;
23
- getPanel: (id: string) => PanelLayoutData | undefined;
24
- reportPanelMeasurement: (panelId: string, measurement: PanelMeasurement | null) => void;
25
- panelMeasurements: Record<string, PanelMeasurement>;
26
- reportHandleMeasurement: (handleId: string, measurement: ResizeHandleLayoutData | null) => void;
27
- handleMeasurements: Record<string, ResizeHandleLayoutData>;
28
- layoutConstraintViolation: LayoutConstraintViolation | null;
29
- };
30
- groupStyle: CSSProperties;
31
- };
32
- /**
33
- * Provide imperative helpers for toggling a specific panel while preserving stored sizing.
34
- * 特定パネルの保存済みサイズを維持しつつ開閉を制御する命令型ユーティリティを提供するカスタムフック。
35
- */
36
- export declare const usePanelControls: (panelId: string) => {
37
- panel: PanelLayoutData | undefined;
38
- isCollapsed: boolean;
39
- canCollapseFromStart: boolean;
40
- canCollapseFromEnd: boolean;
41
- collapse: (from: PanelCollapseDirection) => void;
42
- expand: (from: PanelCollapseDirection, targetSize?: number) => void;
43
- toggle: (from: PanelCollapseDirection, targetSize?: number) => void;
44
- };
45
- //# sourceMappingURL=hooks.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"hooks.d.ts","sourceRoot":"","sources":["../src/hooks.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,KAAK,aAAa,EAAkF,MAAM,OAAO,CAAA;AAG1H,OAAO,KAAK,EAAE,yBAAyB,EAAE,sBAAsB,EAAE,eAAe,EAAE,eAAe,EAAE,gBAAgB,EAAE,sBAAsB,EAAE,MAAM,SAAS,CAAA;AAM5J;;;GAGG;AACH,eAAO,MAAM,kBAAkB,GAAI,2DAAmE,eAAe;;;;;;;;;;;+BA8iBvE,eAAe;8BAgDhB,MAAM;+BAmClC,MAAM,WAAW,MAAM,YAAY,MAAM,aAAa,MAAM;4BAoFhE,MAAM,QAAQ,sBAAsB;0BAapC,MAAM,QAAQ,sBAAsB,eAAe,MAAM;uBAazD,MAAM;0CAWsC,MAAM,eAAe,gBAAgB,GAAG,IAAI;;4CAiE1C,MAAM,eAAe,sBAAsB,GAAG,IAAI;;;;;CA2E5G,CAAA;AAED;;;GAGG;AACH,eAAO,MAAM,gBAAgB,GAAI,SAAS,MAAM;;;;;qBAKjC,sBAAsB;mBAOtB,sBAAsB,eAAe,MAAM;mBAO3C,sBAAsB,eAAe,MAAM;CAsBzD,CAAA"}