@@ -16,7 +16,6 @@ module Internal.Model exposing
16 , LayoutContext(..)
16 , LayoutContext(..)
17 , Length(..)
17 , Length(..)
18 , Location(..)
18 , Location(..)
20 , NodeName(..)
19 , NodeName(..)
21 , Option(..)
20 , Option(..)
22 , OptionRecord
21 , OptionRecord
@@ -30,7 +29,6 @@ module Internal.Model exposing
30 , TransformComponent(..)
29 , TransformComponent(..)
31 , Transformation(..)
30 , Transformation(..)
32 , VAlign(..)
31 , VAlign(..)
35 , addNodeName
33 , addNodeName
@@ -42,7 +40,7 @@ module Internal.Model exposing
42 , asParagraph
40 , asParagraph
44 , asTextColumn
42 , asTextColumn
45− , boxShadowClass
43+ , boxShadowName
46 , columnClass
44 , columnClass
47 , composeTransformation
45 , composeTransformation
48 , contextClasses
46 , contextClasses
@@ -79,30 +77,40 @@ module Internal.Model exposing
79 , onlyStyles
77 , onlyStyles
80 , optionsToRecord
78 , optionsToRecord
81 , paddingName
79 , paddingName
83 , pageClass
80 , pageClass
84 , paragraphClass
81 , paragraphClass
85 , reduceRecursive
82 , reduceRecursive
83+ , reduceRecursiveCalcName
86 , reduceStyles
84 , reduceStyles
87 , reduceStylesRecursive
85 , reduceStylesRecursive
88 , removeNever
86 , removeNever
89 , renderFontClassName
89 , renderFontClassName
90 , renderHeight
90 , renderHeight
91 , renderRoot
91 , renderRoot
93 , renderWidth
92 , renderWidth
94 , rootStyle
93 , rootStyle
95 , rowClass
94 , rowClass
96 , singleClass
95 , singleClass
97 , spacingName
98 , spacingName
99− , textShadowClass
101+ , textElement
101 , toStyleSheet
105 , toStyleSheet
106+ , toStyleSheetString
102 , transformClass
107 , transformClass
103 , unstyled
110 , unstyled
104 , unwrapDecorations
112 , unwrapDecorations
105− , variantName
113+ , unwrapDecsHelper
@@ -112,7 +120,7 @@ import Html.Attributes
112import Html.Keyed
120import Html.Keyed
113import Internal.Flag as Flag exposing (Flag)
121import Internal.Flag as Flag exposing (Flag)
114import Internal.Style exposing (classes, dot)
122import Internal.Style exposing (classes, dot)
115−import Json.Encode as Encode
123+import Json.Encode as Json
116import Set exposing (Set)
124import Set exposing (Set)
117import VirtualDom
125import VirtualDom
@@ -174,7 +182,7 @@ type Style
174 | Colored String String Color
182 | Colored String String Color
175 | SpacingStyle String Int Int
183 | SpacingStyle String Int Int
176 | BorderWidth String Int Int Int Int
184 | BorderWidth String Int Int Int Int
177− | PaddingStyle String Float Float Float Float
185+ | PaddingStyle String Int Int Int Int
178 | GridTemplateStyle
186 | GridTemplateStyle
179 { spacing : ( Length, Length )
187 { spacing : ( Length, Length )
180 , columns : List Length
188 , columns : List Length
@@ -205,86 +213,12 @@ type PseudoClass
209−type alias Adjustment =
219 | SansSerif
218 | SansSerif
220 | Monospace
219 | Monospace
221 | Typeface String
220 | Typeface String
222 | ImportFont String String
221 | ImportFont String String
225− , adjustment : Maybe Adjustment
226− , variants : List Variant
231− = VariantActive String
233− | VariantIndexed String Int
238− VariantActive name ->
239− "\"" ++ name ++ "\""
242− "\"" ++ name ++ "\" 0"
244− VariantIndexed name index ->
245− "\"" ++ name ++ "\" " ++ String.fromInt index
250− VariantActive name ->
256− VariantIndexed name index ->
257− name ++ "-" ++ String.fromInt index
260−renderVariants typeface =
263− Just (String.join ", " (List.map renderVariant font.variants))
271− VariantActive name ->
277− VariantIndexed name index ->
278− name == "smcp" && index == 1
281−hasSmallCaps typeface =
284− List.any isSmallCaps font.variants
290type Property
224type Property
@@ -372,13 +306,6 @@ type NodeName
372 | Embedded String String
306 | Embedded String String
375−type NearbyChildren msg
377− | ChildrenBehind (List (Html.Html msg))
378− | ChildrenInFront (List (Html.Html msg))
379− | ChildrenBehindAndInFront (List (Html.Html msg)) (List (Html.Html msg))
@@ -387,7 +314,7 @@ type alias Gathered msg =
387 { node : NodeName
314 { node : NodeName
388 , attributes : List (VirtualDom.Attribute msg)
315 , attributes : List (VirtualDom.Attribute msg)
389 , styles : List Style
316 , styles : List Style
390− , children : NearbyChildren msg
317+ , children : List (VirtualDom.Node msg)
391 , has : Flag.Field
318 , has : Flag.Field
@@ -455,10 +382,7 @@ finalizeNode has node attributes children embedMode parentContext =
455 Embedded nodeName internal ->
382 Embedded nodeName internal ->
456 VirtualDom.node nodeName
383 VirtualDom.node nodeName
457 attributes
384 attributes
458− [ createNode internal
459− [ Html.Attributes.class
460− (classes.any ++ " " ++ classes.single)
385+ [ createNode internal [ Html.Attributes.class (classes.any ++ " " ++ classes.single) ]
464 case parentContext of
388 case parentContext of
@@ -535,45 +459,49 @@ finalizeNode has node attributes children embedMode parentContext =
537embedWith static opts styles children =
461embedWith static opts styles children =
541− |> List.foldl reduceStyles ( Set.empty, renderFocusStyle opts.focus )
543− -- |> reduceStylesRecursive Set.empty [ ]) --renderFocusStyle opts.focus ]
545− |> toStyleSheet opts
547 if static then
462 if static then
548− staticRoot opts
463+ staticRoot
549− :: dynamicStyleSheet
464+ :: (styles
465+ |> List.foldl reduceStyles ( Set.empty, [ renderFocusStyle opts.focus ] )
467+ -- |> reduceStylesRecursive Set.empty [ ]) --renderFocusStyle opts.focus ]
469+ |> toStyleSheet opts
550 :: children
471 :: children
553− dynamicStyleSheet
474+ (styles
475+ |> List.foldl reduceStyles ( Set.empty, [ renderFocusStyle opts.focus ] )
477+ -- |> reduceStylesRecursive Set.empty [ ]) --renderFocusStyle opts.focus ]
479+ |> toStyleSheet opts
554 :: children
481 :: children
557embedKeyed static opts styles children =
484embedKeyed static opts styles children =
561− |> List.foldl reduceStyles ( Set.empty, renderFocusStyle opts.focus )
563− -- |> reduceStylesRecursive Set.empty [ ]) --renderFocusStyle opts.focus ]
565− |> toStyleSheet opts
567 if static then
485 if static then
568− ( "static-stylesheet", staticRoot opts )
486+ ( "static-stylesheet", staticRoot )
569 :: ( "dynamic-stylesheet"
487 :: ( "dynamic-stylesheet"
570− , dynamicStyleSheet
488+ , styles
489+ |> List.foldl reduceStyles ( Set.empty, [ renderFocusStyle opts.focus ] )
491+ -- |> reduceStylesRecursive Set.empty [ ]) --renderFocusStyle opts.focus ]
493+ |> toStyleSheet opts
572 :: children
495 :: children
575 ( "dynamic-stylesheet"
498 ( "dynamic-stylesheet"
576− , dynamicStyleSheet
499+ , styles
500+ |> List.foldl reduceStyles ( Set.empty, [ renderFocusStyle opts.focus ] )
502+ -- |> reduceStylesRecursive Set.empty [ ]) --renderFocusStyle opts.focus ]
504+ |> toStyleSheet opts
578 :: children
506 :: children
@@ -889,16 +817,7 @@ skippable flag style =
892−gatherAttrRecursive :
820+gatherAttrRecursive : String -> NodeName -> Flag.Field -> Transformation -> List Style -> List (VirtualDom.Attribute msg) -> List (VirtualDom.Node msg) -> List (Attribute aligned msg) -> Gathered msg
898− -> List (VirtualDom.Attribute msg)
899− -> NearbyChildren msg
900− -> List (Attribute aligned msg)
902gatherAttrRecursive classes node has transform styles attrs children elementAttrs =
821gatherAttrRecursive classes node has transform styles attrs children elementAttrs =
903 case elementAttrs of
822 case elementAttrs of
@@ -1032,7 +951,7 @@ gatherAttrRecursive classes node has transform styles attrs children elementAttr
1033 gatherAttrRecursive (classes ++ " " ++ newClass)
952 gatherAttrRecursive (classes ++ " " ++ newClass)
1035− (Flag.merge addToFlags (Flag.add Flag.width has))
954+ (Flag.merge addToFlags has)
1036 transform
955 transform
1037 (newStyles ++ styles)
956 (newStyles ++ styles)
@@ -1053,7 +972,7 @@ gatherAttrRecursive classes node has transform styles attrs children elementAttr
1054 "height-px-" ++ val
973 "height-px-" ++ val
1056− gatherAttrRecursive (Internal.Style.classes.heightExact ++ " " ++ name ++ " " ++ classes)
975+ gatherAttrRecursive (name ++ " " ++ classes)
1058 (Flag.add Flag.height has)
977 (Flag.add Flag.height has)
1059 transform
978 transform
@@ -1110,7 +1029,7 @@ gatherAttrRecursive classes node has transform styles attrs children elementAttr
1111 gatherAttrRecursive (classes ++ " " ++ newClass)
1030 gatherAttrRecursive (classes ++ " " ++ newClass)
1113− (Flag.merge addToFlags (Flag.add Flag.height has))
1032+ (Flag.merge addToFlags has)
1114 transform
1033 transform
1115 (newStyles ++ styles)
1034 (newStyles ++ styles)
@@ -1142,15 +1061,20 @@ gatherAttrRecursive classes node has transform styles attrs children elementAttr
1142 gatherAttrRecursive classes (addNodeName "h6" node) has transform styles attrs children remaining
1061 gatherAttrRecursive classes (addNodeName "h6" node) has transform styles attrs children remaining
1144 Paragraph ->
1063 Paragraph ->
1145− -- previously we rendered a <p> tag, though apparently this invalidates the html if it has <div>s inside.
1064+ let
1146− -- Since we can't guaranteee that there are no divs, we need another strategy.
1065+ newNode =
1147− -- While it's not documented in many places, there apparently is a paragraph aria role
1066+ case node of
1148− -- https://github.com/w3c/aria/blob/11f85f41a5b621fdbe85fc9bcdcd270e653a48ba/common/script/roleInfo.js
1067+ Generic ->
1149− -- Though we'll need to wait till it gets released in an official wai-aria spec to use it.
1068+ NodeName "p"
1150− -- If it's used at the moment, then Lighthouse complains (likely rightfully) that role paragraph is not recognized.
1069+
1151− gatherAttrRecursive
1076+ gatherAttrRecursive classes
1152− classes
1077+ newNode
1155 transform
1079 transform
@@ -1185,16 +1109,75 @@ gatherAttrRecursive classes node has transform styles attrs children elementAttr
1186 Styled styled ->
1110 Styled styled ->
1187 styles ++ styled.styles
1111 styles ++ styled.styles
1115+ [ Html.Attributes.class <|
1119+ [ Internal.Style.classes.nearby
1120+ , Internal.Style.classes.single
1121+ , Internal.Style.classes.above
1126+ [ Internal.Style.classes.nearby
1127+ , Internal.Style.classes.single
1128+ , Internal.Style.classes.below
1133+ [ Internal.Style.classes.nearby
1134+ , Internal.Style.classes.single
1135+ , Internal.Style.classes.onRight
1140+ [ Internal.Style.classes.nearby
1141+ , Internal.Style.classes.single
1142+ , Internal.Style.classes.onLeft
1147+ [ Internal.Style.classes.nearby
1148+ , Internal.Style.classes.single
1149+ , Internal.Style.classes.inFront
1154+ [ Internal.Style.classes.nearby
1155+ , Internal.Style.classes.single
1156+ , Internal.Style.classes.behind
1170+ styled.html NoStyleSheet asEl
1174+ if location == Behind then
1175+ Internal.Style.classes.hasBehind ++ " " ++ classes
1189− gatherAttrRecursive
1180+ gatherAttrRecursive newClasses node has transform newStyles attrs (nearbyElement :: children) remaining
1196− (addNearbyElement location elem children)
1199 AlignX x ->
1182 AlignX x ->
1200 if Flag.present Flag.xAlign has then
1183 if Flag.present Flag.xAlign has then
@@ -1250,106 +1233,6 @@ gatherAttrRecursive classes node has transform styles attrs children elementAttr
1250 remaining
1233 remaining
1253−addNearbyElement location elem existing =
1256− nearbyElement location elem
1259− NoNearbyChildren ->
1262− ChildrenBehind [ nearby ]
1265− ChildrenInFront [ nearby ]
1267− ChildrenBehind existingBehind ->
1270− ChildrenBehind (nearby :: existingBehind)
1273− ChildrenBehindAndInFront existingBehind [ nearby ]
1275− ChildrenInFront existingInFront ->
1278− ChildrenBehindAndInFront [ nearby ] existingInFront
1281− ChildrenInFront (nearby :: existingInFront)
1283− ChildrenBehindAndInFront existingBehind existingInFront ->
1286− ChildrenBehindAndInFront (nearby :: existingBehind) existingInFront
1289− ChildrenBehindAndInFront existingBehind (nearby :: existingInFront)
1292−nearbyElement location elem =
1294− [ Html.Attributes.class <|
1298− [ Internal.Style.classes.nearby
1299− , Internal.Style.classes.single
1300− , Internal.Style.classes.above
1305− [ Internal.Style.classes.nearby
1306− , Internal.Style.classes.single
1307− , Internal.Style.classes.below
1312− [ Internal.Style.classes.nearby
1313− , Internal.Style.classes.single
1314− , Internal.Style.classes.onRight
1319− [ Internal.Style.classes.nearby
1320− , Internal.Style.classes.single
1321− , Internal.Style.classes.onLeft
1326− [ Internal.Style.classes.nearby
1327− , Internal.Style.classes.single
1328− , Internal.Style.classes.inFront
1333− [ Internal.Style.classes.nearby
1334− , Internal.Style.classes.single
1335− , Internal.Style.classes.behind
1349− styled.html NoStyleSheet asEl
1353renderWidth w =
1236renderWidth w =
1354 case w of
1237 case w of
1355 Px px ->
1238 Px px ->
@@ -1436,7 +1319,7 @@ renderHeight h =
1436 "height-px-" ++ val
1319 "height-px-" ++ val
1438 ( Flag.none
1321 ( Flag.none
1439− , Internal.Style.classes.heightExact ++ " " ++ name
1322+ , name
1440 , [ Single name "height" (val ++ "px") ]
1323 , [ Single name "height" (val ++ "px") ]
@@ -1459,7 +1342,7 @@ renderHeight h =
1459 , [ Single
1342 , [ Single
1460 (Internal.Style.classes.any
1343 (Internal.Style.classes.any
1462− ++ Internal.Style.classes.column
1345+ ++ Internal.Style.classes.row
1463 ++ " > "
1346 ++ " > "
1464 ++ (Internal.Style.dot <| "height-fill-" ++ String.fromInt portion)
1347 ++ (Internal.Style.dot <| "height-fill-" ++ String.fromInt portion)
@@ -1478,9 +1361,7 @@ renderHeight h =
1480 "min-height"
1363 "min-height"
1481− -- This needs to be !important because we're using `min-height: min-content`
1482− -- to correct for safari's incorrect implementation of flexbox.
1483− (String.fromInt minSize ++ "px !important")
1364+ (String.fromInt minSize ++ "px")
1485 ( newFlag, newAttrs, newStyle ) =
1366 ( newFlag, newAttrs, newStyle ) =
1486 renderHeight len
1367 renderHeight len
@@ -1558,7 +1439,7 @@ element : LayoutContext -> NodeName -> List (Attribute aligned msg) -> Children
1558element context node attributes children =
1439element context node attributes children =
1559 attributes
1440 attributes
1560 |> List.reverse
1441 |> List.reverse
1561− |> gatherAttrRecursive (contextClasses context) node Flag.none untransformed [] [] NoNearbyChildren
1442+ |> gatherAttrRecursive (contextClasses context) node Flag.none untransformed [] [] []
1562 |> createElement context children
1443 |> createElement context children
@@ -1609,31 +1490,34 @@ createElement context children rendered =
1609 -- Maybe we could unpack text elements in a paragraph as well,
1490 -- Maybe we could unpack text elements in a paragraph as well,
1610 -- however, embedded elements that are larger than the line height will overlap with exisitng text.
1491 -- however, embedded elements that are larger than the line height will overlap with exisitng text.
1611 -- I don't think that's what we want.
1492 -- I don't think that's what we want.
1613− -- context
1494+ context
1614− -- == asEl
1495+ == asEl
1615− -- || context
1496+ || context
1616− -- == asParagraph
1497+ == asParagraph
1618− -- ( VirtualDom.text
1499+ ( VirtualDom.text
1619− -- (if context == asParagraph then
1500+ (if context == asParagraph then
1624− -- :: htmls
1506+ :: htmls
1625− -- , existingStyles
1507+ , existingStyles
1628− ( (if context == asEl then
1510+ else
1629− textElementFill str
1632− textElement str
1511+ ( textElement
1512+ (if context == asParagraph then
1634− :: htmls
1518+ :: htmls
1635− , existingStyles
1519+ , existingStyles
1638 Empty ->
1522 Empty ->
1639 ( htmls, existingStyles )
1523 ( htmls, existingStyles )
@@ -1675,30 +1559,28 @@ createElement context children rendered =
1675 -- TEXT OPTIMIZATION
1559 -- TEXT OPTIMIZATION
1676 -- You can have raw text if the element is an el, and has `width-content` and `height-content`
1560 -- You can have raw text if the element is an el, and has `width-content` and `height-content`
1677 -- Same if it's a column or row with one child and width-content, height-content
1561 -- Same if it's a column or row with one child and width-content, height-content
1679− -- context
1563+ context
1680− -- == asEl
1564+ == asEl
1681− -- || context
1565+ || context
1682− -- == asParagraph
1566+ == asParagraph
1684− -- ( ( key
1568+ ( ( key
1685− -- , VirtualDom.text
1569+ , VirtualDom.text
1688− -- :: htmls
1572+ :: htmls
1689− -- , existingStyles
1573+ , existingStyles
1693− , if context == asEl then
1694− textElementFill str
1697− textElement str
1578+ , textElement
1699− :: htmls
1581+ :: htmls
1700− , existingStyles
1582+ , existingStyles
1703 Empty ->
1585 Empty ->
1704 ( htmls, existingStyles )
1586 ( htmls, existingStyles )
@@ -1721,8 +1603,13 @@ createElement context children rendered =
1721 (finalizeNode rendered.has
1603 (finalizeNode rendered.has
1722 rendered.node
1604 rendered.node
1723 rendered.attributes
1605 rendered.attributes
1724− (Keyed
1606+ (Keyed <|
1610+ ( "nearby-elements-pls", x )
1725− (addKeyedChildren "nearby-element-pls" keyed rendered.children)
1612+ rendered.children
1727 NoStyleSheet
1614 NoStyleSheet
@@ -1736,7 +1623,13 @@ createElement context children rendered =
1736 rendered.node
1623 rendered.node
1737 rendered.attributes
1624 rendered.attributes
1629+ ( "nearby-elements-pls", x )
1739− (addKeyedChildren "nearby-element-pls" keyed rendered.children)
1631+ rendered.children
@@ -1758,7 +1651,7 @@ createElement context children rendered =
1758 rendered.has
1651 rendered.has
1759 rendered.node
1652 rendered.node
1760 rendered.attributes
1653 rendered.attributes
1761− (Unkeyed (addChildren unkeyed rendered.children))
1654+ (Unkeyed <| unkeyed ++ rendered.children)
1762 NoStyleSheet
1655 NoStyleSheet
@@ -1770,42 +1663,10 @@ createElement context children rendered =
1770 rendered.has
1663 rendered.has
1771 rendered.node
1664 rendered.node
1772 rendered.attributes
1665 rendered.attributes
1773− (Unkeyed (addChildren unkeyed rendered.children))
1666+ (Unkeyed (unkeyed ++ rendered.children))
1777−addChildren existing nearbyChildren =
1778− case nearbyChildren of
1779− NoNearbyChildren ->
1782− ChildrenBehind behind ->
1785− ChildrenInFront inFront ->
1786− existing ++ inFront
1788− ChildrenBehindAndInFront behind inFront ->
1789− behind ++ existing ++ inFront
1792−addKeyedChildren key existing nearbyChildren =
1793− case nearbyChildren of
1794− NoNearbyChildren ->
1797− ChildrenBehind behind ->
1798− List.map (\x -> ( key, x )) behind ++ existing
1800− ChildrenInFront inFront ->
1801− existing ++ List.map (\x -> ( key, x )) inFront
1803− ChildrenBehindAndInFront behind inFront ->
1804− List.map (\x -> ( key, x )) behind
1806− ++ List.map (\x -> ( key, x )) inFront
@@ -1817,20 +1678,8 @@ defaultOptions =
1820−staticRoot : OptionRecord -> VirtualDom.Node msg
1681+staticRoot =
1824− -- wrap the style node in a div to prevent `Dark Reader` from blowin up the dom.
1825− VirtualDom.node "div"
1827− [ VirtualDom.node "style" [] [ VirtualDom.text Internal.Style.rules ] ]
1682+ VirtualDom.node "style" [] [ VirtualDom.text Internal.Style.rules ]
1829− NoStaticStyleSheet ->
1833− VirtualDom.node "elm-ui-static-rules" [ VirtualDom.property "rules" (Encode.string Internal.Style.rules) ] []
1836addWhen ifThis x to =
1685addWhen ifThis x to =
@@ -1948,7 +1797,7 @@ type Spacing
1950type Padding
1799type Padding
1951− = Padding String Float Float Float Float
1800+ = Padding String Int Int Int Int
1954extractSpacingAndPadding : List (Attribute aligned msg) -> ( Maybe Padding, Maybe Spacing )
1803extractSpacingAndPadding : List (Attribute aligned msg) -> ( Maybe Padding, Maybe Spacing )
@@ -2044,44 +1893,35 @@ getHeight attrs =
2047−textElementClasses : String
2048−textElementClasses =
2053− ++ classes.widthContent
2055− ++ classes.heightContent
2058textElement : String -> VirtualDom.Node msg
1896textElement : String -> VirtualDom.Node msg
2059textElement str =
1897textElement str =
2060 Html.div
1898 Html.div
2061 [ Html.Attributes.class
1899 [ Html.Attributes.class
2062− textElementClasses
1900+ (String.join " "
1903+ , classes.widthContent
1904+ , classes.heightContent
2064 [ Html.text str ]
1908 [ Html.text str ]
2067−textElementFillClasses : String
2068−textElementFillClasses =
2073− ++ classes.widthFill
2075− ++ classes.heightFill
2078textElementFill : String -> VirtualDom.Node msg
1911textElementFill : String -> VirtualDom.Node msg
2079textElementFill str =
1912textElementFill str =
2080− Html.div
1913+ VirtualDom.node "div"
2081− [ Html.Attributes.class
1914+ [ VirtualDom.property "className"
2082− textElementFillClasses
1915+ (Json.string <|
1919+ , classes.widthFill
1920+ , classes.heightFill
2084− [ Html.text str ]
1924+ [ VirtualDom.text str ]
2087type Children x
1927type Children x
@@ -2089,6 +1929,10 @@ type Children x
2089 | Keyed (List ( String, x ))
1929 | Keyed (List ( String, x ))
1933+-- toHtml : OptionRecord -> Element msg -> VirtualDom.Node msg
2092toHtml mode el =
1936toHtml mode el =
2093 case el of
1937 case el of
2094 Unstyled html ->
1938 Unstyled html ->
@@ -2124,7 +1968,8 @@ renderRoot optionList attributes child =
2126type RenderMode
1970type RenderMode
2127− = Layout
1972+ | Layout
2128 | NoStaticStyleSheet
1973 | NoStaticStyleSheet
2129 | WithVirtualCss
1974 | WithVirtualCss
@@ -2173,8 +2018,8 @@ rootStyle =
2173 , SansSerif
2018 , SansSerif
2176− [ StyleClass Flag.bgColor (Colored ("bg-" ++ formatColorClass (Rgba 1 1 1 0)) "background-color" (Rgba 1 1 1 0))
2021+ [ StyleClass Flag.bgColor (Colored ("bg-color-" ++ formatColorClass (Rgba 1 1 1 0)) "background-color" (Rgba 1 1 1 0))
2177− , StyleClass Flag.fontColor (Colored ("fc-" ++ formatColorClass (Rgba 0 0 0 1)) "color" (Rgba 0 0 0 1))
2022+ , StyleClass Flag.fontColor (Colored ("font-color-" ++ formatColorClass (Rgba 0 0 0 1)) "color" (Rgba 0 0 0 1))
2178 , StyleClass Flag.fontSize (FontSize 20)
2023 , StyleClass Flag.fontSize (FontSize 20)
2179 , StyleClass Flag.fontFamily <|
2024 , StyleClass Flag.fontFamily <|
2180 FontFamily (List.foldl renderFontClassName "font-" families)
2025 FontFamily (List.foldl renderFontClassName "font-" families)
@@ -2206,49 +2051,14 @@ renderFontClassName font current =
2206 |> String.toLower
2051 |> String.toLower
2207 |> String.words
2052 |> String.words
2208 |> String.join "-"
2053 |> String.join "-"
2210− FontWith { name } ->
2218renderFocusStyle :
2057renderFocusStyle :
2219 FocusStyle
2058 FocusStyle
2220− -> List Style
2059+ -> Style
2221renderFocusStyle focus =
2060renderFocusStyle focus =
2222− [ Style (Internal.Style.dot classes.focusedWithin ++ ":focus-within")
2223− (List.filterMap identity
2224− [ Maybe.map (\color -> Property "border-color" (formatColor color)) focus.borderColor
2225− , Maybe.map (\color -> Property "background-color" (formatColor color)) focus.backgroundColor
2228− Property "box-shadow"
2230− { color = shadow.color
2233− |> Tuple.mapFirst toFloat
2234− |> Tuple.mapSecond toFloat
2237− toFloat shadow.blur
2239− toFloat shadow.size
2244− , Just <| Property "outline" "none"
2248− ((Internal.Style.dot classes.any ++ ":focus .focusable, ")
2249− ++ (Internal.Style.dot classes.any ++ ".focusable:focus, ")
2061+ Style (Internal.Style.dot classes.any ++ ":focus .focusable, " ++ Internal.Style.dot classes.any ++ ".focusable:focus")
2250− ++ (".ui-slide-bar:focus + " ++ Internal.Style.dot classes.any ++ " .focusable-thumb")
2252 (List.filterMap identity
2062 (List.filterMap identity
2253 [ Maybe.map (\color -> Property "border-color" (formatColor color)) focus.borderColor
2063 [ Maybe.map (\color -> Property "border-color" (formatColor color)) focus.borderColor
2254 , Maybe.map (\color -> Property "background-color" (formatColor color)) focus.backgroundColor
2064 , Maybe.map (\color -> Property "background-color" (formatColor color)) focus.backgroundColor
@@ -2271,7 +2081,6 @@ renderFocusStyle focus =
2271 , Just <| Property "outline" "none"
2081 , Just <| Property "outline" "none"
2277focusDefaultStyle : { backgroundColor : Maybe Color, borderColor : Maybe Color, shadow : Maybe Shadow }
2086focusDefaultStyle : { backgroundColor : Maybe Color, borderColor : Maybe Color, shadow : Maybe Shadow }
@@ -2283,7 +2092,7 @@ focusDefaultStyle =
2283 { color =
2092 { color =
2284 Rgba (155 / 255) (203 / 255) 1 1
2093 Rgba (155 / 255) (203 / 255) 1 1
2285 , offset = ( 0, 0 )
2094 , offset = ( 0, 0 )
2286− , blur = 0
2095+ , blur = 3
2287 , size = 3
2096 , size = 3
@@ -2351,734 +2160,519 @@ optionsToRecord options =
2354−toStyleSheet : OptionRecord -> List Style -> VirtualDom.Node msg
2163+renderFont : List Font -> String
2355−toStyleSheet options styleSheet =
2164+renderFont families =
2356− case options.mode of
2358− -- wrap the style node in a div to prevent `Dark Reader` from blowin up the dom.
2359− VirtualDom.node "div"
2361− [ VirtualDom.node "style"
2363− [ VirtualDom.text (toStyleSheetString options styleSheet) ]
2366− NoStaticStyleSheet ->
2367− -- wrap the style node in a div to prevent `Dark Reader` from blowin up the dom.
2368− VirtualDom.node "div"
2370− [ VirtualDom.node "style"
2372− [ VirtualDom.text (toStyleSheetString options styleSheet) ]
2376− VirtualDom.node "elm-ui-rules"
2377− [ VirtualDom.property "rules"
2378− (encodeStyles options styleSheet)
2383−renderTopLevelValues rules =
2385− withImport font =
2166+ fontName font =
2386 case font of
2167 case font of
2387− ImportFont _ url ->
2168+ Serif ->
2388− Just ("@import url('" ++ url ++ "');")
2169+ "serif"
2390− -- FontWith with ->
2391− -- case with.url of
2393− -- Just ("@import url('" ++ x ++ "');")
2400− List.map Tuple.first rules
2402− fontImports ( name, typefaces ) =
2405− String.join "\n" (List.filterMap withImport typefaces)
2409− fontAdjustments ( name, typefaces ) =
2410− case typefaceAdjustment typefaces of
2413− (List.map (renderNullAdjustmentRule name) allNames)
2415− Just adjustment ->
2171+ SansSerif ->
2416− String.join ""
2172+ "sans-serif"
2417− (List.map (renderFontAdjustmentRule name adjustment) allNames)
2419− String.join "\n" (List.map fontImports rules)
2420− ++ String.join "\n" (List.map fontAdjustments rules)
2423−renderNullAdjustmentRule fontToAdjust otherFontName =
2177+ Typeface name ->
2424− let
2178+ "\"" ++ name ++ "\""
2426− if fontToAdjust == otherFontName then
2429− else
2180+ ImportFont name url ->
2430− otherFontName ++ " ." ++ fontToAdjust
2181+ "\"" ++ name ++ "\""
2184+ |> List.map fontName
2432− String.join " "
2185+ |> String.join ", "
2437− ++ classes.sizeByCapital
2442− ++ classes.sizeByCapital
2444− [ ( "line-height", "1" )
2450− ++ classes.sizeByCapital
2452− ++ Internal.Style.classes.text
2456− ++ classes.sizeByCapital
2458− ++ Internal.Style.classes.text
2460− [ ( "vertical-align", "0" )
2461− , ( "line-height", "1" )
2466−fontRule name modifier ( parentAdj, textAdjustment ) =
2188+toStyleSheet : OptionRecord -> List Style -> VirtualDom.Node msg
2467− [ bracket
2189+toStyleSheet options styleSheet =
2468− ("."
2190+ VirtualDom.node "style" [] [ VirtualDom.text (toStyleSheetString options styleSheet) ]
2485− ++ Internal.Style.classes.text
2491− ++ Internal.Style.classes.text
2497−renderFontAdjustmentRule fontToAdjust ( full, capital ) otherFontName =
2193+toStyleSheetString : OptionRecord -> List Style -> String
2194+toStyleSheetString options stylesheet =
2499− name =
2196+ renderTopLevels rule =
2500− if fontToAdjust == otherFontName then
2197+ case rule of
2501− fontToAdjust
2198+ FontFamily name typefaces ->
2503− else
2200+ getImports font =
2504− otherFontName ++ " ." ++ fontToAdjust
2201+ case font of
2505− in
2202+ ImportFont _ url ->
2506− String.join " "
2203+ Just ("@import url('" ++ url ++ "');")
2507− (fontRule name classes.sizeByCapital capital ++ fontRule name classes.fullSize full)
2510−bracket selector rules =
2205+ _ ->
2512− renderPair ( name, val ) =
2513− name ++ ": " ++ val ++ ";"
2515− selector ++ " {" ++ String.join "" (List.map renderPair rules) ++ "}"
2208+ typefaces
2209+ |> List.filterMap getImports
2210+ |> String.join "\n"
2518−fontAdjustmentRules converted =
2216+ renderProps force (Property key val) existing =
2519− ( [ ( "display", "block" )
2217+ if force then
2520− ]
2218+ existing ++ "\n " ++ key ++ ": " ++ val ++ " !important;"
2521− , [ ( "display", "inline-block" )
2522− , ( "line-height", String.fromFloat converted.height )
2523− , ( "vertical-align", String.fromFloat converted.vertical ++ "em" )
2524− , ( "font-size", String.fromFloat converted.size ++ "em" )
2221+ existing ++ "\n " ++ key ++ ": " ++ val ++ ";"
2529−typefaceAdjustment typefaces =
2223+ renderStyle maybePseudo selector props =
2532− case found of
2224+ case maybePseudo of
2533 Nothing ->
2225 Nothing ->
2534− case face of
2226+ selector ++ "{" ++ List.foldl (renderProps False) "" props ++ "\n}"
2536− case with.adjustment of
2542− ( fontAdjustmentRules
2543− (.full (convertAdjustment adjustment))
2544− , fontAdjustmentRules
2545− (.capital (convertAdjustment adjustment))
2570− "\"" ++ name ++ "\""
2572− ImportFont name url ->
2228+ Just pseudo ->
2573− "\"" ++ name ++ "\""
2229+ case pseudo of
2575− FontWith { name } ->
2231+ case options.hover of
2576− "\"" ++ name ++ "\""
2232+ NoHover ->
2579−topLevelValue rule =
2581− FontFamily name typefaces ->
2582− Just ( name, typefaces )
2588−renderProps force (Property key val) existing =
2590− existing ++ "\n " ++ key ++ ": " ++ val ++ " !important;"
2593− existing ++ "\n " ++ key ++ ": " ++ val ++ ";"
2596−encodeStyles options stylesheet =
2602− renderStyleRule options style Nothing
2604− ( getStyleName style, Encode.list Encode.string styled )
2609−toStyleSheetString : OptionRecord -> List Style -> String
2610−toStyleSheetString options stylesheet =
2612− combine style rendered =
2613− { rules = rendered.rules ++ renderStyleRule options style Nothing
2615− case topLevelValue style of
2619− Just topLevel ->
2235+ ForceHover ->
2620− topLevel :: rendered.topLevel
2236+ selector ++ "-hv {" ++ List.foldl (renderProps True) "" props ++ "\n}"
2623− case List.foldl combine { topLevel = [], rules = [] } stylesheet of
2624− { topLevel, rules } ->
2625− renderTopLevelValues topLevel ++ String.concat rules
2239+ selector ++ "-hv:hover {" ++ List.foldl (renderProps False) "" props ++ "\n}"
2628−renderStyle : OptionRecord -> Maybe PseudoClass -> String -> List Property -> List String
2241+ Focus ->
2629−renderStyle options maybePseudo selector props =
2242+ let
2630− case maybePseudo of
2243+ renderedProps =
2632− [ selector ++ "{" ++ List.foldl (renderProps False) "" props ++ "\n}" ]
2244+ List.foldl (renderProps False) "" props
2255+ ++ "-fs:not(.focus) {"
2265+ , ".focusable-parent:focus ~ "
2634− Just pseudo ->
2275+ Active ->
2635− case pseudo of
2276+ selector ++ "-act:active {" ++ List.foldl (renderProps False) "" props ++ "\n}"
2637− case options.hover of
2641− ForceHover ->
2278+ renderStyleRule rule maybePseudo =
2642− [ selector ++ "-hv {" ++ List.foldl (renderProps True) "" props ++ "\n}" ]
2279+ case rule of
2280+ Style selector props ->
2281+ renderStyle maybePseudo selector props
2644− AllowHover ->
2283+ Shadows name prop ->
2645− [ selector ++ "-hv:hover {" ++ List.foldl (renderProps False) "" props ++ "\n}" ]
2284+ renderStyle
2287+ [ Property "box-shadow" prop
2647− Focus ->
2290+ Transparency name transparency ->
2649− renderedProps =
2292+ opacity =
2650− List.foldl (renderProps False) "" props
2293+ (1 - transparency)
2652− [ selector ++ "-fs:focus {" ++ renderedProps ++ "\n}"
2297+ renderStyle
2653− , ("." ++ classes.any ++ ":focus " ++ selector ++ "-fs {")
2298+ maybePseudo
2656− , (selector ++ "-fs:focus-within {")
2659− , (".ui-slide-bar:focus + " ++ Internal.Style.dot classes.any ++ " .focusable-thumb" ++ selector ++ "-fs {")
2665− [ selector ++ "-act:active {" ++ List.foldl (renderProps False) "" props ++ "\n}" ]
2668−renderStyleRule : OptionRecord -> Style -> Maybe PseudoClass -> List String
2669−renderStyleRule options rule maybePseudo =
2671− Style selector props ->
2672− renderStyle options maybePseudo selector props
2674− Shadows name prop ->
2675− renderStyle options
2677− ("." ++ name)
2299+ ("." ++ name)
2678− [ Property "box-shadow" prop
2681− Transparency name transparency ->
2688− renderStyle options
2691− [ Property "opacity" (String.fromFloat opacity)
2300+ [ Property "opacity" (String.fromFloat opacity)
2694− FontSize i ->
2303+ FontSize i ->
2695− renderStyle options
2304+ renderStyle
2696− maybePseudo
2305+ maybePseudo
2697− (".font-size-" ++ String.fromInt i)
2306+ (".font-size-" ++ String.fromInt i)
2698− [ Property "font-size" (String.fromInt i ++ "px")
2307+ [ Property "font-size" (String.fromInt i ++ "px")
2701− FontFamily name typefaces ->
2310+ FontFamily name typefaces ->
2702− let
2311+ renderStyle
2703− features =
2312+ maybePseudo
2704− typefaces
2313+ ("." ++ name)
2705− |> List.filterMap renderVariants
2706− |> String.join ", "
2709− [ Property "font-family"
2314+ [ Property "font-family" (renderFont typefaces)
2711− |> List.map fontName
2712− |> String.join ", "
2714− , Property "font-feature-settings" features
2715− , Property "font-variant"
2716− (if List.any hasSmallCaps typefaces then
2719− else
2317+ Single class prop val ->
2724− renderStyle options
2318+ renderStyle
2725− maybePseudo
2319+ maybePseudo
2726− ("." ++ name)
2320+ ("." ++ class)
2727− families
2321+ [ Property prop val
2729− Single class prop val ->
2324+ Colored class prop color ->
2730− renderStyle options
2325+ renderStyle
2731− maybePseudo
2326+ maybePseudo
2732− ("." ++ class)
2327+ ("." ++ class)
2733− [ Property prop val
2328+ [ Property prop (formatColor color)
2736− Colored class prop color ->
2331+ SpacingStyle cls x y ->
2737− renderStyle options
2332+ let
2738− maybePseudo
2333+ class =
2739− ("." ++ class)
2334+ "." ++ cls
2740− [ Property prop (formatColor color)
2743− SpacingStyle cls x y ->
2336+ xPx =
2744− let
2337+ String.fromInt x ++ "px"
2749− String.fromFloat (toFloat x / 2) ++ "px"
2340+ String.fromInt y ++ "px"
2752− String.fromFloat (toFloat y / 2) ++ "px"
2343+ "." ++ Internal.Style.classes.row
2754− xPx =
2345+ wrappedRow =
2755− String.fromInt x ++ "px"
2346+ "." ++ Internal.Style.classes.wrapped ++ row
2757− yPx =
2348+ column =
2758− String.fromInt y ++ "px"
2349+ "." ++ Internal.Style.classes.column
2761− "." ++ Internal.Style.classes.row
2352+ "." ++ Internal.Style.classes.page
2763− wrappedRow =
2354+ paragraph =
2764− "." ++ Internal.Style.classes.wrapped ++ row
2355+ "." ++ Internal.Style.classes.paragraph
2766− column =
2357+ left =
2767− "." ++ Internal.Style.classes.column
2358+ "." ++ Internal.Style.classes.alignLeft
2769− page =
2360+ right =
2770− "." ++ Internal.Style.classes.page
2361+ "." ++ Internal.Style.classes.alignRight
2772− paragraph =
2363+ any =
2773− "." ++ Internal.Style.classes.paragraph
2364+ "." ++ Internal.Style.classes.any
2775− left =
2366+ single =
2776− "." ++ Internal.Style.classes.alignLeft
2367+ "." ++ Internal.Style.classes.single
2370+ [ renderStyle maybePseudo (class ++ row ++ " > " ++ any) [ Property "margin-right" xPx ]
2778− right =
2372+ -- margins don't apply to last element of normal, unwrapped rows
2779− "." ++ Internal.Style.classes.alignRight
2373+ , renderStyle maybePseudo (class ++ row ++ " > " ++ any ++ ":last-child") [ Property "margin" "0" ]
2781− any =
2375+ -- For wrapped rows, margins always apply because we handle "canceling out" the other margins manually in the element.
2782− "." ++ Internal.Style.classes.any
2376+ , renderStyle maybePseudo
2377+ (class ++ wrappedRow ++ " > " ++ any)
2378+ [ Property "margin" ("0 " ++ xPx ++ " " ++ yPx ++ " 0")
2380+ , renderStyle maybePseudo
2381+ (class ++ wrappedRow ++ " > " ++ any ++ ":last-child")
2382+ [ Property "margin-right" "0"
2784− single =
2385+ -- columns
2785− "." ++ Internal.Style.classes.single
2788− [ renderStyle options maybePseudo (class ++ row ++ " > " ++ any ++ " + " ++ any) [ Property "margin-left" xPx ]
2386+ , renderStyle maybePseudo (class ++ column ++ " > " ++ any ++ " + " ++ any) [ Property "margin-top" yPx ]
2789−
2387+ , renderStyle maybePseudo (class ++ page ++ " > " ++ any ++ " + " ++ any) [ Property "margin-top" yPx ]
2790− -- margins don't apply to last element of normal, unwrapped rows
2791− -- , renderStyle options maybePseudo (class ++ row ++ " > " ++ any ++ ":first-child") [ Property "margin" "0" ]
2388+ , renderStyle maybePseudo (class ++ page ++ " > " ++ left) [ Property "margin-right" xPx ]
2792− -- For wrapped rows, margins always apply because we handle "canceling out" the other margins manually in the element.
2389+ , renderStyle maybePseudo (class ++ page ++ " > " ++ right) [ Property "margin-left" xPx ]
2793− , renderStyle options
2390+ , renderStyle
2794− maybePseudo
2391+ maybePseudo
2795− (class ++ wrappedRow ++ " > " ++ any)
2392+ (class ++ paragraph)
2796− [ Property "margin" (halfY ++ " " ++ halfX)
2393+ [ Property "line-height" ("calc(1em + " ++ String.fromInt y ++ "px)")
2397+ ("textarea" ++ class)
2398+ [ Property "line-height" ("calc(1em + " ++ String.fromInt y ++ "px)")
2799− -- , renderStyle options maybePseudo
2401+ -- , renderStyle
2800− -- (class ++ wrappedRow ++ " > " ++ any ++ ":last-child")
2402+ -- maybePseudo
2403+ -- (class ++ paragraph ++ " > " ++ any)
2801− -- [ Property "margin-right" "0"
2404+ -- [ Property "margin-right" xPx
2802− -- ]
2405+ -- , Property "margin-bottom" yPx
2803− -- columns
2406+ -- ]
2804− , renderStyle options maybePseudo (class ++ column ++ " > " ++ any ++ " + " ++ any) [ Property "margin-top" yPx ]
2407+ , renderStyle
2805− , renderStyle options maybePseudo (class ++ page ++ " > " ++ any ++ " + " ++ any) [ Property "margin-top" yPx ]
2408+ maybePseudo
2409+ (class ++ paragraph ++ " > " ++ left)
2410+ [ Property "margin-right" xPx
2414+ (class ++ paragraph ++ " > " ++ right)
2806− , renderStyle options maybePseudo (class ++ page ++ " > " ++ left) [ Property "margin-right" xPx ]
2415+ [ Property "margin-left" xPx
2807− , renderStyle options maybePseudo (class ++ page ++ " > " ++ right) [ Property "margin-left" xPx ]
2416+ ]
2808− , renderStyle options
2417+ , renderStyle
2809− maybePseudo
2418+ maybePseudo
2810− (class ++ paragraph)
2419+ (class ++ paragraph ++ "::after")
2420+ [ Property "content" "''"
2421+ , Property "display" "block"
2422+ , Property "height" "0"
2423+ , Property "width" "0"
2811− [ Property "line-height" ("calc(1em + " ++ String.fromInt y ++ "px)")
2424+ , Property "margin-top" (String.fromInt (-1 * (y // 2)) ++ "px")
2813− , renderStyle options
2426+ , renderStyle
2814− maybePseudo
2427+ maybePseudo
2815− ("textarea" ++ any ++ class)
2428+ (class ++ paragraph ++ "::before")
2816− [ Property "line-height" ("calc(1em + " ++ String.fromInt y ++ "px)")
2429+ [ Property "content" "''"
2430+ , Property "display" "block"
2431+ , Property "height" "0"
2432+ , Property "width" "0"
2817− , Property "height" ("calc(100% + " ++ String.fromInt y ++ "px)")
2433+ , Property "margin-bottom" (String.fromInt (-1 * (y // 2)) ++ "px")
2820− -- , renderStyle options
2437+ PaddingStyle cls top right bottom left ->
2821− -- maybePseudo
2438+ let
2822− -- (class ++ paragraph ++ " > " ++ any)
2823− -- [ Property "margin-right" xPx
2824− -- , Property "margin-bottom" yPx
2826− , renderStyle options
2828− (class ++ paragraph ++ " > " ++ left)
2439+ class =
2829− [ Property "margin-right" xPx
2440+ "."
2831− , renderStyle options
2442+ in
2833− (class ++ paragraph ++ " > " ++ right)
2834− [ Property "margin-left" xPx
2836− , renderStyle options
2443+ renderStyle
2837− maybePseudo
2444+ maybePseudo
2838− (class ++ paragraph ++ "::after")
2445+ class
2839− [ Property "content" "''"
2446+ [ Property "padding"
2840− , Property "display" "block"
2841− , Property "height" "0"
2842− , Property "width" "0"
2843− , Property "margin-top" (String.fromInt (-1 * (y // 2)) ++ "px")
2447+ (String.fromInt top
2845− , renderStyle options
2449+ ++ String.fromInt right
2846− maybePseudo
2450+ ++ "px "
2847− (class ++ paragraph ++ "::before")
2451+ ++ String.fromInt bottom
2848− [ Property "content" "''"
2452+ ++ "px "
2849− , Property "display" "block"
2850− , Property "height" "0"
2851− , Property "width" "0"
2852− , Property "margin-bottom" (String.fromInt (-1 * (y // 2)) ++ "px")
2453+ ++ String.fromInt left
2856− PaddingStyle cls top right bottom left ->
2458+ BorderWidth cls top right bottom left ->
2858− class =
2460+ class =
2862− renderStyle options
2464+ renderStyle
2863− maybePseudo
2465+ maybePseudo
2865− [ Property "padding"
2467+ [ Property "border-width"
2866− (String.fromFloat top
2468+ (String.fromInt top
2867− ++ "px "
2469+ ++ "px "
2868− ++ String.fromFloat right
2470+ ++ String.fromInt right
2869− ++ "px "
2471+ ++ "px "
2870− ++ String.fromFloat bottom
2472+ ++ String.fromInt bottom
2871− ++ "px "
2473+ ++ "px "
2872− ++ String.fromFloat left
2474+ ++ String.fromInt left
2873− ++ "px"
2475+ ++ "px"
2877− BorderWidth cls top right bottom left ->
2479+ GridTemplateStyle template ->
2879− class =
2481+ class =
2880− "."
2482+ ".grid-rows-"
2881− ++ cls
2483+ ++ String.join "-" (List.map lengthClassName template.rows)
2485+ ++ String.join "-" (List.map lengthClassName template.columns)
2487+ ++ lengthClassName (Tuple.first template.spacing)
2489+ ++ lengthClassName (Tuple.second template.spacing)
2492+ toGridLength (Tuple.second template.spacing)
2495+ toGridLength (Tuple.first template.spacing)
2498+ toGridLengthHelper Nothing Nothing x
2500+ toGridLengthHelper minimum maximum x =
2503+ String.fromInt px ++ "px"
2506+ case ( minimum, maximum ) of
2507+ ( Nothing, Nothing ) ->
2510+ ( Just minSize, Nothing ) ->
2511+ "minmax(" ++ String.fromInt minSize ++ "px, " ++ "max-content)"
2513+ ( Nothing, Just maxSize ) ->
2514+ "minmax(max-content, " ++ String.fromInt maxSize ++ "px)"
2516+ ( Just minSize, Just maxSize ) ->
2517+ "minmax(" ++ String.fromInt minSize ++ "px, " ++ String.fromInt maxSize ++ "px)"
2520+ case ( minimum, maximum ) of
2521+ ( Nothing, Nothing ) ->
2522+ String.fromInt i ++ "fr"
2524+ ( Just minSize, Nothing ) ->
2525+ "minmax(" ++ String.fromInt minSize ++ "px, " ++ String.fromInt i ++ "fr" ++ "fr)"
2527+ ( Nothing, Just maxSize ) ->
2528+ "minmax(max-content, " ++ String.fromInt maxSize ++ "px)"
2530+ ( Just minSize, Just maxSize ) ->
2531+ "minmax(" ++ String.fromInt minSize ++ "px, " ++ String.fromInt maxSize ++ "px)"
2534+ toGridLengthHelper (Just m) maximum len
2537+ toGridLengthHelper minimum (Just m) len
2541+ |> List.map toGridLength
2542+ |> String.join ySpacing
2543+ |> (\x -> "-ms-grid-columns: " ++ x ++ ";")
2547+ |> List.map toGridLength
2548+ |> String.join ySpacing
2549+ |> (\x -> "-ms-grid-rows: " ++ x ++ ";")
2552+ class ++ "{" ++ msColumns ++ msRows ++ "}"
2556+ |> List.map toGridLength
2558+ |> (\x -> "grid-template-columns: " ++ x ++ ";")
2562+ |> List.map toGridLength
2564+ |> (\x -> "grid-template-rows: " ++ x ++ ";")
2567+ "grid-column-gap:" ++ toGridLength (Tuple.first template.spacing) ++ ";"
2570+ "grid-row-gap:" ++ toGridLength (Tuple.second template.spacing) ++ ";"
2573+ class ++ "{" ++ columns ++ rows ++ gapX ++ gapY ++ "}"
2576+ "@supports (display:grid) {" ++ modernGrid ++ "}"
2883− renderStyle options
2578+ base ++ supports
2886− [ Property "border-width"
2887− (String.fromInt top
2889− ++ String.fromInt right
2891− ++ String.fromInt bottom
2893− ++ String.fromInt left
2898− GridTemplateStyle template ->
2580+ GridPosition position ->
2900− class =
2582+ class =
2901− ".grid-rows-"
2583+ ".grid-pos-"
2902− ++ String.join "-" (List.map lengthClassName template.rows)
2584+ ++ String.fromInt position.row
2586+ ++ String.fromInt position.col
2903− ++ "-cols-"
2587+ ++ "-"
2904− ++ String.join "-" (List.map lengthClassName template.columns)
2588+ ++ String.fromInt position.width
2905− ++ "-space-x-"
2589+ ++ "-"
2906− ++ lengthClassName (Tuple.first template.spacing)
2590+ ++ String.fromInt position.height
2907− ++ "-space-y-"
2591+
2908− ++ lengthClassName (Tuple.second template.spacing)
2592+ msPosition =
2909−
2593+ String.join " "
2910− ySpacing =
2594+ [ "-ms-grid-row: "
2911− toGridLength (Tuple.second template.spacing)
2595+ ++ String.fromInt position.row
2913− xSpacing =
2597+ , "-ms-grid-row-span: "
2914− toGridLength (Tuple.first template.spacing)
2598+ ++ String.fromInt position.height
2916− toGridLength x =
2600+ , "-ms-grid-column: "
2917− toGridLengthHelper Nothing Nothing x
2601+ ++ String.fromInt position.col
2919− toGridLengthHelper minimum maximum x =
2603+ , "-ms-grid-column-span: "
2920− case x of
2604+ ++ String.fromInt position.width
2921− Px px ->
2605+ ++ ";"
2609+ class ++ "{" ++ msPosition ++ "}"
2922− String.fromInt px ++ "px"
2614+ ++ String.fromInt position.row
2924− Content ->
2616+ ++ String.fromInt (position.row + position.height)
2925− case ( minimum, maximum ) of
2617+ ++ ";"
2926− ( Nothing, Nothing ) ->
2618+ , "grid-column: "
2929− ( Just minSize, Nothing ) ->
2930− "minmax(" ++ String.fromInt minSize ++ "px, " ++ "max-content)"
2619+ ++ String.fromInt position.col
2932− ( Nothing, Just maxSize ) ->
2621+ ++ String.fromInt (position.col + position.width)
2933− "minmax(max-content, " ++ String.fromInt maxSize ++ "px)"
2622+ ++ ";"
2935− ( Just minSize, Just maxSize ) ->
2624+
2936− "minmax(" ++ String.fromInt minSize ++ "px, " ++ String.fromInt maxSize ++ "px)"
2625+ modernGrid =
2937−
2626+ class ++ "{" ++ modernPosition ++ "}"
2939− case ( minimum, maximum ) of
2628+ supports =
2940− ( Nothing, Nothing ) ->
2629+ "@supports (display:grid) {" ++ modernGrid ++ "}"
2941− String.fromInt i ++ "fr"
2630+ in
2942−
2631+ base ++ supports
2943− ( Just minSize, Nothing ) ->
2944− "minmax(" ++ String.fromInt minSize ++ "px, " ++ String.fromInt i ++ "fr" ++ "fr)"
2946− ( Nothing, Just maxSize ) ->
2947− "minmax(max-content, " ++ String.fromInt maxSize ++ "px)"
2949− ( Just minSize, Just maxSize ) ->
2950− "minmax(" ++ String.fromInt minSize ++ "px, " ++ String.fromInt maxSize ++ "px)"
2953− toGridLengthHelper (Just m) maximum len
2956− toGridLengthHelper minimum (Just m) len
2960− |> List.map toGridLength
2961− |> String.join ySpacing
2962− |> (\x -> "-ms-grid-columns: " ++ x ++ ";")
2966− |> List.map toGridLength
2967− |> String.join ySpacing
2968− |> (\x -> "-ms-grid-rows: " ++ x ++ ";")
2971− class ++ "{" ++ msColumns ++ msRows ++ "}"
2975− |> List.map toGridLength
2977− |> (\x -> "grid-template-columns: " ++ x ++ ";")
2979− rows =
2633+ PseudoSelector class styles ->
2980− template.rows
2634+ let
2981− |> List.map toGridLength
2635+ renderPseudoRule style =
2636+ renderStyleRule style (Just class)
2638+ List.map renderPseudoRule styles
2982 |> String.join " "
2639 |> String.join " "
2983− |> (\x -> "grid-template-rows: " ++ x ++ ";")
2986− "grid-column-gap:" ++ toGridLength (Tuple.first template.spacing) ++ ";"
2989− "grid-row-gap:" ++ toGridLength (Tuple.second template.spacing) ++ ";"
2991− modernGrid =
2641+ Transform transform ->
2992− class ++ "{" ++ columns ++ rows ++ gapX ++ gapY ++ "}"
2995− "@supports (display:grid) {" ++ modernGrid ++ "}"
3001− GridPosition position ->
3004− ".grid-pos-"
2644+ transformValue transform
3005− ++ String.fromInt position.row
3007− ++ String.fromInt position.col
3009− ++ String.fromInt position.width
3011− ++ String.fromInt position.height
3016− ++ String.fromInt position.row
3018− , "-ms-grid-row-span: "
3019− ++ String.fromInt position.height
3021− , "-ms-grid-column: "
3022− ++ String.fromInt position.col
3024− , "-ms-grid-column-span: "
3025− ++ String.fromInt position.width
3030− class ++ "{" ++ msPosition ++ "}"
3035− ++ String.fromInt position.row
3037− ++ String.fromInt (position.row + position.height)
3040− ++ String.fromInt position.col
3042− ++ String.fromInt (position.col + position.width)
3047− class ++ "{" ++ modernPosition ++ "}"
3050− "@supports (display:grid) {" ++ modernGrid ++ "}"
3056− PseudoSelector class styles ->
2646+ class =
3057− let
2647+ transformClass transform
3058− renderPseudoRule style =
3059− renderStyleRule options style (Just class)
3061− List.concatMap renderPseudoRule styles
2649+ case ( class, val ) of
2650+ ( Just cls, Just v ) ->
2654+ [ Property "transform"
3063− Transform transform ->
2658+ _ ->
3066− transformValue transform
3068− class =
2661+ combine style rendered =
3069− transformClass transform
2662+ { rendered
3070− in
2663+ | rules = rendered.rules ++ renderStyleRule style Nothing
3071− case ( class, val ) of
2664+ , topLevel =
3072− ( Just cls, Just v ) ->
2665+ case renderTopLevels style of
3073− renderStyle options
2666+ Nothing ->
3074− maybePseudo
2667+ rendered.topLevel
3076− [ Property "transform"
3080− _ ->
2669+ Just topLevel ->
3081− []
2670+ rendered.topLevel ++ topLevel
2673+ case List.foldl combine { rules = "", topLevel = "" } stylesheet of
2674+ { topLevel, rules } ->
3084lengthClassName : Length -> String
2678lengthClassName : Length -> String
@@ -3118,12 +2712,12 @@ formatTextShadow shadow =
3121−textShadowClass shadow =
2715+textShadowName shadow =
3122 String.concat
2716 String.concat
3124− , floatClass (Tuple.first shadow.offset) ++ "px"
2718+ , String.fromFloat (Tuple.first shadow.offset) ++ "px"
3125− , floatClass (Tuple.second shadow.offset) ++ "px"
2719+ , String.fromFloat (Tuple.second shadow.offset) ++ "px"
3126− , floatClass shadow.blur ++ "px"
2720+ , String.fromFloat shadow.blur ++ "px"
3127 , formatColorClass shadow.color
2721 , formatColorClass shadow.color
@@ -3144,17 +2738,17 @@ formatBoxShadow shadow =
3147−boxShadowClass shadow =
2741+boxShadowName shadow =
3148 String.concat <|
2742 String.concat <|
3149 [ if shadow.inset then
2743 [ if shadow.inset then
3150 "box-inset"
2744 "box-inset"
3154− , floatClass (Tuple.first shadow.offset) ++ "px"
2748+ , String.fromFloat (Tuple.first shadow.offset) ++ "px"
3155− , floatClass (Tuple.second shadow.offset) ++ "px"
2749+ , String.fromFloat (Tuple.second shadow.offset) ++ "px"
3156− , floatClass shadow.blur ++ "px"
2750+ , String.fromFloat shadow.blur ++ "px"
3157− , floatClass shadow.size ++ "px"
2751+ , String.fromFloat shadow.size ++ "px"
3158 , formatColorClass shadow.color
2752 , formatColorClass shadow.color
@@ -3199,17 +2793,6 @@ paddingName top right bottom left =
3199 ++ String.fromInt left
2793 ++ String.fromInt left
3202−paddingNameFloat top right bottom left =
3206− ++ floatClass right
3208− ++ floatClass bottom
3213getStyleName : Style -> String
2796getStyleName : Style -> String
3214getStyleName style =
2797getStyleName style =
3215 case style of
2798 case style of
@@ -3475,76 +3058,3 @@ onlyStyles attr =
3481−{- Font Adjustments -}
3484−convertAdjustment adjustment =
3500− ((ascender - newBaseline) / 2) + newBaseline
3503− ((ascender - descender) / 2) + descender
3506− [ adjustment.capital
3507− , adjustment.baseline
3508− , adjustment.descender
3509− , adjustment.lowercase
3513− Maybe.withDefault adjustment.capital (List.maximum lines)
3516− Maybe.withDefault adjustment.descender (List.minimum lines)
3520− |> List.filter (\x -> x /= descender)
3522− |> Maybe.withDefault adjustment.baseline
3528− 1 / (ascender - newBaseline)
3531− 1 / (ascender - descender)
3536− -- (oldMiddle - newFullMiddle) * 2
3539− adjust fullSize (ascender - descender) fullVertical
3541− adjust capitalSize (ascender - newBaseline) capitalVertical
3545−adjust size height vertical =
3546− { vertical = vertical