v[Oi      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~                                  ! " # $ % & ' ( ) * + , - . / 0 1 2 3 4 5 6 7 8 9 : ; < = > ? @ A B C D E F G H I J K L M N O P Q R S T U V W X Y Z [ \ ] ^ _ ` a b c d e f g h None&'.3456;<=>?BFQTV`d. aPlacement of elements around (what is implicity but maybe shouldn't just be) a rectangular canvas<Orientation for an element. Watch this space for curvature! vertical alignmenthorizontal alignmentbA Chart is simply a type synonym for a typical Diagrams object. A close relation to this type is i B, but this usage tends to force a single backend (B comes from the backend libraries), so making Chart b's maintains backend polymorphism.aJust about everything - text, circles, lines, triangles, charts, axes, titles, legends etc - are fs, which means that most things are amenable to full use of the combinatorially-inclined diagrams-lib.<project a double-containered set of data to a new Rect range7determine the range of a double-containered set of data@the aspect of a chart expressed as a ratio of x-plane : y-plane. a 1:1 aspecta 1.5:1 aspect golden ratio a 3:1 aspecta skinny 5:1 aspectBconversion of horizontal alignment to (one :: Range Double) limits5svg text is forced to be lower left (-0.5) by default@conversion of vertical alignment to (one :: Range Double) limitssvg text is lower by defaultposition an element at a point !convert an R2 to a diagrams Point!convert an R2 to a V2"IfoldMap for beside; stacking chart elements in a direction, with a premap#*combine elements vertically, with a premap$,combine elements horizontally, with a premap%horizontal separator&vertical separator'&convert an rgba spec to an AlphaColour(the official chart-unit blue)the official chart-unit grey*Bthe diagrams scaleX with a zero divide guard to avoid error throws+Bthe diagrams scaleY with a zero divide guard to avoid error throws,Athe diagrams scale with a zero divide guard to avoid error throws.These are difficult to avoid+  !"#$%&'()*+,+   !"#$&%'()*+,  None.3456;<=>?BFQTV`dDT7DAn arrow structure contains position, direction and size information;Dtodo: quite a clunky specification of what an arrow is (or could be)=ArrowStyles based on diagramsjBconversion between unit and diagrams ToDo: abstract ArrowHT usageUtEqualize the arrow space width with the data space one. this creates the right arrow sizing in physical chart spaceVGRescale data across position, and between position and arrow direction.Tnote that, due to this auto-scaling, there is no such thing as a single arrow_ chart arrowsExample :: Chart b arrowsExample = arrows ( #maxLength .~ 0.5 $ #maxHeadLength .~ 0.2 $ #maxStaffWidth .~ 0.01 $ def) [ Arrow (Pair x (sin (5 * x))) (Pair x (cos x)) | x <- grid MidPos (one :: Range Double) 100 ] other/arrowsExample.svgarrows exampleWA chart of arrowsX&An arrow chart scaled to its own range 1arrowChart_Example :: Chart b arrowChart_Example = arrowChart_ [def] asquare [as] where as = normArrows [ Arrow (Pair x y) (Pair (sin 1 / x + 0.0001) (cos 1 / y + 0.0001)) | x <- grid MidPos (one :: Range Double) 20 , y <- grid MidPos (one :: Range Double) 20 ] other/arrowChart_Example.svgarrowChart_ example"789:;<=R>?@ABCDEFGHIJKLMNOPQSTUVWX"789:=>?@ABCDEFGHIJKLMNOPQRST;<UVWX789:; <klmnopqr=>?@ABCDEFGHIJKLMNOPQRSTNone.3456;<=>?BFQTV`dN _/Convert a one-dimensional data set to line data`8Convert a one-dimensional data set to verticle line dataa:Convert a one-dimensional data set to horizontal line databJConvert a one-dimensional data set to rectangular bars with a gap betweenc(Create line data for a formulae y = f(x)d(Create line data for a formulae x = f(y)e(Create rect data for a formulae y = f(x)f(Create rect data for a formulae x = f(y)g*Create rect data for a formulae c = f(x,y)h"transpose the dimensions of a Rect _`abcdefgh _`abcdefghNone".3456;<=>?BFQTV`abd~{ i(whether to include lower and upper timesla step in timesparse text as per iso8601:set -XOverloadedStrings,let t0 = parseUTCTime ("2017-12-05" :: Text)t0Just 2017-12-05 00:00:00 UTCsadd a TimeGrain to a UTCTime:addGrain (Years 1) 5 (UTCTime (fromGregorian 2015 2 28) 0)2020-02-29 00:00:00 UTC;addGrain (Months 1) 1 (UTCTime (fromGregorian 2015 2 28) 0)2015-03-31 00:00:00 UTC:addGrain (Hours 6) 5 (UTCTime (fromGregorian 2015 2 28) 0)2015-03-01 06:00:00 UTCJaddGrain (Seconds 0.001) (60*1000+1) (UTCTime (fromGregorian 2015 2 28) 0)2015-02-28 00:01:00.001 UTCt0compute the floor UTCTime based on the timegrain9floorGrain (Years 5) (UTCTime (fromGregorian 1999 1 1) 0)1995-12-31 00:00:00 UTC<floorGrain (Months 3) (UTCTime (fromGregorian 2016 12 30) 0)2016-09-30 00:00:00 UTC:floorGrain (Days 5) (UTCTime (fromGregorian 2016 12 30) 1)2016-12-30 00:00:00 UTCTfloorGrain (Minutes 15) (UTCTime (fromGregorian 2016 12 30) (fromDouble' $ 15*60+1))2016-12-30 00:15:00 UTCBfloorGrain (Seconds 0.1) (UTCTime (fromGregorian 2016 12 30) 0.12)2016-12-30 00:00:00.1 UTCu2compute the ceiling UTCTime based on the timegrain;ceilingGrain (Years 5) (UTCTime (fromGregorian 1999 1 1) 0)2000-12-31 00:00:00 UTC>ceilingGrain (Months 3) (UTCTime (fromGregorian 2016 12 30) 0)2016-12-31 00:00:00 UTC<ceilingGrain (Days 5) (UTCTime (fromGregorian 2016 12 30) 1)2016-12-31 00:00:00 UTCVceilingGrain (Minutes 15) (UTCTime (fromGregorian 2016 12 30) (fromDouble' $ 15*60+1))2016-12-30 00:30:00 UTCDceilingGrain (Seconds 0.1) (UTCTime (fromGregorian 2016 12 30) 0.12)2016-12-30 00:00:00.2 UTCvpdates attached to charts are often discontinuous, but we want to smooth that reality over and show a continuous range on the axis The assumption with getSensibleTimeGrid is that there is a list of discountinuous UTCTimes rather than a continuous range. Output is a list of index points for the original [UTCTime] and label tuples, and a list of unused list elements.placedTimeLabelDiscontinuous PosIncludeBoundaries (Just "%d %b") 2 [UTCTime (fromGregorian 2017 12 6) 0, UTCTime (fromGregorian 2017 12 29) 0, UTCTime (fromGregorian 2018 1 31) 0, UTCTime (fromGregorian 2018 3 3) 0]:([(0,"06 Dec"),(1,"31 Dec"),(2,"28 Feb"),(3,"03 Mar")],[])w1compute a sensible TimeGrain and list of UTCTimeshsensibleTimeGrid InnerPos 2 (UTCTime (fromGregorian 2016 12 31) 0, UTCTime (fromGregorian 2017 12 31) 0)T(Months 6,[2016-12-31 00:00:00 UTC,2017-06-30 00:00:00 UTC,2017-12-31 00:00:00 UTC])fsensibleTimeGrid InnerPos 2 (UTCTime (fromGregorian 2017 1 1) 0, UTCTime (fromGregorian 2017 12 30) 0)$(Months 6,[2017-06-30 00:00:00 UTC])fsensibleTimeGrid UpperPos 2 (UTCTime (fromGregorian 2017 1 1) 0, UTCTime (fromGregorian 2017 12 30) 0)<(Months 6,[2017-06-30 00:00:00 UTC,2017-12-31 00:00:00 UTC])fsensibleTimeGrid LowerPos 2 (UTCTime (fromGregorian 2017 1 1) 0, UTCTime (fromGregorian 2017 12 30) 0)<(Months 6,[2016-12-31 00:00:00 UTC,2017-06-30 00:00:00 UTC])t8come up with a sensible TimeGrain over a NominalDiffTimeijklmnopqrstuvwslmnopqrtuwijkvijklmnopqrNone.3456;<=>?BFQTV`d]z+Options to pixelate a Rect using a function|At some point, a color of a rect becomes more about data than stylistic option, hence the pixel. Echewing rect border leaves a Pixel with no stylistic options to choose.0Just about everything on a chart is a rectangle.solid rectangle, no borderclear and transparent rectclear rect, with borderBplace a rect around an Chart, with a size equal to the chart rangeA single rectangle specified using a Rect x z y w where (x,y) is location of lower left corner (z,w) is location of upper right corner rect_Example :: Double -> Chart b rect_Example n = labelled (opts (Pair n 1)) "z,w" $ labelled (opts (Pair n -1)) "z,y" $ labelled (opts (Pair (-n) 1)) "x,w" $ labelled (opts (Pair (-n) -1)) "x,y" $ rect_ def (Ranges (n *. one) one) where opts :: Pair Double -> LabelOptions opts o = #text %~ ( (#color .~ black `withOpacity` 0.8) . (#size .~ 0.3)) $ #orientation .~ o $ def other/rect_Example.svg rect_ example0Create rectangles (with the same configuration). 7rects def (rectBars 0 [1, 2, 3, 5, 8, 0, -2, 11, 2, 1]) other/rectsExample.svg rects exampleA chart of rects-A chart of rectangles scaled to its own range cropts :: [RectOptions] ropts = [ #borderSize .~ 0 $ def , #borderSize .~ 0 $ #color .~ ucolor 0.3 0.3 0.3 0.2 $ def ] rss :: [[Rect Double]] rss = [ rectXY (\x -> exp (-(x ** 2) / 2)) (Range -5 5) 50 , rectXY (\x -> 0.5 * exp (-(x ** 2) / 8)) (Range -5 5) 50 ] rectChart_Example :: Chart b rectChart_Example = rectChart_ ropts widescreen rss other/rectChart_Example.svgrectChart_ example$A pixel is a rectangle with a color. pixel_Example :: Chart b pixel_Example = text_ opt "I'm a pixel!" <> pixel_ (Pixel one ublue) where opt = #color .~ withOpacity black 0.8 $ #size .~ 0.2 $ def other/pixel_Example.svgpixel_ exampleRender multiple pixels pixelsExample :: Chart b pixelsExample = pixels [ Pixel (Rect (5 * x) (5 * x + 0.1) (sin (10 * x)) (sin (10 * x) + 0.1)) (dissolve (2 * x) ublue) | x <- grid OuterPos (Range 0 1) 100 ] other/pixelsExample.svgpixels exampleA chart of pixels)A chart of pixels scaled to its own range pixelChart_Example :: Chart b pixelChart_Example = pixelChart_ asquare [(\(r,c) -> Pixel r (blend c (ucolor 0.47 0.73 0.86 1) (ucolor 0.01 0.06 0.22 1) )) <$> rectF (\(Pair x y) -> (x+y)*(x+y)) one (Pair 40 40)] other/pixelChart_Example.svgpixelChart_ example9Transform a Rect into Pixels using a function over a Pair}Chart pixels using a function This is a convenience function, and the example below is equivalent to the pixelChart_ example :pixelateChart def asquare one (\(Pair x y) -> (x+y)*(x+y))z{|}~|}~z{z{uv|}~wxyNone"-.3456;<=>?BFQTV`abdwToDo: Mathjax capability would be awesome but the html that mathjax generates is not valid svg unless it is wrapped in  foreignObject instead of  text.  foreignObjectf also cant be a sub-element of a text element. This means extensive digging into Diagrams innards etc ?https://stackoverflow.com/questions/15962325/mathjax-inside-svg Svg optionsrender svg to textwrite an svg to filewrite a chart to an svg file a scratch padz{|}None-.3456;<=>?BFQTV`d5A label is a text element attached to a chart element~direction of labeldistance to label ADT of fonts text optionstext as a path or as svg text$options specific to text as SVG text'options specific to text as an SVG path1transform from chart-unit to SVGFonts rep of fontCreate a textual chart element "text_ def "Welcome to chart-unit!" other/text_Example.svg text_ example"Create positioned text from a list ts :: [(Text, Pair Double)] ts = zip (map Text.singleton ['a' .. 'z']) [Pair (sin (x * 0.1)) x | x <- [0 .. 25]] textsExample :: Chart b textsExample = texts def ts other/textsExample.svg texts exampleA chart of text'A chart of text scaled to its own range ctextChart_Example :: Chart b textChart_Example = textChart_ [#size .~ 0.33 $ def] widescreen [ts] other/textChart_Example.svgtextChart_ example$Label a chart element with some text labelledExample :: Chart b labelledExample = labelled (LabelOptions (#alignH .~ AlignLeft $ #rotation .~ 45 $ def) (Pair 1 1) 0.05) "a label" (glyph_ def) other/labelledExample.svglabelled example~ None.3456;<=>?BFQTV`dO .shape of the glyph expressed in diagrams terms4The actual shape of a glyph can be any Chart element glyph radius normalized*convert from chart-unit to diagrams shapesCreate a glyph.  glyph_ def other/glyph_Example.svgglyph_ exampleCreate positioned glyphs. +glyphs def (dataXY sin (Range 0 (2*pi)) 30) other/glyphsExample.svgglyphs exampleA chart of glyphs)A chart of glyphs scaled to its own range }gopts :: [GlyphOptions] gopts = [ #borderSize .~ 0.001 $ def , #borderSize .~ 0.001 $ #size .~ 0.1 $ #color .~ rybColor 7 `withOpacity` 0.4 $ #shape .~ Triangle $ def ] gdata :: [[Pair Double]] gdata = [ dataXY sin (Range 0 (2*pi)) 30 , dataXY cos (Range 0 (2*pi)) 30 ] glyphChart_Example :: Chart b glyphChart_Example = glyphChart_ gopts widescreen gdata other/glyphChart_Example.svgglyphChart_ example#Create labelled, positioned glyphs. lglyphsExample :: Chart b lglyphsExample = lglyphs def def $ zip (show <$> [0 ..]) [Pair (x / 10) (sin x / 10) | x <- [0 .. 10]] other/lglyphsExample.svglglyphs exampleA chart of labelled glyphs2A chart of labelled glyphs scaled to its own range lgdata :: [(Text, Pair Double)] lgdata = [(\(p@(Pair x y)) -> (show x <> "," <> show y, fromIntegral <$> p)) <$> (Pair <$> [0 .. 5] <*> [0 .. 5] :: [Pair Int]) ] lglyphChart_Example :: Rect Double -> Chart b lglyphChart_Example a = lglyphChart_ [#gap .~ 0.015 $ #text . #size .~ 0.12 $ def] [#color .~ black `withOpacity` 1 $ #borderSize .~ 0 $ #size .~ 0.01 $ def] a [lgdata] other/lglyphChart_Example.svglglyphChart_ example  None.3456;<=>?BFQTV`d KThe main features of a line (that distinguish it from a glyph say) is that:Eit exists over multiple points (a line can't exist at a single point);line rendering is normalized to the eventual physical chart normalized$A line connecting a series of points linesExample :: Int -> Chart b linesExample n = lines (#color .~ red `withOpacity` 0.5 $ def) (dataXY cos (Range 0 (4*pi)) n) other/linesExample.svg lines example!A single line connecting 2 pointsA chart of lines(A chart of lines scaled to its own range lls :: [[Pair Double]] ls = map (uncurry Pair) <$> [ [(0.0, 1.0), (1.0, 1.0), (2.0, 5.0)] , [(0.0, 0.0), (3.0, 3.0)] , [(0.5, 4.0), (0.5, 0)] ] lopts :: [LineOptions] lopts = zipWith (\x y -> LineOptions x (withOpacity (d3Colors1 y) 0.6)) [0.01, 0.02, 0.005] [0,1,2] lineChart_Example :: Chart b lineChart_Example = lineChart_ lopts sixbyfour ls other/lineChart_Example.svglineChart_ example!Lines with glyphs atop eack pointA chart of glines/A chart of glyphs_lines scaled to its own range ggopts3 :: [GlyphOptions] gopts3 = zipWith (\x y -> #color .~ withOpacity (d3Colors1 x) 0.2 $ #borderColor .~ withOpacity (d3Colors1 x) 1 $ #borderSize .~ 0.005 $ #shape .~ y $ #size .~ 0.08 $ def) [6,8,2] [Triangle, Square, Circle] glineChart_Example :: Chart b glineChart_Example = glineChart_ lopts gopts3 sixbyfour ls other/glineChart_Example.svgglineChart_ example  None"-.3456;<=>?BFQTV`adh0%Options for gridlines.Style of grid linesno ticks on axis7sensibly rounded line placement and a guide to how manyexactly n lines using Posspecific line placement5The positioning of boundaries for a grid over a space9Legend options. todo: allow for horizontal concatenation.OLegendType reuses all the various chart option types to help formulate a legendMOptions for titles. Defaults to center aligned, and placed at Top of the hudStyle of tick marks on an axis.no ticks on axisspecific labels.sensibly rounded ticks and a guide to how manyexactly n equally spaced ticksspecific labels and placement (options for prettifying axis decorations {Axes are somewhat complicated. For instance, they contain a range within which tick marks need to be supplied or computed. Various options for a hud.ADefaults to the classical x- and y-axis, no titles and no legends Create a hud. hud def sixbyfour one other/hudExample.svg hud example-attach a hud to a chart with a specific range,attach a hud to a chart using the data range AwithHudExample :: Chart b withHudExample = withHud_ hopts sixbyfour (lineChart lopts) ls where hopts = #titles .~ [(def, "withHud Example")] $ #legends .~ [ #chartType .~ zipWith (\x y -> (LegendLine x 0.05, y)) lopts ["line1", "line2", "line3"] $ def ] $ def other/withHudExample.svgwithHud example;Direction to place stuff on the outside of the built-up hud#A gap to add when placing elements.default X axisdefault Y axisDcreate an axis, based on AxisOptions, a physical aspect, and a rangeUnder-the-hood, the axis function has gone through many a refactor, and still has a ways to go. A high degree of technical debt tends to acrue here. axisExample :: Chart b axisExample = axis aopts one (Range 0 100000) where aopts :: AxisOptions aopts = #label . #text %~ ((#rotation .~ -45) . (#size .~ 0.06) . (#alignH .~ AlignLeft)) $ #gap .~ 0.0001 $ def other/axisExample.svg axis example&adjust an axis for sane font sizes etc9create an axis, with adjustment to axis options if needed7compute tick values and labels given options and rangesProvide formatted text for a list of numbers so that they are just distinguished. 'precision 2 ticks' means give the tick labels as much precision as is needed for them to be distinguished, but with at least 2 significant figues.Create a title for a chart. The logic used to work out placement is flawed due to being able to freely specify text rotation. It works for specific rotations (Top, Bottom at 0, Left at 90, Right @ 270)(Create a legend based on a LegendOptions  legends :: [(LegendType, Text)] legends = [(LegendText def, "legend")] <> [(LegendPixel (blob ublue) 0.05, "pixel")] <> -- [ (LegendArrow (def & #minStaffWidth .~ 0.01 & #minHeadLength .~ 0.03) 0.05, "arrow")] <> [(LegendRect def 0.05, "rect")] <> [(LegendGLine def def 0.10, "glyph+line")] <> [(LegendGlyph def, "just a glyph")] <> zipWith (\x y -> (LegendLine x 0.05, y)) lopts ["short", "much longer name", "line 3"] legendExample :: Chart b legendExample = legend $ #chartType .~ legends $ def other/legendExample.svglegend example;conversion from a chart-unit GridPos to a numhask-range Posdefault horizontal griddefault vertical grid Create a grid line for a chart.7      7             None-.3456;<=>?BFQTV`bdh?<imagine a data frame ...Athe usual bar chart eye-candyC9whether to separate each Rect grouping or accumulate themConvert BarData to rectanglesFkconvert data to a range assuming a zero bound a very common but implicit assumption in a lot of bar chartsGEcalculate the Rect range of a bar data set (imagine a data frame ...)H A bar chart ~barExample :: Chart b barExample = barChart def (BarData [ys] Nothing Nothing) <> hud ( #titles .~ [(def,"Bar Chart")] $ #axes .~ [ #tickStyle .~ TickLabels labels' $ def ] $ #range .~ Just (fold (abs <$> rs)) $ def) where labels' = fmap Text.pack <$> take 10 $ (:[]) <$> ['a'..] rs = rectBars 0.1 ys ys = [1,2,3,5,8,0,-2,11,2,1] other/barExample.svgbarChart example <=>?@ABCDEFGH ABCDE<=>?@FGH<=>?@ABCDE None"-.3456;<=>?BFQTV`abdhDP(compound) Chart optionsUA single Chart specification`+render a Chart specified using ChartOptionsarender a ChartSpecb+extract the range of a single specificationc%calculate the range of a ChartOptionsPQRSTUVWXYZ[\]^_`abcPQRSTUVWXYZ[\]^_a`bcPQRSTU VWXYZ[\]^_None".3456;<=>?BFQTV`abdF       !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~  !"#$%&'()*+,789:;<=R>?@ABCDEFGHIJKLMNOPQSTUVWX_`abcdefghijklmnopqrstuvwz{|}~      <=>?@ABCDEFGHPQRSTUVWXYZ[\]^_`abcSafe.3456;<=>?BFQTV`dO !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGGHIJJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~                                                                           ! " # $ % & ' ( ) * + , - . / 0 1 2 3 4 5 6 7 8 9 : : ; < = > > ? @ A B C D E F G H I J K L L M N O P Q R S T U V W X Y Z [ \ ] ^ _ ` a b cdefghijklmnopqrstunvwxyz{|}~n } t n u  } n                                            z       !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcbdbebfbgbhbibjbkblbmbnbobpbqbrbstuvtuwtuxtuytuxtuzt{|t{}t{}t{~ttttttttttttttttttttttttttt)chart-unit-0.6.0.2-3GPWPrcojsWEck6qUEgLqYChart Chart.Core Chart.Arrow Chart.DataChart.Data.Time Chart.Rect Chart.Svg Chart.Text Chart.Glyph Chart.Line Chart.Hud Chart.Bar Chart.ADTPaths_chart_unit1data-default-class-0.1.2.0-8hmGYd6GPAfLQPQcWKOjRmData.Default.ClassDefaultdefPlace PlaceLeft PlaceRightPlaceTop PlaceBottom OrientationHoriVertAlignVAlignTopAlignMid AlignBottomAlignH AlignLeft AlignCenter AlignRight projectssrangeaspectasquare sixbyfourgolden widescreenskinnyalignHUalignHTUalignVUalignVTU positionedp_r_stackverthorisepHorisepVertucolorublueugreyscaleXscaleYscale$fR2Pair$fR1Pair $fEqAlignH $fShowAlignH $fEqAlignV $fShowAlignV$fEqOrientation$fShowOrientation $fEqPlace $fShowPlaceArrowarrowPosarrowDir ArrowOptions ArrowHTStyleTriDartHalfDartSpikeThornLineHeadNoHeadTri2Dart2 HalfDart2Spike2Thorn2Tri'Dart' HalfDart'Spike'Thorn'LineTailNoTailQuillBlockQuill2Block2 normArrowsarrows arrowChart arrowChart_$fDefaultArrowOptions$fShowArrowHTStyle$fShowArrowOptions$fGenericArrowOptions $fEqArrow $fShowArrowlineOneD vlineOneD hlineOneDrectBarsdataXYdataYXrectXYrectYXrectF rectTransPosDiscontinuous PosInnerOnlyPosIncludeBoundaries TimeGrainYearsMonthsDaysHoursMinutesSeconds parseUTCTime floorGrain ceilingGrainplacedTimeLabelDiscontinuoussensibleTimeGrid$fShowTimeGrain$fGenericTimeGrainPixelationOptionsPixel pixelRect pixelColor RectOptionsblobclearboxboundrect_rects rectChart rectChart_pixel_pixels pixelChart pixelChart_pixelate pixelateChart$fDefaultRectOptions$fDefaultPixelationOptions$fShowRectOptions$fGenericRectOptions $fShowPixel SvgOptions renderSvgtoTexttoFilefileSvgscratch$fDefaultSvgOptions$fShowSvgOptions$fGenericSvgOptions LabelOptionsTextFontLin2LinBit TextOptionsTextTypeTextPathTextSvgTextSvgOptionsTextPathOptionstextFonttext_texts textChart textChart_labelled$fDefaultTextSvgOptions$fDefaultTextPathOptions$fDefaultTextOptions$fDefaultLabelOptions$fShowTextSvgOptions$fGenericTextSvgOptions$fShowTextFont$fShowTextPathOptions$fGenericTextPathOptions$fShowTextType$fGenericTextType$fShowTextOptions$fGenericTextOptions$fShowLabelOptions$fGenericLabelOptions GlyphShapeCircleSquareEllipseTrianglePentagonHexagonSeptagonOctagaon RectSharp RectRoundedVLineHLine GlyphOptions glyphShapeglyph_glyphs glyphChart glyphChart_lglyphs lglyphChart lglyphChart_$fDefaultGlyphOptions$fShowGlyphShape$fShowGlyphOptions$fGenericGlyphOptions LineOptionslinesoneline lineChart lineChart_glines glineChart glineChart_$fDefaultLineOptions$fShowLineOptions$fGenericLineOptions GridOptions GridStyleGridNone GridRound GridExact GridPlacedGridPos GridOuterPos GridInnerPos GridLowerPos GridUpperPos GridMidPos LegendOptions LegendType LegendText LegendGlyph LegendLine LegendGLine LegendRect LegendArrow LegendPixel TitleOptions TickStyleTickNone TickLabels TickRound TickExact TickPlaced AutoOptions AxisOptions HudOptionshudwithHudwithHud_ placeOutsideplaceGapdefXAxisdefYAxisaxis adjustAxisaxisSane computeTicks precisiontitlelegendgridPosdefXGriddefYGridgridl$fDefaultAutoOptions$fDefaultAxisOptions$fDefaultTitleOptions$fDefaultLegendOptions$fDefaultGridOptions$fDefaultHudOptions$fShowAutoOptions$fGenericAutoOptions$fShowTickStyle$fGenericTickStyle$fShowAxisOptions$fGenericAxisOptions$fShowTitleOptions$fGenericTitleOptions$fShowLegendType$fGenericLegendType$fShowLegendOptions$fGenericLegendOptions $fShowGridPos$fGenericGridPos $fEqGridPos$fShowGridStyle$fGenericGridStyle$fShowGridOptions$fGenericGridOptions$fShowHudOptions$fGenericHudOptionsBarDatabarData barRowLabelsbarColumnLabels BarOptions BarValueAccBarValueSeparateBarValueAccumulatebarDataLowerUpperbarRangebarChart$fDefaultBarOptions$fShowBarValueAcc$fGenericBarValueAcc$fShowBarOptions$fGenericBarOptions $fShowBarData$fGenericBarData ChartOptions$sel:chartRange:ChartOptions$sel:chartAspect:ChartOptions$sel:charts:ChartOptions ChartSpec GlyphChart LGlyphChart LineChart GlineChart TextChart RectChart PixelChart ArrowChartBarChartHudChart renderChart renderSpec rangeSpec rangeChart$fDefaultChartOptions$fShowChartSpec$fGenericChartSpec$fShowChartOptions$fGenericChartOptions,diagrams-core-1.4.0.1-18cEyA8ffNuELJ4qoOHcy6Diagrams.Core.TypesDiagram arrowHTStyle minLength maxLength minHeadLength maxHeadLength minStaffWidth maxStaffWidthcolorhStyleaddGrainstepSensibleTimepixelationGradientpixelationGrain borderSize borderColor$sel:size:SvgOptions$sel:svgId:SvgOptions$sel:attributes:SvgOptions$sel:includeDocType:SvgOptions orientationgaptextsizealignHalignV textFillRulerotationtextType nudgeSize nudgeBottomnudgeMidnudgeTopfontshape $sel:gridOrientation:GridOptions$sel:gridStyle:GridOptions$sel:gridLine:GridOptions$sel:chartType:LegendOptions$sel:innerPad:LegendOptions$sel:innerSep:LegendOptions$sel:gap:LegendOptions$sel:rowPad:LegendOptions$sel:place:LegendOptions$sel:align:LegendOptions$sel:sep:LegendOptions$sel:canvasRect:LegendOptions$sel:text:LegendOptions$sel:text:TitleOptions$sel:align:TitleOptions$sel:place:TitleOptions$sel:gap:TitleOptions$sel:maxXRatio:AutoOptions$sel:maxYRatio:AutoOptions$sel:angledRatio:AutoOptions$sel:allowDiagonal:AutoOptions$sel:outerPad:AxisOptions$sel:orientation:AxisOptions$sel:place:AxisOptions$sel:rect:AxisOptions$sel:rectHeight:AxisOptions$sel:mark:AxisOptions$sel:markStart:AxisOptions$sel:gap:AxisOptions$sel:label:AxisOptions$sel:tickStyle:AxisOptions$sel:outerPad:HudOptions$sel:axes:HudOptions$sel:grids:HudOptions$sel:titles:HudOptions$sel:legends:HudOptions$sel:canvas:HudOptionsbarRects rectOptionsouterGapinnerGap displayValuesaccumulateValues hudOptions'SVGFonts-1.6.0.3-EGkGUpwyvaz4gDoJXp4VgxGraphics.SVGFonts.TexttextSVG_textSVG'textSVGTextOptsmodespacing underline textWidth textHeightModeINSIDE_HINSIDE_W INSIDE_WHSpacingHADVKERNGraphics.SVGFonts.Fontslin2linbitGraphics.SVGFonts.ReadFontloadFont#colour-2.3.4-3MiiEznBxpfEYrMTHbnSerData.Colour.Names yellowgreenyellow whitesmokewhitewheatviolet turquoisetomatothistletealtan steelblue springgreensnow slategrey slategray slateblueskybluesilversiennaseashellseagreen sandybrownsalmon saddlebrown royalblue rosybrownredpurple powderblueplumpinkperu peachpuff papayawhip palevioletred paleturquoise palegreen palegoldenrodorchid orangeredorange olivedraboliveoldlacenavy navajowhitemoccasin mistyrose mintcream midnightbluemediumvioletredmediumturquoisemediumspringgreenmediumslatebluemediumseagreen mediumpurple mediumorchid mediumbluemediumaquamarinemaroonmagentalinen limegreenlime lightyellowlightsteelbluelightslategreylightslategray lightskyblue lightseagreen lightsalmon lightpink lightgrey lightgreen lightgraylightgoldenrodyellow lightcyan lightcoral lightblue lemonchiffon lawngreen lavenderblushlavenderkhakiivoryindigo indianredhotpinkhoneydew greenyellowgreengreygray goldenrodgold ghostwhite gainsborofuchsia forestgreen floralwhite firebrick dodgerbluedimgreydimgray deepskybluedeeppink darkviolet darkturquoise darkslategrey darkslategray darkslateblue darkseagreen darksalmondarkred darkorchid darkorangedarkolivegreen darkmagenta darkkhakidarkgrey darkgreendarkgray darkgoldenroddarkcyandarkbluecyancrimsoncornsilkcornflowerbluecoral chocolate chartreuse cadetblue burlywoodbrown bluevioletblueblanchedalmondbisquebeigeazure aquamarineaqua antiquewhite alicebluereadColourNameData.Colour.Internal alphaChannelatopblend withOpacitydissolveopaquealphaColourConvert transparentblack colourConvertColour AlphaColour AffineSpace affineCombo ColourOpsoverdarken,numhask-range-0.1.3.0-3TnX2mZbCE5Koz0YYz2vuN NumHask.Rect projectRectcornersRectRangesRect' NumHask.Range gridSensibleRangeRange' NumHask.SpaceSpaceElementGrid singletonunionspacelowerprojectcontainselementsingular intersectsuppermiddisjointnulgrid gridSpacePosOuterPosInnerPosLowerPosUpperPosMidPos NumHask.PairPairPair'&palette-0.1.0.5-2nC79OSEXWZHVTnhIQYwiNData.Colour.Palette.ColorSet d3Colors4 d3Colors2 d3Colors1infiniteWebColors webColors getWebColorrybColor BrightnessDarkestDarkLightLightestData.Colour.Palette.HarmonybwgaccentAnalogicanalogictetradtriad complement monochromeshadetonetint rotateColorslidersData.Colour.Palette.TypesKolorversion getBinDir getLibDir getDynLibDir getDataDir getLibexecDir getSysconfDirgetDataFileName