@@ -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,31 @@ 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
86 , reduceStyles
83 , reduceStyles
87 , reduceStylesRecursive
84 , reduceStylesRecursive
88 , removeNever
85 , 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
96 , spacingName
99− , textShadowClass
99+ , textShadowName
101 , toStyleSheet
101 , toStyleSheet
102 , transformClass
102 , transformClass
103 , unstyled
103 , unstyled
104 , unwrapDecorations
104 , unwrapDecorations
@@ -112,7 +111,7 @@ import Html.Attributes
112import Html.Keyed
111import Html.Keyed
113import Internal.Flag as Flag exposing (Flag)
112import Internal.Flag as Flag exposing (Flag)
114import Internal.Style exposing (classes, dot)
113import Internal.Style exposing (classes, dot)
115−import Json.Encode as Encode
114+import Json.Encode as Json
116import Set exposing (Set)
115import Set exposing (Set)
117import VirtualDom
116import VirtualDom
@@ -174,7 +173,7 @@ type Style
174 | Colored String String Color
173 | Colored String String Color
175 | SpacingStyle String Int Int
174 | SpacingStyle String Int Int
176 | BorderWidth String Int Int Int Int
175 | BorderWidth String Int Int Int Int
177− | PaddingStyle String Float Float Float Float
176+ | PaddingStyle String Int Int Int Int
178 | GridTemplateStyle
177 | GridTemplateStyle
179 { spacing : ( Length, Length )
178 { spacing : ( Length, Length )
180 , columns : List Length
179 , columns : List Length
@@ -222,71 +221,11 @@ type Font
222 | ImportFont String String
221 | ImportFont String String
223 | FontWith
222 | FontWith
224 { name : String
223 { name : String
225− , adjustment : Maybe Adjustment
224+ , url : Maybe String
226− , variants : List Variant
225+ , adjustment : Adjustment
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
229type Property
291 = Property String String
230 = Property String String
@@ -372,13 +311,6 @@ type NodeName
372 | Embedded String String
311 | 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 +319,7 @@ type alias Gathered msg =
387 { node : NodeName
319 { node : NodeName
388 , attributes : List (VirtualDom.Attribute msg)
320 , attributes : List (VirtualDom.Attribute msg)
389 , styles : List Style
321 , styles : List Style
390− , children : NearbyChildren msg
322+ , children : List (VirtualDom.Node msg)
391 , has : Flag.Field
323 , has : Flag.Field
@@ -455,10 +387,7 @@ finalizeNode has node attributes children embedMode parentContext =
455 Embedded nodeName internal ->
387 Embedded nodeName internal ->
456 VirtualDom.node nodeName
388 VirtualDom.node nodeName
457 attributes
389 attributes
458− [ createNode internal
459− [ Html.Attributes.class
460− (classes.any ++ " " ++ classes.single)
390+ [ createNode internal [ Html.Attributes.class (classes.any ++ " " ++ classes.single) ]
464 case parentContext of
393 case parentContext of
@@ -535,45 +464,49 @@ finalizeNode has node attributes children embedMode parentContext =
537embedWith static opts styles children =
466embedWith 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
467 if static then
548− staticRoot opts
468+ staticRoot
549− :: dynamicStyleSheet
469+ :: (styles
470+ |> List.foldl reduceStyles ( Set.empty, [ renderFocusStyle opts.focus ] )
472+ -- |> reduceStylesRecursive Set.empty [ ]) --renderFocusStyle opts.focus ]
474+ |> toStyleSheet opts
550 :: children
476 :: children
553− dynamicStyleSheet
479+ (styles
480+ |> List.foldl reduceStyles ( Set.empty, [ renderFocusStyle opts.focus ] )
482+ -- |> reduceStylesRecursive Set.empty [ ]) --renderFocusStyle opts.focus ]
484+ |> toStyleSheet opts
554 :: children
486 :: children
557embedKeyed static opts styles children =
489embedKeyed 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
490 if static then
568− ( "static-stylesheet", staticRoot opts )
491+ ( "static-stylesheet", staticRoot )
569 :: ( "dynamic-stylesheet"
492 :: ( "dynamic-stylesheet"
570− , dynamicStyleSheet
493+ , styles
494+ |> List.foldl reduceStyles ( Set.empty, [ renderFocusStyle opts.focus ] )
496+ -- |> reduceStylesRecursive Set.empty [ ]) --renderFocusStyle opts.focus ]
498+ |> toStyleSheet opts
572 :: children
500 :: children
575 ( "dynamic-stylesheet"
503 ( "dynamic-stylesheet"
576− , dynamicStyleSheet
504+ , styles
505+ |> List.foldl reduceStyles ( Set.empty, [ renderFocusStyle opts.focus ] )
507+ -- |> reduceStylesRecursive Set.empty [ ]) --renderFocusStyle opts.focus ]
509+ |> toStyleSheet opts
578 :: children
511 :: children
@@ -889,16 +822,7 @@ skippable flag style =
892−gatherAttrRecursive :
825+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 =
826gatherAttrRecursive classes node has transform styles attrs children elementAttrs =
903 case elementAttrs of
827 case elementAttrs of
@@ -1032,7 +956,7 @@ gatherAttrRecursive classes node has transform styles attrs children elementAttr
1033 gatherAttrRecursive (classes ++ " " ++ newClass)
957 gatherAttrRecursive (classes ++ " " ++ newClass)
1035− (Flag.merge addToFlags (Flag.add Flag.width has))
959+ (Flag.merge addToFlags has)
1036 transform
960 transform
1037 (newStyles ++ styles)
961 (newStyles ++ styles)
@@ -1053,7 +977,7 @@ gatherAttrRecursive classes node has transform styles attrs children elementAttr
1054 "height-px-" ++ val
978 "height-px-" ++ val
1056− gatherAttrRecursive (Internal.Style.classes.heightExact ++ " " ++ name ++ " " ++ classes)
980+ gatherAttrRecursive (name ++ " " ++ classes)
1058 (Flag.add Flag.height has)
982 (Flag.add Flag.height has)
1059 transform
983 transform
@@ -1110,7 +1034,7 @@ gatherAttrRecursive classes node has transform styles attrs children elementAttr
1111 gatherAttrRecursive (classes ++ " " ++ newClass)
1035 gatherAttrRecursive (classes ++ " " ++ newClass)
1113− (Flag.merge addToFlags (Flag.add Flag.height has))
1037+ (Flag.merge addToFlags has)
1114 transform
1038 transform
1115 (newStyles ++ styles)
1039 (newStyles ++ styles)
@@ -1142,15 +1066,20 @@ gatherAttrRecursive classes node has transform styles attrs children elementAttr
1142 gatherAttrRecursive classes (addNodeName "h6" node) has transform styles attrs children remaining
1066 gatherAttrRecursive classes (addNodeName "h6" node) has transform styles attrs children remaining
1144 Paragraph ->
1068 Paragraph ->
1145− -- previously we rendered a <p> tag, though apparently this invalidates the html if it has <div>s inside.
1069+ let
1146− -- Since we can't guaranteee that there are no divs, we need another strategy.
1070+ newNode =
1147− -- While it's not documented in many places, there apparently is a paragraph aria role
1071+ case node of
1148− -- https://github.com/w3c/aria/blob/11f85f41a5b621fdbe85fc9bcdcd270e653a48ba/common/script/roleInfo.js
1072+ Generic ->
1149− -- Though we'll need to wait till it gets released in an official wai-aria spec to use it.
1073+ NodeName "p"
1150− -- If it's used at the moment, then Lighthouse complains (likely rightfully) that role paragraph is not recognized.
1074+
1151− gatherAttrRecursive
1081+ gatherAttrRecursive classes
1152− classes
1082+ newNode
1155 transform
1084 transform
@@ -1185,16 +1114,75 @@ gatherAttrRecursive classes node has transform styles attrs children elementAttr
1186 Styled styled ->
1115 Styled styled ->
1187 styles ++ styled.styles
1116 styles ++ styled.styles
1120+ [ Html.Attributes.class <|
1124+ [ Internal.Style.classes.nearby
1125+ , Internal.Style.classes.single
1126+ , Internal.Style.classes.above
1131+ [ Internal.Style.classes.nearby
1132+ , Internal.Style.classes.single
1133+ , Internal.Style.classes.below
1138+ [ Internal.Style.classes.nearby
1139+ , Internal.Style.classes.single
1140+ , Internal.Style.classes.onRight
1145+ [ Internal.Style.classes.nearby
1146+ , Internal.Style.classes.single
1147+ , Internal.Style.classes.onLeft
1152+ [ Internal.Style.classes.nearby
1153+ , Internal.Style.classes.single
1154+ , Internal.Style.classes.inFront
1159+ [ Internal.Style.classes.nearby
1160+ , Internal.Style.classes.single
1161+ , Internal.Style.classes.behind
1175+ styled.html NoStyleSheet asEl
1179+ if location == Behind then
1180+ Internal.Style.classes.hasBehind ++ " " ++ classes
1189− gatherAttrRecursive
1185+ gatherAttrRecursive newClasses node has transform newStyles attrs (nearbyElement :: children) remaining
1196− (addNearbyElement location elem children)
1199 AlignX x ->
1187 AlignX x ->
1200 if Flag.present Flag.xAlign has then
1188 if Flag.present Flag.xAlign has then
@@ -1250,106 +1238,6 @@ gatherAttrRecursive classes node has transform styles attrs children elementAttr
1250 remaining
1238 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 =
1241renderWidth w =
1354 case w of
1242 case w of
1355 Px px ->
1243 Px px ->
@@ -1436,7 +1324,7 @@ renderHeight h =
1436 "height-px-" ++ val
1324 "height-px-" ++ val
1438 ( Flag.none
1326 ( Flag.none
1439− , Internal.Style.classes.heightExact ++ " " ++ name
1327+ , name
1440 , [ Single name "height" (val ++ "px") ]
1328 , [ Single name "height" (val ++ "px") ]
@@ -1459,7 +1347,7 @@ renderHeight h =
1459 , [ Single
1347 , [ Single
1460 (Internal.Style.classes.any
1348 (Internal.Style.classes.any
1462− ++ Internal.Style.classes.column
1350+ ++ Internal.Style.classes.row
1463 ++ " > "
1351 ++ " > "
1464 ++ (Internal.Style.dot <| "height-fill-" ++ String.fromInt portion)
1352 ++ (Internal.Style.dot <| "height-fill-" ++ String.fromInt portion)
@@ -1478,9 +1366,7 @@ renderHeight h =
1480 "min-height"
1368 "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")
1369+ (String.fromInt minSize ++ "px")
1485 ( newFlag, newAttrs, newStyle ) =
1371 ( newFlag, newAttrs, newStyle ) =
1486 renderHeight len
1372 renderHeight len
@@ -1558,7 +1444,7 @@ element : LayoutContext -> NodeName -> List (Attribute aligned msg) -> Children
1558element context node attributes children =
1444element context node attributes children =
1559 attributes
1445 attributes
1560 |> List.reverse
1446 |> List.reverse
1561− |> gatherAttrRecursive (contextClasses context) node Flag.none untransformed [] [] NoNearbyChildren
1447+ |> gatherAttrRecursive (contextClasses context) node Flag.none untransformed [] [] []
1562 |> createElement context children
1448 |> createElement context children
@@ -1625,12 +1511,13 @@ createElement context children rendered =
1625 -- , existingStyles
1511 -- , existingStyles
1628− ( (if context == asEl then
1515+ (if context == asParagraph then
1629− textElementFill str
1516+ str
1632− textElement str
1519+ str
1634 :: htmls
1521 :: htmls
1635 , existingStyles
1522 , existingStyles
@@ -1690,11 +1577,8 @@ createElement context children rendered =
1693− , if context == asEl then
1694− textElementFill str
1697− textElement str
1580+ , textElement
1699 :: htmls
1583 :: htmls
1700 , existingStyles
1584 , existingStyles
@@ -1721,8 +1605,13 @@ createElement context children rendered =
1721 (finalizeNode rendered.has
1605 (finalizeNode rendered.has
1722 rendered.node
1606 rendered.node
1723 rendered.attributes
1607 rendered.attributes
1724− (Keyed
1608+ (Keyed <|
1612+ ( "nearby-elements-pls", x )
1725− (addKeyedChildren "nearby-element-pls" keyed rendered.children)
1614+ rendered.children
1727 NoStyleSheet
1616 NoStyleSheet
@@ -1736,7 +1625,13 @@ createElement context children rendered =
1736 rendered.node
1625 rendered.node
1737 rendered.attributes
1626 rendered.attributes
1631+ ( "nearby-elements-pls", x )
1739− (addKeyedChildren "nearby-element-pls" keyed rendered.children)
1633+ rendered.children
@@ -1758,7 +1653,7 @@ createElement context children rendered =
1758 rendered.has
1653 rendered.has
1759 rendered.node
1654 rendered.node
1760 rendered.attributes
1655 rendered.attributes
1761− (Unkeyed (addChildren unkeyed rendered.children))
1656+ (Unkeyed <| unkeyed ++ rendered.children)
1762 NoStyleSheet
1657 NoStyleSheet
@@ -1770,42 +1665,10 @@ createElement context children rendered =
1770 rendered.has
1665 rendered.has
1771 rendered.node
1666 rendered.node
1772 rendered.attributes
1667 rendered.attributes
1773− (Unkeyed (addChildren unkeyed rendered.children))
1668+ (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 +1680,8 @@ defaultOptions =
1820−staticRoot : OptionRecord -> VirtualDom.Node msg
1683+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 ] ]
1684+ 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 =
1687addWhen ifThis x to =
@@ -1948,7 +1799,7 @@ type Spacing
1950type Padding
1801type Padding
1951− = Padding String Float Float Float Float
1802+ = Padding String Int Int Int Int
1954extractSpacingAndPadding : List (Attribute aligned msg) -> ( Maybe Padding, Maybe Spacing )
1805extractSpacingAndPadding : List (Attribute aligned msg) -> ( Maybe Padding, Maybe Spacing )
@@ -2044,44 +1895,35 @@ getHeight attrs =
2047−textElementClasses : String
2048−textElementClasses =
2053− ++ classes.widthContent
2055− ++ classes.heightContent
2058textElement : String -> VirtualDom.Node msg
1898textElement : String -> VirtualDom.Node msg
2059textElement str =
1899textElement str =
2060 Html.div
1900 Html.div
2061 [ Html.Attributes.class
1901 [ Html.Attributes.class
2062− textElementClasses
1902+ (String.join " "
1905+ , classes.widthContent
1906+ , classes.heightContent
2064 [ Html.text str ]
1910 [ Html.text str ]
2067−textElementFillClasses : String
2068−textElementFillClasses =
2073− ++ classes.widthFill
2075− ++ classes.heightFill
2078textElementFill : String -> VirtualDom.Node msg
1913textElementFill : String -> VirtualDom.Node msg
2079textElementFill str =
1914textElementFill str =
2080− Html.div
1915+ VirtualDom.node "div"
2081− [ Html.Attributes.class
1916+ [ VirtualDom.property "className"
2082− textElementFillClasses
1917+ (Json.string <|
1921+ , classes.widthFill
1922+ , classes.heightFill
2084− [ Html.text str ]
1926+ [ VirtualDom.text str ]
2087type Children x
1929type Children x
@@ -2089,6 +1931,10 @@ type Children x
2089 | Keyed (List ( String, x ))
1931 | Keyed (List ( String, x ))
1935+-- toHtml : OptionRecord -> Element msg -> VirtualDom.Node msg
2092toHtml mode el =
1938toHtml mode el =
2093 case el of
1939 case el of
2094 Unstyled html ->
1940 Unstyled html ->
@@ -2124,7 +1970,8 @@ renderRoot optionList attributes child =
2126type RenderMode
1972type RenderMode
2127− = Layout
1974+ | Layout
2128 | NoStaticStyleSheet
1975 | NoStaticStyleSheet
2129 | WithVirtualCss
1976 | WithVirtualCss
@@ -2173,8 +2020,8 @@ rootStyle =
2173 , SansSerif
2020 , SansSerif
2176− [ StyleClass Flag.bgColor (Colored ("bg-" ++ formatColorClass (Rgba 1 1 1 0)) "background-color" (Rgba 1 1 1 0))
2023+ [ 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))
2024+ , StyleClass Flag.fontColor (Colored ("font-color-" ++ formatColorClass (Rgba 0 0 0 1)) "color" (Rgba 0 0 0 1))
2178 , StyleClass Flag.fontSize (FontSize 20)
2025 , StyleClass Flag.fontSize (FontSize 20)
2179 , StyleClass Flag.fontFamily <|
2026 , StyleClass Flag.fontFamily <|
2180 FontFamily (List.foldl renderFontClassName "font-" families)
2027 FontFamily (List.foldl renderFontClassName "font-" families)
@@ -2217,38 +2064,9 @@ renderFontClassName font current =
2218renderFocusStyle :
2065renderFocusStyle :
2219 FocusStyle
2066 FocusStyle
2220− -> List Style
2067+ -> Style
2221renderFocusStyle focus =
2068renderFocusStyle 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, ")
2069+ 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
2070 (List.filterMap identity
2253 [ Maybe.map (\color -> Property "border-color" (formatColor color)) focus.borderColor
2071 [ Maybe.map (\color -> Property "border-color" (formatColor color)) focus.borderColor
2254 , Maybe.map (\color -> Property "background-color" (formatColor color)) focus.backgroundColor
2072 , Maybe.map (\color -> Property "background-color" (formatColor color)) focus.backgroundColor
@@ -2271,7 +2089,6 @@ renderFocusStyle focus =
2271 , Just <| Property "outline" "none"
2089 , Just <| Property "outline" "none"
2277focusDefaultStyle : { backgroundColor : Maybe Color, borderColor : Maybe Color, shadow : Maybe Shadow }
2094focusDefaultStyle : { backgroundColor : Maybe Color, borderColor : Maybe Color, shadow : Maybe Shadow }
@@ -2283,7 +2100,7 @@ focusDefaultStyle =
2283 { color =
2100 { color =
2284 Rgba (155 / 255) (203 / 255) 1 1
2101 Rgba (155 / 255) (203 / 255) 1 1
2285 , offset = ( 0, 0 )
2102 , offset = ( 0, 0 )
2286− , blur = 0
2103+ , blur = 3
2287 , size = 3
2104 , size = 3
@@ -2353,31 +2170,7 @@ optionsToRecord options =
2354toStyleSheet : OptionRecord -> List Style -> VirtualDom.Node msg
2171toStyleSheet : OptionRecord -> List Style -> VirtualDom.Node msg
2355toStyleSheet options styleSheet =
2172toStyleSheet options styleSheet =
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) ]
2173+ VirtualDom.node "style" [] [ VirtualDom.text (toStyleSheetString options styleSheet) ]
2376− VirtualDom.node "elm-ui-rules"
2377− [ VirtualDom.property "rules"
2378− (encodeStyles options styleSheet)
2383renderTopLevelValues rules =
2176renderTopLevelValues rules =
@@ -2387,12 +2180,14 @@ renderTopLevelValues rules =
2387 ImportFont _ url ->
2180 ImportFont _ url ->
2388 Just ("@import url('" ++ url ++ "');")
2181 Just ("@import url('" ++ url ++ "');")
2390− -- FontWith with ->
2183+ FontWith with ->
2391− -- case with.url of
2184+ case with.url of
2392− -- Just x ->
2185+ Just x ->
2393− -- Just ("@import url('" ++ x ++ "');")
2186+ Just ("@import url('" ++ x ++ "');")
2394− -- Nothing ->
2188+ Nothing ->
2395− -- Nothing
2189+ Nothing
@@ -2463,38 +2258,7 @@ renderNullAdjustmentRule fontToAdjust otherFontName =
2466−fontRule name modifier ( parentAdj, textAdjustment ) =
2485− ++ Internal.Style.classes.text
2491− ++ Internal.Style.classes.text
2497−renderFontAdjustmentRule fontToAdjust ( full, capital ) otherFontName =
2261+renderFontAdjustmentRule fontToAdjust ( parentAdj, textAdjustment ) otherFontName =
2500 if fontToAdjust == otherFontName then
2264 if fontToAdjust == otherFontName then
@@ -2504,7 +2268,34 @@ renderFontAdjustmentRule fontToAdjust ( full, capital ) otherFontName =
2504 otherFontName ++ " ." ++ fontToAdjust
2268 otherFontName ++ " ." ++ fontToAdjust
2506 String.join " "
2270 String.join " "
2507− (fontRule name classes.sizeByCapital capital ++ fontRule name classes.fullSize full)
2275+ ++ classes.sizeByCapital
2280+ ++ classes.sizeByCapital
2287+ ++ classes.sizeByCapital
2289+ ++ Internal.Style.classes.text
2293+ ++ classes.sizeByCapital
2295+ ++ Internal.Style.classes.text
2510bracket selector rules =
2301bracket selector rules =
@@ -2517,12 +2308,17 @@ bracket selector rules =
2518fontAdjustmentRules converted =
2309fontAdjustmentRules converted =
2519 ( [ ( "display", "block" )
2310 ( [ ( "display", "block" )
2312+ -- , ( "line-height", String.fromFloat converted.height )
2313+ -- , ( "font-size", String.fromFloat (1 + converted.height + converted.vertical) ++ "em" )
2521 , [ ( "display", "inline-block" )
2315 , [ ( "display", "inline-block" )
2522 , ( "line-height", String.fromFloat converted.height )
2316 , ( "line-height", String.fromFloat converted.height )
2523 , ( "vertical-align", String.fromFloat converted.vertical ++ "em" )
2317 , ( "vertical-align", String.fromFloat converted.vertical ++ "em" )
2524 , ( "font-size", String.fromFloat converted.size ++ "em" )
2318 , ( "font-size", String.fromFloat converted.size ++ "em" )
2320+ -- , [ ( "font-size", String.fromFloat converted.size ++ "em" )
@@ -2533,17 +2329,10 @@ typefaceAdjustment typefaces =
2533 Nothing ->
2329 Nothing ->
2534 case face of
2330 case face of
2535 FontWith with ->
2331 FontWith with ->
2536− case with.adjustment of
2540− Just adjustment ->
2332+ Just
2542− ( fontAdjustmentRules
2333+ (fontAdjustmentRules
2543− (.full (convertAdjustment adjustment))
2544− , fontAdjustmentRules
2545− (.capital (convertAdjustment adjustment))
2334+ (.capital (convertAdjustment with.adjustment))
@@ -2593,492 +2382,475 @@ renderProps force (Property key val) existing =
2593 existing ++ "\n " ++ key ++ ": " ++ val ++ ";"
2382 existing ++ "\n " ++ key ++ ": " ++ val ++ ";"
2596−encodeStyles options stylesheet =
2602− renderStyleRule options style Nothing
2604− ( getStyleName style, Encode.list Encode.string styled )
2609toStyleSheetString : OptionRecord -> List Style -> String
2385toStyleSheetString : OptionRecord -> List Style -> String
2610toStyleSheetString options stylesheet =
2386toStyleSheetString options stylesheet =
2612− combine style rendered =
2388+ renderStyle maybePseudo selector props =
2613− { rules = rendered.rules ++ renderStyleRule options style Nothing
2389+ case maybePseudo of
2615− case topLevelValue style of
2616− Nothing ->
2390+ Nothing ->
2617− rendered.topLevel
2391+ selector ++ "{" ++ List.foldl (renderProps False) "" props ++ "\n}"
2619− Just topLevel ->
2393+ Just pseudo ->
2620− topLevel :: rendered.topLevel
2394+ case pseudo of
2622− in
2396+ case options.hover of
2623− case List.foldl combine { topLevel = [], rules = [] } stylesheet of
2397+ NoHover ->
2624− { topLevel, rules } ->
2398+ ""
2625− renderTopLevelValues topLevel ++ String.concat rules
2401+ selector ++ "-hv {" ++ List.foldl (renderProps True) "" props ++ "\n}"
2628−renderStyle : OptionRecord -> Maybe PseudoClass -> String -> List Property -> List String
2403+ AllowHover ->
2629−renderStyle options maybePseudo selector props =
2630− case maybePseudo of
2632− [ selector ++ "{" ++ List.foldl (renderProps False) "" props ++ "\n}" ]
2404+ selector ++ "-hv:hover {" ++ List.foldl (renderProps False) "" props ++ "\n}"
2634− Just pseudo ->
2406+ Focus ->
2635− case pseudo of
2407+ let
2636− Hover ->
2408+ renderedProps =
2637− case options.hover of
2409+ List.foldl (renderProps False) "" props
2420+ ++ "-fs:not(.focus) {"
2430+ , ".focusable-parent:focus ~ "
2441+ selector ++ "-act:active {" ++ List.foldl (renderProps False) "" props ++ "\n}"
2641− ForceHover ->
2443+ renderStyleRule rule maybePseudo =
2642− [ selector ++ "-hv {" ++ List.foldl (renderProps True) "" props ++ "\n}" ]
2444+ case rule of
2445+ Style selector props ->
2446+ renderStyle maybePseudo selector props
2644− AllowHover ->
2448+ Shadows name prop ->
2645− [ selector ++ "-hv:hover {" ++ List.foldl (renderProps False) "" props ++ "\n}" ]
2449+ renderStyle
2452+ [ Property "box-shadow" prop
2647− Focus ->
2455+ Transparency name transparency ->
2649− renderedProps =
2457+ opacity =
2650− List.foldl (renderProps False) "" props
2458+ (1 - transparency)
2652− [ selector ++ "-fs:focus {" ++ renderedProps ++ "\n}"
2462+ renderStyle
2653− , ("." ++ classes.any ++ ":focus " ++ selector ++ "-fs {")
2463+ 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)
2464+ ("." ++ name)
2678− [ Property "box-shadow" prop
2681− Transparency name transparency ->
2688− renderStyle options
2691− [ Property "opacity" (String.fromFloat opacity)
2465+ [ Property "opacity" (String.fromFloat opacity)
2695− renderStyle options
2697− (".font-size-" ++ String.fromInt i)
2698− [ Property "font-size" (String.fromInt i ++ "px")
2701− FontFamily name typefaces ->
2705− |> List.filterMap renderVariants
2706− |> String.join ", "
2709− [ Property "font-family"
2711− |> List.map fontName
2712− |> String.join ", "
2714− , Property "font-feature-settings" features
2715− , Property "font-variant"
2716− (if List.any hasSmallCaps typefaces then
2724− renderStyle options
2729− Single class prop val ->
2730− renderStyle options
2733− [ Property prop val
2736− Colored class prop color ->
2737− renderStyle options
2740− [ Property prop (formatColor color)
2743− SpacingStyle cls x y ->
2749− String.fromFloat (toFloat x / 2) ++ "px"
2752− String.fromFloat (toFloat y / 2) ++ "px"
2754− xPx =
2468+ FontSize i ->
2471+ (".font-size-" ++ String.fromInt i)
2755− String.fromInt x ++ "px"
2472+ [ Property "font-size" (String.fromInt i ++ "px")
2757− yPx =
2475+ FontFamily name typefaces ->
2478+ Property "font-family"
2480+ |> List.map fontName
2481+ |> String.join ", "
2758− String.fromInt y ++ "px"
2484+ String.join " "
2760− row =
2491+ Single class prop val ->
2761− "." ++ Internal.Style.classes.row
2492+ renderStyle
2495+ [ Property prop val
2763− wrappedRow =
2498+ Colored class prop color ->
2764− "." ++ Internal.Style.classes.wrapped ++ row
2499+ renderStyle
2502+ [ Property prop (formatColor color)
2766− column =
2505+ SpacingStyle cls x y ->
2767− "." ++ Internal.Style.classes.column
2506+ let
2769− page =
2510+ halfX =
2770− "." ++ Internal.Style.classes.page
2511+ String.fromFloat (toFloat x / 2) ++ "px"
2772− paragraph =
2513+ halfY =
2773− "." ++ Internal.Style.classes.paragraph
2514+ String.fromFloat (toFloat y / 2) ++ "px"
2776− "." ++ Internal.Style.classes.alignLeft
2517+ String.fromInt x ++ "px"
2779− "." ++ Internal.Style.classes.alignRight
2520+ String.fromInt y ++ "px"
2782− "." ++ Internal.Style.classes.any
2523+ "." ++ Internal.Style.classes.row
2784− single =
2525+ wrappedRow =
2785− "." ++ Internal.Style.classes.single
2526+ "." ++ Internal.Style.classes.wrapped ++ row
2788− [ renderStyle options maybePseudo (class ++ row ++ " > " ++ any ++ " + " ++ any) [ Property "margin-left" xPx ]
2790− -- margins don't apply to last element of normal, unwrapped rows
2791− -- , renderStyle options maybePseudo (class ++ row ++ " > " ++ any ++ ":first-child") [ Property "margin" "0" ]
2792− -- For wrapped rows, margins always apply because we handle "canceling out" the other margins manually in the element.
2793− , renderStyle options
2795− (class ++ wrappedRow ++ " > " ++ any)
2796− [ Property "margin" (halfY ++ " " ++ halfX)
2799− -- , renderStyle options maybePseudo
2528+ column =
2800− -- (class ++ wrappedRow ++ " > " ++ any ++ ":last-child")
2529+ "." ++ Internal.Style.classes.column
2801− -- [ Property "margin-right" "0"
2804− , renderStyle options maybePseudo (class ++ column ++ " > " ++ any ++ " + " ++ any) [ Property "margin-top" yPx ]
2805− , renderStyle options maybePseudo (class ++ page ++ " > " ++ any ++ " + " ++ any) [ Property "margin-top" yPx ]
2806− , renderStyle options maybePseudo (class ++ page ++ " > " ++ left) [ Property "margin-right" xPx ]
2807− , renderStyle options maybePseudo (class ++ page ++ " > " ++ right) [ Property "margin-left" xPx ]
2808− , renderStyle options
2810− (class ++ paragraph)
2811− [ Property "line-height" ("calc(1em + " ++ String.fromInt y ++ "px)")
2813− , renderStyle options
2815− ("textarea" ++ any ++ class)
2816− [ Property "line-height" ("calc(1em + " ++ String.fromInt y ++ "px)")
2817− , Property "height" ("calc(100% + " ++ String.fromInt y ++ "px)")
2820− -- , renderStyle options
2531+ page =
2821− -- maybePseudo
2532+ "." ++ Internal.Style.classes.page
2822− -- (class ++ paragraph ++ " > " ++ any)
2823− -- [ Property "margin-right" xPx
2824− -- , Property "margin-bottom" yPx
2826− , renderStyle options
2828− (class ++ paragraph ++ " > " ++ left)
2829− [ Property "margin-right" xPx
2831− , renderStyle options
2833− (class ++ paragraph ++ " > " ++ right)
2834− [ Property "margin-left" xPx
2836− , renderStyle options
2838− (class ++ paragraph ++ "::after")
2839− [ Property "content" "''"
2840− , Property "display" "block"
2841− , Property "height" "0"
2842− , Property "width" "0"
2843− , Property "margin-top" (String.fromInt (-1 * (y // 2)) ++ "px")
2845− , renderStyle options
2847− (class ++ paragraph ++ "::before")
2848− [ Property "content" "''"
2849− , Property "display" "block"
2850− , Property "height" "0"
2851− , Property "width" "0"
2852− , Property "margin-bottom" (String.fromInt (-1 * (y // 2)) ++ "px")
2856− PaddingStyle cls top right bottom left ->
2534+ paragraph =
2857− let
2535+ "." ++ Internal.Style.classes.paragraph
2862− renderStyle options
2865− [ Property "padding"
2866− (String.fromFloat top
2868− ++ String.fromFloat right
2870− ++ String.fromFloat bottom
2872− ++ String.fromFloat left
2877− BorderWidth cls top right bottom left ->
2537+ left =
2878− let
2538+ "." ++ Internal.Style.classes.alignLeft
2883− renderStyle options
2886− [ Property "border-width"
2887− (String.fromInt top
2889− ++ String.fromInt right
2891− ++ String.fromInt bottom
2893− ++ String.fromInt left
2898− GridTemplateStyle template ->
2540+ right =
2899− let
2541+ "." ++ Internal.Style.classes.alignRight
2902− ++ String.join "-" (List.map lengthClassName template.rows)
2904− ++ String.join "-" (List.map lengthClassName template.columns)
2906− ++ lengthClassName (Tuple.first template.spacing)
2908− ++ lengthClassName (Tuple.second template.spacing)
2911− toGridLength (Tuple.second template.spacing)
2914− toGridLength (Tuple.first template.spacing)
2917− toGridLengthHelper Nothing Nothing x
2919− toGridLengthHelper minimum maximum x =
2922− String.fromInt px ++ "px"
2925− case ( minimum, maximum ) of
2926− ( Nothing, Nothing ) ->
2929− ( Just minSize, Nothing ) ->
2930− "minmax(" ++ String.fromInt minSize ++ "px, " ++ "max-content)"
2932− ( Nothing, Just maxSize ) ->
2933− "minmax(max-content, " ++ String.fromInt maxSize ++ "px)"
2935− ( Just minSize, Just maxSize ) ->
2936− "minmax(" ++ String.fromInt minSize ++ "px, " ++ String.fromInt maxSize ++ "px)"
2939− case ( minimum, maximum ) of
2940− ( Nothing, Nothing ) ->
2941− String.fromInt i ++ "fr"
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 ++ ";")
2980− template.rows
2544+ "." ++ Internal.Style.classes.any
2981− |> List.map toGridLength
2983− |> (\x -> "grid-template-rows: " ++ x ++ ";")
2985− gapX =
2546+ single =
2986− "grid-column-gap:" ++ toGridLength (Tuple.first template.spacing) ++ ";"
2547+ "." ++ Internal.Style.classes.single
2550+ [ renderStyle maybePseudo (class ++ row ++ " > " ++ any ++ " + " ++ any) [ Property "margin-left" xPx ]
2552+ -- margins don't apply to last element of normal, unwrapped rows
2553+ -- , renderStyle maybePseudo (class ++ row ++ " > " ++ any ++ ":first-child") [ Property "margin" "0" ]
2554+ -- For wrapped rows, margins always apply because we handle "canceling out" the other margins manually in the element.
2555+ , renderStyle maybePseudo
2556+ (class ++ wrappedRow ++ " > " ++ any)
2557+ [ Property "margin" (halfY ++ " " ++ halfX)
2988− gapY =
2560+ -- , renderStyle maybePseudo
2989− "grid-row-gap:" ++ toGridLength (Tuple.second template.spacing) ++ ";"
2561+ -- (class ++ wrappedRow ++ " > " ++ any ++ ":last-child")
2562+ -- [ Property "margin-right" "0"
2565+ , renderStyle maybePseudo (class ++ column ++ " > " ++ any ++ " + " ++ any) [ Property "margin-top" yPx ]
2566+ , renderStyle maybePseudo (class ++ page ++ " > " ++ any ++ " + " ++ any) [ Property "margin-top" yPx ]
2567+ , renderStyle maybePseudo (class ++ page ++ " > " ++ left) [ Property "margin-right" xPx ]
2568+ , renderStyle maybePseudo (class ++ page ++ " > " ++ right) [ Property "margin-left" xPx ]
2571+ (class ++ paragraph)
2572+ [ Property "line-height" ("calc(1em + " ++ String.fromInt y ++ "px)")
2576+ ("textarea" ++ class)
2577+ [ Property "line-height" ("calc(1em + " ++ String.fromInt y ++ "px)")
2991− modernGrid =
2580+ -- , renderStyle
2992− class ++ "{" ++ columns ++ rows ++ gapX ++ gapY ++ "}"
2581+ -- maybePseudo
2582+ -- (class ++ paragraph ++ " > " ++ any)
2583+ -- [ Property "margin-right" xPx
2584+ -- , Property "margin-bottom" yPx
2588+ (class ++ paragraph ++ " > " ++ left)
2589+ [ Property "margin-right" xPx
2593+ (class ++ paragraph ++ " > " ++ right)
2594+ [ Property "margin-left" xPx
2598+ (class ++ paragraph ++ "::after")
2599+ [ Property "content" "''"
2600+ , Property "display" "block"
2601+ , Property "height" "0"
2602+ , Property "width" "0"
2603+ , Property "margin-top" (String.fromInt (-1 * (y // 2)) ++ "px")
2607+ (class ++ paragraph ++ "::before")
2608+ [ Property "content" "''"
2609+ , Property "display" "block"
2610+ , Property "height" "0"
2611+ , Property "width" "0"
2612+ , Property "margin-bottom" (String.fromInt (-1 * (y // 2)) ++ "px")
2994− supports =
2616+ PaddingStyle cls top right bottom left ->
2995− "@supports (display:grid) {" ++ modernGrid ++ "}"
2617+ let
2997− [ base
2622+ renderStyle
2998− , supports
2623+ maybePseudo
2625+ [ Property "padding"
2626+ (String.fromInt top
2628+ ++ String.fromInt right
2630+ ++ String.fromInt bottom
2632+ ++ String.fromInt left
3001− GridPosition position ->
2637+ BorderWidth cls top right bottom left ->
3003− class =
2639+ class =
3004− ".grid-pos-"
2640+ "."
3005− ++ String.fromInt position.row
2641+ ++ cls
3007− ++ String.fromInt position.col
2643+ renderStyle
3008− ++ "-"
2644+ maybePseudo
3009− ++ String.fromInt position.width
2645+ class
3010− ++ "-"
2646+ [ Property "border-width"
3011− ++ String.fromInt position.height
3016− ++ String.fromInt position.row
2647+ (String.fromInt top
3017− ++ ";"
2648+ ++ "px "
3018− , "-ms-grid-row-span: "
3019− ++ String.fromInt position.height
2649+ ++ String.fromInt right
3020− ++ ";"
2650+ ++ "px "
3021− , "-ms-grid-column: "
3022− ++ String.fromInt position.col
2651+ ++ String.fromInt bottom
3023− ++ ";"
2652+ ++ "px "
3024− , "-ms-grid-column-span: "
3025− ++ String.fromInt position.width
2653+ ++ String.fromInt left
3026− ++ ";"
2654+ ++ "px"
2658+ GridTemplateStyle template ->
2662+ ++ String.join "-" (List.map lengthClassName template.rows)
2664+ ++ String.join "-" (List.map lengthClassName template.columns)
2666+ ++ lengthClassName (Tuple.first template.spacing)
2668+ ++ lengthClassName (Tuple.second template.spacing)
2671+ toGridLength (Tuple.second template.spacing)
2674+ toGridLength (Tuple.first template.spacing)
2677+ toGridLengthHelper Nothing Nothing x
2679+ toGridLengthHelper minimum maximum x =
2682+ String.fromInt px ++ "px"
2685+ case ( minimum, maximum ) of
2686+ ( Nothing, Nothing ) ->
2689+ ( Just minSize, Nothing ) ->
2690+ "minmax(" ++ String.fromInt minSize ++ "px, " ++ "max-content)"
2692+ ( Nothing, Just maxSize ) ->
2693+ "minmax(max-content, " ++ String.fromInt maxSize ++ "px)"
2695+ ( Just minSize, Just maxSize ) ->
2696+ "minmax(" ++ String.fromInt minSize ++ "px, " ++ String.fromInt maxSize ++ "px)"
2699+ case ( minimum, maximum ) of
2700+ ( Nothing, Nothing ) ->
2701+ String.fromInt i ++ "fr"
2703+ ( Just minSize, Nothing ) ->
2704+ "minmax(" ++ String.fromInt minSize ++ "px, " ++ String.fromInt i ++ "fr" ++ "fr)"
2706+ ( Nothing, Just maxSize ) ->
2707+ "minmax(max-content, " ++ String.fromInt maxSize ++ "px)"
2709+ ( Just minSize, Just maxSize ) ->
2710+ "minmax(" ++ String.fromInt minSize ++ "px, " ++ String.fromInt maxSize ++ "px)"
2713+ toGridLengthHelper (Just m) maximum len
2716+ toGridLengthHelper minimum (Just m) len
2720+ |> List.map toGridLength
2721+ |> String.join ySpacing
2722+ |> (\x -> "-ms-grid-columns: " ++ x ++ ";")
2726+ |> List.map toGridLength
2727+ |> String.join ySpacing
2728+ |> (\x -> "-ms-grid-rows: " ++ x ++ ";")
3030− class ++ "{" ++ msPosition ++ "}"
2731+ class ++ "{" ++ msColumns ++ msRows ++ "}"
2735+ |> List.map toGridLength
2737+ |> (\x -> "grid-template-columns: " ++ x ++ ";")
2741+ |> List.map toGridLength
2743+ |> (\x -> "grid-template-rows: " ++ x ++ ";")
2746+ "grid-column-gap:" ++ toGridLength (Tuple.first template.spacing) ++ ";"
2749+ "grid-row-gap:" ++ toGridLength (Tuple.second template.spacing) ++ ";"
2752+ class ++ "{" ++ columns ++ rows ++ gapX ++ gapY ++ "}"
2755+ "@supports (display:grid) {" ++ modernGrid ++ "}"
2759+ GridPosition position ->
2763+ ++ String.fromInt position.row
2765+ ++ String.fromInt position.col
2767+ ++ String.fromInt position.width
2769+ ++ String.fromInt position.height
2774+ ++ String.fromInt position.row
2776+ , "-ms-grid-row-span: "
2777+ ++ String.fromInt position.height
2779+ , "-ms-grid-column: "
2780+ ++ String.fromInt position.col
2782+ , "-ms-grid-column-span: "
2783+ ++ String.fromInt position.width
2788+ class ++ "{" ++ msPosition ++ "}"
3032− modernPosition =
2790+ modernPosition =
3033− String.join " "
2791+ String.join " "
3034− [ "grid-row: "
2792+ [ "grid-row: "
3035− ++ String.fromInt position.row
2793+ ++ String.fromInt position.row
3036− ++ " / "
2794+ ++ " / "
3037− ++ String.fromInt (position.row + position.height)
2795+ ++ String.fromInt (position.row + position.height)
3039− , "grid-column: "
2797+ , "grid-column: "
3040− ++ String.fromInt position.col
2798+ ++ String.fromInt position.col
3041− ++ " / "
2799+ ++ " / "
3042− ++ String.fromInt (position.col + position.width)
2800+ ++ String.fromInt (position.col + position.width)
2805+ class ++ "{" ++ modernPosition ++ "}"
2808+ "@supports (display:grid) {" ++ modernGrid ++ "}"
3046− modernGrid =
2812+ PseudoSelector class styles ->
3047− class ++ "{" ++ modernPosition ++ "}"
2813+ let
2814+ renderPseudoRule style =
2815+ renderStyleRule style (Just class)
2817+ List.map renderPseudoRule styles
3049− supports =
2820+ Transform transform ->
3050− "@supports (display:grid) {" ++ modernGrid ++ "}"
2821+ let
3052− [ base
2823+ transformValue transform
3056− PseudoSelector class styles ->
2825+ class =
3057− let
2826+ transformClass transform
3058− renderPseudoRule style =
3059− renderStyleRule options style (Just class)
3061− List.concatMap renderPseudoRule styles
2828+ case ( class, val ) of
2829+ ( Just cls, Just v ) ->
2833+ [ Property "transform"
3063− Transform transform ->
2837+ _ ->
3066− transformValue transform
3068− class =
2840+ combine style rendered =
3069− transformClass transform
2841+ { rules = rendered.rules ++ renderStyleRule style Nothing
3070− in
2842+ , topLevel =
3071− case ( class, val ) of
2843+ case topLevelValue style of
3072− ( Just cls, Just v ) ->
2844+ Nothing ->
3073− renderStyle options
2845+ rendered.topLevel
3076− [ Property "transform"
3080− _ ->
2847+ Just topLevel ->
3081− []
2848+ topLevel :: rendered.topLevel
2851+ case List.foldl combine { topLevel = [], rules = "" } stylesheet of
2852+ { topLevel, rules } ->
2853+ renderTopLevelValues topLevel ++ rules
3084lengthClassName : Length -> String
2856lengthClassName : Length -> String
@@ -3118,12 +2890,12 @@ formatTextShadow shadow =
3121−textShadowClass shadow =
2893+textShadowName shadow =
3122 String.concat
2894 String.concat
3124− , floatClass (Tuple.first shadow.offset) ++ "px"
2896+ , String.fromFloat (Tuple.first shadow.offset) ++ "px"
3125− , floatClass (Tuple.second shadow.offset) ++ "px"
2897+ , String.fromFloat (Tuple.second shadow.offset) ++ "px"
3126− , floatClass shadow.blur ++ "px"
2898+ , String.fromFloat shadow.blur ++ "px"
3127 , formatColorClass shadow.color
2899 , formatColorClass shadow.color
@@ -3144,17 +2916,17 @@ formatBoxShadow shadow =
3147−boxShadowClass shadow =
2919+boxShadowName shadow =
3148 String.concat <|
2920 String.concat <|
3149 [ if shadow.inset then
2921 [ if shadow.inset then
3150 "box-inset"
2922 "box-inset"
3154− , floatClass (Tuple.first shadow.offset) ++ "px"
2926+ , String.fromFloat (Tuple.first shadow.offset) ++ "px"
3155− , floatClass (Tuple.second shadow.offset) ++ "px"
2927+ , String.fromFloat (Tuple.second shadow.offset) ++ "px"
3156− , floatClass shadow.blur ++ "px"
2928+ , String.fromFloat shadow.blur ++ "px"
3157− , floatClass shadow.size ++ "px"
2929+ , String.fromFloat shadow.size ++ "px"
3158 , formatColorClass shadow.color
2930 , formatColorClass shadow.color
@@ -3199,17 +2971,6 @@ paddingName top right bottom left =
3199 ++ String.fromInt left
2971 ++ String.fromInt left
3202−paddingNameFloat top right bottom left =
3206− ++ floatClass right
3208− ++ floatClass bottom
3213getStyleName : Style -> String
2974getStyleName : Style -> String
3214getStyleName style =
2975getStyleName style =
3215 case style of
2976 case style of
@@ -3524,19 +3285,20 @@ convertAdjustment adjustment =
3524 capitalVertical =
3285 capitalVertical =
3525 1 - ascender
3286 1 - ascender
3527 capitalSize =
3289 capitalSize =
3528 1 / (ascender - newBaseline)
3290 1 / (ascender - newBaseline)
3531− 1 / (ascender - descender)
3533 fullVertical =
3292 fullVertical =
3536− -- (oldMiddle - newFullMiddle) * 2
3293+ (oldMiddle - newFullMiddle) * 2
3538 { full =
3295 { full =
3296+ { vertical = fullVertical
3539− adjust fullSize (ascender - descender) fullVertical
3298+ (ascender - descender)
3540 , capital =
3302 , capital =
3541 adjust capitalSize (ascender - newBaseline) capitalVertical
3303 adjust capitalSize (ascender - newBaseline) capitalVertical
@@ -3546,5 +3308,7 @@ adjust size height vertical =
3546 { vertical = vertical
3308 { vertical = vertical
3547 , height =
3309 , height =
3548 height / size
3310 height / size
3549 , size = size
3313 , size = size