@use 'sass:meta';
@use 'sass:list';
@use 'sass:color';
@use 'sass:math';
@use 'sass:string';
@use 'sass:selector';
@use 'asset' as *;
@use 'black' as *;
@use 'bottom-shadow' as *;
@use 'clamp-val' as *;
@use 'closest-direction' as *;
@use 'closest-position' as *;
@use 'color-complement' as *;
@use 'color-contrast' as *;
@use 'color-invert' as *;
@use 'color-text-contrast' as *;
@use 'color-to-string' as *;
@use 'conv-angle' as *;
@use 'conv-color-name' as *;
@use 'conv-color' as *;
@use 'conv-to-em' as *;
@use 'conv-to-px' as *;
@use 'conv-to-rem' as *;
@use 'num-to-ratio' as *;
@use 'entity' as *;
@use 'equals-false' as *;
@use 'equals-true' as *;
@use 'every' as *;
@use 'exp-maclaurin' as *;
@use 'extend-map' as *;
@use 'factorial' as *;
@use 'fibonacci' as *;
@use 'first-of' as *;
@use 'font-stack' as *;
@use 'get-color-type' as *;
@use 'is-absolute-length' as *;
@use 'is-alias' as *;
@use 'is-angle' as *;
@use 'is-calculation' as *;
@use 'is-color' as *;
@use 'is-conventional' as *;
@use 'is-empty' as *;
@use 'is-falsey' as *;
@use 'is-float' as *;
@use 'is-frequency' as *;
@use 'is-global-value' as *;
@use 'is-integer' as *;
@use 'is-length' as *;
@use 'is-list' as *;
@use 'is-map' as *;
@use 'is-number' as *;
@use 'is-percentage' as *;
@use 'is-position' as *;
@use 'is-relative-length' as *;
@use 'is-reserved' as *;
@use 'is-resolution' as *;
@use 'is-string' as *;
@use 'is-time' as *;
@use 'is-true' as *;
@use 'is-valid-hex' as *;
@use 'last-index' as *;
@use 'last-of' as *;
@use 'linear-interpolation' as *;
@use 'list-chunk' as *;
@use 'list-contains' as *;
@use 'list-count-values' as *;
@use 'list-loop' as *;
@use 'list-prepend' as *;
@use 'list-purge' as *;
@use 'list-range' as *;
@use 'list-remove-duplicates' as *;
@use 'list-remove-nth' as *;
@use 'list-replace-nth' as *;
@use 'list-reverse' as *;
@use 'list-slice' as *;
@use 'list-sort' as *;
@use 'list-to-map' as *;
@use 'list-to-string' as *;
@use 'list-update' as *;
@use 'make-long-shadow' as *;
@use 'map-get-key-chains' as *;
@use 'map-is-deep' as *;
@use 'map-is-flat' as *;
@use 'map-to-list' as *;
@use 'map-to-string' as *;
@use 'num-to-ratio' as *;
@use 'order-index' as *;
@use 'pi' as *;
@use 'ratio-to-percentage' as *;
@use 'remove-from' as *;
@use 'remove-where' as *;
@use 'resolve-alias' as *;
@use 'shade' as *;
@use 'some' as *;
@use 'str-remove' as *;
@use 'str-replace' as *;
@use 'str-to-list' as *;
@use 'str-to-num' as *;
@use 'strip-unit' as *;
@use 'time-equation' as *;
@use 'timing' as *;
@use 'tint' as *;
@use 'to-cmyk' as *;
@use 'to-fixed' as *;
@use 'to-hex' as *;
@use 'to-list' as *;
@use 'top-shadow' as *;
@use 'trend-line' as *;
@use 'white' as *;

/// Return a list made of the result of each function call from `$functions`
/// with `$args`.
///
/// This function iterates over a list of functions, comprised of their function
/// names as strings, applying each function to the provided arguments, and
/// then collects the results into a new list. This is useful for applying a
/// eries of transformations or calculations to a set of data in a single
/// operation.
///
/// @param {List} $functions - List of function names (as strings) to call.
/// @param {Arglist} $args - Extra arguments to pass to each function.
///
/// @return {List} The result of the arguments(s) being applied to the list of
/// function(s).
///
/// @access public
/// @group Utilities
///
/// @throw Invalid function name
@function functions-walk($functions, $args...) {
  $list: ();

  @each $function in $functions {
    @if not meta.function-exists($function) {
      @error 'There is no #{meta.inspect($function)} function available to ' +
        'the [ functions-walk() ] function.';
    }

    $list: list.append($list, meta.call(meta.get-function($function), $args...));
  }

  @return $list;
}
