
// simple array/list:

.multiunit {
  @v: abc "abc" 1 1px 1% #123;
  length: length(@v);
  extract: extract(@v, 1) extract(@v, 2) extract(@v, 3) extract(@v, 4) extract(@v, 5) extract(@v, 6);
}

.incorrect-index {
    @v1: a  b  c;
    @v2: a, b, c;
    v1: extract(@v1,  5);
    v2: extract(@v2, -2);
}

.scalar {
    @var:          variable;
    var-value:     extract(@var, 1);
    var-length:    length(@var);
    ill-index:     extract(@var, 2);

    name-value:    extract(name, 1);
    string-value:  extract("string", 1);
    number-value:  extract(12345678, 1);
    color-value:   extract(blue, 1);
    rgba-value:    extract(rgba(80, 160, 240, 0.67), 1);
    empty-value:   extract(~'', 1);
    
    name-length:   length(name);
    string-length: length("string");
    number-length: length(12345678);
    color-length:  length(blue);
    rgba-length:   length(rgba(80, 160, 240, 0.67));
    empty-length:  length(~'');
}

.mixin-arguments {
    .mixin-args(a b c d);
    .mixin-args(a, b, c, d);
    .mixin-args(1; 2; 3; 4);
}

.mixin-args(@value) {
    &-1 {
        length:  length(@value);
        extract: extract(@value, 3) ~"|" extract(@value, 2) ~"|" extract(@value, 1);
    }
}

.mixin-args(...) { 
    &-2 {
        length:  length(@arguments);
        extract: extract(@arguments, 3) ~"|" extract(@arguments, 2) ~"|" extract(@arguments, 1);
    }
}

.mixin-args(@values...) {
    &-3 {
        length:  length(@values);
        extract: extract(@values, 3) ~"|" extract(@values, 2) ~"|" extract(@values, 1);
    }
}

.mixin-args(@head, @tail...) {
    &-4 {
        length:  length(@tail);
        extract: extract(@tail, 2) ~"|" extract(@tail, 1);
    }
}

// "multidimensional" array/list

.md-space-comma {
    @v: a b c, 1 2 3, "x" "y" "z";
    length-1:  length(@v);
    extract-1: extract(@v, 2);
    length-2:  length(extract(@v, 2));
    extract-2: extract(extract(@v, 2), 2);

    &-as-args {.mixin-args(a b c, 1 2 3, "x" "y" "z")}
}

.md-cat-space-comma {
    @a: a b c;
    @b: 1 2 3;
    @c: "x" "y" "z";
    @v: @a, @b, @c;
    length-1:  length(@v);
    extract-1: extract(@v, 2);
    length-2:  length(extract(@v, 2));
    extract-2: extract(extract(@v, 2), 2);
    
    &-as-args {.mixin-args(@a, @b, @c)}
}

.md-cat-comma-space {
    @a: a, b, c;
    @b: 1, 2, 3;
    @c: "x", "y", "z";
    @v: @a @b @c;
    length-1:  length(@v);
    extract-1: extract(@v, 2);
    length-2:  length(extract(@v, 2));
    extract-2: extract(extract(@v, 2), 2);

    &-as-args {.mixin-args(@a @b @c)}
}

.md-3D {
    @a: a b c d, 1 2 3 4;
    @b: 5 6 7 8, e f g h;
    .3D(@a, @b);
    
    .3D(...) {

        @v1:       @arguments;
        length-1:  length(@v1);
        extract-1: extract(@v1, 1);
        
        @v2:       extract(@v1, 2);
        length-2:  length(@v2);
        extract-2: extract(@v2, 1);
        
        @v3:       extract(@v2, 1);
        length-3:  length(@v3);
        extract-3: extract(@v3, 3);

        @v4:       extract(@v3, 4);
        length-4:  length(@v4);
        extract-4: extract(@v4, 1);
    }
}
