{"components":[{"slug":"graph-table","name":"GraphTable","title":"Table","description":"Framed data table with an optional footer row for totals.","registry":"graph-table","docs":"https://mdx-graphs.kshv.me/docs/graph-table","when":"Good when the numbers belong in a spreadsheet.","not":"Grouped sections are Sheet. Label/value rows are Spec."},{"slug":"graph-sheet","name":"GraphSheet","title":"Sheet","description":"A table with section titles. API surfaces, RFCs, grouped specs.","registry":"graph-sheet","docs":"https://mdx-graphs.kshv.me/docs/graph-sheet","when":"Good when a table needs section titles — an API, an RFC, a spec with groups.","not":"A flat table is Table. Label/value rows are Spec."},{"slug":"graph-flow","name":"GraphFlow","title":"Flow","description":"Process diagram with nodes on a dashed arrow. Accent a node to highlight a path.","registry":"graph-flow","docs":"https://mdx-graphs.kshv.me/docs/graph-flow","when":"Good for a pipeline, a request path, or walking through a change.","not":"A dated list is Timeline. A schedule with start and end is Gantt."},{"slug":"graph-bars","name":"GraphBars","title":"Bars","description":"Two bar groups side by side, drawn with glyphs. The right group is usually the larger one.","registry":"graph-bars","docs":"https://mdx-graphs.kshv.me/docs/graph-bars","when":"Good for a before and after, or any two small histograms.","not":"A ranked list is Rank."},{"slug":"graph-rank","name":"GraphRank","title":"Rank","description":"A list of labels with a bar of characters and a number on the right.","registry":"graph-rank","docs":"https://mdx-graphs.kshv.me/docs/graph-rank","when":"Good for traffic, coverage, or anything you'd sort highest first.","not":"Two histograms side by side is Bars. A table of numbers is Table."},{"slug":"graph-cells","name":"GraphCells","title":"Cells","description":"Grid of filled and empty cells, drawn with glyphs. Useful for density or comparing two sets.","registry":"graph-cells","docs":"https://mdx-graphs.kshv.me/docs/graph-cells","when":"Good for a small grid of filled and empty cells.","not":"A share of a hundred cells is Waffle. A year of days is Activity."},{"slug":"graph-meter","name":"GraphMeter","title":"Meter","description":"Progress bar drawn with = characters. Empty slots stay as dashes.","registry":"graph-meter","docs":"https://mdx-graphs.kshv.me/docs/graph-meter","when":"Good for one value between 0 and 1, shown as a fill.","not":"Actual versus a target is Bullet. Parts of a whole is Stack."},{"slug":"graph-spark","name":"GraphSpark","title":"Spark","description":"Sparkline from block characters. Values scale to the highest point.","registry":"graph-spark","docs":"https://mdx-graphs.kshv.me/docs/graph-spark","when":"Good for a handful of numbers when you don't need an axis.","not":"If you need a y-scale, use Plot."},{"slug":"graph-tree","name":"GraphTree","title":"Tree","description":"Nested tree with branch glyphs. Accent a node to highlight it.","registry":"graph-tree","docs":"https://mdx-graphs.kshv.me/docs/graph-tree","when":"Good for nested files or an org chart.","not":"A timeline or a table."},{"slug":"graph-timeline","name":"GraphTimeline","title":"Timeline","description":"Vertical list of dates. Mark one row as current with the accent color.","registry":"graph-timeline","docs":"https://mdx-graphs.kshv.me/docs/graph-timeline","when":"Good for steps in order, with one marked as current.","not":"A punch list is Check. A schedule with start and end is Gantt."},{"slug":"graph-check","name":"GraphCheck","title":"Check","description":"Punch list. Done rows mark [x], the rest stay [ ].","registry":"graph-check","docs":"https://mdx-graphs.kshv.me/docs/graph-check","when":"Good for a punch list. Done is [x], the rest stay [ ].","not":"Dated steps are Timeline."},{"slug":"graph-stack","name":"GraphStack","title":"Stack","description":"Stacked bar for parts of a whole. Different glyphs per segment instead of colors.","registry":"graph-stack","docs":"https://mdx-graphs.kshv.me/docs/graph-stack","when":"Good for parts of a whole on one track.","not":"There is no pie chart. Use Waffle if you want a share of cells."},{"slug":"graph-funnel","name":"GraphFunnel","title":"Funnel","description":"Steps get narrower as values drop. Percentages compare to the first step.","registry":"graph-funnel","docs":"https://mdx-graphs.kshv.me/docs/graph-funnel","when":"Good for steps that get narrower as people drop off.","not":"A ranked list is Rank. A process diagram is Flow."},{"slug":"graph-gantt","name":"GraphGantt","title":"Gantt","description":"Schedule chart. start and end are fractions from 0 to 1 along the track.","registry":"graph-gantt","docs":"https://mdx-graphs.kshv.me/docs/graph-gantt","when":"Good for work that overlaps on a shared calendar.","not":"A dated log is Timeline."},{"slug":"graph-plot","name":"GraphPlot","title":"Plot","description":"Line or area chart built from columns of block characters.","registry":"graph-plot","docs":"https://mdx-graphs.kshv.me/docs/graph-plot","when":"Good when the series needs a y-scale.","not":"A handful of points with no axis is Spark."},{"slug":"graph-waffle","name":"GraphWaffle","title":"Waffle","description":"Grid of 100 cells. The value sets how many are filled in.","registry":"graph-waffle","docs":"https://mdx-graphs.kshv.me/docs/graph-waffle","when":"Good for a share shown as a grid of about a hundred cells.","not":"Labeled parts of a whole is Stack."},{"slug":"graph-diff","name":"GraphDiff","title":"Diff","description":"List with add, remove, and unchanged rows. Works for changelogs or bundle sizes.","registry":"graph-diff","docs":"https://mdx-graphs.kshv.me/docs/graph-diff","when":"Good for showing what was added, removed, or kept.","not":"A list of numeric before and after is Slope."},{"slug":"graph-invoice","name":"GraphInvoice","title":"Invoice","description":"Document table for invoices and quotes. From, bill-to, line items, and a totals block.","registry":"graph-invoice","docs":"https://mdx-graphs.kshv.me/docs/graph-invoice","when":"Good for from, bill-to, line items, and totals.","not":"A generic table is Table."},{"slug":"graph-compare","name":"GraphCompare","title":"Compare","description":"Feature matrix. Cells are text or true/false, drawn as ✓ and –.","registry":"graph-compare","docs":"https://mdx-graphs.kshv.me/docs/graph-compare","when":"Good for putting two options side by side.","not":"Exact numbers on both axes are Matrix. Numeric ranks are Rank."},{"slug":"graph-matrix","name":"GraphMatrix","title":"Matrix","description":"Exact numbers on both axes. Confusion matrices, latency by region.","registry":"graph-matrix","docs":"https://mdx-graphs.kshv.me/docs/graph-matrix","when":"Good when both axes are labels and the cells are exact numbers.","not":"Intensities are Heatmap. Yes/no features are Compare."},{"slug":"graph-stat","name":"GraphStat","title":"Stat","description":"A row of large numbers with labels.","registry":"graph-stat","docs":"https://mdx-graphs.kshv.me/docs/graph-stat","when":"Good for two to four large numbers, with no sparkline.","not":"One number with a trend is KPI. A live clock is Timer."},{"slug":"graph-kpi","name":"GraphKpi","title":"KPI","description":"One large number with a sparkline under it.","registry":"graph-kpi","docs":"https://mdx-graphs.kshv.me/docs/graph-kpi","when":"Good when one number is the headline and the rest is context.","not":"Several numbers with no trend is Stat."},{"slug":"graph-spec","name":"GraphSpec","title":"Spec","description":"Aligned label and value rows. Spec sheets, shipping labels, type samples.","registry":"graph-spec","docs":"https://mdx-graphs.kshv.me/docs/graph-spec","when":"Good for aligned label and value rows, like a spec sheet.","not":"Large headline numbers are Stat. A table with headers is Table. Grouped sections are Sheet."},{"slug":"graph-activity","name":"GraphActivity","title":"Activity","description":"GitHub-style contribution grid. Pass dated counts; weeks, months, and intensity are derived.","registry":"graph-activity","docs":"https://mdx-graphs.kshv.me/docs/graph-activity","when":"Good for daily counts over months, like a contribution grid.","not":"One month of marks is Calendar. Up or down days is Uptime."},{"slug":"graph-heatmap","name":"GraphHeatmap","title":"Heatmap","description":"Labeled rows and columns with the same intensity glyphs as Activity. Punchcards, hours, anything 2d.","registry":"graph-heatmap","docs":"https://mdx-graphs.kshv.me/docs/graph-heatmap","when":"Good for a labeled grid of intensities.","not":"Exact numbers on both axes are Matrix. A contribution calendar is Activity."},{"slug":"graph-calendar","name":"GraphCalendar","title":"Calendar","description":"One month as a seven-column grid. Marked days use the accent. today is wrapped in brackets.","registry":"graph-calendar","docs":"https://mdx-graphs.kshv.me/docs/graph-calendar","when":"Good for one month with a few days marked.","not":"A year of activity is Activity."},{"slug":"graph-waterfall","name":"GraphWaterfall","title":"Waterfall","description":"Running total as floating bars. First row is the start, last is the end, signed values in between.","registry":"graph-waterfall","docs":"https://mdx-graphs.kshv.me/docs/graph-waterfall","when":"Good for a running total as floating bars.","not":"Parts of a whole is Stack."},{"slug":"graph-uptime","name":"GraphUptime","title":"Uptime","description":"One glyph per day. ok, degraded, down, or empty. Wraps every 30 days.","registry":"graph-uptime","docs":"https://mdx-graphs.kshv.me/docs/graph-uptime","when":"Good for a status per day, or the blast radius of an outage.","not":"A heatmap or an activity grid."},{"slug":"graph-slope","name":"GraphSlope","title":"Slope","description":"Two figures per row with an arrow between. Up uses the accent, down recedes.","registry":"graph-slope","docs":"https://mdx-graphs.kshv.me/docs/graph-slope","when":"Good for a before and after number on each row.","not":"Two bar groups is Bars. A ranked list is Rank."},{"slug":"graph-bullet","name":"GraphBullet","title":"Bullet","description":"Actual versus target on a shared track. The marker is the target.","registry":"graph-bullet","docs":"https://mdx-graphs.kshv.me/docs/graph-bullet","when":"Good when a number has a goal sitting on the same track.","not":"A single fill from 0 to 1 is Meter."},{"slug":"graph-timer","name":"GraphTimer","title":"Timer","description":"Elapsed time, how long ago, or the time of day. The numbers update every second.","registry":"graph-timer","docs":"https://mdx-graphs.kshv.me/docs/graph-timer","when":"Good for uptime, last deploy, or a clock in the corner.","not":"Time left until a date is Countdown. A static number is Stat."},{"slug":"graph-countdown","name":"GraphCountdown","title":"Countdown","description":"Time left until a date. After that it shows a short label you pass in.","registry":"graph-countdown","docs":"https://mdx-graphs.kshv.me/docs/graph-countdown","when":"Good for a freeze, a launch, or a window that closes.","not":"Elapsed time since a start is Timer."},{"slug":"graph-frame","name":"Graph","title":"Frame","description":"Dashed frame wrapper used by every graph. Compose with GraphTitle, GraphBody, GraphRule, GraphTrack, and GraphTick. corner picks the character at each corner.","registry":"graph-frame","docs":"https://mdx-graphs.kshv.me/docs/graph-frame","when":"Good when you're putting together a custom figure.","not":"If the chart already exists, install that one instead."}]}