Shagen Ogandzhanian
4 years ago
10 changed files with 523 additions and 315 deletions
@ -1,114 +1,249 @@ |
|||||||
package org.jetbrains.compose.web.css |
package org.jetbrains.compose.web.css |
||||||
|
|
||||||
interface CSSSizeValue : CSSUnitValue, StylePropertyValue |
interface CSSSizeValue<out T : CSSUnit> : CSSNumericValue { |
||||||
|
val value: Float |
||||||
interface CSSRelValue : CSSSizeValue |
val unit: T |
||||||
interface CSSpercentValue : CSSRelValue |
fun asString(): String = "${value}${unit.value}" |
||||||
interface CSSemValue : CSSRelValue |
fun newUnit(value: Float): CSSSizeValue<T> |
||||||
interface CSSexValue : CSSRelValue |
} |
||||||
interface CSSchValue : CSSRelValue |
|
||||||
interface CSSicValue : CSSRelValue |
private data class CSSUnitValueTyped<out T : CSSUnit>( |
||||||
interface CSSremValue : CSSRelValue |
override val value: Float, |
||||||
interface CSSlhValue : CSSRelValue |
override val unit: T |
||||||
interface CSSrlhValue : CSSRelValue |
) : CSSSizeValue<T> { |
||||||
interface CSSvwValue : CSSRelValue |
override fun newUnit(value: Float): CSSSizeValue<T> = copy(value = value) |
||||||
interface CSSvhValue : CSSRelValue |
} |
||||||
interface CSSviValue : CSSRelValue |
|
||||||
interface CSSvbValue : CSSRelValue |
operator fun <T : CSSUnit> CSSSizeValue<T>.times(num: Number): CSSSizeValue<T> = newUnit(value * num.toFloat()) |
||||||
interface CSSvminValue : CSSRelValue |
operator fun <T : CSSUnit> Number.times(unit: CSSSizeValue<T>): CSSSizeValue<T> = unit.newUnit(unit.value * toFloat()) |
||||||
interface CSSvmaxValue : CSSRelValue |
|
||||||
interface CSScmValue : CSSRelValue |
operator fun <T : CSSUnit> CSSSizeValue<T>.div(num: Number): CSSSizeValue<T> = newUnit(value / num.toFloat()) |
||||||
interface CSSmmValue : CSSRelValue |
|
||||||
interface CSSQValue : CSSRelValue |
operator fun <T: CSSUnit> CSSSizeValue<T>.plus(b: CSSSizeValue<T>): CSSSizeValue<T> = newUnit(value + b.value) |
||||||
|
operator fun <T: CSSUnit> CSSSizeValue<T>.minus(b: CSSSizeValue<T>): CSSSizeValue<T> = newUnit(value - b.value) |
||||||
interface CSSAbsValue : CSSSizeValue |
|
||||||
interface CSSptValue : CSSAbsValue |
|
||||||
interface CSSpcValue : CSSAbsValue |
typealias CSSUnitValue = CSSSizeValue<CSSUnit> |
||||||
interface CSSpxValue : CSSAbsValue |
typealias CSSpxValue = CSSSizeValue<CSSUnit.px> |
||||||
|
|
||||||
interface CSSangleValue : CSSUnitValue |
interface CSSUnitRel : CSSUnit |
||||||
interface CSSdegValue : CSSangleValue |
interface CSSUnitAbs: CSSUnit |
||||||
interface CSSgradValue : CSSangleValue |
interface CSSUnitAngle: CSSUnit |
||||||
interface CSSradValue : CSSangleValue |
interface CSSUnitTime: CSSUnit |
||||||
interface CSSturnValue : CSSangleValue |
interface CSSUnitFrequency: CSSUnit |
||||||
|
interface CSSUnitResolution: CSSUnit |
||||||
interface CSSTimeValue : CSSUnitValue |
interface CSSUnitFlex: CSSUnit |
||||||
interface CSSsValue : CSSTimeValue |
|
||||||
interface CSSmsValue : CSSTimeValue |
typealias CSSAngleValue = CSSSizeValue<CSSUnitAngle> |
||||||
|
|
||||||
interface CSSFrequencyValue : CSSUnitValue |
sealed interface CSSUnit { |
||||||
interface CSSHzValue : CSSFrequencyValue |
val value: String |
||||||
interface CSSkHzValue : CSSFrequencyValue |
|
||||||
|
object percent: CSSUnitRel { |
||||||
interface CSSResolutionValue : CSSUnitValue |
override val value: String = "%" |
||||||
interface CSSdpiValue : CSSResolutionValue |
} |
||||||
interface CSSdpcmValue : CSSResolutionValue |
|
||||||
interface CSSdppxValue : CSSResolutionValue |
object em: CSSUnitRel { |
||||||
|
override val value = "em" |
||||||
interface CSSFlexValue : CSSUnitValue |
} |
||||||
interface CSSfrValue : CSSFlexValue |
|
||||||
|
object ex: CSSUnitRel { |
||||||
|
override val value = "ex" |
||||||
|
} |
||||||
|
|
||||||
|
object ch: CSSUnitRel { |
||||||
|
override val value = "ch" |
||||||
|
} |
||||||
|
|
||||||
|
object ic: CSSUnitRel { |
||||||
|
override val value = "ic" |
||||||
|
} |
||||||
|
|
||||||
|
object rem: CSSUnitRel { |
||||||
|
override val value = "rem" |
||||||
|
} |
||||||
|
|
||||||
|
object lh: CSSUnitRel { |
||||||
|
override val value = "lh" |
||||||
|
} |
||||||
|
|
||||||
|
object rlh: CSSUnitRel { |
||||||
|
override val value = "rlh" |
||||||
|
} |
||||||
|
|
||||||
|
object vw: CSSUnitRel { |
||||||
|
override val value = "vw" |
||||||
|
} |
||||||
|
|
||||||
|
object vh: CSSUnitRel { |
||||||
|
override val value = "vh" |
||||||
|
} |
||||||
|
|
||||||
|
object vi: CSSUnitRel { |
||||||
|
override val value = "vi" |
||||||
|
} |
||||||
|
|
||||||
|
object vb: CSSUnitRel { |
||||||
|
override val value = "vb" |
||||||
|
} |
||||||
|
|
||||||
|
object vmin: CSSUnitRel { |
||||||
|
override val value = "vmin" |
||||||
|
} |
||||||
|
|
||||||
|
object vmax: CSSUnitRel { |
||||||
|
override val value = "vmax" |
||||||
|
} |
||||||
|
|
||||||
|
object cm: CSSUnitRel { |
||||||
|
override val value = "cm" |
||||||
|
} |
||||||
|
|
||||||
|
object mm: CSSUnitRel { |
||||||
|
override val value = "mm" |
||||||
|
} |
||||||
|
|
||||||
|
object q: CSSUnitRel { |
||||||
|
override val value = "q" |
||||||
|
} |
||||||
|
|
||||||
|
object pt: CSSUnitAbs { |
||||||
|
override val value = "pt" |
||||||
|
} |
||||||
|
|
||||||
|
object pc: CSSUnitAbs { |
||||||
|
override val value = "pc" |
||||||
|
} |
||||||
|
|
||||||
|
object px: CSSUnitAbs { |
||||||
|
override val value = "px" |
||||||
|
} |
||||||
|
|
||||||
|
object deg: CSSUnitAngle { |
||||||
|
override val value = "deg" |
||||||
|
} |
||||||
|
|
||||||
|
object grad: CSSUnitAngle { |
||||||
|
override val value = "grad" |
||||||
|
} |
||||||
|
|
||||||
|
object rad: CSSUnitAngle { |
||||||
|
override val value = "rad" |
||||||
|
} |
||||||
|
|
||||||
|
object turn: CSSUnitAngle { |
||||||
|
override val value = "turn" |
||||||
|
} |
||||||
|
|
||||||
|
object s: CSSUnitTime { |
||||||
|
override val value = "s" |
||||||
|
} |
||||||
|
|
||||||
|
object ms: CSSUnitTime { |
||||||
|
override val value = "ms" |
||||||
|
} |
||||||
|
|
||||||
|
object hz: CSSUnitFrequency { |
||||||
|
override val value = "hz" |
||||||
|
} |
||||||
|
|
||||||
|
object khz: CSSUnitFrequency { |
||||||
|
override val value = "khz" |
||||||
|
} |
||||||
|
|
||||||
|
object dpi: CSSUnitResolution { |
||||||
|
override val value = "dpi" |
||||||
|
} |
||||||
|
|
||||||
|
object dpcm: CSSUnitResolution { |
||||||
|
override val value = "dpcm" |
||||||
|
} |
||||||
|
|
||||||
|
object dppx: CSSUnitResolution { |
||||||
|
override val value = "dppx" |
||||||
|
} |
||||||
|
|
||||||
|
object fr: CSSUnitFlex { |
||||||
|
override val value = "fr" |
||||||
|
} |
||||||
|
|
||||||
|
object number: CSSUnit { |
||||||
|
override val value = "number" |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
val Number.number |
val Number.number |
||||||
get(): CSSUnitValue = CSS.number(this) |
get(): CSSSizeValue<CSSUnit.number> = CSSUnitValueTyped(this.toFloat(), CSSUnit.number) |
||||||
|
|
||||||
val Number.percent |
val Number.percent |
||||||
get(): CSSpercentValue = CSS.percent(this) |
get() : CSSSizeValue<CSSUnit.percent> = CSSUnitValueTyped(this.toFloat(), CSSUnit.percent) |
||||||
|
|
||||||
val Number.em |
val Number.em |
||||||
get(): CSSemValue = CSS.em(this) |
get() : CSSSizeValue<CSSUnit.em> = CSSUnitValueTyped(this.toFloat(), CSSUnit.em) |
||||||
|
|
||||||
val Number.ex |
val Number.ex |
||||||
get(): CSSexValue = CSS.ex(this) |
get(): CSSSizeValue<CSSUnit.ex> = CSSUnitValueTyped(this.toFloat(), CSSUnit.ex) |
||||||
|
|
||||||
val Number.ch |
val Number.ch |
||||||
get(): CSSchValue = CSS.ch(this) |
get(): CSSSizeValue<CSSUnit.ch> = CSSUnitValueTyped(this.toFloat(), CSSUnit.ch) |
||||||
|
|
||||||
val Number.cssRem |
val Number.cssRem |
||||||
get(): CSSremValue = CSS.rem(this) |
get(): CSSSizeValue<CSSUnit.rem> = CSSUnitValueTyped(this.toFloat(), CSSUnit.rem) |
||||||
|
|
||||||
val Number.vw |
val Number.vw |
||||||
get(): CSSvwValue = CSS.vw(this) |
get(): CSSSizeValue<CSSUnit.vw> = CSSUnitValueTyped(this.toFloat(), CSSUnit.vw) |
||||||
|
|
||||||
val Number.vh |
val Number.vh |
||||||
get(): CSSvhValue = CSS.vh(this) |
get(): CSSSizeValue<CSSUnit.vh> = CSSUnitValueTyped(this.toFloat(), CSSUnit.vh) |
||||||
|
|
||||||
val Number.vmin |
val Number.vmin |
||||||
get(): CSSvminValue = CSS.vmin(this) |
get(): CSSSizeValue<CSSUnit.vmin> = CSSUnitValueTyped(this.toFloat(), CSSUnit.vmin) |
||||||
|
|
||||||
val Number.vmax |
val Number.vmax |
||||||
get(): CSSvmaxValue = CSS.vmax(this) |
get(): CSSSizeValue<CSSUnit.vmax> = CSSUnitValueTyped(this.toFloat(), CSSUnit.vmax) |
||||||
|
|
||||||
val Number.cm |
val Number.cm |
||||||
get(): CSScmValue = CSS.cm(this) |
get(): CSSSizeValue<CSSUnit.cm> = CSSUnitValueTyped(this.toFloat(), CSSUnit.cm) |
||||||
|
|
||||||
val Number.mm |
val Number.mm |
||||||
get(): CSSmmValue = CSS.mm(this) |
get(): CSSSizeValue<CSSUnit.mm> = CSSUnitValueTyped(this.toFloat(), CSSUnit.mm) |
||||||
|
|
||||||
val Number.Q |
val Number.Q |
||||||
get(): CSSQValue = CSS.Q(this) |
get() : CSSSizeValue<CSSUnit.q> = CSSUnitValueTyped(this.toFloat(), CSSUnit.q) |
||||||
|
|
||||||
val Number.pt |
val Number.pt |
||||||
get(): CSSptValue = CSS.pt(this) |
get(): CSSSizeValue<CSSUnit.pt> = CSSUnitValueTyped(this.toFloat(), CSSUnit.pt) |
||||||
val Number.pc |
val Number.pc |
||||||
get(): CSSpcValue = CSS.pc(this) |
get(): CSSSizeValue<CSSUnit.pc> = CSSUnitValueTyped(this.toFloat(), CSSUnit.pc) |
||||||
val Number.px |
val Number.px |
||||||
get(): CSSpxValue = CSS.px(this) |
get(): CSSSizeValue<CSSUnit.px> = CSSUnitValueTyped(this.toFloat(), CSSUnit.px) |
||||||
|
|
||||||
val Number.deg |
val Number.deg |
||||||
get(): CSSdegValue = CSS.deg(this) |
get(): CSSSizeValue<CSSUnit.deg> = CSSUnitValueTyped(this.toFloat(), CSSUnit.deg) |
||||||
val Number.grad |
val Number.grad |
||||||
get(): CSSgradValue = CSS.grad(this) |
get(): CSSSizeValue<CSSUnit.grad> = CSSUnitValueTyped(this.toFloat(), CSSUnit.grad) |
||||||
val Number.rad |
val Number.rad |
||||||
get(): CSSradValue = CSS.rad(this) |
get(): CSSSizeValue<CSSUnit.rad> = CSSUnitValueTyped(this.toFloat(), CSSUnit.rad) |
||||||
val Number.turn |
val Number.turn |
||||||
get(): CSSturnValue = CSS.turn(this) |
get(): CSSSizeValue<CSSUnit.turn> = CSSUnitValueTyped(this.toFloat(), CSSUnit.turn) |
||||||
|
|
||||||
val Number.s |
val Number.s |
||||||
get(): CSSsValue = CSS.s(this) |
get(): CSSSizeValue<CSSUnit.s> = CSSUnitValueTyped(this.toFloat(), CSSUnit.s) |
||||||
val Number.ms |
val Number.ms |
||||||
get(): CSSmsValue = CSS.ms(this) |
get(): CSSSizeValue<CSSUnit.ms> = CSSUnitValueTyped(this.toFloat(), CSSUnit.ms) |
||||||
|
|
||||||
val Number.Hz |
val Number.Hz |
||||||
get(): CSSHzValue = CSS.Hz(this) |
get(): CSSSizeValue<CSSUnit.hz> = CSSUnitValueTyped(this.toFloat(), CSSUnit.hz) |
||||||
val Number.kHz |
val Number.kHz |
||||||
get(): CSSkHzValue = CSS.kHz(this) |
get(): CSSSizeValue<CSSUnit.khz> = CSSUnitValueTyped(this.toFloat(), CSSUnit.khz) |
||||||
|
|
||||||
val Number.dpi |
val Number.dpi |
||||||
get(): CSSdpiValue = CSS.dpi(this) |
get(): CSSSizeValue<CSSUnit.dpi> = CSSUnitValueTyped(this.toFloat(), CSSUnit.dpi) |
||||||
val Number.dpcm |
val Number.dpcm |
||||||
get(): CSSdpcmValue = CSS.dpcm(this) |
get(): CSSSizeValue<CSSUnit.dpcm> = CSSUnitValueTyped(this.toFloat(), CSSUnit.dpcm) |
||||||
val Number.dppx |
val Number.dppx |
||||||
get(): CSSdppxValue = CSS.dppx(this) |
get(): CSSSizeValue<CSSUnit.dppx> = CSSUnitValueTyped(this.toFloat(), CSSUnit.dppx) |
||||||
|
|
||||||
val Number.fr |
val Number.fr |
||||||
get(): CSSfrValue = CSS.fr(this) |
get(): CSSSizeValue<CSSUnit.fr> = CSSUnitValueTyped(this.toFloat(), CSSUnit.fr) |
||||||
|
Loading…
Reference in new issue