| @@ -23,11 +23,33 @@ | ||
| 23 | 23 | const UNIT_GRAD = 'grad'; |
| 24 | 24 | const UNIT_TURN = 'turn'; |
| 25 | 25 | const UNIT_AUTO = 'auto'; |
| 26 | 26 | const UNIT_CUSTOM = 'custom'; |
| 27 | + const UNIT_FR = 'fr'; | |
| 27 | 28 | |
| 28 | 29 | const DEFAULT_UNIT = self::UNIT_PX; |
| 29 | 30 | |
| 31 | + private const ORDER = [ | |
| 32 | + self::UNIT_PX, | |
| 33 | + self::UNIT_PERCENT, | |
| 34 | + self::UNIT_EM, | |
| 35 | + self::UNIT_REM, | |
| 36 | + self::UNIT_VW, | |
| 37 | + self::UNIT_VH, | |
| 38 | + self::UNIT_CH, | |
| 39 | + self::UNIT_VMIN, | |
| 40 | + self::UNIT_VMAX, | |
| 41 | + self::UNIT_FR, | |
| 42 | + self::UNIT_DEG, | |
| 43 | + self::UNIT_RAD, | |
| 44 | + self::UNIT_GRAD, | |
| 45 | + self::UNIT_TURN, | |
| 46 | + self::UNIT_SECOND, | |
| 47 | + self::UNIT_MILLI_SECOND, | |
| 48 | + self::UNIT_AUTO, | |
| 49 | + self::UNIT_CUSTOM, | |
| 50 | + ]; | |
| 51 | + | |
| 30 | 52 | private const LENGTH_UNITS = [ |
| 31 | 53 | self::UNIT_PX, |
| 32 | 54 | self::UNIT_EM, |
| 33 | 55 | self::UNIT_REM, |
| @@ -65,10 +87,10 @@ | ||
| 65 | 87 | ]; |
| 66 | 88 | |
| 67 | 89 | private static function presets(): array { |
| 68 | 90 | return [ |
| 69 | - 'layout' => self::NUMERIC_UNITS, | |
| 70 | - 'spacing' => self::NUMERIC_UNITS, | |
| 91 | + 'layout' => self::sort_by_preferred_order( self::NUMERIC_UNITS ), | |
| 92 | + 'spacing' => self::sort_by_preferred_order( self::NUMERIC_UNITS ), | |
| 71 | 93 | 'position' => self::NUMERIC_UNITS, |
| 72 | 94 | 'typography' => self::NUMERIC_UNITS, |
| 73 | 95 | 'border' => self::NUMERIC_UNITS, |
| 74 | 96 | 'box_shadow' => self::NUMERIC_UNITS, |
| @@ -129,15 +151,25 @@ | ||
| 129 | 151 | ], |
| 130 | 152 | ]; |
| 131 | 153 | } |
| 132 | 154 | |
| 155 | + private static function sort_by_preferred_order( array $units ): array { | |
| 156 | + $index = array_flip( self::ORDER ); | |
| 157 | + | |
| 158 | + usort( $units, fn( $a, $b ) => | |
| 159 | + ( $index[ $a ] ?? PHP_INT_MAX ) <=> ( $index[ $b ] ?? PHP_INT_MAX ) | |
| 160 | + ); | |
| 161 | + | |
| 162 | + return $units; | |
| 163 | + } | |
| 164 | + | |
| 133 | 165 | public static function standard_units(): array { |
| 134 | - return [ | |
| 166 | + return self::sort_by_preferred_order( [ | |
| 135 | 167 | ...self::LENGTH_UNITS, |
| 136 | 168 | self::UNIT_PERCENT, |
| 137 | 169 | self::UNIT_AUTO, |
| 138 | 170 | self::UNIT_CUSTOM, |
| 139 | - ]; | |
| 171 | + ] ); | |
| 140 | 172 | } |
| 141 | 173 | |
| 142 | 174 | public static function all_supported_units(): array { |
| 143 | 175 | return [ |
| @@ -146,11 +178,29 @@ | ||
| 146 | 178 | ...self::ANGLE_UNITS, |
| 147 | 179 | ...self::EXTENDED_UNITS, |
| 148 | 180 | ...self::VIEWPORT_MIN_MAX_UNITS, |
| 149 | 181 | self::UNIT_PERCENT, |
| 182 | + self::UNIT_FR, | |
| 150 | 183 | ]; |
| 151 | 184 | } |
| 152 | 185 | |
| 186 | + public static function grid_track(): array { | |
| 187 | + return [ | |
| 188 | + self::UNIT_FR, | |
| 189 | + self::UNIT_CUSTOM, | |
| 190 | + ]; | |
| 191 | + } | |
| 192 | + | |
| 193 | + public static function grid_auto_track(): array { | |
| 194 | + return self::sort_by_preferred_order( [ | |
| 195 | + self::UNIT_PX, | |
| 196 | + self::UNIT_PERCENT, | |
| 197 | + self::UNIT_FR, | |
| 198 | + self::UNIT_AUTO, | |
| 199 | + self::UNIT_CUSTOM, | |
| 200 | + ] ); | |
| 201 | + } | |
| 202 | + | |
| 153 | 203 | public static function grouped_units(): array { |
| 154 | 204 | return [ |
| 155 | 205 | 'length' => self::LENGTH_UNITS, |
| 156 | 206 | 'angle' => self::ANGLE_UNITS, |
| @@ -176,8 +226,12 @@ | ||
| 176 | 226 | } |
| 177 | 227 | |
| 178 | 228 | public static function time(): array { |
| 179 | 229 | return self::by_group( 'time' ); |
| 230 | + } | |
| 231 | + | |
| 232 | + public static function angle(): array { | |
| 233 | + return self::by_group( 'angle' ); | |
| 180 | 234 | } |
| 181 | 235 | |
| 182 | 236 | public static function layout(): array { |
| 183 | 237 | return self::get_preset( 'layout' ); |