$prop_type ) { if ( ! ( $prop_type instanceof Prop_Type ) ) { continue; } $transformed = $this->resolve_item( $props[ $key ] ?? $prop_type->get_default(), $key, $prop_type ); if ( Multi_Props::is( $transformed ) ) { $resolved = array_merge( $resolved, Multi_Props::get_value( $transformed ) ); continue; } $resolved[ $key ] = $transformed; } return $resolved; } protected function resolve_item( $value, $key, Prop_Type $prop_type, int $depth = 0 ) { if ( null === $value ) { return null; } if ( ! $this->is_transformable( $value ) ) { return $value; } if ( $depth >= self::TRANSFORM_DEPTH_LIMIT ) { return null; } if ( isset( $value['disabled'] ) && true === $value['disabled'] ) { return null; } $transformed = $this->transform( $value, $key, $prop_type ); return $this->resolve_item( $transformed, $key, $prop_type, $depth + 1 ); } }