@nocoo/basalt 2.1.7 → 2.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/ai/INTEGRATION.md +66 -28
- package/ai/RECIPES.md +46 -1
- package/ai/USAGE.md +2 -2
- package/ai/registry.json +65 -23
- package/dist/assets/brand-mark.js.map +1 -1
- package/dist/charts/area.js.map +1 -1
- package/dist/charts/bar.js.map +1 -1
- package/dist/charts/bullet.js.map +1 -1
- package/dist/charts/charts.js.map +1 -1
- package/dist/charts/config.js.map +1 -1
- package/dist/charts/custom-chart.js.map +1 -1
- package/dist/charts/date-navigation.js.map +1 -1
- package/dist/charts/donut.js.map +1 -1
- package/dist/charts/frame.js.map +1 -1
- package/dist/charts/funnel.js.map +1 -1
- package/dist/charts/gauge.js.map +1 -1
- package/dist/charts/grouped-bar.js.map +1 -1
- package/dist/charts/heatmap-calendar.js.map +1 -1
- package/dist/charts/heatmap-matrix.js.map +1 -1
- package/dist/charts/item-list.js.map +1 -1
- package/dist/charts/legend.js.map +1 -1
- package/dist/charts/line.js.map +1 -1
- package/dist/charts/palette.js.map +1 -1
- package/dist/charts/radar.js.map +1 -1
- package/dist/charts/sample.js.map +1 -1
- package/dist/charts/sankey.js.map +1 -1
- package/dist/charts/series.js.map +1 -1
- package/dist/charts/slot-bar.js.map +1 -1
- package/dist/charts/sparkline.js.map +1 -1
- package/dist/charts/stacked-bar.js.map +1 -1
- package/dist/charts/stat-card.js.map +1 -1
- package/dist/charts/timeline.js.map +1 -1
- package/dist/charts/timeseries.js.map +1 -1
- package/dist/charts/tooltip.js.map +1 -1
- package/dist/components/accordion.js.map +1 -1
- package/dist/components/alert-dialog.js.map +1 -1
- package/dist/components/app-header.d.ts +5 -1
- package/dist/components/app-header.js +12 -4
- package/dist/components/app-header.js.map +1 -1
- package/dist/components/app-shell.d.ts +4 -1
- package/dist/components/app-shell.js +7 -4
- package/dist/components/app-shell.js.map +1 -1
- package/dist/components/autocomplete.js.map +1 -1
- package/dist/components/avatar.js.map +1 -1
- package/dist/components/badge.js.map +1 -1
- package/dist/components/banner.js.map +1 -1
- package/dist/components/basalt-mark.js.map +1 -1
- package/dist/components/battery-meter.js.map +1 -1
- package/dist/components/breadcrumbs.js.map +1 -1
- package/dist/components/button.js +2 -2
- package/dist/components/button.js.map +1 -1
- package/dist/components/chat-bubble.js.map +1 -1
- package/dist/components/chat-composer.js.map +1 -1
- package/dist/components/chat-header.js.map +1 -1
- package/dist/components/chat-inbox.js.map +1 -1
- package/dist/components/checkbox.js.map +1 -1
- package/dist/components/clipboard-text.js.map +1 -1
- package/dist/components/code.js.map +1 -1
- package/dist/components/collapsible.js.map +1 -1
- package/dist/components/combobox.js.map +1 -1
- package/dist/components/command-palette.js.map +1 -1
- package/dist/components/confirm-dialog.d.ts +4 -1
- package/dist/components/confirm-dialog.js +20 -18
- package/dist/components/confirm-dialog.js.map +1 -1
- package/dist/components/context-menu.js.map +1 -1
- package/dist/components/data-table.js +1 -1
- package/dist/components/data-table.js.map +1 -1
- package/dist/components/date-picker.js.map +1 -1
- package/dist/components/delete-resource.js +1 -1
- package/dist/components/delete-resource.js.map +1 -1
- package/dist/components/description-list.js.map +1 -1
- package/dist/components/dialog.js.map +1 -1
- package/dist/components/dock.js.map +1 -1
- package/dist/components/dropdown-menu.js.map +1 -1
- package/dist/components/editable-nav-item.js.map +1 -1
- package/dist/components/empty.js.map +1 -1
- package/dist/components/fab.js.map +1 -1
- package/dist/components/field.js.map +1 -1
- package/dist/components/file-dropzone.js.map +1 -1
- package/dist/components/filter-bar.js.map +1 -1
- package/dist/components/flow.js.map +1 -1
- package/dist/components/grid.js.map +1 -1
- package/dist/components/hover-card.js.map +1 -1
- package/dist/components/icon-picker.js.map +1 -1
- package/dist/components/inline-editable.js.map +1 -1
- package/dist/components/input-area.js.map +1 -1
- package/dist/components/input-group.js.map +1 -1
- package/dist/components/input.js.map +1 -1
- package/dist/components/label.js.map +1 -1
- package/dist/components/layer-card.js.map +1 -1
- package/dist/components/link.js.map +1 -1
- package/dist/components/loader.js.map +1 -1
- package/dist/components/loading-screen.js.map +1 -1
- package/dist/components/menu-bar.js.map +1 -1
- package/dist/components/meter.js.map +1 -1
- package/dist/components/multi-select.js.map +1 -1
- package/dist/components/navigation-menu.js.map +1 -1
- package/dist/components/overlay.js.map +1 -1
- package/dist/components/page-header.js.map +1 -1
- package/dist/components/pagination.js.map +1 -1
- package/dist/components/popover.js.map +1 -1
- package/dist/components/radio.js.map +1 -1
- package/dist/components/resource-list.js.map +1 -1
- package/dist/components/responsive-master-detail.js +5 -5
- package/dist/components/responsive-master-detail.js.map +1 -1
- package/dist/components/scroll-area.js.map +1 -1
- package/dist/components/section-rule.js.map +1 -1
- package/dist/components/segment-control.js.map +1 -1
- package/dist/components/select.js.map +1 -1
- package/dist/components/sensitive-input.js.map +1 -1
- package/dist/components/separator.js.map +1 -1
- package/dist/components/sheet.js +1 -0
- package/dist/components/sheet.js.map +1 -1
- package/dist/components/sidebar.d.ts +3 -1
- package/dist/components/sidebar.js +8 -5
- package/dist/components/sidebar.js.map +1 -1
- package/dist/components/skeleton-line.js.map +1 -1
- package/dist/components/slider.js.map +1 -1
- package/dist/components/stat-strip.js.map +1 -1
- package/dist/components/switch.js.map +1 -1
- package/dist/components/table-of-contents.js.map +1 -1
- package/dist/components/table-pager.js.map +1 -1
- package/dist/components/table.js.map +1 -1
- package/dist/components/tabs.js.map +1 -1
- package/dist/components/tag-badge.js.map +1 -1
- package/dist/components/tag-color-picker.js.map +1 -1
- package/dist/components/text.js.map +1 -1
- package/dist/components/theme-toggle.js.map +1 -1
- package/dist/components/toast.js.map +1 -1
- package/dist/components/toggle-group.js +2 -2
- package/dist/components/toggle-group.js.map +1 -1
- package/dist/components/toggle.js +1 -1
- package/dist/components/toggle.js.map +1 -1
- package/dist/components/toolbar.js.map +1 -1
- package/dist/components/tooltip.js +14 -13
- package/dist/components/tooltip.js.map +1 -1
- package/dist/components/typeahead-field.js.map +1 -1
- package/dist/components/upload-queue.js.map +1 -1
- package/dist/providers/accent.js +1 -1
- package/dist/providers/accent.js.map +1 -1
- package/dist/providers/link.js.map +1 -1
- package/dist/providers/theme.js +1 -1
- package/dist/providers/theme.js.map +1 -1
- package/dist/styles/base.css +116 -0
- package/dist/styles/standalone.css +161 -16
- package/dist/utils/cn.js.map +1 -1
- package/dist/utils/control-surface.js.map +1 -1
- package/dist/utils/preference-store.js +1 -1
- package/dist/utils/preference-store.js.map +1 -1
- package/dist/utils/selection-indicator.js +1 -1
- package/dist/utils/selection-indicator.js.map +1 -1
- package/dist/utils/use-checkable-group.js.map +1 -1
- package/package.json +2 -2
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"brand-mark.js","names":[],"sources":["../../src/assets/brand-mark.ts"],"sourcesContent":["export const basaltMarkPng =\n\t\"data:image/png;base64,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\";\n"],"mappings":";;AAAA,IAAa,IACZ"}
|
|
1
|
+
{"version":3,"file":"brand-mark.js","names":["basaltMarkPng"],"sources":["../../src/assets/brand-mark.ts"],"sourcesContent":["export const basaltMarkPng =\n\t\"data:image/png;base64,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\";\n"],"mappings":";;AAAA,IAAaA,IACZ"}
|
package/dist/charts/area.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"area.js","names":[],"sources":["../../src/charts/area.tsx"],"sourcesContent":["import type { ReactNode } from \"react\";\nimport { Area, CartesianGrid, AreaChart as RechartsArea, Tooltip, XAxis, YAxis } from \"recharts\";\nimport {\n\tANIMATION_PROPS,\n\tCHART_PLOT_MARGIN,\n\tCHART_PLOT_MARGIN_BARE,\n\tCHART_TYPE,\n\tcartesianAxisProps,\n\tchartTooltipProps,\n\tGRID_PROPS,\n\tseriesColor,\n} from \"./config\";\nimport { ChartShell } from \"./frame\";\nimport { ChartLegend } from \"./legend\";\nimport type {\n\tLineChartAxisDomain,\n\tLineChartLegendRenderer,\n\tLineChartNumericKeys,\n\tLineChartTooltipRenderer,\n} from \"./line\";\nimport {\n\ttype ChartSeriesDescriptor,\n\tresolveChartSeries,\n\ttype XYPoint,\n\txyFallbackKeys,\n} from \"./series\";\n\nexport type AreaChartProps<\n\tTData extends { x: string | number } = XYPoint,\n\tK extends LineChartNumericKeys<TData> & string = LineChartNumericKeys<TData> & string,\n> = {\n\t/**\n\t * Dataset array where each record requires an `x` category or time coordinate.\n\t * Any remaining fields with numeric, nullable, or optional number values are inferred as valid series keys.\n\t */\n\tdata: TData[];\n\t/**\n\t * Series descriptors identifying which numeric keys to plot.\n\t * Inferred strictly from numeric keys of `TData` (rejects non-numeric fields, `x`, and typos).\n\t */\n\tseries?: Array<ChartSeriesDescriptor<NoInfer<K>>>;\n\tariaLabel?: string;\n\tclassName?: string;\n\tshowAxes?: boolean;\n\tshowLegend?: boolean;\n\tstacked?: boolean;\n\t/**\n\t * Stacking offset algorithm (e.g. \"expand\" for 100% normalized percentage area stacks).\n\t */\n\tstackOffset?: \"none\" | \"expand\" | \"wiggle\" | \"silhouette\";\n\t/**\n\t * Value formatter for Y-axis tick values and fallback tooltip values.\n\t */\n\tvalueFormatter?: (value: number) => string;\n\t/**\n\t * Formatter for X-axis category or time tick labels.\n\t */\n\txValueFormatter?: (value: string | number) => string;\n\t/**\n\t * Custom numerical or keyword bounds for the Y-axis.\n\t */\n\tyDomain?: LineChartAxisDomain;\n\t/**\n\t * Custom legend slot or render function receiving resolved series descriptors.\n\t */\n\tlegend?: ReactNode | LineChartLegendRenderer<K>;\n\t/**\n\t * Custom tooltip content renderer receiving Recharts payload, active status, and coordinate label.\n\t */\n\tcustomTooltip?: LineChartTooltipRenderer;\n\t/**\n\t * Textual summary describing key insights, highs, lows, and keyboard exploration instructions.\n\t * Associated with the chart via useId and aria-describedby.\n\t */\n\tsummary?: ReactNode;\n\t/**\n\t * Accessible tabular or structured data alternative rendered outside the plot area.\n\t */\n\tdataAlternative?: ReactNode;\n\t/**\n\t * Whether the interactive accessibility layer is enabled on the underlying Recharts graphic.\n\t * Enables keyboard exploration with Tab and arrow keys where supported by the underlying chart type.\n\t * Non-interactive compact or decorative charts without tooltip navigation should provide summary or dataAlternative.\n\t * @default true\n\t */\n\taccessibilityLayer?: boolean;\n};\n\nexport function AreaChart<\n\tTData extends { x: string | number } = XYPoint,\n\tK extends LineChartNumericKeys<TData> & string = LineChartNumericKeys<TData> & string,\n>({\n\tdata,\n\tseries,\n\tariaLabel = \"Area chart\",\n\tclassName,\n\tshowAxes = false,\n\tshowLegend = false,\n\tstacked = false,\n\tstackOffset,\n\tvalueFormatter,\n\txValueFormatter,\n\tyDomain,\n\tlegend,\n\tcustomTooltip,\n\tsummary,\n\tdataAlternative,\n\taccessibilityLayer,\n}: AreaChartProps<TData, K>) {\n\tconst areas = resolveChartSeries(\n\t\tseries,\n\t\txyFallbackKeys(data as unknown as Array<{ y2?: number; y3?: number }>) as K[],\n\t);\n\tconst stackId = stacked || stackOffset ? \"stack\" : undefined;\n\tconst resolvedLegend =\n\t\tlegend !== undefined ? (\n\t\t\ttypeof legend === \"function\" ? (\n\t\t\t\tlegend({ items: areas })\n\t\t\t) : (\n\t\t\t\tlegend\n\t\t\t)\n\t\t) : showLegend ? (\n\t\t\t<ChartLegend items={areas} shape=\"area\" />\n\t\t) : undefined;\n\n\treturn (\n\t\t<ChartShell\n\t\t\tariaLabel={ariaLabel}\n\t\t\tclassName={className}\n\t\t\tlegend={resolvedLegend}\n\t\t\tsummary={summary}\n\t\t\tdataAlternative={dataAlternative}\n\t\t\taccessibilityLayer={accessibilityLayer}\n\t\t>\n\t\t\t<RechartsArea\n\t\t\t\tdata={data}\n\t\t\t\tmargin={showAxes ? CHART_PLOT_MARGIN : CHART_PLOT_MARGIN_BARE}\n\t\t\t\tstackOffset={stackOffset}\n\t\t\t>\n\t\t\t\t{showAxes ? <CartesianGrid {...GRID_PROPS} /> : null}\n\t\t\t\t<XAxis dataKey=\"x\" {...cartesianAxisProps(!showAxes)} tickFormatter={xValueFormatter} />\n\t\t\t\t<YAxis\n\t\t\t\t\t{...cartesianAxisProps(!showAxes)}\n\t\t\t\t\ttickFormatter={valueFormatter}\n\t\t\t\t\t{...(yDomain ? { domain: yDomain as [number, number] } : {})}\n\t\t\t\t/>\n\t\t\t\t<Tooltip\n\t\t\t\t\t{...chartTooltipProps({\n\t\t\t\t\t\tformatter: valueFormatter,\n\t\t\t\t\t\tcursor: \"line\",\n\t\t\t\t\t\tcustomTooltip,\n\t\t\t\t\t})}\n\t\t\t\t/>\n\t\t\t\t{areas.map((item, index) => {\n\t\t\t\t\tconst fill = seriesColor(item, index);\n\t\t\t\t\treturn (\n\t\t\t\t\t\t<Area\n\t\t\t\t\t\t\tkey={item.key}\n\t\t\t\t\t\t\tdataKey={item.key}\n\t\t\t\t\t\t\tname={item.label ?? item.key}\n\t\t\t\t\t\t\tstackId={stackId}\n\t\t\t\t\t\t\tstroke={fill}\n\t\t\t\t\t\t\tstrokeWidth={CHART_TYPE.strokeWidth}\n\t\t\t\t\t\t\tfill={fill}\n\t\t\t\t\t\t\tfillOpacity={CHART_TYPE.areaFillAlpha}\n\t\t\t\t\t\t\t{...ANIMATION_PROPS}\n\t\t\t\t\t\t/>\n\t\t\t\t\t);\n\t\t\t\t})}\n\t\t\t</RechartsArea>\n\t\t</ChartShell>\n\t);\n}\n"],"mappings":";;;;;;;;AAwFA,
|
|
1
|
+
{"version":3,"file":"area.js","names":["RechartsArea","AreaChart$1","AreaChart","areas","resolveChartSeries","series","xyFallbackKeys","data","stackId","stacked","stackOffset","resolvedLegend","legend","showLegend","ChartLegend","ChartShell","showAxes","CHART_PLOT_MARGIN","CHART_PLOT_MARGIN_BARE","CartesianGrid","GRID_PROPS","XAxis","cartesianAxisProps","xValueFormatter","YAxis","valueFormatter","yDomain","Tooltip","chartTooltipProps","fill","seriesColor","item","index","Area","CHART_TYPE","ANIMATION_PROPS"],"sources":["../../src/charts/area.tsx"],"sourcesContent":["import type { ReactNode } from \"react\";\nimport { Area, CartesianGrid, AreaChart as RechartsArea, Tooltip, XAxis, YAxis } from \"recharts\";\nimport {\n\tANIMATION_PROPS,\n\tCHART_PLOT_MARGIN,\n\tCHART_PLOT_MARGIN_BARE,\n\tCHART_TYPE,\n\tcartesianAxisProps,\n\tchartTooltipProps,\n\tGRID_PROPS,\n\tseriesColor,\n} from \"./config\";\nimport { ChartShell } from \"./frame\";\nimport { ChartLegend } from \"./legend\";\nimport type {\n\tLineChartAxisDomain,\n\tLineChartLegendRenderer,\n\tLineChartNumericKeys,\n\tLineChartTooltipRenderer,\n} from \"./line\";\nimport {\n\ttype ChartSeriesDescriptor,\n\tresolveChartSeries,\n\ttype XYPoint,\n\txyFallbackKeys,\n} from \"./series\";\n\nexport type AreaChartProps<\n\tTData extends { x: string | number } = XYPoint,\n\tK extends LineChartNumericKeys<TData> & string = LineChartNumericKeys<TData> & string,\n> = {\n\t/**\n\t * Dataset array where each record requires an `x` category or time coordinate.\n\t * Any remaining fields with numeric, nullable, or optional number values are inferred as valid series keys.\n\t */\n\tdata: TData[];\n\t/**\n\t * Series descriptors identifying which numeric keys to plot.\n\t * Inferred strictly from numeric keys of `TData` (rejects non-numeric fields, `x`, and typos).\n\t */\n\tseries?: Array<ChartSeriesDescriptor<NoInfer<K>>>;\n\tariaLabel?: string;\n\tclassName?: string;\n\tshowAxes?: boolean;\n\tshowLegend?: boolean;\n\tstacked?: boolean;\n\t/**\n\t * Stacking offset algorithm (e.g. \"expand\" for 100% normalized percentage area stacks).\n\t */\n\tstackOffset?: \"none\" | \"expand\" | \"wiggle\" | \"silhouette\";\n\t/**\n\t * Value formatter for Y-axis tick values and fallback tooltip values.\n\t */\n\tvalueFormatter?: (value: number) => string;\n\t/**\n\t * Formatter for X-axis category or time tick labels.\n\t */\n\txValueFormatter?: (value: string | number) => string;\n\t/**\n\t * Custom numerical or keyword bounds for the Y-axis.\n\t */\n\tyDomain?: LineChartAxisDomain;\n\t/**\n\t * Custom legend slot or render function receiving resolved series descriptors.\n\t */\n\tlegend?: ReactNode | LineChartLegendRenderer<K>;\n\t/**\n\t * Custom tooltip content renderer receiving Recharts payload, active status, and coordinate label.\n\t */\n\tcustomTooltip?: LineChartTooltipRenderer;\n\t/**\n\t * Textual summary describing key insights, highs, lows, and keyboard exploration instructions.\n\t * Associated with the chart via useId and aria-describedby.\n\t */\n\tsummary?: ReactNode;\n\t/**\n\t * Accessible tabular or structured data alternative rendered outside the plot area.\n\t */\n\tdataAlternative?: ReactNode;\n\t/**\n\t * Whether the interactive accessibility layer is enabled on the underlying Recharts graphic.\n\t * Enables keyboard exploration with Tab and arrow keys where supported by the underlying chart type.\n\t * Non-interactive compact or decorative charts without tooltip navigation should provide summary or dataAlternative.\n\t * @default true\n\t */\n\taccessibilityLayer?: boolean;\n};\n\nexport function AreaChart<\n\tTData extends { x: string | number } = XYPoint,\n\tK extends LineChartNumericKeys<TData> & string = LineChartNumericKeys<TData> & string,\n>({\n\tdata,\n\tseries,\n\tariaLabel = \"Area chart\",\n\tclassName,\n\tshowAxes = false,\n\tshowLegend = false,\n\tstacked = false,\n\tstackOffset,\n\tvalueFormatter,\n\txValueFormatter,\n\tyDomain,\n\tlegend,\n\tcustomTooltip,\n\tsummary,\n\tdataAlternative,\n\taccessibilityLayer,\n}: AreaChartProps<TData, K>) {\n\tconst areas = resolveChartSeries(\n\t\tseries,\n\t\txyFallbackKeys(data as unknown as Array<{ y2?: number; y3?: number }>) as K[],\n\t);\n\tconst stackId = stacked || stackOffset ? \"stack\" : undefined;\n\tconst resolvedLegend =\n\t\tlegend !== undefined ? (\n\t\t\ttypeof legend === \"function\" ? (\n\t\t\t\tlegend({ items: areas })\n\t\t\t) : (\n\t\t\t\tlegend\n\t\t\t)\n\t\t) : showLegend ? (\n\t\t\t<ChartLegend items={areas} shape=\"area\" />\n\t\t) : undefined;\n\n\treturn (\n\t\t<ChartShell\n\t\t\tariaLabel={ariaLabel}\n\t\t\tclassName={className}\n\t\t\tlegend={resolvedLegend}\n\t\t\tsummary={summary}\n\t\t\tdataAlternative={dataAlternative}\n\t\t\taccessibilityLayer={accessibilityLayer}\n\t\t>\n\t\t\t<RechartsArea\n\t\t\t\tdata={data}\n\t\t\t\tmargin={showAxes ? CHART_PLOT_MARGIN : CHART_PLOT_MARGIN_BARE}\n\t\t\t\tstackOffset={stackOffset}\n\t\t\t>\n\t\t\t\t{showAxes ? <CartesianGrid {...GRID_PROPS} /> : null}\n\t\t\t\t<XAxis dataKey=\"x\" {...cartesianAxisProps(!showAxes)} tickFormatter={xValueFormatter} />\n\t\t\t\t<YAxis\n\t\t\t\t\t{...cartesianAxisProps(!showAxes)}\n\t\t\t\t\ttickFormatter={valueFormatter}\n\t\t\t\t\t{...(yDomain ? { domain: yDomain as [number, number] } : {})}\n\t\t\t\t/>\n\t\t\t\t<Tooltip\n\t\t\t\t\t{...chartTooltipProps({\n\t\t\t\t\t\tformatter: valueFormatter,\n\t\t\t\t\t\tcursor: \"line\",\n\t\t\t\t\t\tcustomTooltip,\n\t\t\t\t\t})}\n\t\t\t\t/>\n\t\t\t\t{areas.map((item, index) => {\n\t\t\t\t\tconst fill = seriesColor(item, index);\n\t\t\t\t\treturn (\n\t\t\t\t\t\t<Area\n\t\t\t\t\t\t\tkey={item.key}\n\t\t\t\t\t\t\tdataKey={item.key}\n\t\t\t\t\t\t\tname={item.label ?? item.key}\n\t\t\t\t\t\t\tstackId={stackId}\n\t\t\t\t\t\t\tstroke={fill}\n\t\t\t\t\t\t\tstrokeWidth={CHART_TYPE.strokeWidth}\n\t\t\t\t\t\t\tfill={fill}\n\t\t\t\t\t\t\tfillOpacity={CHART_TYPE.areaFillAlpha}\n\t\t\t\t\t\t\t{...ANIMATION_PROPS}\n\t\t\t\t\t\t/>\n\t\t\t\t\t);\n\t\t\t\t})}\n\t\t\t</RechartsArea>\n\t\t</ChartShell>\n\t);\n}\n"],"mappings":";;;;;;;;AAwFA,SAAgBE,EAGd,EACD,SACA,WACA,eAAY,cACZ,cACA,cAAW,IACX,gBAAa,IACb,aAAU,IACV,gBACA,mBACA,oBACA,YACA,WACA,kBACA,YACA,oBACA,yBAC4B;CAC5B,IAAMC,IAAQC,EACbC,GACAC,EAAeC,CAAsD,CACtE,GACMC,IAAUC,KAAWC,IAAc,UAAU,KAAA,GAC7CC,IACLC,MAAW,KAAA,IAMPC,IACH,kBAACC,GAAD;EAAa,OAAOX;EAAO,OAAM;CAAQ,CAAA,IACtC,KAAA,IAPH,OAAOS,KAAW,aACjBA,EAAO,EAAE,OAAOT,EAAM,CAAC,IAEvBS;CAMH,OACC,kBAACG,GAAD;EACY;EACA;EACX,QAAQJ;EACC;EACQ;EACG;EAEpB,UAAA,kBAACX,GAAD;GACO;GACN,QAAQgB,IAAWC,IAAoBC;GAC1B;GAHd,UAAA;IAKEF,IAAW,kBAACG,GAAD,EAAe,GAAIC,EAAa,CAAA,IAAI;IAChD,kBAACC,GAAD;KAAO,SAAQ;KAAI,GAAIC,EAAmB,CAACN,CAAQ;KAAG,eAAeO;IAAkB,CAAA;IACvF,kBAACC,GAAD;KACC,GAAIF,EAAmB,CAACN,CAAQ;KAChC,eAAeS;KACf,GAAKC,IAAU,EAAE,QAAQA,EAA4B,IAAI,CAAC;IAC1D,CAAA;IACD,kBAACC,GAAD,EACC,GAAIC,EAAkB;KACrB,WAAWH;KACX,QAAQ;KACR;IACD,CAAC,EACD,CAAA;IACAtB,EAAM,KAAK,GAAM,MAAU;KAC3B,IAAM0B,IAAOC,EAAYC,GAAMC,CAAK;KACpC,OACC,kBAACC,GAAD;MAEC,SAASF,EAAK;MACd,MAAMA,EAAK,SAASA,EAAK;MAChB;MACT,QAAQF;MACR,aAAaK,EAAW;MAClB;MACN,aAAaA,EAAW;MACxB,GAAIC;KACJ,GATKJ,EAAK,GASV;IAEH,CAAC;GACY;;CACH,CAAA;AAEd"}
|
package/dist/charts/bar.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bar.js","names":[],"sources":["../../src/charts/bar.tsx"],"sourcesContent":["import type { ReactNode } from \"react\";\nimport { Bar, CartesianGrid, BarChart as RechartsBar, Tooltip, XAxis, YAxis } from \"recharts\";\nimport {\n\tANIMATION_PROPS,\n\tBAR_RADIUS,\n\tCHART_PLOT_MARGIN,\n\tCHART_PLOT_MARGIN_BARE,\n\tcartesianAxisProps,\n\tchartTooltipProps,\n\tGRID_PROPS,\n\tseriesColor,\n} from \"./config\";\nimport { ChartShell } from \"./frame\";\nimport { ChartLegend } from \"./legend\";\nimport type {\n\tLineChartAxisDomain,\n\tLineChartLegendRenderer,\n\tLineChartNumericKeys,\n\tLineChartTooltipRenderer,\n} from \"./line\";\nimport {\n\tapplyLeadColor,\n\ttype ChartSeriesDescriptor,\n\tresolveChartSeries,\n\ttype XYPoint,\n} from \"./series\";\n\nexport type BarChartProps<\n\tTData extends { x: string | number } = XYPoint,\n\tK extends LineChartNumericKeys<TData> & string = LineChartNumericKeys<TData> & string,\n> = {\n\t/**\n\t * Dataset array where each record requires an `x` category or time coordinate.\n\t * Any remaining fields with numeric, nullable, or optional number values are inferred as valid series keys.\n\t */\n\tdata: TData[];\n\t/**\n\t * Series descriptors identifying which numeric keys to plot.\n\t * Inferred strictly from numeric keys of `TData` (rejects non-numeric fields, `x`, and typos).\n\t */\n\tseries?: Array<ChartSeriesDescriptor<NoInfer<K>>>;\n\tariaLabel?: string;\n\tclassName?: string;\n\tshowAxes?: boolean;\n\tshowLegend?: boolean;\n\tcolor?: string;\n\t/**\n\t * Value formatter for Y-axis tick values and fallback tooltip values.\n\t */\n\tvalueFormatter?: (value: number) => string;\n\t/**\n\t * Formatter for X-axis category or time tick labels.\n\t */\n\txValueFormatter?: (value: string | number) => string;\n\t/**\n\t * Custom numerical or keyword bounds for the Y-axis.\n\t */\n\tyDomain?: LineChartAxisDomain;\n\t/**\n\t * Custom legend slot or render function receiving resolved series descriptors.\n\t */\n\tlegend?: ReactNode | LineChartLegendRenderer<K>;\n\t/**\n\t * Custom tooltip content renderer receiving Recharts payload, active status, and coordinate label.\n\t */\n\tcustomTooltip?: LineChartTooltipRenderer;\n\t/**\n\t * Textual summary describing key insights, highs, lows, and keyboard exploration instructions.\n\t * Associated with the chart via useId and aria-describedby.\n\t */\n\tsummary?: ReactNode;\n\t/**\n\t * Accessible tabular or structured data alternative rendered outside the plot area.\n\t */\n\tdataAlternative?: ReactNode;\n\t/**\n\t * Whether the interactive accessibility layer is enabled on the underlying Recharts graphic.\n\t * Enables keyboard exploration with Tab and arrow keys where supported by the underlying chart type.\n\t * Non-interactive compact or decorative charts without tooltip navigation should provide summary or dataAlternative.\n\t * @default true\n\t */\n\taccessibilityLayer?: boolean;\n};\n\nexport function BarChart<\n\tTData extends { x: string | number } = XYPoint,\n\tK extends LineChartNumericKeys<TData> & string = LineChartNumericKeys<TData> & string,\n>({\n\tdata,\n\tseries,\n\tariaLabel = \"Bar chart\",\n\tclassName,\n\tshowAxes = false,\n\tshowLegend = false,\n\tcolor,\n\tvalueFormatter,\n\txValueFormatter,\n\tyDomain,\n\tlegend,\n\tcustomTooltip,\n\tsummary,\n\tdataAlternative,\n\taccessibilityLayer,\n}: BarChartProps<TData, K>) {\n\tconst bars = applyLeadColor(resolveChartSeries(series, [\"y\" as K]), color);\n\tconst resolvedLegend =\n\t\tlegend !== undefined ? (\n\t\t\ttypeof legend === \"function\" ? (\n\t\t\t\tlegend({ items: bars })\n\t\t\t) : (\n\t\t\t\tlegend\n\t\t\t)\n\t\t) : showLegend ? (\n\t\t\t<ChartLegend items={bars} shape=\"bar\" />\n\t\t) : undefined;\n\n\treturn (\n\t\t<ChartShell\n\t\t\tariaLabel={ariaLabel}\n\t\t\tclassName={className}\n\t\t\tlegend={resolvedLegend}\n\t\t\tsummary={summary}\n\t\t\tdataAlternative={dataAlternative}\n\t\t\taccessibilityLayer={accessibilityLayer}\n\t\t>\n\t\t\t<RechartsBar data={data} margin={showAxes ? CHART_PLOT_MARGIN : CHART_PLOT_MARGIN_BARE}>\n\t\t\t\t{showAxes ? <CartesianGrid {...GRID_PROPS} /> : null}\n\t\t\t\t<XAxis dataKey=\"x\" {...cartesianAxisProps(!showAxes)} tickFormatter={xValueFormatter} />\n\t\t\t\t<YAxis\n\t\t\t\t\t{...cartesianAxisProps(!showAxes)}\n\t\t\t\t\ttickFormatter={valueFormatter}\n\t\t\t\t\t{...(yDomain ? { domain: yDomain as [number, number] } : {})}\n\t\t\t\t/>\n\t\t\t\t<Tooltip\n\t\t\t\t\t{...chartTooltipProps({\n\t\t\t\t\t\tformatter: valueFormatter,\n\t\t\t\t\t\tcursor: \"bar\",\n\t\t\t\t\t\tcustomTooltip,\n\t\t\t\t\t})}\n\t\t\t\t/>\n\t\t\t\t{bars.map((item, index) => (\n\t\t\t\t\t<Bar\n\t\t\t\t\t\tkey={item.key}\n\t\t\t\t\t\tdataKey={item.key}\n\t\t\t\t\t\tname={item.label ?? item.key}\n\t\t\t\t\t\tfill={seriesColor(item, index)}\n\t\t\t\t\t\tradius={BAR_RADIUS.vertical}\n\t\t\t\t\t\t{...ANIMATION_PROPS}\n\t\t\t\t\t/>\n\t\t\t\t))}\n\t\t\t</RechartsBar>\n\t\t</ChartShell>\n\t);\n}\n"],"mappings":";;;;;;;;AAoFA,
|
|
1
|
+
{"version":3,"file":"bar.js","names":["RechartsBar","BarChart$1","BarChart","bars","applyLeadColor","resolveChartSeries","series","color","resolvedLegend","legend","showLegend","ChartLegend","ChartShell","showAxes","CHART_PLOT_MARGIN","CHART_PLOT_MARGIN_BARE","CartesianGrid","GRID_PROPS","XAxis","cartesianAxisProps","xValueFormatter","YAxis","valueFormatter","yDomain","Tooltip","chartTooltipProps","Bar","item","seriesColor","index","BAR_RADIUS","ANIMATION_PROPS"],"sources":["../../src/charts/bar.tsx"],"sourcesContent":["import type { ReactNode } from \"react\";\nimport { Bar, CartesianGrid, BarChart as RechartsBar, Tooltip, XAxis, YAxis } from \"recharts\";\nimport {\n\tANIMATION_PROPS,\n\tBAR_RADIUS,\n\tCHART_PLOT_MARGIN,\n\tCHART_PLOT_MARGIN_BARE,\n\tcartesianAxisProps,\n\tchartTooltipProps,\n\tGRID_PROPS,\n\tseriesColor,\n} from \"./config\";\nimport { ChartShell } from \"./frame\";\nimport { ChartLegend } from \"./legend\";\nimport type {\n\tLineChartAxisDomain,\n\tLineChartLegendRenderer,\n\tLineChartNumericKeys,\n\tLineChartTooltipRenderer,\n} from \"./line\";\nimport {\n\tapplyLeadColor,\n\ttype ChartSeriesDescriptor,\n\tresolveChartSeries,\n\ttype XYPoint,\n} from \"./series\";\n\nexport type BarChartProps<\n\tTData extends { x: string | number } = XYPoint,\n\tK extends LineChartNumericKeys<TData> & string = LineChartNumericKeys<TData> & string,\n> = {\n\t/**\n\t * Dataset array where each record requires an `x` category or time coordinate.\n\t * Any remaining fields with numeric, nullable, or optional number values are inferred as valid series keys.\n\t */\n\tdata: TData[];\n\t/**\n\t * Series descriptors identifying which numeric keys to plot.\n\t * Inferred strictly from numeric keys of `TData` (rejects non-numeric fields, `x`, and typos).\n\t */\n\tseries?: Array<ChartSeriesDescriptor<NoInfer<K>>>;\n\tariaLabel?: string;\n\tclassName?: string;\n\tshowAxes?: boolean;\n\tshowLegend?: boolean;\n\tcolor?: string;\n\t/**\n\t * Value formatter for Y-axis tick values and fallback tooltip values.\n\t */\n\tvalueFormatter?: (value: number) => string;\n\t/**\n\t * Formatter for X-axis category or time tick labels.\n\t */\n\txValueFormatter?: (value: string | number) => string;\n\t/**\n\t * Custom numerical or keyword bounds for the Y-axis.\n\t */\n\tyDomain?: LineChartAxisDomain;\n\t/**\n\t * Custom legend slot or render function receiving resolved series descriptors.\n\t */\n\tlegend?: ReactNode | LineChartLegendRenderer<K>;\n\t/**\n\t * Custom tooltip content renderer receiving Recharts payload, active status, and coordinate label.\n\t */\n\tcustomTooltip?: LineChartTooltipRenderer;\n\t/**\n\t * Textual summary describing key insights, highs, lows, and keyboard exploration instructions.\n\t * Associated with the chart via useId and aria-describedby.\n\t */\n\tsummary?: ReactNode;\n\t/**\n\t * Accessible tabular or structured data alternative rendered outside the plot area.\n\t */\n\tdataAlternative?: ReactNode;\n\t/**\n\t * Whether the interactive accessibility layer is enabled on the underlying Recharts graphic.\n\t * Enables keyboard exploration with Tab and arrow keys where supported by the underlying chart type.\n\t * Non-interactive compact or decorative charts without tooltip navigation should provide summary or dataAlternative.\n\t * @default true\n\t */\n\taccessibilityLayer?: boolean;\n};\n\nexport function BarChart<\n\tTData extends { x: string | number } = XYPoint,\n\tK extends LineChartNumericKeys<TData> & string = LineChartNumericKeys<TData> & string,\n>({\n\tdata,\n\tseries,\n\tariaLabel = \"Bar chart\",\n\tclassName,\n\tshowAxes = false,\n\tshowLegend = false,\n\tcolor,\n\tvalueFormatter,\n\txValueFormatter,\n\tyDomain,\n\tlegend,\n\tcustomTooltip,\n\tsummary,\n\tdataAlternative,\n\taccessibilityLayer,\n}: BarChartProps<TData, K>) {\n\tconst bars = applyLeadColor(resolveChartSeries(series, [\"y\" as K]), color);\n\tconst resolvedLegend =\n\t\tlegend !== undefined ? (\n\t\t\ttypeof legend === \"function\" ? (\n\t\t\t\tlegend({ items: bars })\n\t\t\t) : (\n\t\t\t\tlegend\n\t\t\t)\n\t\t) : showLegend ? (\n\t\t\t<ChartLegend items={bars} shape=\"bar\" />\n\t\t) : undefined;\n\n\treturn (\n\t\t<ChartShell\n\t\t\tariaLabel={ariaLabel}\n\t\t\tclassName={className}\n\t\t\tlegend={resolvedLegend}\n\t\t\tsummary={summary}\n\t\t\tdataAlternative={dataAlternative}\n\t\t\taccessibilityLayer={accessibilityLayer}\n\t\t>\n\t\t\t<RechartsBar data={data} margin={showAxes ? CHART_PLOT_MARGIN : CHART_PLOT_MARGIN_BARE}>\n\t\t\t\t{showAxes ? <CartesianGrid {...GRID_PROPS} /> : null}\n\t\t\t\t<XAxis dataKey=\"x\" {...cartesianAxisProps(!showAxes)} tickFormatter={xValueFormatter} />\n\t\t\t\t<YAxis\n\t\t\t\t\t{...cartesianAxisProps(!showAxes)}\n\t\t\t\t\ttickFormatter={valueFormatter}\n\t\t\t\t\t{...(yDomain ? { domain: yDomain as [number, number] } : {})}\n\t\t\t\t/>\n\t\t\t\t<Tooltip\n\t\t\t\t\t{...chartTooltipProps({\n\t\t\t\t\t\tformatter: valueFormatter,\n\t\t\t\t\t\tcursor: \"bar\",\n\t\t\t\t\t\tcustomTooltip,\n\t\t\t\t\t})}\n\t\t\t\t/>\n\t\t\t\t{bars.map((item, index) => (\n\t\t\t\t\t<Bar\n\t\t\t\t\t\tkey={item.key}\n\t\t\t\t\t\tdataKey={item.key}\n\t\t\t\t\t\tname={item.label ?? item.key}\n\t\t\t\t\t\tfill={seriesColor(item, index)}\n\t\t\t\t\t\tradius={BAR_RADIUS.vertical}\n\t\t\t\t\t\t{...ANIMATION_PROPS}\n\t\t\t\t\t/>\n\t\t\t\t))}\n\t\t\t</RechartsBar>\n\t\t</ChartShell>\n\t);\n}\n"],"mappings":";;;;;;;;AAoFA,SAAgBE,EAGd,EACD,SACA,WACA,eAAY,aACZ,cACA,cAAW,IACX,gBAAa,IACb,UACA,mBACA,oBACA,YACA,WACA,kBACA,YACA,oBACA,yBAC2B;CAC3B,IAAMC,IAAOC,EAAeC,EAAmBC,GAAQ,CAAC,GAAQ,CAAC,GAAGC,CAAK,GACnEC,IACLC,MAAW,KAAA,IAMPC,IACH,kBAACC,GAAD;EAAa,OAAOR;EAAM,OAAM;CAAO,CAAA,IACpC,KAAA,IAPH,OAAOM,KAAW,aACjBA,EAAO,EAAE,OAAON,EAAK,CAAC,IAEtBM;CAMH,OACC,kBAACG,GAAD;EACY;EACA;EACX,QAAQJ;EACC;EACQ;EACG;EAEpB,UAAA,kBAACR,GAAD;GAAmB;GAAM,QAAQa,IAAWC,IAAoBC;GAAhE,UAAA;IACEF,IAAW,kBAACG,GAAD,EAAe,GAAIC,EAAa,CAAA,IAAI;IAChD,kBAACC,GAAD;KAAO,SAAQ;KAAI,GAAIC,EAAmB,CAACN,CAAQ;KAAG,eAAeO;IAAkB,CAAA;IACvF,kBAACC,GAAD;KACC,GAAIF,EAAmB,CAACN,CAAQ;KAChC,eAAeS;KACf,GAAKC,IAAU,EAAE,QAAQA,EAA4B,IAAI,CAAC;IAC1D,CAAA;IACD,kBAACC,GAAD,EACC,GAAIC,EAAkB;KACrB,WAAWH;KACX,QAAQ;KACR;IACD,CAAC,EACD,CAAA;IACAnB,EAAK,KAAK,GAAM,MAChB,kBAACuB,GAAD;KAEC,SAASC,EAAK;KACd,MAAMA,EAAK,SAASA,EAAK;KACzB,MAAMC,EAAYD,GAAME,CAAK;KAC7B,QAAQC,EAAW;KACnB,GAAIC;IACJ,GANKJ,EAAK,GAMV,CACD;GACW;;CACF,CAAA;AAEd"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bullet.js","names":[],"sources":["../../src/charts/bullet.tsx"],"sourcesContent":["import type { ReactNode } from \"react\";\nimport { Bar, BarChart as RechartsBar, Tooltip, XAxis, YAxis } from \"recharts\";\nimport { ANIMATION_PROPS, cartesianAxisProps, chartTooltipProps, seriesColor } from \"./config\";\nimport { ChartFrame } from \"./frame\";\nimport { type BulletPoint, type BulletSeriesDescriptor, resolveChartSeries } from \"./series\";\n\nexport type BulletChartProps = {\n\tdata: BulletPoint[];\n\tseries?: BulletSeriesDescriptor[];\n\tariaLabel?: string;\n\tclassName?: string;\n\tshowAxes?: boolean;\n\tvalueFormatter?: (value: number) => string;\n\t/**\n\t * Textual summary describing key insights, highs, lows, and keyboard exploration instructions.\n\t * Associated with the chart via useId and aria-describedby.\n\t */\n\tsummary?: ReactNode;\n\t/**\n\t * Accessible tabular or structured data alternative rendered outside the plot area.\n\t */\n\tdataAlternative?: ReactNode;\n\t/**\n\t * Whether the interactive accessibility layer is enabled on the underlying Recharts graphic.\n\t * Enables keyboard exploration with Tab and arrow keys where supported by the underlying chart type.\n\t * Non-interactive compact or decorative charts without tooltip navigation should provide summary or dataAlternative.\n\t * @default true\n\t */\n\taccessibilityLayer?: boolean;\n};\n\nexport function BulletChart({\n\tdata,\n\tseries,\n\tariaLabel = \"Bullet chart\",\n\tclassName,\n\tshowAxes = true,\n\tvalueFormatter,\n\tsummary,\n\tdataAlternative,\n\taccessibilityLayer,\n}: BulletChartProps) {\n\tconst bars = resolveChartSeries(series, [\"target\", \"value\"]);\n\treturn (\n\t\t<ChartFrame\n\t\t\tariaLabel={ariaLabel}\n\t\t\tclassName={className}\n\t\t\tsummary={summary}\n\t\t\tdataAlternative={dataAlternative}\n\t\t\taccessibilityLayer={accessibilityLayer}\n\t\t>\n\t\t\t<RechartsBar data={data} layout=\"vertical\">\n\t\t\t\t<XAxis type=\"number\" {...cartesianAxisProps(!showAxes)} tickFormatter={valueFormatter} />\n\t\t\t\t<YAxis type=\"category\" dataKey=\"name\" {...cartesianAxisProps(!showAxes)} />\n\t\t\t\t<Tooltip {...chartTooltipProps({ formatter: valueFormatter, cursor: \"bar\" })} />\n\t\t\t\t{bars.map((item) => (\n\t\t\t\t\t<Bar\n\t\t\t\t\t\tkey={item.key}\n\t\t\t\t\t\tdataKey={item.key}\n\t\t\t\t\t\tname={item.label ?? item.key}\n\t\t\t\t\t\tfill={seriesColor(item, item.key === \"target\" ? 6 : 1)}\n\t\t\t\t\t\tbarSize={item.key === \"target\" ? 10 : 6}\n\t\t\t\t\t\t{...ANIMATION_PROPS}\n\t\t\t\t\t/>\n\t\t\t\t))}\n\t\t\t</RechartsBar>\n\t\t</ChartFrame>\n\t);\n}\n"],"mappings":";;;;;;;AA+BA,
|
|
1
|
+
{"version":3,"file":"bullet.js","names":["RechartsBar","BulletChart","bars","resolveChartSeries","series","ChartFrame","BarChart","XAxis","cartesianAxisProps","showAxes","valueFormatter","YAxis","Tooltip","chartTooltipProps","Bar","item","seriesColor","ANIMATION_PROPS"],"sources":["../../src/charts/bullet.tsx"],"sourcesContent":["import type { ReactNode } from \"react\";\nimport { Bar, BarChart as RechartsBar, Tooltip, XAxis, YAxis } from \"recharts\";\nimport { ANIMATION_PROPS, cartesianAxisProps, chartTooltipProps, seriesColor } from \"./config\";\nimport { ChartFrame } from \"./frame\";\nimport { type BulletPoint, type BulletSeriesDescriptor, resolveChartSeries } from \"./series\";\n\nexport type BulletChartProps = {\n\tdata: BulletPoint[];\n\tseries?: BulletSeriesDescriptor[];\n\tariaLabel?: string;\n\tclassName?: string;\n\tshowAxes?: boolean;\n\tvalueFormatter?: (value: number) => string;\n\t/**\n\t * Textual summary describing key insights, highs, lows, and keyboard exploration instructions.\n\t * Associated with the chart via useId and aria-describedby.\n\t */\n\tsummary?: ReactNode;\n\t/**\n\t * Accessible tabular or structured data alternative rendered outside the plot area.\n\t */\n\tdataAlternative?: ReactNode;\n\t/**\n\t * Whether the interactive accessibility layer is enabled on the underlying Recharts graphic.\n\t * Enables keyboard exploration with Tab and arrow keys where supported by the underlying chart type.\n\t * Non-interactive compact or decorative charts without tooltip navigation should provide summary or dataAlternative.\n\t * @default true\n\t */\n\taccessibilityLayer?: boolean;\n};\n\nexport function BulletChart({\n\tdata,\n\tseries,\n\tariaLabel = \"Bullet chart\",\n\tclassName,\n\tshowAxes = true,\n\tvalueFormatter,\n\tsummary,\n\tdataAlternative,\n\taccessibilityLayer,\n}: BulletChartProps) {\n\tconst bars = resolveChartSeries(series, [\"target\", \"value\"]);\n\treturn (\n\t\t<ChartFrame\n\t\t\tariaLabel={ariaLabel}\n\t\t\tclassName={className}\n\t\t\tsummary={summary}\n\t\t\tdataAlternative={dataAlternative}\n\t\t\taccessibilityLayer={accessibilityLayer}\n\t\t>\n\t\t\t<RechartsBar data={data} layout=\"vertical\">\n\t\t\t\t<XAxis type=\"number\" {...cartesianAxisProps(!showAxes)} tickFormatter={valueFormatter} />\n\t\t\t\t<YAxis type=\"category\" dataKey=\"name\" {...cartesianAxisProps(!showAxes)} />\n\t\t\t\t<Tooltip {...chartTooltipProps({ formatter: valueFormatter, cursor: \"bar\" })} />\n\t\t\t\t{bars.map((item) => (\n\t\t\t\t\t<Bar\n\t\t\t\t\t\tkey={item.key}\n\t\t\t\t\t\tdataKey={item.key}\n\t\t\t\t\t\tname={item.label ?? item.key}\n\t\t\t\t\t\tfill={seriesColor(item, item.key === \"target\" ? 6 : 1)}\n\t\t\t\t\t\tbarSize={item.key === \"target\" ? 10 : 6}\n\t\t\t\t\t\t{...ANIMATION_PROPS}\n\t\t\t\t\t/>\n\t\t\t\t))}\n\t\t\t</RechartsBar>\n\t\t</ChartFrame>\n\t);\n}\n"],"mappings":";;;;;;;AA+BA,SAAgBC,EAAY,EAC3B,SACA,WACA,eAAY,gBACZ,cACA,cAAW,IACX,mBACA,YACA,oBACA,yBACoB;CACpB,IAAMC,IAAOC,EAAmBC,GAAQ,CAAC,UAAU,OAAO,CAAC;CAC3D,OACC,kBAACC,GAAD;EACY;EACA;EACF;EACQ;EACG;EAEpB,UAAA,kBAACL,GAAD;GAAmB;GAAM,QAAO;GAAhC,UAAA;IACC,kBAACO,GAAD;KAAO,MAAK;KAAS,GAAIC,EAAmB,CAACC,CAAQ;KAAG,eAAeC;IAAiB,CAAA;IACxF,kBAACC,GAAD;KAAO,MAAK;KAAW,SAAQ;KAAO,GAAIH,EAAmB,CAACC,CAAQ;IAAI,CAAA;IAC1E,kBAACG,GAAD,EAAS,GAAIC,EAAkB;KAAE,WAAWH;KAAgB,QAAQ;IAAM,CAAC,EAAI,CAAA;IAC9ER,EAAK,KAAK,MACV,kBAACY,GAAD;KAEC,SAASC,EAAK;KACd,MAAMA,EAAK,SAASA,EAAK;KACzB,MAAMC,EAAYD,GAAMA,EAAK,QAAQ,WAAW,IAAI,CAAC;KACrD,SAASA,EAAK,QAAQ,WAAW,KAAK;KACtC,GAAIE;IACJ,GANKF,EAAK,GAMV,CACD;GACW;;CACF,CAAA;AAEd"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"charts.js","names":[],"sources":["../../src/charts/charts.tsx"],"sourcesContent":["import type { ReactNode } from \"react\";\nimport {\n\tLineChart,\n\ttype LineChartAxisDomain,\n\ttype LineChartLegendRenderer,\n\ttype LineChartNumericKeys,\n\ttype LineChartTooltipRenderer,\n} from \"./line\";\nimport type { ChartSeriesDescriptor, XYPoint } from \"./series\";\n\nexport type ChartsProps<\n\tTData extends { x: string | number } = XYPoint,\n\tK extends LineChartNumericKeys<TData> & string = LineChartNumericKeys<TData> & string,\n> = {\n\t/**\n\t * Dataset array where each record requires an `x` category or time coordinate.\n\t * Any remaining fields with numeric, nullable, or optional number values are inferred as valid series keys.\n\t */\n\tdata: TData[];\n\t/**\n\t * Series descriptors identifying which numeric keys to plot.\n\t * Inferred strictly from numeric keys of `TData` (rejects non-numeric fields, `x`, and typos).\n\t */\n\tseries?: Array<ChartSeriesDescriptor<NoInfer<K>>>;\n\tariaLabel?: string;\n\tclassName?: string;\n\tshowAxes?: boolean;\n\tshowLegend?: boolean;\n\tcolor?: string;\n\t/**\n\t * Value formatter for Y-axis tick values and fallback tooltip values.\n\t */\n\tvalueFormatter?: (value: number) => string;\n\t/**\n\t * Formatter for X-axis category or time tick labels.\n\t */\n\txValueFormatter?: (value: string | number) => string;\n\t/**\n\t * Custom numerical or keyword bounds for the Y-axis.\n\t */\n\tyDomain?: LineChartAxisDomain;\n\t/**\n\t * Custom legend slot or render function receiving resolved series descriptors.\n\t */\n\tlegend?: ReactNode | LineChartLegendRenderer<K>;\n\t/**\n\t * Custom tooltip content renderer receiving Recharts payload, active status, and coordinate label.\n\t */\n\tcustomTooltip?: LineChartTooltipRenderer;\n\t/**\n\t * Textual summary describing key insights, highs, lows, and keyboard exploration instructions.\n\t * Associated with the chart via useId and aria-describedby.\n\t */\n\tsummary?: ReactNode;\n\t/**\n\t * Accessible tabular or structured data alternative rendered outside the plot area.\n\t */\n\tdataAlternative?: ReactNode;\n\t/**\n\t * Whether the interactive accessibility layer is enabled on the underlying Recharts graphic.\n\t * Enables keyboard exploration with Tab and arrow keys where supported by the underlying chart type.\n\t * Non-interactive compact or decorative charts without tooltip navigation should provide summary or dataAlternative.\n\t * @default true\n\t */\n\taccessibilityLayer?: boolean;\n};\n\nexport function Charts<\n\tTData extends { x: string | number } = XYPoint,\n\tK extends LineChartNumericKeys<TData> & string = LineChartNumericKeys<TData> & string,\n>({ ariaLabel = \"Charts\", ...props }: ChartsProps<TData, K>) {\n\treturn <LineChart<TData, K> ariaLabel={ariaLabel} {...props} />;\n}\n"],"mappings":";;;;AAmEA,
|
|
1
|
+
{"version":3,"file":"charts.js","names":["Charts","props","LineChart"],"sources":["../../src/charts/charts.tsx"],"sourcesContent":["import type { ReactNode } from \"react\";\nimport {\n\tLineChart,\n\ttype LineChartAxisDomain,\n\ttype LineChartLegendRenderer,\n\ttype LineChartNumericKeys,\n\ttype LineChartTooltipRenderer,\n} from \"./line\";\nimport type { ChartSeriesDescriptor, XYPoint } from \"./series\";\n\nexport type ChartsProps<\n\tTData extends { x: string | number } = XYPoint,\n\tK extends LineChartNumericKeys<TData> & string = LineChartNumericKeys<TData> & string,\n> = {\n\t/**\n\t * Dataset array where each record requires an `x` category or time coordinate.\n\t * Any remaining fields with numeric, nullable, or optional number values are inferred as valid series keys.\n\t */\n\tdata: TData[];\n\t/**\n\t * Series descriptors identifying which numeric keys to plot.\n\t * Inferred strictly from numeric keys of `TData` (rejects non-numeric fields, `x`, and typos).\n\t */\n\tseries?: Array<ChartSeriesDescriptor<NoInfer<K>>>;\n\tariaLabel?: string;\n\tclassName?: string;\n\tshowAxes?: boolean;\n\tshowLegend?: boolean;\n\tcolor?: string;\n\t/**\n\t * Value formatter for Y-axis tick values and fallback tooltip values.\n\t */\n\tvalueFormatter?: (value: number) => string;\n\t/**\n\t * Formatter for X-axis category or time tick labels.\n\t */\n\txValueFormatter?: (value: string | number) => string;\n\t/**\n\t * Custom numerical or keyword bounds for the Y-axis.\n\t */\n\tyDomain?: LineChartAxisDomain;\n\t/**\n\t * Custom legend slot or render function receiving resolved series descriptors.\n\t */\n\tlegend?: ReactNode | LineChartLegendRenderer<K>;\n\t/**\n\t * Custom tooltip content renderer receiving Recharts payload, active status, and coordinate label.\n\t */\n\tcustomTooltip?: LineChartTooltipRenderer;\n\t/**\n\t * Textual summary describing key insights, highs, lows, and keyboard exploration instructions.\n\t * Associated with the chart via useId and aria-describedby.\n\t */\n\tsummary?: ReactNode;\n\t/**\n\t * Accessible tabular or structured data alternative rendered outside the plot area.\n\t */\n\tdataAlternative?: ReactNode;\n\t/**\n\t * Whether the interactive accessibility layer is enabled on the underlying Recharts graphic.\n\t * Enables keyboard exploration with Tab and arrow keys where supported by the underlying chart type.\n\t * Non-interactive compact or decorative charts without tooltip navigation should provide summary or dataAlternative.\n\t * @default true\n\t */\n\taccessibilityLayer?: boolean;\n};\n\nexport function Charts<\n\tTData extends { x: string | number } = XYPoint,\n\tK extends LineChartNumericKeys<TData> & string = LineChartNumericKeys<TData> & string,\n>({ ariaLabel = \"Charts\", ...props }: ChartsProps<TData, K>) {\n\treturn <LineChart<TData, K> ariaLabel={ariaLabel} {...props} />;\n}\n"],"mappings":";;;;AAmEA,SAAgBA,EAGd,EAAE,eAAY,UAAU,GAAGC,KAAgC;CAC5D,OAAO,kBAACC,GAAD;EAAgC;EAAW,GAAID;CAAQ,CAAA;AAC/D"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.js","names":[],"sources":["../../src/charts/config.ts"],"sourcesContent":["import { createElement, type ReactNode } from \"react\";\nimport { CHART_COLORS, chartAxis, withAlpha } from \"./palette\";\nimport type { ChartSeriesDescriptor } from \"./series\";\nimport { ChartTooltipContent, type ChartTooltipItem } from \"./tooltip\";\n\nexport type { ChartSeriesDescriptor } from \"./series\";\n\nexport type ChartTypeFace = \"axis\" | \"legend\" | \"tooltipTitle\" | \"tooltipBody\";\n\nexport const CHART_TYPE = {\n\taxisFontSize: 11,\n\tlegendFontSize: 12,\n\ttooltipTitleSize: 12,\n\ttooltipBodySize: 12,\n\ttooltipDot: 8,\n\tstrokeWidth: 2,\n\tgridDash: \"3 3\",\n\tgridOpacity: 0.15,\n\tareaFillAlpha: 0.2,\n} as const;\n\nexport function chartFontSize(face: ChartTypeFace): number {\n\tif (face === \"legend\") {\n\t\treturn CHART_TYPE.legendFontSize;\n\t}\n\tif (face === \"tooltipTitle\") {\n\t\treturn CHART_TYPE.tooltipTitleSize;\n\t}\n\tif (face === \"tooltipBody\") {\n\t\treturn CHART_TYPE.tooltipBodySize;\n\t}\n\treturn CHART_TYPE.axisFontSize;\n}\n\nexport function chartTextStyle(face: ChartTypeFace): { fontSize: number } {\n\treturn { fontSize: chartFontSize(face) };\n}\n\nexport function chartTickStyle(face: ChartTypeFace = \"axis\"): {\n\tfontSize: number;\n\tfill: string;\n} {\n\treturn { fontSize: chartFontSize(face), fill: chartAxis };\n}\n\nexport function getChartColor(index: number): string {\n\treturn CHART_COLORS[index % CHART_COLORS.length] ?? CHART_COLORS[0];\n}\n\nexport const AXIS_CONFIG = {\n\tget tick() {\n\t\treturn chartTickStyle(\"axis\");\n\t},\n\taxisLine: false as const,\n\ttickLine: false as const,\n};\n\nexport function cartesianAxisProps(hidden = false) {\n\treturn { hide: hidden, ...AXIS_CONFIG };\n}\n\nexport const GRID_PROPS = {\n\tvertical: false as const,\n\tstroke: chartAxis,\n\tstrokeOpacity: CHART_TYPE.gridOpacity,\n\tstrokeDasharray: CHART_TYPE.gridDash,\n};\n\nexport const BAR_RADIUS = {\n\thorizontal: [0, 4, 4, 0] as [number, number, number, number],\n\tvertical: [4, 4, 0, 0] as [number, number, number, number],\n};\n\nexport const ANIMATION_PROPS = {\n\tisAnimationActive: false,\n};\n\nexport const CHART_TOOLTIP_CURSOR_LINE = {\n\tstroke: chartAxis,\n\tstrokeOpacity: 0.35,\n\tstrokeWidth: 1,\n} as const;\n\nexport const CHART_TOOLTIP_CURSOR_BAR = {\n\tfill: withAlpha(\"foreground\", 0.06),\n\tstroke: \"none\",\n} as const;\n\nexport function chartTooltipContentStyle(): {\n\tbackground: string;\n\tborder: string;\n\tborderRadius: string;\n\tboxShadow: string;\n\tfontSize: number;\n\tcolor: string;\n\tpadding: string;\n} {\n\treturn {\n\t\tbackground: \"transparent\",\n\t\tborder: \"none\",\n\t\tborderRadius: \"0\",\n\t\tboxShadow: \"none\",\n\t\tfontSize: chartFontSize(\"tooltipBody\"),\n\t\tcolor: \"hsl(var(--basalt-foreground))\",\n\t\tpadding: \"0\",\n\t};\n}\n\nexport function chartTooltipProps(options?: {\n\tformatter?: (value: number) => string;\n\tcursor?: \"bar\" | \"line\" | false;\n\tcustomTooltip?: (props: {\n\t\tactive?: boolean;\n\t\tpayload?: readonly ChartTooltipItem[];\n\t\tlabel?: string | number;\n\t}) => ReactNode;\n}) {\n\tconst cursor =\n\t\toptions?.cursor === false\n\t\t\t? false\n\t\t\t: options?.cursor === \"line\"\n\t\t\t\t? CHART_TOOLTIP_CURSOR_LINE\n\t\t\t\t: CHART_TOOLTIP_CURSOR_BAR;\n\treturn {\n\t\tisAnimationActive: false,\n\t\tanimationDuration: 0,\n\t\toffset: 12,\n\t\tallowEscapeViewBox: { x: false, y: false },\n\t\tcursor,\n\t\twrapperStyle: {\n\t\t\toutline: \"none\",\n\t\t\tzIndex: 40,\n\t\t\tpointerEvents: \"none\" as const,\n\t\t\ttransition: \"none\",\n\t\t\tanimation: \"none\",\n\t\t},\n\t\tcontentStyle: chartTooltipContentStyle(),\n\t\tcontent: ((props: {\n\t\t\tactive?: boolean;\n\t\t\tpayload?: readonly ChartTooltipItem[];\n\t\t\tlabel?: unknown;\n\t\t}) => {\n\t\t\tif (options?.customTooltip) {\n\t\t\t\treturn options.customTooltip({\n\t\t\t\t\tactive: props.active,\n\t\t\t\t\tpayload: props.payload,\n\t\t\t\t\tlabel: props.label as string | number | undefined,\n\t\t\t\t});\n\t\t\t}\n\t\t\treturn createElement(ChartTooltipContent, {\n\t\t\t\tactive: props.active,\n\t\t\t\tpayload: props.payload,\n\t\t\t\tlabel: props.label as string | number | undefined,\n\t\t\t\tformatter: options?.formatter,\n\t\t\t});\n\t\t}) as never,\n\t};\n}\n\nexport function seriesColor(\n\tseries: ChartSeriesDescriptor | undefined,\n\tindex: number,\n): string | undefined {\n\treturn series?.color ?? CHART_COLORS[index % CHART_COLORS.length];\n}\n\nexport const RESPONSIVE_CONTAINER_PROPS = {\n\twidth: \"100%\" as const,\n\theight: \"100%\" as const,\n\tminWidth: 0,\n\tminHeight: 0,\n\tdebounce: 150,\n};\n\nexport const CHART_PLOT_MARGIN = {\n\ttop: 4,\n\tright: 4,\n\tbottom: 0,\n\tleft: 0,\n} as const;\n\nexport const CHART_PLOT_MARGIN_BARE = {\n\ttop: 2,\n\tright: 2,\n\tbottom: 2,\n\tleft: 2,\n} as const;\n"],"mappings":";;;;;AASA,
|
|
1
|
+
{"version":3,"file":"config.js","names":["CHART_TYPE","chartFontSize","face","chartTextStyle","chartTickStyle","chartAxis","getChartColor","CHART_COLORS","index","AXIS_CONFIG","cartesianAxisProps","hidden","GRID_PROPS","BAR_RADIUS","ANIMATION_PROPS","CHART_TOOLTIP_CURSOR_LINE","CHART_TOOLTIP_CURSOR_BAR","withAlpha","chartTooltipContentStyle","chartTooltipProps","options","props","createElement","ChartTooltipContent","seriesColor","series","RESPONSIVE_CONTAINER_PROPS","CHART_PLOT_MARGIN","CHART_PLOT_MARGIN_BARE"],"sources":["../../src/charts/config.ts"],"sourcesContent":["import { createElement, type ReactNode } from \"react\";\nimport { CHART_COLORS, chartAxis, withAlpha } from \"./palette\";\nimport type { ChartSeriesDescriptor } from \"./series\";\nimport { ChartTooltipContent, type ChartTooltipItem } from \"./tooltip\";\n\nexport type { ChartSeriesDescriptor } from \"./series\";\n\nexport type ChartTypeFace = \"axis\" | \"legend\" | \"tooltipTitle\" | \"tooltipBody\";\n\nexport const CHART_TYPE = {\n\taxisFontSize: 11,\n\tlegendFontSize: 12,\n\ttooltipTitleSize: 12,\n\ttooltipBodySize: 12,\n\ttooltipDot: 8,\n\tstrokeWidth: 2,\n\tgridDash: \"3 3\",\n\tgridOpacity: 0.15,\n\tareaFillAlpha: 0.2,\n} as const;\n\nexport function chartFontSize(face: ChartTypeFace): number {\n\tif (face === \"legend\") {\n\t\treturn CHART_TYPE.legendFontSize;\n\t}\n\tif (face === \"tooltipTitle\") {\n\t\treturn CHART_TYPE.tooltipTitleSize;\n\t}\n\tif (face === \"tooltipBody\") {\n\t\treturn CHART_TYPE.tooltipBodySize;\n\t}\n\treturn CHART_TYPE.axisFontSize;\n}\n\nexport function chartTextStyle(face: ChartTypeFace): { fontSize: number } {\n\treturn { fontSize: chartFontSize(face) };\n}\n\nexport function chartTickStyle(face: ChartTypeFace = \"axis\"): {\n\tfontSize: number;\n\tfill: string;\n} {\n\treturn { fontSize: chartFontSize(face), fill: chartAxis };\n}\n\nexport function getChartColor(index: number): string {\n\treturn CHART_COLORS[index % CHART_COLORS.length] ?? CHART_COLORS[0];\n}\n\nexport const AXIS_CONFIG = {\n\tget tick() {\n\t\treturn chartTickStyle(\"axis\");\n\t},\n\taxisLine: false as const,\n\ttickLine: false as const,\n};\n\nexport function cartesianAxisProps(hidden = false) {\n\treturn { hide: hidden, ...AXIS_CONFIG };\n}\n\nexport const GRID_PROPS = {\n\tvertical: false as const,\n\tstroke: chartAxis,\n\tstrokeOpacity: CHART_TYPE.gridOpacity,\n\tstrokeDasharray: CHART_TYPE.gridDash,\n};\n\nexport const BAR_RADIUS = {\n\thorizontal: [0, 4, 4, 0] as [number, number, number, number],\n\tvertical: [4, 4, 0, 0] as [number, number, number, number],\n};\n\nexport const ANIMATION_PROPS = {\n\tisAnimationActive: false,\n};\n\nexport const CHART_TOOLTIP_CURSOR_LINE = {\n\tstroke: chartAxis,\n\tstrokeOpacity: 0.35,\n\tstrokeWidth: 1,\n} as const;\n\nexport const CHART_TOOLTIP_CURSOR_BAR = {\n\tfill: withAlpha(\"foreground\", 0.06),\n\tstroke: \"none\",\n} as const;\n\nexport function chartTooltipContentStyle(): {\n\tbackground: string;\n\tborder: string;\n\tborderRadius: string;\n\tboxShadow: string;\n\tfontSize: number;\n\tcolor: string;\n\tpadding: string;\n} {\n\treturn {\n\t\tbackground: \"transparent\",\n\t\tborder: \"none\",\n\t\tborderRadius: \"0\",\n\t\tboxShadow: \"none\",\n\t\tfontSize: chartFontSize(\"tooltipBody\"),\n\t\tcolor: \"hsl(var(--basalt-foreground))\",\n\t\tpadding: \"0\",\n\t};\n}\n\nexport function chartTooltipProps(options?: {\n\tformatter?: (value: number) => string;\n\tcursor?: \"bar\" | \"line\" | false;\n\tcustomTooltip?: (props: {\n\t\tactive?: boolean;\n\t\tpayload?: readonly ChartTooltipItem[];\n\t\tlabel?: string | number;\n\t}) => ReactNode;\n}) {\n\tconst cursor =\n\t\toptions?.cursor === false\n\t\t\t? false\n\t\t\t: options?.cursor === \"line\"\n\t\t\t\t? CHART_TOOLTIP_CURSOR_LINE\n\t\t\t\t: CHART_TOOLTIP_CURSOR_BAR;\n\treturn {\n\t\tisAnimationActive: false,\n\t\tanimationDuration: 0,\n\t\toffset: 12,\n\t\tallowEscapeViewBox: { x: false, y: false },\n\t\tcursor,\n\t\twrapperStyle: {\n\t\t\toutline: \"none\",\n\t\t\tzIndex: 40,\n\t\t\tpointerEvents: \"none\" as const,\n\t\t\ttransition: \"none\",\n\t\t\tanimation: \"none\",\n\t\t},\n\t\tcontentStyle: chartTooltipContentStyle(),\n\t\tcontent: ((props: {\n\t\t\tactive?: boolean;\n\t\t\tpayload?: readonly ChartTooltipItem[];\n\t\t\tlabel?: unknown;\n\t\t}) => {\n\t\t\tif (options?.customTooltip) {\n\t\t\t\treturn options.customTooltip({\n\t\t\t\t\tactive: props.active,\n\t\t\t\t\tpayload: props.payload,\n\t\t\t\t\tlabel: props.label as string | number | undefined,\n\t\t\t\t});\n\t\t\t}\n\t\t\treturn createElement(ChartTooltipContent, {\n\t\t\t\tactive: props.active,\n\t\t\t\tpayload: props.payload,\n\t\t\t\tlabel: props.label as string | number | undefined,\n\t\t\t\tformatter: options?.formatter,\n\t\t\t});\n\t\t}) as never,\n\t};\n}\n\nexport function seriesColor(\n\tseries: ChartSeriesDescriptor | undefined,\n\tindex: number,\n): string | undefined {\n\treturn series?.color ?? CHART_COLORS[index % CHART_COLORS.length];\n}\n\nexport const RESPONSIVE_CONTAINER_PROPS = {\n\twidth: \"100%\" as const,\n\theight: \"100%\" as const,\n\tminWidth: 0,\n\tminHeight: 0,\n\tdebounce: 150,\n};\n\nexport const CHART_PLOT_MARGIN = {\n\ttop: 4,\n\tright: 4,\n\tbottom: 0,\n\tleft: 0,\n} as const;\n\nexport const CHART_PLOT_MARGIN_BARE = {\n\ttop: 2,\n\tright: 2,\n\tbottom: 2,\n\tleft: 2,\n} as const;\n"],"mappings":";;;;;AASA,IAAaA,IAAa;CACzB,cAAc;CACd,gBAAgB;CAChB,kBAAkB;CAClB,iBAAiB;CACjB,YAAY;CACZ,aAAa;CACb,UAAU;CACV,aAAa;CACb,eAAe;AAChB;AAEA,SAAgBC,EAAc,GAA6B;CAU1D,OATIC,MAAS,WACLF,EAAW,iBAEfE,MAAS,iBACLF,EAAW,mBAEfE,MAAS,gBACLF,EAAW,kBAEZA,EAAW;AACnB;AAEA,SAAgBG,EAAe,GAA2C;CACzE,OAAO,EAAE,UAAUF,EAAcC,CAAI,EAAE;AACxC;AAEA,SAAgBE,EAAe,IAAsB,QAGnD;CACD,OAAO;EAAE,UAAUH,EAAcC,CAAI;EAAG,MAAMG;CAAU;AACzD;AAEA,SAAgBC,EAAc,GAAuB;CACpD,OAAOC,EAAaC,IAAQD,EAAa,WAAWA,EAAa;AAClE;AAEA,IAAaE,IAAc;CAC1B,IAAI,OAAO;EACV,OAAOL,EAAe,MAAM;CAC7B;CACA,UAAU;CACV,UAAU;AACX;AAEA,SAAgBM,EAAmB,IAAS,IAAO;CAClD,OAAO;EAAE,MAAMC;EAAQ,GAAGF;CAAY;AACvC;AAEA,IAAaG,IAAa;CACzB,UAAU;CACV,QAAQP;CACR,eAAeL,EAAW;CAC1B,iBAAiBA,EAAW;AAC7B,GAEaa,IAAa;CACzB,YAAY;EAAC;EAAG;EAAG;EAAG;CAAC;CACvB,UAAU;EAAC;EAAG;EAAG;EAAG;CAAC;AACtB,GAEaC,IAAkB,EAC9B,mBAAmB,GACpB,GAEaC,IAA4B;CACxC,QAAQV;CACR,eAAe;CACf,aAAa;AACd,GAEaW,IAA2B;CACvC,MAAMC,EAAU,cAAc,GAAI;CAClC,QAAQ;AACT;AAEA,SAAgBC,IAQd;CACD,OAAO;EACN,YAAY;EACZ,QAAQ;EACR,cAAc;EACd,WAAW;EACX,UAAUjB,EAAc,aAAa;EACrC,OAAO;EACP,SAAS;CACV;AACD;AAEA,SAAgBkB,EAAkB,GAQ/B;CAOF,OAAO;EACN,mBAAmB;EACnB,mBAAmB;EACnB,QAAQ;EACR,oBAAoB;GAAE,GAAG;GAAO,GAAG;EAAM;EACzC,QAVAC,GAAS,WAAW,KACjB,KACAA,GAAS,WAAW,SACnBL,IACAC;EAOJ,cAAc;GACb,SAAS;GACT,QAAQ;GACR,eAAe;GACf,YAAY;GACZ,WAAW;EACZ;EACA,cAAcE,EAAyB;EACvC,WAAW,MAKNE,GAAS,gBACLA,EAAQ,cAAc;GAC5B,QAAQC,EAAM;GACd,SAASA,EAAM;GACf,OAAOA,EAAM;EACd,CAAC,IAEKC,EAAcC,GAAqB;GACzC,QAAQF,EAAM;GACd,SAASA,EAAM;GACf,OAAOA,EAAM;GACb,WAAWD,GAAS;EACrB,CAAC;CAEH;AACD;AAEA,SAAgBI,EACf,GACA,GACqB;CACrB,OAAOC,GAAQ,SAASlB,EAAaC,IAAQD,EAAa;AAC3D;AAEA,IAAamB,IAA6B;CACzC,OAAO;CACP,QAAQ;CACR,UAAU;CACV,WAAW;CACX,UAAU;AACX,GAEaC,IAAoB;CAChC,KAAK;CACL,OAAO;CACP,QAAQ;CACR,MAAM;AACP,GAEaC,IAAyB;CACrC,KAAK;CACL,OAAO;CACP,QAAQ;CACR,MAAM;AACP"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"custom-chart.js","names":[],"sources":["../../src/charts/custom-chart.tsx"],"sourcesContent":["import type { ReactNode } from \"react\";\nimport {\n\tLineChart,\n\ttype LineChartAxisDomain,\n\ttype LineChartLegendRenderer,\n\ttype LineChartNumericKeys,\n\ttype LineChartTooltipRenderer,\n} from \"./line\";\nimport type { ChartSeriesDescriptor, XYPoint } from \"./series\";\n\nexport type CustomChartProps<\n\tTData extends { x: string | number } = XYPoint,\n\tK extends LineChartNumericKeys<TData> & string = LineChartNumericKeys<TData> & string,\n> = {\n\t/**\n\t * Dataset array where each record requires an `x` category or time coordinate.\n\t * Any remaining fields with numeric, nullable, or optional number values are inferred as valid series keys.\n\t */\n\tdata: TData[];\n\t/**\n\t * Series descriptors identifying which numeric keys to plot.\n\t * Inferred strictly from numeric keys of `TData` (rejects non-numeric fields, `x`, and typos).\n\t */\n\tseries?: Array<ChartSeriesDescriptor<NoInfer<K>>>;\n\tariaLabel?: string;\n\tclassName?: string;\n\tshowAxes?: boolean;\n\tshowLegend?: boolean;\n\tcolor?: string;\n\t/**\n\t * Value formatter for Y-axis tick values and fallback tooltip values.\n\t */\n\tvalueFormatter?: (value: number) => string;\n\t/**\n\t * Formatter for X-axis category or time tick labels.\n\t */\n\txValueFormatter?: (value: string | number) => string;\n\t/**\n\t * Custom numerical or keyword bounds for the Y-axis.\n\t */\n\tyDomain?: LineChartAxisDomain;\n\t/**\n\t * Custom legend slot or render function receiving resolved series descriptors.\n\t */\n\tlegend?: ReactNode | LineChartLegendRenderer<K>;\n\t/**\n\t * Custom tooltip content renderer receiving Recharts payload, active status, and coordinate label.\n\t */\n\tcustomTooltip?: LineChartTooltipRenderer;\n\t/**\n\t * Textual summary describing key insights, highs, lows, and keyboard exploration instructions.\n\t * Associated with the chart via useId and aria-describedby.\n\t */\n\tsummary?: ReactNode;\n\t/**\n\t * Accessible tabular or structured data alternative rendered outside the plot area.\n\t */\n\tdataAlternative?: ReactNode;\n\t/**\n\t * Whether the interactive accessibility layer is enabled on the underlying Recharts graphic.\n\t * Enables keyboard exploration with Tab and arrow keys where supported by the underlying chart type.\n\t * Non-interactive compact or decorative charts without tooltip navigation should provide summary or dataAlternative.\n\t * @default true\n\t */\n\taccessibilityLayer?: boolean;\n};\n\nexport function CustomChart<\n\tTData extends { x: string | number } = XYPoint,\n\tK extends LineChartNumericKeys<TData> & string = LineChartNumericKeys<TData> & string,\n>({ ariaLabel = \"Custom chart\", ...props }: CustomChartProps<TData, K>) {\n\treturn <LineChart<TData, K> ariaLabel={ariaLabel} {...props} />;\n}\n"],"mappings":";;;;AAmEA,
|
|
1
|
+
{"version":3,"file":"custom-chart.js","names":["CustomChart","props","LineChart"],"sources":["../../src/charts/custom-chart.tsx"],"sourcesContent":["import type { ReactNode } from \"react\";\nimport {\n\tLineChart,\n\ttype LineChartAxisDomain,\n\ttype LineChartLegendRenderer,\n\ttype LineChartNumericKeys,\n\ttype LineChartTooltipRenderer,\n} from \"./line\";\nimport type { ChartSeriesDescriptor, XYPoint } from \"./series\";\n\nexport type CustomChartProps<\n\tTData extends { x: string | number } = XYPoint,\n\tK extends LineChartNumericKeys<TData> & string = LineChartNumericKeys<TData> & string,\n> = {\n\t/**\n\t * Dataset array where each record requires an `x` category or time coordinate.\n\t * Any remaining fields with numeric, nullable, or optional number values are inferred as valid series keys.\n\t */\n\tdata: TData[];\n\t/**\n\t * Series descriptors identifying which numeric keys to plot.\n\t * Inferred strictly from numeric keys of `TData` (rejects non-numeric fields, `x`, and typos).\n\t */\n\tseries?: Array<ChartSeriesDescriptor<NoInfer<K>>>;\n\tariaLabel?: string;\n\tclassName?: string;\n\tshowAxes?: boolean;\n\tshowLegend?: boolean;\n\tcolor?: string;\n\t/**\n\t * Value formatter for Y-axis tick values and fallback tooltip values.\n\t */\n\tvalueFormatter?: (value: number) => string;\n\t/**\n\t * Formatter for X-axis category or time tick labels.\n\t */\n\txValueFormatter?: (value: string | number) => string;\n\t/**\n\t * Custom numerical or keyword bounds for the Y-axis.\n\t */\n\tyDomain?: LineChartAxisDomain;\n\t/**\n\t * Custom legend slot or render function receiving resolved series descriptors.\n\t */\n\tlegend?: ReactNode | LineChartLegendRenderer<K>;\n\t/**\n\t * Custom tooltip content renderer receiving Recharts payload, active status, and coordinate label.\n\t */\n\tcustomTooltip?: LineChartTooltipRenderer;\n\t/**\n\t * Textual summary describing key insights, highs, lows, and keyboard exploration instructions.\n\t * Associated with the chart via useId and aria-describedby.\n\t */\n\tsummary?: ReactNode;\n\t/**\n\t * Accessible tabular or structured data alternative rendered outside the plot area.\n\t */\n\tdataAlternative?: ReactNode;\n\t/**\n\t * Whether the interactive accessibility layer is enabled on the underlying Recharts graphic.\n\t * Enables keyboard exploration with Tab and arrow keys where supported by the underlying chart type.\n\t * Non-interactive compact or decorative charts without tooltip navigation should provide summary or dataAlternative.\n\t * @default true\n\t */\n\taccessibilityLayer?: boolean;\n};\n\nexport function CustomChart<\n\tTData extends { x: string | number } = XYPoint,\n\tK extends LineChartNumericKeys<TData> & string = LineChartNumericKeys<TData> & string,\n>({ ariaLabel = \"Custom chart\", ...props }: CustomChartProps<TData, K>) {\n\treturn <LineChart<TData, K> ariaLabel={ariaLabel} {...props} />;\n}\n"],"mappings":";;;;AAmEA,SAAgBA,EAGd,EAAE,eAAY,gBAAgB,GAAGC,KAAqC;CACvE,OAAO,kBAACC,GAAD;EAAgC;EAAW,GAAID;CAAQ,CAAA;AAC/D"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"date-navigation.js","names":[],"sources":["../../src/charts/date-navigation.tsx"],"sourcesContent":["import { Calendar as CalendarIcon, ChevronLeft, ChevronRight } from \"lucide-react\";\nimport { type ComponentProps, useState } from \"react\";\nimport { Button } from \"../components/button\";\nimport { DatePicker } from \"../components/date-picker\";\nimport { cn } from \"../utils/cn\";\n\nfunction shiftIso(value: string, delta: number) {\n\tconst match = /^(\\d{4,})-(\\d{2})-(\\d{2})$/.exec(value);\n\tconst date = match\n\t\t? new Date(Number(match[1]), Number(match[2]) - 1, Number(match[3]))\n\t\t: new Date();\n\tdate.setDate(date.getDate() + delta);\n\tconst year = date.getFullYear();\n\tconst month = String(date.getMonth() + 1).padStart(2, \"0\");\n\tconst day = String(date.getDate()).padStart(2, \"0\");\n\treturn `${year}-${month}-${day}`;\n}\n\nfunction civilInZone(date: Date, timeZone?: string) {\n\tconst parts = new Intl.DateTimeFormat(\"en-CA\", {\n\t\ttimeZone,\n\t\tyear: \"numeric\",\n\t\tmonth: \"2-digit\",\n\t\tday: \"2-digit\",\n\t}).formatToParts(date);\n\tconst read = (type: Intl.DateTimeFormatPartTypes) =>\n\t\tNumber(parts.find((part) => part.type === type)?.value);\n\treturn { y: read(\"year\"), m: read(\"month\"), d: read(\"day\") };\n}\n\nfunction isSameCivil(\n\tleft: { y: number; m: number; d: number },\n\tright: { y: number; m: number; d: number },\n) {\n\treturn left.y === right.y && left.m === right.m && left.d === right.d;\n}\n\ntype PickerProps = ComponentProps<typeof DatePicker> & {\n\tariaLabel?: string;\n\tselectedDate?: undefined;\n};\n\ntype DisplayProps = {\n\tselectedDate: Date;\n\tonPrevDay: () => void;\n\tonNextDay: () => void;\n\tonToday: () => void;\n\tonToggleCalendar?: () => void;\n\ttodayLabel?: string;\n\tpreviousDayLabel?: string;\n\tnextDayLabel?: string;\n\tformatDate?: (date: Date) => string;\n\tlocale?: string;\n\ttimeZone?: string;\n\tclassName?: string;\n};\n\nexport type DateNavigationPickerProps = {\n\tariaLabel?: string;\n\tclassName?: string;\n};\n\nexport type DateNavigationDisplayProps = DisplayProps;\n\nexport function DateNavigation(props: PickerProps | DisplayProps) {\n\tif (\"onPrevDay\" in props) {\n\t\treturn <DateNavigationDisplay {...props} />;\n\t}\n\treturn <DateNavigationPicker {...props} />;\n}\n\nfunction DateNavigationPicker({\n\tvalue,\n\tdefaultValue = \"\",\n\tonChange,\n\tdisabled,\n\tariaLabel,\n\t\"aria-label\": ariaLabelAttr,\n\t...props\n}: PickerProps) {\n\tconst [uncontrolled, setUncontrolled] = useState(value ?? defaultValue);\n\tconst selected = value ?? uncontrolled;\n\tfunction commit(next: string) {\n\t\tif (value === undefined) {\n\t\t\tsetUncontrolled(next);\n\t\t}\n\t\tonChange?.(next);\n\t}\n\treturn (\n\t\t<div className=\"inline-flex items-center gap-1\">\n\t\t\t<Button\n\t\t\t\tvariant=\"outline\"\n\t\t\t\tsize=\"icon\"\n\t\t\t\tdisabled={disabled}\n\t\t\t\taria-label=\"Previous day\"\n\t\t\t\tonClick={() => commit(shiftIso(selected, -1))}\n\t\t\t>\n\t\t\t\t<ChevronLeft />\n\t\t\t</Button>\n\t\t\t<DatePicker\n\t\t\t\t{...props}\n\t\t\t\tvalue={selected}\n\t\t\t\tdisabled={disabled}\n\t\t\t\tonChange={commit}\n\t\t\t\taria-label={ariaLabel ?? ariaLabelAttr ?? \"Date navigation\"}\n\t\t\t/>\n\t\t\t<Button\n\t\t\t\tvariant=\"outline\"\n\t\t\t\tsize=\"icon\"\n\t\t\t\tdisabled={disabled}\n\t\t\t\taria-label=\"Next day\"\n\t\t\t\tonClick={() => commit(shiftIso(selected, 1))}\n\t\t\t>\n\t\t\t\t<ChevronRight />\n\t\t\t</Button>\n\t\t</div>\n\t);\n}\n\nfunction DateNavigationDisplay({\n\tselectedDate,\n\tonPrevDay,\n\tonNextDay,\n\tonToday,\n\tonToggleCalendar,\n\ttodayLabel = \"Today\",\n\tpreviousDayLabel = \"Previous day\",\n\tnextDayLabel = \"Next day\",\n\tformatDate,\n\tlocale = \"en-US\",\n\ttimeZone,\n\tclassName,\n}: DisplayProps) {\n\tconst resolvedFormatDate =\n\t\tformatDate ??\n\t\t((date: Date) =>\n\t\t\tdate.toLocaleDateString(locale, {\n\t\t\t\tweekday: \"short\",\n\t\t\t\tyear: \"numeric\",\n\t\t\t\tmonth: \"short\",\n\t\t\t\tday: \"numeric\",\n\t\t\t\ttimeZone,\n\t\t\t}));\n\tconst isToday = isSameCivil(\n\t\tcivilInZone(selectedDate, timeZone),\n\t\tcivilInZone(new Date(), timeZone),\n\t);\n\tconst formatted = resolvedFormatDate(selectedDate);\n\treturn (\n\t\t<div className={cn(\"flex items-center justify-center gap-2\", className)}>\n\t\t\t<button\n\t\t\t\ttype=\"button\"\n\t\t\t\tonClick={onToday}\n\t\t\t\tdisabled={isToday}\n\t\t\t\tclassName={cn(\n\t\t\t\t\t\"mr-2 rounded-lg px-3 py-1.5 text-sm font-medium transition-colors\",\n\t\t\t\t\tisToday\n\t\t\t\t\t\t? \"cursor-not-allowed text-basalt-muted-foreground opacity-50\"\n\t\t\t\t\t\t: \"bg-basalt-secondary text-basalt-foreground hover:bg-basalt-accent\",\n\t\t\t\t)}\n\t\t\t>\n\t\t\t\t{todayLabel}\n\t\t\t</button>\n\t\t\t<button\n\t\t\t\ttype=\"button\"\n\t\t\t\tonClick={onPrevDay}\n\t\t\t\taria-label={previousDayLabel}\n\t\t\t\tclassName=\"flex h-8 w-8 items-center justify-center rounded-lg text-basalt-muted-foreground transition-colors hover:bg-basalt-accent hover:text-basalt-foreground\"\n\t\t\t>\n\t\t\t\t<ChevronLeft className=\"h-4 w-4\" strokeWidth={1.5} />\n\t\t\t</button>\n\t\t\t{onToggleCalendar ? (\n\t\t\t\t<button\n\t\t\t\t\ttype=\"button\"\n\t\t\t\t\tonClick={onToggleCalendar}\n\t\t\t\t\tclassName=\"flex cursor-pointer items-center gap-2 rounded-lg px-3 py-1.5 text-lg font-medium transition-colors hover:bg-basalt-accent\"\n\t\t\t\t>\n\t\t\t\t\t<span>{formatted}</span>\n\t\t\t\t\t<CalendarIcon className=\"h-4 w-4 text-basalt-muted-foreground\" strokeWidth={1.5} />\n\t\t\t\t</button>\n\t\t\t) : (\n\t\t\t\t<span className=\"flex items-center gap-2 rounded-lg px-3 py-1.5 text-lg font-medium\">\n\t\t\t\t\t{formatted}\n\t\t\t\t</span>\n\t\t\t)}\n\t\t\t<button\n\t\t\t\ttype=\"button\"\n\t\t\t\tonClick={onNextDay}\n\t\t\t\taria-label={nextDayLabel}\n\t\t\t\tclassName=\"flex h-8 w-8 items-center justify-center rounded-lg text-basalt-muted-foreground transition-colors hover:bg-basalt-accent hover:text-basalt-foreground\"\n\t\t\t>\n\t\t\t\t<ChevronRight className=\"h-4 w-4\" strokeWidth={1.5} />\n\t\t\t</button>\n\t\t</div>\n\t);\n}\n"],"mappings":";;;;;;;;AAMA,
|
|
1
|
+
{"version":3,"file":"date-navigation.js","names":["CalendarIcon","shiftIso","match","value","date","delta","civilInZone","parts","read","part","type","isSameCivil","left","right","DateNavigation","props","DateNavigationDisplay","DateNavigationPicker","ariaLabelAttr","uncontrolled","setUncontrolled","useState","defaultValue","selected","commit","next","onChange","Button","ChevronLeft","DatePicker","ariaLabel","ChevronRight","resolvedFormatDate","formatDate","locale","isToday","selectedDate","timeZone","formatted","cn","className","onToday","todayLabel","onPrevDay","previousDayLabel","onToggleCalendar","Calendar","onNextDay","nextDayLabel"],"sources":["../../src/charts/date-navigation.tsx"],"sourcesContent":["import { Calendar as CalendarIcon, ChevronLeft, ChevronRight } from \"lucide-react\";\nimport { type ComponentProps, useState } from \"react\";\nimport { Button } from \"../components/button\";\nimport { DatePicker } from \"../components/date-picker\";\nimport { cn } from \"../utils/cn\";\n\nfunction shiftIso(value: string, delta: number) {\n\tconst match = /^(\\d{4,})-(\\d{2})-(\\d{2})$/.exec(value);\n\tconst date = match\n\t\t? new Date(Number(match[1]), Number(match[2]) - 1, Number(match[3]))\n\t\t: new Date();\n\tdate.setDate(date.getDate() + delta);\n\tconst year = date.getFullYear();\n\tconst month = String(date.getMonth() + 1).padStart(2, \"0\");\n\tconst day = String(date.getDate()).padStart(2, \"0\");\n\treturn `${year}-${month}-${day}`;\n}\n\nfunction civilInZone(date: Date, timeZone?: string) {\n\tconst parts = new Intl.DateTimeFormat(\"en-CA\", {\n\t\ttimeZone,\n\t\tyear: \"numeric\",\n\t\tmonth: \"2-digit\",\n\t\tday: \"2-digit\",\n\t}).formatToParts(date);\n\tconst read = (type: Intl.DateTimeFormatPartTypes) =>\n\t\tNumber(parts.find((part) => part.type === type)?.value);\n\treturn { y: read(\"year\"), m: read(\"month\"), d: read(\"day\") };\n}\n\nfunction isSameCivil(\n\tleft: { y: number; m: number; d: number },\n\tright: { y: number; m: number; d: number },\n) {\n\treturn left.y === right.y && left.m === right.m && left.d === right.d;\n}\n\ntype PickerProps = ComponentProps<typeof DatePicker> & {\n\tariaLabel?: string;\n\tselectedDate?: undefined;\n};\n\ntype DisplayProps = {\n\tselectedDate: Date;\n\tonPrevDay: () => void;\n\tonNextDay: () => void;\n\tonToday: () => void;\n\tonToggleCalendar?: () => void;\n\ttodayLabel?: string;\n\tpreviousDayLabel?: string;\n\tnextDayLabel?: string;\n\tformatDate?: (date: Date) => string;\n\tlocale?: string;\n\ttimeZone?: string;\n\tclassName?: string;\n};\n\nexport type DateNavigationPickerProps = {\n\tariaLabel?: string;\n\tclassName?: string;\n};\n\nexport type DateNavigationDisplayProps = DisplayProps;\n\nexport function DateNavigation(props: PickerProps | DisplayProps) {\n\tif (\"onPrevDay\" in props) {\n\t\treturn <DateNavigationDisplay {...props} />;\n\t}\n\treturn <DateNavigationPicker {...props} />;\n}\n\nfunction DateNavigationPicker({\n\tvalue,\n\tdefaultValue = \"\",\n\tonChange,\n\tdisabled,\n\tariaLabel,\n\t\"aria-label\": ariaLabelAttr,\n\t...props\n}: PickerProps) {\n\tconst [uncontrolled, setUncontrolled] = useState(value ?? defaultValue);\n\tconst selected = value ?? uncontrolled;\n\tfunction commit(next: string) {\n\t\tif (value === undefined) {\n\t\t\tsetUncontrolled(next);\n\t\t}\n\t\tonChange?.(next);\n\t}\n\treturn (\n\t\t<div className=\"inline-flex items-center gap-1\">\n\t\t\t<Button\n\t\t\t\tvariant=\"outline\"\n\t\t\t\tsize=\"icon\"\n\t\t\t\tdisabled={disabled}\n\t\t\t\taria-label=\"Previous day\"\n\t\t\t\tonClick={() => commit(shiftIso(selected, -1))}\n\t\t\t>\n\t\t\t\t<ChevronLeft />\n\t\t\t</Button>\n\t\t\t<DatePicker\n\t\t\t\t{...props}\n\t\t\t\tvalue={selected}\n\t\t\t\tdisabled={disabled}\n\t\t\t\tonChange={commit}\n\t\t\t\taria-label={ariaLabel ?? ariaLabelAttr ?? \"Date navigation\"}\n\t\t\t/>\n\t\t\t<Button\n\t\t\t\tvariant=\"outline\"\n\t\t\t\tsize=\"icon\"\n\t\t\t\tdisabled={disabled}\n\t\t\t\taria-label=\"Next day\"\n\t\t\t\tonClick={() => commit(shiftIso(selected, 1))}\n\t\t\t>\n\t\t\t\t<ChevronRight />\n\t\t\t</Button>\n\t\t</div>\n\t);\n}\n\nfunction DateNavigationDisplay({\n\tselectedDate,\n\tonPrevDay,\n\tonNextDay,\n\tonToday,\n\tonToggleCalendar,\n\ttodayLabel = \"Today\",\n\tpreviousDayLabel = \"Previous day\",\n\tnextDayLabel = \"Next day\",\n\tformatDate,\n\tlocale = \"en-US\",\n\ttimeZone,\n\tclassName,\n}: DisplayProps) {\n\tconst resolvedFormatDate =\n\t\tformatDate ??\n\t\t((date: Date) =>\n\t\t\tdate.toLocaleDateString(locale, {\n\t\t\t\tweekday: \"short\",\n\t\t\t\tyear: \"numeric\",\n\t\t\t\tmonth: \"short\",\n\t\t\t\tday: \"numeric\",\n\t\t\t\ttimeZone,\n\t\t\t}));\n\tconst isToday = isSameCivil(\n\t\tcivilInZone(selectedDate, timeZone),\n\t\tcivilInZone(new Date(), timeZone),\n\t);\n\tconst formatted = resolvedFormatDate(selectedDate);\n\treturn (\n\t\t<div className={cn(\"flex items-center justify-center gap-2\", className)}>\n\t\t\t<button\n\t\t\t\ttype=\"button\"\n\t\t\t\tonClick={onToday}\n\t\t\t\tdisabled={isToday}\n\t\t\t\tclassName={cn(\n\t\t\t\t\t\"mr-2 rounded-lg px-3 py-1.5 text-sm font-medium transition-colors\",\n\t\t\t\t\tisToday\n\t\t\t\t\t\t? \"cursor-not-allowed text-basalt-muted-foreground opacity-50\"\n\t\t\t\t\t\t: \"bg-basalt-secondary text-basalt-foreground hover:bg-basalt-accent\",\n\t\t\t\t)}\n\t\t\t>\n\t\t\t\t{todayLabel}\n\t\t\t</button>\n\t\t\t<button\n\t\t\t\ttype=\"button\"\n\t\t\t\tonClick={onPrevDay}\n\t\t\t\taria-label={previousDayLabel}\n\t\t\t\tclassName=\"flex h-8 w-8 items-center justify-center rounded-lg text-basalt-muted-foreground transition-colors hover:bg-basalt-accent hover:text-basalt-foreground\"\n\t\t\t>\n\t\t\t\t<ChevronLeft className=\"h-4 w-4\" strokeWidth={1.5} />\n\t\t\t</button>\n\t\t\t{onToggleCalendar ? (\n\t\t\t\t<button\n\t\t\t\t\ttype=\"button\"\n\t\t\t\t\tonClick={onToggleCalendar}\n\t\t\t\t\tclassName=\"flex cursor-pointer items-center gap-2 rounded-lg px-3 py-1.5 text-lg font-medium transition-colors hover:bg-basalt-accent\"\n\t\t\t\t>\n\t\t\t\t\t<span>{formatted}</span>\n\t\t\t\t\t<CalendarIcon className=\"h-4 w-4 text-basalt-muted-foreground\" strokeWidth={1.5} />\n\t\t\t\t</button>\n\t\t\t) : (\n\t\t\t\t<span className=\"flex items-center gap-2 rounded-lg px-3 py-1.5 text-lg font-medium\">\n\t\t\t\t\t{formatted}\n\t\t\t\t</span>\n\t\t\t)}\n\t\t\t<button\n\t\t\t\ttype=\"button\"\n\t\t\t\tonClick={onNextDay}\n\t\t\t\taria-label={nextDayLabel}\n\t\t\t\tclassName=\"flex h-8 w-8 items-center justify-center rounded-lg text-basalt-muted-foreground transition-colors hover:bg-basalt-accent hover:text-basalt-foreground\"\n\t\t\t>\n\t\t\t\t<ChevronRight className=\"h-4 w-4\" strokeWidth={1.5} />\n\t\t\t</button>\n\t\t</div>\n\t);\n}\n"],"mappings":"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"}
|
package/dist/charts/donut.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"donut.js","names":[],"sources":["../../src/charts/donut.tsx"],"sourcesContent":["import type { ReactNode } from \"react\";\nimport { Cell, Pie, PieChart, Tooltip } from \"recharts\";\nimport { ANIMATION_PROPS, chartTooltipProps, seriesColor } from \"./config\";\nimport { ChartShell } from \"./frame\";\nimport { ChartLegend } from \"./legend\";\nimport type { ChartSeriesDescriptor, NamedValue } from \"./series\";\n\nexport type DonutChartProps = {\n\tdata: NamedValue[];\n\tseries?: ChartSeriesDescriptor[];\n\tariaLabel?: string;\n\tclassName?: string;\n\tshowLegend?: boolean;\n\tvalueFormatter?: (value: number) => string;\n\t/**\n\t * Textual summary describing key insights, highs, lows, and keyboard exploration instructions.\n\t * Associated with the chart via useId and aria-describedby.\n\t */\n\tsummary?: ReactNode;\n\t/**\n\t * Accessible tabular or structured data alternative rendered outside the plot area.\n\t */\n\tdataAlternative?: ReactNode;\n\t/**\n\t * Whether the interactive accessibility layer is enabled on the underlying Recharts graphic.\n\t * Enables keyboard exploration with Tab and arrow keys where supported by the underlying chart type.\n\t * Non-interactive compact or decorative charts without tooltip navigation should provide summary or dataAlternative.\n\t * @default true\n\t */\n\taccessibilityLayer?: boolean;\n};\n\nexport function DonutChart({\n\tdata,\n\tseries,\n\tariaLabel = \"Donut chart\",\n\tclassName,\n\tshowLegend = false,\n\tvalueFormatter,\n\tsummary,\n\tdataAlternative,\n\taccessibilityLayer,\n}: DonutChartProps) {\n\tconst legendItems = data.map((entry, index) => {\n\t\tconst item = series?.find((candidate) => candidate.key === entry.name);\n\t\treturn {\n\t\t\tkey: `${entry.name}-${index}`,\n\t\t\tlabel: item?.label ?? entry.name,\n\t\t\tcolor: seriesColor(item, index),\n\t\t};\n\t});\n\treturn (\n\t\t<ChartShell\n\t\t\tariaLabel={ariaLabel}\n\t\t\tclassName={className}\n\t\t\tsize=\"h-36 w-36\"\n\t\t\tlegend={showLegend ? <ChartLegend items={legendItems} shape=\"bar\" /> : undefined}\n\t\t\tsummary={summary}\n\t\t\tdataAlternative={dataAlternative}\n\t\t\taccessibilityLayer={accessibilityLayer}\n\t\t>\n\t\t\t<PieChart>\n\t\t\t\t<Pie\n\t\t\t\t\tdata={data}\n\t\t\t\t\tdataKey=\"value\"\n\t\t\t\t\tnameKey=\"name\"\n\t\t\t\t\tinnerRadius={24}\n\t\t\t\t\touterRadius={48}\n\t\t\t\t\tstroke=\"none\"\n\t\t\t\t\t{...ANIMATION_PROPS}\n\t\t\t\t>\n\t\t\t\t\t{data.map((entry, index) => {\n\t\t\t\t\t\tconst item = series?.find((candidate) => candidate.key === entry.name);\n\t\t\t\t\t\treturn <Cell key={`${entry.name}-${index}`} fill={seriesColor(item, index)} />;\n\t\t\t\t\t})}\n\t\t\t\t</Pie>\n\t\t\t\t<Tooltip {...chartTooltipProps({ formatter: valueFormatter, cursor: false })} />\n\t\t\t</PieChart>\n\t\t</ChartShell>\n\t);\n}\n"],"mappings":";;;;;;;AAgCA,
|
|
1
|
+
{"version":3,"file":"donut.js","names":["DonutChart","legendItems","data","item","series","candidate","entry","index","seriesColor","ChartShell","showLegend","ChartLegend","PieChart","Pie","ANIMATION_PROPS","Cell","Tooltip","chartTooltipProps","valueFormatter"],"sources":["../../src/charts/donut.tsx"],"sourcesContent":["import type { ReactNode } from \"react\";\nimport { Cell, Pie, PieChart, Tooltip } from \"recharts\";\nimport { ANIMATION_PROPS, chartTooltipProps, seriesColor } from \"./config\";\nimport { ChartShell } from \"./frame\";\nimport { ChartLegend } from \"./legend\";\nimport type { ChartSeriesDescriptor, NamedValue } from \"./series\";\n\nexport type DonutChartProps = {\n\tdata: NamedValue[];\n\tseries?: ChartSeriesDescriptor[];\n\tariaLabel?: string;\n\tclassName?: string;\n\tshowLegend?: boolean;\n\tvalueFormatter?: (value: number) => string;\n\t/**\n\t * Textual summary describing key insights, highs, lows, and keyboard exploration instructions.\n\t * Associated with the chart via useId and aria-describedby.\n\t */\n\tsummary?: ReactNode;\n\t/**\n\t * Accessible tabular or structured data alternative rendered outside the plot area.\n\t */\n\tdataAlternative?: ReactNode;\n\t/**\n\t * Whether the interactive accessibility layer is enabled on the underlying Recharts graphic.\n\t * Enables keyboard exploration with Tab and arrow keys where supported by the underlying chart type.\n\t * Non-interactive compact or decorative charts without tooltip navigation should provide summary or dataAlternative.\n\t * @default true\n\t */\n\taccessibilityLayer?: boolean;\n};\n\nexport function DonutChart({\n\tdata,\n\tseries,\n\tariaLabel = \"Donut chart\",\n\tclassName,\n\tshowLegend = false,\n\tvalueFormatter,\n\tsummary,\n\tdataAlternative,\n\taccessibilityLayer,\n}: DonutChartProps) {\n\tconst legendItems = data.map((entry, index) => {\n\t\tconst item = series?.find((candidate) => candidate.key === entry.name);\n\t\treturn {\n\t\t\tkey: `${entry.name}-${index}`,\n\t\t\tlabel: item?.label ?? entry.name,\n\t\t\tcolor: seriesColor(item, index),\n\t\t};\n\t});\n\treturn (\n\t\t<ChartShell\n\t\t\tariaLabel={ariaLabel}\n\t\t\tclassName={className}\n\t\t\tsize=\"h-36 w-36\"\n\t\t\tlegend={showLegend ? <ChartLegend items={legendItems} shape=\"bar\" /> : undefined}\n\t\t\tsummary={summary}\n\t\t\tdataAlternative={dataAlternative}\n\t\t\taccessibilityLayer={accessibilityLayer}\n\t\t>\n\t\t\t<PieChart>\n\t\t\t\t<Pie\n\t\t\t\t\tdata={data}\n\t\t\t\t\tdataKey=\"value\"\n\t\t\t\t\tnameKey=\"name\"\n\t\t\t\t\tinnerRadius={24}\n\t\t\t\t\touterRadius={48}\n\t\t\t\t\tstroke=\"none\"\n\t\t\t\t\t{...ANIMATION_PROPS}\n\t\t\t\t>\n\t\t\t\t\t{data.map((entry, index) => {\n\t\t\t\t\t\tconst item = series?.find((candidate) => candidate.key === entry.name);\n\t\t\t\t\t\treturn <Cell key={`${entry.name}-${index}`} fill={seriesColor(item, index)} />;\n\t\t\t\t\t})}\n\t\t\t\t</Pie>\n\t\t\t\t<Tooltip {...chartTooltipProps({ formatter: valueFormatter, cursor: false })} />\n\t\t\t</PieChart>\n\t\t</ChartShell>\n\t);\n}\n"],"mappings":";;;;;;;AAgCA,SAAgBA,EAAW,EAC1B,SACA,WACA,eAAY,eACZ,cACA,gBAAa,IACb,mBACA,YACA,oBACA,yBACmB;CACnB,IAAMC,IAAcC,EAAK,KAAK,GAAO,MAAU;EAC9C,IAAMC,IAAOC,GAAQ,MAAM,MAAcC,EAAU,QAAQC,EAAM,IAAI;EACrE,OAAO;GACN,KAAK,GAAGA,EAAM,KAAK,GAAGC;GACtB,OAAOJ,GAAM,SAASG,EAAM;GAC5B,OAAOE,EAAYL,GAAMI,CAAK;EAC/B;CACD,CAAC;CACD,OACC,kBAACE,GAAD;EACY;EACA;EACX,MAAK;EACL,QAAQC,IAAa,kBAACC,GAAD;GAAa,OAAOV;GAAa,OAAM;EAAO,CAAA,IAAI,KAAA;EAC9D;EACQ;EACG;EAEpB,UAAA,kBAACW,GAAD,EAAA,UAAA,CACC,kBAACC,GAAD;GACO;GACN,SAAQ;GACR,SAAQ;GACR,aAAa;GACb,aAAa;GACb,QAAO;GACP,GAAIC;GAEH,UAAAZ,EAAK,KAAK,GAAO,MAAU;IAC3B,IAAMC,IAAOC,GAAQ,MAAM,MAAcC,EAAU,QAAQC,EAAM,IAAI;IACrE,OAAO,kBAACS,GAAD,EAAqC,MAAMP,EAAYL,GAAMI,CAAK,EAAI,GAA3D,GAAGD,EAAM,KAAK,GAAGC,GAA0C;GAC9E,CAAC;EACG,CAAA,GACL,kBAACS,GAAD,EAAS,GAAIC,EAAkB;GAAE,WAAWC;GAAgB,QAAQ;EAAM,CAAC,EAAI,CAAA,CACtE,EAAA,CAAA;CACC,CAAA;AAEd"}
|
package/dist/charts/frame.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"frame.js","names":[],"sources":["../../src/charts/frame.tsx"],"sourcesContent":["import { cloneElement, type ReactElement, type ReactNode, useId } from \"react\";\nimport { ResponsiveContainer } from \"recharts\";\nimport { cn } from \"../utils/cn\";\nimport { RESPONSIVE_CONTAINER_PROPS } from \"./config\";\n\nexport type ChartFrameProps = {\n\t/**\n\t * Accessible label describing the purpose or dataset of the chart.\n\t */\n\tariaLabel: string;\n\t/**\n\t * Additional CSS class names for styling the chart container.\n\t */\n\tclassName?: string;\n\t/**\n\t * Single child Recharts element to render inside the responsive container.\n\t * Explicit child accessibilityLayer prop takes precedence over wrapper prop, which defaults to true.\n\t */\n\tchildren: ReactElement<{\n\t\taccessibilityLayer?: boolean;\n\t\t\"aria-label\"?: string;\n\t\t\"aria-describedby\"?: string;\n\t}>;\n\t/**\n\t * Tailwind size classes for the chart container.\n\t * @default \"h-36 w-56\"\n\t */\n\tsize?: string;\n\t/**\n\t * Textual summary describing key insights, highs, lows, and keyboard exploration instructions.\n\t * Associated with the chart via useId and aria-describedby.\n\t */\n\tsummary?: ReactNode;\n\t/**\n\t * Accessible tabular or structured data alternative rendered outside the plot area.\n\t */\n\tdataAlternative?: ReactNode;\n\t/**\n\t * Whether the interactive accessibility layer is enabled on the underlying Recharts graphic.\n\t * Enables keyboard exploration with Tab and arrow keys where supported by the underlying chart type.\n\t * Non-interactive compact or decorative charts without tooltip navigation should provide summary or dataAlternative.\n\t * @default true\n\t */\n\taccessibilityLayer?: boolean;\n};\n\nexport type ChartShellProps = ChartFrameProps & {\n\t/**\n\t * Optional legend node rendered alongside the chart plot.\n\t */\n\tlegend?: ReactNode;\n};\n\nexport type ChartAccessibilityProps = Pick<\n\tChartFrameProps,\n\t\"summary\" | \"dataAlternative\" | \"accessibilityLayer\"\n>;\n\nfunction hasSlotContent(slot: ReactNode | undefined): boolean {\n\treturn slot !== undefined && slot !== null && slot !== false;\n}\n\nfunction ChartContainer({\n\tariaLabel,\n\tclassName,\n\tchildren,\n\tsize = \"h-36 w-56\",\n\tlegend,\n\tsummary,\n\tdataAlternative,\n\taccessibilityLayer = true,\n}: ChartShellProps) {\n\tconst summaryId = useId();\n\tconst hasSummary = hasSlotContent(summary);\n\tconst hasAlternative = hasSlotContent(dataAlternative);\n\n\tconst childProps = (children?.props ?? {}) as {\n\t\taccessibilityLayer?: boolean;\n\t\t\"aria-label\"?: string;\n\t\t\"aria-describedby\"?: string;\n\t};\n\tconst childLayer = childProps.accessibilityLayer;\n\tconst resolvedLayer = childLayer !== undefined ? childLayer : accessibilityLayer;\n\n\tconst clonedChild = cloneElement(children, {\n\t\taccessibilityLayer: resolvedLayer,\n\t\t\"aria-label\": childProps[\"aria-label\"] ?? ariaLabel,\n\t\t\"aria-describedby\": childProps[\"aria-describedby\"] ?? (hasSummary ? summaryId : undefined),\n\t});\n\n\tlet plotContainer: ReactNode;\n\tif (hasSlotContent(legend)) {\n\t\tplotContainer = (\n\t\t\t<div\n\t\t\t\tdata-testid=\"chart-shell\"\n\t\t\t\tclassName={cn(size, className)}\n\t\t\t\tstyle={{ display: \"flex\", flexDirection: \"column\", minHeight: 0, minWidth: 0 }}\n\t\t\t>\n\t\t\t\t<div className=\"min-h-0 w-full flex-1 basalt-chart [&_.recharts-surface:focus-visible]:outline-2 [&_.recharts-surface:focus-visible]:outline-offset-2 [&_.recharts-surface:focus-visible]:outline-basalt-ring\">\n\t\t\t\t\t<ResponsiveContainer {...RESPONSIVE_CONTAINER_PROPS}>{clonedChild}</ResponsiveContainer>\n\t\t\t\t</div>\n\t\t\t\t{legend}\n\t\t\t</div>\n\t\t);\n\t} else {\n\t\tplotContainer = (\n\t\t\t<div\n\t\t\t\tclassName={cn(\n\t\t\t\t\tsize,\n\t\t\t\t\t\"min-h-0 min-w-0 basalt-chart [&_.recharts-surface:focus-visible]:outline-2 [&_.recharts-surface:focus-visible]:outline-offset-2 [&_.recharts-surface:focus-visible]:outline-basalt-ring\",\n\t\t\t\t\tclassName,\n\t\t\t\t)}\n\t\t\t>\n\t\t\t\t<ResponsiveContainer {...RESPONSIVE_CONTAINER_PROPS}>{clonedChild}</ResponsiveContainer>\n\t\t\t</div>\n\t\t);\n\t}\n\n\tif (!hasSummary && !hasAlternative) {\n\t\treturn (\n\t\t\t<figure role=\"group\" aria-label={ariaLabel} className=\"contents m-0 p-0\">\n\t\t\t\t{plotContainer}\n\t\t\t</figure>\n\t\t);\n\t}\n\n\treturn (\n\t\t<figure\n\t\t\trole=\"group\"\n\t\t\taria-label={ariaLabel}\n\t\t\taria-describedby={hasSummary ? summaryId : undefined}\n\t\t\tclassName=\"m-0 flex flex-col gap-2 p-0 min-h-0 min-w-0\"\n\t\t>\n\t\t\t{hasSummary ? (\n\t\t\t\t<div id={summaryId} className=\"text-xs text-basalt-muted-foreground\">\n\t\t\t\t\t{summary}\n\t\t\t\t</div>\n\t\t\t) : null}\n\t\t\t{plotContainer}\n\t\t\t{hasAlternative ? (\n\t\t\t\t<div className=\"text-xs text-basalt-muted-foreground\">{dataAlternative}</div>\n\t\t\t) : null}\n\t\t</figure>\n\t);\n}\n\nexport function ChartFrame(props: ChartFrameProps) {\n\treturn <ChartContainer {...props} />;\n}\n\nexport function ChartShell(props: ChartShellProps) {\n\treturn <ChartContainer {...props} />;\n}\n"],"mappings":";;;;;;;AA0DA,
|
|
1
|
+
{"version":3,"file":"frame.js","names":["hasSlotContent","slot","ChartContainer","summaryId","useId","hasSummary","summary","hasAlternative","dataAlternative","childProps","children","childLayer","clonedChild","cloneElement","accessibilityLayer","ariaLabel","plotContainer","legend","cn","size","className","ResponsiveContainer","RESPONSIVE_CONTAINER_PROPS","ChartFrame","props","ChartShell"],"sources":["../../src/charts/frame.tsx"],"sourcesContent":["import { cloneElement, type ReactElement, type ReactNode, useId } from \"react\";\nimport { ResponsiveContainer } from \"recharts\";\nimport { cn } from \"../utils/cn\";\nimport { RESPONSIVE_CONTAINER_PROPS } from \"./config\";\n\nexport type ChartFrameProps = {\n\t/**\n\t * Accessible label describing the purpose or dataset of the chart.\n\t */\n\tariaLabel: string;\n\t/**\n\t * Additional CSS class names for styling the chart container.\n\t */\n\tclassName?: string;\n\t/**\n\t * Single child Recharts element to render inside the responsive container.\n\t * Explicit child accessibilityLayer prop takes precedence over wrapper prop, which defaults to true.\n\t */\n\tchildren: ReactElement<{\n\t\taccessibilityLayer?: boolean;\n\t\t\"aria-label\"?: string;\n\t\t\"aria-describedby\"?: string;\n\t}>;\n\t/**\n\t * Tailwind size classes for the chart container.\n\t * @default \"h-36 w-56\"\n\t */\n\tsize?: string;\n\t/**\n\t * Textual summary describing key insights, highs, lows, and keyboard exploration instructions.\n\t * Associated with the chart via useId and aria-describedby.\n\t */\n\tsummary?: ReactNode;\n\t/**\n\t * Accessible tabular or structured data alternative rendered outside the plot area.\n\t */\n\tdataAlternative?: ReactNode;\n\t/**\n\t * Whether the interactive accessibility layer is enabled on the underlying Recharts graphic.\n\t * Enables keyboard exploration with Tab and arrow keys where supported by the underlying chart type.\n\t * Non-interactive compact or decorative charts without tooltip navigation should provide summary or dataAlternative.\n\t * @default true\n\t */\n\taccessibilityLayer?: boolean;\n};\n\nexport type ChartShellProps = ChartFrameProps & {\n\t/**\n\t * Optional legend node rendered alongside the chart plot.\n\t */\n\tlegend?: ReactNode;\n};\n\nexport type ChartAccessibilityProps = Pick<\n\tChartFrameProps,\n\t\"summary\" | \"dataAlternative\" | \"accessibilityLayer\"\n>;\n\nfunction hasSlotContent(slot: ReactNode | undefined): boolean {\n\treturn slot !== undefined && slot !== null && slot !== false;\n}\n\nfunction ChartContainer({\n\tariaLabel,\n\tclassName,\n\tchildren,\n\tsize = \"h-36 w-56\",\n\tlegend,\n\tsummary,\n\tdataAlternative,\n\taccessibilityLayer = true,\n}: ChartShellProps) {\n\tconst summaryId = useId();\n\tconst hasSummary = hasSlotContent(summary);\n\tconst hasAlternative = hasSlotContent(dataAlternative);\n\n\tconst childProps = (children?.props ?? {}) as {\n\t\taccessibilityLayer?: boolean;\n\t\t\"aria-label\"?: string;\n\t\t\"aria-describedby\"?: string;\n\t};\n\tconst childLayer = childProps.accessibilityLayer;\n\tconst resolvedLayer = childLayer !== undefined ? childLayer : accessibilityLayer;\n\n\tconst clonedChild = cloneElement(children, {\n\t\taccessibilityLayer: resolvedLayer,\n\t\t\"aria-label\": childProps[\"aria-label\"] ?? ariaLabel,\n\t\t\"aria-describedby\": childProps[\"aria-describedby\"] ?? (hasSummary ? summaryId : undefined),\n\t});\n\n\tlet plotContainer: ReactNode;\n\tif (hasSlotContent(legend)) {\n\t\tplotContainer = (\n\t\t\t<div\n\t\t\t\tdata-testid=\"chart-shell\"\n\t\t\t\tclassName={cn(size, className)}\n\t\t\t\tstyle={{ display: \"flex\", flexDirection: \"column\", minHeight: 0, minWidth: 0 }}\n\t\t\t>\n\t\t\t\t<div className=\"min-h-0 w-full flex-1 basalt-chart [&_.recharts-surface:focus-visible]:outline-2 [&_.recharts-surface:focus-visible]:outline-offset-2 [&_.recharts-surface:focus-visible]:outline-basalt-ring\">\n\t\t\t\t\t<ResponsiveContainer {...RESPONSIVE_CONTAINER_PROPS}>{clonedChild}</ResponsiveContainer>\n\t\t\t\t</div>\n\t\t\t\t{legend}\n\t\t\t</div>\n\t\t);\n\t} else {\n\t\tplotContainer = (\n\t\t\t<div\n\t\t\t\tclassName={cn(\n\t\t\t\t\tsize,\n\t\t\t\t\t\"min-h-0 min-w-0 basalt-chart [&_.recharts-surface:focus-visible]:outline-2 [&_.recharts-surface:focus-visible]:outline-offset-2 [&_.recharts-surface:focus-visible]:outline-basalt-ring\",\n\t\t\t\t\tclassName,\n\t\t\t\t)}\n\t\t\t>\n\t\t\t\t<ResponsiveContainer {...RESPONSIVE_CONTAINER_PROPS}>{clonedChild}</ResponsiveContainer>\n\t\t\t</div>\n\t\t);\n\t}\n\n\tif (!hasSummary && !hasAlternative) {\n\t\treturn (\n\t\t\t<figure role=\"group\" aria-label={ariaLabel} className=\"contents m-0 p-0\">\n\t\t\t\t{plotContainer}\n\t\t\t</figure>\n\t\t);\n\t}\n\n\treturn (\n\t\t<figure\n\t\t\trole=\"group\"\n\t\t\taria-label={ariaLabel}\n\t\t\taria-describedby={hasSummary ? summaryId : undefined}\n\t\t\tclassName=\"m-0 flex flex-col gap-2 p-0 min-h-0 min-w-0\"\n\t\t>\n\t\t\t{hasSummary ? (\n\t\t\t\t<div id={summaryId} className=\"text-xs text-basalt-muted-foreground\">\n\t\t\t\t\t{summary}\n\t\t\t\t</div>\n\t\t\t) : null}\n\t\t\t{plotContainer}\n\t\t\t{hasAlternative ? (\n\t\t\t\t<div className=\"text-xs text-basalt-muted-foreground\">{dataAlternative}</div>\n\t\t\t) : null}\n\t\t</figure>\n\t);\n}\n\nexport function ChartFrame(props: ChartFrameProps) {\n\treturn <ChartContainer {...props} />;\n}\n\nexport function ChartShell(props: ChartShellProps) {\n\treturn <ChartContainer {...props} />;\n}\n"],"mappings":";;;;;;;AA0DA,SAASA,EAAe,GAAsC;CAC7D,OAAOC,KAA+B,QAAQA,MAAS;AACxD;AAEA,SAASC,EAAe,EACvB,cACA,cACA,aACA,UAAO,aACP,WACA,YACA,oBACA,wBAAqB,MACF;CACnB,IAAMC,IAAYC,EAAM,GAClBC,IAAaL,EAAeM,CAAO,GACnCC,IAAiBP,EAAeQ,CAAe,GAE/CC,IAAcC,GAAU,SAAS,CAAC,GAKlCC,IAAaF,EAAW,oBAGxBG,IAAcC,EAAaH,GAAU;EAC1C,oBAHqBC,MAAe,KAAA,IAAyBG,IAAbH;EAIhD,cAAcF,EAAW,iBAAiBM;EAC1C,oBAAoBN,EAAW,wBAAwBJ,IAAaF,IAAY,KAAA;CACjF,CAAC,GAEGa;CAoCJ,OAnCA,AAcCA,IAdGhB,EAAeiB,CAAM,IAEvB,kBAAC,OAAD;EACC,eAAY;EACZ,WAAWC,EAAGC,GAAMC,CAAS;EAC7B,OAAO;GAAE,SAAS;GAAQ,eAAe;GAAU,WAAW;GAAG,UAAU;EAAE;EAH9E,UAAA,CAKC,kBAAC,OAAD;GAAK,WAAU;GACd,UAAA,kBAACC,GAAD;IAAqB,GAAIC;IAA6B,UAAAV;GAAiC,CAAA;EACnF,CAAA,GACJK,CACG;MAIL,kBAAC,OAAD;EACC,WAAWC,EACVC,GACA,2LACAC,CACD;EAEA,UAAA,kBAACC,GAAD;GAAqB,GAAIC;GAA6B,UAAAV;EAAiC,CAAA;CACnF,CAAA,GAIH,CAACP,KAAc,CAACE,IAElB,kBAAC,UAAD;EAAQ,MAAK;EAAQ,cAAYQ;EAAW,WAAU;EACpD,UAAAC;CACM,CAAA,IAKT,kBAAC,UAAD;EACC,MAAK;EACL,cAAYD;EACZ,oBAAkBV,IAAaF,IAAY,KAAA;EAC3C,WAAU;EAJX,UAAA;GAMEE,IACA,kBAAC,OAAD;IAAK,IAAIF;IAAW,WAAU;IAC5B,UAAAG;GACG,CAAA,IACF;GACHU;GACAT,IACA,kBAAC,OAAD;IAAK,WAAU;IAAwC,UAAAC;GAAqB,CAAA,IACzE;EACG;;AAEV;AAEA,SAAgBe,EAAW,GAAwB;CAClD,OAAO,kBAACrB,GAAD,EAAgB,GAAIsB,EAAQ,CAAA;AACpC;AAEA,SAAgBC,EAAW,GAAwB;CAClD,OAAO,kBAACvB,GAAD,EAAgB,GAAIsB,EAAQ,CAAA;AACpC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"funnel.js","names":[],"sources":["../../src/charts/funnel.tsx"],"sourcesContent":["import type { ReactNode } from \"react\";\nimport { Funnel, LabelList, FunnelChart as RechartsFunnel, Tooltip } from \"recharts\";\nimport { ANIMATION_PROPS, chartFontSize, chartTooltipProps, seriesColor } from \"./config\";\nimport { ChartFrame } from \"./frame\";\nimport { chartAxis } from \"./palette\";\nimport type { ChartSeriesDescriptor, NamedValue } from \"./series\";\n\nexport type FunnelChartProps = {\n\tdata: NamedValue[];\n\tseries?: ChartSeriesDescriptor[];\n\tariaLabel?: string;\n\tclassName?: string;\n\tvalueFormatter?: (value: number) => string;\n\t/**\n\t * Textual summary describing key insights, highs, lows, and keyboard exploration instructions.\n\t * Associated with the chart via useId and aria-describedby.\n\t */\n\tsummary?: ReactNode;\n\t/**\n\t * Accessible tabular or structured data alternative rendered outside the plot area.\n\t */\n\tdataAlternative?: ReactNode;\n\t/**\n\t * Whether the interactive accessibility layer is enabled on the underlying Recharts graphic.\n\t * Enables keyboard exploration with Tab and arrow keys where supported by the underlying chart type.\n\t * Non-interactive compact or decorative charts without tooltip navigation should provide summary or dataAlternative.\n\t * @default true\n\t */\n\taccessibilityLayer?: boolean;\n};\n\nexport function FunnelChart({\n\tdata,\n\tseries,\n\tariaLabel = \"Funnel chart\",\n\tclassName,\n\tvalueFormatter,\n\tsummary,\n\tdataAlternative,\n\taccessibilityLayer,\n}: FunnelChartProps) {\n\treturn (\n\t\t<ChartFrame\n\t\t\tariaLabel={ariaLabel}\n\t\t\tclassName={className}\n\t\t\tsummary={summary}\n\t\t\tdataAlternative={dataAlternative}\n\t\t\taccessibilityLayer={accessibilityLayer}\n\t\t>\n\t\t\t<RechartsFunnel>\n\t\t\t\t<Tooltip {...chartTooltipProps({ formatter: valueFormatter, cursor: false })} />\n\t\t\t\t<Funnel\n\t\t\t\t\tdata={data}\n\t\t\t\t\tdataKey=\"value\"\n\t\t\t\t\tnameKey=\"name\"\n\t\t\t\t\tfill={seriesColor(series?.[0], 1)}\n\t\t\t\t\tstroke=\"none\"\n\t\t\t\t\t{...ANIMATION_PROPS}\n\t\t\t\t>\n\t\t\t\t\t<LabelList\n\t\t\t\t\t\tdataKey=\"name\"\n\t\t\t\t\t\tposition=\"right\"\n\t\t\t\t\t\tfill={chartAxis}\n\t\t\t\t\t\tstroke=\"none\"\n\t\t\t\t\t\tfontSize={chartFontSize(\"axis\")}\n\t\t\t\t\t/>\n\t\t\t\t</Funnel>\n\t\t\t</RechartsFunnel>\n\t\t</ChartFrame>\n\t);\n}\n"],"mappings":";;;;;;;AA+BA,
|
|
1
|
+
{"version":3,"file":"funnel.js","names":["RechartsFunnel","FunnelChart$1","FunnelChart","ChartFrame","Tooltip","chartTooltipProps","valueFormatter","Funnel","seriesColor","series","ANIMATION_PROPS","LabelList","chartAxis","chartFontSize"],"sources":["../../src/charts/funnel.tsx"],"sourcesContent":["import type { ReactNode } from \"react\";\nimport { Funnel, LabelList, FunnelChart as RechartsFunnel, Tooltip } from \"recharts\";\nimport { ANIMATION_PROPS, chartFontSize, chartTooltipProps, seriesColor } from \"./config\";\nimport { ChartFrame } from \"./frame\";\nimport { chartAxis } from \"./palette\";\nimport type { ChartSeriesDescriptor, NamedValue } from \"./series\";\n\nexport type FunnelChartProps = {\n\tdata: NamedValue[];\n\tseries?: ChartSeriesDescriptor[];\n\tariaLabel?: string;\n\tclassName?: string;\n\tvalueFormatter?: (value: number) => string;\n\t/**\n\t * Textual summary describing key insights, highs, lows, and keyboard exploration instructions.\n\t * Associated with the chart via useId and aria-describedby.\n\t */\n\tsummary?: ReactNode;\n\t/**\n\t * Accessible tabular or structured data alternative rendered outside the plot area.\n\t */\n\tdataAlternative?: ReactNode;\n\t/**\n\t * Whether the interactive accessibility layer is enabled on the underlying Recharts graphic.\n\t * Enables keyboard exploration with Tab and arrow keys where supported by the underlying chart type.\n\t * Non-interactive compact or decorative charts without tooltip navigation should provide summary or dataAlternative.\n\t * @default true\n\t */\n\taccessibilityLayer?: boolean;\n};\n\nexport function FunnelChart({\n\tdata,\n\tseries,\n\tariaLabel = \"Funnel chart\",\n\tclassName,\n\tvalueFormatter,\n\tsummary,\n\tdataAlternative,\n\taccessibilityLayer,\n}: FunnelChartProps) {\n\treturn (\n\t\t<ChartFrame\n\t\t\tariaLabel={ariaLabel}\n\t\t\tclassName={className}\n\t\t\tsummary={summary}\n\t\t\tdataAlternative={dataAlternative}\n\t\t\taccessibilityLayer={accessibilityLayer}\n\t\t>\n\t\t\t<RechartsFunnel>\n\t\t\t\t<Tooltip {...chartTooltipProps({ formatter: valueFormatter, cursor: false })} />\n\t\t\t\t<Funnel\n\t\t\t\t\tdata={data}\n\t\t\t\t\tdataKey=\"value\"\n\t\t\t\t\tnameKey=\"name\"\n\t\t\t\t\tfill={seriesColor(series?.[0], 1)}\n\t\t\t\t\tstroke=\"none\"\n\t\t\t\t\t{...ANIMATION_PROPS}\n\t\t\t\t>\n\t\t\t\t\t<LabelList\n\t\t\t\t\t\tdataKey=\"name\"\n\t\t\t\t\t\tposition=\"right\"\n\t\t\t\t\t\tfill={chartAxis}\n\t\t\t\t\t\tstroke=\"none\"\n\t\t\t\t\t\tfontSize={chartFontSize(\"axis\")}\n\t\t\t\t\t/>\n\t\t\t\t</Funnel>\n\t\t\t</RechartsFunnel>\n\t\t</ChartFrame>\n\t);\n}\n"],"mappings":";;;;;;;AA+BA,SAAgBE,EAAY,EAC3B,SACA,WACA,eAAY,gBACZ,cACA,mBACA,YACA,oBACA,yBACoB;CACpB,OACC,kBAACC,GAAD;EACY;EACA;EACF;EACQ;EACG;EAEpB,UAAA,kBAACH,GAAD,EAAA,UAAA,CACC,kBAACI,GAAD,EAAS,GAAIC,EAAkB;GAAE,WAAWC;GAAgB,QAAQ;EAAM,CAAC,EAAI,CAAA,GAC/E,kBAACC,GAAD;GACO;GACN,SAAQ;GACR,SAAQ;GACR,MAAMC,EAAYC,IAAS,IAAI,CAAC;GAChC,QAAO;GACP,GAAIC;GAEJ,UAAA,kBAACC,GAAD;IACC,SAAQ;IACR,UAAS;IACT,MAAMC;IACN,QAAO;IACP,UAAUC,EAAc,MAAM;GAC9B,CAAA;EACM,CAAA,CACO,EAAA,CAAA;CACL,CAAA;AAEd"}
|
package/dist/charts/gauge.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"gauge.js","names":[],"sources":["../../src/charts/gauge.tsx"],"sourcesContent":["import type { ReactNode } from \"react\";\nimport { useId } from \"react\";\nimport { PolarAngleAxis, RadialBar, RadialBarChart } from \"recharts\";\nimport { cn } from \"../utils/cn\";\nimport { ANIMATION_PROPS, seriesColor } from \"./config\";\nimport { ChartFrame } from \"./frame\";\nimport { chartMuted } from \"./palette\";\nimport type { ChartSeriesDescriptor } from \"./series\";\n\nexport type GaugeProps = {\n\tvalue: number;\n\tmax?: number;\n\tseries?: ChartSeriesDescriptor[];\n\tariaLabel?: string;\n\tclassName?: string;\n\thideValue?: boolean;\n\tvalueFormatter?: (value: number) => string;\n\t/**\n\t * Textual summary describing key insights, highs, lows, and keyboard exploration instructions.\n\t * Associated with the chart via useId and aria-describedby.\n\t */\n\tsummary?: ReactNode;\n\t/**\n\t * Accessible tabular or structured data alternative rendered outside the plot area.\n\t */\n\tdataAlternative?: ReactNode;\n\t/**\n\t * Whether the interactive accessibility layer is enabled on the underlying Recharts graphic.\n\t * Enables keyboard exploration with Tab and arrow keys where supported by the underlying chart type.\n\t * Non-interactive compact or decorative charts without tooltip navigation should provide summary or dataAlternative.\n\t * @default true\n\t */\n\taccessibilityLayer?: boolean;\n};\n\nexport function Gauge({\n\tvalue,\n\tmax = 100,\n\tseries,\n\tariaLabel = \"Gauge\",\n\tclassName,\n\thideValue = false,\n\tvalueFormatter,\n\tsummary,\n\tdataAlternative,\n\taccessibilityLayer,\n}: GaugeProps) {\n\tconst summaryId = useId();\n\tconst percent = max === 0 ? 0 : Math.min(100, Math.max(0, (value / max) * 100));\n\tconst display = valueFormatter ? valueFormatter(value) : String(value);\n\tconst hasSummary = summary !== undefined && summary !== null && summary !== false;\n\tconst hasAlternative =\n\t\tdataAlternative !== undefined && dataAlternative !== null && dataAlternative !== false;\n\n\tconst plot = (\n\t\t<div className={cn(\"relative h-36 w-36\", className)}>\n\t\t\t<ChartFrame\n\t\t\t\tariaLabel={ariaLabel}\n\t\t\t\tclassName=\"h-full w-full\"\n\t\t\t\tsize=\"h-full w-full\"\n\t\t\t\taccessibilityLayer={accessibilityLayer}\n\t\t\t>\n\t\t\t\t<RadialBarChart\n\t\t\t\t\tcx=\"50%\"\n\t\t\t\t\tcy=\"50%\"\n\t\t\t\t\tinnerRadius=\"75%\"\n\t\t\t\t\touterRadius=\"95%\"\n\t\t\t\t\tstartAngle={90}\n\t\t\t\t\tendAngle={-270}\n\t\t\t\t\tdata={[{ value: percent }]}\n\t\t\t\t\tbarSize={12}\n\t\t\t\t\t{...(hasSummary ? { \"aria-describedby\": summaryId } : {})}\n\t\t\t\t>\n\t\t\t\t\t<PolarAngleAxis type=\"number\" domain={[0, 100]} angleAxisId={0} tick={false} />\n\t\t\t\t\t<RadialBar\n\t\t\t\t\t\tdataKey=\"value\"\n\t\t\t\t\t\tcornerRadius={6}\n\t\t\t\t\t\tfill={seriesColor(series?.[0], 2)}\n\t\t\t\t\t\tbackground={{ fill: chartMuted }}\n\t\t\t\t\t\t{...ANIMATION_PROPS}\n\t\t\t\t\t/>\n\t\t\t\t</RadialBarChart>\n\t\t\t</ChartFrame>\n\t\t\t{hideValue ? null : (\n\t\t\t\t<span className=\"pointer-events-none absolute inset-0 flex items-center justify-center text-sm font-semibold text-basalt-foreground\">\n\t\t\t\t\t{display}\n\t\t\t\t</span>\n\t\t\t)}\n\t\t</div>\n\t);\n\n\tif (!hasSummary && !hasAlternative) {\n\t\treturn plot;\n\t}\n\n\treturn (\n\t\t<div className=\"flex flex-col gap-2 min-h-0 min-w-0\">\n\t\t\t{hasSummary ? (\n\t\t\t\t<div id={summaryId} className=\"text-xs text-basalt-muted-foreground\">\n\t\t\t\t\t{summary}\n\t\t\t\t</div>\n\t\t\t) : null}\n\t\t\t{plot}\n\t\t\t{hasAlternative ? (\n\t\t\t\t<div className=\"text-xs text-basalt-muted-foreground\">{dataAlternative}</div>\n\t\t\t) : null}\n\t\t</div>\n\t);\n}\n"],"mappings":";;;;;;;;;AAmCA,
|
|
1
|
+
{"version":3,"file":"gauge.js","names":["Gauge","summaryId","useId","percent","max","value","display","valueFormatter","hasSummary","summary","hasAlternative","dataAlternative","plot","cn","className","ChartFrame","RadialBarChart","PolarAngleAxis","RadialBar","seriesColor","series","chartMuted","ANIMATION_PROPS","hideValue"],"sources":["../../src/charts/gauge.tsx"],"sourcesContent":["import type { ReactNode } from \"react\";\nimport { useId } from \"react\";\nimport { PolarAngleAxis, RadialBar, RadialBarChart } from \"recharts\";\nimport { cn } from \"../utils/cn\";\nimport { ANIMATION_PROPS, seriesColor } from \"./config\";\nimport { ChartFrame } from \"./frame\";\nimport { chartMuted } from \"./palette\";\nimport type { ChartSeriesDescriptor } from \"./series\";\n\nexport type GaugeProps = {\n\tvalue: number;\n\tmax?: number;\n\tseries?: ChartSeriesDescriptor[];\n\tariaLabel?: string;\n\tclassName?: string;\n\thideValue?: boolean;\n\tvalueFormatter?: (value: number) => string;\n\t/**\n\t * Textual summary describing key insights, highs, lows, and keyboard exploration instructions.\n\t * Associated with the chart via useId and aria-describedby.\n\t */\n\tsummary?: ReactNode;\n\t/**\n\t * Accessible tabular or structured data alternative rendered outside the plot area.\n\t */\n\tdataAlternative?: ReactNode;\n\t/**\n\t * Whether the interactive accessibility layer is enabled on the underlying Recharts graphic.\n\t * Enables keyboard exploration with Tab and arrow keys where supported by the underlying chart type.\n\t * Non-interactive compact or decorative charts without tooltip navigation should provide summary or dataAlternative.\n\t * @default true\n\t */\n\taccessibilityLayer?: boolean;\n};\n\nexport function Gauge({\n\tvalue,\n\tmax = 100,\n\tseries,\n\tariaLabel = \"Gauge\",\n\tclassName,\n\thideValue = false,\n\tvalueFormatter,\n\tsummary,\n\tdataAlternative,\n\taccessibilityLayer,\n}: GaugeProps) {\n\tconst summaryId = useId();\n\tconst percent = max === 0 ? 0 : Math.min(100, Math.max(0, (value / max) * 100));\n\tconst display = valueFormatter ? valueFormatter(value) : String(value);\n\tconst hasSummary = summary !== undefined && summary !== null && summary !== false;\n\tconst hasAlternative =\n\t\tdataAlternative !== undefined && dataAlternative !== null && dataAlternative !== false;\n\n\tconst plot = (\n\t\t<div className={cn(\"relative h-36 w-36\", className)}>\n\t\t\t<ChartFrame\n\t\t\t\tariaLabel={ariaLabel}\n\t\t\t\tclassName=\"h-full w-full\"\n\t\t\t\tsize=\"h-full w-full\"\n\t\t\t\taccessibilityLayer={accessibilityLayer}\n\t\t\t>\n\t\t\t\t<RadialBarChart\n\t\t\t\t\tcx=\"50%\"\n\t\t\t\t\tcy=\"50%\"\n\t\t\t\t\tinnerRadius=\"75%\"\n\t\t\t\t\touterRadius=\"95%\"\n\t\t\t\t\tstartAngle={90}\n\t\t\t\t\tendAngle={-270}\n\t\t\t\t\tdata={[{ value: percent }]}\n\t\t\t\t\tbarSize={12}\n\t\t\t\t\t{...(hasSummary ? { \"aria-describedby\": summaryId } : {})}\n\t\t\t\t>\n\t\t\t\t\t<PolarAngleAxis type=\"number\" domain={[0, 100]} angleAxisId={0} tick={false} />\n\t\t\t\t\t<RadialBar\n\t\t\t\t\t\tdataKey=\"value\"\n\t\t\t\t\t\tcornerRadius={6}\n\t\t\t\t\t\tfill={seriesColor(series?.[0], 2)}\n\t\t\t\t\t\tbackground={{ fill: chartMuted }}\n\t\t\t\t\t\t{...ANIMATION_PROPS}\n\t\t\t\t\t/>\n\t\t\t\t</RadialBarChart>\n\t\t\t</ChartFrame>\n\t\t\t{hideValue ? null : (\n\t\t\t\t<span className=\"pointer-events-none absolute inset-0 flex items-center justify-center text-sm font-semibold text-basalt-foreground\">\n\t\t\t\t\t{display}\n\t\t\t\t</span>\n\t\t\t)}\n\t\t</div>\n\t);\n\n\tif (!hasSummary && !hasAlternative) {\n\t\treturn plot;\n\t}\n\n\treturn (\n\t\t<div className=\"flex flex-col gap-2 min-h-0 min-w-0\">\n\t\t\t{hasSummary ? (\n\t\t\t\t<div id={summaryId} className=\"text-xs text-basalt-muted-foreground\">\n\t\t\t\t\t{summary}\n\t\t\t\t</div>\n\t\t\t) : null}\n\t\t\t{plot}\n\t\t\t{hasAlternative ? (\n\t\t\t\t<div className=\"text-xs text-basalt-muted-foreground\">{dataAlternative}</div>\n\t\t\t) : null}\n\t\t</div>\n\t);\n}\n"],"mappings":";;;;;;;;;AAmCA,SAAgBA,EAAM,EACrB,UACA,SAAM,KACN,WACA,eAAY,SACZ,cACA,eAAY,IACZ,mBACA,YACA,oBACA,yBACc;CACd,IAAMC,IAAYC,EAAM,GAClBC,IAAUC,MAAQ,IAAI,IAAI,KAAK,IAAI,KAAK,KAAK,IAAI,GAAIC,IAAQD,IAAO,GAAG,CAAC,GACxEE,IAAUC,IAAiBA,EAAeF,CAAK,IAAI,OAAOA,CAAK,GAC/DG,IAAaC,KAAqC,QAAQA,MAAY,IACtEC,IACLC,KAAqD,QAAQA,MAAoB,IAE5EC,IACL,kBAAC,OAAD;EAAK,WAAWC,EAAG,sBAAsBC,CAAS;EAAlD,UAAA,CACC,kBAACC,GAAD;GACY;GACX,WAAU;GACV,MAAK;GACe;GAEpB,UAAA,kBAACC,GAAD;IACC,IAAG;IACH,IAAG;IACH,aAAY;IACZ,aAAY;IACZ,YAAY;IACZ,UAAU;IACV,MAAM,CAAC,EAAE,OAAOb,EAAQ,CAAC;IACzB,SAAS;IACT,GAAKK,IAAa,EAAE,oBAAoBP,EAAU,IAAI,CAAC;IATxD,UAAA,CAWC,kBAACgB,GAAD;KAAgB,MAAK;KAAS,QAAQ,CAAC,GAAG,GAAG;KAAG,aAAa;KAAG,MAAM;IAAQ,CAAA,GAC9E,kBAACC,GAAD;KACC,SAAQ;KACR,cAAc;KACd,MAAMC,EAAYC,IAAS,IAAI,CAAC;KAChC,YAAY,EAAE,MAAMC,EAAW;KAC/B,GAAIC;IACJ,CAAA,CACc;;EACL,CAAA,GACXC,IAAY,OACZ,kBAAC,QAAD;GAAM,WAAU;GACd,UAAAjB;EACI,CAAA,CAEH;;CAON,OAJI,CAACE,KAAc,CAACE,IACZE,IAIP,kBAAC,OAAD;EAAK,WAAU;EAAf,UAAA;GACEJ,IACA,kBAAC,OAAD;IAAK,IAAIP;IAAW,WAAU;IAC5B,UAAAQ;GACG,CAAA,IACF;GACHG;GACAF,IACA,kBAAC,OAAD;IAAK,WAAU;IAAwC,UAAAC;GAAqB,CAAA,IACzE;EACA;;AAEP"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"grouped-bar.js","names":[],"sources":["../../src/charts/grouped-bar.tsx"],"sourcesContent":["import type { ReactNode } from \"react\";\nimport { BarChart } from \"./bar\";\nimport type {\n\tLineChartAxisDomain,\n\tLineChartLegendRenderer,\n\tLineChartNumericKeys,\n\tLineChartTooltipRenderer,\n} from \"./line\";\nimport { type ChartSeriesDescriptor, resolveChartSeries, type XYPoint } from \"./series\";\n\nexport type GroupedBarChartProps<\n\tTData extends { x: string | number } = XYPoint,\n\tK extends LineChartNumericKeys<TData> & string = LineChartNumericKeys<TData> & string,\n> = {\n\t/**\n\t * Dataset array where each record requires an `x` category or time coordinate.\n\t * Any remaining fields with numeric, nullable, or optional number values are inferred as valid series keys.\n\t */\n\tdata: TData[];\n\t/**\n\t * Series descriptors identifying which numeric keys to plot.\n\t * Inferred strictly from numeric keys of `TData` (rejects non-numeric fields, `x`, and typos).\n\t */\n\tseries?: Array<ChartSeriesDescriptor<NoInfer<K>>>;\n\tariaLabel?: string;\n\tclassName?: string;\n\tshowAxes?: boolean;\n\tshowLegend?: boolean;\n\t/**\n\t * Value formatter for Y-axis tick values and fallback tooltip values.\n\t */\n\tvalueFormatter?: (value: number) => string;\n\t/**\n\t * Formatter for X-axis category or time tick labels.\n\t */\n\txValueFormatter?: (value: string | number) => string;\n\t/**\n\t * Custom numerical or keyword bounds for the Y-axis.\n\t */\n\tyDomain?: LineChartAxisDomain;\n\t/**\n\t * Custom legend slot or render function receiving resolved series descriptors.\n\t */\n\tlegend?: ReactNode | LineChartLegendRenderer<K>;\n\t/**\n\t * Custom tooltip content renderer receiving Recharts payload, active status, and coordinate label.\n\t */\n\tcustomTooltip?: LineChartTooltipRenderer;\n\t/**\n\t * Textual summary describing key insights, highs, lows, and keyboard exploration instructions.\n\t * Associated with the chart via useId and aria-describedby.\n\t */\n\tsummary?: ReactNode;\n\t/**\n\t * Accessible tabular or structured data alternative rendered outside the plot area.\n\t */\n\tdataAlternative?: ReactNode;\n\t/**\n\t * Whether the interactive accessibility layer is enabled on the underlying Recharts graphic.\n\t * Enables keyboard exploration with Tab and arrow keys where supported by the underlying chart type.\n\t * Non-interactive compact or decorative charts without tooltip navigation should provide summary or dataAlternative.\n\t * @default true\n\t */\n\taccessibilityLayer?: boolean;\n};\n\nexport function GroupedBarChart<\n\tTData extends { x: string | number } = XYPoint,\n\tK extends LineChartNumericKeys<TData> & string = LineChartNumericKeys<TData> & string,\n>({ series, ariaLabel = \"Grouped bar chart\", ...props }: GroupedBarChartProps<TData, K>) {\n\tconst resolvedSeries = resolveChartSeries(series, [\"y\", \"y2\"] as K[]);\n\treturn (\n\t\t<BarChart<TData, K>\n\t\t\tseries={resolvedSeries}\n\t\t\tariaLabel={ariaLabel}\n\t\t\t{...props}\n\t\t\tcolor={undefined}\n\t\t/>\n\t);\n}\n"],"mappings":";;;;;AAkEA,
|
|
1
|
+
{"version":3,"file":"grouped-bar.js","names":["GroupedBarChart","props","resolvedSeries","resolveChartSeries","series","BarChart"],"sources":["../../src/charts/grouped-bar.tsx"],"sourcesContent":["import type { ReactNode } from \"react\";\nimport { BarChart } from \"./bar\";\nimport type {\n\tLineChartAxisDomain,\n\tLineChartLegendRenderer,\n\tLineChartNumericKeys,\n\tLineChartTooltipRenderer,\n} from \"./line\";\nimport { type ChartSeriesDescriptor, resolveChartSeries, type XYPoint } from \"./series\";\n\nexport type GroupedBarChartProps<\n\tTData extends { x: string | number } = XYPoint,\n\tK extends LineChartNumericKeys<TData> & string = LineChartNumericKeys<TData> & string,\n> = {\n\t/**\n\t * Dataset array where each record requires an `x` category or time coordinate.\n\t * Any remaining fields with numeric, nullable, or optional number values are inferred as valid series keys.\n\t */\n\tdata: TData[];\n\t/**\n\t * Series descriptors identifying which numeric keys to plot.\n\t * Inferred strictly from numeric keys of `TData` (rejects non-numeric fields, `x`, and typos).\n\t */\n\tseries?: Array<ChartSeriesDescriptor<NoInfer<K>>>;\n\tariaLabel?: string;\n\tclassName?: string;\n\tshowAxes?: boolean;\n\tshowLegend?: boolean;\n\t/**\n\t * Value formatter for Y-axis tick values and fallback tooltip values.\n\t */\n\tvalueFormatter?: (value: number) => string;\n\t/**\n\t * Formatter for X-axis category or time tick labels.\n\t */\n\txValueFormatter?: (value: string | number) => string;\n\t/**\n\t * Custom numerical or keyword bounds for the Y-axis.\n\t */\n\tyDomain?: LineChartAxisDomain;\n\t/**\n\t * Custom legend slot or render function receiving resolved series descriptors.\n\t */\n\tlegend?: ReactNode | LineChartLegendRenderer<K>;\n\t/**\n\t * Custom tooltip content renderer receiving Recharts payload, active status, and coordinate label.\n\t */\n\tcustomTooltip?: LineChartTooltipRenderer;\n\t/**\n\t * Textual summary describing key insights, highs, lows, and keyboard exploration instructions.\n\t * Associated with the chart via useId and aria-describedby.\n\t */\n\tsummary?: ReactNode;\n\t/**\n\t * Accessible tabular or structured data alternative rendered outside the plot area.\n\t */\n\tdataAlternative?: ReactNode;\n\t/**\n\t * Whether the interactive accessibility layer is enabled on the underlying Recharts graphic.\n\t * Enables keyboard exploration with Tab and arrow keys where supported by the underlying chart type.\n\t * Non-interactive compact or decorative charts without tooltip navigation should provide summary or dataAlternative.\n\t * @default true\n\t */\n\taccessibilityLayer?: boolean;\n};\n\nexport function GroupedBarChart<\n\tTData extends { x: string | number } = XYPoint,\n\tK extends LineChartNumericKeys<TData> & string = LineChartNumericKeys<TData> & string,\n>({ series, ariaLabel = \"Grouped bar chart\", ...props }: GroupedBarChartProps<TData, K>) {\n\tconst resolvedSeries = resolveChartSeries(series, [\"y\", \"y2\"] as K[]);\n\treturn (\n\t\t<BarChart<TData, K>\n\t\t\tseries={resolvedSeries}\n\t\t\tariaLabel={ariaLabel}\n\t\t\t{...props}\n\t\t\tcolor={undefined}\n\t\t/>\n\t);\n}\n"],"mappings":";;;;;AAkEA,SAAgBA,EAGd,EAAE,WAAQ,eAAY,qBAAqB,GAAGC,KAAyC;CACxF,IAAMC,IAAiBC,EAAmBC,GAAQ,CAAC,KAAK,IAAI,CAAQ;CACpE,OACC,kBAACC,GAAD;EACC,QAAQH;EACG;EACX,GAAID;EACJ,OAAO,KAAA;CACP,CAAA;AAEH"}
|