@use 'sass:map';
@use '../context' as *;

@include layer(utilities, $use-css-layers, $layer-prefix) {
// font-family
@include spread-map-into-utilities(
	$map: $font-family,
	$class: font,
	$attribute: font-family,
	$prop: font,
	$zero-specificity: $zero-specificity-for-utilities
);

// font-weight
@include spread-map-into-utilities(
	$map: $font-weight,
	$class: font,
	$attribute: font-weight,
	$prop: font,
	$zero-specificity: $zero-specificity-for-utilities
);

// font-size
@include spread-map-into-utilities(
	$map: map.merge($font-size, $font-size-dynamic),
	$class: text,
	$attribute: font-size,
	$bps: $breakpoints,
	$prop: text,
	$deep: false,
	$zero-specificity: $zero-specificity-for-utilities
);

// font-style
%italic {
	font-style: italic;
}

@include wrap-with-where(
	$selector: '.italic',
	$enabled: $zero-specificity-for-utilities
) {
	@extend %italic;
}

%non-italic {
	font-style: normal;
}

@include wrap-with-where(
	$selector: '.non-italic',
	$enabled: $zero-specificity-for-utilities
) {
	@extend %non-italic;
}

// font-smoothing
%antialiased {
	-webkit-font-smoothing: antialiased;
	-moz-osx-font-smoothing: grayscale;
}

@include wrap-with-where(
	$selector: '.antialiased',
	$enabled: $zero-specificity-for-utilities
) {
	@extend %antialiased;
}

%subpixel-antialiased {
	-webkit-font-smoothing: auto;
	-moz-osx-font-smoothing: auto;
}

@include wrap-with-where(
	$selector: '.subpixel-antialiased',
	$enabled: $zero-specificity-for-utilities
) {
	@extend %subpixel-antialiased;
}

// line-height
@include spread-map-into-utilities(
	$map: $line-height,
	$class: leading,
	$attribute: line-height,
	$prop: leading,
	$zero-specificity: $zero-specificity-for-utilities
);

// letter-spacing
@include spread-map-into-utilities(
	$map: $letter-spacing,
	$class: tracking,
	$attribute: letter-spacing,
	$prop: tracking,
	$zero-specificity: $zero-specificity-for-utilities
);

// font-variant-numeric
@include spread-map-into-utilities(
	$map: $font-variant-numeric,
	$attribute: font-variant-numeric,
	$zero-specificity: $zero-specificity-for-utilities
);

// list-style-type
@include spread-map-into-utilities(
	$map: $list-style-type,
	$class: list,
	$attribute: list-style-type,
	$zero-specificity: $zero-specificity-for-utilities
);

// list-style-position
@include spread-map-into-utilities(
	$map: $list-style-position,
	$class: list,
	$attribute: list-style-position,
	$zero-specificity: $zero-specificity-for-utilities
);

// text-align
@include spread-map-into-utilities(
	$map: $text-align,
	$class: text,
	$attribute: text-align,
	$zero-specificity: $zero-specificity-for-utilities,
	$bps: $breakpoints
);

// text-decorator-line
@include spread-map-into-utilities(
	$map: $text-decorator-line,
	$attribute: text-decoration-line,
	$zero-specificity: $zero-specificity-for-utilities
);

// text-decorator-style
@include spread-map-into-utilities(
	$map: $text-decorator-style,
	$class: decoration,
	$attribute: text-decoration-style,
	$zero-specificity: $zero-specificity-for-utilities
);

// text-decorator-thickness
@include spread-map-into-utilities(
	$map: $text-decorator-thickness,
	$class: decoration,
	$attribute: text-decoration-thickness,
	$zero-specificity: $zero-specificity-for-utilities
);

// text-underline-offset
@include spread-map-into-utilities(
	$map: $text-underline-offset,
	$class: underline-offset,
	$attribute: text-underline-offset,
	$zero-specificity: $zero-specificity-for-utilities
);

// text-transform
@include spread-map-into-utilities(
	$map: $text-transform,
	$attribute: text-transform,
	$zero-specificity: $zero-specificity-for-utilities
);

// text-overflow
%truncate {
	overflow: hidden;
	text-overflow: ellipsis;
	white-space: nowrap;
}

@include wrap-with-where(
	$selector: '.truncate',
	$enabled: $zero-specificity-for-utilities
) {
	@extend %truncate;
}

%text-ellipsis {
	text-overflow: ellipsis;
}

@include wrap-with-where(
	$selector: '.text-ellipsis',
	$enabled: $zero-specificity-for-utilities
) {
	@extend %text-ellipsis;
}

%text-clip {
	text-overflow: clip;
}

@include wrap-with-where(
	$selector: '.text-clip',
	$enabled: $zero-specificity-for-utilities
) {
	@extend %text-clip;
}

%text-balance {
	text-wrap: balance;
}

@include wrap-with-where(
	$selector: '.text-balance',
	$enabled: $zero-specificity-for-utilities
) {
	@extend %text-balance;
}

// word break
%break-normal {
	overflow-wrap: normal;
	word-break: normal;
}

@include wrap-with-where(
	$selector: '.break-normal',
	$enabled: $zero-specificity-for-utilities
) {
	@extend %break-normal;
}

%break-words {
	overflow-wrap: break-word;
}

@include wrap-with-where(
	$selector: '.break-words',
	$enabled: $zero-specificity-for-utilities
) {
	@extend %break-words;
}

%break-all {
	word-break: break-all;
}

@include wrap-with-where(
	$selector: '.break-all',
	$enabled: $zero-specificity-for-utilities
) {
	@extend %break-all;
}

// vertical align
@include spread-map-into-utilities(
	$map: $vertical-align,
	$class: align,
	$attribute: vertical-align,
	$zero-specificity: $zero-specificity-for-utilities
);

// white-space
@include spread-map-into-utilities(
	$map: $white-space,
	$class: whitespace,
	$attribute: white-space,
	$zero-specificity: $zero-specificity-for-utilities
);

}
