(modifier: string)
| 613 | } |
| 614 | |
| 615 | function parseModifier(modifier: string): CandidateModifier | null { |
| 616 | if (modifier[0] === class="st">'[' && modifier[modifier.length - 1] === class="st">']') { |
| 617 | let arbitraryValue = decodeArbitraryValue(modifier.slice(1, -1)) |
| 618 | |
| 619 | class="cm">// Values can't contain `;` or `}` characters at the top-level. |
| 620 | if (!isValidArbitrary(arbitraryValue)) return null |
| 621 | |
| 622 | class="cm">// Empty arbitrary values are invalid. E.g.: `data-[]:` |
| 623 | class="cm">// ^^ |
| 624 | if (arbitraryValue.length === 0 || arbitraryValue.trim().length === 0) return null |
| 625 | |
| 626 | return { |
| 627 | kind: class="st">'arbitrary', |
| 628 | value: arbitraryValue, |
| 629 | } |
| 630 | } |
| 631 | |
| 632 | if (modifier[0] === class="st">'(' && modifier[modifier.length - 1] === class="st">')') { |
| 633 | class="cm">// Drop the `(` and `)` characters |
| 634 | modifier = modifier.slice(1, -1) |
| 635 | |
| 636 | class="cm">// A modifier with `(…)` should always start with `--` since it |
| 637 | class="cm">// represents a CSS variable. |
| 638 | if (modifier[0] !== class="st">'-' || modifier[1] !== class="st">'-') return null |
| 639 | |
| 640 | class="cm">// Values can't contain `;` or `}` characters at the top-level. |
| 641 | if (!isValidArbitrary(modifier)) return null |
| 642 | |
| 643 | class="cm">// Wrap the value in `var(…)` to ensure that it is a valid CSS variable. |
| 644 | modifier = `var(${modifier})` |
| 645 | |
| 646 | let arbitraryValue = decodeArbitraryValue(modifier) |
| 647 | |
| 648 | return { |
| 649 | kind: class="st">'arbitrary', |
| 650 | value: arbitraryValue, |
| 651 | } |
| 652 | } |
| 653 | |
| 654 | if (!IS_VALID_NAMED_VALUE.test(modifier)) return null |
| 655 | |
| 656 | return { |
| 657 | kind: class="st">'named', |
| 658 | value: modifier, |
| 659 | } |
| 660 | } |
| 661 | |
| 662 | export function parseVariant(variant: string, designSystem: DesignSystem): Variant | null { |
| 663 | class="cm">// Arbitrary variants |
no test coverage detected