Home / Function/ bind_group() — svelte Function Reference

bind_group() — svelte Function Reference

Architecture documentation for the bind_group() function in input.js from the svelte codebase.

Entity Profile

Dependency Diagram

graph TD
  af7a3d2c_ef51_8bd4_b88c_e1d52a36db1e["bind_group()"]
  2254d980_5794_d0a4_3609_60f21d662ff4["input.js"]
  af7a3d2c_ef51_8bd4_b88c_e1d52a36db1e -->|defined in| 2254d980_5794_d0a4_3609_60f21d662ff4
  ea5280ff_3b87_42ee_3823_3570b76a5779["push()"]
  af7a3d2c_ef51_8bd4_b88c_e1d52a36db1e -->|calls| ea5280ff_3b87_42ee_3823_3570b76a5779
  140e2114_da40_4679_bc9f_599a89c67e4e["listen_to_event_and_reset_event()"]
  af7a3d2c_ef51_8bd4_b88c_e1d52a36db1e -->|calls| 140e2114_da40_4679_bc9f_599a89c67e4e
  77a42fec_7add_4867_04e0_2f568e3aa152["get_binding_group_value()"]
  af7a3d2c_ef51_8bd4_b88c_e1d52a36db1e -->|calls| 77a42fec_7add_4867_04e0_2f568e3aa152
  7494b934_a3b8_689e_91b6_8435e26461c5["render_effect()"]
  af7a3d2c_ef51_8bd4_b88c_e1d52a36db1e -->|calls| 7494b934_a3b8_689e_91b6_8435e26461c5
  a08b6cc5_af73_1be4_d02f_3113cf8a8305["get()"]
  af7a3d2c_ef51_8bd4_b88c_e1d52a36db1e -->|calls| a08b6cc5_af73_1be4_d02f_3113cf8a8305
  e604925d_22aa_7ddd_2399_07b188b31eb1["is()"]
  af7a3d2c_ef51_8bd4_b88c_e1d52a36db1e -->|calls| e604925d_22aa_7ddd_2399_07b188b31eb1
  20340432_01a2_6741_abf4_60ccab51cdb3["teardown()"]
  af7a3d2c_ef51_8bd4_b88c_e1d52a36db1e -->|calls| 20340432_01a2_6741_abf4_60ccab51cdb3
  2cab0f64_6d19_d981_66e2_d2555c252702["queue_micro_task()"]
  af7a3d2c_ef51_8bd4_b88c_e1d52a36db1e -->|calls| 2cab0f64_6d19_d981_66e2_d2555c252702
  style af7a3d2c_ef51_8bd4_b88c_e1d52a36db1e fill:#6366f1,stroke:#818cf8,color:#fff

Relationship Graph

Source Code

packages/svelte/src/internal/client/dom/elements/bindings/input.js lines 134–220

export function bind_group(inputs, group_index, input, get, set = get) {
	var is_checkbox = input.getAttribute('type') === 'checkbox';
	var binding_group = inputs;

	// needs to be let or related code isn't treeshaken out if it's always false
	let hydration_mismatch = false;

	if (group_index !== null) {
		for (var index of group_index) {
			// @ts-expect-error
			binding_group = binding_group[index] ??= [];
		}
	}

	binding_group.push(input);

	listen_to_event_and_reset_event(
		input,
		'change',
		() => {
			// @ts-ignore
			var value = input.__value;

			if (is_checkbox) {
				value = get_binding_group_value(binding_group, value, input.checked);
			}

			set(value);
		},
		// TODO better default value handling
		() => set(is_checkbox ? [] : null)
	);

	render_effect(() => {
		var value = get();

		// If we are hydrating and the value has since changed, then use the update value
		// from the input instead.
		if (hydrating && input.defaultChecked !== input.checked) {
			hydration_mismatch = true;
			return;
		}

		if (is_checkbox) {
			value = value || [];
			// @ts-ignore
			input.checked = value.includes(input.__value);
		} else {
			// @ts-ignore
			input.checked = is(input.__value, value);
		}
	});

	teardown(() => {
		var index = binding_group.indexOf(input);

		if (index !== -1) {
			binding_group.splice(index, 1);
		}
	});

	if (!pending.has(binding_group)) {
		pending.add(binding_group);

		queue_micro_task(() => {
			// necessary to maintain binding group order in all insertion scenarios
			binding_group.sort((a, b) => (a.compareDocumentPosition(b) === 4 ? -1 : 1));
			pending.delete(binding_group);
		});
	}

	queue_micro_task(() => {
		if (hydration_mismatch) {
			var value;

			if (is_checkbox) {
				value = get_binding_group_value(binding_group, value, input.checked);
			} else {
				var hydration_input = binding_group.find((input) => input.checked);
				// @ts-ignore
				value = hydration_input?.__value;

Domain

Subdomains

Frequently Asked Questions

What does bind_group() do?
bind_group() is a function in the svelte codebase, defined in packages/svelte/src/internal/client/dom/elements/bindings/input.js.
Where is bind_group() defined?
bind_group() is defined in packages/svelte/src/internal/client/dom/elements/bindings/input.js at line 134.
What does bind_group() call?
bind_group() calls 8 function(s): get, get_binding_group_value, is, listen_to_event_and_reset_event, push, queue_micro_task, render_effect, teardown.

Analyze Your Own Codebase

Get architecture documentation, dependency graphs, and domain analysis for your codebase in minutes.

Try Supermodel Free