Home / File/ class.js — svelte Source File

class.js — svelte Source File

Architecture documentation for class.js, a javascript file in the svelte codebase. 3 imports, 1 dependents.

File javascript ClientRuntime LegacyBridge 3 imports 1 dependents 1 functions

Entity Profile

Dependency Diagram

graph LR
  686ca949_4d11_24e5_89bf_2c8c02e51cde["class.js"]
  22eadd41_615a_90cd_7963_26c9a3fc58cb["attributes.js"]
  686ca949_4d11_24e5_89bf_2c8c02e51cde --> 22eadd41_615a_90cd_7963_26c9a3fc58cb
  efa24e01_f8d7_2cf4_7e7e_aadd84b2197e["to_class"]
  686ca949_4d11_24e5_89bf_2c8c02e51cde --> efa24e01_f8d7_2cf4_7e7e_aadd84b2197e
  f3948b0d_b92a_0767_ba6c_832767f4e2bb["hydration.js"]
  686ca949_4d11_24e5_89bf_2c8c02e51cde --> f3948b0d_b92a_0767_ba6c_832767f4e2bb
  0acd2537_e1bf_d7ae_30d5_407378cfa4d3["attributes.js"]
  0acd2537_e1bf_d7ae_30d5_407378cfa4d3 --> 686ca949_4d11_24e5_89bf_2c8c02e51cde
  style 686ca949_4d11_24e5_89bf_2c8c02e51cde fill:#6366f1,stroke:#818cf8,color:#fff

Relationship Graph

Source Code

import { to_class } from '../../../shared/attributes.js';
import { hydrating } from '../hydration.js';

/**
 * @param {Element} dom
 * @param {boolean | number} is_html
 * @param {string | null} value
 * @param {string} [hash]
 * @param {Record<string, any>} [prev_classes]
 * @param {Record<string, any>} [next_classes]
 * @returns {Record<string, boolean> | undefined}
 */
export function set_class(dom, is_html, value, hash, prev_classes, next_classes) {
	// @ts-expect-error need to add __className to patched prototype
	var prev = dom.__className;

	if (
		hydrating ||
		prev !== value ||
		prev === undefined // for edge case of `class={undefined}`
	) {
		var next_class_name = to_class(value, hash, next_classes);

		if (!hydrating || next_class_name !== dom.getAttribute('class')) {
			// Removing the attribute when the value is only an empty string causes
			// performance issues vs simply making the className an empty string. So
			// we should only remove the class if the value is nullish
			// and there no hash/directives :
			if (next_class_name == null) {
				dom.removeAttribute('class');
			} else if (is_html) {
				dom.className = next_class_name;
			} else {
				dom.setAttribute('class', next_class_name);
			}
		}

		// @ts-expect-error need to add __className to patched prototype
		dom.__className = value;
	} else if (next_classes && prev_classes !== next_classes) {
		for (var key in next_classes) {
			var is_present = !!next_classes[key];

			if (prev_classes == null || is_present !== !!prev_classes[key]) {
				dom.classList.toggle(key, is_present);
			}
		}
	}

	return next_classes;
}

Domain

Subdomains

Functions

Frequently Asked Questions

What does class.js do?
class.js is a source file in the svelte codebase, written in javascript. It belongs to the ClientRuntime domain, LegacyBridge subdomain.
What functions are defined in class.js?
class.js defines 1 function(s): set_class.
What does class.js depend on?
class.js imports 3 module(s): attributes.js, hydration.js, to_class.
What files import class.js?
class.js is imported by 1 file(s): attributes.js.
Where is class.js in the architecture?
class.js is located at packages/svelte/src/internal/client/dom/elements/class.js (domain: ClientRuntime, subdomain: LegacyBridge, directory: packages/svelte/src/internal/client/dom/elements).

Analyze Your Own Codebase

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

Try Supermodel Free