@window-splitter/state 0.2.3 → 0.2.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.turbo/turbo-build.log +1 -1
- package/CHANGELOG.md +15 -0
- package/dist/commonjs/index.d.ts +4 -4
- package/dist/commonjs/index.d.ts.map +1 -1
- package/dist/commonjs/index.js +4 -7
- package/dist/commonjs/index.js.map +1 -1
- package/dist/esm/index.d.ts +4 -4
- package/dist/esm/index.d.ts.map +1 -1
- package/dist/esm/index.js +4 -7
- package/dist/esm/index.js.map +1 -1
- package/package.json +3 -3
- package/src/index.ts +8 -11
- package/src/machine.test.ts +1 -1
package/.turbo/turbo-build.log
CHANGED
package/CHANGELOG.md
CHANGED
|
@@ -1,3 +1,18 @@
|
|
|
1
|
+
# v0.2.4 (Thu Aug 15 2024)
|
|
2
|
+
|
|
3
|
+
#### 🐛 Bug Fix
|
|
4
|
+
|
|
5
|
+
- Fix conditional panel rendering [#22](https://github.com/hipstersmoothie/react-window-splitter/pull/22) ([@hipstersmoothie](https://github.com/hipstersmoothie))
|
|
6
|
+
- Fix conditional panel rendering ([@hipstersmoothie](https://github.com/hipstersmoothie))
|
|
7
|
+
- Fix default size throwing of responsive sizing [#21](https://github.com/hipstersmoothie/react-window-splitter/pull/21) ([@hipstersmoothie](https://github.com/hipstersmoothie))
|
|
8
|
+
- Fix default size throwing of responsive sizing ([@hipstersmoothie](https://github.com/hipstersmoothie))
|
|
9
|
+
|
|
10
|
+
#### Authors: 1
|
|
11
|
+
|
|
12
|
+
- Andrew Lisowski ([@hipstersmoothie](https://github.com/hipstersmoothie))
|
|
13
|
+
|
|
14
|
+
---
|
|
15
|
+
|
|
1
16
|
# v0.2.3 (Wed Aug 14 2024)
|
|
2
17
|
|
|
3
18
|
#### 🐛 Bug Fix
|
package/dist/commonjs/index.d.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { Snapshot } from "xstate";
|
|
2
2
|
import Big from "big.js";
|
|
3
|
-
type PixelUnit = `${number}px`;
|
|
4
|
-
type PercentUnit = `${number}%`;
|
|
3
|
+
export type PixelUnit = `${number}px`;
|
|
4
|
+
export type PercentUnit = `${number}%`;
|
|
5
5
|
export type Unit = PixelUnit | PercentUnit;
|
|
6
6
|
type Orientation = "horizontal" | "vertical";
|
|
7
7
|
interface ParsedPercentUnit {
|
|
@@ -104,7 +104,7 @@ interface UnregisterPanelEvent {
|
|
|
104
104
|
id: string;
|
|
105
105
|
}
|
|
106
106
|
export type InitializePanelHandleData = Omit<PanelHandleData, "type" | "size"> & {
|
|
107
|
-
size: PixelUnit;
|
|
107
|
+
size: PixelUnit | ParsedPixelUnit;
|
|
108
108
|
};
|
|
109
109
|
interface RegisterPanelHandleEvent {
|
|
110
110
|
/** Register a new panel handle with the state machine */
|
|
@@ -230,7 +230,7 @@ type InitializePanelOptionsWithId = InitializePanelOptions & {
|
|
|
230
230
|
export declare function initializePanel(item: InitializePanelOptionsWithId): PanelData;
|
|
231
231
|
export declare function initializePanel(item: InitializePanelOptions): Omit<PanelData, "id">;
|
|
232
232
|
export declare function initializePanelHandleData(item: InitializePanelHandleData): {
|
|
233
|
-
size:
|
|
233
|
+
size: ParsedUnit;
|
|
234
234
|
id: string;
|
|
235
235
|
order?: number | undefined;
|
|
236
236
|
type: "handle";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EAKL,QAAQ,EACT,MAAM,QAAQ,CAAC;AAEhB,OAAO,GAAG,MAAM,QAAQ,CAAC;AAWzB,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/commonjs/index.js
CHANGED
|
@@ -133,7 +133,7 @@ function initializePanelHandleData(item) {
|
|
|
133
133
|
return {
|
|
134
134
|
type: "handle",
|
|
135
135
|
...item,
|
|
136
|
-
size: parseUnit(item.size),
|
|
136
|
+
size: typeof item.size === "string" ? parseUnit(item.size) : item.size,
|
|
137
137
|
};
|
|
138
138
|
}
|
|
139
139
|
/** Parse a `Unit` string or `clamp` value */
|
|
@@ -296,11 +296,6 @@ function getStaticWidth(context) {
|
|
|
296
296
|
item.currentValue.type === "pixel") {
|
|
297
297
|
width = width.add(item.currentValue.value);
|
|
298
298
|
}
|
|
299
|
-
else if (isPanelData(item) &&
|
|
300
|
-
item.default &&
|
|
301
|
-
item.default.type === "pixel") {
|
|
302
|
-
width = width.add(item.default.value);
|
|
303
|
-
}
|
|
304
299
|
}
|
|
305
300
|
return width;
|
|
306
301
|
}
|
|
@@ -914,7 +909,9 @@ exports.groupMachine = (0, xstate_1.createMachine)({
|
|
|
914
909
|
assignPanelHandleData: (0, xstate_1.assign)({
|
|
915
910
|
items: ({ context, event }) => {
|
|
916
911
|
isEvent(event, ["registerPanelHandle"]);
|
|
917
|
-
const unit =
|
|
912
|
+
const unit = typeof event.data.size === "string"
|
|
913
|
+
? parseUnit(event.data.size)
|
|
914
|
+
: event.data.size;
|
|
918
915
|
return addDeDuplicatedItems(context.items, {
|
|
919
916
|
type: "handle",
|
|
920
917
|
...event.data,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"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","sourcesContent":["import { raf } from \"@react-spring/rafz\";\nimport {\n createMachine,\n assign,\n enqueueActions,\n fromPromise,\n Snapshot,\n} from \"xstate\";\nimport invariant from \"invariant\";\nimport Big from \"big.js\";\n\n// #region Constants\n\n/** The default amount a user can `dragOvershoot` before the panel collapses */\nconst COLLAPSE_THRESHOLD = 50;\n\n// #endregion\n\n// #region Types\n\ntype PixelUnit = `${number}px`;\ntype PercentUnit = `${number}%`;\nexport type Unit = PixelUnit | PercentUnit;\ntype Orientation = \"horizontal\" | \"vertical\";\n\ninterface ParsedPercentUnit {\n type: \"percent\";\n value: Big.Big;\n}\n\ninterface ParsedPixelUnit {\n type: \"pixel\";\n value: Big.Big;\n}\n\ntype ParsedUnit = ParsedPercentUnit | ParsedPixelUnit;\n\nexport function makePercentUnit(value: number): ParsedPercentUnit {\n return { type: \"percent\", value: new Big(value) };\n}\n\nexport function makePixelUnit(value: number): ParsedPixelUnit {\n return { type: \"pixel\", value: new Big(value) };\n}\n\ninterface MoveMoveEvent {\n shiftKey: boolean;\n ctrlKey: boolean;\n metaKey: boolean;\n altKey: boolean;\n deltaX: number;\n deltaY: number;\n}\n\nexport interface Constraints<T extends ParsedUnit | Unit = ParsedUnit> {\n /** The minimum size of the panel */\n min?: T;\n /** The maximum size of the panel */\n max?: T;\n /** The default size of the panel */\n default?: T;\n /** Whether the panel is collapsible */\n collapsible?: boolean;\n /** Whether the panel should initially render as collapsed */\n defaultCollapsed?: boolean;\n /** The size of the panel once collapsed */\n collapsedSize?: T;\n}\n\ninterface Order {\n /**\n * When dynamically rendering panels/handles you need to add the order prop.\n * This tells the component what place the items should be in once rendered.\n */\n order?: number;\n}\n\nexport interface PanelData\n extends Omit<Constraints, \"min\" | \"max\" | \"collapsedSize\">,\n Required<Pick<Constraints, \"min\" | \"collapsedSize\">>,\n Order {\n max: ParsedUnit | \"1fr\";\n type: \"panel\";\n id: string;\n /** Whether the collapsed state is controlled by the consumer or not */\n collapseIsControlled?: boolean;\n /** A ref to the latest \"collapseChange\" function provided by the user */\n onCollapseChange?: {\n current: ((isCollapsed: boolean) => void) | null | undefined;\n };\n /**\n * The current value for the item in the grid\n */\n currentValue: ParsedUnit;\n /** Whether the panel is currently collapsed */\n collapsed: boolean | undefined;\n /**\n * The size the panel was before being collapsed.\n * This is used to re-open the panel at the same size.\n * If the panel starts out collapsed it will use the `min`.\n */\n sizeBeforeCollapse: number | undefined;\n /** Animate the collapse/expand */\n collapseAnimation?:\n | CollapseAnimation\n | { duration: number; easing: CollapseAnimation | ((t: number) => number) };\n}\n\nfunction getCollapseAnimation(panel: PanelData) {\n let easeFn = collapseAnimations.linear;\n let duration = 300;\n\n if (panel.collapseAnimation) {\n if (typeof panel.collapseAnimation === \"string\") {\n easeFn = collapseAnimations[panel.collapseAnimation];\n } else if (\"duration\" in panel.collapseAnimation) {\n duration = panel.collapseAnimation.duration ?? duration;\n easeFn =\n typeof panel.collapseAnimation.easing === \"function\"\n ? panel.collapseAnimation.easing\n : collapseAnimations[panel.collapseAnimation.easing];\n }\n }\n\n return { ease: easeFn, duration };\n}\n\n/** Copied from https://github.com/d3/d3-ease */\nconst collapseAnimations = {\n \"ease-in-out\": function quadInOut(t: number) {\n return ((t *= 2) <= 1 ? t * t : --t * (2 - t) + 1) / 2;\n },\n bounce: function backInOut(t: number) {\n const s = 1.70158;\n return (\n ((t *= 2) < 1\n ? t * t * ((s + 1) * t - s)\n : (t -= 2) * t * ((s + 1) * t + s) + 2) / 2\n );\n },\n linear: function linear(t: number) {\n return +t;\n },\n};\n\ntype CollapseAnimation = keyof typeof collapseAnimations;\n\nexport interface PanelHandleData extends Order {\n type: \"handle\";\n id: string;\n /**\n * The size of the panel handle.\n * Needed to correctly calculate the percentage of modified panels.\n */\n size: ParsedPixelUnit;\n}\n\nexport type Item = PanelData | PanelHandleData;\n\ninterface RegisterPanelEvent {\n /** Register a new panel with the state machine */\n type: \"registerPanel\";\n data: Omit<PanelData, \"type\" | \"currentValue\" | \"defaultCollapsed\">;\n}\n\ninterface RegisterDynamicPanelEvent extends Omit<RegisterPanelEvent, \"type\"> {\n /** Register a new panel with the state machine */\n type: \"registerDynamicPanel\";\n}\n\ninterface UnregisterPanelEvent {\n /** Remove a panel from the state machine */\n type: \"unregisterPanel\";\n id: string;\n}\n\nexport type InitializePanelHandleData = Omit<\n PanelHandleData,\n \"type\" | \"size\"\n> & {\n size: PixelUnit;\n};\n\ninterface RegisterPanelHandleEvent {\n /** Register a new panel handle with the state machine */\n type: \"registerPanelHandle\";\n data: InitializePanelHandleData;\n}\n\ninterface UnregisterPanelHandleEvent {\n /** Remove a panel handle from the state machine */\n type: \"unregisterPanelHandle\";\n id: string;\n}\n\ninterface DragHandleStartEvent {\n /** Start a drag interaction */\n type: \"dragHandleStart\";\n /** The handle being interacted with */\n handleId: string;\n}\n\ninterface DragHandleEvent {\n /** Update the layout according to how the handle moved */\n type: \"dragHandle\";\n /** The handle being interacted with */\n handleId: string;\n value: MoveMoveEvent;\n}\n\ninterface DragHandleEndEvent {\n /** End a drag interaction */\n type: \"dragHandleEnd\";\n /** The handle being interacted with */\n handleId: string;\n}\n\nexport interface Rect {\n width: number;\n height: number;\n}\n\ninterface SetSizeEvent {\n /** Set the size of the whole group */\n type: \"setSize\";\n size: Rect;\n}\n\ninterface SetActualItemsSizeEvent {\n /** Set the size of the whole group */\n type: \"setActualItemsSize\";\n childrenSizes: Record<string, Rect>;\n}\n\ninterface ApplyDeltaEvent {\n type: \"applyDelta\";\n delta: number;\n handleId: string;\n}\n\ninterface SetOrientationEvent {\n /** Set the orientation of the group */\n type: \"setOrientation\";\n orientation: Orientation;\n}\n\ninterface ControlledCollapseToggle {\n /**\n * This is used to react to the controlled panel \"collapse\" prop updating.\n * This will force an update to be applied and skip calling the user's `onCollapseChanged`\n */\n controlled?: boolean;\n}\n\ninterface CollapsePanelEvent extends ControlledCollapseToggle {\n /** Collapse a panel */\n type: \"collapsePanel\";\n /** The panel to collapse */\n panelId: string;\n}\n\ninterface ExpandPanelEvent extends ControlledCollapseToggle {\n /** Expand a panel */\n type: \"expandPanel\";\n /** The panel to expand */\n panelId: string;\n}\n\ninterface SetPanelPixelSizeEvent {\n /**\n * This event is used by the imperative panel API.\n * With this the user can set the panel's size to an explicit value.\n * This is done by faking interaction with the handles so min/max will still\n * be respected.\n */\n type: \"setPanelPixelSize\";\n /** The panel to apply the size to */\n panelId: string;\n /** The size to apply to the panel */\n size: Unit;\n}\n\nexport interface GroupMachineContextValue {\n /** The items in the group */\n items: Array<Item>;\n /** The available space in the group */\n size: Rect;\n /** The orientation of the grid */\n orientation: Orientation;\n /** How much the drag has overshot the handle */\n dragOvershoot: Big.Big;\n /** An id to use for autosaving the layout */\n autosaveId?: string;\n groupId: string;\n}\n\nexport type GroupMachineEvent =\n | RegisterPanelEvent\n | RegisterDynamicPanelEvent\n | UnregisterPanelEvent\n | RegisterPanelHandleEvent\n | UnregisterPanelHandleEvent\n | DragHandleEvent\n | SetSizeEvent\n | SetOrientationEvent\n | DragHandleStartEvent\n | DragHandleEndEvent\n | CollapsePanelEvent\n | ExpandPanelEvent\n | SetPanelPixelSizeEvent\n | ApplyDeltaEvent\n | SetActualItemsSizeEvent;\n\ntype EventForType<T extends GroupMachineEvent[\"type\"]> = Extract<\n GroupMachineEvent,\n { type: T }\n>;\n\n// #endregion\n\n// #region Helpers\n\nexport function prepareSnapshot(snapshot: Snapshot<unknown>) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const snapshotContext = (snapshot as any)\n .context as unknown as GroupMachineContextValue;\n\n snapshotContext.dragOvershoot = new Big(snapshotContext.dragOvershoot);\n\n for (const item of snapshotContext.items) {\n if (isPanelData(item)) {\n item.currentValue.value = new Big(item.currentValue.value);\n\n if (item.collapsedSize) {\n item.collapsedSize.value = new Big(item.collapsedSize.value);\n }\n\n if (item.min) {\n item.min.value = new Big(item.min.value);\n }\n\n if (item.max && item.max !== \"1fr\") {\n item.max.value = new Big(item.max.value);\n }\n } else {\n item.size.value = new Big(item.size.value);\n }\n }\n\n return snapshot;\n}\n\n/** Assert that the provided event is one of the accepted types */\nfunction isEvent<T extends GroupMachineEvent[\"type\"]>(\n event: GroupMachineEvent,\n eventType: T[]\n): asserts event is EventForType<T> {\n invariant(\n eventType.includes(event.type as T),\n `Invalid event type: ${eventType}. Expected: ${eventType.join(\" | \")}`\n );\n}\n\n/** Determine if an item is a panel */\nexport function isPanelData(value: unknown): value is PanelData {\n return Boolean(\n value &&\n typeof value === \"object\" &&\n \"type\" in value &&\n value.type === \"panel\"\n );\n}\n\n/** Determine if an item is a panel handle */\nexport function isPanelHandle(value: unknown): value is PanelHandleData {\n return Boolean(\n value &&\n typeof value === \"object\" &&\n \"type\" in value &&\n value.type === \"handle\"\n );\n}\n\ninterface InitializePanelOptions {\n min?: Unit;\n max?: Unit;\n default?: Unit;\n collapsible?: boolean;\n collapsed?: boolean;\n collapsedSize?: Unit;\n onCollapseChange?: {\n current: ((isCollapsed: boolean) => void) | null | undefined;\n };\n collapseAnimation?: PanelData[\"collapseAnimation\"];\n defaultCollapsed?: boolean;\n id?: string;\n}\n\ntype InitializePanelOptionsWithId = InitializePanelOptions & { id: string };\n\nexport function initializePanel(item: InitializePanelOptionsWithId): PanelData;\nexport function initializePanel(\n item: InitializePanelOptions\n): Omit<PanelData, \"id\">;\nexport function initializePanel(\n item: InitializePanelOptions | InitializePanelOptionsWithId\n): PanelData | Omit<PanelData, \"id\"> {\n const data = {\n type: \"panel\" as const,\n min: parseUnit(item.min || \"0px\"),\n max: item.max ? parseUnit(item.max) : \"1fr\",\n collapsed: item.collapsible\n ? (item.collapsed ?? item.defaultCollapsed ?? false)\n : undefined,\n collapsible: item.collapsible,\n collapsedSize: parseUnit(item.collapsedSize ?? \"0px\"),\n onCollapseChange: item.onCollapseChange,\n collapseIsControlled: typeof item.collapsed !== \"undefined\",\n sizeBeforeCollapse: undefined,\n id: item.id,\n collapseAnimation: item.collapseAnimation,\n default: item.default ? parseUnit(item.default) : undefined,\n } satisfies Omit<PanelData, \"id\" | \"currentValue\"> & { id?: string };\n\n return { ...data, currentValue: makePixelUnit(-1) } satisfies Omit<\n PanelData,\n \"id\"\n >;\n}\n\nexport function initializePanelHandleData(item: InitializePanelHandleData) {\n return {\n type: \"handle\" as const,\n ...item,\n size: parseUnit(item.size) as ParsedPixelUnit,\n };\n}\n\n/** Parse a `Unit` string or `clamp` value */\nexport function parseUnit(unit: Unit | \"1fr\"): ParsedUnit {\n if (unit === \"1fr\") {\n unit = \"100%\";\n }\n\n if (unit.endsWith(\"px\")) {\n return makePixelUnit(parseFloat(unit));\n }\n\n if (unit.endsWith(\"%\")) {\n return makePercentUnit(parseFloat(unit));\n }\n\n throw new Error(`Invalid unit: ${unit}`);\n}\n\n/** Convert a `Unit` to a percentage of the group size */\nexport function getUnitPercentageValue(groupsSize: number, unit: ParsedUnit) {\n if (unit.type === \"pixel\") {\n return groupsSize === 0 ? 0 : unit.value.div(groupsSize).toNumber();\n }\n\n return unit.value.toNumber();\n}\n\nexport function getGroupSize(context: GroupMachineContextValue) {\n return context.orientation === \"horizontal\"\n ? context.size.width\n : context.size.height;\n}\n\n/** Get the size of a panel in pixels */\nexport function getUnitPixelValue(\n context: GroupMachineContextValue,\n unit: ParsedUnit | \"1fr\"\n) {\n const parsed = unit === \"1fr\" ? parseUnit(unit) : unit;\n return parsed.type === \"pixel\"\n ? parsed.value\n : new Big(parsed.value).div(100).mul(getGroupSize(context));\n}\n\n/** Clamp a new `currentValue` given the panel's constraints. */\nfunction clampUnit(\n context: GroupMachineContextValue,\n item: PanelData,\n value: Big.Big\n) {\n const min = getUnitPixelValue(context, item.min);\n const max = getUnitPixelValue(context, item.max);\n\n if (value.gte(min) && value.lte(max)) {\n return value;\n }\n\n return value.lt(min) ? min : max;\n}\n\n/** Get a panel with a particular ID. */\nexport function getPanelWithId(\n context: GroupMachineContextValue,\n panelId: string\n) {\n const item = context.items.find((i) => i.id === panelId);\n\n if (item && isPanelData(item)) {\n return item;\n }\n\n throw new Error(`Expected panel with id: ${panelId}`);\n}\n\n/** Get a panel with a particular ID. */\nfunction getPanelHandleIndex(\n context: GroupMachineContextValue,\n handleId: string\n) {\n const item = context.items.findIndex((i) => i.id === handleId);\n\n if (item !== -1 && isPanelHandle(context.items[item])) {\n return item;\n }\n\n throw new Error(`Expected panel handle with id: ${handleId}`);\n}\n\n/**\n * Get the panel that's collapsible next to a resize handle.\n * Will first check the left panel then the right.\n */\nexport function getCollapsiblePanelForHandleId(\n context: GroupMachineContextValue,\n handleId: string\n) {\n if (!context.items.length) {\n throw new Error(\"No items in group\");\n }\n\n const handleIndex = getPanelHandleIndex(context, handleId);\n const panelBefore = context.items[handleIndex - 1];\n const panelAfter = context.items[handleIndex + 1];\n\n if (panelBefore && isPanelData(panelBefore) && panelBefore.collapsible) {\n return panelBefore;\n }\n\n if (panelAfter && isPanelData(panelAfter) && panelAfter.collapsible) {\n return panelAfter;\n }\n\n throw new Error(`No collapsible panel found for handle: ${handleId}`);\n}\n\n/**\n * Get the handle closest to the target panel.\n * This is used to simulate collapse/expand\n */\nfunction getHandleForPanelId(\n context: GroupMachineContextValue,\n panelId: string\n) {\n const panelIndex = context.items.findIndex((item) => item.id === panelId);\n\n invariant(panelIndex !== -1, `Expected panel before: ${panelId}`);\n\n let item = context.items[panelIndex + 1];\n\n if (item && isPanelHandle(item)) {\n return { item, direction: 1 as const };\n }\n\n item = context.items[panelIndex - 1];\n\n if (item && isPanelHandle(item)) {\n return { item, direction: -1 as const };\n }\n\n throw new Error(`Cant find handle for panel: ${panelId}`);\n}\n\n/** Given the specified order props and default order of the items, order the items */\nfunction sortWithOrder(items: Array<Item>) {\n const defaultPlacement: Record<string, number> = {};\n const takenPlacements = items\n .map((i) => i.order)\n .filter((i): i is number => i !== undefined);\n\n let defaultOrder = 0;\n\n // Generate default orders for items that don't have it\n for (const item of items) {\n if (item.order === undefined) {\n while (\n takenPlacements.includes(defaultOrder) ||\n Object.values(defaultPlacement).includes(defaultOrder)\n ) {\n defaultOrder++;\n }\n\n defaultPlacement[item.id] = defaultOrder;\n }\n }\n\n const withoutOrder = items.filter((i) => i.order === undefined);\n const sortedWithOrder = items\n .filter((i) => i.order !== undefined)\n .sort((a, b) => a.order! - b.order!);\n\n for (const item of sortedWithOrder) {\n // insert item at order index\n withoutOrder.splice(item.order!, 0, item);\n }\n\n return withoutOrder;\n}\n\n/** Check if the panel has space available to add to */\nfunction panelHasSpace(\n context: GroupMachineContextValue,\n item: PanelData,\n adjustment: \"add\" | \"subtract\"\n) {\n invariant(\n item.currentValue.type === \"pixel\",\n `panelHasSpace only works with number values: ${item.id} ${item.currentValue}`\n );\n\n if (item.collapsible && !item.collapsed) {\n return true;\n }\n\n if (adjustment === \"add\") {\n return (\n item.currentValue.value.gte(getUnitPixelValue(context, item.min)) &&\n item.currentValue.value.lt(getUnitPixelValue(context, item.max))\n );\n }\n\n return (\n item.currentValue.value.gt(getUnitPixelValue(context, item.min)) &&\n item.currentValue.value.lte(getUnitPixelValue(context, item.max))\n );\n}\n\n/** Search in a `direction` for a panel that still has space to expand. */\nfunction findPanelWithSpace(\n context: GroupMachineContextValue,\n items: Array<Item>,\n start: number,\n direction: number,\n adjustment: \"add\" | \"subtract\",\n disregardCollapseBuffer?: boolean\n) {\n const slice =\n direction === -1 ? items.slice(0, start + 1).reverse() : items.slice(start);\n\n for (const panel of slice) {\n if (!isPanelData(panel)) {\n continue;\n }\n\n const targetPanel = disregardCollapseBuffer\n ? createUnrestrainedPanel(context, panel)\n : panel;\n\n if (panelHasSpace(context, targetPanel, adjustment)) {\n return panel;\n }\n }\n}\n\n/** Add up all the static values in the layout */\nfunction getStaticWidth(context: GroupMachineContextValue) {\n let width = new Big(0);\n\n for (const item of context.items) {\n if (isPanelHandle(item)) {\n width = width.add(item.size.value);\n } else if (\n isPanelData(item) &&\n item.collapsed &&\n item.currentValue.type === \"pixel\"\n ) {\n width = width.add(item.currentValue.value);\n } else if (\n isPanelData(item) &&\n item.default &&\n item.default.type === \"pixel\"\n ) {\n width = width.add(item.default.value);\n }\n }\n\n return width;\n}\n\nfunction formatUnit(unit: ParsedUnit): Unit {\n if (unit.type === \"pixel\") {\n return `${unit.value.toNumber()}px`;\n }\n\n return `${unit.value.toNumber()}%`;\n}\n\n/** Build the grid template from the item values. */\nexport function buildTemplate(context: GroupMachineContextValue) {\n const staticWidth = getStaticWidth(context);\n\n return context.items\n .map((item) => {\n if (item.type === \"panel\") {\n const min = formatUnit(item.min);\n\n if (\n item.currentValue.type === \"pixel\" &&\n item.currentValue.value.toNumber() !== -1\n ) {\n if (item.currentValue.value.toNumber() < 0) {\n return \"0px\";\n }\n\n return formatUnit(item.currentValue);\n } else if (item.currentValue.type === \"percent\") {\n const max = item.max === \"1fr\" ? \"100%\" : formatUnit(item.max);\n return `minmax(${min}, min(calc(${item.currentValue.value} * (100% - ${staticWidth}px)), ${max}))`;\n } else if (item.collapsible && item.collapsed) {\n return formatUnit(item.collapsedSize);\n } else if (item.default) {\n return formatUnit(item.default);\n }\n\n const max = item.max === \"1fr\" ? \"1fr\" : formatUnit(item.max);\n return `minmax(${min}, ${max})`;\n }\n\n return formatUnit(item.size);\n })\n .join(\" \");\n}\n\nfunction addDeDuplicatedItems(items: Array<Item>, newItem: Item) {\n const currentItemIndex = items.findIndex(\n (item) =>\n item.id === newItem.id ||\n (typeof item.order === \"number\" && item.order === newItem.order)\n );\n\n let restItems = items;\n\n if (currentItemIndex !== -1) {\n restItems = items.filter((_, index) => index !== currentItemIndex);\n }\n\n return sortWithOrder([...restItems, newItem]);\n}\n\nfunction createUnrestrainedPanel(_: GroupMachineContextValue, data: PanelData) {\n return {\n ...data,\n min: makePixelUnit(-100000),\n max: makePixelUnit(100000),\n };\n}\n\n// #endregion\n\n// #region Update Logic\n\n/**\n * This is the main meat of the layout logic.\n * It's responsible for figuring out how to distribute the space\n * amongst the panels.\n *\n * It's built around applying small deltas to panels relative to their\n * the resize handles.\n *\n * As much as possible we try to rely on the browser to do the layout.\n * During the initial layout we rely on CSS grid and a group might be\n * defined like this:\n *\n * ```css\n * grid-template-columns: minmax(100px, 1fr) 1px minmax(100px, 300px);\n * ```\n *\n * Without any resizing this is nice and simple and the components don't do much.\n *\n * Once the user starts resizing the layout will be more complex.\n *\n * It's broken down into 3 phases:\n *\n * 1. `prepareItems` - The size of the group has been measure and we\n * can convert all the panel sizes into pixels. Converting into pixels\n * makes doing the math for the updates easier.\n *\n * ```css\n * grid-template-columns: 500px 1px 300px;\n * ```\n *\n * 2. `updateLayout` - This is where the actual updates are applied.\n * This is where the user's drag interactions are applied. We also\n * use this to collapse/expand panels by simulating a drag interaction.\n *\n * ```css\n * grid-template-columns: 490px 1px 310px;\n * ```\n *\n * 3. `commitLayout` - Once the updates have been applied we convert the\n * updated sizes back into a format that allows for easy resizing without\n * lots of updates.\n *\n * ```css\n * grid-template-columns: minmax(100px, min(calc(0.06117 * (100% - 1px)), 100%)) 1px minmax(100px, min(calc(0.0387 * (100% - 1px)), 300px));\n * ```\n *\n * When another update loop is triggered the above template will be converted back to pixels.\n */\n\n/** Converts the items to pixels */\nexport function prepareItems(context: GroupMachineContextValue) {\n const newItems = [...context.items];\n const staticWidth = getStaticWidth(context);\n\n for (const item of newItems) {\n if (!item || !isPanelData(item)) {\n continue;\n }\n\n if (item.currentValue.type === \"pixel\") {\n continue;\n }\n\n const pixel = new Big(getGroupSize(context))\n .minus(staticWidth)\n .mul(item.currentValue.value);\n\n item.currentValue = makePixelUnit(pixel.toNumber());\n }\n\n return newItems;\n}\n\n/** On every mouse move we distribute the space added */\nfunction updateLayout(\n context: GroupMachineContextValue,\n dragEvent:\n | (DragHandleEvent & {\n controlled?: boolean;\n disregardCollapseBuffer?: never;\n })\n | {\n type: \"collapsePanel\";\n value: MoveMoveEvent;\n handleId: string;\n controlled?: boolean;\n disregardCollapseBuffer?: boolean;\n }\n): Partial<GroupMachineContextValue> {\n const handleIndex = getPanelHandleIndex(context, dragEvent.handleId);\n const handle = context.items[handleIndex] as PanelHandleData;\n const newItems = [...context.items];\n\n let moveAmount =\n context.orientation === \"horizontal\"\n ? dragEvent.value.deltaX\n : dragEvent.value.deltaY;\n\n if (dragEvent.value.shiftKey) {\n moveAmount *= 15;\n }\n\n if (moveAmount === 0) {\n return {};\n }\n\n const moveDirection = moveAmount / Math.abs(moveAmount);\n\n // Go forward into the shrinking panels to find a panel that still has space.\n const panelBefore = findPanelWithSpace(\n context,\n newItems,\n handleIndex + moveDirection,\n moveDirection,\n \"subtract\",\n dragEvent.disregardCollapseBuffer\n );\n\n // No panel with space, just record the drag overshoot\n if (!panelBefore) {\n return {\n dragOvershoot: context.dragOvershoot.add(moveAmount),\n };\n }\n\n invariant(isPanelData(panelBefore), `Expected panel before: ${handle.id}`);\n\n const panelAfter = newItems[handleIndex - moveDirection];\n\n invariant(\n panelAfter && isPanelData(panelAfter),\n `Expected panel after: ${handle.id}`\n );\n\n if (\n panelAfter.currentValue.value.eq(getUnitPixelValue(context, panelAfter.max))\n ) {\n return {\n dragOvershoot: context.dragOvershoot.add(moveAmount),\n };\n }\n\n const newDragOvershoot = context.dragOvershoot.add(moveAmount);\n\n // Don't let the panel expand until the threshold is reached\n if (!dragEvent.disregardCollapseBuffer) {\n const isInLeftBuffer = newDragOvershoot.lt(0) && moveDirection > 0;\n const isInLeftOvershoot = newDragOvershoot.gt(0) && moveDirection > 0;\n const isInRightBuffer = newDragOvershoot.gt(0) && moveDirection < 0;\n const isInRightOvershoot = newDragOvershoot.lt(0) && moveDirection < 0;\n const potentialNewValue = panelAfter.currentValue.value.add(\n new Big(newDragOvershoot).mul(isInRightBuffer ? moveDirection : 1)\n );\n const min = getUnitPixelValue(context, panelAfter.min);\n\n const isInDragBugger =\n newDragOvershoot.abs().lt(COLLAPSE_THRESHOLD) &&\n panelAfter.collapsible &&\n panelAfter.collapsed &&\n (isInLeftOvershoot || isInRightOvershoot);\n\n if (\n potentialNewValue.lte(min) &&\n (newDragOvershoot.eq(0) ||\n isInRightBuffer ||\n isInLeftBuffer ||\n isInDragBugger)\n ) {\n return { dragOvershoot: newDragOvershoot };\n }\n }\n\n // Don't let the panel collapse until the threshold is reached\n if (\n panelBefore.collapsible &&\n panelBefore.currentValue.value ===\n getUnitPixelValue(context, panelBefore.min)\n ) {\n const potentialNewValue = panelBefore.currentValue.value.sub(\n newDragOvershoot.abs()\n );\n\n if (\n newDragOvershoot.abs().lt(COLLAPSE_THRESHOLD) &&\n potentialNewValue.gt(\n getUnitPixelValue(context, panelBefore.collapsedSize)\n )\n ) {\n return { dragOvershoot: newDragOvershoot };\n }\n }\n\n // Apply the move amount to the panel before the slider\n const unrestrainedPanelBefore = createUnrestrainedPanel(context, panelBefore);\n const panelBeforePreviousValue = panelBefore.currentValue.value;\n const panelBeforeNewValueRaw = panelBefore.currentValue.value.minus(\n new Big(moveAmount).mul(moveDirection)\n );\n let panelBeforeNewValue = dragEvent.disregardCollapseBuffer\n ? clampUnit(context, unrestrainedPanelBefore, panelBeforeNewValueRaw)\n : clampUnit(context, panelBefore, panelBeforeNewValueRaw);\n\n // Also apply the move amount the panel after the slider\n const unrestrainedPanelAfter = createUnrestrainedPanel(context, panelAfter);\n const panelAfterPreviousValue = panelAfter.currentValue.value;\n const applied = panelBeforePreviousValue.minus(panelBeforeNewValue);\n const panelAfterNewValueRaw = panelAfter.currentValue.value.add(applied);\n let panelAfterNewValue = dragEvent.disregardCollapseBuffer\n ? clampUnit(context, unrestrainedPanelAfter, panelAfterNewValueRaw)\n : clampUnit(context, panelAfter, panelAfterNewValueRaw);\n\n if (dragEvent.disregardCollapseBuffer) {\n if (panelAfter.collapsible && panelAfter.collapsed) {\n panelAfter.collapsed = false;\n }\n }\n // If the panel was collapsed, expand it\n // We need to re-apply the move amount since the the expansion of the\n // collapsed panel disregards that.\n else if (panelAfter.collapsible && panelAfter.collapsed) {\n if (\n panelAfter.onCollapseChange?.current &&\n panelAfter.collapseIsControlled &&\n !dragEvent.controlled\n ) {\n panelAfter.onCollapseChange.current(false);\n return { dragOvershoot: newDragOvershoot };\n }\n\n // Calculate the amount \"extra\" after the minSize the panel should grow\n const extra =\n // Take the size it was at\n getUnitPixelValue(context, panelAfter.collapsedSize)\n // Add in the full overshoot so the cursor is near the slider\n .add(context.dragOvershoot.abs())\n // Subtract the min size of the panel\n .sub(\n panelAfterNewValue\n // Then re-add the move amount\n .add(Math.abs(moveAmount))\n );\n\n panelAfter.collapsed = false;\n\n if (extra.gt(0)) {\n panelAfterNewValue = panelAfterNewValue.add(extra);\n }\n\n panelBeforeNewValue = panelBeforeNewValue\n // Subtract the delta of the after panel's size\n .minus(\n panelAfterNewValue\n .minus(panelAfterPreviousValue)\n // And then re-apply the movement value\n .minus(Math.abs(moveAmount))\n );\n\n if (\n panelAfter.onCollapseChange?.current &&\n !panelAfter.collapseIsControlled &&\n !dragEvent.controlled\n ) {\n panelAfter.onCollapseChange.current(false);\n }\n }\n\n const panelBeforeIsAboutToCollapse =\n panelBefore.currentValue.value ===\n getUnitPixelValue(context, panelBefore.min);\n\n // If the panel was expanded and now is at it's min size, collapse it\n if (\n !dragEvent.disregardCollapseBuffer &&\n panelBefore.collapsible &&\n panelBeforeIsAboutToCollapse\n ) {\n if (\n panelBefore.onCollapseChange?.current &&\n panelBefore.collapseIsControlled &&\n !dragEvent.controlled\n ) {\n panelBefore.onCollapseChange.current(true);\n return { dragOvershoot: newDragOvershoot };\n }\n\n // Make it collapsed\n panelBefore.collapsed = true;\n panelBeforeNewValue = getUnitPixelValue(context, panelBefore.collapsedSize);\n // Add the extra space created to the before panel\n panelAfterNewValue = panelAfterNewValue.add(\n panelBeforePreviousValue.minus(panelBeforeNewValue)\n );\n\n if (\n panelBefore.onCollapseChange?.current &&\n !panelBefore.collapseIsControlled &&\n !dragEvent.controlled\n ) {\n panelBefore.onCollapseChange.current(true);\n }\n }\n\n panelBefore.currentValue = { type: \"pixel\", value: panelBeforeNewValue };\n panelAfter.currentValue = { type: \"pixel\", value: panelAfterNewValue };\n\n const leftoverSpace = new Big(getGroupSize(context)).minus(\n newItems.reduce(\n (acc, b) => acc.add(isPanelData(b) ? b.currentValue.value : b.size.value),\n new Big(0)\n )\n );\n\n if (leftoverSpace.gt(0)) {\n panelBefore.currentValue.value =\n panelBefore.currentValue.value.add(leftoverSpace);\n }\n\n return { items: newItems };\n}\n\n/** Converts the items to percentages */\nexport function commitLayout(context: GroupMachineContextValue) {\n const newItems = [...context.items];\n\n // First set all the static width\n newItems.forEach((item, index) => {\n if (item.type !== \"panel\") {\n return;\n }\n\n if (item.collapsed) {\n newItems[index] = {\n ...item,\n currentValue: item.collapsedSize,\n };\n }\n });\n\n const staticWidth = getStaticWidth({ ...context, items: newItems });\n\n newItems.forEach((item, index) => {\n if (item.type !== \"panel\" || item.collapsed) {\n return;\n }\n\n newItems[index] = {\n ...item,\n currentValue: {\n type: \"percent\",\n value: item.currentValue.value.div(\n new Big(getGroupSize(context)).sub(staticWidth)\n ),\n },\n };\n });\n\n return newItems;\n}\n\nexport function dragHandlePayload({\n delta,\n orientation,\n shiftKey = false,\n}: {\n delta: number;\n orientation: Orientation;\n shiftKey?: boolean;\n}) {\n return {\n type: \"move\",\n pointerType: \"keyboard\",\n shiftKey,\n ctrlKey: false,\n altKey: false,\n metaKey: false,\n deltaX: orientation === \"horizontal\" ? delta : 0,\n deltaY: orientation === \"horizontal\" ? 0 : delta,\n } as const;\n}\n\n/** Iteratively applies a large delta value simulating a user's drag */\nfunction iterativelyUpdateLayout({\n context,\n handleId,\n delta,\n direction,\n controlled,\n disregardCollapseBuffer,\n}: {\n context: GroupMachineContextValue;\n handleId: string;\n delta: Big.Big;\n direction: -1 | 1;\n controlled?: boolean;\n disregardCollapseBuffer?: boolean;\n}) {\n let newContext: Partial<GroupMachineContextValue> = context;\n\n for (let i = 0; i < delta.abs().toNumber(); i++) {\n newContext = updateLayout(\n {\n ...context,\n ...newContext,\n },\n {\n handleId,\n type: \"collapsePanel\",\n controlled,\n disregardCollapseBuffer,\n value: dragHandlePayload({\n delta: direction,\n orientation: context.orientation,\n }),\n }\n );\n }\n\n return newContext;\n}\n\nfunction applyDeltaInBothDirections(\n context: GroupMachineContextValue,\n newItems: Array<Item>,\n itemIndex: number,\n delta: Big.Big\n) {\n let hasTriedBothDirections = false;\n let direction = 1;\n let deltaLeft = new Big(delta);\n\n // Starting from where the items was removed add space to the panels around it.\n // This is only needed for conditional rendering.\n while (deltaLeft.toNumber() !== 0) {\n const targetPanel = findPanelWithSpace(\n context,\n newItems,\n itemIndex + direction,\n direction,\n delta.gt(0) ? \"add\" : \"subtract\"\n );\n\n if (!targetPanel) {\n if (hasTriedBothDirections) {\n break;\n } else {\n direction = direction === 1 ? -1 : 1;\n hasTriedBothDirections = true;\n continue;\n }\n }\n\n const oldValue = targetPanel.currentValue.value;\n const newValue = clampUnit(context, targetPanel, oldValue.add(deltaLeft));\n\n targetPanel.currentValue.value = newValue;\n deltaLeft = deltaLeft.sub(newValue.sub(oldValue));\n direction = direction === 1 ? -1 : 1;\n }\n}\n\n// #endregion\n\n// #region Machine\n\ninterface AnimationActorInput {\n context: GroupMachineContextValue;\n event: CollapsePanelEvent | ExpandPanelEvent;\n send: (event: GroupMachineEvent) => void;\n}\n\ninterface AnimationActorOutput {\n panelId: string;\n action: \"expand\" | \"collapse\";\n}\n\nconst animationActor = fromPromise<\n AnimationActorOutput | undefined,\n AnimationActorInput\n>(\n ({ input: { send, context, event } }) =>\n new Promise<AnimationActorOutput | undefined>((resolve) => {\n const panel = getPanelWithId(context, event.panelId);\n const handle = getHandleForPanelId(context, event.panelId);\n\n let direction = new Big(handle.direction);\n let fullDelta = new Big(0);\n\n if (event.type === \"expandPanel\") {\n fullDelta = new Big(\n panel.sizeBeforeCollapse ?? getUnitPixelValue(context, panel.min)\n ).minus(panel.currentValue.value);\n } else {\n const collapsedSize = getUnitPixelValue(context, panel.collapsedSize);\n\n panel.sizeBeforeCollapse = panel.currentValue.value.toNumber();\n direction = direction.mul(new Big(-1));\n fullDelta = panel.currentValue.value.minus(collapsedSize);\n }\n\n const fps = 60;\n const { duration, ease } = getCollapseAnimation(panel);\n const totalFrames = Math.ceil(\n panel.collapseAnimation ? duration / (1000 / fps) : 1\n );\n let frame = 0;\n let appliedDelta = new Big(0);\n\n function renderFrame() {\n const progress = ++frame / totalFrames;\n const e = new Big(panel.collapseAnimation ? ease(progress) : 1);\n const delta = e.mul(fullDelta).sub(appliedDelta).mul(direction);\n\n send({\n type: \"applyDelta\",\n handleId: handle.item.id,\n delta: delta.toNumber(),\n });\n\n appliedDelta = appliedDelta.add(\n delta\n .abs()\n .mul(\n (delta.gt(0) && direction.lt(0)) ||\n (delta.lt(0) && direction.gt(0))\n ? -1\n : 1\n )\n );\n\n if (e.eq(1)) {\n const action = event.type === \"expandPanel\" ? \"expand\" : \"collapse\";\n resolve({ panelId: panel.id, action });\n return false;\n }\n\n return true;\n }\n\n raf(renderFrame);\n })\n);\n\nexport const groupMachine = createMachine(\n {\n initial: \"idle\",\n types: {\n context: {} as GroupMachineContextValue,\n events: {} as GroupMachineEvent,\n input: {} as {\n autosaveId?: string;\n orientation?: Orientation;\n groupId: string;\n initialItems?: Item[];\n },\n },\n context: ({ input }) => ({\n size: { width: 0, height: 0 },\n items: input.initialItems || [],\n orientation: input.orientation || \"horizontal\",\n dragOvershoot: new Big(0),\n autosaveId: input.autosaveId,\n groupId: input.groupId,\n }),\n states: {\n idle: {\n on: {\n setActualItemsSize: { actions: [\"recordActualItemSize\"] },\n dragHandleStart: { target: \"dragging\" },\n setPanelPixelSize: {\n actions: [\"prepare\", \"onSetPanelSize\", \"commit\"],\n },\n collapsePanel: [\n {\n actions: \"notifyCollapseToggle\",\n guard: \"shouldNotifyCollapseToggle\",\n },\n { target: \"togglingCollapse\" },\n ],\n expandPanel: [\n {\n actions: \"notifyCollapseToggle\",\n guard: \"shouldNotifyCollapseToggle\",\n },\n { target: \"togglingCollapse\" },\n ],\n },\n },\n dragging: {\n entry: [\"prepare\"],\n on: {\n dragHandle: { actions: [\"onDragHandle\"] },\n dragHandleEnd: { target: \"idle\" },\n collapsePanel: {\n guard: \"shouldCollapseToggle\",\n actions: \"runCollapseToggle\",\n },\n expandPanel: {\n guard: \"shouldCollapseToggle\",\n actions: \"runCollapseToggle\",\n },\n },\n exit: [\"commit\", \"onAutosave\"],\n },\n togglingCollapse: {\n entry: [\"prepare\"],\n invoke: {\n src: \"animation\",\n input: (i) => ({ ...i, send: i.self.send }),\n onDone: {\n target: \"idle\",\n actions: [\"onToggleCollapseComplete\", \"commit\", \"onAutosave\"],\n },\n },\n on: {\n applyDelta: { actions: [\"onApplyDelta\"] },\n },\n },\n },\n on: {\n registerPanel: { actions: [\"assignPanelData\"] },\n registerDynamicPanel: {\n actions: [\"prepare\", \"onRegisterDynamicPanel\", \"commit\", \"onAutosave\"],\n },\n unregisterPanel: {\n actions: [\"prepare\", \"removeItem\", \"commit\", \"onAutosave\"],\n },\n registerPanelHandle: { actions: [\"assignPanelHandleData\"] },\n unregisterPanelHandle: {\n actions: [\"prepare\", \"removeItem\", \"commit\", \"onAutosave\"],\n },\n setSize: { actions: [\"updateSize\"] },\n setOrientation: { actions: [\"updateOrientation\"] },\n },\n },\n {\n guards: {\n shouldNotifyCollapseToggle: ({ context, event }) => {\n isEvent(event, [\"collapsePanel\", \"expandPanel\"]);\n const panel = getPanelWithId(context, event.panelId);\n return !event.controlled && panel.collapseIsControlled === true;\n },\n shouldCollapseToggle: ({ context, event }) => {\n isEvent(event, [\"collapsePanel\", \"expandPanel\"]);\n const panel = getPanelWithId(context, event.panelId);\n return panel.collapseIsControlled === true;\n },\n },\n actors: {\n animation: animationActor,\n },\n actions: {\n notifyCollapseToggle: ({ context, event }) => {\n isEvent(event, [\"collapsePanel\", \"expandPanel\"]);\n const panel = getPanelWithId(context, event.panelId);\n panel.onCollapseChange?.current?.(!panel.collapsed);\n },\n runCollapseToggle: enqueueActions(({ context, event, enqueue }) => {\n isEvent(event, [\"collapsePanel\", \"expandPanel\"]);\n\n const handle = getHandleForPanelId(context, event.panelId);\n // When collapsing a panel it will be in the opposite direction\n // that handle assumes\n const delta =\n event.type === \"collapsePanel\"\n ? handle.direction * -1\n : handle.direction;\n const newContext = updateLayout(context, {\n handleId: handle.item.id,\n type: \"dragHandle\",\n controlled: event.controlled,\n value: dragHandlePayload({ delta, orientation: context.orientation }),\n });\n\n enqueue.assign(newContext);\n }),\n onToggleCollapseComplete: assign({\n items: ({ context, event: e }) => {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const output = (e as any).output as AnimationActorOutput;\n invariant(output, \"Expected output from animation actor\");\n\n const panel = getPanelWithId(context, output.panelId);\n panel.collapsed = output.action === \"collapse\";\n\n if (panel.collapsed) {\n panel.currentValue = panel.collapsedSize;\n }\n\n return context.items;\n },\n }),\n updateSize: assign({\n size: ({ event }) => {\n isEvent(event, [\"setSize\"]);\n return event.size;\n },\n }),\n recordActualItemSize: assign({\n items: ({ context, event }) => {\n isEvent(event, [\"setActualItemsSize\"]);\n\n const orientation = context.orientation;\n\n for (const [id, size] of Object.entries(event.childrenSizes)) {\n const item = context.items.find((i) => i.id === id);\n\n if (!isPanelData(item)) {\n continue;\n }\n\n item.currentValue = makePixelUnit(\n orientation === \"horizontal\" ? size.width : size.height\n );\n }\n\n return commitLayout(context);\n },\n }),\n updateOrientation: assign({\n orientation: ({ event }) => {\n isEvent(event, [\"setOrientation\"]);\n return event.orientation;\n },\n }),\n assignPanelData: assign({\n items: ({ context, event }) => {\n isEvent(event, [\"registerPanel\"]);\n\n return addDeDuplicatedItems(context.items, {\n type: \"panel\",\n currentValue: makePixelUnit(-1),\n ...event.data,\n });\n },\n }),\n onRegisterDynamicPanel: assign({\n items: ({ context, event }) => {\n isEvent(event, [\"registerDynamicPanel\"]);\n\n let currentValue: ParsedUnit = makePixelUnit(0);\n\n if (\n event.data.collapsible &&\n event.data.collapsed &&\n event.data.collapsedSize\n ) {\n currentValue = event.data.collapsedSize;\n } else if (event.data.default) {\n currentValue = event.data.default;\n } else {\n currentValue = event.data.min;\n }\n\n const newItems = addDeDuplicatedItems(context.items, {\n type: \"panel\",\n ...event.data,\n currentValue,\n });\n const itemIndex = newItems.findIndex(\n (item) => item.id === event.data.id\n );\n const newContext = { ...context, items: newItems };\n const overflowDueToHandles = context.items\n .reduce((acc, i) => {\n if (isPanelHandle(i)) {\n return acc.add(getUnitPixelValue(context, i.size));\n }\n\n return acc.add(i.currentValue.value);\n }, new Big(0))\n .minus(getGroupSize(context));\n\n applyDeltaInBothDirections(\n newContext,\n newItems,\n itemIndex,\n currentValue.value.add(overflowDueToHandles).neg()\n );\n\n return newItems;\n },\n }),\n assignPanelHandleData: assign({\n items: ({ context, event }) => {\n isEvent(event, [\"registerPanelHandle\"]);\n\n const unit = parseUnit(event.data.size);\n\n return addDeDuplicatedItems(context.items, {\n type: \"handle\",\n ...event.data,\n size: {\n type: \"pixel\",\n value: new Big(unit.value),\n },\n });\n },\n }),\n removeItem: assign({\n items: ({ context, event }) => {\n isEvent(event, [\"unregisterPanel\", \"unregisterPanelHandle\"]);\n const itemIndex = context.items.findIndex(\n (item) => item.id === event.id\n );\n const item = context.items[itemIndex];\n\n if (!item) {\n return context.items;\n }\n\n const newItems = context.items.filter((i) => i.id !== event.id);\n const removedSize = isPanelData(item)\n ? item.currentValue.value\n : item.size.value;\n\n applyDeltaInBothDirections(context, newItems, itemIndex, removedSize);\n\n return newItems;\n },\n }),\n prepare: assign({\n items: ({ context }) => prepareItems(context),\n }),\n onDragHandle: enqueueActions(({ context, event, enqueue }) => {\n isEvent(event, [\"dragHandle\"]);\n enqueue.assign(updateLayout(context, event));\n }),\n commit: assign({\n dragOvershoot: new Big(0),\n items: ({ context }) => commitLayout(context),\n }),\n onApplyDelta: assign(({ context, event }) => {\n isEvent(event, [\"applyDelta\"]);\n return updateLayout(context, {\n handleId: event.handleId,\n type: \"collapsePanel\",\n disregardCollapseBuffer: true,\n value: dragHandlePayload({\n delta: event.delta,\n orientation: context.orientation,\n }),\n });\n }),\n onSetPanelSize: enqueueActions(({ context, event, enqueue }) => {\n isEvent(event, [\"setPanelPixelSize\"]);\n\n const panel = getPanelWithId(context, event.panelId);\n const handle = getHandleForPanelId(context, event.panelId);\n const current = panel.currentValue.value;\n const newSize = clampUnit(\n context,\n panel,\n getUnitPixelValue(context, parseUnit(event.size))\n );\n const isBigger = newSize > current;\n const delta = isBigger\n ? newSize.minus(current)\n : current.minus(newSize);\n\n enqueue.assign(\n iterativelyUpdateLayout({\n context,\n direction: (handle.direction * (isBigger ? 1 : -1)) as -1 | 1,\n handleId: handle.item.id,\n delta,\n })\n );\n }),\n },\n }\n);\n\n// #endregion\n"]}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"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","sourcesContent":["import { raf } from \"@react-spring/rafz\";\nimport {\n createMachine,\n assign,\n enqueueActions,\n fromPromise,\n Snapshot,\n} from \"xstate\";\nimport invariant from \"invariant\";\nimport Big from \"big.js\";\n\n// #region Constants\n\n/** The default amount a user can `dragOvershoot` before the panel collapses */\nconst COLLAPSE_THRESHOLD = 50;\n\n// #endregion\n\n// #region Types\n\nexport type PixelUnit = `${number}px`;\nexport type PercentUnit = `${number}%`;\nexport type Unit = PixelUnit | PercentUnit;\ntype Orientation = \"horizontal\" | \"vertical\";\n\ninterface ParsedPercentUnit {\n type: \"percent\";\n value: Big.Big;\n}\n\ninterface ParsedPixelUnit {\n type: \"pixel\";\n value: Big.Big;\n}\n\ntype ParsedUnit = ParsedPercentUnit | ParsedPixelUnit;\n\nexport function makePercentUnit(value: number): ParsedPercentUnit {\n return { type: \"percent\", value: new Big(value) };\n}\n\nexport function makePixelUnit(value: number): ParsedPixelUnit {\n return { type: \"pixel\", value: new Big(value) };\n}\n\ninterface MoveMoveEvent {\n shiftKey: boolean;\n ctrlKey: boolean;\n metaKey: boolean;\n altKey: boolean;\n deltaX: number;\n deltaY: number;\n}\n\nexport interface Constraints<T extends ParsedUnit | Unit = ParsedUnit> {\n /** The minimum size of the panel */\n min?: T;\n /** The maximum size of the panel */\n max?: T;\n /** The default size of the panel */\n default?: T;\n /** Whether the panel is collapsible */\n collapsible?: boolean;\n /** Whether the panel should initially render as collapsed */\n defaultCollapsed?: boolean;\n /** The size of the panel once collapsed */\n collapsedSize?: T;\n}\n\ninterface Order {\n /**\n * When dynamically rendering panels/handles you need to add the order prop.\n * This tells the component what place the items should be in once rendered.\n */\n order?: number;\n}\n\nexport interface PanelData\n extends Omit<Constraints, \"min\" | \"max\" | \"collapsedSize\">,\n Required<Pick<Constraints, \"min\" | \"collapsedSize\">>,\n Order {\n max: ParsedUnit | \"1fr\";\n type: \"panel\";\n id: string;\n /** Whether the collapsed state is controlled by the consumer or not */\n collapseIsControlled?: boolean;\n /** A ref to the latest \"collapseChange\" function provided by the user */\n onCollapseChange?: {\n current: ((isCollapsed: boolean) => void) | null | undefined;\n };\n /**\n * The current value for the item in the grid\n */\n currentValue: ParsedUnit;\n /** Whether the panel is currently collapsed */\n collapsed: boolean | undefined;\n /**\n * The size the panel was before being collapsed.\n * This is used to re-open the panel at the same size.\n * If the panel starts out collapsed it will use the `min`.\n */\n sizeBeforeCollapse: number | undefined;\n /** Animate the collapse/expand */\n collapseAnimation?:\n | CollapseAnimation\n | { duration: number; easing: CollapseAnimation | ((t: number) => number) };\n}\n\nfunction getCollapseAnimation(panel: PanelData) {\n let easeFn = collapseAnimations.linear;\n let duration = 300;\n\n if (panel.collapseAnimation) {\n if (typeof panel.collapseAnimation === \"string\") {\n easeFn = collapseAnimations[panel.collapseAnimation];\n } else if (\"duration\" in panel.collapseAnimation) {\n duration = panel.collapseAnimation.duration ?? duration;\n easeFn =\n typeof panel.collapseAnimation.easing === \"function\"\n ? panel.collapseAnimation.easing\n : collapseAnimations[panel.collapseAnimation.easing];\n }\n }\n\n return { ease: easeFn, duration };\n}\n\n/** Copied from https://github.com/d3/d3-ease */\nconst collapseAnimations = {\n \"ease-in-out\": function quadInOut(t: number) {\n return ((t *= 2) <= 1 ? t * t : --t * (2 - t) + 1) / 2;\n },\n bounce: function backInOut(t: number) {\n const s = 1.70158;\n return (\n ((t *= 2) < 1\n ? t * t * ((s + 1) * t - s)\n : (t -= 2) * t * ((s + 1) * t + s) + 2) / 2\n );\n },\n linear: function linear(t: number) {\n return +t;\n },\n};\n\ntype CollapseAnimation = keyof typeof collapseAnimations;\n\nexport interface PanelHandleData extends Order {\n type: \"handle\";\n id: string;\n /**\n * The size of the panel handle.\n * Needed to correctly calculate the percentage of modified panels.\n */\n size: ParsedPixelUnit;\n}\n\nexport type Item = PanelData | PanelHandleData;\n\ninterface RegisterPanelEvent {\n /** Register a new panel with the state machine */\n type: \"registerPanel\";\n data: Omit<PanelData, \"type\" | \"currentValue\" | \"defaultCollapsed\">;\n}\n\ninterface RegisterDynamicPanelEvent extends Omit<RegisterPanelEvent, \"type\"> {\n /** Register a new panel with the state machine */\n type: \"registerDynamicPanel\";\n}\n\ninterface UnregisterPanelEvent {\n /** Remove a panel from the state machine */\n type: \"unregisterPanel\";\n id: string;\n}\n\nexport type InitializePanelHandleData = Omit<\n PanelHandleData,\n \"type\" | \"size\"\n> & {\n size: PixelUnit | ParsedPixelUnit;\n};\n\ninterface RegisterPanelHandleEvent {\n /** Register a new panel handle with the state machine */\n type: \"registerPanelHandle\";\n data: InitializePanelHandleData;\n}\n\ninterface UnregisterPanelHandleEvent {\n /** Remove a panel handle from the state machine */\n type: \"unregisterPanelHandle\";\n id: string;\n}\n\ninterface DragHandleStartEvent {\n /** Start a drag interaction */\n type: \"dragHandleStart\";\n /** The handle being interacted with */\n handleId: string;\n}\n\ninterface DragHandleEvent {\n /** Update the layout according to how the handle moved */\n type: \"dragHandle\";\n /** The handle being interacted with */\n handleId: string;\n value: MoveMoveEvent;\n}\n\ninterface DragHandleEndEvent {\n /** End a drag interaction */\n type: \"dragHandleEnd\";\n /** The handle being interacted with */\n handleId: string;\n}\n\nexport interface Rect {\n width: number;\n height: number;\n}\n\ninterface SetSizeEvent {\n /** Set the size of the whole group */\n type: \"setSize\";\n size: Rect;\n}\n\ninterface SetActualItemsSizeEvent {\n /** Set the size of the whole group */\n type: \"setActualItemsSize\";\n childrenSizes: Record<string, Rect>;\n}\n\ninterface ApplyDeltaEvent {\n type: \"applyDelta\";\n delta: number;\n handleId: string;\n}\n\ninterface SetOrientationEvent {\n /** Set the orientation of the group */\n type: \"setOrientation\";\n orientation: Orientation;\n}\n\ninterface ControlledCollapseToggle {\n /**\n * This is used to react to the controlled panel \"collapse\" prop updating.\n * This will force an update to be applied and skip calling the user's `onCollapseChanged`\n */\n controlled?: boolean;\n}\n\ninterface CollapsePanelEvent extends ControlledCollapseToggle {\n /** Collapse a panel */\n type: \"collapsePanel\";\n /** The panel to collapse */\n panelId: string;\n}\n\ninterface ExpandPanelEvent extends ControlledCollapseToggle {\n /** Expand a panel */\n type: \"expandPanel\";\n /** The panel to expand */\n panelId: string;\n}\n\ninterface SetPanelPixelSizeEvent {\n /**\n * This event is used by the imperative panel API.\n * With this the user can set the panel's size to an explicit value.\n * This is done by faking interaction with the handles so min/max will still\n * be respected.\n */\n type: \"setPanelPixelSize\";\n /** The panel to apply the size to */\n panelId: string;\n /** The size to apply to the panel */\n size: Unit;\n}\n\nexport interface GroupMachineContextValue {\n /** The items in the group */\n items: Array<Item>;\n /** The available space in the group */\n size: Rect;\n /** The orientation of the grid */\n orientation: Orientation;\n /** How much the drag has overshot the handle */\n dragOvershoot: Big.Big;\n /** An id to use for autosaving the layout */\n autosaveId?: string;\n groupId: string;\n}\n\nexport type GroupMachineEvent =\n | RegisterPanelEvent\n | RegisterDynamicPanelEvent\n | UnregisterPanelEvent\n | RegisterPanelHandleEvent\n | UnregisterPanelHandleEvent\n | DragHandleEvent\n | SetSizeEvent\n | SetOrientationEvent\n | DragHandleStartEvent\n | DragHandleEndEvent\n | CollapsePanelEvent\n | ExpandPanelEvent\n | SetPanelPixelSizeEvent\n | ApplyDeltaEvent\n | SetActualItemsSizeEvent;\n\ntype EventForType<T extends GroupMachineEvent[\"type\"]> = Extract<\n GroupMachineEvent,\n { type: T }\n>;\n\n// #endregion\n\n// #region Helpers\n\nexport function prepareSnapshot(snapshot: Snapshot<unknown>) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const snapshotContext = (snapshot as any)\n .context as unknown as GroupMachineContextValue;\n\n snapshotContext.dragOvershoot = new Big(snapshotContext.dragOvershoot);\n\n for (const item of snapshotContext.items) {\n if (isPanelData(item)) {\n item.currentValue.value = new Big(item.currentValue.value);\n\n if (item.collapsedSize) {\n item.collapsedSize.value = new Big(item.collapsedSize.value);\n }\n\n if (item.min) {\n item.min.value = new Big(item.min.value);\n }\n\n if (item.max && item.max !== \"1fr\") {\n item.max.value = new Big(item.max.value);\n }\n } else {\n item.size.value = new Big(item.size.value);\n }\n }\n\n return snapshot;\n}\n\n/** Assert that the provided event is one of the accepted types */\nfunction isEvent<T extends GroupMachineEvent[\"type\"]>(\n event: GroupMachineEvent,\n eventType: T[]\n): asserts event is EventForType<T> {\n invariant(\n eventType.includes(event.type as T),\n `Invalid event type: ${eventType}. Expected: ${eventType.join(\" | \")}`\n );\n}\n\n/** Determine if an item is a panel */\nexport function isPanelData(value: unknown): value is PanelData {\n return Boolean(\n value &&\n typeof value === \"object\" &&\n \"type\" in value &&\n value.type === \"panel\"\n );\n}\n\n/** Determine if an item is a panel handle */\nexport function isPanelHandle(value: unknown): value is PanelHandleData {\n return Boolean(\n value &&\n typeof value === \"object\" &&\n \"type\" in value &&\n value.type === \"handle\"\n );\n}\n\ninterface InitializePanelOptions {\n min?: Unit;\n max?: Unit;\n default?: Unit;\n collapsible?: boolean;\n collapsed?: boolean;\n collapsedSize?: Unit;\n onCollapseChange?: {\n current: ((isCollapsed: boolean) => void) | null | undefined;\n };\n collapseAnimation?: PanelData[\"collapseAnimation\"];\n defaultCollapsed?: boolean;\n id?: string;\n}\n\ntype InitializePanelOptionsWithId = InitializePanelOptions & { id: string };\n\nexport function initializePanel(item: InitializePanelOptionsWithId): PanelData;\nexport function initializePanel(\n item: InitializePanelOptions\n): Omit<PanelData, \"id\">;\nexport function initializePanel(\n item: InitializePanelOptions | InitializePanelOptionsWithId\n): PanelData | Omit<PanelData, \"id\"> {\n const data = {\n type: \"panel\" as const,\n min: parseUnit(item.min || \"0px\"),\n max: item.max ? parseUnit(item.max) : \"1fr\",\n collapsed: item.collapsible\n ? (item.collapsed ?? item.defaultCollapsed ?? false)\n : undefined,\n collapsible: item.collapsible,\n collapsedSize: parseUnit(item.collapsedSize ?? \"0px\"),\n onCollapseChange: item.onCollapseChange,\n collapseIsControlled: typeof item.collapsed !== \"undefined\",\n sizeBeforeCollapse: undefined,\n id: item.id,\n collapseAnimation: item.collapseAnimation,\n default: item.default ? parseUnit(item.default) : undefined,\n } satisfies Omit<PanelData, \"id\" | \"currentValue\"> & { id?: string };\n\n return { ...data, currentValue: makePixelUnit(-1) } satisfies Omit<\n PanelData,\n \"id\"\n >;\n}\n\nexport function initializePanelHandleData(item: InitializePanelHandleData) {\n return {\n type: \"handle\" as const,\n ...item,\n size: typeof item.size === \"string\" ? parseUnit(item.size) : item.size,\n };\n}\n\n/** Parse a `Unit` string or `clamp` value */\nexport function parseUnit(unit: Unit | \"1fr\"): ParsedUnit {\n if (unit === \"1fr\") {\n unit = \"100%\";\n }\n\n if (unit.endsWith(\"px\")) {\n return makePixelUnit(parseFloat(unit));\n }\n\n if (unit.endsWith(\"%\")) {\n return makePercentUnit(parseFloat(unit));\n }\n\n throw new Error(`Invalid unit: ${unit}`);\n}\n\n/** Convert a `Unit` to a percentage of the group size */\nexport function getUnitPercentageValue(groupsSize: number, unit: ParsedUnit) {\n if (unit.type === \"pixel\") {\n return groupsSize === 0 ? 0 : unit.value.div(groupsSize).toNumber();\n }\n\n return unit.value.toNumber();\n}\n\nexport function getGroupSize(context: GroupMachineContextValue) {\n return context.orientation === \"horizontal\"\n ? context.size.width\n : context.size.height;\n}\n\n/** Get the size of a panel in pixels */\nexport function getUnitPixelValue(\n context: GroupMachineContextValue,\n unit: ParsedUnit | \"1fr\"\n) {\n const parsed = unit === \"1fr\" ? parseUnit(unit) : unit;\n return parsed.type === \"pixel\"\n ? parsed.value\n : new Big(parsed.value).div(100).mul(getGroupSize(context));\n}\n\n/** Clamp a new `currentValue` given the panel's constraints. */\nfunction clampUnit(\n context: GroupMachineContextValue,\n item: PanelData,\n value: Big.Big\n) {\n const min = getUnitPixelValue(context, item.min);\n const max = getUnitPixelValue(context, item.max);\n\n if (value.gte(min) && value.lte(max)) {\n return value;\n }\n\n return value.lt(min) ? min : max;\n}\n\n/** Get a panel with a particular ID. */\nexport function getPanelWithId(\n context: GroupMachineContextValue,\n panelId: string\n) {\n const item = context.items.find((i) => i.id === panelId);\n\n if (item && isPanelData(item)) {\n return item;\n }\n\n throw new Error(`Expected panel with id: ${panelId}`);\n}\n\n/** Get a panel with a particular ID. */\nfunction getPanelHandleIndex(\n context: GroupMachineContextValue,\n handleId: string\n) {\n const item = context.items.findIndex((i) => i.id === handleId);\n\n if (item !== -1 && isPanelHandle(context.items[item])) {\n return item;\n }\n\n throw new Error(`Expected panel handle with id: ${handleId}`);\n}\n\n/**\n * Get the panel that's collapsible next to a resize handle.\n * Will first check the left panel then the right.\n */\nexport function getCollapsiblePanelForHandleId(\n context: GroupMachineContextValue,\n handleId: string\n) {\n if (!context.items.length) {\n throw new Error(\"No items in group\");\n }\n\n const handleIndex = getPanelHandleIndex(context, handleId);\n const panelBefore = context.items[handleIndex - 1];\n const panelAfter = context.items[handleIndex + 1];\n\n if (panelBefore && isPanelData(panelBefore) && panelBefore.collapsible) {\n return panelBefore;\n }\n\n if (panelAfter && isPanelData(panelAfter) && panelAfter.collapsible) {\n return panelAfter;\n }\n\n throw new Error(`No collapsible panel found for handle: ${handleId}`);\n}\n\n/**\n * Get the handle closest to the target panel.\n * This is used to simulate collapse/expand\n */\nfunction getHandleForPanelId(\n context: GroupMachineContextValue,\n panelId: string\n) {\n const panelIndex = context.items.findIndex((item) => item.id === panelId);\n\n invariant(panelIndex !== -1, `Expected panel before: ${panelId}`);\n\n let item = context.items[panelIndex + 1];\n\n if (item && isPanelHandle(item)) {\n return { item, direction: 1 as const };\n }\n\n item = context.items[panelIndex - 1];\n\n if (item && isPanelHandle(item)) {\n return { item, direction: -1 as const };\n }\n\n throw new Error(`Cant find handle for panel: ${panelId}`);\n}\n\n/** Given the specified order props and default order of the items, order the items */\nfunction sortWithOrder(items: Array<Item>) {\n const defaultPlacement: Record<string, number> = {};\n const takenPlacements = items\n .map((i) => i.order)\n .filter((i): i is number => i !== undefined);\n\n let defaultOrder = 0;\n\n // Generate default orders for items that don't have it\n for (const item of items) {\n if (item.order === undefined) {\n while (\n takenPlacements.includes(defaultOrder) ||\n Object.values(defaultPlacement).includes(defaultOrder)\n ) {\n defaultOrder++;\n }\n\n defaultPlacement[item.id] = defaultOrder;\n }\n }\n\n const withoutOrder = items.filter((i) => i.order === undefined);\n const sortedWithOrder = items\n .filter((i) => i.order !== undefined)\n .sort((a, b) => a.order! - b.order!);\n\n for (const item of sortedWithOrder) {\n // insert item at order index\n withoutOrder.splice(item.order!, 0, item);\n }\n\n return withoutOrder;\n}\n\n/** Check if the panel has space available to add to */\nfunction panelHasSpace(\n context: GroupMachineContextValue,\n item: PanelData,\n adjustment: \"add\" | \"subtract\"\n) {\n invariant(\n item.currentValue.type === \"pixel\",\n `panelHasSpace only works with number values: ${item.id} ${item.currentValue}`\n );\n\n if (item.collapsible && !item.collapsed) {\n return true;\n }\n\n if (adjustment === \"add\") {\n return (\n item.currentValue.value.gte(getUnitPixelValue(context, item.min)) &&\n item.currentValue.value.lt(getUnitPixelValue(context, item.max))\n );\n }\n\n return (\n item.currentValue.value.gt(getUnitPixelValue(context, item.min)) &&\n item.currentValue.value.lte(getUnitPixelValue(context, item.max))\n );\n}\n\n/** Search in a `direction` for a panel that still has space to expand. */\nfunction findPanelWithSpace(\n context: GroupMachineContextValue,\n items: Array<Item>,\n start: number,\n direction: number,\n adjustment: \"add\" | \"subtract\",\n disregardCollapseBuffer?: boolean\n) {\n const slice =\n direction === -1 ? items.slice(0, start + 1).reverse() : items.slice(start);\n\n for (const panel of slice) {\n if (!isPanelData(panel)) {\n continue;\n }\n\n const targetPanel = disregardCollapseBuffer\n ? createUnrestrainedPanel(context, panel)\n : panel;\n\n if (panelHasSpace(context, targetPanel, adjustment)) {\n return panel;\n }\n }\n}\n\n/** Add up all the static values in the layout */\nfunction getStaticWidth(context: GroupMachineContextValue) {\n let width = new Big(0);\n\n for (const item of context.items) {\n if (isPanelHandle(item)) {\n width = width.add(item.size.value);\n } else if (\n isPanelData(item) &&\n item.collapsed &&\n item.currentValue.type === \"pixel\"\n ) {\n width = width.add(item.currentValue.value);\n }\n }\n\n return width;\n}\n\nfunction formatUnit(unit: ParsedUnit): Unit {\n if (unit.type === \"pixel\") {\n return `${unit.value.toNumber()}px`;\n }\n\n return `${unit.value.toNumber()}%`;\n}\n\n/** Build the grid template from the item values. */\nexport function buildTemplate(context: GroupMachineContextValue) {\n const staticWidth = getStaticWidth(context);\n\n return context.items\n .map((item) => {\n if (item.type === \"panel\") {\n const min = formatUnit(item.min);\n\n if (\n item.currentValue.type === \"pixel\" &&\n item.currentValue.value.toNumber() !== -1\n ) {\n if (item.currentValue.value.toNumber() < 0) {\n return \"0px\";\n }\n\n return formatUnit(item.currentValue);\n } else if (item.currentValue.type === \"percent\") {\n const max = item.max === \"1fr\" ? \"100%\" : formatUnit(item.max);\n return `minmax(${min}, min(calc(${item.currentValue.value} * (100% - ${staticWidth}px)), ${max}))`;\n } else if (item.collapsible && item.collapsed) {\n return formatUnit(item.collapsedSize);\n } else if (item.default) {\n return formatUnit(item.default);\n }\n\n const max = item.max === \"1fr\" ? \"1fr\" : formatUnit(item.max);\n return `minmax(${min}, ${max})`;\n }\n\n return formatUnit(item.size);\n })\n .join(\" \");\n}\n\nfunction addDeDuplicatedItems(items: Array<Item>, newItem: Item) {\n const currentItemIndex = items.findIndex(\n (item) =>\n item.id === newItem.id ||\n (typeof item.order === \"number\" && item.order === newItem.order)\n );\n\n let restItems = items;\n\n if (currentItemIndex !== -1) {\n restItems = items.filter((_, index) => index !== currentItemIndex);\n }\n\n return sortWithOrder([...restItems, newItem]);\n}\n\nfunction createUnrestrainedPanel(_: GroupMachineContextValue, data: PanelData) {\n return {\n ...data,\n min: makePixelUnit(-100000),\n max: makePixelUnit(100000),\n };\n}\n\n// #endregion\n\n// #region Update Logic\n\n/**\n * This is the main meat of the layout logic.\n * It's responsible for figuring out how to distribute the space\n * amongst the panels.\n *\n * It's built around applying small deltas to panels relative to their\n * the resize handles.\n *\n * As much as possible we try to rely on the browser to do the layout.\n * During the initial layout we rely on CSS grid and a group might be\n * defined like this:\n *\n * ```css\n * grid-template-columns: minmax(100px, 1fr) 1px minmax(100px, 300px);\n * ```\n *\n * Without any resizing this is nice and simple and the components don't do much.\n *\n * Once the user starts resizing the layout will be more complex.\n *\n * It's broken down into 3 phases:\n *\n * 1. `prepareItems` - The size of the group has been measure and we\n * can convert all the panel sizes into pixels. Converting into pixels\n * makes doing the math for the updates easier.\n *\n * ```css\n * grid-template-columns: 500px 1px 300px;\n * ```\n *\n * 2. `updateLayout` - This is where the actual updates are applied.\n * This is where the user's drag interactions are applied. We also\n * use this to collapse/expand panels by simulating a drag interaction.\n *\n * ```css\n * grid-template-columns: 490px 1px 310px;\n * ```\n *\n * 3. `commitLayout` - Once the updates have been applied we convert the\n * updated sizes back into a format that allows for easy resizing without\n * lots of updates.\n *\n * ```css\n * grid-template-columns: minmax(100px, min(calc(0.06117 * (100% - 1px)), 100%)) 1px minmax(100px, min(calc(0.0387 * (100% - 1px)), 300px));\n * ```\n *\n * When another update loop is triggered the above template will be converted back to pixels.\n */\n\n/** Converts the items to pixels */\nexport function prepareItems(context: GroupMachineContextValue) {\n const newItems = [...context.items];\n const staticWidth = getStaticWidth(context);\n\n for (const item of newItems) {\n if (!item || !isPanelData(item)) {\n continue;\n }\n\n if (item.currentValue.type === \"pixel\") {\n continue;\n }\n\n const pixel = new Big(getGroupSize(context))\n .minus(staticWidth)\n .mul(item.currentValue.value);\n\n item.currentValue = makePixelUnit(pixel.toNumber());\n }\n\n return newItems;\n}\n\n/** On every mouse move we distribute the space added */\nfunction updateLayout(\n context: GroupMachineContextValue,\n dragEvent:\n | (DragHandleEvent & {\n controlled?: boolean;\n disregardCollapseBuffer?: never;\n })\n | {\n type: \"collapsePanel\";\n value: MoveMoveEvent;\n handleId: string;\n controlled?: boolean;\n disregardCollapseBuffer?: boolean;\n }\n): Partial<GroupMachineContextValue> {\n const handleIndex = getPanelHandleIndex(context, dragEvent.handleId);\n const handle = context.items[handleIndex] as PanelHandleData;\n const newItems = [...context.items];\n\n let moveAmount =\n context.orientation === \"horizontal\"\n ? dragEvent.value.deltaX\n : dragEvent.value.deltaY;\n\n if (dragEvent.value.shiftKey) {\n moveAmount *= 15;\n }\n\n if (moveAmount === 0) {\n return {};\n }\n\n const moveDirection = moveAmount / Math.abs(moveAmount);\n\n // Go forward into the shrinking panels to find a panel that still has space.\n const panelBefore = findPanelWithSpace(\n context,\n newItems,\n handleIndex + moveDirection,\n moveDirection,\n \"subtract\",\n dragEvent.disregardCollapseBuffer\n );\n\n // No panel with space, just record the drag overshoot\n if (!panelBefore) {\n return {\n dragOvershoot: context.dragOvershoot.add(moveAmount),\n };\n }\n\n invariant(isPanelData(panelBefore), `Expected panel before: ${handle.id}`);\n\n const panelAfter = newItems[handleIndex - moveDirection];\n\n invariant(\n panelAfter && isPanelData(panelAfter),\n `Expected panel after: ${handle.id}`\n );\n\n if (\n panelAfter.currentValue.value.eq(getUnitPixelValue(context, panelAfter.max))\n ) {\n return {\n dragOvershoot: context.dragOvershoot.add(moveAmount),\n };\n }\n\n const newDragOvershoot = context.dragOvershoot.add(moveAmount);\n\n // Don't let the panel expand until the threshold is reached\n if (!dragEvent.disregardCollapseBuffer) {\n const isInLeftBuffer = newDragOvershoot.lt(0) && moveDirection > 0;\n const isInLeftOvershoot = newDragOvershoot.gt(0) && moveDirection > 0;\n const isInRightBuffer = newDragOvershoot.gt(0) && moveDirection < 0;\n const isInRightOvershoot = newDragOvershoot.lt(0) && moveDirection < 0;\n const potentialNewValue = panelAfter.currentValue.value.add(\n new Big(newDragOvershoot).mul(isInRightBuffer ? moveDirection : 1)\n );\n const min = getUnitPixelValue(context, panelAfter.min);\n\n const isInDragBugger =\n newDragOvershoot.abs().lt(COLLAPSE_THRESHOLD) &&\n panelAfter.collapsible &&\n panelAfter.collapsed &&\n (isInLeftOvershoot || isInRightOvershoot);\n\n if (\n potentialNewValue.lte(min) &&\n (newDragOvershoot.eq(0) ||\n isInRightBuffer ||\n isInLeftBuffer ||\n isInDragBugger)\n ) {\n return { dragOvershoot: newDragOvershoot };\n }\n }\n\n // Don't let the panel collapse until the threshold is reached\n if (\n panelBefore.collapsible &&\n panelBefore.currentValue.value ===\n getUnitPixelValue(context, panelBefore.min)\n ) {\n const potentialNewValue = panelBefore.currentValue.value.sub(\n newDragOvershoot.abs()\n );\n\n if (\n newDragOvershoot.abs().lt(COLLAPSE_THRESHOLD) &&\n potentialNewValue.gt(\n getUnitPixelValue(context, panelBefore.collapsedSize)\n )\n ) {\n return { dragOvershoot: newDragOvershoot };\n }\n }\n\n // Apply the move amount to the panel before the slider\n const unrestrainedPanelBefore = createUnrestrainedPanel(context, panelBefore);\n const panelBeforePreviousValue = panelBefore.currentValue.value;\n const panelBeforeNewValueRaw = panelBefore.currentValue.value.minus(\n new Big(moveAmount).mul(moveDirection)\n );\n let panelBeforeNewValue = dragEvent.disregardCollapseBuffer\n ? clampUnit(context, unrestrainedPanelBefore, panelBeforeNewValueRaw)\n : clampUnit(context, panelBefore, panelBeforeNewValueRaw);\n\n // Also apply the move amount the panel after the slider\n const unrestrainedPanelAfter = createUnrestrainedPanel(context, panelAfter);\n const panelAfterPreviousValue = panelAfter.currentValue.value;\n const applied = panelBeforePreviousValue.minus(panelBeforeNewValue);\n const panelAfterNewValueRaw = panelAfter.currentValue.value.add(applied);\n let panelAfterNewValue = dragEvent.disregardCollapseBuffer\n ? clampUnit(context, unrestrainedPanelAfter, panelAfterNewValueRaw)\n : clampUnit(context, panelAfter, panelAfterNewValueRaw);\n\n if (dragEvent.disregardCollapseBuffer) {\n if (panelAfter.collapsible && panelAfter.collapsed) {\n panelAfter.collapsed = false;\n }\n }\n // If the panel was collapsed, expand it\n // We need to re-apply the move amount since the the expansion of the\n // collapsed panel disregards that.\n else if (panelAfter.collapsible && panelAfter.collapsed) {\n if (\n panelAfter.onCollapseChange?.current &&\n panelAfter.collapseIsControlled &&\n !dragEvent.controlled\n ) {\n panelAfter.onCollapseChange.current(false);\n return { dragOvershoot: newDragOvershoot };\n }\n\n // Calculate the amount \"extra\" after the minSize the panel should grow\n const extra =\n // Take the size it was at\n getUnitPixelValue(context, panelAfter.collapsedSize)\n // Add in the full overshoot so the cursor is near the slider\n .add(context.dragOvershoot.abs())\n // Subtract the min size of the panel\n .sub(\n panelAfterNewValue\n // Then re-add the move amount\n .add(Math.abs(moveAmount))\n );\n\n panelAfter.collapsed = false;\n\n if (extra.gt(0)) {\n panelAfterNewValue = panelAfterNewValue.add(extra);\n }\n\n panelBeforeNewValue = panelBeforeNewValue\n // Subtract the delta of the after panel's size\n .minus(\n panelAfterNewValue\n .minus(panelAfterPreviousValue)\n // And then re-apply the movement value\n .minus(Math.abs(moveAmount))\n );\n\n if (\n panelAfter.onCollapseChange?.current &&\n !panelAfter.collapseIsControlled &&\n !dragEvent.controlled\n ) {\n panelAfter.onCollapseChange.current(false);\n }\n }\n\n const panelBeforeIsAboutToCollapse =\n panelBefore.currentValue.value ===\n getUnitPixelValue(context, panelBefore.min);\n\n // If the panel was expanded and now is at it's min size, collapse it\n if (\n !dragEvent.disregardCollapseBuffer &&\n panelBefore.collapsible &&\n panelBeforeIsAboutToCollapse\n ) {\n if (\n panelBefore.onCollapseChange?.current &&\n panelBefore.collapseIsControlled &&\n !dragEvent.controlled\n ) {\n panelBefore.onCollapseChange.current(true);\n return { dragOvershoot: newDragOvershoot };\n }\n\n // Make it collapsed\n panelBefore.collapsed = true;\n panelBeforeNewValue = getUnitPixelValue(context, panelBefore.collapsedSize);\n // Add the extra space created to the before panel\n panelAfterNewValue = panelAfterNewValue.add(\n panelBeforePreviousValue.minus(panelBeforeNewValue)\n );\n\n if (\n panelBefore.onCollapseChange?.current &&\n !panelBefore.collapseIsControlled &&\n !dragEvent.controlled\n ) {\n panelBefore.onCollapseChange.current(true);\n }\n }\n\n panelBefore.currentValue = { type: \"pixel\", value: panelBeforeNewValue };\n panelAfter.currentValue = { type: \"pixel\", value: panelAfterNewValue };\n\n const leftoverSpace = new Big(getGroupSize(context)).minus(\n newItems.reduce(\n (acc, b) => acc.add(isPanelData(b) ? b.currentValue.value : b.size.value),\n new Big(0)\n )\n );\n\n if (leftoverSpace.gt(0)) {\n panelBefore.currentValue.value =\n panelBefore.currentValue.value.add(leftoverSpace);\n }\n\n return { items: newItems };\n}\n\n/** Converts the items to percentages */\nexport function commitLayout(context: GroupMachineContextValue) {\n const newItems = [...context.items];\n\n // First set all the static width\n newItems.forEach((item, index) => {\n if (item.type !== \"panel\") {\n return;\n }\n\n if (item.collapsed) {\n newItems[index] = {\n ...item,\n currentValue: item.collapsedSize,\n };\n }\n });\n\n const staticWidth = getStaticWidth({ ...context, items: newItems });\n\n newItems.forEach((item, index) => {\n if (item.type !== \"panel\" || item.collapsed) {\n return;\n }\n\n newItems[index] = {\n ...item,\n currentValue: {\n type: \"percent\",\n value: item.currentValue.value.div(\n new Big(getGroupSize(context)).sub(staticWidth)\n ),\n },\n };\n });\n\n return newItems;\n}\n\nexport function dragHandlePayload({\n delta,\n orientation,\n shiftKey = false,\n}: {\n delta: number;\n orientation: Orientation;\n shiftKey?: boolean;\n}) {\n return {\n type: \"move\",\n pointerType: \"keyboard\",\n shiftKey,\n ctrlKey: false,\n altKey: false,\n metaKey: false,\n deltaX: orientation === \"horizontal\" ? delta : 0,\n deltaY: orientation === \"horizontal\" ? 0 : delta,\n } as const;\n}\n\n/** Iteratively applies a large delta value simulating a user's drag */\nfunction iterativelyUpdateLayout({\n context,\n handleId,\n delta,\n direction,\n controlled,\n disregardCollapseBuffer,\n}: {\n context: GroupMachineContextValue;\n handleId: string;\n delta: Big.Big;\n direction: -1 | 1;\n controlled?: boolean;\n disregardCollapseBuffer?: boolean;\n}) {\n let newContext: Partial<GroupMachineContextValue> = context;\n\n for (let i = 0; i < delta.abs().toNumber(); i++) {\n newContext = updateLayout(\n {\n ...context,\n ...newContext,\n },\n {\n handleId,\n type: \"collapsePanel\",\n controlled,\n disregardCollapseBuffer,\n value: dragHandlePayload({\n delta: direction,\n orientation: context.orientation,\n }),\n }\n );\n }\n\n return newContext;\n}\n\nfunction applyDeltaInBothDirections(\n context: GroupMachineContextValue,\n newItems: Array<Item>,\n itemIndex: number,\n delta: Big.Big\n) {\n let hasTriedBothDirections = false;\n let direction = 1;\n let deltaLeft = new Big(delta);\n\n // Starting from where the items was removed add space to the panels around it.\n // This is only needed for conditional rendering.\n while (deltaLeft.toNumber() !== 0) {\n const targetPanel = findPanelWithSpace(\n context,\n newItems,\n itemIndex + direction,\n direction,\n delta.gt(0) ? \"add\" : \"subtract\"\n );\n\n if (!targetPanel) {\n if (hasTriedBothDirections) {\n break;\n } else {\n direction = direction === 1 ? -1 : 1;\n hasTriedBothDirections = true;\n continue;\n }\n }\n\n const oldValue = targetPanel.currentValue.value;\n const newValue = clampUnit(context, targetPanel, oldValue.add(deltaLeft));\n\n targetPanel.currentValue.value = newValue;\n deltaLeft = deltaLeft.sub(newValue.sub(oldValue));\n direction = direction === 1 ? -1 : 1;\n }\n}\n\n// #endregion\n\n// #region Machine\n\ninterface AnimationActorInput {\n context: GroupMachineContextValue;\n event: CollapsePanelEvent | ExpandPanelEvent;\n send: (event: GroupMachineEvent) => void;\n}\n\ninterface AnimationActorOutput {\n panelId: string;\n action: \"expand\" | \"collapse\";\n}\n\nconst animationActor = fromPromise<\n AnimationActorOutput | undefined,\n AnimationActorInput\n>(\n ({ input: { send, context, event } }) =>\n new Promise<AnimationActorOutput | undefined>((resolve) => {\n const panel = getPanelWithId(context, event.panelId);\n const handle = getHandleForPanelId(context, event.panelId);\n\n let direction = new Big(handle.direction);\n let fullDelta = new Big(0);\n\n if (event.type === \"expandPanel\") {\n fullDelta = new Big(\n panel.sizeBeforeCollapse ?? getUnitPixelValue(context, panel.min)\n ).minus(panel.currentValue.value);\n } else {\n const collapsedSize = getUnitPixelValue(context, panel.collapsedSize);\n\n panel.sizeBeforeCollapse = panel.currentValue.value.toNumber();\n direction = direction.mul(new Big(-1));\n fullDelta = panel.currentValue.value.minus(collapsedSize);\n }\n\n const fps = 60;\n const { duration, ease } = getCollapseAnimation(panel);\n const totalFrames = Math.ceil(\n panel.collapseAnimation ? duration / (1000 / fps) : 1\n );\n let frame = 0;\n let appliedDelta = new Big(0);\n\n function renderFrame() {\n const progress = ++frame / totalFrames;\n const e = new Big(panel.collapseAnimation ? ease(progress) : 1);\n const delta = e.mul(fullDelta).sub(appliedDelta).mul(direction);\n\n send({\n type: \"applyDelta\",\n handleId: handle.item.id,\n delta: delta.toNumber(),\n });\n\n appliedDelta = appliedDelta.add(\n delta\n .abs()\n .mul(\n (delta.gt(0) && direction.lt(0)) ||\n (delta.lt(0) && direction.gt(0))\n ? -1\n : 1\n )\n );\n\n if (e.eq(1)) {\n const action = event.type === \"expandPanel\" ? \"expand\" : \"collapse\";\n resolve({ panelId: panel.id, action });\n return false;\n }\n\n return true;\n }\n\n raf(renderFrame);\n })\n);\n\nexport const groupMachine = createMachine(\n {\n initial: \"idle\",\n types: {\n context: {} as GroupMachineContextValue,\n events: {} as GroupMachineEvent,\n input: {} as {\n autosaveId?: string;\n orientation?: Orientation;\n groupId: string;\n initialItems?: Item[];\n },\n },\n context: ({ input }) => ({\n size: { width: 0, height: 0 },\n items: input.initialItems || [],\n orientation: input.orientation || \"horizontal\",\n dragOvershoot: new Big(0),\n autosaveId: input.autosaveId,\n groupId: input.groupId,\n }),\n states: {\n idle: {\n on: {\n setActualItemsSize: { actions: [\"recordActualItemSize\"] },\n dragHandleStart: { target: \"dragging\" },\n setPanelPixelSize: {\n actions: [\"prepare\", \"onSetPanelSize\", \"commit\"],\n },\n collapsePanel: [\n {\n actions: \"notifyCollapseToggle\",\n guard: \"shouldNotifyCollapseToggle\",\n },\n { target: \"togglingCollapse\" },\n ],\n expandPanel: [\n {\n actions: \"notifyCollapseToggle\",\n guard: \"shouldNotifyCollapseToggle\",\n },\n { target: \"togglingCollapse\" },\n ],\n },\n },\n dragging: {\n entry: [\"prepare\"],\n on: {\n dragHandle: { actions: [\"onDragHandle\"] },\n dragHandleEnd: { target: \"idle\" },\n collapsePanel: {\n guard: \"shouldCollapseToggle\",\n actions: \"runCollapseToggle\",\n },\n expandPanel: {\n guard: \"shouldCollapseToggle\",\n actions: \"runCollapseToggle\",\n },\n },\n exit: [\"commit\", \"onAutosave\"],\n },\n togglingCollapse: {\n entry: [\"prepare\"],\n invoke: {\n src: \"animation\",\n input: (i) => ({ ...i, send: i.self.send }),\n onDone: {\n target: \"idle\",\n actions: [\"onToggleCollapseComplete\", \"commit\", \"onAutosave\"],\n },\n },\n on: {\n applyDelta: { actions: [\"onApplyDelta\"] },\n },\n },\n },\n on: {\n registerPanel: { actions: [\"assignPanelData\"] },\n registerDynamicPanel: {\n actions: [\"prepare\", \"onRegisterDynamicPanel\", \"commit\", \"onAutosave\"],\n },\n unregisterPanel: {\n actions: [\"prepare\", \"removeItem\", \"commit\", \"onAutosave\"],\n },\n registerPanelHandle: { actions: [\"assignPanelHandleData\"] },\n unregisterPanelHandle: {\n actions: [\"prepare\", \"removeItem\", \"commit\", \"onAutosave\"],\n },\n setSize: { actions: [\"updateSize\"] },\n setOrientation: { actions: [\"updateOrientation\"] },\n },\n },\n {\n guards: {\n shouldNotifyCollapseToggle: ({ context, event }) => {\n isEvent(event, [\"collapsePanel\", \"expandPanel\"]);\n const panel = getPanelWithId(context, event.panelId);\n return !event.controlled && panel.collapseIsControlled === true;\n },\n shouldCollapseToggle: ({ context, event }) => {\n isEvent(event, [\"collapsePanel\", \"expandPanel\"]);\n const panel = getPanelWithId(context, event.panelId);\n return panel.collapseIsControlled === true;\n },\n },\n actors: {\n animation: animationActor,\n },\n actions: {\n notifyCollapseToggle: ({ context, event }) => {\n isEvent(event, [\"collapsePanel\", \"expandPanel\"]);\n const panel = getPanelWithId(context, event.panelId);\n panel.onCollapseChange?.current?.(!panel.collapsed);\n },\n runCollapseToggle: enqueueActions(({ context, event, enqueue }) => {\n isEvent(event, [\"collapsePanel\", \"expandPanel\"]);\n\n const handle = getHandleForPanelId(context, event.panelId);\n // When collapsing a panel it will be in the opposite direction\n // that handle assumes\n const delta =\n event.type === \"collapsePanel\"\n ? handle.direction * -1\n : handle.direction;\n const newContext = updateLayout(context, {\n handleId: handle.item.id,\n type: \"dragHandle\",\n controlled: event.controlled,\n value: dragHandlePayload({ delta, orientation: context.orientation }),\n });\n\n enqueue.assign(newContext);\n }),\n onToggleCollapseComplete: assign({\n items: ({ context, event: e }) => {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const output = (e as any).output as AnimationActorOutput;\n invariant(output, \"Expected output from animation actor\");\n\n const panel = getPanelWithId(context, output.panelId);\n panel.collapsed = output.action === \"collapse\";\n\n if (panel.collapsed) {\n panel.currentValue = panel.collapsedSize;\n }\n\n return context.items;\n },\n }),\n updateSize: assign({\n size: ({ event }) => {\n isEvent(event, [\"setSize\"]);\n return event.size;\n },\n }),\n recordActualItemSize: assign({\n items: ({ context, event }) => {\n isEvent(event, [\"setActualItemsSize\"]);\n\n const orientation = context.orientation;\n\n for (const [id, size] of Object.entries(event.childrenSizes)) {\n const item = context.items.find((i) => i.id === id);\n\n if (!isPanelData(item)) {\n continue;\n }\n\n item.currentValue = makePixelUnit(\n orientation === \"horizontal\" ? size.width : size.height\n );\n }\n\n return commitLayout(context);\n },\n }),\n updateOrientation: assign({\n orientation: ({ event }) => {\n isEvent(event, [\"setOrientation\"]);\n return event.orientation;\n },\n }),\n assignPanelData: assign({\n items: ({ context, event }) => {\n isEvent(event, [\"registerPanel\"]);\n\n return addDeDuplicatedItems(context.items, {\n type: \"panel\",\n currentValue: makePixelUnit(-1),\n ...event.data,\n });\n },\n }),\n onRegisterDynamicPanel: assign({\n items: ({ context, event }) => {\n isEvent(event, [\"registerDynamicPanel\"]);\n\n let currentValue: ParsedUnit = makePixelUnit(0);\n\n if (\n event.data.collapsible &&\n event.data.collapsed &&\n event.data.collapsedSize\n ) {\n currentValue = event.data.collapsedSize;\n } else if (event.data.default) {\n currentValue = event.data.default;\n } else {\n currentValue = event.data.min;\n }\n\n const newItems = addDeDuplicatedItems(context.items, {\n type: \"panel\",\n ...event.data,\n currentValue,\n });\n const itemIndex = newItems.findIndex(\n (item) => item.id === event.data.id\n );\n const newContext = { ...context, items: newItems };\n const overflowDueToHandles = context.items\n .reduce((acc, i) => {\n if (isPanelHandle(i)) {\n return acc.add(getUnitPixelValue(context, i.size));\n }\n\n return acc.add(i.currentValue.value);\n }, new Big(0))\n .minus(getGroupSize(context));\n\n applyDeltaInBothDirections(\n newContext,\n newItems,\n itemIndex,\n currentValue.value.add(overflowDueToHandles).neg()\n );\n\n return newItems;\n },\n }),\n assignPanelHandleData: assign({\n items: ({ context, event }) => {\n isEvent(event, [\"registerPanelHandle\"]);\n\n const unit =\n typeof event.data.size === \"string\"\n ? parseUnit(event.data.size)\n : event.data.size;\n\n return addDeDuplicatedItems(context.items, {\n type: \"handle\",\n ...event.data,\n size: {\n type: \"pixel\",\n value: new Big(unit.value),\n },\n });\n },\n }),\n removeItem: assign({\n items: ({ context, event }) => {\n isEvent(event, [\"unregisterPanel\", \"unregisterPanelHandle\"]);\n const itemIndex = context.items.findIndex(\n (item) => item.id === event.id\n );\n const item = context.items[itemIndex];\n\n if (!item) {\n return context.items;\n }\n\n const newItems = context.items.filter((i) => i.id !== event.id);\n const removedSize = isPanelData(item)\n ? item.currentValue.value\n : item.size.value;\n\n applyDeltaInBothDirections(context, newItems, itemIndex, removedSize);\n\n return newItems;\n },\n }),\n prepare: assign({\n items: ({ context }) => prepareItems(context),\n }),\n onDragHandle: enqueueActions(({ context, event, enqueue }) => {\n isEvent(event, [\"dragHandle\"]);\n enqueue.assign(updateLayout(context, event));\n }),\n commit: assign({\n dragOvershoot: new Big(0),\n items: ({ context }) => commitLayout(context),\n }),\n onApplyDelta: assign(({ context, event }) => {\n isEvent(event, [\"applyDelta\"]);\n return updateLayout(context, {\n handleId: event.handleId,\n type: \"collapsePanel\",\n disregardCollapseBuffer: true,\n value: dragHandlePayload({\n delta: event.delta,\n orientation: context.orientation,\n }),\n });\n }),\n onSetPanelSize: enqueueActions(({ context, event, enqueue }) => {\n isEvent(event, [\"setPanelPixelSize\"]);\n\n const panel = getPanelWithId(context, event.panelId);\n const handle = getHandleForPanelId(context, event.panelId);\n const current = panel.currentValue.value;\n const newSize = clampUnit(\n context,\n panel,\n getUnitPixelValue(context, parseUnit(event.size))\n );\n const isBigger = newSize > current;\n const delta = isBigger\n ? newSize.minus(current)\n : current.minus(newSize);\n\n enqueue.assign(\n iterativelyUpdateLayout({\n context,\n direction: (handle.direction * (isBigger ? 1 : -1)) as -1 | 1,\n handleId: handle.item.id,\n delta,\n })\n );\n }),\n },\n }\n);\n\n// #endregion\n"]}
|
package/dist/esm/index.d.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { Snapshot } from "xstate";
|
|
2
2
|
import Big from "big.js";
|
|
3
|
-
type PixelUnit = `${number}px`;
|
|
4
|
-
type PercentUnit = `${number}%`;
|
|
3
|
+
export type PixelUnit = `${number}px`;
|
|
4
|
+
export type PercentUnit = `${number}%`;
|
|
5
5
|
export type Unit = PixelUnit | PercentUnit;
|
|
6
6
|
type Orientation = "horizontal" | "vertical";
|
|
7
7
|
interface ParsedPercentUnit {
|
|
@@ -104,7 +104,7 @@ interface UnregisterPanelEvent {
|
|
|
104
104
|
id: string;
|
|
105
105
|
}
|
|
106
106
|
export type InitializePanelHandleData = Omit<PanelHandleData, "type" | "size"> & {
|
|
107
|
-
size: PixelUnit;
|
|
107
|
+
size: PixelUnit | ParsedPixelUnit;
|
|
108
108
|
};
|
|
109
109
|
interface RegisterPanelHandleEvent {
|
|
110
110
|
/** Register a new panel handle with the state machine */
|
|
@@ -230,7 +230,7 @@ type InitializePanelOptionsWithId = InitializePanelOptions & {
|
|
|
230
230
|
export declare function initializePanel(item: InitializePanelOptionsWithId): PanelData;
|
|
231
231
|
export declare function initializePanel(item: InitializePanelOptions): Omit<PanelData, "id">;
|
|
232
232
|
export declare function initializePanelHandleData(item: InitializePanelHandleData): {
|
|
233
|
-
size:
|
|
233
|
+
size: ParsedUnit;
|
|
234
234
|
id: string;
|
|
235
235
|
order?: number | undefined;
|
|
236
236
|
type: "handle";
|
package/dist/esm/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EAKL,QAAQ,EACT,MAAM,QAAQ,CAAC;AAEhB,OAAO,GAAG,MAAM,QAAQ,CAAC;AAWzB,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/esm/index.js
CHANGED
|
@@ -110,7 +110,7 @@ export function initializePanelHandleData(item) {
|
|
|
110
110
|
return {
|
|
111
111
|
type: "handle",
|
|
112
112
|
...item,
|
|
113
|
-
size: parseUnit(item.size),
|
|
113
|
+
size: typeof item.size === "string" ? parseUnit(item.size) : item.size,
|
|
114
114
|
};
|
|
115
115
|
}
|
|
116
116
|
/** Parse a `Unit` string or `clamp` value */
|
|
@@ -273,11 +273,6 @@ function getStaticWidth(context) {
|
|
|
273
273
|
item.currentValue.type === "pixel") {
|
|
274
274
|
width = width.add(item.currentValue.value);
|
|
275
275
|
}
|
|
276
|
-
else if (isPanelData(item) &&
|
|
277
|
-
item.default &&
|
|
278
|
-
item.default.type === "pixel") {
|
|
279
|
-
width = width.add(item.default.value);
|
|
280
|
-
}
|
|
281
276
|
}
|
|
282
277
|
return width;
|
|
283
278
|
}
|
|
@@ -891,7 +886,9 @@ export const groupMachine = createMachine({
|
|
|
891
886
|
assignPanelHandleData: assign({
|
|
892
887
|
items: ({ context, event }) => {
|
|
893
888
|
isEvent(event, ["registerPanelHandle"]);
|
|
894
|
-
const unit =
|
|
889
|
+
const unit = typeof event.data.size === "string"
|
|
890
|
+
? parseUnit(event.data.size)
|
|
891
|
+
: event.data.size;
|
|
895
892
|
return addDeDuplicatedItems(context.items, {
|
|
896
893
|
type: "handle",
|
|
897
894
|
...event.data,
|
package/dist/esm/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"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","sourcesContent":["import { raf } from \"@react-spring/rafz\";\nimport {\n createMachine,\n assign,\n enqueueActions,\n fromPromise,\n Snapshot,\n} from \"xstate\";\nimport invariant from \"invariant\";\nimport Big from \"big.js\";\n\n// #region Constants\n\n/** The default amount a user can `dragOvershoot` before the panel collapses */\nconst COLLAPSE_THRESHOLD = 50;\n\n// #endregion\n\n// #region Types\n\ntype PixelUnit = `${number}px`;\ntype PercentUnit = `${number}%`;\nexport type Unit = PixelUnit | PercentUnit;\ntype Orientation = \"horizontal\" | \"vertical\";\n\ninterface ParsedPercentUnit {\n type: \"percent\";\n value: Big.Big;\n}\n\ninterface ParsedPixelUnit {\n type: \"pixel\";\n value: Big.Big;\n}\n\ntype ParsedUnit = ParsedPercentUnit | ParsedPixelUnit;\n\nexport function makePercentUnit(value: number): ParsedPercentUnit {\n return { type: \"percent\", value: new Big(value) };\n}\n\nexport function makePixelUnit(value: number): ParsedPixelUnit {\n return { type: \"pixel\", value: new Big(value) };\n}\n\ninterface MoveMoveEvent {\n shiftKey: boolean;\n ctrlKey: boolean;\n metaKey: boolean;\n altKey: boolean;\n deltaX: number;\n deltaY: number;\n}\n\nexport interface Constraints<T extends ParsedUnit | Unit = ParsedUnit> {\n /** The minimum size of the panel */\n min?: T;\n /** The maximum size of the panel */\n max?: T;\n /** The default size of the panel */\n default?: T;\n /** Whether the panel is collapsible */\n collapsible?: boolean;\n /** Whether the panel should initially render as collapsed */\n defaultCollapsed?: boolean;\n /** The size of the panel once collapsed */\n collapsedSize?: T;\n}\n\ninterface Order {\n /**\n * When dynamically rendering panels/handles you need to add the order prop.\n * This tells the component what place the items should be in once rendered.\n */\n order?: number;\n}\n\nexport interface PanelData\n extends Omit<Constraints, \"min\" | \"max\" | \"collapsedSize\">,\n Required<Pick<Constraints, \"min\" | \"collapsedSize\">>,\n Order {\n max: ParsedUnit | \"1fr\";\n type: \"panel\";\n id: string;\n /** Whether the collapsed state is controlled by the consumer or not */\n collapseIsControlled?: boolean;\n /** A ref to the latest \"collapseChange\" function provided by the user */\n onCollapseChange?: {\n current: ((isCollapsed: boolean) => void) | null | undefined;\n };\n /**\n * The current value for the item in the grid\n */\n currentValue: ParsedUnit;\n /** Whether the panel is currently collapsed */\n collapsed: boolean | undefined;\n /**\n * The size the panel was before being collapsed.\n * This is used to re-open the panel at the same size.\n * If the panel starts out collapsed it will use the `min`.\n */\n sizeBeforeCollapse: number | undefined;\n /** Animate the collapse/expand */\n collapseAnimation?:\n | CollapseAnimation\n | { duration: number; easing: CollapseAnimation | ((t: number) => number) };\n}\n\nfunction getCollapseAnimation(panel: PanelData) {\n let easeFn = collapseAnimations.linear;\n let duration = 300;\n\n if (panel.collapseAnimation) {\n if (typeof panel.collapseAnimation === \"string\") {\n easeFn = collapseAnimations[panel.collapseAnimation];\n } else if (\"duration\" in panel.collapseAnimation) {\n duration = panel.collapseAnimation.duration ?? duration;\n easeFn =\n typeof panel.collapseAnimation.easing === \"function\"\n ? panel.collapseAnimation.easing\n : collapseAnimations[panel.collapseAnimation.easing];\n }\n }\n\n return { ease: easeFn, duration };\n}\n\n/** Copied from https://github.com/d3/d3-ease */\nconst collapseAnimations = {\n \"ease-in-out\": function quadInOut(t: number) {\n return ((t *= 2) <= 1 ? t * t : --t * (2 - t) + 1) / 2;\n },\n bounce: function backInOut(t: number) {\n const s = 1.70158;\n return (\n ((t *= 2) < 1\n ? t * t * ((s + 1) * t - s)\n : (t -= 2) * t * ((s + 1) * t + s) + 2) / 2\n );\n },\n linear: function linear(t: number) {\n return +t;\n },\n};\n\ntype CollapseAnimation = keyof typeof collapseAnimations;\n\nexport interface PanelHandleData extends Order {\n type: \"handle\";\n id: string;\n /**\n * The size of the panel handle.\n * Needed to correctly calculate the percentage of modified panels.\n */\n size: ParsedPixelUnit;\n}\n\nexport type Item = PanelData | PanelHandleData;\n\ninterface RegisterPanelEvent {\n /** Register a new panel with the state machine */\n type: \"registerPanel\";\n data: Omit<PanelData, \"type\" | \"currentValue\" | \"defaultCollapsed\">;\n}\n\ninterface RegisterDynamicPanelEvent extends Omit<RegisterPanelEvent, \"type\"> {\n /** Register a new panel with the state machine */\n type: \"registerDynamicPanel\";\n}\n\ninterface UnregisterPanelEvent {\n /** Remove a panel from the state machine */\n type: \"unregisterPanel\";\n id: string;\n}\n\nexport type InitializePanelHandleData = Omit<\n PanelHandleData,\n \"type\" | \"size\"\n> & {\n size: PixelUnit;\n};\n\ninterface RegisterPanelHandleEvent {\n /** Register a new panel handle with the state machine */\n type: \"registerPanelHandle\";\n data: InitializePanelHandleData;\n}\n\ninterface UnregisterPanelHandleEvent {\n /** Remove a panel handle from the state machine */\n type: \"unregisterPanelHandle\";\n id: string;\n}\n\ninterface DragHandleStartEvent {\n /** Start a drag interaction */\n type: \"dragHandleStart\";\n /** The handle being interacted with */\n handleId: string;\n}\n\ninterface DragHandleEvent {\n /** Update the layout according to how the handle moved */\n type: \"dragHandle\";\n /** The handle being interacted with */\n handleId: string;\n value: MoveMoveEvent;\n}\n\ninterface DragHandleEndEvent {\n /** End a drag interaction */\n type: \"dragHandleEnd\";\n /** The handle being interacted with */\n handleId: string;\n}\n\nexport interface Rect {\n width: number;\n height: number;\n}\n\ninterface SetSizeEvent {\n /** Set the size of the whole group */\n type: \"setSize\";\n size: Rect;\n}\n\ninterface SetActualItemsSizeEvent {\n /** Set the size of the whole group */\n type: \"setActualItemsSize\";\n childrenSizes: Record<string, Rect>;\n}\n\ninterface ApplyDeltaEvent {\n type: \"applyDelta\";\n delta: number;\n handleId: string;\n}\n\ninterface SetOrientationEvent {\n /** Set the orientation of the group */\n type: \"setOrientation\";\n orientation: Orientation;\n}\n\ninterface ControlledCollapseToggle {\n /**\n * This is used to react to the controlled panel \"collapse\" prop updating.\n * This will force an update to be applied and skip calling the user's `onCollapseChanged`\n */\n controlled?: boolean;\n}\n\ninterface CollapsePanelEvent extends ControlledCollapseToggle {\n /** Collapse a panel */\n type: \"collapsePanel\";\n /** The panel to collapse */\n panelId: string;\n}\n\ninterface ExpandPanelEvent extends ControlledCollapseToggle {\n /** Expand a panel */\n type: \"expandPanel\";\n /** The panel to expand */\n panelId: string;\n}\n\ninterface SetPanelPixelSizeEvent {\n /**\n * This event is used by the imperative panel API.\n * With this the user can set the panel's size to an explicit value.\n * This is done by faking interaction with the handles so min/max will still\n * be respected.\n */\n type: \"setPanelPixelSize\";\n /** The panel to apply the size to */\n panelId: string;\n /** The size to apply to the panel */\n size: Unit;\n}\n\nexport interface GroupMachineContextValue {\n /** The items in the group */\n items: Array<Item>;\n /** The available space in the group */\n size: Rect;\n /** The orientation of the grid */\n orientation: Orientation;\n /** How much the drag has overshot the handle */\n dragOvershoot: Big.Big;\n /** An id to use for autosaving the layout */\n autosaveId?: string;\n groupId: string;\n}\n\nexport type GroupMachineEvent =\n | RegisterPanelEvent\n | RegisterDynamicPanelEvent\n | UnregisterPanelEvent\n | RegisterPanelHandleEvent\n | UnregisterPanelHandleEvent\n | DragHandleEvent\n | SetSizeEvent\n | SetOrientationEvent\n | DragHandleStartEvent\n | DragHandleEndEvent\n | CollapsePanelEvent\n | ExpandPanelEvent\n | SetPanelPixelSizeEvent\n | ApplyDeltaEvent\n | SetActualItemsSizeEvent;\n\ntype EventForType<T extends GroupMachineEvent[\"type\"]> = Extract<\n GroupMachineEvent,\n { type: T }\n>;\n\n// #endregion\n\n// #region Helpers\n\nexport function prepareSnapshot(snapshot: Snapshot<unknown>) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const snapshotContext = (snapshot as any)\n .context as unknown as GroupMachineContextValue;\n\n snapshotContext.dragOvershoot = new Big(snapshotContext.dragOvershoot);\n\n for (const item of snapshotContext.items) {\n if (isPanelData(item)) {\n item.currentValue.value = new Big(item.currentValue.value);\n\n if (item.collapsedSize) {\n item.collapsedSize.value = new Big(item.collapsedSize.value);\n }\n\n if (item.min) {\n item.min.value = new Big(item.min.value);\n }\n\n if (item.max && item.max !== \"1fr\") {\n item.max.value = new Big(item.max.value);\n }\n } else {\n item.size.value = new Big(item.size.value);\n }\n }\n\n return snapshot;\n}\n\n/** Assert that the provided event is one of the accepted types */\nfunction isEvent<T extends GroupMachineEvent[\"type\"]>(\n event: GroupMachineEvent,\n eventType: T[]\n): asserts event is EventForType<T> {\n invariant(\n eventType.includes(event.type as T),\n `Invalid event type: ${eventType}. Expected: ${eventType.join(\" | \")}`\n );\n}\n\n/** Determine if an item is a panel */\nexport function isPanelData(value: unknown): value is PanelData {\n return Boolean(\n value &&\n typeof value === \"object\" &&\n \"type\" in value &&\n value.type === \"panel\"\n );\n}\n\n/** Determine if an item is a panel handle */\nexport function isPanelHandle(value: unknown): value is PanelHandleData {\n return Boolean(\n value &&\n typeof value === \"object\" &&\n \"type\" in value &&\n value.type === \"handle\"\n );\n}\n\ninterface InitializePanelOptions {\n min?: Unit;\n max?: Unit;\n default?: Unit;\n collapsible?: boolean;\n collapsed?: boolean;\n collapsedSize?: Unit;\n onCollapseChange?: {\n current: ((isCollapsed: boolean) => void) | null | undefined;\n };\n collapseAnimation?: PanelData[\"collapseAnimation\"];\n defaultCollapsed?: boolean;\n id?: string;\n}\n\ntype InitializePanelOptionsWithId = InitializePanelOptions & { id: string };\n\nexport function initializePanel(item: InitializePanelOptionsWithId): PanelData;\nexport function initializePanel(\n item: InitializePanelOptions\n): Omit<PanelData, \"id\">;\nexport function initializePanel(\n item: InitializePanelOptions | InitializePanelOptionsWithId\n): PanelData | Omit<PanelData, \"id\"> {\n const data = {\n type: \"panel\" as const,\n min: parseUnit(item.min || \"0px\"),\n max: item.max ? parseUnit(item.max) : \"1fr\",\n collapsed: item.collapsible\n ? (item.collapsed ?? item.defaultCollapsed ?? false)\n : undefined,\n collapsible: item.collapsible,\n collapsedSize: parseUnit(item.collapsedSize ?? \"0px\"),\n onCollapseChange: item.onCollapseChange,\n collapseIsControlled: typeof item.collapsed !== \"undefined\",\n sizeBeforeCollapse: undefined,\n id: item.id,\n collapseAnimation: item.collapseAnimation,\n default: item.default ? parseUnit(item.default) : undefined,\n } satisfies Omit<PanelData, \"id\" | \"currentValue\"> & { id?: string };\n\n return { ...data, currentValue: makePixelUnit(-1) } satisfies Omit<\n PanelData,\n \"id\"\n >;\n}\n\nexport function initializePanelHandleData(item: InitializePanelHandleData) {\n return {\n type: \"handle\" as const,\n ...item,\n size: parseUnit(item.size) as ParsedPixelUnit,\n };\n}\n\n/** Parse a `Unit` string or `clamp` value */\nexport function parseUnit(unit: Unit | \"1fr\"): ParsedUnit {\n if (unit === \"1fr\") {\n unit = \"100%\";\n }\n\n if (unit.endsWith(\"px\")) {\n return makePixelUnit(parseFloat(unit));\n }\n\n if (unit.endsWith(\"%\")) {\n return makePercentUnit(parseFloat(unit));\n }\n\n throw new Error(`Invalid unit: ${unit}`);\n}\n\n/** Convert a `Unit` to a percentage of the group size */\nexport function getUnitPercentageValue(groupsSize: number, unit: ParsedUnit) {\n if (unit.type === \"pixel\") {\n return groupsSize === 0 ? 0 : unit.value.div(groupsSize).toNumber();\n }\n\n return unit.value.toNumber();\n}\n\nexport function getGroupSize(context: GroupMachineContextValue) {\n return context.orientation === \"horizontal\"\n ? context.size.width\n : context.size.height;\n}\n\n/** Get the size of a panel in pixels */\nexport function getUnitPixelValue(\n context: GroupMachineContextValue,\n unit: ParsedUnit | \"1fr\"\n) {\n const parsed = unit === \"1fr\" ? parseUnit(unit) : unit;\n return parsed.type === \"pixel\"\n ? parsed.value\n : new Big(parsed.value).div(100).mul(getGroupSize(context));\n}\n\n/** Clamp a new `currentValue` given the panel's constraints. */\nfunction clampUnit(\n context: GroupMachineContextValue,\n item: PanelData,\n value: Big.Big\n) {\n const min = getUnitPixelValue(context, item.min);\n const max = getUnitPixelValue(context, item.max);\n\n if (value.gte(min) && value.lte(max)) {\n return value;\n }\n\n return value.lt(min) ? min : max;\n}\n\n/** Get a panel with a particular ID. */\nexport function getPanelWithId(\n context: GroupMachineContextValue,\n panelId: string\n) {\n const item = context.items.find((i) => i.id === panelId);\n\n if (item && isPanelData(item)) {\n return item;\n }\n\n throw new Error(`Expected panel with id: ${panelId}`);\n}\n\n/** Get a panel with a particular ID. */\nfunction getPanelHandleIndex(\n context: GroupMachineContextValue,\n handleId: string\n) {\n const item = context.items.findIndex((i) => i.id === handleId);\n\n if (item !== -1 && isPanelHandle(context.items[item])) {\n return item;\n }\n\n throw new Error(`Expected panel handle with id: ${handleId}`);\n}\n\n/**\n * Get the panel that's collapsible next to a resize handle.\n * Will first check the left panel then the right.\n */\nexport function getCollapsiblePanelForHandleId(\n context: GroupMachineContextValue,\n handleId: string\n) {\n if (!context.items.length) {\n throw new Error(\"No items in group\");\n }\n\n const handleIndex = getPanelHandleIndex(context, handleId);\n const panelBefore = context.items[handleIndex - 1];\n const panelAfter = context.items[handleIndex + 1];\n\n if (panelBefore && isPanelData(panelBefore) && panelBefore.collapsible) {\n return panelBefore;\n }\n\n if (panelAfter && isPanelData(panelAfter) && panelAfter.collapsible) {\n return panelAfter;\n }\n\n throw new Error(`No collapsible panel found for handle: ${handleId}`);\n}\n\n/**\n * Get the handle closest to the target panel.\n * This is used to simulate collapse/expand\n */\nfunction getHandleForPanelId(\n context: GroupMachineContextValue,\n panelId: string\n) {\n const panelIndex = context.items.findIndex((item) => item.id === panelId);\n\n invariant(panelIndex !== -1, `Expected panel before: ${panelId}`);\n\n let item = context.items[panelIndex + 1];\n\n if (item && isPanelHandle(item)) {\n return { item, direction: 1 as const };\n }\n\n item = context.items[panelIndex - 1];\n\n if (item && isPanelHandle(item)) {\n return { item, direction: -1 as const };\n }\n\n throw new Error(`Cant find handle for panel: ${panelId}`);\n}\n\n/** Given the specified order props and default order of the items, order the items */\nfunction sortWithOrder(items: Array<Item>) {\n const defaultPlacement: Record<string, number> = {};\n const takenPlacements = items\n .map((i) => i.order)\n .filter((i): i is number => i !== undefined);\n\n let defaultOrder = 0;\n\n // Generate default orders for items that don't have it\n for (const item of items) {\n if (item.order === undefined) {\n while (\n takenPlacements.includes(defaultOrder) ||\n Object.values(defaultPlacement).includes(defaultOrder)\n ) {\n defaultOrder++;\n }\n\n defaultPlacement[item.id] = defaultOrder;\n }\n }\n\n const withoutOrder = items.filter((i) => i.order === undefined);\n const sortedWithOrder = items\n .filter((i) => i.order !== undefined)\n .sort((a, b) => a.order! - b.order!);\n\n for (const item of sortedWithOrder) {\n // insert item at order index\n withoutOrder.splice(item.order!, 0, item);\n }\n\n return withoutOrder;\n}\n\n/** Check if the panel has space available to add to */\nfunction panelHasSpace(\n context: GroupMachineContextValue,\n item: PanelData,\n adjustment: \"add\" | \"subtract\"\n) {\n invariant(\n item.currentValue.type === \"pixel\",\n `panelHasSpace only works with number values: ${item.id} ${item.currentValue}`\n );\n\n if (item.collapsible && !item.collapsed) {\n return true;\n }\n\n if (adjustment === \"add\") {\n return (\n item.currentValue.value.gte(getUnitPixelValue(context, item.min)) &&\n item.currentValue.value.lt(getUnitPixelValue(context, item.max))\n );\n }\n\n return (\n item.currentValue.value.gt(getUnitPixelValue(context, item.min)) &&\n item.currentValue.value.lte(getUnitPixelValue(context, item.max))\n );\n}\n\n/** Search in a `direction` for a panel that still has space to expand. */\nfunction findPanelWithSpace(\n context: GroupMachineContextValue,\n items: Array<Item>,\n start: number,\n direction: number,\n adjustment: \"add\" | \"subtract\",\n disregardCollapseBuffer?: boolean\n) {\n const slice =\n direction === -1 ? items.slice(0, start + 1).reverse() : items.slice(start);\n\n for (const panel of slice) {\n if (!isPanelData(panel)) {\n continue;\n }\n\n const targetPanel = disregardCollapseBuffer\n ? createUnrestrainedPanel(context, panel)\n : panel;\n\n if (panelHasSpace(context, targetPanel, adjustment)) {\n return panel;\n }\n }\n}\n\n/** Add up all the static values in the layout */\nfunction getStaticWidth(context: GroupMachineContextValue) {\n let width = new Big(0);\n\n for (const item of context.items) {\n if (isPanelHandle(item)) {\n width = width.add(item.size.value);\n } else if (\n isPanelData(item) &&\n item.collapsed &&\n item.currentValue.type === \"pixel\"\n ) {\n width = width.add(item.currentValue.value);\n } else if (\n isPanelData(item) &&\n item.default &&\n item.default.type === \"pixel\"\n ) {\n width = width.add(item.default.value);\n }\n }\n\n return width;\n}\n\nfunction formatUnit(unit: ParsedUnit): Unit {\n if (unit.type === \"pixel\") {\n return `${unit.value.toNumber()}px`;\n }\n\n return `${unit.value.toNumber()}%`;\n}\n\n/** Build the grid template from the item values. */\nexport function buildTemplate(context: GroupMachineContextValue) {\n const staticWidth = getStaticWidth(context);\n\n return context.items\n .map((item) => {\n if (item.type === \"panel\") {\n const min = formatUnit(item.min);\n\n if (\n item.currentValue.type === \"pixel\" &&\n item.currentValue.value.toNumber() !== -1\n ) {\n if (item.currentValue.value.toNumber() < 0) {\n return \"0px\";\n }\n\n return formatUnit(item.currentValue);\n } else if (item.currentValue.type === \"percent\") {\n const max = item.max === \"1fr\" ? \"100%\" : formatUnit(item.max);\n return `minmax(${min}, min(calc(${item.currentValue.value} * (100% - ${staticWidth}px)), ${max}))`;\n } else if (item.collapsible && item.collapsed) {\n return formatUnit(item.collapsedSize);\n } else if (item.default) {\n return formatUnit(item.default);\n }\n\n const max = item.max === \"1fr\" ? \"1fr\" : formatUnit(item.max);\n return `minmax(${min}, ${max})`;\n }\n\n return formatUnit(item.size);\n })\n .join(\" \");\n}\n\nfunction addDeDuplicatedItems(items: Array<Item>, newItem: Item) {\n const currentItemIndex = items.findIndex(\n (item) =>\n item.id === newItem.id ||\n (typeof item.order === \"number\" && item.order === newItem.order)\n );\n\n let restItems = items;\n\n if (currentItemIndex !== -1) {\n restItems = items.filter((_, index) => index !== currentItemIndex);\n }\n\n return sortWithOrder([...restItems, newItem]);\n}\n\nfunction createUnrestrainedPanel(_: GroupMachineContextValue, data: PanelData) {\n return {\n ...data,\n min: makePixelUnit(-100000),\n max: makePixelUnit(100000),\n };\n}\n\n// #endregion\n\n// #region Update Logic\n\n/**\n * This is the main meat of the layout logic.\n * It's responsible for figuring out how to distribute the space\n * amongst the panels.\n *\n * It's built around applying small deltas to panels relative to their\n * the resize handles.\n *\n * As much as possible we try to rely on the browser to do the layout.\n * During the initial layout we rely on CSS grid and a group might be\n * defined like this:\n *\n * ```css\n * grid-template-columns: minmax(100px, 1fr) 1px minmax(100px, 300px);\n * ```\n *\n * Without any resizing this is nice and simple and the components don't do much.\n *\n * Once the user starts resizing the layout will be more complex.\n *\n * It's broken down into 3 phases:\n *\n * 1. `prepareItems` - The size of the group has been measure and we\n * can convert all the panel sizes into pixels. Converting into pixels\n * makes doing the math for the updates easier.\n *\n * ```css\n * grid-template-columns: 500px 1px 300px;\n * ```\n *\n * 2. `updateLayout` - This is where the actual updates are applied.\n * This is where the user's drag interactions are applied. We also\n * use this to collapse/expand panels by simulating a drag interaction.\n *\n * ```css\n * grid-template-columns: 490px 1px 310px;\n * ```\n *\n * 3. `commitLayout` - Once the updates have been applied we convert the\n * updated sizes back into a format that allows for easy resizing without\n * lots of updates.\n *\n * ```css\n * grid-template-columns: minmax(100px, min(calc(0.06117 * (100% - 1px)), 100%)) 1px minmax(100px, min(calc(0.0387 * (100% - 1px)), 300px));\n * ```\n *\n * When another update loop is triggered the above template will be converted back to pixels.\n */\n\n/** Converts the items to pixels */\nexport function prepareItems(context: GroupMachineContextValue) {\n const newItems = [...context.items];\n const staticWidth = getStaticWidth(context);\n\n for (const item of newItems) {\n if (!item || !isPanelData(item)) {\n continue;\n }\n\n if (item.currentValue.type === \"pixel\") {\n continue;\n }\n\n const pixel = new Big(getGroupSize(context))\n .minus(staticWidth)\n .mul(item.currentValue.value);\n\n item.currentValue = makePixelUnit(pixel.toNumber());\n }\n\n return newItems;\n}\n\n/** On every mouse move we distribute the space added */\nfunction updateLayout(\n context: GroupMachineContextValue,\n dragEvent:\n | (DragHandleEvent & {\n controlled?: boolean;\n disregardCollapseBuffer?: never;\n })\n | {\n type: \"collapsePanel\";\n value: MoveMoveEvent;\n handleId: string;\n controlled?: boolean;\n disregardCollapseBuffer?: boolean;\n }\n): Partial<GroupMachineContextValue> {\n const handleIndex = getPanelHandleIndex(context, dragEvent.handleId);\n const handle = context.items[handleIndex] as PanelHandleData;\n const newItems = [...context.items];\n\n let moveAmount =\n context.orientation === \"horizontal\"\n ? dragEvent.value.deltaX\n : dragEvent.value.deltaY;\n\n if (dragEvent.value.shiftKey) {\n moveAmount *= 15;\n }\n\n if (moveAmount === 0) {\n return {};\n }\n\n const moveDirection = moveAmount / Math.abs(moveAmount);\n\n // Go forward into the shrinking panels to find a panel that still has space.\n const panelBefore = findPanelWithSpace(\n context,\n newItems,\n handleIndex + moveDirection,\n moveDirection,\n \"subtract\",\n dragEvent.disregardCollapseBuffer\n );\n\n // No panel with space, just record the drag overshoot\n if (!panelBefore) {\n return {\n dragOvershoot: context.dragOvershoot.add(moveAmount),\n };\n }\n\n invariant(isPanelData(panelBefore), `Expected panel before: ${handle.id}`);\n\n const panelAfter = newItems[handleIndex - moveDirection];\n\n invariant(\n panelAfter && isPanelData(panelAfter),\n `Expected panel after: ${handle.id}`\n );\n\n if (\n panelAfter.currentValue.value.eq(getUnitPixelValue(context, panelAfter.max))\n ) {\n return {\n dragOvershoot: context.dragOvershoot.add(moveAmount),\n };\n }\n\n const newDragOvershoot = context.dragOvershoot.add(moveAmount);\n\n // Don't let the panel expand until the threshold is reached\n if (!dragEvent.disregardCollapseBuffer) {\n const isInLeftBuffer = newDragOvershoot.lt(0) && moveDirection > 0;\n const isInLeftOvershoot = newDragOvershoot.gt(0) && moveDirection > 0;\n const isInRightBuffer = newDragOvershoot.gt(0) && moveDirection < 0;\n const isInRightOvershoot = newDragOvershoot.lt(0) && moveDirection < 0;\n const potentialNewValue = panelAfter.currentValue.value.add(\n new Big(newDragOvershoot).mul(isInRightBuffer ? moveDirection : 1)\n );\n const min = getUnitPixelValue(context, panelAfter.min);\n\n const isInDragBugger =\n newDragOvershoot.abs().lt(COLLAPSE_THRESHOLD) &&\n panelAfter.collapsible &&\n panelAfter.collapsed &&\n (isInLeftOvershoot || isInRightOvershoot);\n\n if (\n potentialNewValue.lte(min) &&\n (newDragOvershoot.eq(0) ||\n isInRightBuffer ||\n isInLeftBuffer ||\n isInDragBugger)\n ) {\n return { dragOvershoot: newDragOvershoot };\n }\n }\n\n // Don't let the panel collapse until the threshold is reached\n if (\n panelBefore.collapsible &&\n panelBefore.currentValue.value ===\n getUnitPixelValue(context, panelBefore.min)\n ) {\n const potentialNewValue = panelBefore.currentValue.value.sub(\n newDragOvershoot.abs()\n );\n\n if (\n newDragOvershoot.abs().lt(COLLAPSE_THRESHOLD) &&\n potentialNewValue.gt(\n getUnitPixelValue(context, panelBefore.collapsedSize)\n )\n ) {\n return { dragOvershoot: newDragOvershoot };\n }\n }\n\n // Apply the move amount to the panel before the slider\n const unrestrainedPanelBefore = createUnrestrainedPanel(context, panelBefore);\n const panelBeforePreviousValue = panelBefore.currentValue.value;\n const panelBeforeNewValueRaw = panelBefore.currentValue.value.minus(\n new Big(moveAmount).mul(moveDirection)\n );\n let panelBeforeNewValue = dragEvent.disregardCollapseBuffer\n ? clampUnit(context, unrestrainedPanelBefore, panelBeforeNewValueRaw)\n : clampUnit(context, panelBefore, panelBeforeNewValueRaw);\n\n // Also apply the move amount the panel after the slider\n const unrestrainedPanelAfter = createUnrestrainedPanel(context, panelAfter);\n const panelAfterPreviousValue = panelAfter.currentValue.value;\n const applied = panelBeforePreviousValue.minus(panelBeforeNewValue);\n const panelAfterNewValueRaw = panelAfter.currentValue.value.add(applied);\n let panelAfterNewValue = dragEvent.disregardCollapseBuffer\n ? clampUnit(context, unrestrainedPanelAfter, panelAfterNewValueRaw)\n : clampUnit(context, panelAfter, panelAfterNewValueRaw);\n\n if (dragEvent.disregardCollapseBuffer) {\n if (panelAfter.collapsible && panelAfter.collapsed) {\n panelAfter.collapsed = false;\n }\n }\n // If the panel was collapsed, expand it\n // We need to re-apply the move amount since the the expansion of the\n // collapsed panel disregards that.\n else if (panelAfter.collapsible && panelAfter.collapsed) {\n if (\n panelAfter.onCollapseChange?.current &&\n panelAfter.collapseIsControlled &&\n !dragEvent.controlled\n ) {\n panelAfter.onCollapseChange.current(false);\n return { dragOvershoot: newDragOvershoot };\n }\n\n // Calculate the amount \"extra\" after the minSize the panel should grow\n const extra =\n // Take the size it was at\n getUnitPixelValue(context, panelAfter.collapsedSize)\n // Add in the full overshoot so the cursor is near the slider\n .add(context.dragOvershoot.abs())\n // Subtract the min size of the panel\n .sub(\n panelAfterNewValue\n // Then re-add the move amount\n .add(Math.abs(moveAmount))\n );\n\n panelAfter.collapsed = false;\n\n if (extra.gt(0)) {\n panelAfterNewValue = panelAfterNewValue.add(extra);\n }\n\n panelBeforeNewValue = panelBeforeNewValue\n // Subtract the delta of the after panel's size\n .minus(\n panelAfterNewValue\n .minus(panelAfterPreviousValue)\n // And then re-apply the movement value\n .minus(Math.abs(moveAmount))\n );\n\n if (\n panelAfter.onCollapseChange?.current &&\n !panelAfter.collapseIsControlled &&\n !dragEvent.controlled\n ) {\n panelAfter.onCollapseChange.current(false);\n }\n }\n\n const panelBeforeIsAboutToCollapse =\n panelBefore.currentValue.value ===\n getUnitPixelValue(context, panelBefore.min);\n\n // If the panel was expanded and now is at it's min size, collapse it\n if (\n !dragEvent.disregardCollapseBuffer &&\n panelBefore.collapsible &&\n panelBeforeIsAboutToCollapse\n ) {\n if (\n panelBefore.onCollapseChange?.current &&\n panelBefore.collapseIsControlled &&\n !dragEvent.controlled\n ) {\n panelBefore.onCollapseChange.current(true);\n return { dragOvershoot: newDragOvershoot };\n }\n\n // Make it collapsed\n panelBefore.collapsed = true;\n panelBeforeNewValue = getUnitPixelValue(context, panelBefore.collapsedSize);\n // Add the extra space created to the before panel\n panelAfterNewValue = panelAfterNewValue.add(\n panelBeforePreviousValue.minus(panelBeforeNewValue)\n );\n\n if (\n panelBefore.onCollapseChange?.current &&\n !panelBefore.collapseIsControlled &&\n !dragEvent.controlled\n ) {\n panelBefore.onCollapseChange.current(true);\n }\n }\n\n panelBefore.currentValue = { type: \"pixel\", value: panelBeforeNewValue };\n panelAfter.currentValue = { type: \"pixel\", value: panelAfterNewValue };\n\n const leftoverSpace = new Big(getGroupSize(context)).minus(\n newItems.reduce(\n (acc, b) => acc.add(isPanelData(b) ? b.currentValue.value : b.size.value),\n new Big(0)\n )\n );\n\n if (leftoverSpace.gt(0)) {\n panelBefore.currentValue.value =\n panelBefore.currentValue.value.add(leftoverSpace);\n }\n\n return { items: newItems };\n}\n\n/** Converts the items to percentages */\nexport function commitLayout(context: GroupMachineContextValue) {\n const newItems = [...context.items];\n\n // First set all the static width\n newItems.forEach((item, index) => {\n if (item.type !== \"panel\") {\n return;\n }\n\n if (item.collapsed) {\n newItems[index] = {\n ...item,\n currentValue: item.collapsedSize,\n };\n }\n });\n\n const staticWidth = getStaticWidth({ ...context, items: newItems });\n\n newItems.forEach((item, index) => {\n if (item.type !== \"panel\" || item.collapsed) {\n return;\n }\n\n newItems[index] = {\n ...item,\n currentValue: {\n type: \"percent\",\n value: item.currentValue.value.div(\n new Big(getGroupSize(context)).sub(staticWidth)\n ),\n },\n };\n });\n\n return newItems;\n}\n\nexport function dragHandlePayload({\n delta,\n orientation,\n shiftKey = false,\n}: {\n delta: number;\n orientation: Orientation;\n shiftKey?: boolean;\n}) {\n return {\n type: \"move\",\n pointerType: \"keyboard\",\n shiftKey,\n ctrlKey: false,\n altKey: false,\n metaKey: false,\n deltaX: orientation === \"horizontal\" ? delta : 0,\n deltaY: orientation === \"horizontal\" ? 0 : delta,\n } as const;\n}\n\n/** Iteratively applies a large delta value simulating a user's drag */\nfunction iterativelyUpdateLayout({\n context,\n handleId,\n delta,\n direction,\n controlled,\n disregardCollapseBuffer,\n}: {\n context: GroupMachineContextValue;\n handleId: string;\n delta: Big.Big;\n direction: -1 | 1;\n controlled?: boolean;\n disregardCollapseBuffer?: boolean;\n}) {\n let newContext: Partial<GroupMachineContextValue> = context;\n\n for (let i = 0; i < delta.abs().toNumber(); i++) {\n newContext = updateLayout(\n {\n ...context,\n ...newContext,\n },\n {\n handleId,\n type: \"collapsePanel\",\n controlled,\n disregardCollapseBuffer,\n value: dragHandlePayload({\n delta: direction,\n orientation: context.orientation,\n }),\n }\n );\n }\n\n return newContext;\n}\n\nfunction applyDeltaInBothDirections(\n context: GroupMachineContextValue,\n newItems: Array<Item>,\n itemIndex: number,\n delta: Big.Big\n) {\n let hasTriedBothDirections = false;\n let direction = 1;\n let deltaLeft = new Big(delta);\n\n // Starting from where the items was removed add space to the panels around it.\n // This is only needed for conditional rendering.\n while (deltaLeft.toNumber() !== 0) {\n const targetPanel = findPanelWithSpace(\n context,\n newItems,\n itemIndex + direction,\n direction,\n delta.gt(0) ? \"add\" : \"subtract\"\n );\n\n if (!targetPanel) {\n if (hasTriedBothDirections) {\n break;\n } else {\n direction = direction === 1 ? -1 : 1;\n hasTriedBothDirections = true;\n continue;\n }\n }\n\n const oldValue = targetPanel.currentValue.value;\n const newValue = clampUnit(context, targetPanel, oldValue.add(deltaLeft));\n\n targetPanel.currentValue.value = newValue;\n deltaLeft = deltaLeft.sub(newValue.sub(oldValue));\n direction = direction === 1 ? -1 : 1;\n }\n}\n\n// #endregion\n\n// #region Machine\n\ninterface AnimationActorInput {\n context: GroupMachineContextValue;\n event: CollapsePanelEvent | ExpandPanelEvent;\n send: (event: GroupMachineEvent) => void;\n}\n\ninterface AnimationActorOutput {\n panelId: string;\n action: \"expand\" | \"collapse\";\n}\n\nconst animationActor = fromPromise<\n AnimationActorOutput | undefined,\n AnimationActorInput\n>(\n ({ input: { send, context, event } }) =>\n new Promise<AnimationActorOutput | undefined>((resolve) => {\n const panel = getPanelWithId(context, event.panelId);\n const handle = getHandleForPanelId(context, event.panelId);\n\n let direction = new Big(handle.direction);\n let fullDelta = new Big(0);\n\n if (event.type === \"expandPanel\") {\n fullDelta = new Big(\n panel.sizeBeforeCollapse ?? getUnitPixelValue(context, panel.min)\n ).minus(panel.currentValue.value);\n } else {\n const collapsedSize = getUnitPixelValue(context, panel.collapsedSize);\n\n panel.sizeBeforeCollapse = panel.currentValue.value.toNumber();\n direction = direction.mul(new Big(-1));\n fullDelta = panel.currentValue.value.minus(collapsedSize);\n }\n\n const fps = 60;\n const { duration, ease } = getCollapseAnimation(panel);\n const totalFrames = Math.ceil(\n panel.collapseAnimation ? duration / (1000 / fps) : 1\n );\n let frame = 0;\n let appliedDelta = new Big(0);\n\n function renderFrame() {\n const progress = ++frame / totalFrames;\n const e = new Big(panel.collapseAnimation ? ease(progress) : 1);\n const delta = e.mul(fullDelta).sub(appliedDelta).mul(direction);\n\n send({\n type: \"applyDelta\",\n handleId: handle.item.id,\n delta: delta.toNumber(),\n });\n\n appliedDelta = appliedDelta.add(\n delta\n .abs()\n .mul(\n (delta.gt(0) && direction.lt(0)) ||\n (delta.lt(0) && direction.gt(0))\n ? -1\n : 1\n )\n );\n\n if (e.eq(1)) {\n const action = event.type === \"expandPanel\" ? \"expand\" : \"collapse\";\n resolve({ panelId: panel.id, action });\n return false;\n }\n\n return true;\n }\n\n raf(renderFrame);\n })\n);\n\nexport const groupMachine = createMachine(\n {\n initial: \"idle\",\n types: {\n context: {} as GroupMachineContextValue,\n events: {} as GroupMachineEvent,\n input: {} as {\n autosaveId?: string;\n orientation?: Orientation;\n groupId: string;\n initialItems?: Item[];\n },\n },\n context: ({ input }) => ({\n size: { width: 0, height: 0 },\n items: input.initialItems || [],\n orientation: input.orientation || \"horizontal\",\n dragOvershoot: new Big(0),\n autosaveId: input.autosaveId,\n groupId: input.groupId,\n }),\n states: {\n idle: {\n on: {\n setActualItemsSize: { actions: [\"recordActualItemSize\"] },\n dragHandleStart: { target: \"dragging\" },\n setPanelPixelSize: {\n actions: [\"prepare\", \"onSetPanelSize\", \"commit\"],\n },\n collapsePanel: [\n {\n actions: \"notifyCollapseToggle\",\n guard: \"shouldNotifyCollapseToggle\",\n },\n { target: \"togglingCollapse\" },\n ],\n expandPanel: [\n {\n actions: \"notifyCollapseToggle\",\n guard: \"shouldNotifyCollapseToggle\",\n },\n { target: \"togglingCollapse\" },\n ],\n },\n },\n dragging: {\n entry: [\"prepare\"],\n on: {\n dragHandle: { actions: [\"onDragHandle\"] },\n dragHandleEnd: { target: \"idle\" },\n collapsePanel: {\n guard: \"shouldCollapseToggle\",\n actions: \"runCollapseToggle\",\n },\n expandPanel: {\n guard: \"shouldCollapseToggle\",\n actions: \"runCollapseToggle\",\n },\n },\n exit: [\"commit\", \"onAutosave\"],\n },\n togglingCollapse: {\n entry: [\"prepare\"],\n invoke: {\n src: \"animation\",\n input: (i) => ({ ...i, send: i.self.send }),\n onDone: {\n target: \"idle\",\n actions: [\"onToggleCollapseComplete\", \"commit\", \"onAutosave\"],\n },\n },\n on: {\n applyDelta: { actions: [\"onApplyDelta\"] },\n },\n },\n },\n on: {\n registerPanel: { actions: [\"assignPanelData\"] },\n registerDynamicPanel: {\n actions: [\"prepare\", \"onRegisterDynamicPanel\", \"commit\", \"onAutosave\"],\n },\n unregisterPanel: {\n actions: [\"prepare\", \"removeItem\", \"commit\", \"onAutosave\"],\n },\n registerPanelHandle: { actions: [\"assignPanelHandleData\"] },\n unregisterPanelHandle: {\n actions: [\"prepare\", \"removeItem\", \"commit\", \"onAutosave\"],\n },\n setSize: { actions: [\"updateSize\"] },\n setOrientation: { actions: [\"updateOrientation\"] },\n },\n },\n {\n guards: {\n shouldNotifyCollapseToggle: ({ context, event }) => {\n isEvent(event, [\"collapsePanel\", \"expandPanel\"]);\n const panel = getPanelWithId(context, event.panelId);\n return !event.controlled && panel.collapseIsControlled === true;\n },\n shouldCollapseToggle: ({ context, event }) => {\n isEvent(event, [\"collapsePanel\", \"expandPanel\"]);\n const panel = getPanelWithId(context, event.panelId);\n return panel.collapseIsControlled === true;\n },\n },\n actors: {\n animation: animationActor,\n },\n actions: {\n notifyCollapseToggle: ({ context, event }) => {\n isEvent(event, [\"collapsePanel\", \"expandPanel\"]);\n const panel = getPanelWithId(context, event.panelId);\n panel.onCollapseChange?.current?.(!panel.collapsed);\n },\n runCollapseToggle: enqueueActions(({ context, event, enqueue }) => {\n isEvent(event, [\"collapsePanel\", \"expandPanel\"]);\n\n const handle = getHandleForPanelId(context, event.panelId);\n // When collapsing a panel it will be in the opposite direction\n // that handle assumes\n const delta =\n event.type === \"collapsePanel\"\n ? handle.direction * -1\n : handle.direction;\n const newContext = updateLayout(context, {\n handleId: handle.item.id,\n type: \"dragHandle\",\n controlled: event.controlled,\n value: dragHandlePayload({ delta, orientation: context.orientation }),\n });\n\n enqueue.assign(newContext);\n }),\n onToggleCollapseComplete: assign({\n items: ({ context, event: e }) => {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const output = (e as any).output as AnimationActorOutput;\n invariant(output, \"Expected output from animation actor\");\n\n const panel = getPanelWithId(context, output.panelId);\n panel.collapsed = output.action === \"collapse\";\n\n if (panel.collapsed) {\n panel.currentValue = panel.collapsedSize;\n }\n\n return context.items;\n },\n }),\n updateSize: assign({\n size: ({ event }) => {\n isEvent(event, [\"setSize\"]);\n return event.size;\n },\n }),\n recordActualItemSize: assign({\n items: ({ context, event }) => {\n isEvent(event, [\"setActualItemsSize\"]);\n\n const orientation = context.orientation;\n\n for (const [id, size] of Object.entries(event.childrenSizes)) {\n const item = context.items.find((i) => i.id === id);\n\n if (!isPanelData(item)) {\n continue;\n }\n\n item.currentValue = makePixelUnit(\n orientation === \"horizontal\" ? size.width : size.height\n );\n }\n\n return commitLayout(context);\n },\n }),\n updateOrientation: assign({\n orientation: ({ event }) => {\n isEvent(event, [\"setOrientation\"]);\n return event.orientation;\n },\n }),\n assignPanelData: assign({\n items: ({ context, event }) => {\n isEvent(event, [\"registerPanel\"]);\n\n return addDeDuplicatedItems(context.items, {\n type: \"panel\",\n currentValue: makePixelUnit(-1),\n ...event.data,\n });\n },\n }),\n onRegisterDynamicPanel: assign({\n items: ({ context, event }) => {\n isEvent(event, [\"registerDynamicPanel\"]);\n\n let currentValue: ParsedUnit = makePixelUnit(0);\n\n if (\n event.data.collapsible &&\n event.data.collapsed &&\n event.data.collapsedSize\n ) {\n currentValue = event.data.collapsedSize;\n } else if (event.data.default) {\n currentValue = event.data.default;\n } else {\n currentValue = event.data.min;\n }\n\n const newItems = addDeDuplicatedItems(context.items, {\n type: \"panel\",\n ...event.data,\n currentValue,\n });\n const itemIndex = newItems.findIndex(\n (item) => item.id === event.data.id\n );\n const newContext = { ...context, items: newItems };\n const overflowDueToHandles = context.items\n .reduce((acc, i) => {\n if (isPanelHandle(i)) {\n return acc.add(getUnitPixelValue(context, i.size));\n }\n\n return acc.add(i.currentValue.value);\n }, new Big(0))\n .minus(getGroupSize(context));\n\n applyDeltaInBothDirections(\n newContext,\n newItems,\n itemIndex,\n currentValue.value.add(overflowDueToHandles).neg()\n );\n\n return newItems;\n },\n }),\n assignPanelHandleData: assign({\n items: ({ context, event }) => {\n isEvent(event, [\"registerPanelHandle\"]);\n\n const unit = parseUnit(event.data.size);\n\n return addDeDuplicatedItems(context.items, {\n type: \"handle\",\n ...event.data,\n size: {\n type: \"pixel\",\n value: new Big(unit.value),\n },\n });\n },\n }),\n removeItem: assign({\n items: ({ context, event }) => {\n isEvent(event, [\"unregisterPanel\", \"unregisterPanelHandle\"]);\n const itemIndex = context.items.findIndex(\n (item) => item.id === event.id\n );\n const item = context.items[itemIndex];\n\n if (!item) {\n return context.items;\n }\n\n const newItems = context.items.filter((i) => i.id !== event.id);\n const removedSize = isPanelData(item)\n ? item.currentValue.value\n : item.size.value;\n\n applyDeltaInBothDirections(context, newItems, itemIndex, removedSize);\n\n return newItems;\n },\n }),\n prepare: assign({\n items: ({ context }) => prepareItems(context),\n }),\n onDragHandle: enqueueActions(({ context, event, enqueue }) => {\n isEvent(event, [\"dragHandle\"]);\n enqueue.assign(updateLayout(context, event));\n }),\n commit: assign({\n dragOvershoot: new Big(0),\n items: ({ context }) => commitLayout(context),\n }),\n onApplyDelta: assign(({ context, event }) => {\n isEvent(event, [\"applyDelta\"]);\n return updateLayout(context, {\n handleId: event.handleId,\n type: \"collapsePanel\",\n disregardCollapseBuffer: true,\n value: dragHandlePayload({\n delta: event.delta,\n orientation: context.orientation,\n }),\n });\n }),\n onSetPanelSize: enqueueActions(({ context, event, enqueue }) => {\n isEvent(event, [\"setPanelPixelSize\"]);\n\n const panel = getPanelWithId(context, event.panelId);\n const handle = getHandleForPanelId(context, event.panelId);\n const current = panel.currentValue.value;\n const newSize = clampUnit(\n context,\n panel,\n getUnitPixelValue(context, parseUnit(event.size))\n );\n const isBigger = newSize > current;\n const delta = isBigger\n ? newSize.minus(current)\n : current.minus(newSize);\n\n enqueue.assign(\n iterativelyUpdateLayout({\n context,\n direction: (handle.direction * (isBigger ? 1 : -1)) as -1 | 1,\n handleId: handle.item.id,\n delta,\n })\n );\n }),\n },\n }\n);\n\n// #endregion\n"]}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"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","sourcesContent":["import { raf } from \"@react-spring/rafz\";\nimport {\n createMachine,\n assign,\n enqueueActions,\n fromPromise,\n Snapshot,\n} from \"xstate\";\nimport invariant from \"invariant\";\nimport Big from \"big.js\";\n\n// #region Constants\n\n/** The default amount a user can `dragOvershoot` before the panel collapses */\nconst COLLAPSE_THRESHOLD = 50;\n\n// #endregion\n\n// #region Types\n\nexport type PixelUnit = `${number}px`;\nexport type PercentUnit = `${number}%`;\nexport type Unit = PixelUnit | PercentUnit;\ntype Orientation = \"horizontal\" | \"vertical\";\n\ninterface ParsedPercentUnit {\n type: \"percent\";\n value: Big.Big;\n}\n\ninterface ParsedPixelUnit {\n type: \"pixel\";\n value: Big.Big;\n}\n\ntype ParsedUnit = ParsedPercentUnit | ParsedPixelUnit;\n\nexport function makePercentUnit(value: number): ParsedPercentUnit {\n return { type: \"percent\", value: new Big(value) };\n}\n\nexport function makePixelUnit(value: number): ParsedPixelUnit {\n return { type: \"pixel\", value: new Big(value) };\n}\n\ninterface MoveMoveEvent {\n shiftKey: boolean;\n ctrlKey: boolean;\n metaKey: boolean;\n altKey: boolean;\n deltaX: number;\n deltaY: number;\n}\n\nexport interface Constraints<T extends ParsedUnit | Unit = ParsedUnit> {\n /** The minimum size of the panel */\n min?: T;\n /** The maximum size of the panel */\n max?: T;\n /** The default size of the panel */\n default?: T;\n /** Whether the panel is collapsible */\n collapsible?: boolean;\n /** Whether the panel should initially render as collapsed */\n defaultCollapsed?: boolean;\n /** The size of the panel once collapsed */\n collapsedSize?: T;\n}\n\ninterface Order {\n /**\n * When dynamically rendering panels/handles you need to add the order prop.\n * This tells the component what place the items should be in once rendered.\n */\n order?: number;\n}\n\nexport interface PanelData\n extends Omit<Constraints, \"min\" | \"max\" | \"collapsedSize\">,\n Required<Pick<Constraints, \"min\" | \"collapsedSize\">>,\n Order {\n max: ParsedUnit | \"1fr\";\n type: \"panel\";\n id: string;\n /** Whether the collapsed state is controlled by the consumer or not */\n collapseIsControlled?: boolean;\n /** A ref to the latest \"collapseChange\" function provided by the user */\n onCollapseChange?: {\n current: ((isCollapsed: boolean) => void) | null | undefined;\n };\n /**\n * The current value for the item in the grid\n */\n currentValue: ParsedUnit;\n /** Whether the panel is currently collapsed */\n collapsed: boolean | undefined;\n /**\n * The size the panel was before being collapsed.\n * This is used to re-open the panel at the same size.\n * If the panel starts out collapsed it will use the `min`.\n */\n sizeBeforeCollapse: number | undefined;\n /** Animate the collapse/expand */\n collapseAnimation?:\n | CollapseAnimation\n | { duration: number; easing: CollapseAnimation | ((t: number) => number) };\n}\n\nfunction getCollapseAnimation(panel: PanelData) {\n let easeFn = collapseAnimations.linear;\n let duration = 300;\n\n if (panel.collapseAnimation) {\n if (typeof panel.collapseAnimation === \"string\") {\n easeFn = collapseAnimations[panel.collapseAnimation];\n } else if (\"duration\" in panel.collapseAnimation) {\n duration = panel.collapseAnimation.duration ?? duration;\n easeFn =\n typeof panel.collapseAnimation.easing === \"function\"\n ? panel.collapseAnimation.easing\n : collapseAnimations[panel.collapseAnimation.easing];\n }\n }\n\n return { ease: easeFn, duration };\n}\n\n/** Copied from https://github.com/d3/d3-ease */\nconst collapseAnimations = {\n \"ease-in-out\": function quadInOut(t: number) {\n return ((t *= 2) <= 1 ? t * t : --t * (2 - t) + 1) / 2;\n },\n bounce: function backInOut(t: number) {\n const s = 1.70158;\n return (\n ((t *= 2) < 1\n ? t * t * ((s + 1) * t - s)\n : (t -= 2) * t * ((s + 1) * t + s) + 2) / 2\n );\n },\n linear: function linear(t: number) {\n return +t;\n },\n};\n\ntype CollapseAnimation = keyof typeof collapseAnimations;\n\nexport interface PanelHandleData extends Order {\n type: \"handle\";\n id: string;\n /**\n * The size of the panel handle.\n * Needed to correctly calculate the percentage of modified panels.\n */\n size: ParsedPixelUnit;\n}\n\nexport type Item = PanelData | PanelHandleData;\n\ninterface RegisterPanelEvent {\n /** Register a new panel with the state machine */\n type: \"registerPanel\";\n data: Omit<PanelData, \"type\" | \"currentValue\" | \"defaultCollapsed\">;\n}\n\ninterface RegisterDynamicPanelEvent extends Omit<RegisterPanelEvent, \"type\"> {\n /** Register a new panel with the state machine */\n type: \"registerDynamicPanel\";\n}\n\ninterface UnregisterPanelEvent {\n /** Remove a panel from the state machine */\n type: \"unregisterPanel\";\n id: string;\n}\n\nexport type InitializePanelHandleData = Omit<\n PanelHandleData,\n \"type\" | \"size\"\n> & {\n size: PixelUnit | ParsedPixelUnit;\n};\n\ninterface RegisterPanelHandleEvent {\n /** Register a new panel handle with the state machine */\n type: \"registerPanelHandle\";\n data: InitializePanelHandleData;\n}\n\ninterface UnregisterPanelHandleEvent {\n /** Remove a panel handle from the state machine */\n type: \"unregisterPanelHandle\";\n id: string;\n}\n\ninterface DragHandleStartEvent {\n /** Start a drag interaction */\n type: \"dragHandleStart\";\n /** The handle being interacted with */\n handleId: string;\n}\n\ninterface DragHandleEvent {\n /** Update the layout according to how the handle moved */\n type: \"dragHandle\";\n /** The handle being interacted with */\n handleId: string;\n value: MoveMoveEvent;\n}\n\ninterface DragHandleEndEvent {\n /** End a drag interaction */\n type: \"dragHandleEnd\";\n /** The handle being interacted with */\n handleId: string;\n}\n\nexport interface Rect {\n width: number;\n height: number;\n}\n\ninterface SetSizeEvent {\n /** Set the size of the whole group */\n type: \"setSize\";\n size: Rect;\n}\n\ninterface SetActualItemsSizeEvent {\n /** Set the size of the whole group */\n type: \"setActualItemsSize\";\n childrenSizes: Record<string, Rect>;\n}\n\ninterface ApplyDeltaEvent {\n type: \"applyDelta\";\n delta: number;\n handleId: string;\n}\n\ninterface SetOrientationEvent {\n /** Set the orientation of the group */\n type: \"setOrientation\";\n orientation: Orientation;\n}\n\ninterface ControlledCollapseToggle {\n /**\n * This is used to react to the controlled panel \"collapse\" prop updating.\n * This will force an update to be applied and skip calling the user's `onCollapseChanged`\n */\n controlled?: boolean;\n}\n\ninterface CollapsePanelEvent extends ControlledCollapseToggle {\n /** Collapse a panel */\n type: \"collapsePanel\";\n /** The panel to collapse */\n panelId: string;\n}\n\ninterface ExpandPanelEvent extends ControlledCollapseToggle {\n /** Expand a panel */\n type: \"expandPanel\";\n /** The panel to expand */\n panelId: string;\n}\n\ninterface SetPanelPixelSizeEvent {\n /**\n * This event is used by the imperative panel API.\n * With this the user can set the panel's size to an explicit value.\n * This is done by faking interaction with the handles so min/max will still\n * be respected.\n */\n type: \"setPanelPixelSize\";\n /** The panel to apply the size to */\n panelId: string;\n /** The size to apply to the panel */\n size: Unit;\n}\n\nexport interface GroupMachineContextValue {\n /** The items in the group */\n items: Array<Item>;\n /** The available space in the group */\n size: Rect;\n /** The orientation of the grid */\n orientation: Orientation;\n /** How much the drag has overshot the handle */\n dragOvershoot: Big.Big;\n /** An id to use for autosaving the layout */\n autosaveId?: string;\n groupId: string;\n}\n\nexport type GroupMachineEvent =\n | RegisterPanelEvent\n | RegisterDynamicPanelEvent\n | UnregisterPanelEvent\n | RegisterPanelHandleEvent\n | UnregisterPanelHandleEvent\n | DragHandleEvent\n | SetSizeEvent\n | SetOrientationEvent\n | DragHandleStartEvent\n | DragHandleEndEvent\n | CollapsePanelEvent\n | ExpandPanelEvent\n | SetPanelPixelSizeEvent\n | ApplyDeltaEvent\n | SetActualItemsSizeEvent;\n\ntype EventForType<T extends GroupMachineEvent[\"type\"]> = Extract<\n GroupMachineEvent,\n { type: T }\n>;\n\n// #endregion\n\n// #region Helpers\n\nexport function prepareSnapshot(snapshot: Snapshot<unknown>) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const snapshotContext = (snapshot as any)\n .context as unknown as GroupMachineContextValue;\n\n snapshotContext.dragOvershoot = new Big(snapshotContext.dragOvershoot);\n\n for (const item of snapshotContext.items) {\n if (isPanelData(item)) {\n item.currentValue.value = new Big(item.currentValue.value);\n\n if (item.collapsedSize) {\n item.collapsedSize.value = new Big(item.collapsedSize.value);\n }\n\n if (item.min) {\n item.min.value = new Big(item.min.value);\n }\n\n if (item.max && item.max !== \"1fr\") {\n item.max.value = new Big(item.max.value);\n }\n } else {\n item.size.value = new Big(item.size.value);\n }\n }\n\n return snapshot;\n}\n\n/** Assert that the provided event is one of the accepted types */\nfunction isEvent<T extends GroupMachineEvent[\"type\"]>(\n event: GroupMachineEvent,\n eventType: T[]\n): asserts event is EventForType<T> {\n invariant(\n eventType.includes(event.type as T),\n `Invalid event type: ${eventType}. Expected: ${eventType.join(\" | \")}`\n );\n}\n\n/** Determine if an item is a panel */\nexport function isPanelData(value: unknown): value is PanelData {\n return Boolean(\n value &&\n typeof value === \"object\" &&\n \"type\" in value &&\n value.type === \"panel\"\n );\n}\n\n/** Determine if an item is a panel handle */\nexport function isPanelHandle(value: unknown): value is PanelHandleData {\n return Boolean(\n value &&\n typeof value === \"object\" &&\n \"type\" in value &&\n value.type === \"handle\"\n );\n}\n\ninterface InitializePanelOptions {\n min?: Unit;\n max?: Unit;\n default?: Unit;\n collapsible?: boolean;\n collapsed?: boolean;\n collapsedSize?: Unit;\n onCollapseChange?: {\n current: ((isCollapsed: boolean) => void) | null | undefined;\n };\n collapseAnimation?: PanelData[\"collapseAnimation\"];\n defaultCollapsed?: boolean;\n id?: string;\n}\n\ntype InitializePanelOptionsWithId = InitializePanelOptions & { id: string };\n\nexport function initializePanel(item: InitializePanelOptionsWithId): PanelData;\nexport function initializePanel(\n item: InitializePanelOptions\n): Omit<PanelData, \"id\">;\nexport function initializePanel(\n item: InitializePanelOptions | InitializePanelOptionsWithId\n): PanelData | Omit<PanelData, \"id\"> {\n const data = {\n type: \"panel\" as const,\n min: parseUnit(item.min || \"0px\"),\n max: item.max ? parseUnit(item.max) : \"1fr\",\n collapsed: item.collapsible\n ? (item.collapsed ?? item.defaultCollapsed ?? false)\n : undefined,\n collapsible: item.collapsible,\n collapsedSize: parseUnit(item.collapsedSize ?? \"0px\"),\n onCollapseChange: item.onCollapseChange,\n collapseIsControlled: typeof item.collapsed !== \"undefined\",\n sizeBeforeCollapse: undefined,\n id: item.id,\n collapseAnimation: item.collapseAnimation,\n default: item.default ? parseUnit(item.default) : undefined,\n } satisfies Omit<PanelData, \"id\" | \"currentValue\"> & { id?: string };\n\n return { ...data, currentValue: makePixelUnit(-1) } satisfies Omit<\n PanelData,\n \"id\"\n >;\n}\n\nexport function initializePanelHandleData(item: InitializePanelHandleData) {\n return {\n type: \"handle\" as const,\n ...item,\n size: typeof item.size === \"string\" ? parseUnit(item.size) : item.size,\n };\n}\n\n/** Parse a `Unit` string or `clamp` value */\nexport function parseUnit(unit: Unit | \"1fr\"): ParsedUnit {\n if (unit === \"1fr\") {\n unit = \"100%\";\n }\n\n if (unit.endsWith(\"px\")) {\n return makePixelUnit(parseFloat(unit));\n }\n\n if (unit.endsWith(\"%\")) {\n return makePercentUnit(parseFloat(unit));\n }\n\n throw new Error(`Invalid unit: ${unit}`);\n}\n\n/** Convert a `Unit` to a percentage of the group size */\nexport function getUnitPercentageValue(groupsSize: number, unit: ParsedUnit) {\n if (unit.type === \"pixel\") {\n return groupsSize === 0 ? 0 : unit.value.div(groupsSize).toNumber();\n }\n\n return unit.value.toNumber();\n}\n\nexport function getGroupSize(context: GroupMachineContextValue) {\n return context.orientation === \"horizontal\"\n ? context.size.width\n : context.size.height;\n}\n\n/** Get the size of a panel in pixels */\nexport function getUnitPixelValue(\n context: GroupMachineContextValue,\n unit: ParsedUnit | \"1fr\"\n) {\n const parsed = unit === \"1fr\" ? parseUnit(unit) : unit;\n return parsed.type === \"pixel\"\n ? parsed.value\n : new Big(parsed.value).div(100).mul(getGroupSize(context));\n}\n\n/** Clamp a new `currentValue` given the panel's constraints. */\nfunction clampUnit(\n context: GroupMachineContextValue,\n item: PanelData,\n value: Big.Big\n) {\n const min = getUnitPixelValue(context, item.min);\n const max = getUnitPixelValue(context, item.max);\n\n if (value.gte(min) && value.lte(max)) {\n return value;\n }\n\n return value.lt(min) ? min : max;\n}\n\n/** Get a panel with a particular ID. */\nexport function getPanelWithId(\n context: GroupMachineContextValue,\n panelId: string\n) {\n const item = context.items.find((i) => i.id === panelId);\n\n if (item && isPanelData(item)) {\n return item;\n }\n\n throw new Error(`Expected panel with id: ${panelId}`);\n}\n\n/** Get a panel with a particular ID. */\nfunction getPanelHandleIndex(\n context: GroupMachineContextValue,\n handleId: string\n) {\n const item = context.items.findIndex((i) => i.id === handleId);\n\n if (item !== -1 && isPanelHandle(context.items[item])) {\n return item;\n }\n\n throw new Error(`Expected panel handle with id: ${handleId}`);\n}\n\n/**\n * Get the panel that's collapsible next to a resize handle.\n * Will first check the left panel then the right.\n */\nexport function getCollapsiblePanelForHandleId(\n context: GroupMachineContextValue,\n handleId: string\n) {\n if (!context.items.length) {\n throw new Error(\"No items in group\");\n }\n\n const handleIndex = getPanelHandleIndex(context, handleId);\n const panelBefore = context.items[handleIndex - 1];\n const panelAfter = context.items[handleIndex + 1];\n\n if (panelBefore && isPanelData(panelBefore) && panelBefore.collapsible) {\n return panelBefore;\n }\n\n if (panelAfter && isPanelData(panelAfter) && panelAfter.collapsible) {\n return panelAfter;\n }\n\n throw new Error(`No collapsible panel found for handle: ${handleId}`);\n}\n\n/**\n * Get the handle closest to the target panel.\n * This is used to simulate collapse/expand\n */\nfunction getHandleForPanelId(\n context: GroupMachineContextValue,\n panelId: string\n) {\n const panelIndex = context.items.findIndex((item) => item.id === panelId);\n\n invariant(panelIndex !== -1, `Expected panel before: ${panelId}`);\n\n let item = context.items[panelIndex + 1];\n\n if (item && isPanelHandle(item)) {\n return { item, direction: 1 as const };\n }\n\n item = context.items[panelIndex - 1];\n\n if (item && isPanelHandle(item)) {\n return { item, direction: -1 as const };\n }\n\n throw new Error(`Cant find handle for panel: ${panelId}`);\n}\n\n/** Given the specified order props and default order of the items, order the items */\nfunction sortWithOrder(items: Array<Item>) {\n const defaultPlacement: Record<string, number> = {};\n const takenPlacements = items\n .map((i) => i.order)\n .filter((i): i is number => i !== undefined);\n\n let defaultOrder = 0;\n\n // Generate default orders for items that don't have it\n for (const item of items) {\n if (item.order === undefined) {\n while (\n takenPlacements.includes(defaultOrder) ||\n Object.values(defaultPlacement).includes(defaultOrder)\n ) {\n defaultOrder++;\n }\n\n defaultPlacement[item.id] = defaultOrder;\n }\n }\n\n const withoutOrder = items.filter((i) => i.order === undefined);\n const sortedWithOrder = items\n .filter((i) => i.order !== undefined)\n .sort((a, b) => a.order! - b.order!);\n\n for (const item of sortedWithOrder) {\n // insert item at order index\n withoutOrder.splice(item.order!, 0, item);\n }\n\n return withoutOrder;\n}\n\n/** Check if the panel has space available to add to */\nfunction panelHasSpace(\n context: GroupMachineContextValue,\n item: PanelData,\n adjustment: \"add\" | \"subtract\"\n) {\n invariant(\n item.currentValue.type === \"pixel\",\n `panelHasSpace only works with number values: ${item.id} ${item.currentValue}`\n );\n\n if (item.collapsible && !item.collapsed) {\n return true;\n }\n\n if (adjustment === \"add\") {\n return (\n item.currentValue.value.gte(getUnitPixelValue(context, item.min)) &&\n item.currentValue.value.lt(getUnitPixelValue(context, item.max))\n );\n }\n\n return (\n item.currentValue.value.gt(getUnitPixelValue(context, item.min)) &&\n item.currentValue.value.lte(getUnitPixelValue(context, item.max))\n );\n}\n\n/** Search in a `direction` for a panel that still has space to expand. */\nfunction findPanelWithSpace(\n context: GroupMachineContextValue,\n items: Array<Item>,\n start: number,\n direction: number,\n adjustment: \"add\" | \"subtract\",\n disregardCollapseBuffer?: boolean\n) {\n const slice =\n direction === -1 ? items.slice(0, start + 1).reverse() : items.slice(start);\n\n for (const panel of slice) {\n if (!isPanelData(panel)) {\n continue;\n }\n\n const targetPanel = disregardCollapseBuffer\n ? createUnrestrainedPanel(context, panel)\n : panel;\n\n if (panelHasSpace(context, targetPanel, adjustment)) {\n return panel;\n }\n }\n}\n\n/** Add up all the static values in the layout */\nfunction getStaticWidth(context: GroupMachineContextValue) {\n let width = new Big(0);\n\n for (const item of context.items) {\n if (isPanelHandle(item)) {\n width = width.add(item.size.value);\n } else if (\n isPanelData(item) &&\n item.collapsed &&\n item.currentValue.type === \"pixel\"\n ) {\n width = width.add(item.currentValue.value);\n }\n }\n\n return width;\n}\n\nfunction formatUnit(unit: ParsedUnit): Unit {\n if (unit.type === \"pixel\") {\n return `${unit.value.toNumber()}px`;\n }\n\n return `${unit.value.toNumber()}%`;\n}\n\n/** Build the grid template from the item values. */\nexport function buildTemplate(context: GroupMachineContextValue) {\n const staticWidth = getStaticWidth(context);\n\n return context.items\n .map((item) => {\n if (item.type === \"panel\") {\n const min = formatUnit(item.min);\n\n if (\n item.currentValue.type === \"pixel\" &&\n item.currentValue.value.toNumber() !== -1\n ) {\n if (item.currentValue.value.toNumber() < 0) {\n return \"0px\";\n }\n\n return formatUnit(item.currentValue);\n } else if (item.currentValue.type === \"percent\") {\n const max = item.max === \"1fr\" ? \"100%\" : formatUnit(item.max);\n return `minmax(${min}, min(calc(${item.currentValue.value} * (100% - ${staticWidth}px)), ${max}))`;\n } else if (item.collapsible && item.collapsed) {\n return formatUnit(item.collapsedSize);\n } else if (item.default) {\n return formatUnit(item.default);\n }\n\n const max = item.max === \"1fr\" ? \"1fr\" : formatUnit(item.max);\n return `minmax(${min}, ${max})`;\n }\n\n return formatUnit(item.size);\n })\n .join(\" \");\n}\n\nfunction addDeDuplicatedItems(items: Array<Item>, newItem: Item) {\n const currentItemIndex = items.findIndex(\n (item) =>\n item.id === newItem.id ||\n (typeof item.order === \"number\" && item.order === newItem.order)\n );\n\n let restItems = items;\n\n if (currentItemIndex !== -1) {\n restItems = items.filter((_, index) => index !== currentItemIndex);\n }\n\n return sortWithOrder([...restItems, newItem]);\n}\n\nfunction createUnrestrainedPanel(_: GroupMachineContextValue, data: PanelData) {\n return {\n ...data,\n min: makePixelUnit(-100000),\n max: makePixelUnit(100000),\n };\n}\n\n// #endregion\n\n// #region Update Logic\n\n/**\n * This is the main meat of the layout logic.\n * It's responsible for figuring out how to distribute the space\n * amongst the panels.\n *\n * It's built around applying small deltas to panels relative to their\n * the resize handles.\n *\n * As much as possible we try to rely on the browser to do the layout.\n * During the initial layout we rely on CSS grid and a group might be\n * defined like this:\n *\n * ```css\n * grid-template-columns: minmax(100px, 1fr) 1px minmax(100px, 300px);\n * ```\n *\n * Without any resizing this is nice and simple and the components don't do much.\n *\n * Once the user starts resizing the layout will be more complex.\n *\n * It's broken down into 3 phases:\n *\n * 1. `prepareItems` - The size of the group has been measure and we\n * can convert all the panel sizes into pixels. Converting into pixels\n * makes doing the math for the updates easier.\n *\n * ```css\n * grid-template-columns: 500px 1px 300px;\n * ```\n *\n * 2. `updateLayout` - This is where the actual updates are applied.\n * This is where the user's drag interactions are applied. We also\n * use this to collapse/expand panels by simulating a drag interaction.\n *\n * ```css\n * grid-template-columns: 490px 1px 310px;\n * ```\n *\n * 3. `commitLayout` - Once the updates have been applied we convert the\n * updated sizes back into a format that allows for easy resizing without\n * lots of updates.\n *\n * ```css\n * grid-template-columns: minmax(100px, min(calc(0.06117 * (100% - 1px)), 100%)) 1px minmax(100px, min(calc(0.0387 * (100% - 1px)), 300px));\n * ```\n *\n * When another update loop is triggered the above template will be converted back to pixels.\n */\n\n/** Converts the items to pixels */\nexport function prepareItems(context: GroupMachineContextValue) {\n const newItems = [...context.items];\n const staticWidth = getStaticWidth(context);\n\n for (const item of newItems) {\n if (!item || !isPanelData(item)) {\n continue;\n }\n\n if (item.currentValue.type === \"pixel\") {\n continue;\n }\n\n const pixel = new Big(getGroupSize(context))\n .minus(staticWidth)\n .mul(item.currentValue.value);\n\n item.currentValue = makePixelUnit(pixel.toNumber());\n }\n\n return newItems;\n}\n\n/** On every mouse move we distribute the space added */\nfunction updateLayout(\n context: GroupMachineContextValue,\n dragEvent:\n | (DragHandleEvent & {\n controlled?: boolean;\n disregardCollapseBuffer?: never;\n })\n | {\n type: \"collapsePanel\";\n value: MoveMoveEvent;\n handleId: string;\n controlled?: boolean;\n disregardCollapseBuffer?: boolean;\n }\n): Partial<GroupMachineContextValue> {\n const handleIndex = getPanelHandleIndex(context, dragEvent.handleId);\n const handle = context.items[handleIndex] as PanelHandleData;\n const newItems = [...context.items];\n\n let moveAmount =\n context.orientation === \"horizontal\"\n ? dragEvent.value.deltaX\n : dragEvent.value.deltaY;\n\n if (dragEvent.value.shiftKey) {\n moveAmount *= 15;\n }\n\n if (moveAmount === 0) {\n return {};\n }\n\n const moveDirection = moveAmount / Math.abs(moveAmount);\n\n // Go forward into the shrinking panels to find a panel that still has space.\n const panelBefore = findPanelWithSpace(\n context,\n newItems,\n handleIndex + moveDirection,\n moveDirection,\n \"subtract\",\n dragEvent.disregardCollapseBuffer\n );\n\n // No panel with space, just record the drag overshoot\n if (!panelBefore) {\n return {\n dragOvershoot: context.dragOvershoot.add(moveAmount),\n };\n }\n\n invariant(isPanelData(panelBefore), `Expected panel before: ${handle.id}`);\n\n const panelAfter = newItems[handleIndex - moveDirection];\n\n invariant(\n panelAfter && isPanelData(panelAfter),\n `Expected panel after: ${handle.id}`\n );\n\n if (\n panelAfter.currentValue.value.eq(getUnitPixelValue(context, panelAfter.max))\n ) {\n return {\n dragOvershoot: context.dragOvershoot.add(moveAmount),\n };\n }\n\n const newDragOvershoot = context.dragOvershoot.add(moveAmount);\n\n // Don't let the panel expand until the threshold is reached\n if (!dragEvent.disregardCollapseBuffer) {\n const isInLeftBuffer = newDragOvershoot.lt(0) && moveDirection > 0;\n const isInLeftOvershoot = newDragOvershoot.gt(0) && moveDirection > 0;\n const isInRightBuffer = newDragOvershoot.gt(0) && moveDirection < 0;\n const isInRightOvershoot = newDragOvershoot.lt(0) && moveDirection < 0;\n const potentialNewValue = panelAfter.currentValue.value.add(\n new Big(newDragOvershoot).mul(isInRightBuffer ? moveDirection : 1)\n );\n const min = getUnitPixelValue(context, panelAfter.min);\n\n const isInDragBugger =\n newDragOvershoot.abs().lt(COLLAPSE_THRESHOLD) &&\n panelAfter.collapsible &&\n panelAfter.collapsed &&\n (isInLeftOvershoot || isInRightOvershoot);\n\n if (\n potentialNewValue.lte(min) &&\n (newDragOvershoot.eq(0) ||\n isInRightBuffer ||\n isInLeftBuffer ||\n isInDragBugger)\n ) {\n return { dragOvershoot: newDragOvershoot };\n }\n }\n\n // Don't let the panel collapse until the threshold is reached\n if (\n panelBefore.collapsible &&\n panelBefore.currentValue.value ===\n getUnitPixelValue(context, panelBefore.min)\n ) {\n const potentialNewValue = panelBefore.currentValue.value.sub(\n newDragOvershoot.abs()\n );\n\n if (\n newDragOvershoot.abs().lt(COLLAPSE_THRESHOLD) &&\n potentialNewValue.gt(\n getUnitPixelValue(context, panelBefore.collapsedSize)\n )\n ) {\n return { dragOvershoot: newDragOvershoot };\n }\n }\n\n // Apply the move amount to the panel before the slider\n const unrestrainedPanelBefore = createUnrestrainedPanel(context, panelBefore);\n const panelBeforePreviousValue = panelBefore.currentValue.value;\n const panelBeforeNewValueRaw = panelBefore.currentValue.value.minus(\n new Big(moveAmount).mul(moveDirection)\n );\n let panelBeforeNewValue = dragEvent.disregardCollapseBuffer\n ? clampUnit(context, unrestrainedPanelBefore, panelBeforeNewValueRaw)\n : clampUnit(context, panelBefore, panelBeforeNewValueRaw);\n\n // Also apply the move amount the panel after the slider\n const unrestrainedPanelAfter = createUnrestrainedPanel(context, panelAfter);\n const panelAfterPreviousValue = panelAfter.currentValue.value;\n const applied = panelBeforePreviousValue.minus(panelBeforeNewValue);\n const panelAfterNewValueRaw = panelAfter.currentValue.value.add(applied);\n let panelAfterNewValue = dragEvent.disregardCollapseBuffer\n ? clampUnit(context, unrestrainedPanelAfter, panelAfterNewValueRaw)\n : clampUnit(context, panelAfter, panelAfterNewValueRaw);\n\n if (dragEvent.disregardCollapseBuffer) {\n if (panelAfter.collapsible && panelAfter.collapsed) {\n panelAfter.collapsed = false;\n }\n }\n // If the panel was collapsed, expand it\n // We need to re-apply the move amount since the the expansion of the\n // collapsed panel disregards that.\n else if (panelAfter.collapsible && panelAfter.collapsed) {\n if (\n panelAfter.onCollapseChange?.current &&\n panelAfter.collapseIsControlled &&\n !dragEvent.controlled\n ) {\n panelAfter.onCollapseChange.current(false);\n return { dragOvershoot: newDragOvershoot };\n }\n\n // Calculate the amount \"extra\" after the minSize the panel should grow\n const extra =\n // Take the size it was at\n getUnitPixelValue(context, panelAfter.collapsedSize)\n // Add in the full overshoot so the cursor is near the slider\n .add(context.dragOvershoot.abs())\n // Subtract the min size of the panel\n .sub(\n panelAfterNewValue\n // Then re-add the move amount\n .add(Math.abs(moveAmount))\n );\n\n panelAfter.collapsed = false;\n\n if (extra.gt(0)) {\n panelAfterNewValue = panelAfterNewValue.add(extra);\n }\n\n panelBeforeNewValue = panelBeforeNewValue\n // Subtract the delta of the after panel's size\n .minus(\n panelAfterNewValue\n .minus(panelAfterPreviousValue)\n // And then re-apply the movement value\n .minus(Math.abs(moveAmount))\n );\n\n if (\n panelAfter.onCollapseChange?.current &&\n !panelAfter.collapseIsControlled &&\n !dragEvent.controlled\n ) {\n panelAfter.onCollapseChange.current(false);\n }\n }\n\n const panelBeforeIsAboutToCollapse =\n panelBefore.currentValue.value ===\n getUnitPixelValue(context, panelBefore.min);\n\n // If the panel was expanded and now is at it's min size, collapse it\n if (\n !dragEvent.disregardCollapseBuffer &&\n panelBefore.collapsible &&\n panelBeforeIsAboutToCollapse\n ) {\n if (\n panelBefore.onCollapseChange?.current &&\n panelBefore.collapseIsControlled &&\n !dragEvent.controlled\n ) {\n panelBefore.onCollapseChange.current(true);\n return { dragOvershoot: newDragOvershoot };\n }\n\n // Make it collapsed\n panelBefore.collapsed = true;\n panelBeforeNewValue = getUnitPixelValue(context, panelBefore.collapsedSize);\n // Add the extra space created to the before panel\n panelAfterNewValue = panelAfterNewValue.add(\n panelBeforePreviousValue.minus(panelBeforeNewValue)\n );\n\n if (\n panelBefore.onCollapseChange?.current &&\n !panelBefore.collapseIsControlled &&\n !dragEvent.controlled\n ) {\n panelBefore.onCollapseChange.current(true);\n }\n }\n\n panelBefore.currentValue = { type: \"pixel\", value: panelBeforeNewValue };\n panelAfter.currentValue = { type: \"pixel\", value: panelAfterNewValue };\n\n const leftoverSpace = new Big(getGroupSize(context)).minus(\n newItems.reduce(\n (acc, b) => acc.add(isPanelData(b) ? b.currentValue.value : b.size.value),\n new Big(0)\n )\n );\n\n if (leftoverSpace.gt(0)) {\n panelBefore.currentValue.value =\n panelBefore.currentValue.value.add(leftoverSpace);\n }\n\n return { items: newItems };\n}\n\n/** Converts the items to percentages */\nexport function commitLayout(context: GroupMachineContextValue) {\n const newItems = [...context.items];\n\n // First set all the static width\n newItems.forEach((item, index) => {\n if (item.type !== \"panel\") {\n return;\n }\n\n if (item.collapsed) {\n newItems[index] = {\n ...item,\n currentValue: item.collapsedSize,\n };\n }\n });\n\n const staticWidth = getStaticWidth({ ...context, items: newItems });\n\n newItems.forEach((item, index) => {\n if (item.type !== \"panel\" || item.collapsed) {\n return;\n }\n\n newItems[index] = {\n ...item,\n currentValue: {\n type: \"percent\",\n value: item.currentValue.value.div(\n new Big(getGroupSize(context)).sub(staticWidth)\n ),\n },\n };\n });\n\n return newItems;\n}\n\nexport function dragHandlePayload({\n delta,\n orientation,\n shiftKey = false,\n}: {\n delta: number;\n orientation: Orientation;\n shiftKey?: boolean;\n}) {\n return {\n type: \"move\",\n pointerType: \"keyboard\",\n shiftKey,\n ctrlKey: false,\n altKey: false,\n metaKey: false,\n deltaX: orientation === \"horizontal\" ? delta : 0,\n deltaY: orientation === \"horizontal\" ? 0 : delta,\n } as const;\n}\n\n/** Iteratively applies a large delta value simulating a user's drag */\nfunction iterativelyUpdateLayout({\n context,\n handleId,\n delta,\n direction,\n controlled,\n disregardCollapseBuffer,\n}: {\n context: GroupMachineContextValue;\n handleId: string;\n delta: Big.Big;\n direction: -1 | 1;\n controlled?: boolean;\n disregardCollapseBuffer?: boolean;\n}) {\n let newContext: Partial<GroupMachineContextValue> = context;\n\n for (let i = 0; i < delta.abs().toNumber(); i++) {\n newContext = updateLayout(\n {\n ...context,\n ...newContext,\n },\n {\n handleId,\n type: \"collapsePanel\",\n controlled,\n disregardCollapseBuffer,\n value: dragHandlePayload({\n delta: direction,\n orientation: context.orientation,\n }),\n }\n );\n }\n\n return newContext;\n}\n\nfunction applyDeltaInBothDirections(\n context: GroupMachineContextValue,\n newItems: Array<Item>,\n itemIndex: number,\n delta: Big.Big\n) {\n let hasTriedBothDirections = false;\n let direction = 1;\n let deltaLeft = new Big(delta);\n\n // Starting from where the items was removed add space to the panels around it.\n // This is only needed for conditional rendering.\n while (deltaLeft.toNumber() !== 0) {\n const targetPanel = findPanelWithSpace(\n context,\n newItems,\n itemIndex + direction,\n direction,\n delta.gt(0) ? \"add\" : \"subtract\"\n );\n\n if (!targetPanel) {\n if (hasTriedBothDirections) {\n break;\n } else {\n direction = direction === 1 ? -1 : 1;\n hasTriedBothDirections = true;\n continue;\n }\n }\n\n const oldValue = targetPanel.currentValue.value;\n const newValue = clampUnit(context, targetPanel, oldValue.add(deltaLeft));\n\n targetPanel.currentValue.value = newValue;\n deltaLeft = deltaLeft.sub(newValue.sub(oldValue));\n direction = direction === 1 ? -1 : 1;\n }\n}\n\n// #endregion\n\n// #region Machine\n\ninterface AnimationActorInput {\n context: GroupMachineContextValue;\n event: CollapsePanelEvent | ExpandPanelEvent;\n send: (event: GroupMachineEvent) => void;\n}\n\ninterface AnimationActorOutput {\n panelId: string;\n action: \"expand\" | \"collapse\";\n}\n\nconst animationActor = fromPromise<\n AnimationActorOutput | undefined,\n AnimationActorInput\n>(\n ({ input: { send, context, event } }) =>\n new Promise<AnimationActorOutput | undefined>((resolve) => {\n const panel = getPanelWithId(context, event.panelId);\n const handle = getHandleForPanelId(context, event.panelId);\n\n let direction = new Big(handle.direction);\n let fullDelta = new Big(0);\n\n if (event.type === \"expandPanel\") {\n fullDelta = new Big(\n panel.sizeBeforeCollapse ?? getUnitPixelValue(context, panel.min)\n ).minus(panel.currentValue.value);\n } else {\n const collapsedSize = getUnitPixelValue(context, panel.collapsedSize);\n\n panel.sizeBeforeCollapse = panel.currentValue.value.toNumber();\n direction = direction.mul(new Big(-1));\n fullDelta = panel.currentValue.value.minus(collapsedSize);\n }\n\n const fps = 60;\n const { duration, ease } = getCollapseAnimation(panel);\n const totalFrames = Math.ceil(\n panel.collapseAnimation ? duration / (1000 / fps) : 1\n );\n let frame = 0;\n let appliedDelta = new Big(0);\n\n function renderFrame() {\n const progress = ++frame / totalFrames;\n const e = new Big(panel.collapseAnimation ? ease(progress) : 1);\n const delta = e.mul(fullDelta).sub(appliedDelta).mul(direction);\n\n send({\n type: \"applyDelta\",\n handleId: handle.item.id,\n delta: delta.toNumber(),\n });\n\n appliedDelta = appliedDelta.add(\n delta\n .abs()\n .mul(\n (delta.gt(0) && direction.lt(0)) ||\n (delta.lt(0) && direction.gt(0))\n ? -1\n : 1\n )\n );\n\n if (e.eq(1)) {\n const action = event.type === \"expandPanel\" ? \"expand\" : \"collapse\";\n resolve({ panelId: panel.id, action });\n return false;\n }\n\n return true;\n }\n\n raf(renderFrame);\n })\n);\n\nexport const groupMachine = createMachine(\n {\n initial: \"idle\",\n types: {\n context: {} as GroupMachineContextValue,\n events: {} as GroupMachineEvent,\n input: {} as {\n autosaveId?: string;\n orientation?: Orientation;\n groupId: string;\n initialItems?: Item[];\n },\n },\n context: ({ input }) => ({\n size: { width: 0, height: 0 },\n items: input.initialItems || [],\n orientation: input.orientation || \"horizontal\",\n dragOvershoot: new Big(0),\n autosaveId: input.autosaveId,\n groupId: input.groupId,\n }),\n states: {\n idle: {\n on: {\n setActualItemsSize: { actions: [\"recordActualItemSize\"] },\n dragHandleStart: { target: \"dragging\" },\n setPanelPixelSize: {\n actions: [\"prepare\", \"onSetPanelSize\", \"commit\"],\n },\n collapsePanel: [\n {\n actions: \"notifyCollapseToggle\",\n guard: \"shouldNotifyCollapseToggle\",\n },\n { target: \"togglingCollapse\" },\n ],\n expandPanel: [\n {\n actions: \"notifyCollapseToggle\",\n guard: \"shouldNotifyCollapseToggle\",\n },\n { target: \"togglingCollapse\" },\n ],\n },\n },\n dragging: {\n entry: [\"prepare\"],\n on: {\n dragHandle: { actions: [\"onDragHandle\"] },\n dragHandleEnd: { target: \"idle\" },\n collapsePanel: {\n guard: \"shouldCollapseToggle\",\n actions: \"runCollapseToggle\",\n },\n expandPanel: {\n guard: \"shouldCollapseToggle\",\n actions: \"runCollapseToggle\",\n },\n },\n exit: [\"commit\", \"onAutosave\"],\n },\n togglingCollapse: {\n entry: [\"prepare\"],\n invoke: {\n src: \"animation\",\n input: (i) => ({ ...i, send: i.self.send }),\n onDone: {\n target: \"idle\",\n actions: [\"onToggleCollapseComplete\", \"commit\", \"onAutosave\"],\n },\n },\n on: {\n applyDelta: { actions: [\"onApplyDelta\"] },\n },\n },\n },\n on: {\n registerPanel: { actions: [\"assignPanelData\"] },\n registerDynamicPanel: {\n actions: [\"prepare\", \"onRegisterDynamicPanel\", \"commit\", \"onAutosave\"],\n },\n unregisterPanel: {\n actions: [\"prepare\", \"removeItem\", \"commit\", \"onAutosave\"],\n },\n registerPanelHandle: { actions: [\"assignPanelHandleData\"] },\n unregisterPanelHandle: {\n actions: [\"prepare\", \"removeItem\", \"commit\", \"onAutosave\"],\n },\n setSize: { actions: [\"updateSize\"] },\n setOrientation: { actions: [\"updateOrientation\"] },\n },\n },\n {\n guards: {\n shouldNotifyCollapseToggle: ({ context, event }) => {\n isEvent(event, [\"collapsePanel\", \"expandPanel\"]);\n const panel = getPanelWithId(context, event.panelId);\n return !event.controlled && panel.collapseIsControlled === true;\n },\n shouldCollapseToggle: ({ context, event }) => {\n isEvent(event, [\"collapsePanel\", \"expandPanel\"]);\n const panel = getPanelWithId(context, event.panelId);\n return panel.collapseIsControlled === true;\n },\n },\n actors: {\n animation: animationActor,\n },\n actions: {\n notifyCollapseToggle: ({ context, event }) => {\n isEvent(event, [\"collapsePanel\", \"expandPanel\"]);\n const panel = getPanelWithId(context, event.panelId);\n panel.onCollapseChange?.current?.(!panel.collapsed);\n },\n runCollapseToggle: enqueueActions(({ context, event, enqueue }) => {\n isEvent(event, [\"collapsePanel\", \"expandPanel\"]);\n\n const handle = getHandleForPanelId(context, event.panelId);\n // When collapsing a panel it will be in the opposite direction\n // that handle assumes\n const delta =\n event.type === \"collapsePanel\"\n ? handle.direction * -1\n : handle.direction;\n const newContext = updateLayout(context, {\n handleId: handle.item.id,\n type: \"dragHandle\",\n controlled: event.controlled,\n value: dragHandlePayload({ delta, orientation: context.orientation }),\n });\n\n enqueue.assign(newContext);\n }),\n onToggleCollapseComplete: assign({\n items: ({ context, event: e }) => {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const output = (e as any).output as AnimationActorOutput;\n invariant(output, \"Expected output from animation actor\");\n\n const panel = getPanelWithId(context, output.panelId);\n panel.collapsed = output.action === \"collapse\";\n\n if (panel.collapsed) {\n panel.currentValue = panel.collapsedSize;\n }\n\n return context.items;\n },\n }),\n updateSize: assign({\n size: ({ event }) => {\n isEvent(event, [\"setSize\"]);\n return event.size;\n },\n }),\n recordActualItemSize: assign({\n items: ({ context, event }) => {\n isEvent(event, [\"setActualItemsSize\"]);\n\n const orientation = context.orientation;\n\n for (const [id, size] of Object.entries(event.childrenSizes)) {\n const item = context.items.find((i) => i.id === id);\n\n if (!isPanelData(item)) {\n continue;\n }\n\n item.currentValue = makePixelUnit(\n orientation === \"horizontal\" ? size.width : size.height\n );\n }\n\n return commitLayout(context);\n },\n }),\n updateOrientation: assign({\n orientation: ({ event }) => {\n isEvent(event, [\"setOrientation\"]);\n return event.orientation;\n },\n }),\n assignPanelData: assign({\n items: ({ context, event }) => {\n isEvent(event, [\"registerPanel\"]);\n\n return addDeDuplicatedItems(context.items, {\n type: \"panel\",\n currentValue: makePixelUnit(-1),\n ...event.data,\n });\n },\n }),\n onRegisterDynamicPanel: assign({\n items: ({ context, event }) => {\n isEvent(event, [\"registerDynamicPanel\"]);\n\n let currentValue: ParsedUnit = makePixelUnit(0);\n\n if (\n event.data.collapsible &&\n event.data.collapsed &&\n event.data.collapsedSize\n ) {\n currentValue = event.data.collapsedSize;\n } else if (event.data.default) {\n currentValue = event.data.default;\n } else {\n currentValue = event.data.min;\n }\n\n const newItems = addDeDuplicatedItems(context.items, {\n type: \"panel\",\n ...event.data,\n currentValue,\n });\n const itemIndex = newItems.findIndex(\n (item) => item.id === event.data.id\n );\n const newContext = { ...context, items: newItems };\n const overflowDueToHandles = context.items\n .reduce((acc, i) => {\n if (isPanelHandle(i)) {\n return acc.add(getUnitPixelValue(context, i.size));\n }\n\n return acc.add(i.currentValue.value);\n }, new Big(0))\n .minus(getGroupSize(context));\n\n applyDeltaInBothDirections(\n newContext,\n newItems,\n itemIndex,\n currentValue.value.add(overflowDueToHandles).neg()\n );\n\n return newItems;\n },\n }),\n assignPanelHandleData: assign({\n items: ({ context, event }) => {\n isEvent(event, [\"registerPanelHandle\"]);\n\n const unit =\n typeof event.data.size === \"string\"\n ? parseUnit(event.data.size)\n : event.data.size;\n\n return addDeDuplicatedItems(context.items, {\n type: \"handle\",\n ...event.data,\n size: {\n type: \"pixel\",\n value: new Big(unit.value),\n },\n });\n },\n }),\n removeItem: assign({\n items: ({ context, event }) => {\n isEvent(event, [\"unregisterPanel\", \"unregisterPanelHandle\"]);\n const itemIndex = context.items.findIndex(\n (item) => item.id === event.id\n );\n const item = context.items[itemIndex];\n\n if (!item) {\n return context.items;\n }\n\n const newItems = context.items.filter((i) => i.id !== event.id);\n const removedSize = isPanelData(item)\n ? item.currentValue.value\n : item.size.value;\n\n applyDeltaInBothDirections(context, newItems, itemIndex, removedSize);\n\n return newItems;\n },\n }),\n prepare: assign({\n items: ({ context }) => prepareItems(context),\n }),\n onDragHandle: enqueueActions(({ context, event, enqueue }) => {\n isEvent(event, [\"dragHandle\"]);\n enqueue.assign(updateLayout(context, event));\n }),\n commit: assign({\n dragOvershoot: new Big(0),\n items: ({ context }) => commitLayout(context),\n }),\n onApplyDelta: assign(({ context, event }) => {\n isEvent(event, [\"applyDelta\"]);\n return updateLayout(context, {\n handleId: event.handleId,\n type: \"collapsePanel\",\n disregardCollapseBuffer: true,\n value: dragHandlePayload({\n delta: event.delta,\n orientation: context.orientation,\n }),\n });\n }),\n onSetPanelSize: enqueueActions(({ context, event, enqueue }) => {\n isEvent(event, [\"setPanelPixelSize\"]);\n\n const panel = getPanelWithId(context, event.panelId);\n const handle = getHandleForPanelId(context, event.panelId);\n const current = panel.currentValue.value;\n const newSize = clampUnit(\n context,\n panel,\n getUnitPixelValue(context, parseUnit(event.size))\n );\n const isBigger = newSize > current;\n const delta = isBigger\n ? newSize.minus(current)\n : current.minus(newSize);\n\n enqueue.assign(\n iterativelyUpdateLayout({\n context,\n direction: (handle.direction * (isBigger ? 1 : -1)) as -1 | 1,\n handleId: handle.item.id,\n delta,\n })\n );\n }),\n },\n }\n);\n\n// #endregion\n"]}
|
package/package.json
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
"$schema": "https://json.schemastore.org/package.json",
|
|
3
3
|
"name": "@window-splitter/state",
|
|
4
4
|
"sideEffects": false,
|
|
5
|
-
"version": "0.2.
|
|
5
|
+
"version": "0.2.4",
|
|
6
6
|
"description": "A WAI-ARIA compliant window splitter for React.",
|
|
7
7
|
"homepage": "https://react-window-splitter-six.vercel.app",
|
|
8
8
|
"repository": "https://github.com/hipstersmoothie/react-window-splitter",
|
|
@@ -25,7 +25,7 @@
|
|
|
25
25
|
},
|
|
26
26
|
"license": "MIT",
|
|
27
27
|
"devDependencies": {
|
|
28
|
-
"@internal/eslint-config": "0.2.
|
|
28
|
+
"@internal/eslint-config": "0.2.4",
|
|
29
29
|
"@testing-library/react": "^16.0.0",
|
|
30
30
|
"@types/big.js": "^6.2.2",
|
|
31
31
|
"@vitest/browser": "^2.0.5",
|
|
@@ -76,5 +76,5 @@
|
|
|
76
76
|
"window"
|
|
77
77
|
],
|
|
78
78
|
"types": "./dist/commonjs/index.d.ts",
|
|
79
|
-
"gitHead": "
|
|
79
|
+
"gitHead": "445833733f02ead035ead2c05aa0d7b3b559d666"
|
|
80
80
|
}
|
package/src/index.ts
CHANGED
|
@@ -18,8 +18,8 @@ const COLLAPSE_THRESHOLD = 50;
|
|
|
18
18
|
|
|
19
19
|
// #region Types
|
|
20
20
|
|
|
21
|
-
type PixelUnit = `${number}px`;
|
|
22
|
-
type PercentUnit = `${number}%`;
|
|
21
|
+
export type PixelUnit = `${number}px`;
|
|
22
|
+
export type PercentUnit = `${number}%`;
|
|
23
23
|
export type Unit = PixelUnit | PercentUnit;
|
|
24
24
|
type Orientation = "horizontal" | "vertical";
|
|
25
25
|
|
|
@@ -178,7 +178,7 @@ export type InitializePanelHandleData = Omit<
|
|
|
178
178
|
PanelHandleData,
|
|
179
179
|
"type" | "size"
|
|
180
180
|
> & {
|
|
181
|
-
size: PixelUnit;
|
|
181
|
+
size: PixelUnit | ParsedPixelUnit;
|
|
182
182
|
};
|
|
183
183
|
|
|
184
184
|
interface RegisterPanelHandleEvent {
|
|
@@ -432,7 +432,7 @@ export function initializePanelHandleData(item: InitializePanelHandleData) {
|
|
|
432
432
|
return {
|
|
433
433
|
type: "handle" as const,
|
|
434
434
|
...item,
|
|
435
|
-
size: parseUnit(item.size)
|
|
435
|
+
size: typeof item.size === "string" ? parseUnit(item.size) : item.size,
|
|
436
436
|
};
|
|
437
437
|
}
|
|
438
438
|
|
|
@@ -681,12 +681,6 @@ function getStaticWidth(context: GroupMachineContextValue) {
|
|
|
681
681
|
item.currentValue.type === "pixel"
|
|
682
682
|
) {
|
|
683
683
|
width = width.add(item.currentValue.value);
|
|
684
|
-
} else if (
|
|
685
|
-
isPanelData(item) &&
|
|
686
|
-
item.default &&
|
|
687
|
-
item.default.type === "pixel"
|
|
688
|
-
) {
|
|
689
|
-
width = width.add(item.default.value);
|
|
690
684
|
}
|
|
691
685
|
}
|
|
692
686
|
|
|
@@ -1551,7 +1545,10 @@ export const groupMachine = createMachine(
|
|
|
1551
1545
|
items: ({ context, event }) => {
|
|
1552
1546
|
isEvent(event, ["registerPanelHandle"]);
|
|
1553
1547
|
|
|
1554
|
-
const unit =
|
|
1548
|
+
const unit =
|
|
1549
|
+
typeof event.data.size === "string"
|
|
1550
|
+
? parseUnit(event.data.size)
|
|
1551
|
+
: event.data.size;
|
|
1555
1552
|
|
|
1556
1553
|
return addDeDuplicatedItems(context.items, {
|
|
1557
1554
|
type: "handle",
|
package/src/machine.test.ts
CHANGED
|
@@ -444,7 +444,7 @@ describe("constraints", () => {
|
|
|
444
444
|
initializeSizes(actor, { width: 500, height: 200 });
|
|
445
445
|
|
|
446
446
|
expect(getTemplate(actor)).toMatchInlineSnapshot(
|
|
447
|
-
`"minmax(0px, min(calc(
|
|
447
|
+
`"minmax(0px, min(calc(0.38775510204081632653 * (100% - 10px)), 100%)) 10px minmax(0px, min(calc(0.61224489795918367347 * (100% - 10px)), 100%))"`
|
|
448
448
|
);
|
|
449
449
|
|
|
450
450
|
capturePixelValues(actor, () => {
|