Home / Function/ combinations() — tailwindcss Function Reference

combinations() — tailwindcss Function Reference

Architecture documentation for the combinations() function in canonicalize-candidates.ts from the tailwindcss codebase.

Entity Profile

Dependency Diagram

graph TD
  15ad3cb4_825a_2476_41b2_37c2b18d4b48["combinations()"]
  f6c14bbb_2e42_58cc_18f1_c89a243da9c0["canonicalize-candidates.ts"]
  15ad3cb4_825a_2476_41b2_37c2b18d4b48 -->|defined in| f6c14bbb_2e42_58cc_18f1_c89a243da9c0
  fd4a6387_6427_eb54_6f14_abd89a3baf61["collapseCandidates()"]
  fd4a6387_6427_eb54_6f14_abd89a3baf61 -->|calls| 15ad3cb4_825a_2476_41b2_37c2b18d4b48
  style 15ad3cb4_825a_2476_41b2_37c2b18d4b48 fill:#6366f1,stroke:#818cf8,color:#fff

Relationship Graph

Source Code

packages/tailwindcss/src/canonicalize-candidates.ts lines 2574–2600

function* combinations<T>(arr: T[]): Generator<T[]> {
  let n = arr.length
  let limit = 1n << BigInt(n)

  for (let k = n; k >= 2; k--) {
    let mask = (1n << BigInt(k)) - 1n

    while (mask < limit) {
      let out = []
      for (let i = 0; i < n; i++) {
        if ((mask >> BigInt(i)) & 1n) {
          out.push(arr[i])
        }
      }
      yield out

      // Gosper's hack:
      // - https://programmingforinsomniacs.blogspot.com/2018/03/gospers-hack-explained.html
      // - https://rosettacode.org/wiki/Gosper%27s_hack
      //
      // We need to generate the next mask in lexicographical order.
      let carry = mask & -mask
      let ripple = mask + carry
      mask = (((ripple ^ mask) >> 2n) / carry) | ripple
    }
  }
}

Domain

Subdomains

Frequently Asked Questions

What does combinations() do?
combinations() is a function in the tailwindcss codebase, defined in packages/tailwindcss/src/canonicalize-candidates.ts.
Where is combinations() defined?
combinations() is defined in packages/tailwindcss/src/canonicalize-candidates.ts at line 2574.
What calls combinations()?
combinations() is called by 1 function(s): collapseCandidates.

Analyze Your Own Codebase

Get architecture documentation, dependency graphs, and domain analysis for your codebase in minutes.

Try Supermodel Free