@use 'exports' as *;

.button {
	@layer components {
		@include vars;
		@include component;
	}

	@layer mods {
		&.mod-AI {
			&:not(.invert) {
				@include AI;

				&.mod-invert {
					@include invertIA;
				}

				&.is-success {
					@include successAI;
				}

				&.is-loading {
					@include loadingAI;
				}
			}
		}

		&.mod-block {
			@include block;
		}

		&.mod-S {
			@include S;
		}

		&.mod-XS {
			@include XS;
		}

		&.mod-disclosure {
			@include disclosure;
		}

		// .mod-outline is deprecated
		&.mod-outline,
		&.mod-outlined {
			&:where(:not(.is-success, .is-error)) {
				@include outlined;
			}
		}

		// .mod-link .mod-text deprecated
		&.mod-link,
		&.mod-text,
		&.mod-ghost {
			&:where(:not(.is-success, .is-error)) {
				@include ghost;
			}
		}

		&.mod-withIcon {
			&.mod-iconOnLeft {
				@include iconOnLeft;

				&.mod-S {
					@include iconOnLeftS;
				}

				&.mod-XS {
					@include iconOnLeftXS;
				}
			}

			&.mod-iconOnRight {
				@include iconOnRight;

				&.mod-S {
					@include iconOnRightS;
				}

				&.mod-XS {
					@include iconOnRightXS;
				}
			}
		}

		&.mod-onlyIcon {
			@include onlyIcon;

			&.mod-S {
				@include onlyIconS;
			}

			&.mod-XS {
				@include onlyIconXS;
			}
		}

		&:has(.numericBadge) {
			@include counter;

			&.mod-S {
				@include counterS;
			}

			&.mod-XS {
				@include counterXS;
			}
		}

		// .mod-delete is deprecated
		&.mod-delete,
		&.mod-critical {
			@include critical;

			// .mod-link is deprecated
			&.mod-link,
			&.mod-text {
				@include criticalGhost;
			}

			// .mod-outline is deprecated
			&.mod-outline,
			&.mod-outlined {
				@include criticalOutlined;
			}
		}

		// .mod-invert is deprecated
		&.mod-invert,
		&.mod-inverted {
			@include inverted;
		}

		&.mod-more {
			@include more;

			&.mod-S {
				@include moreS;
			}

			&.mod-XS {
				@include moreXS;
			}
		}

		// .loading is deprecated
		&.loading,
		&.is-loading {
			@include loading;

			&.mod-S {
				@include loadingS;
			}

			&.mod-XS {
				@include loadingXS;
			}

			&.mod-outlined {
				@include loadingOutlined;
			}

			&.mod-ghost {
				@include loadingGhost;
			}
		}

		// .error is deprecated
		&.error,
		&.is-error {
			@include error;
		}

		// .success is deprecated
		&.success,
		&.is-success {
			@include success;

			&.mod-AI,
			&.mod-outlined {
				@include successOutlined;
			}

			&.mod-ghost {
				@include successGhost;
			}
		}

		// .disabled is deprecated
		&.disabled,
		&.is-disabled,
		&[aria-disabled='true'] {
			@include disabled;
		}
	}
}
