44@use  ' ../../map'  ;
55@use  ' ../../meta'  ;
66@use  ' ../../variant'  ;
7+ @use  ' ../functions/name'  ;
78
89//  Functions.
9- @use  ' ../functions/color.name-nest.function'   as  * ;
1010@use  ' ../functions/color.name.function'   as  * ;
11+ @use  ' palette.color-add.function'   as  * ;
1112
1213//  Add.
1314function .$functions : map .set(function .$functions , color, name, meta .get-function(name));
@@ -16,45 +17,65 @@ function.$functions: map.set(function.$functions, color, name, meta.get-function
1617//  NOTE: consider adding bracketed adjust
1718//  The `palette.create()` function.
1819//  @arbitrary `$values...`
20+ //  @returns
1921@function  create ($values ... ) {
2022  $palette : ();
21-   @each  $name-color  in  $values  {
22-     @each  $name , $color  in  $name-color  {
23-       $nested : variant .indicator-index ($name , ' +'  );
24-       $name : if ($nested , variant .indicator-remove ($name , ' +'  ), $name );
25-       @if  type-of ($color ) ==  map {
26-         $palette : map .deep-merge ($palette , ($name : $color ));
27-       } @else  {
28-         //  Palette name.
29-         $i : 1 ;
30-         @each  $name  in  if (list .separator ($name ) ==  space , ($name ,), $name ) {
31-           //  Color.
32-           $j : 1 ;
33-           @each  $color  in  if (list .separator ($color ) ==  space , ($color ,), $color ) {
34-             @if  list .has-list ($color ) and  list .separator ($color ) ==  space  {
35-               $color : name-nest (if ($nested , $name , null ), $color ... );
36-             } @else  {
37-               $color : name-nest (if ($nested , $name , null ), ($color ,));
38-             }
39- 
40-             $variant : variant .create ($color );
41- 
42-             //  TODO: Check.
43-             @each  $class , $color  in  $variant  {
44-               @if  list .index ($class , color ) and  list .length ($class ) >  1  {
45-                 $variant : map .key-replace ($variant , $class , list .remove-value ($class , color ));
46-               }
47-             }
48- 
49-             $palette : map .deep-merge ($palette , ($name : $variant ));
50-           }
51- 
52-           $j : $j  +  1 ;
23+   $variant-colors : ();
24+ 
25+   //  FEATURE: Get additional colors.
26+   $i : 1 ;
27+   @each  $variant  in  $values  {
28+     @each  $name , $colors  in  $variant  {
29+       $j : 1 ;
30+       @each  $color  in  $colors  {
31+         @if  list .has-list ($color ) and  list .length ($color ) >  1  {
32+           $variant-color : name .retrieve (list .nth ($color , 1 ));
33+           $variant-colors : map .deep-merge (
34+             $variant-colors ,
35+             ($name : (map .get ($variant-color , name ): list .range ($color , 2 )))
36+           );
37+           $color : list .nth ($color , 1 );
38+           $colors : list .set-nth ($colors , $j , $color );
5339        }
5440
41+         $j : $j  +  1 ;
42+       }
43+ 
44+       $variant : map .deep-merge ($variant , ($name : $colors ));
45+     }
46+ 
47+     $values : list .set-nth ($values , $i , $variant );
48+     $i : $i  +  1 ;
49+   }
50+ 
51+   //  Nest values.
52+   $variant : variant .nest ($values ... );
53+ 
54+   //  FEATURE: Add variant.
55+   @each  $name , $color  in  $variant  {
56+     @if  type-of ($color ) ==  list  {
57+       $i : 1 ;
58+       @each  $c  in  $color  {
59+         $color : list .set-nth ($color , $i , name .add-indicator ($c ));
5560        $i : $i  +  1 ;
5661      }
62+ 
63+       $palette : map .set ($palette , $name , variant .create ($color , $type :  color ));
64+     }
65+   }
66+ 
67+   //  FEATURE: Add additional colors to variant.
68+   @each  $name , $variant  in  $variant-colors  {
69+     @each  $name  in  if (list .separator ($name ) ==  space , ($name ,), $name ) {
70+       $name : variant .indicator-remove ($name , ' +'  );
71+       @each  $class , $colors  in  $variant  {
72+         $palette : color-add ($palette , $name , $class , auto , $colors ... );
73+       }
5774    }
5875  }
5976  @return  $palette ;
6077}
78+ 
79+ //  Examples.
80+ //  @debug create(((+accent, primary): (color, ((basic dark) 3% 0.5) (light, 10%) (dark, 5%), light, dark)));
81+ 
0 commit comments