function make_history_node({
	parent = null, // the state before this state (its basis), or null if this is the first state
	futures = [], // the states branching off from this state (its children)
	timestamp = Date.now(), // when this state was created
	soft = false, // indicates that undo should skip this state; it can still be accessed with the History window
	image_data = null, // the image data for the canvas (TODO: region updates)
	selection_image_data = null, // the image data for the selection, if any
	selection_x, // the x position of the selection, if any
	selection_y, // the y position of the selection, if any
	textbox_text, // the text in the textbox, if any
	textbox_x, // the x position of the textbox, if any
	textbox_y, // the y position of the textbox, if any
	textbox_width, // the width of the textbox, if any
	textbox_height, // the height of the textbox, if any
	text_tool_font = null, // the font of the Text tool (important to restore a textbox-containing state, but persists without a textbox)
	tool_transparent_mode = false, // whether transparent mode is on for Select/Free-Form Select/Text tools; otherwise box is opaque
	foreground_color, // selected foreground color (left click)
	background_color, // selected background color (right click)
	ternary_color, // selected ternary color (ctrl+click)
	name, // the name of the operation, shown in the history window, e.g. localize("Resize Canvas")
	icon = null, // an Image representation of the operation type, shown in the history window, e.g. get_help_folder_icon("p_blank.png")
}) {
	return {
		parent,
		futures,
		timestamp,
		soft,
		image_data,
		selection_image_data,
		selection_x,
		selection_y,
		textbox_text,
		textbox_x,
		textbox_y,
		textbox_width,
		textbox_height,
		text_tool_font,
		tool_transparent_mode,
		foreground_color,
		background_color,
		ternary_color,
		name,
		icon,
	};
}
@param {object} options
@param {HistoryNode | null=} options.parent - the state before this state (its basis), or null if this is the first state
@param {HistoryNode[]=} options.futures - the states branching off from this state (its children)
@param {number=} options.timestamp - when this state was created
@param {boolean=} options.soft - indicates that undo should skip this state; it can still be accessed with the History window
@param {ImageData | null=} options.image_data - the image data for the canvas (TODO: region updates)
@param {ImageData | null=} options.selection_image_data - the image data for the selection, if any
@param {number=} options.selection_x - the x position of the selection, if any
@param {number=} options.selection_y - the y position of the selection, if any
@param {string=} options.textbox_text - the text in the textbox, if any
@param {number=} options.textbox_x - the x position of the textbox, if any
@param {number=} options.textbox_y - the y position of the textbox, if any
@param {number=} options.textbox_width - the width of the textbox, if any
@param {number=} options.textbox_height - the height of the textbox, if any
@param {TextToolFontOptions | null=} options.text_tool_font - the font of the Text tool (important to restore a textbox-containing state, but persists without a textbox)
@param {boolean=} options.tool_transparent_mode - whether transparent mode is on for Select/Free-Form Select/Text tools; otherwise box is opaque
@param {string | CanvasPattern=} options.foreground_color - selected foreground color (left click)
@param {string | CanvasPattern=} options.background_color - selected background color (right click)
@param {string | CanvasPattern=} options.ternary_color - selected ternary color (ctrl+click)
@param {string=} options.name - the name of the operation, shown in the history window, e.g. localize("Resize Canvas")
@param {HTMLImageElement |HTMLCanvasElement | null=} options.icon - a visual representation of the operation type, shown in the history window, e.g. get_help_folder_icon("p_blank.png")
@returns {HistoryNode}