//// /// @group BEM /// /// @access public //// @use './functions'; @use './validators'; @use './vars'; @use '../contexts'; /// /// Declare new rules for the current block for when this theme is active. /// /// @param {string} $name - First theme block name /// @param {string} $names - More theme block names /// /// @content /// @mixin at-theme($name, $names...) { $result: at-theme($name, $names...); $selector: nth($result, 1); $context: nth($result, 2); @include validators.validate( 'at-theme', (name: $name, names: $names), $selector, $context ); @include contexts.push(vars.$context-id, $context...); @at-root #{$selector} { @content; } @include contexts.pop(vars.$context-id); } /// /// Declare new rules for the current block for when this theme is active. /// Check the respective mixin documentation for more information. /// /// @return {list} A list with two items: 1. selector, 2. context or `null` /// /// @see {mixin} at-theme /// @function at-theme($name, $names...) { $noop: contexts.assert-stack-must-contain(vars.$context-id, 'block'); $parent-context: contexts.get(vars.$context-id, 'block'); $parent-selector: map-get(nth($parent-context, 2), 'selector'); //@if not functions.selector-suffix-match(&, $parent-selector) { // @error 'An at-theme rule must be an immediate child of a block'; //} $selector: functions.theme-selector($name, $names...); $selector: selector-nest($selector, &); $context: 'at-theme', ( 'name': join($name, $names), 'selector': $selector ); @return $selector $context; }