public function all() {

		// If we already have attributes, let's return them and bail.
		if ( $this->attr ) {
			return $this->attr;
		}

		$defaults = [];

		// If the a class was input, we want to go ahead and set that as
		// the default class.  That way, filters can know early on that
		// a class has already been declared. Any filters on the defaults
		// should, ideally, respect any classes that already exist.
		if ( isset( $this->input['class'] ) ) {
			$defaults['class'] = $this->input['class'];

			// This is kind of a hacky way to keep the class input
			// from overwriting everything later.
			unset( $this->input['class'] );

		// If no class was input, let's build a custom default.
		} else {
			$defaults['class'] = $this->context ? "{$this->name} {$this->name}--{$this->context}" : $this->name;
		}

		// Compatibility with core WP attributes.
		if ( method_exists( $this, $this->name ) ) {
			$method   = $this->name;
			$defaults = $this->$method( $defaults );
		}

		// Filter the default attributes.
		$defaults = apply_filters( "hybrid/attr/{$this->name}/defaults", $defaults, $this->context, $this );

		// Merge the attributes with the defaults.
		$this->attr = wp_parse_args( $this->input, $defaults );

		// Apply filters to the parsed attributes.
		$this->attr = apply_filters( 'hybrid/attr', $this->attr, $this->name, $this->context );
		$this->attr = apply_filters( "hybrid/attr/{$this->name}", $this->attr, $this->context );

		// Provide a filter hook for the class attribute directly. The
		// classes are split up into an array for easier filtering. Note
		// that theme authors should still utilize the core WP body,
		// post, and comment class filter hooks. This should only be
		// used for custom attributes.
		$hook = "hybrid/attr/{$this->name}/class";

		if ( isset( $this->attr['class'] ) && has_filter( $hook ) ) {

			$classes = apply_filters( $hook, explode( ' ', $this->attr['class'] ), $this->context );

			$this->attr['class'] = join( ' ', array_unique( $classes ) );
		}

		return $this->attr;
	}