[{"name":"Nri.Ui","comment":" A collection of helpers for working with NoRedInk projects\n\n@docs styled\n\n","unions":[],"aliases":[],"values":[{"name":"styled","comment":" Wrapper around [`Html.Styled.style`](http://package.elm-lang.org/packages/rtfeldman/elm-css/13.1.1/Html-Styled#styled) which adds a data-nri-description attribute to make it easier to tell from Inspect Element where in our code that element was defined.\n\nTakes a function that creates an element, and pre-applies styles and a `data-nri-description` attribution to it.\n\n    bigButton : List (Attribute msg) -> List (Html msg) -> Html msg\n    bigButton =\n        styled button\n            \"big button\"\n            [ padding (px 30)\n            , fontWeight bold\n            ]\n\n    view : Model -> Html msg\n    view model =\n        [ text \"These two buttons are identical:\"\n        , bigButton [] [ text \"Hi!\" ]\n        , button [ css [ padding (px 30), fontWeight bold ] ] [] [ text \"Hi!\" ]\n        ]\n\nHere, the bigButton function we've defined using styled button is identical to the normal button function, except that it has pre-applied the attribute of css [ padding (px 30), fontWeight bold ], as well as `(attribute \"data-nri-description\" \"big button\")`.\n\nYou can pass more attributes to bigButton as usual (including other css attributes). They will be applied after the pre-applied styles.\n\nNote: normally `attributeMsg` will be the same as `msg`, but we need them to be different types for special cases when `fn` needs to do tricky things. For example, some elements from the Accessibility.Styled package use the following type signature:\n\n    div : List (Attribute Never) -> List (Html msg) -> Html msg\n\n","type":"(List.List (Html.Styled.Attribute attributeMsg) -> List.List (Html.Styled.Html msg) -> Html.Styled.Html msg) -> String.String -> List.List Css.Style -> List.List (Html.Styled.Attribute attributeMsg) -> List.List (Html.Styled.Html msg) -> Html.Styled.Html msg"}],"binops":[]},{"name":"Nri.Ui.Accordion.V1","comment":"\n\n@docs view, viewKeyed\n@docs viewCaret, Caret\n@docs AccordionOptions, StyleOptions\n\n","unions":[{"name":"Caret","comment":" DefaultCaret is the blue caret\n","args":[],"cases":[["DefaultCaret",[]],["WhiteCaret",[]],["NoneCaret",[]]]}],"aliases":[{"name":"AccordionOptions","comment":" ","args":["entry","msg"],"type":"{ entries : List.List ( entry, Basics.Bool ), viewHeader : entry -> Accessibility.Styled.Html msg, viewContent : entry -> Accessibility.Styled.Html msg, customStyles : Maybe.Maybe (entry -> Nri.Ui.Accordion.V1.StyleOptions), caret : Nri.Ui.Accordion.V1.Caret, toggle : entry -> Basics.Bool -> msg }"},{"name":"StyleOptions","comment":" ","args":[],"type":"{ entryStyles : List.List Css.Style, entryExpandedStyles : List.List Css.Style, entryClosedStyles : List.List Css.Style, headerStyles : List.List Css.Style, headerExpandedStyles : List.List Css.Style, headerClosedStyles : List.List Css.Style, contentStyles : List.List Css.Style }"}],"values":[{"name":"view","comment":" ","type":"Nri.Ui.Accordion.V1.AccordionOptions entry msg -> Accessibility.Styled.Html msg"},{"name":"viewCaret","comment":" Just the caret!\n","type":"Basics.Bool -> Nri.Ui.Accordion.V1.Caret -> Accessibility.Styled.Html msg"},{"name":"viewKeyed","comment":" If your accordion's rows can be moved around, use viewKeyed. It prevents\nthe caret's animation from firing off incorrectly when rows move.\n","type":"Nri.Ui.Accordion.V1.AccordionOptions entry msg -> (entry -> String.String) -> Accessibility.Styled.Html msg"}],"binops":[]},{"name":"Nri.Ui.Alert.V2","comment":" UI components that highlight information to the user.\n\n@docs error\n@docs success\n@docs tip\n@docs warning\n\n","unions":[],"aliases":[],"values":[{"name":"error","comment":" ","type":"{ r | exclamation : String.String } -> String.String -> Accessibility.Styled.Html msg"},{"name":"success","comment":" ","type":"{ r | checkmark : String.String } -> String.String -> Accessibility.Styled.Html msg"},{"name":"tip","comment":" ","type":"{ r | bulb : String.String } -> String.String -> Accessibility.Styled.Html msg"},{"name":"warning","comment":" ","type":"{ r | exclamation : String.String } -> String.String -> Accessibility.Styled.Html msg"}],"binops":[]},{"name":"Nri.Ui.Alert.V3","comment":" UI components that highlight information to the user.\n\n@docs error\n@docs success\n@docs tip\n@docs warning\n\n","unions":[],"aliases":[],"values":[{"name":"error","comment":" ","type":"String.String -> Accessibility.Styled.Html msg"},{"name":"success","comment":" ","type":"String.String -> Accessibility.Styled.Html msg"},{"name":"tip","comment":" ","type":"String.String -> Accessibility.Styled.Html msg"},{"name":"warning","comment":" ","type":"String.String -> Accessibility.Styled.Html msg"}],"binops":[]},{"name":"Nri.Ui.Alert.V4","comment":"\n\n\n# Changes from V3:\n\n  - Changes the error font color from `purpleDark` to `purple`\n  - Adds `somethingWentWrong` error for displaying stacktraces\n\n\n# About:\n\nUI components that highlight information to the user.\n\n@docs error, success, tip, warning\n@docs somethingWentWrong\n\n","unions":[],"aliases":[],"values":[{"name":"error","comment":" import Nri.Ui.Alert.V4 as Alert\n\n    view =\n        Alert.error \"Some **awesome** message!\"\n\n","type":"String.String -> Accessibility.Styled.Html msg"},{"name":"somethingWentWrong","comment":" ","type":"String.String -> Accessibility.Styled.Html msg"},{"name":"success","comment":" import Nri.Ui.Alert.V4 as Alert\n\n    view =\n        Alert.success \"Some **awesome** message!\"\n\n","type":"String.String -> Accessibility.Styled.Html msg"},{"name":"tip","comment":" import Nri.Ui.Alert.V4 as Alert\n\n    view =\n        Alert.tip \"Some **awesome** message!\"\n\n","type":"String.String -> Accessibility.Styled.Html msg"},{"name":"warning","comment":" import Nri.Ui.Alert.V4 as Alert\n\n    view =\n        Alert.warning \"Some **awesome** message!\"\n\n","type":"String.String -> Accessibility.Styled.Html msg"}],"binops":[]},{"name":"Nri.Ui.AssetPath","comment":" Helpers for dealing with assets.\n\n@docs Asset, url\n\n","unions":[{"name":"Asset","comment":" ","args":[],"cases":[["Asset",["String.String"]]]}],"aliases":[],"values":[{"name":"url","comment":" ","type":"Nri.Ui.AssetPath.Asset -> String.String"}],"binops":[]},{"name":"Nri.Ui.AssignmentIcon.V1","comment":"\n\n@docs diagnostic, practice, quiz\n@docs quickWrite, guidedDraft\n@docs selfReview\n@docs peerReview, submitting, rating, revising\n@docs startPrimary, startSecondary\n\n    import Html.Styled exposing (Html)\n    import Nri.Ui.AssignmentIcon.V1 as AssignmentIcon\n    import Nri.Ui.Colors.V1 as Colors\n    import Nri.Ui.Svg.V1 as Svg\n\n    view : Html msg\n    view =\n        AssignmentIcon.diagnostic\n            |> Svg.withColor Colors.lichen\n            |> Svg.toHtml\n\n","unions":[],"aliases":[],"values":[{"name":"diagnostic","comment":" ","type":"Nri.Ui.Svg.V1.Svg"},{"name":"guidedDraft","comment":" ","type":"Nri.Ui.Svg.V1.Svg"},{"name":"peerReview","comment":" ","type":"Nri.Ui.Svg.V1.Svg"},{"name":"practice","comment":" ","type":"Nri.Ui.Svg.V1.Svg"},{"name":"quickWrite","comment":" ","type":"Nri.Ui.Svg.V1.Svg"},{"name":"quiz","comment":" ","type":"Nri.Ui.Svg.V1.Svg"},{"name":"rating","comment":" ","type":"Nri.Ui.Svg.V1.Svg"},{"name":"revising","comment":" ","type":"Nri.Ui.Svg.V1.Svg"},{"name":"selfReview","comment":" ","type":"Nri.Ui.Svg.V1.Svg"},{"name":"startPrimary","comment":" ","type":"Nri.Ui.Svg.V1.Svg"},{"name":"startSecondary","comment":" ","type":"Nri.Ui.Svg.V1.Svg"},{"name":"submitting","comment":" ","type":"Nri.Ui.Svg.V1.Svg"}],"binops":[]},{"name":"Nri.Ui.BannerAlert.V2","comment":"\n\n@docs error\n@docs neutral\n@docs success\n\n","unions":[],"aliases":[],"values":[{"name":"error","comment":" A banner to show error alerts\n","type":"String.String -> Html.Styled.Html msg"},{"name":"neutral","comment":" A banner to show neutral alerts\n","type":"String.String -> Html.Styled.Html msg"},{"name":"success","comment":" A banner for success alerts\n","type":"String.String -> Html.Styled.Html msg"}],"binops":[]},{"name":"Nri.Ui.BannerAlert.V3","comment":"\n\n@docs error, neutral, success\n\n","unions":[],"aliases":[],"values":[{"name":"error","comment":" A banner to show error alerts\n","type":"String.String -> Accessibility.Styled.Html msg"},{"name":"neutral","comment":" A banner to show neutral alerts\n","type":"String.String -> Accessibility.Styled.Html msg"},{"name":"success","comment":" A banner for success alerts\n","type":"String.String -> Accessibility.Styled.Html msg"}],"binops":[]},{"name":"Nri.Ui.BannerAlert.V4","comment":"\n\n@docs alert, error, neutral, success\n\n","unions":[],"aliases":[],"values":[{"name":"alert","comment":" A banner to show error alerts\n","type":"String.String -> Maybe.Maybe msg -> Accessibility.Styled.Html msg"},{"name":"error","comment":" A banner to show error alerts\n","type":"String.String -> Maybe.Maybe msg -> Accessibility.Styled.Html msg"},{"name":"neutral","comment":" A banner to show neutral alerts\n","type":"String.String -> Maybe.Maybe msg -> Accessibility.Styled.Html msg"},{"name":"success","comment":" A banner for success alerts\n","type":"String.String -> Maybe.Maybe msg -> Accessibility.Styled.Html msg"}],"binops":[]},{"name":"Nri.Ui.BannerAlert.V5","comment":"\n\n@docs alert, error, neutral, success, LinkConfig, BannerContent, Target\n\n","unions":[{"name":"BannerContent","comment":" A type to capture either plain content, or a string which will include a url link.\n","args":[],"cases":[["Plain",["String.String"]],["WithLink",["Nri.Ui.BannerAlert.V5.LinkConfig"]]]},{"name":"Target","comment":" The link target. Corresponds to values of \"_blank\" and \"_self\"\n","args":[],"cases":[["Blank",[]],["Self",[]]]}],"aliases":[{"name":"LinkConfig","comment":" Config describing a message containing an embedded link.\n","args":[],"type":"{ prefixText : String.String, linkText : String.String, linkUrl : String.String, postfixText : String.String, target : Nri.Ui.BannerAlert.V5.Target }"}],"values":[{"name":"alert","comment":" A banner to show error alerts\n","type":"Nri.Ui.BannerAlert.V5.BannerContent -> Maybe.Maybe msg -> Accessibility.Styled.Html msg"},{"name":"error","comment":" A banner to show error alerts\n","type":"Nri.Ui.BannerAlert.V5.BannerContent -> Maybe.Maybe msg -> Accessibility.Styled.Html msg"},{"name":"neutral","comment":" A banner to show neutral alerts\n","type":"Nri.Ui.BannerAlert.V5.BannerContent -> Maybe.Maybe msg -> Accessibility.Styled.Html msg"},{"name":"success","comment":" A banner for success alerts\n","type":"Nri.Ui.BannerAlert.V5.BannerContent -> Maybe.Maybe msg -> Accessibility.Styled.Html msg"}],"binops":[]},{"name":"Nri.Ui.BannerAlert.V6","comment":"\n\n@docs alert, error, neutral, success\n\n\n# Post-release patches\n\n  - adjusts link styles\n\nChanges from V5:\n\n  - takes HTML rather than BannerContent\n\n<details>\n<summary>elm-refactor upgrade script</summary>\n\n    import Css\n    import Html.Styled as Html\n    import Html.Styled.Attributes as Attributes\n    import Nri.Ui.BannerAlert.V6 as BannerAlert\n    import Nri.Ui.Fonts.V1 as Fonts\n\n    upgrade_Nri_Ui_BannerAlert_V5_alert bannerContent maybeMsg =\n        BannerAlert.alert\n            (case bannerContent of\n                Nri.Ui.BannerAlert.V5.Plain string ->\n                    [ Html.text string ]\n\n                Nri.Ui.BannerAlert.V5.WithLink { target, prefixText, linkUrl, postfixText, linkText } ->\n                    [ Html.div\n                        [ Attributes.css\n                            [ Css.fontSize (Css.px 20)\n                            , Css.fontWeight (Css.int 700)\n                            , Css.lineHeight (Css.px 25)\n                            , Css.maxWidth (Css.px 600)\n                            , Fonts.baseFont\n                            ]\n                        ]\n                        [ Html.text prefixText\n                        , Html.a\n                            [ Attributes.href linkUrl\n                            , case target of\n                                Nri.Ui.BannerAlert.V5.Blank ->\n                                    Attributes.target \"_blank\"\n\n                                Nri.Ui.BannerAlert.V5.Self ->\n                                    Attributes.target \"_self\"\n                            ]\n                            [ Html.text linkText ]\n                        , Html.text postfixText\n                        ]\n                    ]\n            )\n            maybeMsg\n\n    upgrade_Nri_Ui_BannerAlert_V5_error bannerContent maybeMsg =\n        BannerAlert.error\n            (case bannerContent of\n                Nri.Ui.BannerAlert.V5.Plain string ->\n                    [ Html.text string ]\n\n                Nri.Ui.BannerAlert.V5.WithLink { target, prefixText, linkUrl, postfixText, linkText } ->\n                    [ Html.div\n                        [ Attributes.css\n                            [ Css.fontSize (Css.px 20)\n                            , Css.fontWeight (Css.int 700)\n                            , Css.lineHeight (Css.px 25)\n                            , Css.maxWidth (Css.px 600)\n                            , Fonts.baseFont\n                            ]\n                        ]\n                        [ Html.text prefixText\n                        , Html.a\n                            [ Attributes.href linkUrl\n                            , case target of\n                                Nri.Ui.BannerAlert.V5.Blank ->\n                                    Attributes.target \"_blank\"\n\n                                Nri.Ui.BannerAlert.V5.Self ->\n                                    Attributes.target \"_self\"\n                            ]\n                            [ Html.text linkText ]\n                        , Html.text postfixText\n                        ]\n                    ]\n            )\n            maybeMsg\n\n    upgrade_Nri_Ui_BannerAlert_V5_neutral bannerContent maybeMsg =\n        BannerAlert.neutral\n            (case bannerContent of\n                Nri.Ui.BannerAlert.V5.Plain string ->\n                    [ Html.text string ]\n\n                Nri.Ui.BannerAlert.V5.WithLink { target, prefixText, linkUrl, postfixText, linkText } ->\n                    [ Html.div\n                        [ Attributes.css\n                            [ Css.fontSize (Css.px 20)\n                            , Css.fontWeight (Css.int 700)\n                            , Css.lineHeight (Css.px 25)\n                            , Css.maxWidth (Css.px 600)\n                            , Fonts.baseFont\n                            ]\n                        ]\n                        [ Html.text prefixText\n                        , Html.a\n                            [ Attributes.href linkUrl\n                            , case target of\n                                Nri.Ui.BannerAlert.V5.Blank ->\n                                    Attributes.target \"_blank\"\n\n                                Nri.Ui.BannerAlert.V5.Self ->\n                                    Attributes.target \"_self\"\n                            ]\n                            [ Html.text linkText ]\n                        , Html.text postfixText\n                        ]\n                    ]\n            )\n            maybeMsg\n\n    upgrade_Nri_Ui_BannerAlert_V5_success bannerContent maybeMsg =\n        BannerAlert.success\n            (case bannerContent of\n                Nri.Ui.BannerAlert.V5.Plain string ->\n                    [ Html.text string ]\n\n                Nri.Ui.BannerAlert.V5.WithLink { target, prefixText, linkUrl, postfixText, linkText } ->\n                    [ Html.div\n                        [ Attributes.css\n                            [ Css.fontSize (Css.px 20)\n                            , Css.fontWeight (Css.int 700)\n                            , Css.lineHeight (Css.px 25)\n                            , Css.maxWidth (Css.px 600)\n                            , Fonts.baseFont\n                            ]\n                        ]\n                        [ Html.text prefixText\n                        , Html.a\n                            [ Attributes.href linkUrl\n                            , case target of\n                                Nri.Ui.BannerAlert.V5.Blank ->\n                                    Attributes.target \"_blank\"\n\n                                Nri.Ui.BannerAlert.V5.Self ->\n                                    Attributes.target \"_self\"\n                            ]\n                            [ Html.text linkText ]\n                        , Html.text postfixText\n                        ]\n                    ]\n            )\n            maybeMsg\n\n</details>\n\n","unions":[],"aliases":[],"values":[{"name":"alert","comment":" A banner to show error alerts\n","type":"List.List (Accessibility.Styled.Html msg) -> Maybe.Maybe msg -> Accessibility.Styled.Html msg"},{"name":"error","comment":" A banner to show error alerts\n","type":"List.List (Accessibility.Styled.Html msg) -> Maybe.Maybe msg -> Accessibility.Styled.Html msg"},{"name":"neutral","comment":" A banner to show neutral alerts\n","type":"List.List (Accessibility.Styled.Html msg) -> Maybe.Maybe msg -> Accessibility.Styled.Html msg"},{"name":"success","comment":" A banner for success alerts\n","type":"List.List (Accessibility.Styled.Html msg) -> Maybe.Maybe msg -> Accessibility.Styled.Html msg"}],"binops":[]},{"name":"Nri.Ui.Button.V10","comment":"\n\n\n# Changes from V9:\n\n  - Explicitly zeroes out all margin\n  - adds `css` helper\n\n\n# Create a button or link\n\n@docs button, link\n@docs Attribute\n@docs icon, custom, css\n\n\n## Behavior\n\n@docs onClick\n@docs href, linkSpa, linkExternal, linkWithMethod, linkWithTracking, linkExternalWithTracking\n\n\n## Sizing\n\n@docs small, medium, large\n@docs exactWidth, unboundedWidth, fillContainerWidth\n\n\n## Change the color scheme\n\n@docs primary, secondary, danger, premium\n\n\n## Change the state (buttons only)\n\n@docs enabled, unfulfilled, disabled, error, loading, success\n\n\n# Commonly-used buttons\n\n@docs delete\n@docs toggleButton\n\n","unions":[{"name":"Attribute","comment":" ","args":["msg"],"cases":[]}],"aliases":[],"values":[{"name":"button","comment":"\n\n    Button.button \"My great button!\"\n        [ Button.onClick ()\n        , Button.enabled\n        ]\n\nBy default, the button is enabled, Medium sized, with primary colors, and an unbounded width.\n\n","type":"String.String -> List.List (Nri.Ui.Button.V10.Attribute msg) -> Accessibility.Styled.Html msg"},{"name":"css","comment":" ","type":"List.List Css.Style -> Nri.Ui.Button.V10.Attribute msg"},{"name":"custom","comment":" Use this helper to add custom attributes.\n\nDo NOT use this helper to add css styles, as they may not be applied the way\nyou want/expect if underlying Button styles change.\nInstead, please use the `css` helper.\n\n","type":"List.List (Accessibility.Styled.Attribute msg) -> Nri.Ui.Button.V10.Attribute msg"},{"name":"danger","comment":" ","type":"Nri.Ui.Button.V10.Attribute msg"},{"name":"delete","comment":" A delete button (blue X)\n","type":"{ label : String.String, onClick : msg } -> Accessibility.Styled.Html msg"},{"name":"disabled","comment":" Shows inactive styling. If a button, this attribute will disable it.\n","type":"Nri.Ui.Button.V10.Attribute msg"},{"name":"enabled","comment":" ","type":"Nri.Ui.Button.V10.Attribute msg"},{"name":"error","comment":" Shows error styling. If a button, this attribute will disable it.\n","type":"Nri.Ui.Button.V10.Attribute msg"},{"name":"exactWidth","comment":" Define a size in `px` for the button's total width.\n","type":"Basics.Int -> Nri.Ui.Button.V10.Attribute msg"},{"name":"fillContainerWidth","comment":" ","type":"Nri.Ui.Button.V10.Attribute msg"},{"name":"href","comment":" ","type":"String.String -> Nri.Ui.Button.V10.Attribute msg"},{"name":"icon","comment":" ","type":"Nri.Ui.Svg.V1.Svg -> Nri.Ui.Button.V10.Attribute msg"},{"name":"large","comment":" ","type":"Nri.Ui.Button.V10.Attribute msg"},{"name":"link","comment":"\n\n    Button.link \"My great link!\"\n        [ Button.href \"My href\"\n        , Button.secondary\n        ]\n\nBy default, the link is Medium sized, with primary colors, and an unbounded width.\n\n","type":"String.String -> List.List (Nri.Ui.Button.V10.Attribute msg) -> Accessibility.Styled.Html msg"},{"name":"linkExternal","comment":" Wrap some text so it looks like a button, but actually is wrapped in an anchor to\nsome url and have it open to an external site\n","type":"String.String -> Nri.Ui.Button.V10.Attribute msg"},{"name":"linkExternalWithTracking","comment":" Wrap some text so it looks like a button, but actually is wrapped in an anchor to some url and have it open to an external site.\n","type":"{ track : msg, url : String.String } -> Nri.Ui.Button.V10.Attribute msg"},{"name":"linkSpa","comment":" Use this link for routing within a single page app.\n\nThis will make a normal <a> tag, but change the Events.onClick behavior to avoid reloading the page.\n\nSee <https://github.com/elm-lang/html/issues/110> for details on this implementation.\n\n","type":"String.String -> Nri.Ui.Button.V10.Attribute msg"},{"name":"linkWithMethod","comment":" Wrap some text so it looks like a button, but actually is wrapped in an anchor to\nsome url, and it's an HTTP request (Rails includes JS to make this use the given HTTP method)\n","type":"{ method : String.String, url : String.String } -> Nri.Ui.Button.V10.Attribute msg"},{"name":"linkWithTracking","comment":" Wrap some text so it looks like a button, but actually is wrapped in an anchor to some url.\nThis should only take in messages that result in a Msg that triggers Analytics.trackAndRedirect.\nFor buttons that trigger other effects on the page, please use Nri.Button.button instead.\n","type":"{ track : msg, url : String.String } -> Nri.Ui.Button.V10.Attribute msg"},{"name":"loading","comment":" Shows loading styling. If a button, this attribute will disable it.\n","type":"Nri.Ui.Button.V10.Attribute msg"},{"name":"medium","comment":" ","type":"Nri.Ui.Button.V10.Attribute msg"},{"name":"onClick","comment":" ","type":"msg -> Nri.Ui.Button.V10.Attribute msg"},{"name":"premium","comment":" ","type":"Nri.Ui.Button.V10.Attribute msg"},{"name":"primary","comment":" ","type":"Nri.Ui.Button.V10.Attribute msg"},{"name":"secondary","comment":" ","type":"Nri.Ui.Button.V10.Attribute msg"},{"name":"small","comment":" ","type":"Nri.Ui.Button.V10.Attribute msg"},{"name":"success","comment":" Shows success styling. If a button, this attribute will disable it.\n","type":"Nri.Ui.Button.V10.Attribute msg"},{"name":"toggleButton","comment":" A button that can be toggled into a pressed state and back again.\n","type":"{ label : String.String, onSelect : msg, onDeselect : msg, pressed : Basics.Bool } -> Accessibility.Styled.Html msg"},{"name":"unboundedWidth","comment":" Leave the maxiumum width unbounded (there is a minimum width).\n","type":"Nri.Ui.Button.V10.Attribute msg"},{"name":"unfulfilled","comment":" Shows inactive styles.\n","type":"Nri.Ui.Button.V10.Attribute msg"}],"binops":[]},{"name":"Nri.Ui.Button.V3","comment":"\n\n\n# Changes from V2:\n\n  - Uses Html.Styled\n  - Removes buttonDeprecated\n  - Removes Tiny size\n  - Removes one-off Active hack\n  - Removes \"submit\" button - we just used that for forms that were partially in Elm\n\n\n# About:\n\nCommon NoRedInk buttons. For accessibility purposes, buttons that perform an\naction on the current page should be HTML `<button>` elements and are created here\nwith `*Button` functions. Buttons that take the user to a new page should be\nHTML `<a>` elements and are created here with `*Link` functions. Both versions\nshould be able to use the same CSS class in all cases.\n\nThere will generally be a `*Button` and `*Link` version of each button style.\n(These will be created as they are needed.)\n\n\n## Common configs\n\n@docs ButtonSize, ButtonStyle, ButtonState, ButtonContent\n\n\n## `<button>` Buttons\n\n@docs ButtonConfig, button, customButton, delete, copyToClipboard, ToggleButtonConfig, toggleButton\n\n\n## `<a>` Buttons\n\n@docs LinkConfig, link, linkSpa, linkExternal, linkWithMethod, linkWithTracking, linkExternalWithTracking\n\n","unions":[{"name":"ButtonSize","comment":" Sizes for buttons and links that have button classes\n","args":[],"cases":[["Small",[]],["Medium",[]],["Large",[]]]},{"name":"ButtonState","comment":" Describes the state of a button. Has consequences for appearance and disabled attribute.\n\n  - Enabled: An enabled button. Takes the appearance of ButtonStyle\n  - Unfulfilled: A button which appears with the InactiveColors palette but is not disabled.\n  - Disabled: A button which appears with the InactiveColors palette and is disabled.\n  - Error: A button which appears with the ErrorColors palette and is disabled.\n  - Loading: A button which appears with the LoadingColors palette and is disabled\n  - Success: A button which appears with the SuccessColors palette and is disabled\n\n","args":[],"cases":[["Enabled",[]],["Unfulfilled",[]],["Disabled",[]],["Error",[]],["Loading",[]],["Success",[]]]},{"name":"ButtonStyle","comment":" Styleguide-approved styles for your buttons!\n\nNote on borderless buttons:\nA borderless button that performs an action on the current page\nThis button is intended to look like a link.\nOnly use a borderless button when the clickable text in question follows the same layout/margin/padding as a bordered button\n\n","args":[],"cases":[["Primary",[]],["Secondary",[]],["Borderless",[]],["Danger",[]],["Premium",[]]]}],"aliases":[{"name":"ButtonConfig","comment":" The part of a button that remains constant through different button states\n","args":["msg"],"type":"{ onClick : msg, size : Nri.Ui.Button.V3.ButtonSize, style : Nri.Ui.Button.V3.ButtonStyle, width : Maybe.Maybe Basics.Int }"},{"name":"ButtonContent","comment":" ButtonContent, often changes based on ButtonState. For example, a button in the \"Success\"\nstate may have a different label than a button in the \"Error\" state\n","args":[],"type":"{ label : String.String, state : Nri.Ui.Button.V3.ButtonState, icon : Maybe.Maybe Nri.Ui.Icon.V3.IconType }"},{"name":"LinkConfig","comment":" Links are clickable things with a url.\n\nNOTE: Links do not support two-line labels.\n\n","args":[],"type":"{ label : String.String, icon : Maybe.Maybe Nri.Ui.Icon.V3.IconType, url : String.String, size : Nri.Ui.Button.V3.ButtonSize, style : Nri.Ui.Button.V3.ButtonStyle, width : Maybe.Maybe Basics.Int }"},{"name":"ToggleButtonConfig","comment":" Buttons can be toggled into a pressed state and back again.\n","args":["msg"],"type":"{ label : String.String, onSelect : msg, onDeselect : msg, pressed : Basics.Bool }"}],"values":[{"name":"button","comment":" A delightful button which can trigger an effect when clicked!\n\nThis button will trigger the passed-in message if the button state is:\n\n  - Enabled\n  - Unfulfilled\n\nThis button will be Disabled if the button state is:\n\n  - Disabled\n  - Error\n  - Loading\n  - Success\n\n","type":"Nri.Ui.Button.V3.ButtonConfig msg -> Nri.Ui.Button.V3.ButtonContent -> Accessibility.Styled.Html msg"},{"name":"copyToClipboard","comment":" See ui/src/Page/Teach/Courses/Assignments/index.coffee\nYou will need to hook this up to clipboard.js\n","type":"{ r | teach_assignments_copyWhite_svg : Nri.Ui.AssetPath.Asset } -> Nri.Ui.Button.V3.CopyToClipboardConfig -> Accessibility.Styled.Html msg"},{"name":"customButton","comment":" Exactly the same as button but you can pass in a list of attributes\n","type":"List.List (Accessibility.Styled.Attribute msg) -> Nri.Ui.Button.V3.ButtonConfig msg -> Nri.Ui.Button.V3.ButtonContent -> Accessibility.Styled.Html msg"},{"name":"delete","comment":" A delete button (blue X)\n","type":"{ r | x : String.String } -> Nri.Ui.Button.V3.DeleteButtonConfig msg -> Accessibility.Styled.Html msg"},{"name":"link","comment":" Wrap some text so it looks like a button, but actually is wrapped in an anchor to\nsome url\n","type":"Nri.Ui.Button.V3.LinkConfig -> Accessibility.Styled.Html msg"},{"name":"linkExternal","comment":" Wrap some text so it looks like a button, but actually is wrapped in an anchor to\nsome url and have it open to an external site\n","type":"Nri.Ui.Button.V3.LinkConfig -> Accessibility.Styled.Html msg"},{"name":"linkExternalWithTracking","comment":" Wrap some text so it looks like a button, but actually is wrapped in an anchor to some url and have it open to an external site\n\nThis should only take in messages that result in tracking events. For buttons that trigger other effects on the page, please use Nri.Ui.Button.V2.button instead\n\n","type":"msg -> Nri.Ui.Button.V3.LinkConfig -> Accessibility.Styled.Html msg"},{"name":"linkSpa","comment":" Use this link for routing within a single page app.\n\nThis will make a normal <a> tag, but change the Events.onClick behavior to avoid reloading the page.\n\nSee <https://github.com/elm-lang/html/issues/110> for details on this implementation.\n\n","type":"(route -> String.String) -> (route -> msg) -> { label : String.String, icon : Maybe.Maybe Nri.Ui.Icon.V3.IconType, size : Nri.Ui.Button.V3.ButtonSize, style : Nri.Ui.Button.V3.ButtonStyle, width : Maybe.Maybe Basics.Int, route : route } -> Accessibility.Styled.Html msg"},{"name":"linkWithMethod","comment":" Wrap some text so it looks like a button, but actually is wrapped in an anchor to\nsome url, and it's an HTTP request (Rails includes JS to make this use the given HTTP method)\n","type":"String.String -> Nri.Ui.Button.V3.LinkConfig -> Accessibility.Styled.Html msg"},{"name":"linkWithTracking","comment":" Wrap some text so it looks like a button, but actually is wrapped in an anchor to some url.\nThis should only take in messages that result in a Msg that triggers Analytics.trackAndRedirect. For buttons that trigger other effects on the page, please use Nri.Button.button instead\n","type":"msg -> Nri.Ui.Button.V3.LinkConfig -> Accessibility.Styled.Html msg"},{"name":"toggleButton","comment":" ","type":"Nri.Ui.Button.V3.ToggleButtonConfig msg -> Accessibility.Styled.Html msg"}],"binops":[]},{"name":"Nri.Ui.Button.V4","comment":"\n\n\n# Changes from V3:\n\n  - Adds `ButtonWidth`.\n  - Button now grows vertically to fit content.\n    To limit the height use attributes on its container or consider truncating content before rendering.\n\n\n# About:\n\nCommon NoRedInk buttons. For accessibility purposes, buttons that perform an\naction on the current page should be HTML `<button>` elements and are created here\nwith `*Button` functions. Buttons that take the user to a new page should be\nHTML `<a>` elements and are created here with `*Link` functions. Both versions\nshould be able to use the same CSS class in all cases.\n\nThere will generally be a `*Button` and `*Link` version of each button style.\n(These will be created as they are needed.)\n\nIn general a button should never truncate or obscure its contents. This could\nmake it difficult or impossible for a student or teacher to use the site, so in\ngeneral choose buttons that grow to fit their contents. It is better to risk\nweird layout than to block users. Might this be a golden rule? Of course there\nmay be exceptions, for example if button content is supplied by an end-user.\n\n\n## Common configs\n\n@docs ButtonSize, ButtonWidth, ButtonStyle, ButtonState, ButtonContent\n\n\n## `<button>` Buttons\n\n@docs ButtonConfig, button, customButton, delete, copyToClipboard, ToggleButtonConfig, toggleButton\n\n\n## `<a>` Buttons\n\n@docs LinkConfig, link, linkSpa, linkExternal, linkWithMethod, linkWithTracking, linkExternalWithTracking\n\n","unions":[{"name":"ButtonSize","comment":" Sizes for buttons and links that have button classes\n","args":[],"cases":[["Small",[]],["Medium",[]],["Large",[]]]},{"name":"ButtonState","comment":" Describes the state of a button. Has consequences for appearance and disabled attribute.\n\n  - Enabled: An enabled button. Takes the appearance of ButtonStyle\n  - Unfulfilled: A button which appears with the InactiveColors palette but is not disabled.\n  - Disabled: A button which appears with the InactiveColors palette and is disabled.\n  - Error: A button which appears with the ErrorColors palette and is disabled.\n  - Loading: A button which appears with the LoadingColors palette and is disabled\n  - Success: A button which appears with the SuccessColors palette and is disabled\n\n","args":[],"cases":[["Enabled",[]],["Unfulfilled",[]],["Disabled",[]],["Error",[]],["Loading",[]],["Success",[]]]},{"name":"ButtonStyle","comment":" Styleguide-approved styles for your buttons!\n\nNote on borderless buttons:\nA borderless button that performs an action on the current page\nThis button is intended to look like a link.\nOnly use a borderless button when the clickable text in question follows the same layout/margin/padding as a bordered button\n\n","args":[],"cases":[["Primary",[]],["Secondary",[]],["Borderless",[]],["Danger",[]],["Premium",[]]]},{"name":"ButtonWidth","comment":" Width sizing behavior for buttons.\n\n`WidthExact Int` defines a size in `px` for the button's total width, and\n`WidthUnbounded` leaves the maxiumum width unbounded (there is a minimum width).\n\n","args":[],"cases":[["WidthExact",["Basics.Int"]],["WidthUnbounded",[]]]}],"aliases":[{"name":"ButtonConfig","comment":" The part of a button that remains constant through different button states\n","args":["msg"],"type":"{ onClick : msg, size : Nri.Ui.Button.V4.ButtonSize, style : Nri.Ui.Button.V4.ButtonStyle, width : Nri.Ui.Button.V4.ButtonWidth }"},{"name":"ButtonContent","comment":" ButtonContent, often changes based on ButtonState. For example, a button in the \"Success\"\nstate may have a different label than a button in the \"Error\" state\n","args":[],"type":"{ label : String.String, state : Nri.Ui.Button.V4.ButtonState, icon : Maybe.Maybe Nri.Ui.Icon.V3.IconType }"},{"name":"LinkConfig","comment":" Links are clickable things with a url.\n\nNOTE: Links do not support two-line labels.\n\n","args":[],"type":"{ label : String.String, icon : Maybe.Maybe Nri.Ui.Icon.V3.IconType, url : String.String, size : Nri.Ui.Button.V4.ButtonSize, style : Nri.Ui.Button.V4.ButtonStyle, width : Nri.Ui.Button.V4.ButtonWidth }"},{"name":"ToggleButtonConfig","comment":" Buttons can be toggled into a pressed state and back again.\n","args":["msg"],"type":"{ label : String.String, onSelect : msg, onDeselect : msg, pressed : Basics.Bool }"}],"values":[{"name":"button","comment":" A delightful button which can trigger an effect when clicked!\n\nThis button will trigger the passed-in message if the button state is:\n\n  - Enabled\n  - Unfulfilled\n\nThis button will be Disabled if the button state is:\n\n  - Disabled\n  - Error\n  - Loading\n  - Success\n\n","type":"Nri.Ui.Button.V4.ButtonConfig msg -> Nri.Ui.Button.V4.ButtonContent -> Accessibility.Styled.Html msg"},{"name":"copyToClipboard","comment":" See ui/src/Page/Teach/Courses/Assignments/index.coffee\nYou will need to hook this up to clipboard.js\n","type":"{ r | teach_assignments_copyWhite_svg : Nri.Ui.AssetPath.Asset } -> Nri.Ui.Button.V4.CopyToClipboardConfig -> Accessibility.Styled.Html msg"},{"name":"customButton","comment":" Exactly the same as button but you can pass in a list of attributes\n","type":"List.List (Accessibility.Styled.Attribute msg) -> Nri.Ui.Button.V4.ButtonConfig msg -> Nri.Ui.Button.V4.ButtonContent -> Accessibility.Styled.Html msg"},{"name":"delete","comment":" A delete button (blue X)\n","type":"{ r | x : String.String } -> Nri.Ui.Button.V4.DeleteButtonConfig msg -> Accessibility.Styled.Html msg"},{"name":"link","comment":" Wrap some text so it looks like a button, but actually is wrapped in an anchor to\nsome url\n","type":"Nri.Ui.Button.V4.LinkConfig -> Accessibility.Styled.Html msg"},{"name":"linkExternal","comment":" Wrap some text so it looks like a button, but actually is wrapped in an anchor to\nsome url and have it open to an external site\n","type":"Nri.Ui.Button.V4.LinkConfig -> Accessibility.Styled.Html msg"},{"name":"linkExternalWithTracking","comment":" Wrap some text so it looks like a button, but actually is wrapped in an anchor to some url and have it open to an external site\n\nThis should only take in messages that result in tracking events. For buttons that trigger other effects on the page, please use Nri.Ui.Button.V2.button instead\n\n","type":"msg -> Nri.Ui.Button.V4.LinkConfig -> Accessibility.Styled.Html msg"},{"name":"linkSpa","comment":" Use this link for routing within a single page app.\n\nThis will make a normal <a> tag, but change the Events.onClick behavior to avoid reloading the page.\n\nSee <https://github.com/elm-lang/html/issues/110> for details on this implementation.\n\n","type":"(route -> String.String) -> (route -> msg) -> { label : String.String, icon : Maybe.Maybe Nri.Ui.Icon.V3.IconType, size : Nri.Ui.Button.V4.ButtonSize, style : Nri.Ui.Button.V4.ButtonStyle, width : Nri.Ui.Button.V4.ButtonWidth, route : route } -> Accessibility.Styled.Html msg"},{"name":"linkWithMethod","comment":" Wrap some text so it looks like a button, but actually is wrapped in an anchor to\nsome url, and it's an HTTP request (Rails includes JS to make this use the given HTTP method)\n","type":"String.String -> Nri.Ui.Button.V4.LinkConfig -> Accessibility.Styled.Html msg"},{"name":"linkWithTracking","comment":" Wrap some text so it looks like a button, but actually is wrapped in an anchor to some url.\nThis should only take in messages that result in a Msg that triggers Analytics.trackAndRedirect. For buttons that trigger other effects on the page, please use Nri.Button.button instead\n","type":"msg -> Nri.Ui.Button.V4.LinkConfig -> Accessibility.Styled.Html msg"},{"name":"toggleButton","comment":" ","type":"Nri.Ui.Button.V4.ToggleButtonConfig msg -> Accessibility.Styled.Html msg"}],"binops":[]},{"name":"Nri.Ui.Button.V5","comment":"\n\n\n# Changes from V4:\n\n  - Allows links with words exceeding button-width to wrap\n  - Standardizes vertical text alignment between buttons and links\n  - Limit CSS transitions to a subset of properties to avoid unintended \"zoom\"\n    effects.\n\n\n# About:\n\nCommon NoRedInk buttons. For accessibility purposes, buttons that perform an\naction on the current page should be HTML `<button>` elements and are created here\nwith `*Button` functions. Buttons that take the user to a new page should be\nHTML `<a>` elements and are created here with `*Link` functions. Both versions\nshould be able to use the same CSS class in all cases.\n\nThere will generally be a `*Button` and `*Link` version of each button style.\n(These will be created as they are needed.)\n\nIn general a button should never truncate or obscure its contents. This could\nmake it difficult or impossible for a student or teacher to use the site, so in\ngeneral choose buttons that grow to fit their contents. It is better to risk\nweird layout than to block users. Might this be a golden rule? Of course there\nmay be exceptions, for example if button content is supplied by an end-user.\n\n\n## Common configs\n\n@docs ButtonSize, ButtonWidth, ButtonStyle, ButtonState, ButtonContent\n\n\n## `<button>` Buttons\n\n@docs ButtonConfig, button, customButton, delete, copyToClipboard, ToggleButtonConfig, toggleButton\n\n\n## `<a>` Buttons\n\n@docs LinkConfig, link, linkSpa, linkExternal, linkWithMethod, linkWithTracking, linkExternalWithTracking\n\n","unions":[{"name":"ButtonSize","comment":" Sizes for buttons and links that have button classes\n","args":[],"cases":[["Small",[]],["Medium",[]],["Large",[]]]},{"name":"ButtonState","comment":" Describes the state of a button. Has consequences for appearance and disabled attribute.\n\n  - Enabled: An enabled button. Takes the appearance of ButtonStyle\n  - Unfulfilled: A button which appears with the InactiveColors palette but is not disabled.\n  - Disabled: A button which appears with the InactiveColors palette and is disabled.\n  - Error: A button which appears with the ErrorColors palette and is disabled.\n  - Loading: A button which appears with the LoadingColors palette and is disabled\n  - Success: A button which appears with the SuccessColors palette and is disabled\n\n","args":[],"cases":[["Enabled",[]],["Unfulfilled",[]],["Disabled",[]],["Error",[]],["Loading",[]],["Success",[]]]},{"name":"ButtonStyle","comment":" Styleguide-approved styles for your buttons!\n\nNote on borderless buttons:\nA borderless button that performs an action on the current page\nThis button is intended to look like a link.\nOnly use a borderless button when the clickable text in question follows the same layout/margin/padding as a bordered button\n\n","args":[],"cases":[["Primary",[]],["Secondary",[]],["Borderless",[]],["Danger",[]],["Premium",[]]]},{"name":"ButtonWidth","comment":" Width sizing behavior for buttons.\n\n`WidthExact Int` defines a size in `px` for the button's total width, and\n`WidthUnbounded` leaves the maxiumum width unbounded (there is a minimum width).\n\n","args":[],"cases":[["WidthExact",["Basics.Int"]],["WidthUnbounded",[]]]}],"aliases":[{"name":"ButtonConfig","comment":" The part of a button that remains constant through different button states\n","args":["msg"],"type":"{ onClick : msg, size : Nri.Ui.Button.V5.ButtonSize, style : Nri.Ui.Button.V5.ButtonStyle, width : Nri.Ui.Button.V5.ButtonWidth }"},{"name":"ButtonContent","comment":" ButtonContent, often changes based on ButtonState. For example, a button in the \"Success\"\nstate may have a different label than a button in the \"Error\" state\n","args":[],"type":"{ label : String.String, state : Nri.Ui.Button.V5.ButtonState, icon : Maybe.Maybe Nri.Ui.Icon.V3.IconType }"},{"name":"LinkConfig","comment":" Links are clickable things with a url.\n\nNOTE: Links do not support two-line labels.\n\n","args":[],"type":"{ label : String.String, icon : Maybe.Maybe Nri.Ui.Icon.V3.IconType, url : String.String, size : Nri.Ui.Button.V5.ButtonSize, style : Nri.Ui.Button.V5.ButtonStyle, width : Nri.Ui.Button.V5.ButtonWidth }"},{"name":"ToggleButtonConfig","comment":" Buttons can be toggled into a pressed state and back again.\n","args":["msg"],"type":"{ label : String.String, onSelect : msg, onDeselect : msg, pressed : Basics.Bool }"}],"values":[{"name":"button","comment":" A delightful button which can trigger an effect when clicked!\n\nThis button will trigger the passed-in message if the button state is:\n\n  - Enabled\n  - Unfulfilled\n\nThis button will be Disabled if the button state is:\n\n  - Disabled\n  - Error\n  - Loading\n  - Success\n\n","type":"Nri.Ui.Button.V5.ButtonConfig msg -> Nri.Ui.Button.V5.ButtonContent -> Accessibility.Styled.Html msg"},{"name":"copyToClipboard","comment":" See ui/src/Page/Teach/Courses/Assignments/index.coffee\nYou will need to hook this up to clipboard.js\n","type":"{ r | teach_assignments_copyWhite_svg : Nri.Ui.AssetPath.Asset } -> Nri.Ui.Button.V5.CopyToClipboardConfig -> Accessibility.Styled.Html msg"},{"name":"customButton","comment":" Exactly the same as button but you can pass in a list of attributes\n","type":"List.List (Accessibility.Styled.Attribute msg) -> Nri.Ui.Button.V5.ButtonConfig msg -> Nri.Ui.Button.V5.ButtonContent -> Accessibility.Styled.Html msg"},{"name":"delete","comment":" A delete button (blue X)\n","type":"{ r | x : String.String } -> Nri.Ui.Button.V5.DeleteButtonConfig msg -> Accessibility.Styled.Html msg"},{"name":"link","comment":" Wrap some text so it looks like a button, but actually is wrapped in an anchor to\nsome url\n","type":"Nri.Ui.Button.V5.LinkConfig -> Accessibility.Styled.Html msg"},{"name":"linkExternal","comment":" Wrap some text so it looks like a button, but actually is wrapped in an anchor to\nsome url and have it open to an external site\n","type":"Nri.Ui.Button.V5.LinkConfig -> Accessibility.Styled.Html msg"},{"name":"linkExternalWithTracking","comment":" Wrap some text so it looks like a button, but actually is wrapped in an anchor to some url and have it open to an external site\n\nThis should only take in messages that result in tracking events. For buttons that trigger other effects on the page, please use Nri.Ui.Button.V2.button instead\n\n","type":"msg -> Nri.Ui.Button.V5.LinkConfig -> Accessibility.Styled.Html msg"},{"name":"linkSpa","comment":" Use this link for routing within a single page app.\n\nThis will make a normal <a> tag, but change the Events.onClick behavior to avoid reloading the page.\n\nSee <https://github.com/elm-lang/html/issues/110> for details on this implementation.\n\n","type":"(route -> String.String) -> (route -> msg) -> { label : String.String, icon : Maybe.Maybe Nri.Ui.Icon.V3.IconType, size : Nri.Ui.Button.V5.ButtonSize, style : Nri.Ui.Button.V5.ButtonStyle, width : Nri.Ui.Button.V5.ButtonWidth, route : route } -> Accessibility.Styled.Html msg"},{"name":"linkWithMethod","comment":" Wrap some text so it looks like a button, but actually is wrapped in an anchor to\nsome url, and it's an HTTP request (Rails includes JS to make this use the given HTTP method)\n","type":"String.String -> Nri.Ui.Button.V5.LinkConfig -> Accessibility.Styled.Html msg"},{"name":"linkWithTracking","comment":" Wrap some text so it looks like a button, but actually is wrapped in an anchor to some url.\nThis should only take in messages that result in a Msg that triggers Analytics.trackAndRedirect. For buttons that trigger other effects on the page, please use Nri.Button.button instead\n","type":"msg -> Nri.Ui.Button.V5.LinkConfig -> Accessibility.Styled.Html msg"},{"name":"toggleButton","comment":" ","type":"Nri.Ui.Button.V5.ToggleButtonConfig msg -> Accessibility.Styled.Html msg"}],"binops":[]},{"name":"Nri.Ui.Button.V6","comment":"\n\n\n# Changes from V5:\n\n  - Update version of Nri.Ui.Icon to V4\n\n\n# About:\n\nCommon NoRedInk buttons. For accessibility purposes, buttons that perform an\naction on the current page should be HTML `<button>` elements and are created here\nwith `*Button` functions. Buttons that take the user to a new page should be\nHTML `<a>` elements and are created here with `*Link` functions. Both versions\nshould be able to use the same CSS class in all cases.\n\nThere will generally be a `*Button` and `*Link` version of each button style.\n(These will be created as they are needed.)\n\nIn general a button should never truncate or obscure its contents. This could\nmake it difficult or impossible for a student or teacher to use the site, so in\ngeneral choose buttons that grow to fit their contents. It is better to risk\nweird layout than to block users. Might this be a golden rule? Of course there\nmay be exceptions, for example if button content is supplied by an end-user.\n\n\n## Common configs\n\n@docs ButtonSize, ButtonWidth, ButtonStyle, ButtonState, ButtonContent\n\n\n## `<button>` Buttons\n\n@docs ButtonConfig, button, customButton, delete, copyToClipboard, ToggleButtonConfig, toggleButton\n\n\n## `<a>` Buttons\n\n@docs LinkConfig, link, linkSpa, linkExternal, linkWithMethod, linkWithTracking, linkExternalWithTracking\n\n","unions":[{"name":"ButtonSize","comment":" Sizes for buttons and links that have button classes\n","args":[],"cases":[["Small",[]],["Medium",[]],["Large",[]]]},{"name":"ButtonState","comment":" Describes the state of a button. Has consequences for appearance and disabled attribute.\n\n  - Enabled: An enabled button. Takes the appearance of ButtonStyle\n  - Unfulfilled: A button which appears with the InactiveColors palette but is not disabled.\n  - Disabled: A button which appears with the InactiveColors palette and is disabled.\n  - Error: A button which appears with the ErrorColors palette and is disabled.\n  - Loading: A button which appears with the LoadingColors palette and is disabled\n  - Success: A button which appears with the SuccessColors palette and is disabled\n\n","args":[],"cases":[["Enabled",[]],["Unfulfilled",[]],["Disabled",[]],["Error",[]],["Loading",[]],["Success",[]]]},{"name":"ButtonStyle","comment":" Styleguide-approved styles for your buttons!\n\nNote on borderless buttons:\nA borderless button that performs an action on the current page\nThis button is intended to look like a link.\nOnly use a borderless button when the clickable text in question follows the same layout/margin/padding as a bordered button\n\n","args":[],"cases":[["Primary",[]],["Secondary",[]],["Borderless",[]],["Danger",[]],["Premium",[]]]},{"name":"ButtonWidth","comment":" Width sizing behavior for buttons.\n\n`WidthExact Int` defines a size in `px` for the button's total width, and\n`WidthUnbounded` leaves the maxiumum width unbounded (there is a minimum width).\n\n","args":[],"cases":[["WidthExact",["Basics.Int"]],["WidthUnbounded",[]]]}],"aliases":[{"name":"ButtonConfig","comment":" The part of a button that remains constant through different button states\n","args":["msg"],"type":"{ onClick : msg, size : Nri.Ui.Button.V6.ButtonSize, style : Nri.Ui.Button.V6.ButtonStyle, width : Nri.Ui.Button.V6.ButtonWidth }"},{"name":"ButtonContent","comment":" ButtonContent, often changes based on ButtonState. For example, a button in the \"Success\"\nstate may have a different label than a button in the \"Error\" state\n","args":[],"type":"{ label : String.String, state : Nri.Ui.Button.V6.ButtonState, icon : Maybe.Maybe Nri.Ui.Icon.V4.IconType }"},{"name":"LinkConfig","comment":" Links are clickable things with a url.\n\nNOTE: Links do not support two-line labels.\n\n","args":[],"type":"{ label : String.String, icon : Maybe.Maybe Nri.Ui.Icon.V4.IconType, url : String.String, size : Nri.Ui.Button.V6.ButtonSize, style : Nri.Ui.Button.V6.ButtonStyle, width : Nri.Ui.Button.V6.ButtonWidth }"},{"name":"ToggleButtonConfig","comment":" Buttons can be toggled into a pressed state and back again.\n","args":["msg"],"type":"{ label : String.String, onSelect : msg, onDeselect : msg, pressed : Basics.Bool }"}],"values":[{"name":"button","comment":" A delightful button which can trigger an effect when clicked!\n\nThis button will trigger the passed-in message if the button state is:\n\n  - Enabled\n  - Unfulfilled\n\nThis button will be Disabled if the button state is:\n\n  - Disabled\n  - Error\n  - Loading\n  - Success\n\n","type":"Nri.Ui.Button.V6.ButtonConfig msg -> Nri.Ui.Button.V6.ButtonContent -> Accessibility.Styled.Html msg"},{"name":"copyToClipboard","comment":" See ui/src/Page/Teach/Courses/Assignments/index.coffee\nYou will need to hook this up to clipboard.js\n","type":"{ r | teach_assignments_copyWhite_svg : Nri.Ui.AssetPath.Asset } -> Nri.Ui.Button.V6.CopyToClipboardConfig -> Accessibility.Styled.Html msg"},{"name":"customButton","comment":" Exactly the same as button but you can pass in a list of attributes\n","type":"List.List (Accessibility.Styled.Attribute msg) -> Nri.Ui.Button.V6.ButtonConfig msg -> Nri.Ui.Button.V6.ButtonContent -> Accessibility.Styled.Html msg"},{"name":"delete","comment":" A delete button (blue X)\n","type":"{ r | x : String.String } -> Nri.Ui.Button.V6.DeleteButtonConfig msg -> Accessibility.Styled.Html msg"},{"name":"link","comment":" Wrap some text so it looks like a button, but actually is wrapped in an anchor to\nsome url\n","type":"Nri.Ui.Button.V6.LinkConfig -> Accessibility.Styled.Html msg"},{"name":"linkExternal","comment":" Wrap some text so it looks like a button, but actually is wrapped in an anchor to\nsome url and have it open to an external site\n","type":"Nri.Ui.Button.V6.LinkConfig -> Accessibility.Styled.Html msg"},{"name":"linkExternalWithTracking","comment":" Wrap some text so it looks like a button, but actually is wrapped in an anchor to some url and have it open to an external site\n\nThis should only take in messages that result in tracking events. For buttons that trigger other effects on the page, please use Nri.Ui.Button.V2.button instead\n\n","type":"msg -> Nri.Ui.Button.V6.LinkConfig -> Accessibility.Styled.Html msg"},{"name":"linkSpa","comment":" Use this link for routing within a single page app.\n\nThis will make a normal <a> tag, but change the Events.onClick behavior to avoid reloading the page.\n\nSee <https://github.com/elm-lang/html/issues/110> for details on this implementation.\n\n","type":"(route -> String.String) -> (route -> msg) -> { label : String.String, icon : Maybe.Maybe Nri.Ui.Icon.V4.IconType, size : Nri.Ui.Button.V6.ButtonSize, style : Nri.Ui.Button.V6.ButtonStyle, width : Nri.Ui.Button.V6.ButtonWidth, route : route } -> Accessibility.Styled.Html msg"},{"name":"linkWithMethod","comment":" Wrap some text so it looks like a button, but actually is wrapped in an anchor to\nsome url, and it's an HTTP request (Rails includes JS to make this use the given HTTP method)\n","type":"String.String -> Nri.Ui.Button.V6.LinkConfig -> Accessibility.Styled.Html msg"},{"name":"linkWithTracking","comment":" Wrap some text so it looks like a button, but actually is wrapped in an anchor to some url.\nThis should only take in messages that result in a Msg that triggers Analytics.trackAndRedirect. For buttons that trigger other effects on the page, please use Nri.Button.button instead\n","type":"msg -> Nri.Ui.Button.V6.LinkConfig -> Accessibility.Styled.Html msg"},{"name":"toggleButton","comment":" ","type":"Nri.Ui.Button.V6.ToggleButtonConfig msg -> Accessibility.Styled.Html msg"}],"binops":[]},{"name":"Nri.Ui.Button.V7","comment":"\n\n\n# Changes from V6:\n\n  - WidthUnbounded button displays inlineFlex, so that it doesn't accidentally take up the entire width\n  - Add WidthFillContainer, for when we intend to take up the full container\n\n\n# About:\n\nCommon NoRedInk buttons. For accessibility purposes, buttons that perform an\naction on the current page should be HTML `<button>` elements and are created here\nwith `*Button` functions. Buttons that take the user to a new page should be\nHTML `<a>` elements and are created here with `*Link` functions. Both versions\nshould be able to use the same CSS class in all cases.\n\nThere will generally be a `*Button` and `*Link` version of each button style.\n(These will be created as they are needed.)\n\nIn general a button should never truncate or obscure its contents. This could\nmake it difficult or impossible for a student or teacher to use the site, so in\ngeneral choose buttons that grow to fit their contents. It is better to risk\nweird layout than to block users. Might this be a golden rule? Of course there\nmay be exceptions, for example if button content is supplied by an end-user.\n\n\n## Common configs\n\n@docs ButtonSize, ButtonWidth, ButtonStyle, ButtonState, ButtonContent\n\n\n## `<button>` Buttons\n\n@docs ButtonConfig, button, customButton, delete, copyToClipboard, ToggleButtonConfig, toggleButton\n\n\n## `<a>` Buttons\n\n@docs LinkConfig, link, linkSpa, linkExternal, linkWithMethod, linkWithTracking, linkExternalWithTracking\n\n","unions":[{"name":"ButtonSize","comment":" Sizes for buttons and links that have button classes\n","args":[],"cases":[["Small",[]],["Medium",[]],["Large",[]]]},{"name":"ButtonState","comment":" Describes the state of a button. Has consequences for appearance and disabled attribute.\n\n  - Enabled: An enabled button. Takes the appearance of ButtonStyle\n  - Unfulfilled: A button which appears with the InactiveColors palette but is not disabled.\n  - Disabled: A button which appears with the InactiveColors palette and is disabled.\n  - Error: A button which appears with the ErrorColors palette and is disabled.\n  - Loading: A button which appears with the LoadingColors palette and is disabled\n  - Success: A button which appears with the SuccessColors palette and is disabled\n\n","args":[],"cases":[["Enabled",[]],["Unfulfilled",[]],["Disabled",[]],["Error",[]],["Loading",[]],["Success",[]]]},{"name":"ButtonStyle","comment":" Styleguide-approved styles for your buttons!\n\nNote on borderless buttons:\nA borderless button that performs an action on the current page\nThis button is intended to look like a link.\nOnly use a borderless button when the clickable text in question follows the same layout/margin/padding as a bordered button\n\n","args":[],"cases":[["Primary",[]],["Secondary",[]],["Borderless",[]],["Danger",[]],["Premium",[]]]},{"name":"ButtonWidth","comment":" Width sizing behavior for buttons.\n\n`WidthExact Int` defines a size in `px` for the button's total width, and\n`WidthUnbounded` leaves the maxiumum width unbounded (there is a minimum width).\n\n","args":[],"cases":[["WidthExact",["Basics.Int"]],["WidthUnbounded",[]],["WidthFillContainer",[]]]}],"aliases":[{"name":"ButtonConfig","comment":" The part of a button that remains constant through different button states\n","args":["msg"],"type":"{ onClick : msg, size : Nri.Ui.Button.V7.ButtonSize, style : Nri.Ui.Button.V7.ButtonStyle, width : Nri.Ui.Button.V7.ButtonWidth }"},{"name":"ButtonContent","comment":" ButtonContent, often changes based on ButtonState. For example, a button in the \"Success\"\nstate may have a different label than a button in the \"Error\" state\n","args":[],"type":"{ label : String.String, state : Nri.Ui.Button.V7.ButtonState, icon : Maybe.Maybe Nri.Ui.Icon.V4.IconType }"},{"name":"LinkConfig","comment":" Links are clickable things with a url.\n\nNOTE: Links do not support two-line labels.\n\n","args":[],"type":"{ label : String.String, icon : Maybe.Maybe Nri.Ui.Icon.V4.IconType, url : String.String, size : Nri.Ui.Button.V7.ButtonSize, style : Nri.Ui.Button.V7.ButtonStyle, width : Nri.Ui.Button.V7.ButtonWidth }"},{"name":"ToggleButtonConfig","comment":" Buttons can be toggled into a pressed state and back again.\n","args":["msg"],"type":"{ label : String.String, onSelect : msg, onDeselect : msg, pressed : Basics.Bool }"}],"values":[{"name":"button","comment":" A delightful button which can trigger an effect when clicked!\n\nThis button will trigger the passed-in message if the button state is:\n\n  - Enabled\n  - Unfulfilled\n\nThis button will be Disabled if the button state is:\n\n  - Disabled\n  - Error\n  - Loading\n  - Success\n\n","type":"Nri.Ui.Button.V7.ButtonConfig msg -> Nri.Ui.Button.V7.ButtonContent -> Accessibility.Styled.Html msg"},{"name":"copyToClipboard","comment":" See ui/src/Page/Teach/Courses/Assignments/index.coffee\nYou will need to hook this up to clipboard.js\n","type":"{ r | teach_assignments_copyWhite_svg : Nri.Ui.AssetPath.Asset } -> Nri.Ui.Button.V7.CopyToClipboardConfig -> Accessibility.Styled.Html msg"},{"name":"customButton","comment":" Exactly the same as button but you can pass in a list of attributes\n","type":"List.List (Accessibility.Styled.Attribute msg) -> Nri.Ui.Button.V7.ButtonConfig msg -> Nri.Ui.Button.V7.ButtonContent -> Accessibility.Styled.Html msg"},{"name":"delete","comment":" A delete button (blue X)\n","type":"{ r | x : String.String } -> Nri.Ui.Button.V7.DeleteButtonConfig msg -> Accessibility.Styled.Html msg"},{"name":"link","comment":" Wrap some text so it looks like a button, but actually is wrapped in an anchor to\nsome url\n","type":"Nri.Ui.Button.V7.LinkConfig -> Accessibility.Styled.Html msg"},{"name":"linkExternal","comment":" Wrap some text so it looks like a button, but actually is wrapped in an anchor to\nsome url and have it open to an external site\n","type":"Nri.Ui.Button.V7.LinkConfig -> Accessibility.Styled.Html msg"},{"name":"linkExternalWithTracking","comment":" Wrap some text so it looks like a button, but actually is wrapped in an anchor to some url and have it open to an external site\n\nThis should only take in messages that result in tracking events. For buttons that trigger other effects on the page, please use Nri.Ui.Button.V2.button instead\n\n","type":"msg -> Nri.Ui.Button.V7.LinkConfig -> Accessibility.Styled.Html msg"},{"name":"linkSpa","comment":" Use this link for routing within a single page app.\n\nThis will make a normal <a> tag, but change the Events.onClick behavior to avoid reloading the page.\n\nSee <https://github.com/elm-lang/html/issues/110> for details on this implementation.\n\n","type":"(route -> String.String) -> (route -> msg) -> { label : String.String, icon : Maybe.Maybe Nri.Ui.Icon.V4.IconType, size : Nri.Ui.Button.V7.ButtonSize, style : Nri.Ui.Button.V7.ButtonStyle, width : Nri.Ui.Button.V7.ButtonWidth, route : route } -> Accessibility.Styled.Html msg"},{"name":"linkWithMethod","comment":" Wrap some text so it looks like a button, but actually is wrapped in an anchor to\nsome url, and it's an HTTP request (Rails includes JS to make this use the given HTTP method)\n","type":"String.String -> Nri.Ui.Button.V7.LinkConfig -> Accessibility.Styled.Html msg"},{"name":"linkWithTracking","comment":" Wrap some text so it looks like a button, but actually is wrapped in an anchor to some url.\nThis should only take in messages that result in a Msg that triggers Analytics.trackAndRedirect. For buttons that trigger other effects on the page, please use Nri.Button.button instead\n","type":"msg -> Nri.Ui.Button.V7.LinkConfig -> Accessibility.Styled.Html msg"},{"name":"toggleButton","comment":" ","type":"Nri.Ui.Button.V7.ToggleButtonConfig msg -> Accessibility.Styled.Html msg"}],"binops":[]},{"name":"Nri.Ui.Button.V8","comment":"\n\n\n# Changes from V7:\n\n  - Removes dependency on Icon that makes versioned assets hard to work with\n  - Removes copyToClipboard, which has additional dependencies and also isn't broadly used\n  - Removes customButton from what's exposed, as it's not in use\n  - Removes Borderless style (use ClickableText instead)\n\n\n# About:\n\nCommon NoRedInk buttons. For accessibility purposes, buttons that perform an\naction on the current page should be HTML `<button>` elements and are created here\nwith `*Button` functions. Buttons that take the user to a new page should be\nHTML `<a>` elements and are created here with `*Link` functions. Both versions\nshould be able to use the same CSS class in all cases.\n\nThere will generally be a `*Button` and `*Link` version of each button style.\n(These will be created as they are needed.)\n\nIn general a button should never truncate or obscure its contents. This could\nmake it difficult or impossible for a student or teacher to use the site, so in\ngeneral choose buttons that grow to fit their contents. It is better to risk\nweird layout than to block users. Might this be a golden rule? Of course there\nmay be exceptions, for example if button content is supplied by an end-user.\n\n\n## Common configs\n\n@docs ButtonSize, ButtonWidth, ButtonStyle, ButtonState\n\n\n## `<button>` Buttons\n\n@docs button\n@docs delete\n@docs toggleButton\n\n\n## `<a>` Buttons\n\n@docs link, linkSpa\n@docs linkExternal, linkWithMethod, linkWithTracking, linkExternalWithTracking\n\n","unions":[{"name":"ButtonSize","comment":" Sizes for buttons and links that have button classes\n","args":[],"cases":[["Small",[]],["Medium",[]],["Large",[]]]},{"name":"ButtonState","comment":" Describes the state of a button. Has consequences for appearance and disabled attribute.\n\n  - Enabled: An enabled button. Takes the appearance of ButtonStyle\n  - Unfulfilled: A button which appears with the InactiveColors palette but is not disabled.\n  - Disabled: A button which appears with the InactiveColors palette and is disabled.\n  - Error: A button which appears with the ErrorColors palette and is disabled.\n  - Loading: A button which appears with the LoadingColors palette and is disabled\n  - Success: A button which appears with the SuccessColors palette and is disabled\n\n","args":[],"cases":[["Enabled",[]],["Unfulfilled",[]],["Disabled",[]],["Error",[]],["Loading",[]],["Success",[]]]},{"name":"ButtonStyle","comment":" Styleguide-approved styles for your buttons!\n","args":[],"cases":[["Primary",[]],["Secondary",[]],["Danger",[]],["Premium",[]]]},{"name":"ButtonWidth","comment":" Width sizing behavior for buttons.\n\n`WidthExact Int` defines a size in `px` for the button's total width, and\n`WidthUnbounded` leaves the maxiumum width unbounded (there is a minimum width).\n\n","args":[],"cases":[["WidthExact",["Basics.Int"]],["WidthUnbounded",[]],["WidthFillContainer",[]]]}],"aliases":[],"values":[{"name":"button","comment":" A delightful button which can trigger an effect when clicked!\n\nThis button will trigger the passed-in message if the button state is:\n\n  - Enabled\n  - Unfulfilled\n\nThis button will be Disabled if the button state is:\n\n  - Disabled\n  - Error\n  - Loading\n  - Success\n\n","type":"{ onClick : msg, size : Nri.Ui.Button.V8.ButtonSize, style : Nri.Ui.Button.V8.ButtonStyle, width : Nri.Ui.Button.V8.ButtonWidth } -> { label : String.String, state : Nri.Ui.Button.V8.ButtonState, icon : Maybe.Maybe Nri.Ui.Svg.V1.Svg } -> Accessibility.Styled.Html msg"},{"name":"delete","comment":" A delete button (blue X)\n","type":"{ label : String.String, onClick : msg } -> Accessibility.Styled.Html msg"},{"name":"link","comment":" Wrap some text so it looks like a button, but actually is wrapped in an anchor to\nsome url.\n\nNOTE: Links do not support two-line labels.\n\n","type":"{ label : String.String, icon : Maybe.Maybe Nri.Ui.Svg.V1.Svg, url : String.String, size : Nri.Ui.Button.V8.ButtonSize, style : Nri.Ui.Button.V8.ButtonStyle, width : Nri.Ui.Button.V8.ButtonWidth } -> Accessibility.Styled.Html msg"},{"name":"linkExternal","comment":" Wrap some text so it looks like a button, but actually is wrapped in an anchor to\nsome url and have it open to an external site\n","type":"{ label : String.String, icon : Maybe.Maybe Nri.Ui.Svg.V1.Svg, url : String.String, size : Nri.Ui.Button.V8.ButtonSize, style : Nri.Ui.Button.V8.ButtonStyle, width : Nri.Ui.Button.V8.ButtonWidth } -> Accessibility.Styled.Html msg"},{"name":"linkExternalWithTracking","comment":" Wrap some text so it looks like a button, but actually is wrapped in an anchor to some url and have it open to an external site\n\nThis should only take in messages that result in tracking events. For buttons that trigger other effects on the page, please use Nri.Ui.Button.V2.button instead\n\n","type":"msg -> { label : String.String, icon : Maybe.Maybe Nri.Ui.Svg.V1.Svg, url : String.String, size : Nri.Ui.Button.V8.ButtonSize, style : Nri.Ui.Button.V8.ButtonStyle, width : Nri.Ui.Button.V8.ButtonWidth } -> Accessibility.Styled.Html msg"},{"name":"linkSpa","comment":" Use this link for routing within a single page app.\n\nThis will make a normal <a> tag, but change the Events.onClick behavior to avoid reloading the page.\n\nSee <https://github.com/elm-lang/html/issues/110> for details on this implementation.\n\n","type":"(route -> String.String) -> (route -> msg) -> { label : String.String, icon : Maybe.Maybe Nri.Ui.Svg.V1.Svg, size : Nri.Ui.Button.V8.ButtonSize, style : Nri.Ui.Button.V8.ButtonStyle, width : Nri.Ui.Button.V8.ButtonWidth, route : route } -> Accessibility.Styled.Html msg"},{"name":"linkWithMethod","comment":" Wrap some text so it looks like a button, but actually is wrapped in an anchor to\nsome url, and it's an HTTP request (Rails includes JS to make this use the given HTTP method)\n","type":"String.String -> { label : String.String, icon : Maybe.Maybe Nri.Ui.Svg.V1.Svg, url : String.String, size : Nri.Ui.Button.V8.ButtonSize, style : Nri.Ui.Button.V8.ButtonStyle, width : Nri.Ui.Button.V8.ButtonWidth } -> Accessibility.Styled.Html msg"},{"name":"linkWithTracking","comment":" Wrap some text so it looks like a button, but actually is wrapped in an anchor to some url.\nThis should only take in messages that result in a Msg that triggers Analytics.trackAndRedirect. For buttons that trigger other effects on the page, please use Nri.Button.button instead\n","type":"msg -> { label : String.String, icon : Maybe.Maybe Nri.Ui.Svg.V1.Svg, url : String.String, size : Nri.Ui.Button.V8.ButtonSize, style : Nri.Ui.Button.V8.ButtonStyle, width : Nri.Ui.Button.V8.ButtonWidth } -> Accessibility.Styled.Html msg"},{"name":"toggleButton","comment":" A button that can be toggled into a pressed state and back again.\n","type":"{ label : String.String, onSelect : msg, onDeselect : msg, pressed : Basics.Bool } -> Accessibility.Styled.Html msg"}],"binops":[]},{"name":"Nri.Ui.Button.V9","comment":"\n\n\n# Changes from V8:\n\n  - Changes API to be attribute-based, rather than config-based\n\n\n# Create a button or link\n\n@docs button, link\n@docs Attribute\n@docs icon, custom\n\n\n## Behavior\n\n@docs onClick\n@docs href, linkSpa, linkExternal, linkWithMethod, linkWithTracking, linkExternalWithTracking\n\n\n## Sizing\n\n@docs small, medium, large\n@docs exactWidth, unboundedWidth, fillContainerWidth\n\n\n## Change the color scheme\n\n@docs primary, secondary, danger, premium\n\n\n## Change the state (buttons only)\n\n@docs enabled, unfulfilled, disabled, error, loading, success\n\n\n# Commonly-used buttons\n\n@docs delete\n@docs toggleButton\n\n","unions":[{"name":"Attribute","comment":" ","args":["msg"],"cases":[]}],"aliases":[],"values":[{"name":"button","comment":"\n\n    Button.button \"My great button!\"\n        [ Button.onClick ()\n        , Button.enabled\n        ]\n\nBy default, the button is enabled, Medium sized, with primary colors, and an unbounded width.\n\n","type":"String.String -> List.List (Nri.Ui.Button.V9.Attribute msg) -> Accessibility.Styled.Html msg"},{"name":"custom","comment":" ","type":"List.List (Accessibility.Styled.Attribute msg) -> Nri.Ui.Button.V9.Attribute msg"},{"name":"danger","comment":" ","type":"Nri.Ui.Button.V9.Attribute msg"},{"name":"delete","comment":" A delete button (blue X)\n","type":"{ label : String.String, onClick : msg } -> Accessibility.Styled.Html msg"},{"name":"disabled","comment":" Shows inactive styling. If a button, this attribute will disable it.\n","type":"Nri.Ui.Button.V9.Attribute msg"},{"name":"enabled","comment":" ","type":"Nri.Ui.Button.V9.Attribute msg"},{"name":"error","comment":" Shows error styling. If a button, this attribute will disable it.\n","type":"Nri.Ui.Button.V9.Attribute msg"},{"name":"exactWidth","comment":" Define a size in `px` for the button's total width.\n","type":"Basics.Int -> Nri.Ui.Button.V9.Attribute msg"},{"name":"fillContainerWidth","comment":" ","type":"Nri.Ui.Button.V9.Attribute msg"},{"name":"href","comment":" ","type":"String.String -> Nri.Ui.Button.V9.Attribute msg"},{"name":"icon","comment":" ","type":"Nri.Ui.Svg.V1.Svg -> Nri.Ui.Button.V9.Attribute msg"},{"name":"large","comment":" ","type":"Nri.Ui.Button.V9.Attribute msg"},{"name":"link","comment":"\n\n    Button.link \"My great link!\"\n        [ Button.href \"My href\"\n        , Button.secondary\n        ]\n\nBy default, the link is Medium sized, with primary colors, and an unbounded width.\n\n","type":"String.String -> List.List (Nri.Ui.Button.V9.Attribute msg) -> Accessibility.Styled.Html msg"},{"name":"linkExternal","comment":" Wrap some text so it looks like a button, but actually is wrapped in an anchor to\nsome url and have it open to an external site\n","type":"String.String -> Nri.Ui.Button.V9.Attribute msg"},{"name":"linkExternalWithTracking","comment":" Wrap some text so it looks like a button, but actually is wrapped in an anchor to some url and have it open to an external site.\n","type":"{ track : msg, url : String.String } -> Nri.Ui.Button.V9.Attribute msg"},{"name":"linkSpa","comment":" Use this link for routing within a single page app.\n\nThis will make a normal <a> tag, but change the Events.onClick behavior to avoid reloading the page.\n\nSee <https://github.com/elm-lang/html/issues/110> for details on this implementation.\n\n","type":"String.String -> Nri.Ui.Button.V9.Attribute msg"},{"name":"linkWithMethod","comment":" Wrap some text so it looks like a button, but actually is wrapped in an anchor to\nsome url, and it's an HTTP request (Rails includes JS to make this use the given HTTP method)\n","type":"{ method : String.String, url : String.String } -> Nri.Ui.Button.V9.Attribute msg"},{"name":"linkWithTracking","comment":" Wrap some text so it looks like a button, but actually is wrapped in an anchor to some url.\nThis should only take in messages that result in a Msg that triggers Analytics.trackAndRedirect.\nFor buttons that trigger other effects on the page, please use Nri.Button.button instead.\n","type":"{ track : msg, url : String.String } -> Nri.Ui.Button.V9.Attribute msg"},{"name":"loading","comment":" Shows loading styling. If a button, this attribute will disable it.\n","type":"Nri.Ui.Button.V9.Attribute msg"},{"name":"medium","comment":" ","type":"Nri.Ui.Button.V9.Attribute msg"},{"name":"onClick","comment":" ","type":"msg -> Nri.Ui.Button.V9.Attribute msg"},{"name":"premium","comment":" ","type":"Nri.Ui.Button.V9.Attribute msg"},{"name":"primary","comment":" ","type":"Nri.Ui.Button.V9.Attribute msg"},{"name":"secondary","comment":" ","type":"Nri.Ui.Button.V9.Attribute msg"},{"name":"small","comment":" ","type":"Nri.Ui.Button.V9.Attribute msg"},{"name":"success","comment":" Shows success styling. If a button, this attribute will disable it.\n","type":"Nri.Ui.Button.V9.Attribute msg"},{"name":"toggleButton","comment":" A button that can be toggled into a pressed state and back again.\n","type":"{ label : String.String, onSelect : msg, onDeselect : msg, pressed : Basics.Bool } -> Accessibility.Styled.Html msg"},{"name":"unboundedWidth","comment":" Leave the maxiumum width unbounded (there is a minimum width).\n","type":"Nri.Ui.Button.V9.Attribute msg"},{"name":"unfulfilled","comment":" Shows inactive styles.\n","type":"Nri.Ui.Button.V9.Attribute msg"}],"binops":[]},{"name":"Nri.Ui.Callout.V1","comment":"\n\n@docs Attribute, callout\n\n@docs label\n\n@docs containerCss, contentCss\n\n@docs custom\n\n","unions":[{"name":"Attribute","comment":" Attributes of callouts. Use functions like [`label`](#label) and\n[`containerCss`](#containerCss) to construct these.\n","args":["msg"],"cases":[]}],"aliases":[],"values":[{"name":"callout","comment":" Render a callout. Use this like any other HTML node, but with specific\nattribute constructors.\n\n    callout\n        [ label (Html.text \"BETA\") ]\n        [ Html.text \"This feature is still in beta. Careful of sharp edges.\" ]\n\n","type":"List.List (Nri.Ui.Callout.V1.Attribute msg) -> List.List (Html.Styled.Html msg) -> Html.Styled.Html msg"},{"name":"containerCss","comment":" Customize styles for the outermost element of the callout. Use this to\nadjust margin and padding around the callout (it does not have any of either by\ndefault, but it does set `box-size: border-box` on itself).\n\n    containerCss [ Css.marginBottom (Css.px 20) ]\n\nThese styles are applied after the default styles so you can override the\ndefaults when necessary without using `!important`\n\n","type":"List.List Css.Style -> Nri.Ui.Callout.V1.Attribute msg"},{"name":"contentCss","comment":" Customize styles for the parent element of the content you provide. Use\nthis to override spacing inside the callout, if necessary.\n\n    contentCss [ Css.textTransform Css.uppercase ]\n\nThese styles are applied after the default styles so you can override the\ndefaults when necessary without using `!important`\n\n","type":"List.List Css.Style -> Nri.Ui.Callout.V1.Attribute msg"},{"name":"custom","comment":" Add custom attributes. This is your gateway to customize (or break) the\ncallout however you want, so be careful! If you find yourself doing this a lot,\nplease consider adding another `Attribute` constructor to the module.\n\n    custom (title \"beta warning\")\n\n","type":"Html.Styled.Attribute msg -> Nri.Ui.Callout.V1.Attribute msg"},{"name":"label","comment":" Label the callout.\n\n    label (Html.text \"Hello, World\")\n\n","type":"Html.Styled.Html msg -> Nri.Ui.Callout.V1.Attribute msg"}],"binops":[]},{"name":"Nri.Ui.Checkbox.V3","comment":"\n\n@docs Model, Theme, IsSelected\n\n@docs view, viewWithLabel, Assets\n\n@docs selectedFromBool\n\n","unions":[{"name":"IsSelected","comment":"\n\n    = Selected --  Checked (rendered with a checkmark)\n    | NotSelected -- Not Checked (rendered blank)\n    | PartiallySelected -- Indeterminate (rendered dash)\n\n","args":[],"cases":[["Selected",[]],["NotSelected",[]],["PartiallySelected",[]]]},{"name":"Theme","comment":" ","args":[],"cases":[["Square",[]],["Locked",[]]]}],"aliases":[{"name":"Assets","comment":" The assets used in this module.\n","args":["r"],"type":"{ r | checkboxUnchecked_svg : Nri.Ui.AssetPath.Asset, checkboxChecked_svg : Nri.Ui.AssetPath.Asset, checkboxCheckedPartially_svg : Nri.Ui.AssetPath.Asset, checkboxLockOnInside_svg : Nri.Ui.AssetPath.Asset }"},{"name":"Model","comment":" ","args":["msg"],"type":"{ identifier : String.String, label : String.String, setterMsg : Basics.Bool -> msg, selected : Nri.Ui.Checkbox.V3.IsSelected, disabled : Basics.Bool, theme : Nri.Ui.Checkbox.V3.Theme, noOpMsg : msg }"}],"values":[{"name":"selectedFromBool","comment":" If your selectedness is always selected or not selected,\nyou will likely store that state as a `Bool` in your model.\n`selectedFromBool` lets you easily convert that into an `IsSelected` value\nfor use with `Nri.Ui.Checkbox`.\n","type":"Basics.Bool -> Nri.Ui.Checkbox.V3.IsSelected"},{"name":"view","comment":" Shows a checkbox (the label is only used for accessibility hints)\n","type":"Nri.Ui.Checkbox.V3.Assets a -> Nri.Ui.Checkbox.V3.Model msg -> Accessibility.Styled.Html msg"},{"name":"viewWithLabel","comment":" Shows a checkbox and its label text\n","type":"Nri.Ui.Checkbox.V3.Assets a -> Nri.Ui.Checkbox.V3.Model msg -> Accessibility.Styled.Html msg"}],"binops":[]},{"name":"Nri.Ui.Checkbox.V4","comment":"\n\n@docs Model, Theme, IsSelected\n\n@docs view, viewWithLabel, Assets\n\n@docs selectedFromBool\n\n","unions":[{"name":"IsSelected","comment":"\n\n    = Selected --  Checked (rendered with a checkmark)\n    | NotSelected -- Not Checked (rendered blank)\n    | PartiallySelected -- Indeterminate (rendered dash)\n\n","args":[],"cases":[["Selected",[]],["NotSelected",[]],["PartiallySelected",[]]]},{"name":"Theme","comment":" ","args":[],"cases":[["Square",[]],["Locked",[]]]}],"aliases":[{"name":"Assets","comment":" The assets used in this module.\n","args":["r"],"type":"{ r | checkboxUnchecked_svg : Nri.Ui.AssetPath.Asset, checkboxChecked_svg : Nri.Ui.AssetPath.Asset, checkboxCheckedPartially_svg : Nri.Ui.AssetPath.Asset, checkboxLockOnInside_svg : Nri.Ui.AssetPath.Asset }"},{"name":"Model","comment":" ","args":["msg"],"type":"{ identifier : String.String, label : String.String, setterMsg : Basics.Bool -> msg, selected : Nri.Ui.Checkbox.V4.IsSelected, disabled : Basics.Bool, theme : Nri.Ui.Checkbox.V4.Theme, noOpMsg : msg }"}],"values":[{"name":"selectedFromBool","comment":" If your selectedness is always selected or not selected,\nyou will likely store that state as a `Bool` in your model.\n`selectedFromBool` lets you easily convert that into an `IsSelected` value\nfor use with `Nri.Ui.Checkbox`.\n","type":"Basics.Bool -> Nri.Ui.Checkbox.V4.IsSelected"},{"name":"view","comment":" Shows a checkbox (the label is only used for accessibility hints)\n","type":"Nri.Ui.Checkbox.V4.Assets a -> Nri.Ui.Checkbox.V4.Model msg -> Accessibility.Styled.Html msg"},{"name":"viewWithLabel","comment":" Shows a checkbox and its label text\n","type":"Nri.Ui.Checkbox.V4.Assets a -> Nri.Ui.Checkbox.V4.Model msg -> Accessibility.Styled.Html msg"}],"binops":[]},{"name":"Nri.Ui.Checkbox.V5","comment":"\n\n\n# Changes from V5:\n\n  - Removes `noOpMsg` from Model\n  - Removes dependency on external assets\n\n@docs Model, Theme, IsSelected\n\n@docs view, viewWithLabel\n\n@docs selectedFromBool\n\n","unions":[{"name":"IsSelected","comment":"\n\n    = Selected --  Checked (rendered with a checkmark)\n    | NotSelected -- Not Checked (rendered blank)\n    | PartiallySelected -- Indeterminate (rendered dash)\n\n","args":[],"cases":[["Selected",[]],["NotSelected",[]],["PartiallySelected",[]]]},{"name":"Theme","comment":" ","args":[],"cases":[["Square",[]],["Locked",[]]]}],"aliases":[{"name":"Model","comment":" ","args":["msg"],"type":"{ identifier : String.String, label : String.String, setterMsg : Basics.Bool -> msg, selected : Nri.Ui.Checkbox.V5.IsSelected, disabled : Basics.Bool, theme : Nri.Ui.Checkbox.V5.Theme }"}],"values":[{"name":"selectedFromBool","comment":" If your selectedness is always selected or not selected,\nyou will likely store that state as a `Bool` in your model.\n`selectedFromBool` lets you easily convert that into an `IsSelected` value\nfor use with `Nri.Ui.Checkbox`.\n","type":"Basics.Bool -> Nri.Ui.Checkbox.V5.IsSelected"},{"name":"view","comment":" Shows a checkbox (the label is only used for accessibility hints)\n","type":"Nri.Ui.Checkbox.V5.Model msg -> Accessibility.Styled.Html msg"},{"name":"viewWithLabel","comment":" Shows a checkbox and its label text\n","type":"Nri.Ui.Checkbox.V5.Model msg -> Accessibility.Styled.Html msg"}],"binops":[]},{"name":"Nri.Ui.ClickableSvg.V1","comment":"\n\n\n# Create a button or link\n\n@docs button, link\n@docs Attribute\n\n\n## Behavior\n\n@docs onClick\n@docs href, linkSpa, linkExternal, linkWithMethod, linkWithTracking, linkExternalWithTracking\n\n\n## Sizing\n\n@docs width, height\n\n\n## State\n\n@docs disabled\n\n\n## Customization\n\n@docs custom, css\n\n","unions":[{"name":"Attribute","comment":" ","args":["msg"],"cases":[]}],"aliases":[],"values":[{"name":"button","comment":" ","type":"String.String -> Nri.Ui.Svg.V1.Svg -> List.List (Nri.Ui.ClickableSvg.V1.Attribute msg) -> Html.Styled.Html msg"},{"name":"css","comment":" ","type":"List.List Css.Style -> Nri.Ui.ClickableSvg.V1.Attribute msg"},{"name":"custom","comment":" Use this helper to add custom attributes.\n\nDo NOT use this helper to add css styles, as they may not be applied the way\nyou want/expect if underlying Button styles change.\nInstead, please use the `css` helper.\n\n","type":"List.List (Html.Styled.Attribute msg) -> Nri.Ui.ClickableSvg.V1.Attribute msg"},{"name":"disabled","comment":" ","type":"Basics.Bool -> Nri.Ui.ClickableSvg.V1.Attribute msg"},{"name":"height","comment":" Default height is 17px.\n\nNote: changing this height will change the height of the icon. The button or link\nmay be taller if you add a border or margin to it.\n\n","type":"Css.Px -> Nri.Ui.ClickableSvg.V1.Attribute msg"},{"name":"href","comment":" ","type":"String.String -> Nri.Ui.ClickableSvg.V1.Attribute msg"},{"name":"link","comment":" ","type":"String.String -> Nri.Ui.Svg.V1.Svg -> List.List (Nri.Ui.ClickableSvg.V1.Attribute msg) -> Html.Styled.Html msg"},{"name":"linkExternal","comment":" Wrap some text so it looks like a button, but actually is wrapped in an anchor to\nsome url and have it open to an external site\n","type":"String.String -> Nri.Ui.ClickableSvg.V1.Attribute msg"},{"name":"linkExternalWithTracking","comment":" Wrap some text so it looks like a button, but actually is wrapped in an anchor to some url and have it open to an external site.\n","type":"{ track : msg, url : String.String } -> Nri.Ui.ClickableSvg.V1.Attribute msg"},{"name":"linkSpa","comment":" Use this link for routing within a single page app.\n\nThis will make a normal <a> tag, but change the Events.onClick behavior to avoid reloading the page.\n\nSee <https://github.com/elm-lang/html/issues/110> for details on this implementation.\n\n","type":"String.String -> Nri.Ui.ClickableSvg.V1.Attribute msg"},{"name":"linkWithMethod","comment":" Wrap some text so it looks like a button, but actually is wrapped in an anchor to\nsome url, and it's an HTTP request (Rails includes JS to make this use the given HTTP method)\n","type":"{ method : String.String, url : String.String } -> Nri.Ui.ClickableSvg.V1.Attribute msg"},{"name":"linkWithTracking","comment":" Wrap some text so it looks like a button, but actually is wrapped in an anchor to some url.\nThis should only take in messages that result in a Msg that triggers Analytics.trackAndRedirect.\nFor buttons that trigger other effects on the page, please use Nri.Button.button instead.\n","type":"{ track : msg, url : String.String } -> Nri.Ui.ClickableSvg.V1.Attribute msg"},{"name":"onClick","comment":" ","type":"msg -> Nri.Ui.ClickableSvg.V1.Attribute msg"},{"name":"width","comment":" Default width is 17px.\n\nNote: changing this width will change the width of the icon. The button or link\nmay be wider if you add a border or margin to it.\n\n","type":"Css.Px -> Nri.Ui.ClickableSvg.V1.Attribute msg"}],"binops":[]},{"name":"Nri.Ui.ClickableText.V1","comment":"\n\n\n# About:\n\nClickableText looks different from Nri.Ui.Button in that it displays without margin or padding.\nClickableText has the suave, traditional look of a \"link\"!\n\nFor accessibility purposes, buttons that perform an action on the current page should be HTML `<button>`\nelements and are created here with `*Button` functions. Buttons that take the user to a new page should be\nHTML `<a>` elements and are created here with `*Link` functions.\n\n\n# `<button>` creators\n\n@docs ButtonConfig, button\n\n\n# `<a>` creators\n\n@docs LinkConfig, link\n\n\n# Config\n\n@docs Size\n\n","unions":[{"name":"Size","comment":" Sizes for the button\n","args":[],"cases":[["Small",[]],["Medium",[]],["Large",[]]]}],"aliases":[{"name":"ButtonConfig","comment":" Config for the button\n","args":["msg"],"type":"{ label : String.String, size : Nri.Ui.ClickableText.V1.Size, icon : Maybe.Maybe Nri.Ui.Icon.V4.IconType, onClick : msg }"},{"name":"LinkConfig","comment":" Config for the link\n","args":[],"type":"{ label : String.String, size : Nri.Ui.ClickableText.V1.Size, icon : Maybe.Maybe Nri.Ui.Icon.V4.IconType, url : String.String }"}],"values":[{"name":"button","comment":" Creates a `<button>` element\n","type":"Nri.Ui.ClickableText.V1.ButtonConfig msg -> Html.Styled.Html msg"},{"name":"link","comment":" Creates a `<a>` element\n","type":"Nri.Ui.ClickableText.V1.LinkConfig -> List.List (Html.Styled.Attribute msg) -> Html.Styled.Html msg"}],"binops":[]},{"name":"Nri.Ui.ClickableText.V2","comment":"\n\n\n# Changes from V1\n\n  - Removes dependency on Icon that makes versioned assets hard to work with\n  - Fixes vertical alignment of icons\n  - Inlines configs to make parsing documentation easier\n\n\n# About:\n\nClickableText looks different from Nri.Ui.Button in that it displays without margin or padding.\nClickableText has the suave, traditional look of a \"link\"!\n\nFor accessibility purposes, buttons that perform an action on the current page should be HTML `<button>`\nelements and are created here with `*Button` functions. Buttons that take the user to a new page should be\nHTML `<a>` elements and are created here with `*Link` functions.\n\n\n# `<button>` creators\n\n@docs button\n\n\n# `<a>` creators\n\n@docs link\n\n\n# Config\n\n@docs Size\n\n","unions":[{"name":"Size","comment":" Sizes for the button\n","args":[],"cases":[["Small",[]],["Medium",[]],["Large",[]]]}],"aliases":[],"values":[{"name":"button","comment":" Creates a `<button>` element\n","type":"{ label : String.String, size : Nri.Ui.ClickableText.V2.Size, icon : Maybe.Maybe Nri.Ui.Svg.V1.Svg, onClick : msg } -> Html.Styled.Html msg"},{"name":"link","comment":" Creates a `<a>` element\n","type":"{ label : String.String, size : Nri.Ui.ClickableText.V2.Size, icon : Maybe.Maybe Nri.Ui.Svg.V1.Svg, url : String.String } -> List.List (Html.Styled.Attribute msg) -> Html.Styled.Html msg"}],"binops":[]},{"name":"Nri.Ui.ClickableText.V3","comment":"\n\n\n# Post-release patches\n\n  - adds `css` helper\n  - add bottom border on hover instead of text decoration\n\n\n# Changes from V2\n\n  - Changes API to be attributes-based rather than config-based\n  - Makes a hole for custom attributes (like ids and styles)\n\n\n# About:\n\nClickableText looks different from Nri.Ui.Button in that it displays without margin or padding.\nClickableText has the suave, traditional look of a \"link\"!\n\nFor accessibility purposes, buttons that perform an action on the current page should be HTML `<button>`\nelements and are created here with `*Button` functions. Buttons that take the user to a new page should be\nHTML `<a>` elements and are created here with `*Link` functions.\n\n\n# `<button>` creators\n\n@docs button\n\n\n# `<a>` creators\n\n@docs link\n\n\n# Attributes\n\n@docs Attribute\n@docs small, medium, large\n@docs href, onClick\n@docs icon\n@docs custom, css\n\n","unions":[{"name":"Attribute","comment":" ","args":["msg"],"cases":[]}],"aliases":[],"values":[{"name":"button","comment":" Creates a `<button>` element\n","type":"String.String -> List.List (Nri.Ui.ClickableText.V3.Attribute msg) -> Html.Styled.Html msg"},{"name":"css","comment":" ","type":"List.List Css.Style -> Nri.Ui.ClickableText.V3.Attribute msg"},{"name":"custom","comment":" Use this helper to add custom attributes.\n\nDo NOT use this helper to add css styles, as they may not be applied the way\nyou want/expect if underlying Button styles change.\nInstead, please use the `css` helper.\n\n","type":"List.List (Html.Styled.Attribute msg) -> Nri.Ui.ClickableText.V3.Attribute msg"},{"name":"href","comment":" ","type":"String.String -> Nri.Ui.ClickableText.V3.Attribute msg"},{"name":"icon","comment":" ","type":"Nri.Ui.Svg.V1.Svg -> Nri.Ui.ClickableText.V3.Attribute msg"},{"name":"large","comment":" ","type":"Nri.Ui.ClickableText.V3.Attribute msg"},{"name":"link","comment":" Creates a `<a>` element\n","type":"String.String -> List.List (Nri.Ui.ClickableText.V3.Attribute msg) -> Html.Styled.Html msg"},{"name":"medium","comment":" ","type":"Nri.Ui.ClickableText.V3.Attribute msg"},{"name":"onClick","comment":" ","type":"msg -> Nri.Ui.ClickableText.V3.Attribute msg"},{"name":"small","comment":" ","type":"Nri.Ui.ClickableText.V3.Attribute msg"}],"binops":[]},{"name":"Nri.Ui.Colors.Extra","comment":" Helpers for working with colors.\n\n\n# Conversions\n\n@docs toCssColor, fromCssColor\n@docs withAlpha\n\n","unions":[],"aliases":[],"values":[{"name":"fromCssColor","comment":" ","type":"Css.Color -> Color.Color"},{"name":"toCssColor","comment":" ","type":"Color.Color -> Css.Color"},{"name":"withAlpha","comment":" Add an alpha property to a Css.Color\ngrassland -- \"{ value = \"#56bf74\", color = Compatible, red = 86, green = 191, blue = 116, alpha = 1, warnings = [] } : Css.Color\"\nwithAlpha 0.5 grassland -- \"{ value = \"rgba(86, 191, 116, 0.5)\", color = Compatible, warnings = [], red = 86, green = 191, blue = 116, alpha = 0.5 } : Css.Color\"\n","type":"Basics.Float -> Css.Color -> Css.Color"}],"binops":[]},{"name":"Nri.Ui.Colors.V1","comment":" Comprehensive list of named colors.\n\nFor helpers & conversions, see Nri.Ui.Colors.Extra, or\nconsider [elm-color-extra](http://package.elm-lang.org/packages/eskimoblood/elm-color-extra/5.0.0/).\n\n@docs aqua, aquaDark, aquaLight, azure, azureDark\n@docs white\n@docs blue, blueDeep\n@docs cornflower, cornflowerDark, cornflowerLight, cyan\n@docs frost\n@docs gray20, gray45, gray75, gray92, gray96\n@docs glacier, grassland, green, greenDark, greenDarkest, greenLight, greenLightest\n@docs highlightLightBlue, highlightLightMagenta, highlightLightYellow\n@docs highlightBlue, highlightBlueDark\n@docs highlightCyan, highlightCyanDark\n@docs highlightGreen, highlightGreenDark\n@docs highlightMagenta, highlightMagentaDark\n@docs highlightPurple, highlightPurpleDark\n@docs highlightYellow, highlightYellowDark\n@docs highlightBrown, highlightBrownDark\n@docs textHighlightYellow, textHighlightCyan, textHighlightMagenta, textHighlightGreen, textHighlightBlue, textHighlightPurple, textHighlightBrown\n@docs lichen\n@docs magenta\n@docs navy\n@docs orange, ochre, ochreDark\n@docs purple, purpleDark, purpleLight\n@docs red, redDark, redLight\n@docs sunshine\n@docs turquoise, turquoiseDark, turquoiseLight\n@docs yellow, mustard\n\n","unions":[],"aliases":[],"values":[{"name":"aqua","comment":" See <https://noredink-ui.netlify.com/#category/Colors>\n","type":"Css.Color"},{"name":"aquaDark","comment":" See <https://noredink-ui.netlify.com/#category/Colors>\n","type":"Css.Color"},{"name":"aquaLight","comment":" See <https://noredink-ui.netlify.com/#category/Colors>\n","type":"Css.Color"},{"name":"azure","comment":" See <https://noredink-ui.netlify.com/#category/Colors>\n","type":"Css.Color"},{"name":"azureDark","comment":" See <https://noredink-ui.netlify.com/#category/Colors>\n","type":"Css.Color"},{"name":"blue","comment":" See <https://noredink-ui.netlify.com/#category/Colors>\n","type":"Css.Color"},{"name":"blueDeep","comment":" See <https://noredink-ui.netlify.com/#category/Colors>\n","type":"Css.Color"},{"name":"cornflower","comment":" See <https://noredink-ui.netlify.com/#category/Colors>\n","type":"Css.Color"},{"name":"cornflowerDark","comment":" See <https://noredink-ui.netlify.com/#category/Colors>\n","type":"Css.Color"},{"name":"cornflowerLight","comment":" See <https://noredink-ui.netlify.com/#category/Colors>\n","type":"Css.Color"},{"name":"cyan","comment":" See <https://noredink-ui.netlify.com/#category/Colors>\n","type":"Css.Color"},{"name":"frost","comment":" See <https://noredink-ui.netlify.com/#category/Colors>\n","type":"Css.Color"},{"name":"glacier","comment":" See <https://noredink-ui.netlify.com/#category/Colors>\n","type":"Css.Color"},{"name":"grassland","comment":" See <https://noredink-ui.netlify.com/#category/Colors>\n","type":"Css.Color"},{"name":"gray20","comment":" See <https://noredink-ui.netlify.com/#category/Colors>\n","type":"Css.Color"},{"name":"gray45","comment":" See <https://noredink-ui.netlify.com/#category/Colors>\n","type":"Css.Color"},{"name":"gray75","comment":" See <https://noredink-ui.netlify.com/#category/Colors>\n","type":"Css.Color"},{"name":"gray92","comment":" See <https://noredink-ui.netlify.com/#category/Colors>\n","type":"Css.Color"},{"name":"gray96","comment":" See <https://noredink-ui.netlify.com/#category/Colors>\n","type":"Css.Color"},{"name":"green","comment":" See <https://noredink-ui.netlify.com/#category/Colors>\n","type":"Css.Color"},{"name":"greenDark","comment":" See <https://noredink-ui.netlify.com/#category/Colors>\n","type":"Css.Color"},{"name":"greenDarkest","comment":" See <https://noredink-ui.netlify.com/#category/Colors>\n","type":"Css.Color"},{"name":"greenLight","comment":" See <https://noredink-ui.netlify.com/#category/Colors>\n","type":"Css.Color"},{"name":"greenLightest","comment":" See <https://noredink-ui.netlify.com/#category/Colors>\n","type":"Css.Color"},{"name":"highlightBlue","comment":" See <https://noredink-ui.netlify.com/#category/Colors>\n","type":"Css.Color"},{"name":"highlightBlueDark","comment":" See <https://noredink-ui.netlify.com/#category/Colors>\n","type":"Css.Color"},{"name":"highlightBrown","comment":" See <https://noredink-ui.netlify.com/#category/Colors>\n","type":"Css.Color"},{"name":"highlightBrownDark","comment":" See <https://noredink-ui.netlify.com/#category/Colors>\n","type":"Css.Color"},{"name":"highlightCyan","comment":" See <https://noredink-ui.netlify.com/#category/Colors>\n","type":"Css.Color"},{"name":"highlightCyanDark","comment":" See <https://noredink-ui.netlify.com/#category/Colors>\n","type":"Css.Color"},{"name":"highlightGreen","comment":" See <https://noredink-ui.netlify.com/#category/Colors>\n","type":"Css.Color"},{"name":"highlightGreenDark","comment":" See <https://noredink-ui.netlify.com/#category/Colors>\n","type":"Css.Color"},{"name":"highlightLightBlue","comment":" See <https://noredink-ui.netlify.com/#category/Colors>\n","type":"Css.Color"},{"name":"highlightLightMagenta","comment":" See <https://noredink-ui.netlify.com/#category/Colors>\n","type":"Css.Color"},{"name":"highlightLightYellow","comment":" See <https://noredink-ui.netlify.com/#category/Colors>\n","type":"Css.Color"},{"name":"highlightMagenta","comment":" See <https://noredink-ui.netlify.com/#category/Colors>\n","type":"Css.Color"},{"name":"highlightMagentaDark","comment":" See <https://noredink-ui.netlify.com/#category/Colors>\n","type":"Css.Color"},{"name":"highlightPurple","comment":" See <https://noredink-ui.netlify.com/#category/Colors>\n","type":"Css.Color"},{"name":"highlightPurpleDark","comment":" See <https://noredink-ui.netlify.com/#category/Colors>\n","type":"Css.Color"},{"name":"highlightYellow","comment":" See <https://noredink-ui.netlify.com/#category/Colors>\n","type":"Css.Color"},{"name":"highlightYellowDark","comment":" See <https://noredink-ui.netlify.com/#category/Colors>\n","type":"Css.Color"},{"name":"lichen","comment":" See <https://noredink-ui.netlify.com/#category/Colors>\n","type":"Css.Color"},{"name":"magenta","comment":" See <https://noredink-ui.netlify.com/#category/Colors>\n","type":"Css.Color"},{"name":"mustard","comment":" See <https://noredink-ui.netlify.com/#category/Colors>\n","type":"Css.Color"},{"name":"navy","comment":" See <https://noredink-ui.netlify.com/#category/Colors>\n","type":"Css.Color"},{"name":"ochre","comment":" See <https://noredink-ui.netlify.com/#category/Colors>\n","type":"Css.Color"},{"name":"ochreDark","comment":" See <https://noredink-ui.netlify.com/#category/Colors>\n","type":"Css.Color"},{"name":"orange","comment":" See <https://noredink-ui.netlify.com/#category/Colors>\n","type":"Css.Color"},{"name":"purple","comment":" See <https://noredink-ui.netlify.com/#category/Colors>\n","type":"Css.Color"},{"name":"purpleDark","comment":" See <https://noredink-ui.netlify.com/#category/Colors>\n","type":"Css.Color"},{"name":"purpleLight","comment":" See <https://noredink-ui.netlify.com/#category/Colors>\n","type":"Css.Color"},{"name":"red","comment":" See <https://noredink-ui.netlify.com/#category/Colors>\n","type":"Css.Color"},{"name":"redDark","comment":" See <https://noredink-ui.netlify.com/#category/Colors>\n","type":"Css.Color"},{"name":"redLight","comment":" See <https://noredink-ui.netlify.com/#category/Colors>\n","type":"Css.Color"},{"name":"sunshine","comment":" See <https://noredink-ui.netlify.com/#category/Colors>\n","type":"Css.Color"},{"name":"textHighlightBlue","comment":" See <https://noredink-ui.netlify.com/#category/Colors>\n","type":"Css.Color"},{"name":"textHighlightBrown","comment":" See <https://noredink-ui.netlify.com/#category/Colors>\n","type":"Css.Color"},{"name":"textHighlightCyan","comment":" See <https://noredink-ui.netlify.com/#category/Colors>\n","type":"Css.Color"},{"name":"textHighlightGreen","comment":" See <https://noredink-ui.netlify.com/#category/Colors>\n","type":"Css.Color"},{"name":"textHighlightMagenta","comment":" See <https://noredink-ui.netlify.com/#category/Colors>\n","type":"Css.Color"},{"name":"textHighlightPurple","comment":" See <https://noredink-ui.netlify.com/#category/Colors>\n","type":"Css.Color"},{"name":"textHighlightYellow","comment":" See <https://noredink-ui.netlify.com/#category/Colors>\n","type":"Css.Color"},{"name":"turquoise","comment":" See <https://noredink-ui.netlify.com/#category/Colors>\n","type":"Css.Color"},{"name":"turquoiseDark","comment":" See <https://noredink-ui.netlify.com/#category/Colors>\n","type":"Css.Color"},{"name":"turquoiseLight","comment":" See <https://noredink-ui.netlify.com/#category/Colors>\n","type":"Css.Color"},{"name":"white","comment":" See <https://noredink-ui.netlify.com/#category/Colors>\n","type":"Css.Color"},{"name":"yellow","comment":" See <https://noredink-ui.netlify.com/#category/Colors>\n\nDEPRECATED: use [`mustard`](#mustard) instead. `yellow` will be removed in V2.\n\n","type":"Css.Color"}],"binops":[]},{"name":"Nri.Ui.CssVendorPrefix.V1","comment":" Vendor prefixed css properties.\n\n@docs property, value, complexProperty\n\n","unions":[],"aliases":[],"values":[{"name":"complexProperty","comment":" Used to build more complex Css styles\n","type":"(String.String -> Css.Style) -> Css.Style"},{"name":"property","comment":" Same as Css.property but vendor prefixed.\n","type":"String.String -> String.String -> Css.Style"},{"name":"value","comment":" Same as Css.property but vendor prefixed.\n","type":"String.String -> String.String -> Css.Style"}],"binops":[]},{"name":"Nri.Ui.DisclosureIndicator.V1","comment":" A caret that indicates that a section can expand. When the isOpen attribute is passed in as True, it will rotate. A \"disclosure indicator\" is a standard term for something that indicates that section can expand.\n\n@docs view, viewInline\n\n","unions":[],"aliases":[],"values":[{"name":"view","comment":" ","type":"Nri.Ui.DisclosureIndicator.V1.Assets a -> Nri.Ui.DisclosureIndicator.V1.Config -> Html.Styled.Html msg"},{"name":"viewInline","comment":" The inline variant of the indicator is smaller and occupies\nless vertical space so it can be inlined in lists or tables\nwithout breaking text flow. Also, it rotates from right to\ndown direction when expanding.\n","type":"Nri.Ui.DisclosureIndicator.V1.Assets a -> Nri.Ui.DisclosureIndicator.V1.Config -> Html.Styled.Html msg"}],"binops":[]},{"name":"Nri.Ui.DisclosureIndicator.V2","comment":"\n\n\n# Changes from V1\n\n  - Removes dependency on Icon that makes versioned assets hard to work with\n  - Renames the helpers to `medium` and `large`\n  - Removes `Config` in favor of an explicit type annotation\n\n\n# About:\n\nA caret that indicates that a section can expand and collapse. When `isOpen` is True, the caret will rotate down.\n\"Disclosure indicator\" is a standard term for something that indicates that section can expand.\n\n@docs medium, large\n\n","unions":[],"aliases":[],"values":[{"name":"large","comment":" ","type":"List.List Css.Style -> Basics.Bool -> Html.Styled.Html msg"},{"name":"medium","comment":" ","type":"List.List Css.Style -> Basics.Bool -> Html.Styled.Html msg"}],"binops":[]},{"name":"Nri.Ui.Divider.V2","comment":" <https://staging.noredink.com/style_guide#ui/src/Nri/Divider.elm>\n\n@docs view\n\n","unions":[],"aliases":[],"values":[{"name":"view","comment":" ","type":"String.String -> Html.Styled.Html msg"}],"binops":[]},{"name":"Nri.Ui.Dropdown.V2","comment":"\n\n@docs ViewOptionEntry\n@docs view\n@docs viewWithoutLabel\n\n","unions":[],"aliases":[{"name":"ViewOptionEntry","comment":" This dropdown has atypical select tag behavior.\n\nThis dropdown, when closed, will display some default text, no matter\nwhat is actually selected.\n\nWhen the dropdown is opened, the first option will display that default text,\nbe selected, and disabled. The option the user has actually chosen's displayText\nwon't show up at all.\n\n","args":["a"],"type":"{ isSelected : Basics.Bool, val : a, displayText : String.String }"}],"values":[{"name":"view","comment":" ","type":"String.String -> List.List (Nri.Ui.Dropdown.V2.ViewOptionEntry a) -> (a -> msg) -> Html.Styled.Html msg"},{"name":"viewWithoutLabel","comment":" ","type":"String.String -> List.List (Nri.Ui.Dropdown.V2.ViewOptionEntry a) -> (a -> msg) -> Html.Styled.Html msg"}],"binops":[]},{"name":"Nri.Ui.Effects.V1","comment":" Css mixins reused across Nri modules.\n\n@docs selectionShadow\n\n","unions":[],"aliases":[],"values":[{"name":"selectionShadow","comment":" Draw a 2 px thick ochre border around the element to indicate it is\nselected.\n\nThis uses a CSS box shadow to draw what looks like a border. Box shadows are\nperfect for this because they don't affect the elements positioning in any way.\nThis means we can be sure switching the selection shadow on and off is not\ngoing to make the element jump.\n\n","type":"List.List Css.Style"}],"binops":[]},{"name":"Nri.Ui.Fonts.V1","comment":" Fonts for NoRedInk projects\n\n@docs baseFont, quizFont, ugFont\n\n","unions":[],"aliases":[],"values":[{"name":"baseFont","comment":" Font for instructions, headers, and pretty much everything else\n","type":"Css.Style"},{"name":"quizFont","comment":" Font for question sentences, or most interactable or graded fields\n","type":"Css.Style"},{"name":"ugFont","comment":" Font for displaying user-generated content.\n","type":"Css.Style"}],"binops":[]},{"name":"Nri.Ui.Heading.V1","comment":" Headings with customization options for accessibility.\n\n\n## Understanding spacing\n\n  - All text styles have a specific line-height. This is set so that when text\n    in the given style is long enough to wrap, the spacing between wrapped lines\n    looks good.\n  - No heading styles have padding.\n  - **Heading styles** do not have margin. It is up to the caller to add\n    appropriate margin to the layout.\n\n@docs Heading, heading\n\n@docs withVisualLevel, VisualLevel\n\n@docs withDocumentLevel, DocumentLevel\n\n@docs view\n\n","unions":[{"name":"DocumentLevel","comment":" ","args":[],"cases":[["H1",[]],["H2",[]],["H3",[]],["H4",[]],["H5",[]],["H6",[]]]},{"name":"Heading","comment":" ","args":["msg"],"cases":[]},{"name":"VisualLevel","comment":" ","args":[],"cases":[["Top",[]],["Tagline",[]],["Subhead",[]],["Small",[]]]}],"aliases":[],"values":[{"name":"heading","comment":" start a heading. Render it with `view`.\n","type":"List.List (Html.Styled.Html msg) -> Nri.Ui.Heading.V1.Heading msg"},{"name":"view","comment":" render a Heading to Html. See the other docs in this module for\ncustomizations.\n","type":"Nri.Ui.Heading.V1.Heading msg -> Html.Styled.Html msg"},{"name":"withDocumentLevel","comment":" Customize the document level of the heading. For accessibility reasons, you\nshould have exactly one H1, and only increase the level by one. You can use a\ntool like [axe](https://www.deque.com/axe/) to check this.\n\n    heading [ text \"Hello, World!\" ]\n        |> withDocumentLevel H1\n        |> view\n\n","type":"Nri.Ui.Heading.V1.DocumentLevel -> Nri.Ui.Heading.V1.Heading msg -> Nri.Ui.Heading.V1.Heading msg"},{"name":"withVisualLevel","comment":" Customize how the heading looks. The visual hierarchy should go Top ->\nTagline -> Subhead -> Small.\n\n    heading [ text \"Hello, World!\" ]\n        |> withVisualLevel Top\n        |> view\n\n","type":"Nri.Ui.Heading.V1.VisualLevel -> Nri.Ui.Heading.V1.Heading msg -> Nri.Ui.Heading.V1.Heading msg"}],"binops":[]},{"name":"Nri.Ui.Heading.V2","comment":" Headings with customization options for accessibility.\n\n@docs h1, h2, h3, h4, h5\n\n@docs style, Style, css, error, errorIf\n\n@docs customAttr\n\n","unions":[{"name":"Style","comment":" ","args":[],"cases":[["Top",[]],["Tagline",[]],["Subhead",[]],["Small",[]]]}],"aliases":[],"values":[{"name":"css","comment":" Set some custom CSS in this heading. For example, maybe you need to tweak\nmargins. Now you can!\n","type":"List.List Css.Style -> Nri.Ui.Heading.V2.Attribute msg"},{"name":"customAttr","comment":" Set some custom attribute. You can do _anything_ here, but please don't make\nheaders interactive! Use buttons or links instead so that keyboard and screen\nreader users can use the site too.\n","type":"Html.Styled.Attribute msg -> Nri.Ui.Heading.V2.Attribute msg"},{"name":"error","comment":" Use this when the header is on top of a section in an error state.\n","type":"Nri.Ui.Heading.V2.Attribute msg"},{"name":"errorIf","comment":" Show an error if some condition is met.\n\n    Heading.h1\n        [ Heading.errorIf (model.errorMessage /= Nothing) ]\n        [ Html.text \"Hello! ]\n\n","type":"Basics.Bool -> Nri.Ui.Heading.V2.Attribute msg"},{"name":"h1","comment":" Make a first-level heading (styled like a top-level heading by default.)\n\nUse this to upgrade from `Nri.Ui.Text.V2.heading`.\n\n","type":"List.List (Nri.Ui.Heading.V2.Attribute msg) -> List.List (Html.Styled.Html msg) -> Html.Styled.Html msg"},{"name":"h2","comment":" Make a second-level heading (styled like a tagline by default.)\n\nUse this to upgrade from `Nri.Ui.Text.V2.tagline`.\n\n","type":"List.List (Nri.Ui.Heading.V2.Attribute msg) -> List.List (Html.Styled.Html msg) -> Html.Styled.Html msg"},{"name":"h3","comment":" Make a third-level heading (styled like a subhead by default.)\n\nUse this to upgrade from `Nri.Ui.Text.V2.subHeading`.\n\n","type":"List.List (Nri.Ui.Heading.V2.Attribute msg) -> List.List (Html.Styled.Html msg) -> Html.Styled.Html msg"},{"name":"h4","comment":" Make a fourth-level heading (styled like a small heading by default.)\n\nUse this to upgrade from `Nri.Ui.Text.V2.smallHeading`.\n\n","type":"List.List (Nri.Ui.Heading.V2.Attribute msg) -> List.List (Html.Styled.Html msg) -> Html.Styled.Html msg"},{"name":"h5","comment":" Make a fifth-level heading (styled like a small heading by default.)\n","type":"List.List (Nri.Ui.Heading.V2.Attribute msg) -> List.List (Html.Styled.Html msg) -> Html.Styled.Html msg"},{"name":"style","comment":" Select which of the base styles this heading should look like. Each of h1..5\nhas a default, check their docs to see if you don't need to override this.\n","type":"Nri.Ui.Heading.V2.Style -> Nri.Ui.Heading.V2.Attribute msg"}],"binops":[]},{"name":"Nri.Ui.Html.Attributes.V2","comment":" Extras for working with Html.Attributes.\n\nThis is the new version of Nri.Ui.Html.Attributes.Extra.\n\n@docs none, includeIf\n\n","unions":[],"aliases":[],"values":[{"name":"includeIf","comment":" conditionally include an attribute. Useful for CSS classes generated with\n`UniqueClass`!\n","type":"Basics.Bool -> Html.Styled.Attribute msg -> Html.Styled.Attribute msg"},{"name":"none","comment":" Represents an attribute with no semantic meaning, useful for conditionals.\n\nThis is implemented such that whenever Html.Attributes.Extra.none is encountered\nby VirtualDom it will set a meaningless property on the element object itself to\nnull:\n\n    domNode['Html.Attributes.Extra.none'] = null\n\nIt's totally safe and lets us clean up conditional and maybe attributes\n\n","type":"Html.Styled.Attribute msg"}],"binops":[]},{"name":"Nri.Ui.Html.V3","comment":" For all utils involving HTML. New version of Nri.Ui.Html.Extra.\n\n@docs role\n\n@docs onEsc, onEnter, onKeyUp, onEnterAndSpace\n\n@docs textFromList, oxfordifyWithHtml, nbsp\n\n@docs Options, defaultOptions\n\n","unions":[],"aliases":[{"name":"Options","comment":" ","args":[],"type":"{ preventDefault : Basics.Bool, stopPropagation : Basics.Bool }"}],"values":[{"name":"defaultOptions","comment":" ","type":"Nri.Ui.Html.V3.Options"},{"name":"nbsp","comment":" Workaround for `Html.text \"&nbsp;\"` not working in elm.\n","type":"Html.Styled.Html msg"},{"name":"onEnter","comment":" ","type":"a -> Html.Styled.Attribute a"},{"name":"onEnterAndSpace","comment":" \"Buttons\" should trigger on Enter and on Space.\n","type":"msg -> Html.Styled.Attribute msg"},{"name":"onEsc","comment":" ","type":"a -> a -> Html.Styled.Attribute a"},{"name":"onKeyUp","comment":" Convert a keycode into a message on keyup\n","type":"Nri.Ui.Html.V3.Options -> (Basics.Int -> Maybe.Maybe a) -> Html.Styled.Attribute a"},{"name":"oxfordifyWithHtml","comment":" ","type":"String.String -> String.String -> List.List (Html.Styled.Html msg) -> List.List (Html.Styled.Html msg)"},{"name":"role","comment":" Convenience for defining role attributes, e.g. <div role=\"tabpanel\">\n","type":"String.String -> Html.Styled.Attribute msg"},{"name":"textFromList","comment":" Takes a list of strings, joins them with a space and returns it as a Html.text.\ntextFromList [\"Hello\", \"World\"] == text [ String.join \" \" [\"Hello\", \"World\" ] ]\n","type":"List.List String.String -> Html.Styled.Html msg"}],"binops":[]},{"name":"Nri.Ui.Icon.V3","comment":"\n\n@docs icon, decorativeIcon, link, linkExternal, linkSpa, button\n@docs IconType, IconSize, IconLinkSpaModel\n@docs activity\n@docs add\n@docs arrowDown\n@docs arrowLeft\n@docs arrowRight\n@docs assignmentStartButtonPrimary\n@docs assignmentStartButtonSecondary\n@docs assignmentTypeDiagnostic\n@docs assignmentTypePeerReview\n@docs assignmentTypeSelfReview\n@docs assignmentTypePractice\n@docs assignmentTypeQuickWrite\n@docs assignmentTypeQuiz\n@docs assignmentTypeWritingCycle\n@docs attention\n@docs bang\n@docs bulb\n@docs calendar\n@docs caret\n@docs checkMark\n@docs checkMarkSquiggily\n@docs checkMarkSvg\n@docs class\n@docs clever\n@docs clock\n@docs close\n@docs compassSvg\n@docs copy\n@docs custom\n@docs darkBlueCheckMark\n@docs document\n@docs download\n@docs edit\n@docs editWriting\n@docs equalitySign\n@docs exclamation\n@docs facebook\n@docs flag\n@docs flipper\n@docs footsteps\n@docs gardening\n@docs gear\n@docs greenCheckMark\n@docs guidedWrite\n@docs hat\n@docs help\n@docs helpSvg\n@docs highFive\n@docs key\n@docs keychain\n@docs late\n@docs leaderboard\n@docs lightBulb\n@docs lock\n@docs lockDeprecated\n@docs logo\n@docs masteryBadge\n@docs newspaper\n@docs notStarred\n@docs okay\n@docs openClose\n@docs peerReview\n@docs pen\n@docs performance\n@docs personBlue\n@docs preview\n@docs quickWrite\n@docs seeMore\n@docs share\n@docs skip\n@docs sort\n@docs sortArrow\n@docs speedometer\n@docs starred\n@docs submitting, rating, revising\n@docs thumbsUp\n@docs twitter\n@docs unarchive\n@docs writingAssignment\n@docs x\n@docs xSvg\n\n","unions":[{"name":"IconSize","comment":" Used for determining sizes on Icon.buttons and Icon.links\n","args":[],"cases":[["Small",[]],["Medium",[]]]},{"name":"IconType","comment":" An icon that can be rendered using the functions provided by this module.\n","args":[],"cases":[]}],"aliases":[{"name":"IconLinkSpaModel","comment":" ","args":["route"],"type":"{ alt : String.String, icon : Nri.Ui.Icon.V3.IconType, disabled : Basics.Bool, size : Nri.Ui.Icon.V3.IconSize, route : route }"}],"values":[{"name":"activity","comment":" ","type":"{ r | activity : String.String } -> Nri.Ui.Icon.V3.IconType"},{"name":"add","comment":" ","type":"{ r | icons_plusBlue_svg : Nri.Ui.AssetPath.Asset } -> Nri.Ui.Icon.V3.IconType"},{"name":"arrowDown","comment":" ","type":"{ r | arrowDown : String.String } -> Nri.Ui.Icon.V3.IconType"},{"name":"arrowLeft","comment":" ","type":"{ r | leftArrowBlue_png : Nri.Ui.AssetPath.Asset } -> Nri.Ui.Icon.V3.IconType"},{"name":"arrowRight","comment":" ","type":"{ r | icons_arrowRightBlue_svg : Nri.Ui.AssetPath.Asset } -> Nri.Ui.Icon.V3.IconType"},{"name":"assignmentStartButtonPrimary","comment":" ","type":"{ r | assignmentStartButtonPrimary_svg : Nri.Ui.AssetPath.Asset } -> Nri.Ui.Icon.V3.IconType"},{"name":"assignmentStartButtonSecondary","comment":" ","type":"{ r | assignmentStartButtonSecondary_svg : Nri.Ui.AssetPath.Asset } -> Nri.Ui.Icon.V3.IconType"},{"name":"assignmentTypeDiagnostic","comment":" ","type":"{ r | diagnostic : String.String } -> Nri.Ui.Icon.V3.IconType"},{"name":"assignmentTypePeerReview","comment":" ","type":"{ r | icons_peerReviewWhite_svg : Nri.Ui.AssetPath.Asset } -> Nri.Ui.Icon.V3.IconType"},{"name":"assignmentTypePractice","comment":" ","type":"{ r | practice : String.String } -> Nri.Ui.Icon.V3.IconType"},{"name":"assignmentTypeQuickWrite","comment":" ","type":"{ r | icons_quickWriteWhite_svg : Nri.Ui.AssetPath.Asset } -> Nri.Ui.Icon.V3.IconType"},{"name":"assignmentTypeQuiz","comment":" ","type":"{ r | quiz : String.String } -> Nri.Ui.Icon.V3.IconType"},{"name":"assignmentTypeSelfReview","comment":" ","type":"{ r | icons_selfReviewWhite_svg : Nri.Ui.AssetPath.Asset } -> Nri.Ui.Icon.V3.IconType"},{"name":"assignmentTypeWritingCycle","comment":" ","type":"{ r | writingcycle : String.String } -> Nri.Ui.Icon.V3.IconType"},{"name":"attention","comment":" ","type":"{ r | attention_svg : Nri.Ui.AssetPath.Asset } -> Nri.Ui.Icon.V3.IconType"},{"name":"bang","comment":" ","type":"{ r | exclamationPoint_svg : Nri.Ui.AssetPath.Asset } -> Nri.Ui.Icon.V3.IconType"},{"name":"bulb","comment":" ","type":"{ r | bulb : String.String } -> Nri.Ui.Icon.V3.IconType"},{"name":"button","comment":" Create an accessible icon button with an onClick handler\nUses our default icon styles (25 x 25 px, azure)\n","type":"Nri.Ui.Icon.V3.IconButtonModel msg -> Accessibility.Styled.Html msg"},{"name":"calendar","comment":" ","type":"{ r | calendar : String.String } -> Nri.Ui.Icon.V3.IconType"},{"name":"caret","comment":" ","type":"{ r | icons_arrowDownBlue_svg : Nri.Ui.AssetPath.Asset } -> Nri.Ui.Icon.V3.IconType"},{"name":"checkMark","comment":" ","type":"{ r | iconCheck_png : Nri.Ui.AssetPath.Asset } -> Nri.Ui.Icon.V3.IconType"},{"name":"checkMarkSquiggily","comment":" ","type":"{ r | squiggly_png : Nri.Ui.AssetPath.Asset } -> Nri.Ui.Icon.V3.IconType"},{"name":"checkMarkSvg","comment":" ","type":"{ r | checkmark : String.String } -> Nri.Ui.Icon.V3.IconType"},{"name":"class","comment":" ","type":"{ r | class : String.String } -> Nri.Ui.Icon.V3.IconType"},{"name":"clever","comment":" ","type":"{ r | clever : String.String } -> Nri.Ui.Icon.V3.IconType"},{"name":"clock","comment":" ","type":"{ r | clock : String.String } -> Nri.Ui.Icon.V3.IconType"},{"name":"close","comment":" ","type":"{ r | icons_xBlue_svg : Nri.Ui.AssetPath.Asset } -> Nri.Ui.Icon.V3.IconType"},{"name":"compassSvg","comment":" ","type":"{ r | compass : String.String } -> Nri.Ui.Icon.V3.IconType"},{"name":"copy","comment":" ","type":"{ r | teach_assignments_copyWhite_svg : Nri.Ui.AssetPath.Asset } -> Nri.Ui.Icon.V3.IconType"},{"name":"custom","comment":" ","type":"Nri.Ui.AssetPath.Asset -> Nri.Ui.Icon.V3.IconType"},{"name":"darkBlueCheckMark","comment":" ","type":"{ r | darkBlueCheckmark_svg : Nri.Ui.AssetPath.Asset } -> Nri.Ui.Icon.V3.IconType"},{"name":"decorativeIcon","comment":" Use this icon for purely decorative content that would be distracting\nrather than helpful on a screenreader.\n","type":"Nri.Ui.Icon.V3.IconType -> Accessibility.Styled.Html msg"},{"name":"document","comment":" ","type":"{ r | document : String.String } -> Nri.Ui.Icon.V3.IconType"},{"name":"download","comment":" ","type":"{ r | download : String.String } -> Nri.Ui.Icon.V3.IconType"},{"name":"edit","comment":" ","type":"{ r | edit : String.String } -> Nri.Ui.Icon.V3.IconType"},{"name":"editWriting","comment":" ","type":"{ r | editWriting : String.String } -> Nri.Ui.Icon.V3.IconType"},{"name":"equalitySign","comment":" ","type":"{ r | icons_equals_svg : Nri.Ui.AssetPath.Asset } -> Nri.Ui.Icon.V3.IconType"},{"name":"exclamation","comment":" ","type":"{ r | exclamation : String.String } -> Nri.Ui.Icon.V3.IconType"},{"name":"facebook","comment":" ","type":"{ r | facebookBlue_svg : Nri.Ui.AssetPath.Asset } -> Nri.Ui.Icon.V3.IconType"},{"name":"flag","comment":" ","type":"{ r | iconFlag_png : Nri.Ui.AssetPath.Asset } -> Nri.Ui.Icon.V3.IconType"},{"name":"flipper","comment":" ","type":"{ r | flipper : String.String } -> Nri.Ui.Icon.V3.IconType"},{"name":"footsteps","comment":" ","type":"{ r | footsteps : String.String } -> Nri.Ui.Icon.V3.IconType"},{"name":"gardening","comment":" ","type":"{ r | startingOffBadge_png : Nri.Ui.AssetPath.Asset } -> Nri.Ui.Icon.V3.IconType"},{"name":"gear","comment":" ","type":"{ r | gear : String.String } -> Nri.Ui.Icon.V3.IconType"},{"name":"greenCheckMark","comment":" ","type":"{ r | smallCheckmark_png : Nri.Ui.AssetPath.Asset } -> Nri.Ui.Icon.V3.IconType"},{"name":"guidedWrite","comment":" ","type":"{ r | icons_guidedWrite_svg : Nri.Ui.AssetPath.Asset } -> Nri.Ui.Icon.V3.IconType"},{"name":"hat","comment":" ","type":"{ r | hat : String.String } -> Nri.Ui.Icon.V3.IconType"},{"name":"help","comment":" ","type":"{ r | icons_helpBlue_svg : Nri.Ui.AssetPath.Asset } -> Nri.Ui.Icon.V3.IconType"},{"name":"helpSvg","comment":" ","type":"{ r | help : String.String } -> Nri.Ui.Icon.V3.IconType"},{"name":"highFive","comment":" ","type":"{ r | level3Badge_png : Nri.Ui.AssetPath.Asset } -> Nri.Ui.Icon.V3.IconType"},{"name":"icon","comment":" ","type":"{ alt : String.String, icon : Nri.Ui.Icon.V3.IconType } -> Accessibility.Styled.Html msg"},{"name":"key","comment":" ","type":"{ r | key : String.String } -> Nri.Ui.Icon.V3.IconType"},{"name":"keychain","comment":" ","type":"{ r | keychain : String.String } -> Nri.Ui.Icon.V3.IconType"},{"name":"late","comment":" ","type":"{ r | icons_clockRed_svg : Nri.Ui.AssetPath.Asset } -> Nri.Ui.Icon.V3.IconType"},{"name":"leaderboard","comment":" ","type":"{ r | leaderboard : String.String } -> Nri.Ui.Icon.V3.IconType"},{"name":"lightBulb","comment":" ","type":"{ r | hint_png : Nri.Ui.AssetPath.Asset } -> Nri.Ui.Icon.V3.IconType"},{"name":"link","comment":" Create an icon that links to a part of NRI\nUses our default icon styles (25 x 25 px, azure)\n","type":"Nri.Ui.Icon.V3.IconLinkModel -> Accessibility.Styled.Html msg"},{"name":"linkExternal","comment":" Create an icon that links to an external site\nUses our default icon styles (25 x 25 px, azure)\n","type":"Nri.Ui.Icon.V3.IconLinkModel -> Accessibility.Styled.Html msg"},{"name":"linkSpa","comment":" Use this link for routing within a single page app.\n\nThis will make a normal <a> tag, but change the onClick behavior to avoid reloading the page.\n\n","type":"(route -> String.String) -> (route -> msg) -> Nri.Ui.Icon.V3.IconLinkSpaModel route -> Accessibility.Styled.Html msg"},{"name":"lock","comment":" ","type":"{ r | lock : String.String } -> Nri.Ui.Icon.V3.IconType"},{"name":"lockDeprecated","comment":" ","type":"{ r | premiumLock_svg : Nri.Ui.AssetPath.Asset } -> Nri.Ui.Icon.V3.IconType"},{"name":"logo","comment":" ","type":"{ r | logoRedBlack_svg : Nri.Ui.AssetPath.Asset } -> Nri.Ui.Icon.V3.IconType"},{"name":"masteryBadge","comment":" ","type":"{ r | masteryBadge : String.String } -> Nri.Ui.Icon.V3.IconType"},{"name":"newspaper","comment":" ","type":"{ r | newspaper : String.String } -> Nri.Ui.Icon.V3.IconType"},{"name":"notStarred","comment":" ","type":"{ r | commentNotStarred_png : Nri.Ui.AssetPath.Asset } -> Nri.Ui.Icon.V3.IconType"},{"name":"okay","comment":" ","type":"{ r | level2Badge_png : Nri.Ui.AssetPath.Asset } -> Nri.Ui.Icon.V3.IconType"},{"name":"openClose","comment":" ","type":"{ r | openClose : String.String } -> Nri.Ui.Icon.V3.IconType"},{"name":"peerReview","comment":" ","type":"{ r | icons_peerReview_svg : Nri.Ui.AssetPath.Asset } -> Nri.Ui.Icon.V3.IconType"},{"name":"pen","comment":" ","type":"{ r | pen : Nri.Ui.AssetPath.Asset } -> Nri.Ui.Icon.V3.IconType"},{"name":"performance","comment":" ","type":"{ r | performance : String.String } -> Nri.Ui.Icon.V3.IconType"},{"name":"personBlue","comment":" ","type":"{ r | personBlue_svg : Nri.Ui.AssetPath.Asset } -> Nri.Ui.Icon.V3.IconType"},{"name":"preview","comment":" ","type":"{ r | preview : String.String } -> Nri.Ui.Icon.V3.IconType"},{"name":"quickWrite","comment":" ","type":"{ r | icons_quickWrite_svg : Nri.Ui.AssetPath.Asset } -> Nri.Ui.Icon.V3.IconType"},{"name":"rating","comment":" ","type":"{ r | rating : String.String } -> Nri.Ui.Icon.V3.IconType"},{"name":"revising","comment":" ","type":"{ r | revising : String.String } -> Nri.Ui.Icon.V3.IconType"},{"name":"seeMore","comment":" ","type":"{ r | seemore : String.String } -> Nri.Ui.Icon.V3.IconType"},{"name":"share","comment":" ","type":"{ r | share : String.String } -> Nri.Ui.Icon.V3.IconType"},{"name":"skip","comment":" ","type":"{ r | skip : String.String } -> Nri.Ui.Icon.V3.IconType"},{"name":"sort","comment":" ","type":"{ r | sort : String.String } -> Nri.Ui.Icon.V3.IconType"},{"name":"sortArrow","comment":" ","type":"{ r | sortArrow : String.String } -> Nri.Ui.Icon.V3.IconType"},{"name":"speedometer","comment":" ","type":"{ r | speedometer : String.String } -> Nri.Ui.Icon.V3.IconType"},{"name":"starred","comment":" ","type":"{ r | commentStarred_png : Nri.Ui.AssetPath.Asset } -> Nri.Ui.Icon.V3.IconType"},{"name":"submitting","comment":" ","type":"{ r | submitting : String.String } -> Nri.Ui.Icon.V3.IconType"},{"name":"thumbsUp","comment":" ","type":"{ r | level1Badge_png : Nri.Ui.AssetPath.Asset } -> Nri.Ui.Icon.V3.IconType"},{"name":"twitter","comment":" ","type":"{ r | twitterBlue_svg : Nri.Ui.AssetPath.Asset } -> Nri.Ui.Icon.V3.IconType"},{"name":"unarchive","comment":" ","type":"{ r | unarchiveBlue2x_png : Nri.Ui.AssetPath.Asset } -> Nri.Ui.Icon.V3.IconType"},{"name":"writingAssignment","comment":" ","type":"{ r | writingAssignment : String.String } -> Nri.Ui.Icon.V3.IconType"},{"name":"x","comment":" ","type":"{ r | xWhite_svg : Nri.Ui.AssetPath.Asset } -> Nri.Ui.Icon.V3.IconType"},{"name":"xSvg","comment":" ","type":"{ r | x : String.String } -> Nri.Ui.Icon.V3.IconType"}],"binops":[]},{"name":"Nri.Ui.Icon.V4","comment":"\n\n@docs icon, decorativeIcon\n@docs IconType, IconSize\n@docs IconLinkModel, link, linkExternal\n@docs IconButtonModel, button\n@docs IconLinkSpaModel, linkSpa\n@docs activity\n@docs add\n@docs arrowDown\n@docs arrowLeft\n@docs arrowRight\n@docs assignmentStartButtonPrimary\n@docs assignmentStartButtonSecondary\n@docs assignmentTypeDiagnostic\n@docs assignmentTypeGuidedDraft\n@docs assignmentTypePeerReview\n@docs assignmentTypePractice\n@docs assignmentTypeQuickWrite\n@docs assignmentTypeQuiz\n@docs assignmentTypeSelfReview\n@docs assignmentTypeWritingCycle\n@docs attention\n@docs bang\n@docs bulb\n@docs calendar\n@docs caret\n@docs checkMark\n@docs checkMarkSquiggily\n@docs checkMarkSvg\n@docs class\n@docs clever\n@docs clock\n@docs close\n@docs compassSvg\n@docs copy\n@docs custom\n@docs darkBlueCheckMark\n@docs document\n@docs download\n@docs edit\n@docs editWriting\n@docs equalitySign\n@docs exclamation\n@docs facebook\n@docs flag\n@docs flipper\n@docs footsteps\n@docs gardening\n@docs gear\n@docs greenCheckMark\n@docs guidedWrite\n@docs hat\n@docs help\n@docs helpSvg\n@docs highFive\n@docs highlighter\n@docs key\n@docs keychain\n@docs late\n@docs leaderboard\n@docs lightBulb\n@docs lock\n@docs lockDeprecated\n@docs logo\n@docs masteryBadge\n@docs microscope\n@docs newspaper\n@docs notStarred\n@docs okay\n@docs openClose\n@docs peerReview\n@docs pen\n@docs performance\n@docs personBlue\n@docs preview\n@docs quickWrite\n@docs scale\n@docs search\n@docs seeMore\n@docs share\n@docs skip\n@docs sort\n@docs sortArrow\n@docs speedometer\n@docs starred\n@docs submitting, rating, revising\n@docs thumbsUp\n@docs twitter\n@docs unarchive\n@docs writingAssignment\n@docs x\n@docs xSvg\n\n","unions":[{"name":"IconSize","comment":" Used for determining sizes on Icon.buttons and Icon.links\n","args":[],"cases":[["Small",[]],["Medium",[]]]},{"name":"IconType","comment":" An icon that can be rendered using the functions provided by this module.\n","args":[],"cases":[]}],"aliases":[{"name":"IconButtonModel","comment":" ","args":["msg"],"type":"{ alt : String.String, msg : msg, icon : Nri.Ui.Icon.V4.IconType, disabled : Basics.Bool, size : Nri.Ui.Icon.V4.IconSize }"},{"name":"IconLinkModel","comment":" ","args":[],"type":"{ alt : String.String, url : String.String, icon : Nri.Ui.Icon.V4.IconType, disabled : Basics.Bool, size : Nri.Ui.Icon.V4.IconSize }"},{"name":"IconLinkSpaModel","comment":" ","args":["route"],"type":"{ alt : String.String, icon : Nri.Ui.Icon.V4.IconType, disabled : Basics.Bool, size : Nri.Ui.Icon.V4.IconSize, route : route }"}],"values":[{"name":"activity","comment":" ","type":"{ r | activity : String.String } -> Nri.Ui.Icon.V4.IconType"},{"name":"add","comment":" ","type":"{ r | icons_plusBlue_svg : Nri.Ui.AssetPath.Asset } -> Nri.Ui.Icon.V4.IconType"},{"name":"arrowDown","comment":" ","type":"{ r | arrowDown : String.String } -> Nri.Ui.Icon.V4.IconType"},{"name":"arrowLeft","comment":" ","type":"{ r | leftArrowBlue_png : Nri.Ui.AssetPath.Asset } -> Nri.Ui.Icon.V4.IconType"},{"name":"arrowRight","comment":" ","type":"{ r | icons_arrowRightBlue_svg : Nri.Ui.AssetPath.Asset } -> Nri.Ui.Icon.V4.IconType"},{"name":"assignmentStartButtonPrimary","comment":" ","type":"{ r | assignmentStartButtonPrimary_svg : Nri.Ui.AssetPath.Asset } -> Nri.Ui.Icon.V4.IconType"},{"name":"assignmentStartButtonSecondary","comment":" ","type":"{ r | assignmentStartButtonSecondary_svg : Nri.Ui.AssetPath.Asset } -> Nri.Ui.Icon.V4.IconType"},{"name":"assignmentTypeDiagnostic","comment":" ","type":"{ r | diagnostic : String.String } -> Nri.Ui.Icon.V4.IconType"},{"name":"assignmentTypeGuidedDraft","comment":" ","type":"{ r | guidedDraft : String.String } -> Nri.Ui.Icon.V4.IconType"},{"name":"assignmentTypePeerReview","comment":" ","type":"{ r | peerReview : String.String } -> Nri.Ui.Icon.V4.IconType"},{"name":"assignmentTypePractice","comment":" ","type":"{ r | practice : String.String } -> Nri.Ui.Icon.V4.IconType"},{"name":"assignmentTypeQuickWrite","comment":" ","type":"{ r | quickWrite : String.String } -> Nri.Ui.Icon.V4.IconType"},{"name":"assignmentTypeQuiz","comment":" ","type":"{ r | quiz : String.String } -> Nri.Ui.Icon.V4.IconType"},{"name":"assignmentTypeSelfReview","comment":" ","type":"{ r | selfReview : String.String } -> Nri.Ui.Icon.V4.IconType"},{"name":"assignmentTypeWritingCycle","comment":" ","type":"{ r | writingcycle : String.String } -> Nri.Ui.Icon.V4.IconType"},{"name":"attention","comment":" ","type":"{ r | attention_svg : Nri.Ui.AssetPath.Asset } -> Nri.Ui.Icon.V4.IconType"},{"name":"bang","comment":" ","type":"{ r | exclamationPoint_svg : Nri.Ui.AssetPath.Asset } -> Nri.Ui.Icon.V4.IconType"},{"name":"bulb","comment":" ","type":"{ r | bulb : String.String } -> Nri.Ui.Icon.V4.IconType"},{"name":"button","comment":" Create an accessible icon button with an onClick handler\nUses our default icon styles (25 x 25 px, azure)\n","type":"Nri.Ui.Icon.V4.IconButtonModel msg -> Accessibility.Styled.Html msg"},{"name":"calendar","comment":" ","type":"{ r | calendar : String.String } -> Nri.Ui.Icon.V4.IconType"},{"name":"caret","comment":" ","type":"{ r | icons_arrowDownBlue_svg : Nri.Ui.AssetPath.Asset } -> Nri.Ui.Icon.V4.IconType"},{"name":"checkMark","comment":" ","type":"{ r | iconCheck_png : Nri.Ui.AssetPath.Asset } -> Nri.Ui.Icon.V4.IconType"},{"name":"checkMarkSquiggily","comment":" ","type":"{ r | squiggly_png : Nri.Ui.AssetPath.Asset } -> Nri.Ui.Icon.V4.IconType"},{"name":"checkMarkSvg","comment":" ","type":"{ r | checkmark : String.String } -> Nri.Ui.Icon.V4.IconType"},{"name":"class","comment":" ","type":"{ r | class : String.String } -> Nri.Ui.Icon.V4.IconType"},{"name":"clever","comment":" ","type":"{ r | clever : String.String } -> Nri.Ui.Icon.V4.IconType"},{"name":"clock","comment":" ","type":"{ r | clock : String.String } -> Nri.Ui.Icon.V4.IconType"},{"name":"close","comment":" ","type":"{ r | icons_xBlue_svg : Nri.Ui.AssetPath.Asset } -> Nri.Ui.Icon.V4.IconType"},{"name":"compassSvg","comment":" ","type":"{ r | compass : String.String } -> Nri.Ui.Icon.V4.IconType"},{"name":"copy","comment":" ","type":"{ r | teach_assignments_copyWhite_svg : Nri.Ui.AssetPath.Asset } -> Nri.Ui.Icon.V4.IconType"},{"name":"custom","comment":" ","type":"Nri.Ui.AssetPath.Asset -> Nri.Ui.Icon.V4.IconType"},{"name":"darkBlueCheckMark","comment":" ","type":"{ r | darkBlueCheckmark_svg : Nri.Ui.AssetPath.Asset } -> Nri.Ui.Icon.V4.IconType"},{"name":"decorativeIcon","comment":" Use this icon for purely decorative content that would be distracting\nrather than helpful on a screenreader.\n","type":"Nri.Ui.Icon.V4.IconType -> Accessibility.Styled.Html msg"},{"name":"document","comment":" ","type":"{ r | document : String.String } -> Nri.Ui.Icon.V4.IconType"},{"name":"download","comment":" ","type":"{ r | download : String.String } -> Nri.Ui.Icon.V4.IconType"},{"name":"edit","comment":" ","type":"{ r | edit : String.String } -> Nri.Ui.Icon.V4.IconType"},{"name":"editWriting","comment":" ","type":"{ r | editWriting : String.String } -> Nri.Ui.Icon.V4.IconType"},{"name":"equalitySign","comment":" ","type":"{ r | icons_equals_svg : Nri.Ui.AssetPath.Asset } -> Nri.Ui.Icon.V4.IconType"},{"name":"exclamation","comment":" ","type":"{ r | exclamation : String.String } -> Nri.Ui.Icon.V4.IconType"},{"name":"facebook","comment":" ","type":"{ r | facebookBlue_svg : Nri.Ui.AssetPath.Asset } -> Nri.Ui.Icon.V4.IconType"},{"name":"flag","comment":" ","type":"{ r | iconFlag_png : Nri.Ui.AssetPath.Asset } -> Nri.Ui.Icon.V4.IconType"},{"name":"flipper","comment":" ","type":"{ r | flipper : String.String } -> Nri.Ui.Icon.V4.IconType"},{"name":"footsteps","comment":" ","type":"{ r | footsteps : String.String } -> Nri.Ui.Icon.V4.IconType"},{"name":"gardening","comment":" ","type":"{ r | startingOffBadge_png : Nri.Ui.AssetPath.Asset } -> Nri.Ui.Icon.V4.IconType"},{"name":"gear","comment":" ","type":"{ r | gear : String.String } -> Nri.Ui.Icon.V4.IconType"},{"name":"greenCheckMark","comment":" ","type":"{ r | smallCheckmark_png : Nri.Ui.AssetPath.Asset } -> Nri.Ui.Icon.V4.IconType"},{"name":"guidedWrite","comment":" ","type":"{ r | icons_guidedWrite_svg : Nri.Ui.AssetPath.Asset } -> Nri.Ui.Icon.V4.IconType"},{"name":"hat","comment":" ","type":"{ r | hat : String.String } -> Nri.Ui.Icon.V4.IconType"},{"name":"help","comment":" ","type":"{ r | icons_helpBlue_svg : Nri.Ui.AssetPath.Asset } -> Nri.Ui.Icon.V4.IconType"},{"name":"helpSvg","comment":" ","type":"{ r | help : String.String } -> Nri.Ui.Icon.V4.IconType"},{"name":"highFive","comment":" ","type":"{ r | level3Badge_png : Nri.Ui.AssetPath.Asset } -> Nri.Ui.Icon.V4.IconType"},{"name":"highlighter","comment":" ","type":"{ r | highlighter : String.String } -> Nri.Ui.Icon.V4.IconType"},{"name":"icon","comment":" ","type":"{ alt : String.String, icon : Nri.Ui.Icon.V4.IconType } -> Accessibility.Styled.Html msg"},{"name":"key","comment":" ","type":"{ r | key : String.String } -> Nri.Ui.Icon.V4.IconType"},{"name":"keychain","comment":" ","type":"{ r | keychain : String.String } -> Nri.Ui.Icon.V4.IconType"},{"name":"late","comment":" ","type":"{ r | icons_clockRed_svg : Nri.Ui.AssetPath.Asset } -> Nri.Ui.Icon.V4.IconType"},{"name":"leaderboard","comment":" ","type":"{ r | leaderboard : String.String } -> Nri.Ui.Icon.V4.IconType"},{"name":"lightBulb","comment":" ","type":"{ r | hint_png : Nri.Ui.AssetPath.Asset } -> Nri.Ui.Icon.V4.IconType"},{"name":"link","comment":" Create an icon that links to a part of NRI\nUses our default icon styles (25 x 25 px, azure)\n","type":"Nri.Ui.Icon.V4.IconLinkModel -> Accessibility.Styled.Html msg"},{"name":"linkExternal","comment":" Create an icon that links to an external site\nUses our default icon styles (25 x 25 px, azure)\n","type":"Nri.Ui.Icon.V4.IconLinkModel -> Accessibility.Styled.Html msg"},{"name":"linkSpa","comment":" Use this link for routing within a single page app.\n\nThis will make a normal <a> tag, but change the onClick behavior to avoid reloading the page.\n\n","type":"(route -> String.String) -> (route -> msg) -> Nri.Ui.Icon.V4.IconLinkSpaModel route -> Accessibility.Styled.Html msg"},{"name":"lock","comment":" ","type":"{ r | lock : String.String } -> Nri.Ui.Icon.V4.IconType"},{"name":"lockDeprecated","comment":" ","type":"{ r | premiumLock_svg : Nri.Ui.AssetPath.Asset } -> Nri.Ui.Icon.V4.IconType"},{"name":"logo","comment":" ","type":"{ r | logoRedBlack_svg : Nri.Ui.AssetPath.Asset } -> Nri.Ui.Icon.V4.IconType"},{"name":"masteryBadge","comment":" ","type":"{ r | masteryBadge : String.String } -> Nri.Ui.Icon.V4.IconType"},{"name":"microscope","comment":" ","type":"{ r | microscope : String.String } -> Nri.Ui.Icon.V4.IconType"},{"name":"newspaper","comment":" ","type":"{ r | newspaper : String.String } -> Nri.Ui.Icon.V4.IconType"},{"name":"notStarred","comment":" ","type":"{ r | commentNotStarred_png : Nri.Ui.AssetPath.Asset } -> Nri.Ui.Icon.V4.IconType"},{"name":"okay","comment":" ","type":"{ r | level2Badge_png : Nri.Ui.AssetPath.Asset } -> Nri.Ui.Icon.V4.IconType"},{"name":"openClose","comment":" ","type":"{ r | openClose : String.String } -> Nri.Ui.Icon.V4.IconType"},{"name":"peerReview","comment":" ","type":"{ r | icons_peerReview_svg : Nri.Ui.AssetPath.Asset } -> Nri.Ui.Icon.V4.IconType"},{"name":"pen","comment":" ","type":"{ r | pen : Nri.Ui.AssetPath.Asset } -> Nri.Ui.Icon.V4.IconType"},{"name":"performance","comment":" ","type":"{ r | performance : String.String } -> Nri.Ui.Icon.V4.IconType"},{"name":"personBlue","comment":" ","type":"{ r | personBlue_svg : Nri.Ui.AssetPath.Asset } -> Nri.Ui.Icon.V4.IconType"},{"name":"preview","comment":" ","type":"{ r | preview : String.String } -> Nri.Ui.Icon.V4.IconType"},{"name":"quickWrite","comment":" ","type":"{ r | icons_quickWrite_svg : Nri.Ui.AssetPath.Asset } -> Nri.Ui.Icon.V4.IconType"},{"name":"rating","comment":" ","type":"{ r | rating : String.String } -> Nri.Ui.Icon.V4.IconType"},{"name":"revising","comment":" ","type":"{ r | revising : String.String } -> Nri.Ui.Icon.V4.IconType"},{"name":"scale","comment":" ","type":"{ r | scale : String.String } -> Nri.Ui.Icon.V4.IconType"},{"name":"search","comment":" ","type":"{ r | search : String.String } -> Nri.Ui.Icon.V4.IconType"},{"name":"seeMore","comment":" ","type":"{ r | seemore : String.String } -> Nri.Ui.Icon.V4.IconType"},{"name":"share","comment":" ","type":"{ r | share : String.String } -> Nri.Ui.Icon.V4.IconType"},{"name":"skip","comment":" ","type":"{ r | skip : String.String } -> Nri.Ui.Icon.V4.IconType"},{"name":"sort","comment":" ","type":"{ r | sort : String.String } -> Nri.Ui.Icon.V4.IconType"},{"name":"sortArrow","comment":" ","type":"{ r | sortArrow : String.String } -> Nri.Ui.Icon.V4.IconType"},{"name":"speedometer","comment":" ","type":"{ r | speedometer : String.String } -> Nri.Ui.Icon.V4.IconType"},{"name":"starred","comment":" ","type":"{ r | commentStarred_png : Nri.Ui.AssetPath.Asset } -> Nri.Ui.Icon.V4.IconType"},{"name":"submitting","comment":" ","type":"{ r | submitting : String.String } -> Nri.Ui.Icon.V4.IconType"},{"name":"thumbsUp","comment":" ","type":"{ r | level1Badge_png : Nri.Ui.AssetPath.Asset } -> Nri.Ui.Icon.V4.IconType"},{"name":"twitter","comment":" ","type":"{ r | twitterBlue_svg : Nri.Ui.AssetPath.Asset } -> Nri.Ui.Icon.V4.IconType"},{"name":"unarchive","comment":" ","type":"{ r | unarchiveBlue2x_png : Nri.Ui.AssetPath.Asset } -> Nri.Ui.Icon.V4.IconType"},{"name":"writingAssignment","comment":" ","type":"{ r | writingAssignment : String.String } -> Nri.Ui.Icon.V4.IconType"},{"name":"x","comment":" ","type":"{ r | xWhite_svg : Nri.Ui.AssetPath.Asset } -> Nri.Ui.Icon.V4.IconType"},{"name":"xSvg","comment":" ","type":"{ r | x : String.String } -> Nri.Ui.Icon.V4.IconType"}],"binops":[]},{"name":"Nri.Ui.Icon.V5","comment":"\n\n\n# Changes from V4\n\n  - Removes old icons\n\n\n# Icon types\n\n\n## Mastery Icons\n\n@docs gardening, highFive, okay, thumbsUp, masteryBadge\n\n\n## Stars and Flags\n\n@docs starred, notStarred, flag\n\n\n## Assignment Types\n\n@docs assignmentTypeDiagnostic, assignmentTypePractice, assignmentTypeQuiz, assignmentTypeQuickWrite, assignmentTypeGuidedDraft, assignmentTypePeerReview, assignmentTypeSelfReview, submitting, rating, revising, guidedWrite, assignmentTypeWritingCycle, writingAssignment\n\n\n## Student Assignment Actions\n\n@docs assignmentStartButtonPrimary, assignmentStartButtonSecondary\n\n\n## Teacher Assignment Actions\n\n@docs unarchive, share, seeMore, preview, performance, openClose, download\n\n\n## Edit\n\n@docs edit, editWriting\n\n\n## Humans\n\n@docs class, leaderboard, personBlue\n\n\n## Social Media\n\n@docs facebook, twitter, clever\n\n\n## Arrows and Carets\n\n@docs arrowDown, sortArrow\n\n\n## Checkmarks\n\n@docs checkMarkSvg\n\n\n## Xs\n\n@docs xSvg\n\n\n## Bangs\n\n@docs exclamation, attention\n\n\n## Bulbs and Tips\n\n@docs bulb, lightBulb, helpSvg\n\n\n## Locks and keys\n\n@docs key, lock\n\n\n## Time\n\n@docs calendar, clock\n\n\n## Uncategorized (SVGs)\n\n@docs activity, compassSvg, document, flipper, footsteps\n@docs gear, pen, newspaper, sort, speedometer\n@docs skip, equalitySign\n@docs logo\n\n\n# Using Icons\n\n@docs IconSize, IconType\n@docs decorativeIcon, icon\n\n\n## Buttons\n\n@docs IconButtonModel, button\n\n\n## Links\n\n@docs IconLinkModel, link, linkExternal\n@docs IconLinkSpaModel, linkSpa\n\n","unions":[{"name":"IconSize","comment":" Used for determining sizes on Icon.buttons and Icon.links\n","args":[],"cases":[["Small",[]],["Medium",[]]]},{"name":"IconType","comment":" An icon that can be rendered using the functions provided by this module.\n","args":[],"cases":[]}],"aliases":[{"name":"IconButtonModel","comment":" ","args":["msg"],"type":"{ alt : String.String, msg : msg, icon : Nri.Ui.Icon.V5.IconType, disabled : Basics.Bool, size : Nri.Ui.Icon.V5.IconSize }"},{"name":"IconLinkModel","comment":" ","args":[],"type":"{ alt : String.String, url : String.String, icon : Nri.Ui.Icon.V5.IconType, disabled : Basics.Bool, size : Nri.Ui.Icon.V5.IconSize }"},{"name":"IconLinkSpaModel","comment":" ","args":["route"],"type":"{ alt : String.String, icon : Nri.Ui.Icon.V5.IconType, disabled : Basics.Bool, size : Nri.Ui.Icon.V5.IconSize, route : route }"}],"values":[{"name":"activity","comment":" ","type":"{ r | activity : String.String } -> Nri.Ui.Icon.V5.IconType"},{"name":"arrowDown","comment":" ","type":"{ r | arrowDown : String.String } -> Nri.Ui.Icon.V5.IconType"},{"name":"assignmentStartButtonPrimary","comment":" ","type":"{ r | assignmentStartButtonPrimary_svg : Nri.Ui.AssetPath.Asset } -> Nri.Ui.Icon.V5.IconType"},{"name":"assignmentStartButtonSecondary","comment":" ","type":"{ r | assignmentStartButtonSecondary_svg : Nri.Ui.AssetPath.Asset } -> Nri.Ui.Icon.V5.IconType"},{"name":"assignmentTypeDiagnostic","comment":" ","type":"{ r | diagnostic : String.String } -> Nri.Ui.Icon.V5.IconType"},{"name":"assignmentTypeGuidedDraft","comment":" ","type":"{ r | guidedDraft : String.String } -> Nri.Ui.Icon.V5.IconType"},{"name":"assignmentTypePeerReview","comment":" ","type":"{ r | peerReview : String.String } -> Nri.Ui.Icon.V5.IconType"},{"name":"assignmentTypePractice","comment":" ","type":"{ r | practice : String.String } -> Nri.Ui.Icon.V5.IconType"},{"name":"assignmentTypeQuickWrite","comment":" ","type":"{ r | quickWrite : String.String } -> Nri.Ui.Icon.V5.IconType"},{"name":"assignmentTypeQuiz","comment":" ","type":"{ r | quiz : String.String } -> Nri.Ui.Icon.V5.IconType"},{"name":"assignmentTypeSelfReview","comment":" ","type":"{ r | selfReview : String.String } -> Nri.Ui.Icon.V5.IconType"},{"name":"assignmentTypeWritingCycle","comment":" ","type":"{ r | writingcycle : String.String } -> Nri.Ui.Icon.V5.IconType"},{"name":"attention","comment":" ","type":"{ r | attention_svg : Nri.Ui.AssetPath.Asset } -> Nri.Ui.Icon.V5.IconType"},{"name":"bulb","comment":" ","type":"{ r | bulb : String.String } -> Nri.Ui.Icon.V5.IconType"},{"name":"button","comment":" Create an accessible icon button with an onClick handler\nUses our default icon styles (25 x 25 px, azure)\n","type":"Nri.Ui.Icon.V5.IconButtonModel msg -> Accessibility.Styled.Html msg"},{"name":"calendar","comment":" ","type":"{ r | calendar : String.String } -> Nri.Ui.Icon.V5.IconType"},{"name":"checkMarkSvg","comment":" ","type":"{ r | checkmark : String.String } -> Nri.Ui.Icon.V5.IconType"},{"name":"class","comment":" ","type":"{ r | class : String.String } -> Nri.Ui.Icon.V5.IconType"},{"name":"clever","comment":" ","type":"{ r | clever : String.String } -> Nri.Ui.Icon.V5.IconType"},{"name":"clock","comment":" ","type":"{ r | clock : String.String } -> Nri.Ui.Icon.V5.IconType"},{"name":"compassSvg","comment":" ","type":"{ r | compass : String.String } -> Nri.Ui.Icon.V5.IconType"},{"name":"decorativeIcon","comment":" Use this icon for purely decorative content that would be distracting\nrather than helpful on a screenreader.\n","type":"Nri.Ui.Icon.V5.IconType -> Accessibility.Styled.Html msg"},{"name":"document","comment":" ","type":"{ r | document : String.String } -> Nri.Ui.Icon.V5.IconType"},{"name":"download","comment":" ","type":"{ r | download : String.String } -> Nri.Ui.Icon.V5.IconType"},{"name":"edit","comment":" ","type":"{ r | edit : String.String } -> Nri.Ui.Icon.V5.IconType"},{"name":"editWriting","comment":" ","type":"{ r | editWriting : String.String } -> Nri.Ui.Icon.V5.IconType"},{"name":"equalitySign","comment":" ","type":"{ r | icons_equals_svg : Nri.Ui.AssetPath.Asset } -> Nri.Ui.Icon.V5.IconType"},{"name":"exclamation","comment":" ","type":"{ r | exclamation : String.String } -> Nri.Ui.Icon.V5.IconType"},{"name":"facebook","comment":" ","type":"{ r | facebookBlue_svg : Nri.Ui.AssetPath.Asset } -> Nri.Ui.Icon.V5.IconType"},{"name":"flag","comment":" ","type":"{ r | iconFlag_png : Nri.Ui.AssetPath.Asset } -> Nri.Ui.Icon.V5.IconType"},{"name":"flipper","comment":" ","type":"{ r | flipper : String.String } -> Nri.Ui.Icon.V5.IconType"},{"name":"footsteps","comment":" ","type":"{ r | footsteps : String.String } -> Nri.Ui.Icon.V5.IconType"},{"name":"gardening","comment":" ","type":"{ r | startingOffBadge_png : Nri.Ui.AssetPath.Asset } -> Nri.Ui.Icon.V5.IconType"},{"name":"gear","comment":" ","type":"{ r | gear : String.String } -> Nri.Ui.Icon.V5.IconType"},{"name":"guidedWrite","comment":" ","type":"{ r | icons_guidedWrite_svg : Nri.Ui.AssetPath.Asset } -> Nri.Ui.Icon.V5.IconType"},{"name":"helpSvg","comment":" ","type":"{ r | help : String.String } -> Nri.Ui.Icon.V5.IconType"},{"name":"highFive","comment":" ","type":"{ r | level3Badge_png : Nri.Ui.AssetPath.Asset } -> Nri.Ui.Icon.V5.IconType"},{"name":"icon","comment":" ","type":"{ alt : String.String, icon : Nri.Ui.Icon.V5.IconType } -> Accessibility.Styled.Html msg"},{"name":"key","comment":" ","type":"{ r | key : String.String } -> Nri.Ui.Icon.V5.IconType"},{"name":"leaderboard","comment":" ","type":"{ r | leaderboard : String.String } -> Nri.Ui.Icon.V5.IconType"},{"name":"lightBulb","comment":" ","type":"{ r | hint_png : Nri.Ui.AssetPath.Asset } -> Nri.Ui.Icon.V5.IconType"},{"name":"link","comment":" Create an icon that links to a part of NRI\nUses our default icon styles (25 x 25 px, azure)\n","type":"Nri.Ui.Icon.V5.IconLinkModel -> Accessibility.Styled.Html msg"},{"name":"linkExternal","comment":" Create an icon that links to an external site\nUses our default icon styles (25 x 25 px, azure)\n","type":"Nri.Ui.Icon.V5.IconLinkModel -> Accessibility.Styled.Html msg"},{"name":"linkSpa","comment":" Use this link for routing within a single page app.\n\nThis will make a normal <a> tag, but change the onClick behavior to avoid reloading the page.\n\n","type":"(route -> String.String) -> (route -> msg) -> Nri.Ui.Icon.V5.IconLinkSpaModel route -> Accessibility.Styled.Html msg"},{"name":"lock","comment":" ","type":"{ r | lock : String.String } -> Nri.Ui.Icon.V5.IconType"},{"name":"logo","comment":" ","type":"{ r | logoRedBlack_svg : Nri.Ui.AssetPath.Asset } -> Nri.Ui.Icon.V5.IconType"},{"name":"masteryBadge","comment":" ","type":"{ r | masteryBadge : String.String } -> Nri.Ui.Icon.V5.IconType"},{"name":"newspaper","comment":" ","type":"{ r | newspaper : String.String } -> Nri.Ui.Icon.V5.IconType"},{"name":"notStarred","comment":" ","type":"{ r | commentNotStarred_png : Nri.Ui.AssetPath.Asset } -> Nri.Ui.Icon.V5.IconType"},{"name":"okay","comment":" ","type":"{ r | level2Badge_png : Nri.Ui.AssetPath.Asset } -> Nri.Ui.Icon.V5.IconType"},{"name":"openClose","comment":" ","type":"{ r | openClose : String.String } -> Nri.Ui.Icon.V5.IconType"},{"name":"pen","comment":" ","type":"{ r | pen : Nri.Ui.AssetPath.Asset } -> Nri.Ui.Icon.V5.IconType"},{"name":"performance","comment":" ","type":"{ r | performance : String.String } -> Nri.Ui.Icon.V5.IconType"},{"name":"personBlue","comment":" ","type":"{ r | personBlue_svg : Nri.Ui.AssetPath.Asset } -> Nri.Ui.Icon.V5.IconType"},{"name":"preview","comment":" ","type":"{ r | preview : String.String } -> Nri.Ui.Icon.V5.IconType"},{"name":"rating","comment":" ","type":"{ r | rating : String.String } -> Nri.Ui.Icon.V5.IconType"},{"name":"revising","comment":" ","type":"{ r | revising : String.String } -> Nri.Ui.Icon.V5.IconType"},{"name":"seeMore","comment":" ","type":"{ r | seemore : String.String } -> Nri.Ui.Icon.V5.IconType"},{"name":"share","comment":" ","type":"{ r | share : String.String } -> Nri.Ui.Icon.V5.IconType"},{"name":"skip","comment":" ","type":"{ r | skip : String.String } -> Nri.Ui.Icon.V5.IconType"},{"name":"sort","comment":" ","type":"{ r | sort : String.String } -> Nri.Ui.Icon.V5.IconType"},{"name":"sortArrow","comment":" ","type":"{ r | sortArrow : String.String } -> Nri.Ui.Icon.V5.IconType"},{"name":"speedometer","comment":" ","type":"{ r | speedometer : String.String } -> Nri.Ui.Icon.V5.IconType"},{"name":"starred","comment":" ","type":"{ r | commentStarred_png : Nri.Ui.AssetPath.Asset } -> Nri.Ui.Icon.V5.IconType"},{"name":"submitting","comment":" ","type":"{ r | submitting : String.String } -> Nri.Ui.Icon.V5.IconType"},{"name":"thumbsUp","comment":" ","type":"{ r | level1Badge_png : Nri.Ui.AssetPath.Asset } -> Nri.Ui.Icon.V5.IconType"},{"name":"twitter","comment":" ","type":"{ r | twitterBlue_svg : Nri.Ui.AssetPath.Asset } -> Nri.Ui.Icon.V5.IconType"},{"name":"unarchive","comment":" ","type":"{ r | unarchiveBlue2x_png : Nri.Ui.AssetPath.Asset } -> Nri.Ui.Icon.V5.IconType"},{"name":"writingAssignment","comment":" ","type":"{ r | writingAssignment : String.String } -> Nri.Ui.Icon.V5.IconType"},{"name":"xSvg","comment":" ","type":"{ r | x : String.String } -> Nri.Ui.Icon.V5.IconType"}],"binops":[]},{"name":"Nri.Ui.InputStyles.V2","comment":" InputStyles used by the TextInput and TextArea widgets.\n\n@docs label, Theme, input\n\n\n## Shared hardcoded values\n\n@docs inputPaddingVertical, inputLineHeight, textAreaHeight, writingLineHeight, writingPadding, writingPaddingTop, writingMinHeight\n\n","unions":[{"name":"Theme","comment":" ","args":[],"cases":[["ContentCreation",[]],["Standard",[]],["Writing",[]]]}],"aliases":[],"values":[{"name":"input","comment":" In order to use these styles in an input module, you will need to add the class \"override-sass-styles\". This is because sass styles in the monolith have higher precendence than the class styles here.\n","type":"Nri.Ui.InputStyles.V2.Theme -> Basics.Bool -> Css.Style"},{"name":"inputLineHeight","comment":" ","type":"Css.Px"},{"name":"inputPaddingVertical","comment":" ","type":"Css.Px"},{"name":"label","comment":" ","type":"Nri.Ui.InputStyles.V2.Theme -> Basics.Bool -> Css.Style"},{"name":"textAreaHeight","comment":" ","type":"Css.Px"},{"name":"writingLineHeight","comment":" ","type":"Css.Px"},{"name":"writingMinHeight","comment":" ","type":"Css.Px"},{"name":"writingPadding","comment":" ","type":"Css.Px"},{"name":"writingPaddingTop","comment":" ","type":"Css.Px"}],"binops":[]},{"name":"Nri.Ui.Logo.V1","comment":"\n\n@docs noredink\n@docs facebook, twitter, clever, googleClassroom\n\n","unions":[],"aliases":[],"values":[{"name":"clever","comment":" ","type":"Nri.Ui.Svg.V1.Svg"},{"name":"facebook","comment":" ","type":"Nri.Ui.Svg.V1.Svg"},{"name":"googleClassroom","comment":" ","type":"Nri.Ui.Svg.V1.Svg"},{"name":"noredink","comment":" ","type":"Nri.Ui.Svg.V1.Svg"},{"name":"twitter","comment":" ","type":"Nri.Ui.Svg.V1.Svg"}],"binops":[]},{"name":"Nri.Ui.MasteryIcon.V1","comment":"\n\n@docs levelZero, levelOne, levelTwo, levelThree\n\n","unions":[],"aliases":[],"values":[{"name":"levelOne","comment":" ","type":"Nri.Ui.Svg.V1.Svg"},{"name":"levelThree","comment":" ","type":"Nri.Ui.Svg.V1.Svg"},{"name":"levelTwo","comment":" ","type":"Nri.Ui.Svg.V1.Svg"},{"name":"levelZero","comment":" ","type":"Nri.Ui.Svg.V1.Svg"}],"binops":[]},{"name":"Nri.Ui.Modal.V2","comment":" Changes from V1:\n\n  - Use Styled Html\n\n@docs Model\n@docs info\n@docs warning\n\n","unions":[],"aliases":[{"name":"Model","comment":"\n\n  - `onDismiss`: If `Nothing`, the modal will not be dismissable\n  - `visibleTitle`: If `False`, the title will still be used for screen readers\n  - `content`: This will be placed in a `width:100%` div in the main area of the modal\n  - `footerContent`: The optional items here will be stacked below the main content area and center-aligned.\n    Commonly you will either give a list of Nri.Ui.Buttons,\n    or an empty list.\n\n","args":["msg"],"type":"{ title : String.String, visibleTitle : Basics.Bool, content : Accessibility.Styled.Html msg, footerContent : List.List (Accessibility.Styled.Html msg), onDismiss : Maybe.Maybe msg, width : Maybe.Maybe Basics.Int }"}],"values":[{"name":"info","comment":" ","type":"Nri.Ui.Modal.V2.Model msg -> Accessibility.Styled.Html msg"},{"name":"warning","comment":" ","type":"Nri.Ui.Modal.V2.Model msg -> Accessibility.Styled.Html msg"}],"binops":[]},{"name":"Nri.Ui.Modal.V3","comment":" Changes from V2:\n\n  - Add assets for close button\n\n@docs Model\n@docs info\n@docs warning\n\n","unions":[],"aliases":[{"name":"Model","comment":"\n\n  - `onDismiss`: If `Nothing`, the modal will not be dismissable\n  - `visibleTitle`: If `False`, the title will still be used for screen readers\n  - `content`: This will be placed in a `width:100%` div in the main area of the modal\n  - `footerContent`: The optional items here will be stacked below the main content area and center-aligned.\n    Commonly you will either give a list of Nri.Ui.Buttons,\n    or an empty list.\n\n","args":["msg"],"type":"{ title : String.String, visibleTitle : Basics.Bool, content : Accessibility.Styled.Html msg, footerContent : List.List (Accessibility.Styled.Html msg), onDismiss : Maybe.Maybe msg, width : Maybe.Maybe Basics.Int }"}],"values":[{"name":"info","comment":" ","type":"Nri.Ui.Modal.V3.Assets r -> Nri.Ui.Modal.V3.Model msg -> Accessibility.Styled.Html msg"},{"name":"warning","comment":" ","type":"Nri.Ui.Modal.V3.Assets r -> Nri.Ui.Modal.V3.Model msg -> Accessibility.Styled.Html msg"}],"binops":[]},{"name":"Nri.Ui.Modal.V4","comment":" Changes from V3:\n\n  - changed `onDismiss` from `Maybe msg` to `Dismissibility msg`\n\nChanges from V2:\n\n  - Add assets for close button\n\n@docs Model, Dismissibility\n@docs info\n@docs warning\n\n","unions":[{"name":"Dismissibility","comment":"\n\n  - `NotDismissible`\n  - `WithBackgroundOrX`: user can dismiss by clicking \"X\" (top right) or modal backdrop\n  - `WithOnlyX`: user can dismiss by clicking \"X\" (top right)\n\n","args":["msg"],"cases":[["NotDismissible",[]],["WithBackgroundOrX",["msg"]],["WithOnlyX",["msg"]]]}],"aliases":[{"name":"Model","comment":"\n\n  - `onDismiss`: If `Nothing`, the modal will not be dismissable\n  - `visibleTitle`: If `False`, the title will still be used for screen readers\n  - `content`: This will be placed in a `width:100%` div in the main area of the modal\n  - `footerContent`: The optional items here will be stacked below the main content area and center-aligned.\n    Commonly you will either give a list of Nri.Ui.Buttons,\n    or an empty list.\n\n","args":["msg"],"type":"{ title : String.String, visibleTitle : Basics.Bool, content : Accessibility.Styled.Html msg, footerContent : List.List (Accessibility.Styled.Html msg), onDismiss : Nri.Ui.Modal.V4.Dismissibility msg, width : Maybe.Maybe Basics.Int }"}],"values":[{"name":"info","comment":" ","type":"Nri.Ui.Modal.V4.Assets r -> Nri.Ui.Modal.V4.Model msg -> Accessibility.Styled.Html msg"},{"name":"warning","comment":" ","type":"Nri.Ui.Modal.V4.Assets r -> Nri.Ui.Modal.V4.Model msg -> Accessibility.Styled.Html msg"}],"binops":[]},{"name":"Nri.Ui.Modal.V5","comment":" Changes from V4:\n\n  - Remove dependence on Assets\n  - Adds keyboard support (escape key to exit, tabs contained within the modal)\n\nThese changes have required major API changes. Be sure to wire up subscriptions!\n\n    import Html.Styled exposing (..)\n    import Nri.Ui.Modal.V5 as Modal\n\n    view : Modal.State -> Html Msg\n    view state =\n        Modal.info\n            { title = { title = \"Modal Header\", visibleTitle = True }\n            , wrapMsg = ModalMsg\n            , content =\n                \\{ onlyFocusableElement } ->\n                    div []\n                        [ Modal.viewContent [ text \"Content goes here!\" ]\n                        , Modal.viewFooter\n                            [ Modal.primaryButton DoSomething \"Continue\" onlyFocusableElement\n                            , text \"`onlyFocusableElement` will trap the focus on the 'Continue' button.\"\n                            ]\n                        ]\n            }\n            state\n\n    subscriptions : Modal.State -> Sub Msg\n    subscriptions state =\n        Modal.subscriptions state\n\n\n## State and updates\n\n@docs Model, init\n@docs Msg, update, subscriptions\n\n\n## Views\n\n\n### Modals\n\n@docs info, warning, FocusableElementAttrs\n\n\n### View containers\n\n@docs viewContent, viewFooter\n\n\n### Buttons\n\n@docs launchButton, closeButton\n@docs primaryButton, secondaryButton, dangerButton\n\n","unions":[],"aliases":[{"name":"FocusableElementAttrs","comment":" ","args":["msg"],"type":"{ onlyFocusableElement : List.List (Html.Attribute msg), firstFocusableElement : List.List (Html.Attribute msg), lastFocusableElement : List.List (Html.Attribute msg) }"},{"name":"Model","comment":" ","args":[],"type":"Accessibility.Modal.Model"},{"name":"Msg","comment":" ","args":[],"type":"Accessibility.Modal.Msg"}],"values":[{"name":"closeButton","comment":" ","type":"(Nri.Ui.Modal.V5.Msg -> msg) -> List.List (Html.Attribute msg) -> Accessibility.Styled.Html msg"},{"name":"dangerButton","comment":" ","type":"msg -> String.String -> List.List (Html.Attribute msg) -> Accessibility.Styled.Html msg"},{"name":"info","comment":" ","type":"{ title : { visibleTitle : Basics.Bool, title : String.String }, content : Nri.Ui.Modal.V5.FocusableElementAttrs msg -> Accessibility.Styled.Html msg, wrapMsg : Nri.Ui.Modal.V5.Msg -> msg } -> Nri.Ui.Modal.V5.Model -> Accessibility.Styled.Html msg"},{"name":"init","comment":" ","type":"Nri.Ui.Modal.V5.Model"},{"name":"launchButton","comment":" ","type":"(Nri.Ui.Modal.V5.Msg -> msg) -> List.List Css.Style -> String.String -> Accessibility.Styled.Html msg"},{"name":"primaryButton","comment":" ","type":"msg -> String.String -> List.List (Html.Attribute msg) -> Accessibility.Styled.Html msg"},{"name":"secondaryButton","comment":" ","type":"msg -> String.String -> List.List (Html.Attribute msg) -> Accessibility.Styled.Html msg"},{"name":"subscriptions","comment":" Include the subscription if you want the modal to dismiss on `Esc`.\n","type":"Nri.Ui.Modal.V5.Model -> Platform.Sub.Sub Nri.Ui.Modal.V5.Msg"},{"name":"update","comment":" ","type":"{ dismissOnEscAndOverlayClick : Basics.Bool } -> Nri.Ui.Modal.V5.Msg -> Nri.Ui.Modal.V5.Model -> ( Nri.Ui.Modal.V5.Model, Platform.Cmd.Cmd Nri.Ui.Modal.V5.Msg )"},{"name":"viewContent","comment":" ","type":"List.List (Accessibility.Styled.Html msg) -> Accessibility.Styled.Html msg"},{"name":"viewFooter","comment":" ","type":"List.List (Accessibility.Styled.Html msg) -> Accessibility.Styled.Html msg"},{"name":"warning","comment":" ","type":"{ title : { visibleTitle : Basics.Bool, title : String.String }, content : Nri.Ui.Modal.V5.FocusableElementAttrs msg -> Accessibility.Styled.Html msg, wrapMsg : Nri.Ui.Modal.V5.Msg -> msg } -> Nri.Ui.Modal.V5.Model -> Accessibility.Styled.Html msg"}],"binops":[]},{"name":"Nri.Ui.Modal.V6","comment":" Changes from V5:\n\n  - Removes button helpers, now that we can use Nri.Ui.Button.V9 directly\n\nThese changes have required major API changes. Be sure to wire up subscriptions!\n\n    import Html.Styled exposing (..)\n    import Nri.Ui.Button.V10 as Button\n    import Nri.Ui.Modal.V6 as Modal\n\n    type Msg\n        = ModalMsg Modal.Msg\n        | DoSomthing\n\n    view : Modal.Model -> Html Msg\n    view state =\n        Modal.info\n            { title = \"Modal Header\"\n            , visibleTitle = True\n            , wrapMsg = ModalMsg\n            , content =\n                \\{ onlyFocusableElement } ->\n                    div []\n                        [ Modal.viewContent [ text \"Content goes here!\" ]\n                        , Modal.viewFooter\n                            [ Button.button \"Continue\"\n                                [ Button.primary\n                                , Button.onClick DoSomthing\n                                , Button.custom onlyFocusableElement\n                                ]\n                            , text \"`onlyFocusableElement` will trap the focus on the 'Continue' button.\"\n                            ]\n                        ]\n            }\n            state\n\n    subscriptions : Modal.Model -> Sub Msg\n    subscriptions state =\n        Modal.subscriptions state\n\n    view init\n    --> text \"\"  -- a closed modal\n\n\n## State and updates\n\n@docs Model, init\n@docs Msg, update, subscriptions\n\n@docs open, close\n\n\n## Views\n\n\n### Modals\n\n@docs info, warning, FocusableElementAttrs\n\n\n### View containers\n\n@docs viewContent, viewFooter\n\n\n## X icon\n\n@docs closeButton\n\n","unions":[],"aliases":[{"name":"FocusableElementAttrs","comment":" ","args":["msg"],"type":"{ onlyFocusableElement : List.List (Accessibility.Styled.Attribute msg), firstFocusableElement : List.List (Accessibility.Styled.Attribute msg), lastFocusableElement : List.List (Accessibility.Styled.Attribute msg) }"},{"name":"Model","comment":" ","args":[],"type":"Accessibility.Modal.Model"},{"name":"Msg","comment":" ","args":[],"type":"Accessibility.Modal.Msg"}],"values":[{"name":"close","comment":" ","type":"Nri.Ui.Modal.V6.Msg"},{"name":"closeButton","comment":" ","type":"(Nri.Ui.Modal.V6.Msg -> msg) -> List.List (Accessibility.Styled.Attribute msg) -> Accessibility.Styled.Html msg"},{"name":"info","comment":" ","type":"{ visibleTitle : Basics.Bool, title : String.String, content : Nri.Ui.Modal.V6.FocusableElementAttrs msg -> Accessibility.Styled.Html msg, wrapMsg : Nri.Ui.Modal.V6.Msg -> msg } -> Nri.Ui.Modal.V6.Model -> Accessibility.Styled.Html msg"},{"name":"init","comment":" ","type":"Nri.Ui.Modal.V6.Model"},{"name":"open","comment":" Pass the id of the element that focus should return to when the modal closes.\n","type":"String.String -> Nri.Ui.Modal.V6.Msg"},{"name":"subscriptions","comment":" Include the subscription if you want the modal to dismiss on `Esc`.\n","type":"Nri.Ui.Modal.V6.Model -> Platform.Sub.Sub Nri.Ui.Modal.V6.Msg"},{"name":"update","comment":" ","type":"{ dismissOnEscAndOverlayClick : Basics.Bool } -> Nri.Ui.Modal.V6.Msg -> Nri.Ui.Modal.V6.Model -> ( Nri.Ui.Modal.V6.Model, Platform.Cmd.Cmd Nri.Ui.Modal.V6.Msg )"},{"name":"viewContent","comment":" ","type":"List.List (Accessibility.Styled.Html msg) -> Accessibility.Styled.Html msg"},{"name":"viewFooter","comment":" ","type":"List.List (Accessibility.Styled.Html msg) -> Accessibility.Styled.Html msg"},{"name":"warning","comment":" ","type":"{ visibleTitle : Basics.Bool, title : String.String, content : Nri.Ui.Modal.V6.FocusableElementAttrs msg -> Accessibility.Styled.Html msg, wrapMsg : Nri.Ui.Modal.V6.Msg -> msg } -> Nri.Ui.Modal.V6.Model -> Accessibility.Styled.Html msg"}],"binops":[]},{"name":"Nri.Ui.Modal.V7","comment":" Changes from V6:\n\n  - Modal starts a new stacking context, to prevent non-normal-flow elements from showing through the backdrop\n  - Scrollable content shows a shadow\n\n```\n    import Html.Styled exposing (..)\n    import Nri.Ui.Button.V10 as Button\n    import Nri.Ui.Modal.V7 as Modal\n\n    type Msg\n        = ModalMsg Modal.Msg\n        | DoSomthing\n\n    view : Modal.Model -> Html Msg\n    view state =\n        Modal.info\n            { title = \"Modal Header\"\n            , visibleTitle = True\n            , wrapMsg = ModalMsg\n            }\n            [ Modal.onlyFocusableElementView\n                (\\{ onlyFocusableElement } ->\n                    div []\n                        [ Modal.viewContent [ text \"Content goes here!\" ]\n                        , Modal.viewFooter\n                            [ Button.button \"Continue\"\n                                [ Button.primary\n                                , Button.onClick DoSomthing\n                                , Button.custom onlyFocusableElement\n                                ]\n                            , text \"`onlyFocusableElement` will trap the focus on the 'Continue' button.\"\n                            ]\n                        ]\n                )\n            ]\n            state\n\n    subscriptions : Modal.Model -> Sub Msg\n    subscriptions state =\n        Modal.subscriptions state\n\n    view init\n    --> text \"\"  -- a closed modal\n```\n\n\n## State and updates\n\n@docs Model, init\n@docs Msg, update, subscriptions\n\n@docs open, close\n\n\n## Views\n\n\n### Modals\n\n@docs info, warning\n\n\n### View containers\n\n@docs viewContent, viewFooter\n\n\n### Attributes\n\n@docs Attribute\n@docs multipleFocusableElementView, onlyFocusableElementView\n@docs autofocusOnLastElement\n\n\n## X icon\n\n@docs closeButton\n\n","unions":[],"aliases":[{"name":"Attribute","comment":" ","args":["msg"],"type":"Accessibility.Modal.Copy.Attribute msg"},{"name":"Model","comment":" ","args":[],"type":"Accessibility.Modal.Copy.Model"},{"name":"Msg","comment":" ","args":[],"type":"Accessibility.Modal.Copy.Msg"}],"values":[{"name":"autofocusOnLastElement","comment":" ","type":"Accessibility.Modal.Copy.Attribute msg"},{"name":"close","comment":" ","type":"Nri.Ui.Modal.V7.Msg"},{"name":"closeButton","comment":" ","type":"(Nri.Ui.Modal.V7.Msg -> msg) -> List.List (Accessibility.Styled.Attribute msg) -> Accessibility.Styled.Html msg"},{"name":"info","comment":" ","type":"{ visibleTitle : Basics.Bool, title : String.String, wrapMsg : Nri.Ui.Modal.V7.Msg -> msg } -> List.List (Accessibility.Modal.Copy.Attribute msg) -> Nri.Ui.Modal.V7.Model -> Accessibility.Styled.Html msg"},{"name":"init","comment":" ","type":"Nri.Ui.Modal.V7.Model"},{"name":"multipleFocusableElementView","comment":" ","type":"({ firstFocusableElement : List.List (Accessibility.Styled.Attribute msg), lastFocusableElement : List.List (Accessibility.Styled.Attribute msg), autofocusElement : Accessibility.Styled.Attribute msg } -> Accessibility.Styled.Html msg) -> Accessibility.Modal.Copy.Attribute msg"},{"name":"onlyFocusableElementView","comment":" ","type":"(List.List (Accessibility.Styled.Attribute msg) -> Accessibility.Styled.Html msg) -> Accessibility.Modal.Copy.Attribute msg"},{"name":"open","comment":" Pass the id of the element that focus should return to when the modal closes.\n","type":"String.String -> Nri.Ui.Modal.V7.Msg"},{"name":"subscriptions","comment":" Include the subscription if you want the modal to dismiss on `Esc`.\n","type":"Nri.Ui.Modal.V7.Model -> Platform.Sub.Sub Nri.Ui.Modal.V7.Msg"},{"name":"update","comment":" ","type":"{ dismissOnEscAndOverlayClick : Basics.Bool } -> Nri.Ui.Modal.V7.Msg -> Nri.Ui.Modal.V7.Model -> ( Nri.Ui.Modal.V7.Model, Platform.Cmd.Cmd Nri.Ui.Modal.V7.Msg )"},{"name":"viewContent","comment":" ","type":"List.List (Accessibility.Styled.Html msg) -> Accessibility.Styled.Html msg"},{"name":"viewFooter","comment":" ","type":"List.List (Accessibility.Styled.Html msg) -> Accessibility.Styled.Html msg"},{"name":"warning","comment":" ","type":"{ visibleTitle : Basics.Bool, title : String.String, wrapMsg : Nri.Ui.Modal.V7.Msg -> msg } -> List.List (Accessibility.Modal.Copy.Attribute msg) -> Nri.Ui.Modal.V7.Model -> Accessibility.Styled.Html msg"}],"binops":[]},{"name":"Nri.Ui.Modal.V8","comment":" Changes from V7:\n\n  - More customizable attributes\n  - Rather than accepting any number of attributes, Modal provides one callback that returns a focusable\n  - viewFooter has been merged into viewContent\n  - viewContent and closeButton are now callbacks that are pre-configured with settings\n    (previously you passed config through)\n\n```\n    import Html.Styled exposing (..)\n    import Nri.Ui.Button.V10 as Button\n    import Nri.Ui.Modal.V8 as Modal\n\n    type Msg\n        = ModalMsg Modal.Msg\n        | DoSomething\n\n    view : Modal.Model -> Html Msg\n    view state =\n        Modal.info\n            { title = \"Modal Header\"\n            , wrapMsg = ModalMsg\n            , visibleTitle = True\n            }\n            (\\{viewContent, closeButton} ->\n                Modal.onlyFocusableElementView\n                    (\\{ onlyFocusableElement } ->\n                        div []\n                            [ viewContent {\n                                , content = [ text \"Content goes here!\" ]\n                                , footer =\n                                    [ Button.button \"Continue\"\n                                        [ Button.primary\n                                        , Button.onClick DoSomething\n                                        , Button.custom onlyFocusableElement\n                                        ]\n                                    , text \"`onlyFocusableElement` will trap the focus on the 'Continue' button.\"\n                                    ]\n                                }\n                                visibleTitle\n                            ]\n                    )\n            )\n            state\n\n    subscriptions : Modal.Model -> Sub Msg\n    subscriptions state =\n        Modal.subscriptions state\n\n    view init\n    --> text \"\"  -- a closed modal\n```\n\n\n## State and updates\n\n@docs Model, init\n@docs Msg, update, subscriptions\n\n@docs open, close\n\n\n## Views\n\n\n### Modals\n\n@docs info, warning\n@docs ViewFuncs\n\n\n### Focusable\n\n@docs Focusable\n@docs multipleFocusableElementView, onlyFocusableElementView\n\n","unions":[{"name":"Focusable","comment":" ","args":["msg"],"cases":[]}],"aliases":[{"name":"Model","comment":" ","args":[],"type":"Accessibility.Modal.Copy.Model"},{"name":"Msg","comment":" ","args":[],"type":"Accessibility.Modal.Copy.Msg"},{"name":"ViewFuncs","comment":" ","args":["msg"],"type":"{ viewContent : { content : List.List (Accessibility.Styled.Html msg), footer : List.List (Accessibility.Styled.Html msg) } -> Accessibility.Styled.Html msg, closeButton : List.List (Accessibility.Styled.Attribute msg) -> Accessibility.Styled.Html msg }"}],"values":[{"name":"close","comment":" ","type":"Nri.Ui.Modal.V8.Msg"},{"name":"info","comment":" ","type":"Nri.Ui.Modal.V8.Config msg -> (Nri.Ui.Modal.V8.ViewFuncs msg -> Nri.Ui.Modal.V8.Focusable msg) -> Nri.Ui.Modal.V8.Model -> Accessibility.Styled.Html msg"},{"name":"init","comment":" ","type":"Nri.Ui.Modal.V8.Model"},{"name":"multipleFocusableElementView","comment":" ","type":"({ firstFocusableElement : List.List (Accessibility.Styled.Attribute msg), lastFocusableElement : List.List (Accessibility.Styled.Attribute msg), autofocusElement : Accessibility.Styled.Attribute msg } -> Accessibility.Styled.Html msg) -> Nri.Ui.Modal.V8.Focusable msg"},{"name":"onlyFocusableElementView","comment":" ","type":"(List.List (Accessibility.Styled.Attribute msg) -> Accessibility.Styled.Html msg) -> Nri.Ui.Modal.V8.Focusable msg"},{"name":"open","comment":" Pass the id of the element that focus should return to when the modal closes.\n","type":"String.String -> Nri.Ui.Modal.V8.Msg"},{"name":"subscriptions","comment":" Include the subscription if you want the modal to dismiss on `Esc`.\n","type":"Nri.Ui.Modal.V8.Model -> Platform.Sub.Sub Nri.Ui.Modal.V8.Msg"},{"name":"update","comment":" ","type":"{ dismissOnEscAndOverlayClick : Basics.Bool } -> Nri.Ui.Modal.V8.Msg -> Nri.Ui.Modal.V8.Model -> ( Nri.Ui.Modal.V8.Model, Platform.Cmd.Cmd Nri.Ui.Modal.V8.Msg )"},{"name":"warning","comment":" ","type":"Nri.Ui.Modal.V8.Config msg -> (Nri.Ui.Modal.V8.ViewFuncs msg -> Nri.Ui.Modal.V8.Focusable msg) -> Nri.Ui.Modal.V8.Model -> Accessibility.Styled.Html msg"}],"binops":[]},{"name":"Nri.Ui.Outline.V2","comment":" A module for rendering outline layouts.\n\n@docs segment\n@docs node\n@docs NodeLayout\n@docs NodeConfig\n@docs config\n@docs html\n\n","unions":[{"name":"NodeLayout","comment":" A wrapper for a node rendered into Html. This type exists to prevent us\nfrom accidentally wrapping a node in a container element before passing it as a\nchild to another node or segment. Such wrapping would break some of our\nstyling, which assumes nodes of the same level are sibblings in the Html tree.\n","args":["msg"],"cases":[]}],"aliases":[{"name":"NodeConfig","comment":" Defines how a node should look.\n","args":["msg"],"type":"{ label : Html.Styled.Html msg, contents : Html.Styled.Html msg, children : List.List (Nri.Ui.Outline.V2.NodeLayout msg), selected : Basics.Bool, ghosted : Basics.Bool, attrs : List.List (Html.Styled.Attribute msg) }"}],"values":[{"name":"config","comment":" A default node configuration, allowing you to only set the properties you care about.\n\n    node { config | label = \"Claim\" }\n\n","type":"Nri.Ui.Outline.V2.NodeConfig msg"},{"name":"html","comment":" Wrap any html in a NodeLayout so you can use it as sibling content to nodes.\n\n    segment\n        [ node { config | label = \"This is a node\" }\n        , html (Html.text \"This is some random Html content!\")\n        ]\n\n","type":"Html.Styled.Html msg -> Nri.Ui.Outline.V2.NodeLayout msg"},{"name":"node","comment":" Draw a node of an outline structure. You can draw other nodes inside it and\nconnecting lines will appear.\n\n    node { config | label = \"Claim\" }\n\n","type":"Nri.Ui.Outline.V2.NodeConfig msg -> Nri.Ui.Outline.V2.NodeLayout msg"},{"name":"segment","comment":" A container to draw nodes in.\n\n    segment\n        [ node { config | label = \"First Node\" }\n        , node { config | label = \"Second Node\" }\n        ]\n\n","type":"List.List (Nri.Ui.Outline.V2.NodeLayout msg) -> Html.Styled.Html msg"}],"binops":[]},{"name":"Nri.Ui.Page.V2","comment":" A styled NRI issue page!\n\n@docs DefaultPage, broken, blocked, notFound, noPermission\n\n","unions":[],"aliases":[{"name":"DefaultPage","comment":" The default page information is for the button\nwhich will direct the user back to the main page of\nthe SPA. Specify it's name and the message which will\nnavigate to the page.\n","args":["msg"],"type":"{ link : msg, name : String.String }"}],"values":[{"name":"blocked","comment":" For HTTP errors and other broken states, where link goes to \"/\".\n","type":"String.String -> Html.Styled.Html msg"},{"name":"broken","comment":" For HTTP errors and other broken states.\n","type":"Nri.Ui.Page.V2.DefaultPage msg -> Html.Styled.Html msg"},{"name":"noPermission","comment":" For pages the user does not have access to.\n","type":"Nri.Ui.Page.V2.DefaultPage msg -> Html.Styled.Html msg"},{"name":"notFound","comment":" For the not found page.\n","type":"Nri.Ui.Page.V2.DefaultPage msg -> Html.Styled.Html msg"}],"binops":[]},{"name":"Nri.Ui.Page.V3","comment":" A styled NRI issue page!\n\n@docs DefaultPage, broken, blocked, notFound, noPermission\n@docs RecoveryText\n\n","unions":[{"name":"RecoveryText","comment":" ReturnTo just needs the name of the page the user\nwill be returned to. Reload displays default text to reload\nthe current page. Custom is to add flexibility to the button.\n","args":[],"cases":[["ReturnTo",["String.String"]],["Reload",[]],["Custom",["String.String"]]]}],"aliases":[{"name":"DefaultPage","comment":" The default page information is for the button\nwhich will direct the user back to the main page of\nthe SPA. Specify it's name and the message which will\nnavigate to the page.\n","args":["msg"],"type":"{ link : msg, recoveryText : Nri.Ui.Page.V3.RecoveryText }"}],"values":[{"name":"blocked","comment":" For HTTP errors and other broken states, where link goes to \"/\".\n","type":"String.String -> Html.Styled.Html msg"},{"name":"broken","comment":" For HTTP errors and other broken states.\n","type":"Nri.Ui.Page.V3.DefaultPage msg -> Html.Styled.Html msg"},{"name":"noPermission","comment":" For pages the user does not have access to.\n","type":"Nri.Ui.Page.V3.DefaultPage msg -> Html.Styled.Html msg"},{"name":"notFound","comment":" For the not found page.\n","type":"Nri.Ui.Page.V3.DefaultPage msg -> Html.Styled.Html msg"}],"binops":[]},{"name":"Nri.Ui.Palette.V1","comment":" Predefined color palettes for use in configurable components\n\n@docs Palette, PaletteName\n@docs white, gray, darkGray, blue, darkBlue, purple, turquoise, green, red, aqua, cornflower\n\n","unions":[{"name":"PaletteName","comment":" ","args":[],"cases":[["Gray",[]],["DarkGray",[]],["Blue",[]],["DarkBlue",[]],["Purple",[]],["Turquoise",[]],["Red",[]],["Green",[]],["White",[]],["Cornflower",[]],["Aqua",[]]]}],"aliases":[{"name":"Palette","comment":" ","args":[],"type":"{ border : Css.Color, background : Css.Color, primary : Css.Color, name : Nri.Ui.Palette.V1.PaletteName }"}],"values":[{"name":"aqua","comment":" Aqua palette\n","type":"Nri.Ui.Palette.V1.Palette"},{"name":"blue","comment":" Blue palette\n","type":"Nri.Ui.Palette.V1.Palette"},{"name":"cornflower","comment":" Cornflower palette\n","type":"Nri.Ui.Palette.V1.Palette"},{"name":"darkBlue","comment":" Dark blue palette\n","type":"Nri.Ui.Palette.V1.Palette"},{"name":"darkGray","comment":" Dark Gray palette\n","type":"Nri.Ui.Palette.V1.Palette"},{"name":"gray","comment":" Gray palette\n","type":"Nri.Ui.Palette.V1.Palette"},{"name":"green","comment":" Green palette\n","type":"Nri.Ui.Palette.V1.Palette"},{"name":"purple","comment":" Purple palette\n","type":"Nri.Ui.Palette.V1.Palette"},{"name":"red","comment":" Red palette\n","type":"Nri.Ui.Palette.V1.Palette"},{"name":"turquoise","comment":" Turquoise palette\n","type":"Nri.Ui.Palette.V1.Palette"},{"name":"white","comment":" White palette (borders are blue)\n","type":"Nri.Ui.Palette.V1.Palette"}],"binops":[]},{"name":"Nri.Ui.Pennant.V1","comment":" Used for indicating Premium content\n\n@docs premiumFlag\n\n","unions":[],"aliases":[],"values":[{"name":"premiumFlag","comment":" ","type":"Accessibility.Styled.Html msg"}],"binops":[]},{"name":"Nri.Ui.PremiumCheckbox.V1","comment":"\n\n@docs PremiumConfig, premium\n\n","unions":[],"aliases":[{"name":"PremiumConfig","comment":"\n\n  - `onChange`: A message for when the user toggles the checkbox\n  - `onLockedClick`: A message for when the user clicks a checkbox they don't have PremiumLevel for.\n    If you get this message, you should show an `Nri.Ui.Premium.Model.view`\n\n","args":["msg"],"type":"{ label : String.String, id : String.String, selected : Nri.Ui.Checkbox.V3.IsSelected, disabled : Basics.Bool, teacherPremiumLevel : Nri.Ui.Data.PremiumLevel.PremiumLevel, contentPremiumLevel : Nri.Ui.Data.PremiumLevel.PremiumLevel, showFlagWhenLocked : Basics.Bool, onChange : Basics.Bool -> msg, onLockedClick : msg, noOpMsg : msg }"}],"values":[{"name":"premium","comment":" A checkbox that should be used for premium content\n\nThis checkbox is locked when the premium level of the content is greater than the premium level of the teacher\n\n","type":"Nri.Ui.PremiumCheckbox.V1.Assets a -> Nri.Ui.PremiumCheckbox.V1.PremiumConfig msg -> Accessibility.Styled.Html msg"}],"binops":[]},{"name":"Nri.Ui.PremiumCheckbox.V2","comment":"\n\n@docs PremiumConfig, premium, Pennant\n\n","unions":[{"name":"Pennant","comment":" Premium is the yellow \"P\" pennant\nPremiumWithWriting is the yellow \"P+\" pennant\n","args":[],"cases":[["Premium",[]],["PremiumWithWriting",[]]]}],"aliases":[{"name":"PremiumConfig","comment":"\n\n  - `onChange`: A message for when the user toggles the checkbox\n  - `onLockedClick`: A message for when the user clicks a checkbox they don't have PremiumLevel for.\n    If you get this message, you should show an `Nri.Ui.Premium.Model.view`\n\n","args":["msg"],"type":"{ label : String.String, id : String.String, selected : Nri.Ui.Checkbox.V3.IsSelected, disabled : Basics.Bool, isLocked : Basics.Bool, pennant : Maybe.Maybe Nri.Ui.PremiumCheckbox.V2.Pennant, onChange : Basics.Bool -> msg, onLockedClick : msg, noOpMsg : msg }"}],"values":[{"name":"premium","comment":" A checkbox that should be used for premium content\n","type":"Nri.Ui.PremiumCheckbox.V2.Assets a -> Nri.Ui.PremiumCheckbox.V2.PremiumConfig msg -> Accessibility.Styled.Html msg"}],"binops":[]},{"name":"Nri.Ui.PremiumCheckbox.V3","comment":"\n\n@docs PremiumConfig, premium, Pennant\n\n","unions":[{"name":"Pennant","comment":" Premium is the yellow \"P\" pennant\nPremiumWithWriting is the yellow \"P+\" pennant\n","args":[],"cases":[["Premium",[]],["PremiumWithWriting",[]]]}],"aliases":[{"name":"PremiumConfig","comment":"\n\n  - `onChange`: A message for when the user toggles the checkbox\n  - `onLockedClick`: A message for when the user clicks a checkbox they don't have PremiumLevel for.\n    If you get this message, you should show an `Nri.Ui.Premium.Model.view`\n\n","args":["msg"],"type":"{ label : String.String, id : String.String, selected : Nri.Ui.Checkbox.V4.IsSelected, disabled : Basics.Bool, isLocked : Basics.Bool, pennant : Maybe.Maybe Nri.Ui.PremiumCheckbox.V3.Pennant, onChange : Basics.Bool -> msg, onLockedClick : msg, noOpMsg : msg }"}],"values":[{"name":"premium","comment":" A checkbox that should be used for premium content\n","type":"Nri.Ui.PremiumCheckbox.V3.Assets a -> Nri.Ui.PremiumCheckbox.V3.PremiumConfig msg -> Accessibility.Styled.Html msg"}],"binops":[]},{"name":"Nri.Ui.PremiumCheckbox.V4","comment":"\n\n@docs PremiumConfig, premium, Pennant\n\n","unions":[{"name":"Pennant","comment":" Premium is the yellow \"P\" pennant\nPremiumWithWriting is the yellow \"P+\" pennant\n","args":[],"cases":[["Premium",[]],["PremiumWithWriting",[]]]}],"aliases":[{"name":"PremiumConfig","comment":"\n\n  - `onChange`: A message for when the user toggles the checkbox\n  - `onLockedClick`: A message for when the user clicks a checkbox they don't have PremiumLevel for.\n    If you get this message, you should show an `Nri.Ui.Premium.Model.view`\n\n","args":["msg"],"type":"{ label : String.String, id : String.String, selected : Nri.Ui.Checkbox.V5.IsSelected, disabled : Basics.Bool, isLocked : Basics.Bool, pennant : Maybe.Maybe Nri.Ui.PremiumCheckbox.V4.Pennant, onChange : Basics.Bool -> msg, onLockedClick : msg }"}],"values":[{"name":"premium","comment":" A checkbox that should be used for premium content\n","type":"Nri.Ui.PremiumCheckbox.V4.Assets a -> Nri.Ui.PremiumCheckbox.V4.PremiumConfig msg -> Accessibility.Styled.Html msg"}],"binops":[]},{"name":"Nri.Ui.PremiumCheckbox.V5","comment":"\n\n@docs view, Pennant\n\n\n# Changes from V4\n\n  - inlines the Config\n  - renames render function from `premium` to `view`\n  - removes dependency on Assets\n\n","unions":[{"name":"Pennant","comment":" Premium is the yellow \"P\" pennant\nPremiumWithWriting is the yellow \"P+\" pennant\n","args":[],"cases":[["Premium",[]],["PremiumWithWriting",[]]]}],"aliases":[],"values":[{"name":"view","comment":" A checkbox that should be used for premium content\n\n  - `onChange`: A message for when the user toggles the checkbox\n  - `onLockedClick`: A message for when the user clicks a checkbox they don't have PremiumLevel for.\n    If you get this message, you should show an `Nri.Ui.Premium.Model.view`\n\n","type":"{ label : String.String, id : String.String, selected : Nri.Ui.Checkbox.V5.IsSelected, disabled : Basics.Bool, isLocked : Basics.Bool, pennant : Nri.Ui.PremiumCheckbox.V5.Pennant, onChange : Basics.Bool -> msg, onLockedClick : msg } -> Accessibility.Styled.Html msg"}],"binops":[]},{"name":"Nri.Ui.PremiumCheckbox.V6","comment":"\n\n@docs view\n\nThis module is used when there may or may not be Premium\ncontent to be \"checked\"!\n\n\n# Changes from V5\n\n  - Allow checkbox to show pennant, or not, based on bool\n  - Remove PremiumWithWriting, it's only Premium now\n\n","unions":[],"aliases":[],"values":[{"name":"view","comment":" A checkbox that should be used for premium content\n\n  - `onChange`: A message for when the user toggles the checkbox\n  - `onLockedClick`: A message for when the user clicks a checkbox they don't have PremiumLevel for.\n    If you get this message, you should show an `Nri.Ui.Premium.Model.view`\n\n","type":"{ label : String.String, id : String.String, selected : Nri.Ui.Checkbox.V5.IsSelected, disabled : Basics.Bool, isLocked : Basics.Bool, isPremium : Basics.Bool, onChange : Basics.Bool -> msg, onLockedClick : msg } -> Accessibility.Styled.Html msg"}],"binops":[]},{"name":"Nri.Ui.SegmentedControl.V6","comment":"\n\n@docs Config, Icon, Option, Width, view\n\n","unions":[{"name":"Width","comment":" ","args":[],"cases":[["FitContent",[]],["FillContainer",[]]]}],"aliases":[{"name":"Config","comment":" ","args":["a","msg"],"type":"{ onClick : a -> msg, options : List.List (Nri.Ui.SegmentedControl.V6.Option a), selected : a, width : Nri.Ui.SegmentedControl.V6.Width }"},{"name":"Icon","comment":" ","args":[],"type":"{ alt : String.String, icon : Nri.Ui.Icon.V3.IconType }"},{"name":"Option","comment":" ","args":["a"],"type":"{ value : a, icon : Maybe.Maybe Nri.Ui.SegmentedControl.V6.Icon, label : String.String, id : String.String }"}],"values":[{"name":"view","comment":" ","type":"Nri.Ui.SegmentedControl.V6.Config a msg -> Html.Styled.Html msg"}],"binops":[]},{"name":"Nri.Ui.SegmentedControl.V7","comment":"\n\n@docs Config, Icon, Option, Width, view, viewSpa, ToggleConfig, viewToggle\n\n","unions":[{"name":"Width","comment":" ","args":[],"cases":[["FitContent",[]],["FillContainer",[]]]}],"aliases":[{"name":"Config","comment":"\n\n  - `onClick` : the message to produce when an option is selected (clicked) by the user\n  - `options`: the list of options available\n  - `selected`: the value of the currently-selected option\n  - `width`: how to size the segmented control\n  - `content`: the panel content for the selected option\n\n","args":["a","msg"],"type":"{ onClick : a -> msg, options : List.List (Nri.Ui.SegmentedControl.V7.Option a), selected : a, width : Nri.Ui.SegmentedControl.V7.Width, content : Html.Styled.Html msg }"},{"name":"Icon","comment":" ","args":[],"type":"{ alt : String.String, icon : Nri.Ui.Icon.V5.IconType }"},{"name":"Option","comment":" ","args":["a"],"type":"{ value : a, icon : Maybe.Maybe Nri.Ui.SegmentedControl.V7.Icon, label : String.String }"},{"name":"ToggleConfig","comment":" Same shape as Config but without the content\n","args":["a","msg"],"type":"{ onClick : a -> msg, options : List.List (Nri.Ui.SegmentedControl.V7.Option a), selected : a, width : Nri.Ui.SegmentedControl.V7.Width }"}],"values":[{"name":"view","comment":" ","type":"Nri.Ui.SegmentedControl.V7.Config a msg -> Html.Styled.Html msg"},{"name":"viewSpa","comment":" Creates a segmented control that supports SPA navigation.\nYou should always use this instead of `view` when building a SPA\nand the segmented control options correspond to routes in the SPA.\n\nThe first parameter is a function that takes a `route` and returns the URL of that route.\n\n","type":"(route -> String.String) -> Nri.Ui.SegmentedControl.V7.Config route msg -> Html.Styled.Html msg"},{"name":"viewToggle","comment":" Creates _just the toggle_ when need the ui element itself and not a page control\n","type":"Nri.Ui.SegmentedControl.V7.ToggleConfig a msg -> Html.Styled.Html msg"}],"binops":[]},{"name":"Nri.Ui.SegmentedControl.V8","comment":"\n\n@docs Config, Option, Width, view, viewSpa, ToggleConfig, viewToggle\n\nChanges from V7:\n\n  - remove dependence on Nri.Ui.Icon.V5\n  - fix icons overlowing the segmented control\n\n","unions":[{"name":"Width","comment":" ","args":[],"cases":[["FitContent",[]],["FillContainer",[]]]}],"aliases":[{"name":"Config","comment":"\n\n  - `onClick` : the message to produce when an option is selected (clicked) by the user\n  - `options`: the list of options available\n  - `selected`: the value of the currently-selected option\n  - `width`: how to size the segmented control\n  - `content`: the panel content for the selected option\n\n","args":["a","msg"],"type":"{ onClick : a -> msg, options : List.List (Nri.Ui.SegmentedControl.V8.Option a), selected : a, width : Nri.Ui.SegmentedControl.V8.Width, content : Accessibility.Styled.Html msg }"},{"name":"Option","comment":" ","args":["a"],"type":"{ value : a, icon : Maybe.Maybe Nri.Ui.Svg.V1.Svg, label : String.String }"},{"name":"ToggleConfig","comment":" Same shape as Config but without the content\n","args":["a","msg"],"type":"{ onClick : a -> msg, options : List.List (Nri.Ui.SegmentedControl.V8.Option a), selected : a, width : Nri.Ui.SegmentedControl.V8.Width }"}],"values":[{"name":"view","comment":" ","type":"Nri.Ui.SegmentedControl.V8.Config a msg -> Accessibility.Styled.Html msg"},{"name":"viewSpa","comment":" Creates a segmented control that supports SPA navigation.\nYou should always use this instead of `view` when building a SPA\nand the segmented control options correspond to routes in the SPA.\n\nThe first parameter is a function that takes a `route` and returns the URL of that route.\n\n","type":"(route -> String.String) -> Nri.Ui.SegmentedControl.V8.Config route msg -> Accessibility.Styled.Html msg"},{"name":"viewToggle","comment":" Creates _just the toggle_ when need the ui element itself and not a page control\n","type":"Nri.Ui.SegmentedControl.V8.ToggleConfig a msg -> Accessibility.Styled.Html msg"}],"binops":[]},{"name":"Nri.Ui.Select.V5","comment":" Build a select input.\n\n@docs Config, view\n\n","unions":[],"aliases":[{"name":"Config","comment":" Configure a Select\n","args":["a"],"type":"{ choices : List.List { label : String.String, value : a }, current : a, id : Maybe.Maybe String.String, valueToString : a -> String.String }"}],"values":[{"name":"view","comment":" A select dropdown\n","type":"Nri.Ui.Select.V5.Config a -> Html.Styled.Html a"}],"binops":[]},{"name":"Nri.Ui.Select.V6","comment":" Build a select input.\n\n@docs Config, Choice, view\n\n","unions":[],"aliases":[{"name":"Choice","comment":" A single possible choice.\n","args":["a"],"type":"{ label : String.String, value : a }"},{"name":"Config","comment":" Configure a Select\n","args":["a"],"type":"{ choices : List.List (Nri.Ui.Select.V6.Choice a), current : Maybe.Maybe a, id : Maybe.Maybe String.String, valueToString : a -> String.String, defaultDisplayText : Maybe.Maybe String.String }"}],"values":[{"name":"view","comment":" A select dropdown\n","type":"Nri.Ui.Select.V6.Config a -> Html.Styled.Html a"}],"binops":[]},{"name":"Nri.Ui.Select.V7","comment":" Build a select input.\n\n@docs Choice, view\n\n","unions":[],"aliases":[{"name":"Choice","comment":" A single possible choice.\n","args":["a"],"type":"{ label : String.String, value : a }"}],"values":[{"name":"view","comment":" A select dropdown. Remember to add a label!\n","type":"{ choices : List.List (Nri.Ui.Select.V7.Choice a), current : Maybe.Maybe a, id : String.String, valueToString : a -> String.String, defaultDisplayText : Maybe.Maybe String.String, isInError : Basics.Bool } -> Html.Styled.Html a"}],"binops":[]},{"name":"Nri.Ui.Slide.V1","comment":" Note: You'll almost certainly want to used keyed nodes if you're\nusing this module.\n\n@docs AnimationDirection\n@docs withSlidingContents\n@docs animateIn, animateOut\n\n","unions":[{"name":"AnimationDirection","comment":" Slide from right to left or from left to right.\n","args":[],"cases":[["FromRTL",[]],["FromLTR",[]]]}],"aliases":[],"values":[{"name":"animateIn","comment":" Add this style to the element you want to animate in.\n","type":"Nri.Ui.Slide.V1.AnimationDirection -> Css.Style"},{"name":"animateOut","comment":" Add this style to the element you want to animate out.\nNote: this will absolutely position the element.\nYou must add `withSlidingContents` to one of its ancestors.\n","type":"Nri.Ui.Slide.V1.AnimationDirection -> Css.Style"},{"name":"withSlidingContents","comment":" Add this class to the container whose descendents are sliding.\n","type":"Css.Style"}],"binops":[]},{"name":"Nri.Ui.SlideModal.V1","comment":"\n\n@docs Config, Panel\n@docs State, closed, open\n@docs view\n\n","unions":[{"name":"State","comment":" ","args":[],"cases":[]}],"aliases":[{"name":"Config","comment":" ","args":["msg"],"type":"{ panels : List.List (Nri.Ui.SlideModal.V1.Panel msg), height : Css.Vh, parentMsg : Nri.Ui.SlideModal.V1.State -> msg }"},{"name":"Panel","comment":" Configuration for a single modal view in the sequence of modal views.\n","args":["msg"],"type":"{ icon : Accessibility.Styled.Html Basics.Never, title : String.String, content : Accessibility.Styled.Html msg, buttonLabel : String.String }"}],"values":[{"name":"closed","comment":" Close the modal.\n","type":"Nri.Ui.SlideModal.V1.State"},{"name":"open","comment":" Create the open state for the modal (the first panel will show).\n","type":"Nri.Ui.SlideModal.V1.State"},{"name":"view","comment":" View the modal (includes the modal backdrop).\n","type":"Nri.Ui.SlideModal.V1.Config msg -> Nri.Ui.SlideModal.V1.State -> Accessibility.Styled.Html msg"}],"binops":[]},{"name":"Nri.Ui.SlideModal.V2","comment":"\n\n@docs Config, Panel\n@docs State, closed, open\n@docs view\n\n","unions":[{"name":"State","comment":" ","args":[],"cases":[]}],"aliases":[{"name":"Config","comment":" ","args":["msg"],"type":"{ panels : List.List Nri.Ui.SlideModal.V2.Panel, height : Css.Px, parentMsg : Nri.Ui.SlideModal.V2.State -> msg }"},{"name":"Panel","comment":" Configuration for a single modal view in the sequence of modal views.\n","args":[],"type":"{ icon : Accessibility.Styled.Html Basics.Never, title : String.String, content : Accessibility.Styled.Html Basics.Never, buttonLabel : String.String }"}],"values":[{"name":"closed","comment":" Close the modal.\n","type":"Nri.Ui.SlideModal.V2.State"},{"name":"open","comment":" Create the open state for the modal (the first panel will show).\n","type":"Nri.Ui.SlideModal.V2.State"},{"name":"view","comment":" View the modal (includes the modal backdrop).\n","type":"Nri.Ui.SlideModal.V2.Config msg -> Nri.Ui.SlideModal.V2.State -> Accessibility.Styled.Html msg"}],"binops":[]},{"name":"Nri.Ui.SortableTable.V1","comment":"\n\n@docs Column, Config, Sorter, State\n@docs init, initDescending\n@docs custom, string, view, viewLoading\n@docs invariantSort, simpleSort, combineSorters\n\n","unions":[{"name":"Column","comment":" ","args":["id","entry","msg"],"cases":[]}],"aliases":[{"name":"Config","comment":" ","args":["id","entry","msg"],"type":"{ updateMsg : Nri.Ui.SortableTable.V1.State id -> msg, columns : List.List (Nri.Ui.SortableTable.V1.Column id entry msg) }"},{"name":"Sorter","comment":" ","args":["a"],"type":"Nri.Ui.SortableTable.V1.SortDirection -> a -> a -> Basics.Order"},{"name":"State","comment":" ","args":["id"],"type":"{ column : id, sortDirection : Nri.Ui.SortableTable.V1.SortDirection }"}],"values":[{"name":"combineSorters","comment":" ","type":"List.List (Nri.Ui.SortableTable.V1.Sorter entry) -> Nri.Ui.SortableTable.V1.Sorter entry"},{"name":"custom","comment":" ","type":"{ id : id, header : Html.Styled.Html msg, view : entry -> Html.Styled.Html msg, sorter : Nri.Ui.SortableTable.V1.Sorter entry, width : Basics.Int } -> Nri.Ui.SortableTable.V1.Column id entry msg"},{"name":"init","comment":" ","type":"id -> Nri.Ui.SortableTable.V1.State id"},{"name":"initDescending","comment":" ","type":"id -> Nri.Ui.SortableTable.V1.State id"},{"name":"invariantSort","comment":" Create a sorter function that always orders the entries in the same order.\nFor example, this is useful when we want to resolve ties and sort the tied\nentries by name, no matter of the sort direction set on the table.\n","type":"(entry -> comparable) -> Nri.Ui.SortableTable.V1.Sorter entry"},{"name":"simpleSort","comment":" Create a simple sorter function that orders entries by mapping a function\nover the collection. It will also reverse it when the sort direction is descending.\n","type":"(entry -> comparable) -> Nri.Ui.SortableTable.V1.Sorter entry"},{"name":"string","comment":" ","type":"{ id : id, header : String.String, value : entry -> String.String, width : Basics.Int } -> Nri.Ui.SortableTable.V1.Column id entry msg"},{"name":"view","comment":" ","type":"Nri.Ui.SortableTable.V1.Config id entry msg -> Nri.Ui.SortableTable.V1.State id -> List.List entry -> Html.Styled.Html msg"},{"name":"viewLoading","comment":" ","type":"Nri.Ui.SortableTable.V1.Config id entry msg -> Nri.Ui.SortableTable.V1.State id -> Html.Styled.Html msg"}],"binops":[]},{"name":"Nri.Ui.SortableTable.V2","comment":"\n\n@docs Column, Config, Sorter, State\n@docs init, initDescending\n@docs custom, string, view, viewLoading\n@docs invariantSort, simpleSort, combineSorters\n\n","unions":[{"name":"Column","comment":" ","args":["id","entry","msg"],"cases":[]}],"aliases":[{"name":"Config","comment":" ","args":["id","entry","msg"],"type":"{ updateMsg : Nri.Ui.SortableTable.V2.State id -> msg, columns : List.List (Nri.Ui.SortableTable.V2.Column id entry msg) }"},{"name":"Sorter","comment":" ","args":["a"],"type":"Nri.Ui.SortableTable.V2.SortDirection -> a -> a -> Basics.Order"},{"name":"State","comment":" ","args":["id"],"type":"{ column : id, sortDirection : Nri.Ui.SortableTable.V2.SortDirection }"}],"values":[{"name":"combineSorters","comment":" ","type":"List.List (Nri.Ui.SortableTable.V2.Sorter entry) -> Nri.Ui.SortableTable.V2.Sorter entry"},{"name":"custom","comment":" ","type":"{ id : id, header : Html.Styled.Html msg, view : entry -> Html.Styled.Html msg, sorter : Nri.Ui.SortableTable.V2.Sorter entry, width : Basics.Int, cellStyles : entry -> List.List Css.Style } -> Nri.Ui.SortableTable.V2.Column id entry msg"},{"name":"init","comment":" ","type":"id -> Nri.Ui.SortableTable.V2.State id"},{"name":"initDescending","comment":" ","type":"id -> Nri.Ui.SortableTable.V2.State id"},{"name":"invariantSort","comment":" Create a sorter function that always orders the entries in the same order.\nFor example, this is useful when we want to resolve ties and sort the tied\nentries by name, no matter of the sort direction set on the table.\n","type":"(entry -> comparable) -> Nri.Ui.SortableTable.V2.Sorter entry"},{"name":"simpleSort","comment":" Create a simple sorter function that orders entries by mapping a function\nover the collection. It will also reverse it when the sort direction is descending.\n","type":"(entry -> comparable) -> Nri.Ui.SortableTable.V2.Sorter entry"},{"name":"string","comment":" ","type":"{ id : id, header : String.String, value : entry -> String.String, width : Basics.Int, cellStyles : entry -> List.List Css.Style } -> Nri.Ui.SortableTable.V2.Column id entry msg"},{"name":"view","comment":" ","type":"Nri.Ui.SortableTable.V2.Config id entry msg -> Nri.Ui.SortableTable.V2.State id -> List.List entry -> Html.Styled.Html msg"},{"name":"viewLoading","comment":" ","type":"Nri.Ui.SortableTable.V2.Config id entry msg -> Nri.Ui.SortableTable.V2.State id -> Html.Styled.Html msg"}],"binops":[]},{"name":"Nri.Ui.Svg.V1","comment":"\n\n@docs Svg\n@docs withColor, withLabel, withWidth, withHeight\n@docs fromHtml, toHtml\n\n","unions":[{"name":"Svg","comment":" Opaque type describing a non-interactable Html element.\n","args":[],"cases":[]}],"aliases":[],"values":[{"name":"fromHtml","comment":" Tag html as being an svg.\n","type":"Html.Styled.Html Basics.Never -> Nri.Ui.Svg.V1.Svg"},{"name":"toHtml","comment":" Render an svg.\n","type":"Nri.Ui.Svg.V1.Svg -> Html.Styled.Html msg"},{"name":"withColor","comment":" ","type":"Css.Color -> Nri.Ui.Svg.V1.Svg -> Nri.Ui.Svg.V1.Svg"},{"name":"withHeight","comment":" ","type":"Css.Px -> Nri.Ui.Svg.V1.Svg -> Nri.Ui.Svg.V1.Svg"},{"name":"withLabel","comment":" Add a string aria-label property to the element.\n\nSee [Using the aria-label attribute](https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/ARIA_Techniques/Using_the_aria-label_attribute) for\nguidelines of when and how to use this attribute.\n\n","type":"String.String -> Nri.Ui.Svg.V1.Svg -> Nri.Ui.Svg.V1.Svg"},{"name":"withWidth","comment":" ","type":"Css.Px -> Nri.Ui.Svg.V1.Svg -> Nri.Ui.Svg.V1.Svg"}],"binops":[]},{"name":"Nri.Ui.Table.V4","comment":" Upgrading from V1:\n\n  - All the `width` fields in column configurations now take an elm-css length\n    value rather than an Integer. Change `width = 100` to `width = px 100` to get\n    the same widths as before.\n  - Tables now by default take the full width of the container they are placed in.\n    If this is not what you want, wrap the table in an element with a fixed width.\n  - The table module now makes use of `Html.Styled` and no longer exposes a\n    separate `styles` value.\n    Check out the [elm-css](http://package.elm-lang.org/packages/rtfeldman/elm-css/14.0.0/Html-Styled)\n    documentation on Html.Styled to see how to work with it.\n  - The default cell padding has been removed and content is not vertically\n    centered in its cell. If you need to overwrite this, wrap your cells in\n    elements providing custom styling to the cell.\n\n@docs Column, custom, string\n\n@docs view, viewWithoutHeader\n\n@docs viewLoading, viewLoadingWithoutHeader\n\n","unions":[{"name":"Column","comment":" Closed representation of how to render the header and cells of a column\nin the table\n","args":["data","msg"],"cases":[]}],"aliases":[],"values":[{"name":"custom","comment":" A column that renders however you want it to\n","type":"{ header : Html.Styled.Html msg, view : data -> Html.Styled.Html msg, width : Css.LengthOrAuto compatible } -> Nri.Ui.Table.V4.Column data msg"},{"name":"string","comment":" A column that renders some aspect of a value as text\n","type":"{ header : String.String, value : data -> String.String, width : Css.LengthOrAuto compatible } -> Nri.Ui.Table.V4.Column data msg"},{"name":"view","comment":" Displays a table of data based on the provided column definitions\n","type":"List.List (Nri.Ui.Table.V4.Column data msg) -> List.List data -> Html.Styled.Html msg"},{"name":"viewLoading","comment":" Display a table with the given columns but instead of data, show blocked\nout text with an interesting animation. This view lets the user know that\ndata is on its way and what it will look like when it arrives.\n","type":"List.List (Nri.Ui.Table.V4.Column data msg) -> Html.Styled.Html msg"},{"name":"viewLoadingWithoutHeader","comment":" Display the loading table without a header row\n","type":"List.List (Nri.Ui.Table.V4.Column data msg) -> Html.Styled.Html msg"},{"name":"viewWithoutHeader","comment":" Displays a table of data without a header row\n","type":"List.List (Nri.Ui.Table.V4.Column data msg) -> List.List data -> Html.Styled.Html msg"}],"binops":[]},{"name":"Nri.Ui.Table.V5","comment":" Upgrading from V4:\n\n  - The columns take an additional `cellStyles` property that allow\n    you to specify additional styles such as cell background color\n    or text alignment.\n\n@docs Column, custom, string\n\n@docs view, viewWithoutHeader\n\n@docs viewLoading, viewLoadingWithoutHeader\n\n","unions":[{"name":"Column","comment":" Closed representation of how to render the header and cells of a column\nin the table\n","args":["data","msg"],"cases":[]}],"aliases":[],"values":[{"name":"custom","comment":" A column that renders however you want it to\n","type":"{ header : Html.Styled.Html msg, view : data -> Html.Styled.Html msg, width : Css.LengthOrAuto compatible, cellStyles : data -> List.List Css.Style } -> Nri.Ui.Table.V5.Column data msg"},{"name":"string","comment":" A column that renders some aspect of a value as text\n","type":"{ header : String.String, value : data -> String.String, width : Css.LengthOrAuto compatible, cellStyles : data -> List.List Css.Style } -> Nri.Ui.Table.V5.Column data msg"},{"name":"view","comment":" Displays a table of data based on the provided column definitions\n","type":"List.List (Nri.Ui.Table.V5.Column data msg) -> List.List data -> Html.Styled.Html msg"},{"name":"viewLoading","comment":" Display a table with the given columns but instead of data, show blocked\nout text with an interesting animation. This view lets the user know that\ndata is on its way and what it will look like when it arrives.\n","type":"List.List (Nri.Ui.Table.V5.Column data msg) -> Html.Styled.Html msg"},{"name":"viewLoadingWithoutHeader","comment":" Display the loading table without a header row\n","type":"List.List (Nri.Ui.Table.V5.Column data msg) -> Html.Styled.Html msg"},{"name":"viewWithoutHeader","comment":" Displays a table of data without a header row\n","type":"List.List (Nri.Ui.Table.V5.Column data msg) -> List.List data -> Html.Styled.Html msg"}],"binops":[]},{"name":"Nri.Ui.Tabs.V3","comment":"\n\n@docs Alignment\n@docs Config\n@docs LinkConfig\n@docs Tab\n@docs TabLink\n@docs links\n@docs view\n@docs viewCustom\n\n\n## Defaults\n\n@docs viewTabDefault\n\n","unions":[{"name":"Alignment","comment":" Determines whether tabs are centered or floating to the left or right.\n","args":[],"cases":[["Left",[]],["Center",[]],["Right",[]]]}],"aliases":[{"name":"Config","comment":" ","args":["id","msg"],"type":"{ title : Maybe.Maybe String.String, onSelect : id -> msg, tabs : List.Zipper.Zipper (Nri.Ui.Tabs.V3.Tab id), content : id -> Html.Styled.Html msg, alignment : Nri.Ui.Tabs.V3.Alignment }"},{"name":"LinkConfig","comment":" Configure a set a tab links\n","args":["msg"],"type":"{ title : Maybe.Maybe String.String, tabs : List.Zipper.Zipper Nri.Ui.Tabs.V3.TabLink, content : Html.Styled.Html msg, alignment : Nri.Ui.Tabs.V3.Alignment }"},{"name":"Tab","comment":" ","args":["id"],"type":"{ label : String.String, id : id }"},{"name":"TabLink","comment":" Describe a tab that is meant to link to another page\n","args":[],"type":"{ label : String.String, href : Maybe.Maybe String.String }"}],"values":[{"name":"links","comment":" View a set of tab links\n","type":"Nri.Ui.Tabs.V3.LinkConfig msg -> Html.Styled.Html msg"},{"name":"view","comment":" ","type":"Nri.Ui.Tabs.V3.Config id msg -> Html.Styled.Html msg"},{"name":"viewCustom","comment":" ","type":"Nri.Ui.Tabs.V3.Config id msg -> (Nri.Ui.Tabs.V3.Tab id -> Html.Styled.Html msg) -> Html.Styled.Html msg"},{"name":"viewTabDefault","comment":" ","type":"Nri.Ui.Tabs.V3.Tab id -> Html.Styled.Html msg"}],"binops":[]},{"name":"Nri.Ui.Tabs.V4","comment":"\n\n@docs Alignment\n@docs Config\n@docs LinkConfig\n@docs Tab\n@docs LinkTabConfig\n@docs links\n@docs view\n@docs viewCustom\n\n\n## Defaults\n\n@docs viewTabDefault\n\n","unions":[{"name":"Alignment","comment":" Determines whether tabs are centered or floating to the left or right.\n","args":[],"cases":[["Left",[]],["Center",[]],["Right",[]]]},{"name":"LinkTabConfig","comment":" The types of links that we can show.\n\n  - `NormalLink` - A link to another page.\n  - `SpaLink` - A link to another SPA page. The `msg` type should be used to handle\n    the navigation event.\n\n","args":["msg"],"cases":[["NormalLink",["{ label : String.String, href : Maybe.Maybe String.String }"]],["SpaLink",["{ label : String.String, href : String.String, msg : msg }"]]]}],"aliases":[{"name":"Config","comment":" ","args":["id","msg"],"type":"{ title : Maybe.Maybe String.String, onSelect : id -> msg, tabs : List.Zipper.Zipper (Nri.Ui.Tabs.V4.Tab id), content : id -> Html.Styled.Html msg, alignment : Nri.Ui.Tabs.V4.Alignment }"},{"name":"LinkConfig","comment":" Configure a set a tab links\n","args":["msg"],"type":"{ title : Maybe.Maybe String.String, tabs : List.Zipper.Zipper (Nri.Ui.Tabs.V4.LinkTabConfig msg), content : Html.Styled.Html msg, alignment : Nri.Ui.Tabs.V4.Alignment }"},{"name":"Tab","comment":" ","args":["id"],"type":"{ label : String.String, id : id }"}],"values":[{"name":"links","comment":" View a set of tab links\n","type":"Nri.Ui.Tabs.V4.LinkConfig msg -> Html.Styled.Html msg"},{"name":"view","comment":" ","type":"Nri.Ui.Tabs.V4.Config id msg -> Html.Styled.Html msg"},{"name":"viewCustom","comment":" ","type":"Nri.Ui.Tabs.V4.Config id msg -> (Nri.Ui.Tabs.V4.Tab id -> Html.Styled.Html msg) -> Html.Styled.Html msg"},{"name":"viewTabDefault","comment":" ","type":"Nri.Ui.Tabs.V4.Tab id -> Html.Styled.Html msg"}],"binops":[]},{"name":"Nri.Ui.Text.V2","comment":"\n\n\n## Semantic text types:\n\n@docs caption, heading, mediumBody, smallBody, smallBodyGray, subHeading, smallHeading, tagline\n\n\n## User-generated text styles:\n\n@docs ugMediumBody, ugSmallBody\n\n\n## Modifying strings to display nicely:\n\n@docs noWidow\n\n","unions":[],"aliases":[],"values":[{"name":"caption","comment":" This is a little note or caption.\n","type":"List.List (Html.Styled.Html msg) -> Html.Styled.Html msg"},{"name":"heading","comment":" This is a Page Heading.\n","type":"List.List (Html.Styled.Html msg) -> Html.Styled.Html msg"},{"name":"mediumBody","comment":" This is some medium body copy.\n","type":"List.List (Html.Styled.Html msg) -> Html.Styled.Html msg"},{"name":"noWidow","comment":" Eliminate widows (single words on their own line caused by\nwrapping) by inserting a non-breaking space if there are at least two\nwords.\n","type":"String.String -> String.String"},{"name":"smallBody","comment":" This is some small body copy.\n","type":"List.List (Html.Styled.Html msg) -> Html.Styled.Html msg"},{"name":"smallBodyGray","comment":" This is some small body copy but it's gray.\n","type":"List.List (Html.Styled.Html msg) -> Html.Styled.Html msg"},{"name":"smallHeading","comment":" This is a small Page Heading.\n","type":"List.List (Html.Styled.Html msg) -> Html.Styled.Html msg"},{"name":"subHeading","comment":" This is a subhead.\n","type":"List.List (Html.Styled.Html msg) -> Html.Styled.Html msg"},{"name":"tagline","comment":" This is a tagline for a page heading.\n","type":"List.List (Html.Styled.Html msg) -> Html.Styled.Html msg"},{"name":"ugMediumBody","comment":" User-generated text.\n","type":"List.List (Html.Styled.Html msg) -> Html.Styled.Html msg"},{"name":"ugSmallBody","comment":" User-generated text.\n","type":"List.List (Html.Styled.Html msg) -> Html.Styled.Html msg"}],"binops":[]},{"name":"Nri.Ui.Text.V3","comment":" Changes from V2:\n\n  - Normalizes how margin is applied (see \"Understanding spacing\", below).\n\n\n## Understanding spacing\n\n  - All text styles have a specific line-height. This is set so that when text in the given style\n    is long enough to wrap, the spacing between wrapped lines looks good.\n  - No text styles have padding.\n  - **Heading styles** do not have margin. It is up to the caller to add appropriate margin to the layout.\n  - **Paragraph styles** only have bottom margin, but with **:last-child bottom margin set to zero**.\n    This bottom margin is set to look good when multiple paragraphs of the same style follow one another.\n      - If you want content after the paragraph and don't want the margin, put the paragraph in a `div` so that it will be the last-child, which will get rid of the bottom margin.\n  - **User-authored content blocks** preserve line breaks and do not have margin.\n\n\n## Heading styles\n\nPlease use `Nri.Ui.Heading.V2` instead of these in new code. If you're here to\nmake a new Text version, please remove them.\n\n@docs heading, subHeading, smallHeading, tagline\n\n\n## Paragraph styles\n\n@docs caption, mediumBody, smallBody, smallBodyGray\n\n\n## User-authored content blocks:\n\n@docs ugMediumBody, ugSmallBody\n\n\n## Modifying strings to display nicely:\n\n@docs noWidow\n\n","unions":[],"aliases":[],"values":[{"name":"caption","comment":" This is a little note or caption.\n","type":"List.List (Html.Styled.Html msg) -> Html.Styled.Html msg"},{"name":"heading","comment":" This is a Page Heading.\n","type":"List.List (Html.Styled.Html msg) -> Html.Styled.Html msg"},{"name":"mediumBody","comment":" This is some medium body copy.\n","type":"List.List (Html.Styled.Html msg) -> Html.Styled.Html msg"},{"name":"noWidow","comment":" Eliminate widows (single words on their own line caused by\nwrapping) by inserting a non-breaking space if there are at least two\nwords.\n","type":"String.String -> String.String"},{"name":"smallBody","comment":" This is some small body copy.\n","type":"List.List (Html.Styled.Html msg) -> Html.Styled.Html msg"},{"name":"smallBodyGray","comment":" This is some small body copy but it's gray.\n","type":"List.List (Html.Styled.Html msg) -> Html.Styled.Html msg"},{"name":"smallHeading","comment":" This is a small Page Heading.\n","type":"List.List (Html.Styled.Html msg) -> Html.Styled.Html msg"},{"name":"subHeading","comment":" This is a subhead.\n","type":"List.List (Html.Styled.Html msg) -> Html.Styled.Html msg"},{"name":"tagline","comment":" This is a tagline for a page heading.\n","type":"List.List (Html.Styled.Html msg) -> Html.Styled.Html msg"},{"name":"ugMediumBody","comment":" User-generated text.\n","type":"List.List (Html.Styled.Html msg) -> Html.Styled.Html msg"},{"name":"ugSmallBody","comment":" User-generated text.\n","type":"List.List (Html.Styled.Html msg) -> Html.Styled.Html msg"}],"binops":[]},{"name":"Nri.Ui.Text.V4","comment":" Post-release patches\n\n  - adjusts link styles\n\nChanges from V3:\n\n  - Removes Headings (they now live in Nri.Ui.Heading.V2)\n\n\n## Understanding spacing\n\n  - All text styles have a specific line-height. This is set so that when text in the given style\n    is long enough to wrap, the spacing between wrapped lines looks good.\n  - No text styles have padding.\n  - **Heading styles** do not have margin. It is up to the caller to add appropriate margin to the layout.\n  - **Paragraph styles** only have bottom margin, but with **:last-child bottom margin set to zero**.\n    This bottom margin is set to look good when multiple paragraphs of the same style follow one another.\n      - If you want content after the paragraph and don't want the margin, put the paragraph in a `div` so that it will be the last-child, which will get rid of the bottom margin.\n  - **User-authored content blocks** preserve line breaks and do not have margin.\n\n\n## Headings\n\nHeadings now live in Nri.Ui.Heading.V2. Here's a mapping to help with upgrades:\n\n    | Nri.Ui.Text.V3    | Nri.Ui.Heading.V2 |\n    |===================|===================|\n    | Text.heading      | Heading.h1        |\n    | Text.tagline      | Heading.h2        |\n    | Text.subHeading   | Heading.h3        |\n    | Text.smallHeading | Heading.h4        |\n\nIf you look at your new code and go \"hmm, those shouldn't be at this level of\nheading\" then you can customize the tag apart from the style using the new\nAPI. See the Nri.Ui.Heading.V2 docs for details.\n\n\n## Paragraph styles\n\n@docs caption, mediumBody, smallBody, smallBodyGray\n\n\n## User-authored content blocks:\n\n@docs ugMediumBody, ugSmallBody\n\n\n## Modifying strings to display nicely:\n\n@docs noWidow\n\n","unions":[],"aliases":[],"values":[{"name":"caption","comment":" This is a little note or caption.\n","type":"List.List (Html.Styled.Html msg) -> Html.Styled.Html msg"},{"name":"mediumBody","comment":" This is some medium body copy.\n","type":"List.List (Html.Styled.Html msg) -> Html.Styled.Html msg"},{"name":"noWidow","comment":" Eliminate widows (single words on their own line caused by\nwrapping) by inserting a non-breaking space if there are at least two\nwords.\n","type":"String.String -> String.String"},{"name":"smallBody","comment":" This is some small body copy.\n","type":"List.List (Html.Styled.Html msg) -> Html.Styled.Html msg"},{"name":"smallBodyGray","comment":" This is some small body copy but it's gray.\n","type":"List.List (Html.Styled.Html msg) -> Html.Styled.Html msg"},{"name":"ugMediumBody","comment":" User-generated text.\n","type":"List.List (Html.Styled.Html msg) -> Html.Styled.Html msg"},{"name":"ugSmallBody","comment":" User-generated text.\n","type":"List.List (Html.Styled.Html msg) -> Html.Styled.Html msg"}],"binops":[]},{"name":"Nri.Ui.Text.Writing.V1","comment":" Text types for writing:\n\n@docs footnote\n\n","unions":[],"aliases":[],"values":[{"name":"footnote","comment":" This is a little note or footnote.\n","type":"List.List (Html.Styled.Html msg) -> Html.Styled.Html msg"}],"binops":[]},{"name":"Nri.Ui.TextArea.V3","comment":"\n\n\n## Upgrading to V3\n\n  - Do nothing! (This just uses new elm-css styles)\n\n\n## The Nri styleguide-specified textarea with overlapping label\n\n@docs view, writing, contentCreation, Height, HeightBehavior, Model, generateId\n\n","unions":[{"name":"Height","comment":" For specifying the actual height.\n","args":[],"cases":[["DefaultHeight",[]],["SingleLine",[]]]},{"name":"HeightBehavior","comment":" Control whether to auto-expand the height.\n","args":[],"cases":[["Fixed",[]],["AutoResize",["Nri.Ui.TextArea.V3.Height"]]]}],"aliases":[{"name":"Model","comment":" ","args":["msg"],"type":"{ value : String.String, autofocus : Basics.Bool, onInput : String.String -> msg, isInError : Basics.Bool, height : Nri.Ui.TextArea.V3.HeightBehavior, placeholder : String.String, label : String.String, showLabel : Basics.Bool }"}],"values":[{"name":"contentCreation","comment":" Used for Content Creation\n","type":"Nri.Ui.TextArea.V3.Model msg -> Html.Styled.Html msg"},{"name":"generateId","comment":" ","type":"String.String -> String.String"},{"name":"view","comment":" ","type":"Nri.Ui.TextArea.V3.Model msg -> Html.Styled.Html msg"},{"name":"writing","comment":" Used for Writing Cycles\n","type":"Nri.Ui.TextArea.V3.Model msg -> Html.Styled.Html msg"}],"binops":[]},{"name":"Nri.Ui.TextArea.V4","comment":"\n\n\n## Upgrading to V4\n\n  - Adds field for onBlur\n\n\n## The Nri styleguide-specified textarea with overlapping label\n\n\n## Creating New Versions\n\nWhen upgrading this module, we need to make sure to also include a new\ncustom element, or else autosizing will break! This means doing the following:\n\n1.  Creating a new module in `lib/TextArea`\n2.  Requiring that module in `lib/index.js`\n\n@docs view, writing, contentCreation, Height, HeightBehavior, Model, generateId\n\n","unions":[{"name":"Height","comment":" For specifying the actual height.\n","args":[],"cases":[["DefaultHeight",[]],["SingleLine",[]]]},{"name":"HeightBehavior","comment":" Control whether to auto-expand the height.\n","args":[],"cases":[["Fixed",[]],["AutoResize",["Nri.Ui.TextArea.V4.Height"]]]}],"aliases":[{"name":"Model","comment":" ","args":["msg"],"type":"{ value : String.String, autofocus : Basics.Bool, onInput : String.String -> msg, onBlur : Maybe.Maybe msg, isInError : Basics.Bool, height : Nri.Ui.TextArea.V4.HeightBehavior, placeholder : String.String, label : String.String, showLabel : Basics.Bool }"}],"values":[{"name":"contentCreation","comment":" Used for Content Creation\n","type":"Nri.Ui.TextArea.V4.Model msg -> Html.Styled.Html msg"},{"name":"generateId","comment":" ","type":"String.String -> String.String"},{"name":"view","comment":" ","type":"Nri.Ui.TextArea.V4.Model msg -> Html.Styled.Html msg"},{"name":"writing","comment":" Used for Writing Cycles\n","type":"Nri.Ui.TextArea.V4.Model msg -> Html.Styled.Html msg"}],"binops":[]},{"name":"Nri.Ui.TextInput.V3","comment":"\n\n@docs Model\n@docs view, writing\n\n\n## Input types\n\n@docs number\n@docs text\n\n","unions":[],"aliases":[{"name":"Model","comment":" ","args":["value","msg"],"type":"{ label : String.String, isInError : Basics.Bool, onInput : value -> msg, placeholder : String.String, value : value, autofocus : Basics.Bool, showLabel : Basics.Bool, type_ : Nri.Ui.TextInput.V3.InputType value }"}],"values":[{"name":"number","comment":" An input that allows number entry\n","type":"Nri.Ui.TextInput.V3.InputType (Maybe.Maybe Basics.Int)"},{"name":"text","comment":" An input that allows text entry\n","type":"Nri.Ui.TextInput.V3.InputType String.String"},{"name":"view","comment":" ","type":"Nri.Ui.TextInput.V3.Model value msg -> Html.Styled.Html msg"},{"name":"writing","comment":" ","type":"Nri.Ui.TextInput.V3.Model value msg -> Html.Styled.Html msg"}],"binops":[]},{"name":"Nri.Ui.TextInput.V4","comment":"\n\n@docs Model\n@docs view, writing\n@docs generateId\n\n\n## Input types\n\n@docs number\n@docs text\n\n","unions":[],"aliases":[{"name":"Model","comment":" ","args":["value","msg"],"type":"{ label : String.String, isInError : Basics.Bool, onInput : value -> msg, onBlur : Maybe.Maybe msg, placeholder : String.String, value : value, autofocus : Basics.Bool, showLabel : Basics.Bool, type_ : Nri.Ui.TextInput.V4.InputType value }"}],"values":[{"name":"generateId","comment":" Gives you the DOM element id that will be used by a `TextInput.view` with the given label.\nThis is for use when you need the DOM element id for use in javascript (such as trigger an event to focus a particular text input)\n","type":"String.String -> String.String"},{"name":"number","comment":" An input that allows number entry\n","type":"Nri.Ui.TextInput.V4.InputType (Maybe.Maybe Basics.Int)"},{"name":"text","comment":" An input that allows text entry\n","type":"Nri.Ui.TextInput.V4.InputType String.String"},{"name":"view","comment":" ","type":"Nri.Ui.TextInput.V4.Model value msg -> Html.Styled.Html msg"},{"name":"writing","comment":" ","type":"Nri.Ui.TextInput.V4.Model value msg -> Html.Styled.Html msg"}],"binops":[]},{"name":"Nri.Ui.TextInput.V5","comment":"\n\n\n# Changes from V4\n\n  - adds a password input\n\n@docs Model\n@docs view, writing\n@docs generateId\n\n\n## Input types\n\n@docs number, float, text, password\n\n","unions":[],"aliases":[{"name":"Model","comment":" ","args":["value","msg"],"type":"{ label : String.String, isInError : Basics.Bool, onInput : value -> msg, onBlur : Maybe.Maybe msg, placeholder : String.String, value : value, autofocus : Basics.Bool, showLabel : Basics.Bool, type_ : Nri.Ui.TextInput.V5.InputType value }"}],"values":[{"name":"float","comment":" An input that allows float entry\n","type":"Nri.Ui.TextInput.V5.InputType (Maybe.Maybe Basics.Float)"},{"name":"generateId","comment":" Gives you the DOM element id that will be used by a `TextInput.view` with the given label.\nThis is for use when you need the DOM element id for use in javascript (such as trigger an event to focus a particular text input)\n","type":"String.String -> String.String"},{"name":"number","comment":" An input that allows integer entry\n","type":"Nri.Ui.TextInput.V5.InputType (Maybe.Maybe Basics.Int)"},{"name":"password","comment":" An input that allows password entry\n","type":"Nri.Ui.TextInput.V5.InputType String.String"},{"name":"text","comment":" An input that allows text entry\n","type":"Nri.Ui.TextInput.V5.InputType String.String"},{"name":"view","comment":" ","type":"Nri.Ui.TextInput.V5.Model value msg -> Html.Styled.Html msg"},{"name":"writing","comment":" ","type":"Nri.Ui.TextInput.V5.Model value msg -> Html.Styled.Html msg"}],"binops":[]},{"name":"Nri.Ui.Tooltip.V1","comment":" A tooltip component!\n\nThese tooltips follow the accessibility recommendations from: <https://inclusive-components.design/tooltips-toggletips>\n\nExample usage:\n\n        tooltip [ Html.text \"Gradebook\" ]\n        |> withPadding SmallPadding\n        |> withWidth FitToContent\n        |> primaryLabel {\n            trigger = OnClick\n            , triggerHtml = someTriggerHtml\n            , onTrigger = MyOnTriggerMsg\n            , isOpen = True\n            , extraButtonAttrs = modalV9LastFocusableElement\n        }\n\n\n## Suggested Improvements for V2\n\n  - The toggle tip does not currently manage focus correctly for keyboard users - if a\n    user tries to click on a link in the toggle tip, the tip will disappear as focus moves\n    to the next item in the page. This should be improved in the next release.\n  - Currently, only toggle tip supports links on hover - generalize this to all tooltips\n\n\n## Tooltip Construction\n\n@docs Tooltip, tooltip\n\n@docs Position, withPosition\n\n@docs Width, withWidth\n\n@docs Padding, withPadding\n\n@docs withTooltipStyleOverrides\n\n@docs Trigger\n\n\n## View Functions\n\n@docs primaryLabel, auxillaryDescription, toggleTip\n\n","unions":[{"name":"Padding","comment":" How much padding should be around the content inside the tooltip?\n","args":[],"cases":[["SmallPadding",[]],["NormalPadding",[]]]},{"name":"Position","comment":" Where should this tooltip be positioned?\n","args":[],"cases":[["OnTop",[]],["OnBottom",[]],["OnLeft",[]],["OnRight",[]]]},{"name":"Tooltip","comment":" A standard NoRedInk tooltip, which appears around its parent element.\n\nCreate versions of me with `tooltip`, and customize them with functions like\n`withPosition` and `withTheme` from this model. Like so:\n\n    tooltip [ Html.text \"Hello, World!\" ]\n        |> withPosition OnLeft\n\n","args":["msg"],"cases":[]},{"name":"Trigger","comment":" How do you open this tooltip?\n\n  - `OnHover`: the tooltip opens when hovering over the trigger element, and\n    closes when the hover stops.\n  - `OnClick`: the tooltip opens when clicking the root element, and closes when\n    anything but the tooltip is clicked again.\n\nNote: design typically prefers `OnHover`. However, if your tooltip has a link that someone\nneeds to click, use `OnClick` because hover tooltips will currently close when you try\nto click the link.\n\nFIXME: Make it so you can click on links in hover tooltips.\n\n","args":[],"cases":[["OnHover",[]],["OnClick",[]]]},{"name":"Width","comment":" Should the tooltip be exactly some measurement or fit to the width of the\ncontent?\n","args":[],"cases":[["Exactly",["Basics.Int"]],["FitToContent",[]]]}],"aliases":[],"values":[{"name":"auxillaryDescription","comment":" Used when the content of the tooltip provides an \"auxillary description\" for its content.\n","type":"{ trigger : Nri.Ui.Tooltip.V1.Trigger, triggerHtml : Accessibility.Styled.Html msg, extraButtonAttrs : List.List (Accessibility.Styled.Attribute msg), onTrigger : Basics.Bool -> msg, isOpen : Basics.Bool, id : String.String } -> Nri.Ui.Tooltip.V1.Tooltip msg -> Accessibility.Styled.Html msg"},{"name":"primaryLabel","comment":" Used when the content of the tooltip is the \"primary label\" for its content, for example,\nwhen the trigger content is an icon. The tooltip content will supercede the content of the trigger\nHTML for screen readers.\n\nHere's what the fields in the configuration record do:\n\n  - `trigger`: How do you open this tooltip?\n  - `triggerHtml`: What element do you interact with to open the tooltip?\n  - `extraButtonAttrs`: Adds attributes to the trigger button. Useful for things like focus management, like with Accessible Modal\n  - `onTrigger`: What `msg` should I send when the tooltip should open and\n    close? The `Bool` represents the next `isOpen` value.\n  - `isOpen`: Is the tooltip open now? (keep track of this in your model somewhere)\n  - `id`: A unique identifier used to associate the trigger with its content\n\n","type":"{ trigger : Nri.Ui.Tooltip.V1.Trigger, triggerHtml : Accessibility.Styled.Html msg, extraButtonAttrs : List.List (Accessibility.Styled.Attribute msg), onTrigger : Basics.Bool -> msg, isOpen : Basics.Bool, id : String.String } -> Nri.Ui.Tooltip.V1.Tooltip msg -> Accessibility.Styled.Html msg"},{"name":"toggleTip","comment":" Supplementary information triggered by a \"?\" icon\n\nA toggle tip is always triggered by a hover (or focus, for keyboard users)\n\n","type":"{ onTrigger : Basics.Bool -> msg, isOpen : Basics.Bool, label : String.String, extraButtonAttrs : List.List (Accessibility.Styled.Attribute msg) } -> Nri.Ui.Tooltip.V1.Tooltip msg -> Accessibility.Styled.Html msg"},{"name":"tooltip","comment":" Construct a tooltip given some content.\n","type":"List.List (Accessibility.Styled.Html msg) -> Nri.Ui.Tooltip.V1.Tooltip msg"},{"name":"withPadding","comment":" Set the padding around the edges of the tooltip.\n","type":"Nri.Ui.Tooltip.V1.Padding -> Nri.Ui.Tooltip.V1.Tooltip msg -> Nri.Ui.Tooltip.V1.Tooltip msg"},{"name":"withPosition","comment":" Set a tooltip's position:\n\n    tooltip [ text \"I'm on the left!\" ]\n        |> withPosition OnLeft\n\n","type":"Nri.Ui.Tooltip.V1.Position -> Nri.Ui.Tooltip.V1.Tooltip msg -> Nri.Ui.Tooltip.V1.Tooltip msg"},{"name":"withTooltipStyleOverrides","comment":" Set some custom styles on the tooltip. These will be treated as overrides,\nso be careful!\n","type":"List.List Css.Style -> Nri.Ui.Tooltip.V1.Tooltip msg -> Nri.Ui.Tooltip.V1.Tooltip msg"},{"name":"withWidth","comment":" Set the width of the tooltip itself.\n","type":"Nri.Ui.Tooltip.V1.Width -> Nri.Ui.Tooltip.V1.Tooltip msg -> Nri.Ui.Tooltip.V1.Tooltip msg"}],"binops":[]},{"name":"Nri.Ui.UiIcon.V1","comment":"\n\n@docs seeMore, openClose, download, sort, gear, flipper, sortArrow\n@docs unarchive, share, preview, skip, copyToClipboard, gift\n@docs activity\n@docs footsteps, compass, speedometer, bulb, help, hat, keychain\n@docs person, class, leaderboard, performance\n@docs calendar, clock\n@docs document, newspaper\n@docs edit, pen\n@docs arrowTop, arrowRight, arrowDown, arrowLeft, arrowPointingRight\n@docs checkmark, x\n@docs attention, exclamation\n@docs flag, star, starOutline\n@docs equals, plus\n@docs key, lock\n@docs badge\n\n    import Html.Styled exposing (..)\n    import Nri.Ui.Colors.V1 as Colors\n    import Nri.Ui.Svg.V1 as Svg\n    import Nri.Ui.UiIcon.V1 as UiIcon\n\n    view : Html msg\n    view =\n        Svg.toHtml (Svg.withColor Colors.lichen UiIcon.unarchive)\n\n","unions":[],"aliases":[],"values":[{"name":"activity","comment":" ","type":"Nri.Ui.Svg.V1.Svg"},{"name":"arrowDown","comment":" ","type":"Nri.Ui.Svg.V1.Svg"},{"name":"arrowLeft","comment":" ","type":"Nri.Ui.Svg.V1.Svg"},{"name":"arrowPointingRight","comment":" ","type":"Nri.Ui.Svg.V1.Svg"},{"name":"arrowRight","comment":" ","type":"Nri.Ui.Svg.V1.Svg"},{"name":"arrowTop","comment":" ","type":"Nri.Ui.Svg.V1.Svg"},{"name":"attention","comment":" ","type":"Nri.Ui.Svg.V1.Svg"},{"name":"badge","comment":" ","type":"Nri.Ui.Svg.V1.Svg"},{"name":"bulb","comment":" ","type":"Nri.Ui.Svg.V1.Svg"},{"name":"calendar","comment":" ","type":"Nri.Ui.Svg.V1.Svg"},{"name":"checkmark","comment":" ","type":"Nri.Ui.Svg.V1.Svg"},{"name":"class","comment":" ","type":"Nri.Ui.Svg.V1.Svg"},{"name":"clock","comment":" ","type":"Nri.Ui.Svg.V1.Svg"},{"name":"compass","comment":" ","type":"Nri.Ui.Svg.V1.Svg"},{"name":"copyToClipboard","comment":" ","type":"Nri.Ui.Svg.V1.Svg"},{"name":"document","comment":" ","type":"Nri.Ui.Svg.V1.Svg"},{"name":"download","comment":" ","type":"Nri.Ui.Svg.V1.Svg"},{"name":"edit","comment":" ","type":"Nri.Ui.Svg.V1.Svg"},{"name":"equals","comment":" ","type":"Nri.Ui.Svg.V1.Svg"},{"name":"exclamation","comment":" ","type":"Nri.Ui.Svg.V1.Svg"},{"name":"flag","comment":" ","type":"Nri.Ui.Svg.V1.Svg"},{"name":"flipper","comment":" ","type":"Nri.Ui.Svg.V1.Svg"},{"name":"footsteps","comment":" ","type":"Nri.Ui.Svg.V1.Svg"},{"name":"gear","comment":" ","type":"Nri.Ui.Svg.V1.Svg"},{"name":"gift","comment":" ","type":"Nri.Ui.Svg.V1.Svg"},{"name":"hat","comment":" ","type":"Nri.Ui.Svg.V1.Svg"},{"name":"help","comment":" ","type":"Nri.Ui.Svg.V1.Svg"},{"name":"key","comment":" ","type":"Nri.Ui.Svg.V1.Svg"},{"name":"keychain","comment":" ","type":"Nri.Ui.Svg.V1.Svg"},{"name":"leaderboard","comment":" ","type":"Nri.Ui.Svg.V1.Svg"},{"name":"lock","comment":" ","type":"Nri.Ui.Svg.V1.Svg"},{"name":"newspaper","comment":" ","type":"Nri.Ui.Svg.V1.Svg"},{"name":"openClose","comment":" ","type":"Nri.Ui.Svg.V1.Svg"},{"name":"pen","comment":" ","type":"Nri.Ui.Svg.V1.Svg"},{"name":"performance","comment":" ","type":"Nri.Ui.Svg.V1.Svg"},{"name":"person","comment":" ","type":"Nri.Ui.Svg.V1.Svg"},{"name":"plus","comment":" ","type":"Nri.Ui.Svg.V1.Svg"},{"name":"preview","comment":" ","type":"Nri.Ui.Svg.V1.Svg"},{"name":"seeMore","comment":" ","type":"Nri.Ui.Svg.V1.Svg"},{"name":"share","comment":" ","type":"Nri.Ui.Svg.V1.Svg"},{"name":"skip","comment":" ","type":"Nri.Ui.Svg.V1.Svg"},{"name":"sort","comment":" ","type":"Nri.Ui.Svg.V1.Svg"},{"name":"sortArrow","comment":" ","type":"Nri.Ui.Svg.V1.Svg"},{"name":"speedometer","comment":" ","type":"Nri.Ui.Svg.V1.Svg"},{"name":"star","comment":" ","type":"Nri.Ui.Svg.V1.Svg"},{"name":"starOutline","comment":" ","type":"Nri.Ui.Svg.V1.Svg"},{"name":"unarchive","comment":" ","type":"Nri.Ui.Svg.V1.Svg"},{"name":"x","comment":" ","type":"Nri.Ui.Svg.V1.Svg"}],"binops":[]}]