@vielzeug/prism 2.2.6 → 26.10.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/README.md +19 -40
- package/dist/_dev.cjs +1 -1
- package/dist/_dev.cjs.map +1 -1
- package/dist/_dev.js +1 -6
- package/dist/_dev.js.map +1 -1
- package/dist/animation/easing.cjs +1 -1
- package/dist/animation/easing.cjs.map +1 -1
- package/dist/animation/easing.js +1 -13
- package/dist/animation/easing.js.map +1 -1
- package/dist/animation/motion.cjs +1 -1
- package/dist/animation/motion.cjs.map +1 -1
- package/dist/animation/motion.js +1 -12
- package/dist/animation/motion.js.map +1 -1
- package/dist/animation/transition.cjs +1 -1
- package/dist/animation/transition.cjs.map +1 -1
- package/dist/animation/transition.js +1 -28
- package/dist/animation/transition.js.map +1 -1
- package/dist/animation/tween.cjs +1 -1
- package/dist/animation/tween.cjs.map +1 -1
- package/dist/animation/tween.js +1 -7
- package/dist/animation/tween.js.map +1 -1
- package/dist/axes/axis.cjs +1 -1
- package/dist/axes/axis.cjs.map +1 -1
- package/dist/axes/axis.d.ts +1 -0
- package/dist/axes/axis.d.ts.map +1 -1
- package/dist/axes/axis.js +1 -59
- package/dist/axes/axis.js.map +1 -1
- package/dist/axes/grid.cjs +1 -1
- package/dist/axes/grid.cjs.map +1 -1
- package/dist/axes/grid.js +1 -29
- package/dist/axes/grid.js.map +1 -1
- package/dist/axes/scale-utils.cjs +1 -1
- package/dist/axes/scale-utils.cjs.map +1 -1
- package/dist/axes/scale-utils.js +1 -10
- package/dist/axes/scale-utils.js.map +1 -1
- package/dist/charts/area/area-chart.cjs +1 -1
- package/dist/charts/area/area-chart.cjs.map +1 -1
- package/dist/charts/area/area-chart.d.ts +2 -2
- package/dist/charts/area/area-chart.d.ts.map +1 -1
- package/dist/charts/area/area-chart.js +1 -61
- package/dist/charts/area/area-chart.js.map +1 -1
- package/dist/charts/area/area-renderer.cjs +1 -1
- package/dist/charts/area/area-renderer.cjs.map +1 -1
- package/dist/charts/area/area-renderer.d.ts +2 -2
- package/dist/charts/area/area-renderer.d.ts.map +1 -1
- package/dist/charts/area/area-renderer.js +1 -73
- package/dist/charts/area/area-renderer.js.map +1 -1
- package/dist/charts/bar/bar-chart.cjs +1 -1
- package/dist/charts/bar/bar-chart.cjs.map +1 -1
- package/dist/charts/bar/bar-chart.d.ts +2 -2
- package/dist/charts/bar/bar-chart.d.ts.map +1 -1
- package/dist/charts/bar/bar-chart.js +1 -172
- package/dist/charts/bar/bar-chart.js.map +1 -1
- package/dist/charts/bar/bar-hit-test.cjs +1 -1
- package/dist/charts/bar/bar-hit-test.cjs.map +1 -1
- package/dist/charts/bar/bar-hit-test.js +1 -28
- package/dist/charts/bar/bar-hit-test.js.map +1 -1
- package/dist/charts/bar/bar-renderer.cjs +1 -1
- package/dist/charts/bar/bar-renderer.cjs.map +1 -1
- package/dist/charts/bar/bar-renderer.js +1 -106
- package/dist/charts/bar/bar-renderer.js.map +1 -1
- package/dist/charts/line/line-chart.cjs +1 -1
- package/dist/charts/line/line-chart.cjs.map +1 -1
- package/dist/charts/line/line-chart.d.ts +2 -2
- package/dist/charts/line/line-chart.d.ts.map +1 -1
- package/dist/charts/line/line-chart.js +1 -62
- package/dist/charts/line/line-chart.js.map +1 -1
- package/dist/charts/line/line-renderer.cjs +1 -1
- package/dist/charts/line/line-renderer.cjs.map +1 -1
- package/dist/charts/line/line-renderer.d.ts +2 -2
- package/dist/charts/line/line-renderer.d.ts.map +1 -1
- package/dist/charts/line/line-renderer.js +1 -100
- package/dist/charts/line/line-renderer.js.map +1 -1
- package/dist/charts/pie/pie-chart.cjs +1 -1
- package/dist/charts/pie/pie-chart.cjs.map +1 -1
- package/dist/charts/pie/pie-chart.d.ts +2 -2
- package/dist/charts/pie/pie-chart.d.ts.map +1 -1
- package/dist/charts/pie/pie-chart.js +1 -160
- package/dist/charts/pie/pie-chart.js.map +1 -1
- package/dist/charts/pie/pie-renderer.cjs +1 -1
- package/dist/charts/pie/pie-renderer.cjs.map +1 -1
- package/dist/charts/pie/pie-renderer.js +1 -76
- package/dist/charts/pie/pie-renderer.js.map +1 -1
- package/dist/charts/sparkline/sparkline.cjs +1 -1
- package/dist/charts/sparkline/sparkline.cjs.map +1 -1
- package/dist/charts/sparkline/sparkline.d.ts +2 -2
- package/dist/charts/sparkline/sparkline.d.ts.map +1 -1
- package/dist/charts/sparkline/sparkline.js +1 -192
- package/dist/charts/sparkline/sparkline.js.map +1 -1
- package/dist/core/cartesian-model.cjs +1 -1
- package/dist/core/cartesian-model.cjs.map +1 -1
- package/dist/core/cartesian-model.js +1 -30
- package/dist/core/cartesian-model.js.map +1 -1
- package/dist/core/cartesian-scales.cjs +1 -1
- package/dist/core/cartesian-scales.cjs.map +1 -1
- package/dist/core/cartesian-scales.js +1 -37
- package/dist/core/cartesian-scales.js.map +1 -1
- package/dist/core/chart-base.cjs +1 -1
- package/dist/core/chart-base.cjs.map +1 -1
- package/dist/core/chart-base.d.ts +2 -4
- package/dist/core/chart-base.d.ts.map +1 -1
- package/dist/core/chart-base.js +1 -62
- package/dist/core/chart-base.js.map +1 -1
- package/dist/core/chart-scaffold.cjs +1 -1
- package/dist/core/chart-scaffold.cjs.map +1 -1
- package/dist/core/chart-scaffold.d.ts +9 -10
- package/dist/core/chart-scaffold.d.ts.map +1 -1
- package/dist/core/chart-scaffold.js +1 -101
- package/dist/core/chart-scaffold.js.map +1 -1
- package/dist/core/index.d.ts +0 -1
- package/dist/core/index.d.ts.map +1 -1
- package/dist/core/layout.cjs +1 -1
- package/dist/core/layout.cjs.map +1 -1
- package/dist/core/layout.js +1 -22
- package/dist/core/layout.js.map +1 -1
- package/dist/core/responsive.cjs +1 -1
- package/dist/core/responsive.cjs.map +1 -1
- package/dist/core/responsive.js +1 -19
- package/dist/core/responsive.js.map +1 -1
- package/dist/devtools.cjs +1 -1
- package/dist/devtools.cjs.map +1 -1
- package/dist/devtools.js +1 -18
- package/dist/devtools.js.map +1 -1
- package/dist/errors.cjs +1 -1
- package/dist/errors.cjs.map +1 -1
- package/dist/errors.js +1 -9
- package/dist/errors.js.map +1 -1
- package/dist/index.cjs +1 -1
- package/dist/index.d.ts +2 -6
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -12
- package/dist/interaction/crosshair.cjs +1 -1
- package/dist/interaction/crosshair.cjs.map +1 -1
- package/dist/interaction/crosshair.js +1 -45
- package/dist/interaction/crosshair.js.map +1 -1
- package/dist/interaction/events.cjs +1 -1
- package/dist/interaction/events.cjs.map +1 -1
- package/dist/interaction/events.js +1 -11
- package/dist/interaction/events.js.map +1 -1
- package/dist/interaction/legend.cjs +1 -1
- package/dist/interaction/legend.cjs.map +1 -1
- package/dist/interaction/legend.js +1 -30
- package/dist/interaction/legend.js.map +1 -1
- package/dist/interaction/series-interaction.cjs +1 -1
- package/dist/interaction/series-interaction.cjs.map +1 -1
- package/dist/interaction/series-interaction.js +1 -97
- package/dist/interaction/series-interaction.js.map +1 -1
- package/dist/interaction/tooltip.cjs +1 -1
- package/dist/interaction/tooltip.cjs.map +1 -1
- package/dist/interaction/tooltip.d.ts.map +1 -1
- package/dist/interaction/tooltip.js +1 -63
- package/dist/interaction/tooltip.js.map +1 -1
- package/dist/prism.cjs +1 -1
- package/dist/prism.cjs.map +1 -1
- package/dist/prism.iife.js +1 -1
- package/dist/prism.iife.js.map +1 -1
- package/dist/prism.js +1 -1
- package/dist/prism.js.map +1 -1
- package/dist/scales/band.cjs +1 -1
- package/dist/scales/band.cjs.map +1 -1
- package/dist/scales/band.js +1 -39
- package/dist/scales/band.js.map +1 -1
- package/dist/scales/linear.cjs +1 -1
- package/dist/scales/linear.cjs.map +1 -1
- package/dist/scales/linear.js +1 -43
- package/dist/scales/linear.js.map +1 -1
- package/dist/scales/time.cjs +1 -1
- package/dist/scales/time.cjs.map +1 -1
- package/dist/scales/time.js +1 -61
- package/dist/scales/time.js.map +1 -1
- package/dist/svg/element.cjs +1 -1
- package/dist/svg/element.cjs.map +1 -1
- package/dist/svg/element.js +1 -22
- package/dist/svg/element.js.map +1 -1
- package/dist/svg/path.cjs +1 -1
- package/dist/svg/path.cjs.map +1 -1
- package/dist/svg/path.js +1 -48
- package/dist/svg/path.js.map +1 -1
- package/dist/svg/text.cjs +1 -1
- package/dist/svg/text.cjs.map +1 -1
- package/dist/svg/text.js +1 -9
- package/dist/svg/text.js.map +1 -1
- package/dist/theme/index.cjs +1 -1
- package/dist/theme/index.cjs.map +1 -1
- package/dist/theme/index.js +1 -19
- package/dist/theme/index.js.map +1 -1
- package/dist/types.d.ts +24 -48
- package/dist/types.d.ts.map +1 -1
- package/package.json +8 -9
- package/dist/core/resolve.cjs +0 -2
- package/dist/core/resolve.cjs.map +0 -1
- package/dist/core/resolve.d.ts +0 -9
- package/dist/core/resolve.d.ts.map +0 -1
- package/dist/core/resolve.js +0 -15
- package/dist/core/resolve.js.map +0 -1
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
require("../
|
|
1
|
+
const e=require("../svg/element.cjs"),t=require("../errors.cjs"),n=require("../interaction/legend.cjs"),r=require("../interaction/tooltip.cjs"),i=require("./chart-base.cjs");function clearCartesianDom(t,n,r,i){e.removeChildren(t.series),e.removeChildren(t.grid),e.removeChildren(t.xAxis),e.removeChildren(t.yAxis),n?.update([]),r?.hide(),i?.hide()}function runScaffold(e,a,o,s,c){let render=()=>{},l=i.createChartBase(e,{a11y:a.a11y,margin:a.margin},()=>render()),u=a.tooltip?r.createTooltip(e,a.tooltip):null,d=a.legend?n.createLegend(e,a.legend):null,f=new AbortController,p=o(l,u,d,f.signal),m=!1,h=makeEventManager(l.svg);render=()=>{m||h.attach(s(p))};try{render()}catch(e){throw m=!0,f.abort(),h.detach(),u?.dispose(),d?.dispose(),l.dispose(),e instanceof t.PrismRenderError?e:new t.PrismRenderError(`Failed to render chart.`,{cause:e})}return{get disposalSignal(){return f.signal},dispose(){m||(m=!0,f.abort(),h.detach(),u?.dispose(),d?.dispose(),l.dispose())},get disposed(){return m},el:l.svg,update(e){if(m)throw new t.PrismRenderError(`Cannot update a disposed chart.`);c(e),render()},[Symbol.dispose](){this.dispose()}}}function makeEventManager(e){let t=null;return{attach(n){t&&=(t.onMouseMove&&e.removeEventListener(`mousemove`,t.onMouseMove),t.onMouseLeave&&e.removeEventListener(`mouseleave`,t.onMouseLeave),t.onClick&&e.removeEventListener(`click`,t.onClick),t.onKeyDown&&e.removeEventListener(`keydown`,t.onKeyDown),null),n&&(t=n,n.onMouseMove&&e.addEventListener(`mousemove`,n.onMouseMove),n.onMouseLeave&&e.addEventListener(`mouseleave`,n.onMouseLeave),n.onClick&&e.addEventListener(`click`,n.onClick),n.onKeyDown&&e.addEventListener(`keydown`,n.onKeyDown))},detach(){this.attach(void 0)}}}function createChartScaffold(t,n,r,i){return runScaffold(t,n,(n,r,i,a)=>{let o={grid:e.createSvgElement(`g`,{"aria-hidden":`true`,class:`prism-grid`}),series:e.createSvgElement(`g`,{class:`prism-series`}),xAxis:e.createSvgElement(`g`,{class:`prism-x-axis`}),yAxis:e.createSvgElement(`g`,{class:`prism-y-axis`})};return n.chartArea.appendChild(o.grid),n.chartArea.appendChild(o.xAxis),n.chartArea.appendChild(o.yAxis),n.chartArea.appendChild(o.series),{chartArea:n.chartArea,container:t,dimensions:n.dimensions,disposalSignal:a,groups:o,legend:i,svg:n.svg,tooltip:r}},r,i)}function createRadialScaffold(e,t,n,r){return runScaffold(e,t,(t,n,r,i)=>({container:e,dimensions:t.dimensions,disposalSignal:i,legend:r,svg:t.svg,tooltip:n}),n,r)}exports.clearCartesianDom=clearCartesianDom,exports.createChartScaffold=createChartScaffold,exports.createRadialScaffold=createRadialScaffold;
|
|
2
2
|
//# sourceMappingURL=chart-scaffold.cjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"chart-scaffold.cjs","names":[],"sources":["../../src/core/chart-scaffold.ts"],"sourcesContent":["import type { Readable } from '@vielzeug/ripple';\n\nimport { createScope, effect } from '@vielzeug/ripple';\nimport { error } from '../_dev';\nimport type { CrosshairState } from '../interaction/crosshair';\nimport type { LegendState } from '../interaction/legend';\nimport { createLegend } from '../interaction/legend';\nimport type { TooltipState } from '../interaction/tooltip';\nimport { createTooltip } from '../interaction/tooltip';\nimport { createSvgElement, removeChildren } from '../svg/element';\nimport type { BaseChartConfig, ChartDimensions, ChartHandle, ChartPlugin, ChartPluginContext } from '../types';\nimport { createChartBase } from './chart-base';\n\nexport interface ScaffoldGroups {\n grid: SVGGElement;\n series: SVGGElement;\n xAxis: SVGGElement;\n yAxis: SVGGElement;\n}\n\n/**\n * Clears a cartesian chart's series/grid/axis groups and hides its legend/tooltip/crosshair —\n * shared by every cartesian chart factory's \"no data\" early-return so a reactive series\n * transitioning to empty leaves a fully blank chart, not a half-cleared one.\n */\nexport function clearCartesianDom(\n groups: ScaffoldGroups,\n legend: LegendState | null,\n tooltip: TooltipState | null,\n crosshair?: CrosshairState | null,\n): void {\n removeChildren(groups.series);\n removeChildren(groups.grid);\n removeChildren(groups.xAxis);\n removeChildren(groups.yAxis);\n legend?.update([]);\n tooltip?.hide();\n crosshair?.hide();\n}\n\nexport interface ScaffoldContext {\n chartArea: SVGGElement;\n container: HTMLElement;\n dimensions: Readable<ChartDimensions>;\n /** Aborted when the chart is disposed — renderers use this to stop rescheduling in-flight `requestAnimationFrame` transitions. */\n disposalSignal: AbortSignal;\n groups: ScaffoldGroups;\n legend: LegendState | null;\n svg: SVGSVGElement;\n tooltip: TooltipState | null;\n}\n\nexport interface RadialScaffoldContext {\n container: HTMLElement;\n dimensions: Readable<ChartDimensions>;\n /** Aborted when the chart is disposed — renderers use this to stop rescheduling in-flight `requestAnimationFrame` transitions. */\n disposalSignal: AbortSignal;\n legend: LegendState | null;\n svg: SVGSVGElement;\n tooltip: TooltipState | null;\n}\n\nexport interface ChartEventHandlers {\n onClick?: (event: MouseEvent) => void;\n onKeyDown?: (event: KeyboardEvent) => void;\n onMouseLeave?: (event: MouseEvent) => void;\n onMouseMove?: (event: MouseEvent) => void;\n}\n\nfunction runScaffold<TCtx>(\n container: HTMLElement,\n config: BaseChartConfig,\n buildCtx: (\n base: {\n chartArea: SVGGElement;\n dimensions: Readable<ChartDimensions>;\n svg: SVGSVGElement;\n },\n tooltip: TooltipState | null,\n legend: LegendState | null,\n disposalSignal: AbortSignal,\n ) => TCtx,\n renderFn: (ctx: TCtx) => ChartEventHandlers | undefined,\n): ChartHandle {\n const base = createChartBase(container, { a11y: config.a11y, margin: config.margin });\n const tooltip = config.tooltip ? createTooltip(container, config.tooltip) : null;\n const legend = config.legend ? createLegend(container, config.legend) : null;\n const ac = new AbortController();\n const ctx = buildCtx(base, tooltip, legend, ac.signal);\n\n let disposed = false;\n const events = makeEventManager(base.svg);\n\n const scope = createScope();\n\n scope.run(() => {\n effect(\n () => {\n if (disposed) return;\n\n events.attach(renderFn(ctx));\n },\n { scheduler: 'microtask' },\n );\n });\n\n const installedPlugins: ChartPlugin[] = [];\n\n if (config.plugins) {\n const pluginCtx: ChartPluginContext = {\n container,\n dimensions: base.dimensions,\n disposalSignal: ac.signal,\n svg: base.svg,\n };\n\n for (const plugin of config.plugins) {\n try {\n plugin.install(pluginCtx);\n installedPlugins.push(plugin);\n } catch (err) {\n error('A chart plugin threw during install() — skipping it; the rest of the chart still renders.', err);\n }\n }\n }\n\n return {\n get disposalSignal(): AbortSignal {\n return ac.signal;\n },\n\n dispose() {\n if (disposed) return;\n\n disposed = true;\n ac.abort();\n events.detach();\n\n for (const p of installedPlugins) {\n try {\n p.dispose();\n } catch (err) {\n error('A chart plugin threw during dispose() — continuing to tear down the rest of the chart.', err);\n }\n }\n\n tooltip?.dispose();\n legend?.dispose();\n scope.dispose();\n base.dispose();\n },\n\n get disposed(): boolean {\n return disposed;\n },\n\n el: base.svg,\n\n [Symbol.dispose]() {\n this.dispose();\n },\n };\n}\n\nfunction makeEventManager(svg: SVGSVGElement): {\n attach(handlers: ChartEventHandlers | undefined): void;\n detach(): void;\n} {\n let active: ChartEventHandlers | null = null;\n\n return {\n attach(handlers) {\n if (active) {\n if (active.onMouseMove) svg.removeEventListener('mousemove', active.onMouseMove);\n\n if (active.onMouseLeave) svg.removeEventListener('mouseleave', active.onMouseLeave);\n\n if (active.onClick) svg.removeEventListener('click', active.onClick);\n\n if (active.onKeyDown) svg.removeEventListener('keydown', active.onKeyDown);\n\n active = null;\n }\n\n if (!handlers) return;\n\n active = handlers;\n\n if (handlers.onMouseMove) svg.addEventListener('mousemove', handlers.onMouseMove);\n\n if (handlers.onMouseLeave) svg.addEventListener('mouseleave', handlers.onMouseLeave);\n\n if (handlers.onClick) svg.addEventListener('click', handlers.onClick);\n\n if (handlers.onKeyDown) svg.addEventListener('keydown', handlers.onKeyDown);\n },\n detach() {\n this.attach(undefined);\n },\n };\n}\n\n/**\n * Cartesian scaffold: provides grid/axis/series SVG groups and a reactive\n * render loop. `renderFn` is called inside a reactive effect; it returns\n * optional `ChartEventHandlers` that are attached/replaced on every render.\n */\nexport function createChartScaffold(\n container: HTMLElement,\n config: BaseChartConfig,\n renderFn: (ctx: ScaffoldContext) => ChartEventHandlers | undefined,\n): ChartHandle {\n return runScaffold(\n container,\n config,\n (base, tooltip, legend, disposalSignal) => {\n const groups: ScaffoldGroups = {\n // Grid lines are purely decorative relative to the root svg's own role=\"img\"/aria-label.\n // Axis groups are NOT hidden wholesale — they can contain a meaningful `.prism-axis-title`;\n // `renderAxis` marks its own decorative tick lines/labels individually instead.\n grid: createSvgElement('g', { 'aria-hidden': 'true', class: 'prism-grid' }),\n series: createSvgElement('g', { class: 'prism-series' }),\n xAxis: createSvgElement('g', { class: 'prism-x-axis' }),\n yAxis: createSvgElement('g', { class: 'prism-y-axis' }),\n };\n\n base.chartArea.appendChild(groups.grid);\n base.chartArea.appendChild(groups.xAxis);\n base.chartArea.appendChild(groups.yAxis);\n base.chartArea.appendChild(groups.series);\n\n return {\n chartArea: base.chartArea,\n container,\n dimensions: base.dimensions,\n disposalSignal,\n groups,\n legend,\n svg: base.svg,\n tooltip,\n } satisfies ScaffoldContext;\n },\n renderFn,\n );\n}\n\n/**\n * Radial scaffold: for charts that do not use cartesian axis groups\n * (pie, donut, semi). Provides only tooltip, legend, and the SVG root.\n */\nexport function createRadialScaffold(\n container: HTMLElement,\n config: BaseChartConfig,\n renderFn: (ctx: RadialScaffoldContext) => ChartEventHandlers | undefined,\n): ChartHandle {\n return runScaffold(\n container,\n config,\n (base, tooltip, legend, disposalSignal) =>\n ({\n container,\n dimensions: base.dimensions,\n disposalSignal,\n legend,\n svg: base.svg,\n tooltip,\n }) satisfies RadialScaffoldContext,\n renderFn,\n );\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"chart-scaffold.cjs","names":[],"sources":["../../src/core/chart-scaffold.ts"],"sourcesContent":["import { PrismRenderError } from '../errors';\nimport type { CrosshairState } from '../interaction/crosshair';\nimport type { LegendState } from '../interaction/legend';\nimport { createLegend } from '../interaction/legend';\nimport type { TooltipState } from '../interaction/tooltip';\nimport { createTooltip } from '../interaction/tooltip';\nimport { createSvgElement, removeChildren } from '../svg/element';\nimport type { BaseChartConfig, ChartDimensions, ChartHandle } from '../types';\nimport { createChartBase } from './chart-base';\n\nexport interface ScaffoldGroups {\n grid: SVGGElement;\n series: SVGGElement;\n xAxis: SVGGElement;\n yAxis: SVGGElement;\n}\n\n/**\n * Clears a cartesian chart's series/grid/axis groups and hides its legend/tooltip/crosshair —\n * shared by every cartesian chart factory's \"no data\" early-return so an update\n * to empty data leaves a fully blank chart, not a half-cleared one.\n */\nexport function clearCartesianDom(\n groups: ScaffoldGroups,\n legend: LegendState | null,\n tooltip: TooltipState | null,\n crosshair?: CrosshairState | null,\n): void {\n removeChildren(groups.series);\n removeChildren(groups.grid);\n removeChildren(groups.xAxis);\n removeChildren(groups.yAxis);\n legend?.update([]);\n tooltip?.hide();\n crosshair?.hide();\n}\n\nexport interface ScaffoldContext {\n chartArea: SVGGElement;\n container: HTMLElement;\n dimensions: ChartDimensions;\n /** Aborted when the chart is disposed — renderers use this to stop rescheduling in-flight `requestAnimationFrame` transitions. */\n disposalSignal: AbortSignal;\n groups: ScaffoldGroups;\n legend: LegendState | null;\n svg: SVGSVGElement;\n tooltip: TooltipState | null;\n}\n\nexport interface RadialScaffoldContext {\n container: HTMLElement;\n dimensions: ChartDimensions;\n /** Aborted when the chart is disposed — renderers use this to stop rescheduling in-flight `requestAnimationFrame` transitions. */\n disposalSignal: AbortSignal;\n legend: LegendState | null;\n svg: SVGSVGElement;\n tooltip: TooltipState | null;\n}\n\nexport interface ChartEventHandlers {\n onClick?: (event: MouseEvent) => void;\n onKeyDown?: (event: KeyboardEvent) => void;\n onMouseLeave?: (event: MouseEvent) => void;\n onMouseMove?: (event: MouseEvent) => void;\n}\n\nfunction runScaffold<TCtx, TData>(\n container: HTMLElement,\n config: BaseChartConfig,\n buildCtx: (\n base: {\n chartArea: SVGGElement;\n dimensions: ChartDimensions;\n svg: SVGSVGElement;\n },\n tooltip: TooltipState | null,\n legend: LegendState | null,\n disposalSignal: AbortSignal,\n ) => TCtx,\n renderFn: (ctx: TCtx) => ChartEventHandlers | undefined,\n updateData: (data: TData) => void,\n): ChartHandle<TData> {\n let render = () => {};\n const base = createChartBase(container, { a11y: config.a11y, margin: config.margin }, () => render());\n const tooltip = config.tooltip ? createTooltip(container, config.tooltip) : null;\n const legend = config.legend ? createLegend(container, config.legend) : null;\n const ac = new AbortController();\n const ctx = buildCtx(base, tooltip, legend, ac.signal);\n\n let disposed = false;\n const events = makeEventManager(base.svg);\n\n render = () => {\n if (disposed) return;\n events.attach(renderFn(ctx));\n };\n\n try {\n render();\n } catch (error) {\n disposed = true;\n ac.abort();\n events.detach();\n tooltip?.dispose();\n legend?.dispose();\n base.dispose();\n throw error instanceof PrismRenderError ? error : new PrismRenderError('Failed to render chart.', { cause: error });\n }\n\n return {\n get disposalSignal(): AbortSignal {\n return ac.signal;\n },\n\n dispose() {\n if (disposed) return;\n\n disposed = true;\n ac.abort();\n events.detach();\n tooltip?.dispose();\n legend?.dispose();\n base.dispose();\n },\n\n get disposed(): boolean {\n return disposed;\n },\n\n el: base.svg,\n\n update(data) {\n if (disposed) throw new PrismRenderError('Cannot update a disposed chart.');\n updateData(data);\n render();\n },\n\n [Symbol.dispose]() {\n this.dispose();\n },\n };\n}\n\nfunction makeEventManager(svg: SVGSVGElement): {\n attach(handlers: ChartEventHandlers | undefined): void;\n detach(): void;\n} {\n let active: ChartEventHandlers | null = null;\n\n return {\n attach(handlers) {\n if (active) {\n if (active.onMouseMove) svg.removeEventListener('mousemove', active.onMouseMove);\n\n if (active.onMouseLeave) svg.removeEventListener('mouseleave', active.onMouseLeave);\n\n if (active.onClick) svg.removeEventListener('click', active.onClick);\n\n if (active.onKeyDown) svg.removeEventListener('keydown', active.onKeyDown);\n\n active = null;\n }\n\n if (!handlers) return;\n\n active = handlers;\n\n if (handlers.onMouseMove) svg.addEventListener('mousemove', handlers.onMouseMove);\n\n if (handlers.onMouseLeave) svg.addEventListener('mouseleave', handlers.onMouseLeave);\n\n if (handlers.onClick) svg.addEventListener('click', handlers.onClick);\n\n if (handlers.onKeyDown) svg.addEventListener('keydown', handlers.onKeyDown);\n },\n detach() {\n this.attach(undefined);\n },\n };\n}\n\n/**\n * Cartesian scaffold: provides grid/axis/series SVG groups and a render loop.\n * `renderFn` returns optional `ChartEventHandlers` that are attached/replaced\n * after every data update or resize.\n */\nexport function createChartScaffold<TData>(\n container: HTMLElement,\n config: BaseChartConfig,\n renderFn: (ctx: ScaffoldContext) => ChartEventHandlers | undefined,\n updateData: (data: TData) => void,\n): ChartHandle<TData> {\n return runScaffold(\n container,\n config,\n (base, tooltip, legend, disposalSignal) => {\n const groups: ScaffoldGroups = {\n // Grid lines are purely decorative relative to the root svg's own role=\"img\"/aria-label.\n // Axis groups are NOT hidden wholesale — they can contain a meaningful `.prism-axis-title`;\n // `renderAxis` marks its own decorative tick lines/labels individually instead.\n grid: createSvgElement('g', { 'aria-hidden': 'true', class: 'prism-grid' }),\n series: createSvgElement('g', { class: 'prism-series' }),\n xAxis: createSvgElement('g', { class: 'prism-x-axis' }),\n yAxis: createSvgElement('g', { class: 'prism-y-axis' }),\n };\n\n base.chartArea.appendChild(groups.grid);\n base.chartArea.appendChild(groups.xAxis);\n base.chartArea.appendChild(groups.yAxis);\n base.chartArea.appendChild(groups.series);\n\n return {\n chartArea: base.chartArea,\n container,\n dimensions: base.dimensions,\n disposalSignal,\n groups,\n legend,\n svg: base.svg,\n tooltip,\n } satisfies ScaffoldContext;\n },\n renderFn,\n updateData,\n );\n}\n\n/**\n * Radial scaffold: for charts that do not use cartesian axis groups\n * (pie, donut, semi). Provides only tooltip, legend, and the SVG root.\n */\nexport function createRadialScaffold<TData>(\n container: HTMLElement,\n config: BaseChartConfig,\n renderFn: (ctx: RadialScaffoldContext) => ChartEventHandlers | undefined,\n updateData: (data: TData) => void,\n): ChartHandle<TData> {\n return runScaffold(\n container,\n config,\n (base, tooltip, legend, disposalSignal) =>\n ({\n container,\n dimensions: base.dimensions,\n disposalSignal,\n legend,\n svg: base.svg,\n tooltip,\n }) satisfies RadialScaffoldContext,\n renderFn,\n updateData,\n );\n}\n"],"mappings":"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"}
|
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
import type { Readable } from '@vielzeug/ripple';
|
|
2
1
|
import type { CrosshairState } from '../interaction/crosshair';
|
|
3
2
|
import type { LegendState } from '../interaction/legend';
|
|
4
3
|
import type { TooltipState } from '../interaction/tooltip';
|
|
@@ -11,14 +10,14 @@ export interface ScaffoldGroups {
|
|
|
11
10
|
}
|
|
12
11
|
/**
|
|
13
12
|
* Clears a cartesian chart's series/grid/axis groups and hides its legend/tooltip/crosshair —
|
|
14
|
-
* shared by every cartesian chart factory's "no data" early-return so
|
|
15
|
-
*
|
|
13
|
+
* shared by every cartesian chart factory's "no data" early-return so an update
|
|
14
|
+
* to empty data leaves a fully blank chart, not a half-cleared one.
|
|
16
15
|
*/
|
|
17
16
|
export declare function clearCartesianDom(groups: ScaffoldGroups, legend: LegendState | null, tooltip: TooltipState | null, crosshair?: CrosshairState | null): void;
|
|
18
17
|
export interface ScaffoldContext {
|
|
19
18
|
chartArea: SVGGElement;
|
|
20
19
|
container: HTMLElement;
|
|
21
|
-
dimensions:
|
|
20
|
+
dimensions: ChartDimensions;
|
|
22
21
|
/** Aborted when the chart is disposed — renderers use this to stop rescheduling in-flight `requestAnimationFrame` transitions. */
|
|
23
22
|
disposalSignal: AbortSignal;
|
|
24
23
|
groups: ScaffoldGroups;
|
|
@@ -28,7 +27,7 @@ export interface ScaffoldContext {
|
|
|
28
27
|
}
|
|
29
28
|
export interface RadialScaffoldContext {
|
|
30
29
|
container: HTMLElement;
|
|
31
|
-
dimensions:
|
|
30
|
+
dimensions: ChartDimensions;
|
|
32
31
|
/** Aborted when the chart is disposed — renderers use this to stop rescheduling in-flight `requestAnimationFrame` transitions. */
|
|
33
32
|
disposalSignal: AbortSignal;
|
|
34
33
|
legend: LegendState | null;
|
|
@@ -42,14 +41,14 @@ export interface ChartEventHandlers {
|
|
|
42
41
|
onMouseMove?: (event: MouseEvent) => void;
|
|
43
42
|
}
|
|
44
43
|
/**
|
|
45
|
-
* Cartesian scaffold: provides grid/axis/series SVG groups and a
|
|
46
|
-
*
|
|
47
|
-
*
|
|
44
|
+
* Cartesian scaffold: provides grid/axis/series SVG groups and a render loop.
|
|
45
|
+
* `renderFn` returns optional `ChartEventHandlers` that are attached/replaced
|
|
46
|
+
* after every data update or resize.
|
|
48
47
|
*/
|
|
49
|
-
export declare function createChartScaffold(container: HTMLElement, config: BaseChartConfig, renderFn: (ctx: ScaffoldContext) => ChartEventHandlers | undefined): ChartHandle
|
|
48
|
+
export declare function createChartScaffold<TData>(container: HTMLElement, config: BaseChartConfig, renderFn: (ctx: ScaffoldContext) => ChartEventHandlers | undefined, updateData: (data: TData) => void): ChartHandle<TData>;
|
|
50
49
|
/**
|
|
51
50
|
* Radial scaffold: for charts that do not use cartesian axis groups
|
|
52
51
|
* (pie, donut, semi). Provides only tooltip, legend, and the SVG root.
|
|
53
52
|
*/
|
|
54
|
-
export declare function createRadialScaffold(container: HTMLElement, config: BaseChartConfig, renderFn: (ctx: RadialScaffoldContext) => ChartEventHandlers | undefined): ChartHandle
|
|
53
|
+
export declare function createRadialScaffold<TData>(container: HTMLElement, config: BaseChartConfig, renderFn: (ctx: RadialScaffoldContext) => ChartEventHandlers | undefined, updateData: (data: TData) => void): ChartHandle<TData>;
|
|
55
54
|
//# sourceMappingURL=chart-scaffold.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"chart-scaffold.d.ts","sourceRoot":"","sources":["../../src/core/chart-scaffold.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"chart-scaffold.d.ts","sourceRoot":"","sources":["../../src/core/chart-scaffold.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAC/D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AAEzD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AAG3D,OAAO,KAAK,EAAE,eAAe,EAAE,eAAe,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AAG9E,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,WAAW,CAAC;IAClB,MAAM,EAAE,WAAW,CAAC;IACpB,KAAK,EAAE,WAAW,CAAC;IACnB,KAAK,EAAE,WAAW,CAAC;CACpB;AAED;;;;GAIG;AACH,wBAAgB,iBAAiB,CAC/B,MAAM,EAAE,cAAc,EACtB,MAAM,EAAE,WAAW,GAAG,IAAI,EAC1B,OAAO,EAAE,YAAY,GAAG,IAAI,EAC5B,SAAS,CAAC,EAAE,cAAc,GAAG,IAAI,GAChC,IAAI,CAQN;AAED,MAAM,WAAW,eAAe;IAC9B,SAAS,EAAE,WAAW,CAAC;IACvB,SAAS,EAAE,WAAW,CAAC;IACvB,UAAU,EAAE,eAAe,CAAC;IAC5B,kIAAkI;IAClI,cAAc,EAAE,WAAW,CAAC;IAC5B,MAAM,EAAE,cAAc,CAAC;IACvB,MAAM,EAAE,WAAW,GAAG,IAAI,CAAC;IAC3B,GAAG,EAAE,aAAa,CAAC;IACnB,OAAO,EAAE,YAAY,GAAG,IAAI,CAAC;CAC9B;AAED,MAAM,WAAW,qBAAqB;IACpC,SAAS,EAAE,WAAW,CAAC;IACvB,UAAU,EAAE,eAAe,CAAC;IAC5B,kIAAkI;IAClI,cAAc,EAAE,WAAW,CAAC;IAC5B,MAAM,EAAE,WAAW,GAAG,IAAI,CAAC;IAC3B,GAAG,EAAE,aAAa,CAAC;IACnB,OAAO,EAAE,YAAY,GAAG,IAAI,CAAC;CAC9B;AAED,MAAM,WAAW,kBAAkB;IACjC,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,UAAU,KAAK,IAAI,CAAC;IACtC,SAAS,CAAC,EAAE,CAAC,KAAK,EAAE,aAAa,KAAK,IAAI,CAAC;IAC3C,YAAY,CAAC,EAAE,CAAC,KAAK,EAAE,UAAU,KAAK,IAAI,CAAC;IAC3C,WAAW,CAAC,EAAE,CAAC,KAAK,EAAE,UAAU,KAAK,IAAI,CAAC;CAC3C;AAqHD;;;;GAIG;AACH,wBAAgB,mBAAmB,CAAC,KAAK,EACvC,SAAS,EAAE,WAAW,EACtB,MAAM,EAAE,eAAe,EACvB,QAAQ,EAAE,CAAC,GAAG,EAAE,eAAe,KAAK,kBAAkB,GAAG,SAAS,EAClE,UAAU,EAAE,CAAC,IAAI,EAAE,KAAK,KAAK,IAAI,GAChC,WAAW,CAAC,KAAK,CAAC,CAkCpB;AAED;;;GAGG;AACH,wBAAgB,oBAAoB,CAAC,KAAK,EACxC,SAAS,EAAE,WAAW,EACtB,MAAM,EAAE,eAAe,EACvB,QAAQ,EAAE,CAAC,GAAG,EAAE,qBAAqB,KAAK,kBAAkB,GAAG,SAAS,EACxE,UAAU,EAAE,CAAC,IAAI,EAAE,KAAK,KAAK,IAAI,GAChC,WAAW,CAAC,KAAK,CAAC,CAgBpB"}
|
|
@@ -1,102 +1,2 @@
|
|
|
1
|
-
import "../
|
|
2
|
-
import { createSvgElement as e, removeChildren as t } from "../svg/element.js";
|
|
3
|
-
import { createLegend as n } from "../interaction/legend.js";
|
|
4
|
-
import { createTooltip as r } from "../interaction/tooltip.js";
|
|
5
|
-
import { createChartBase as i } from "./chart-base.js";
|
|
6
|
-
import { createScope as a, effect as o } from "@vielzeug/ripple";
|
|
7
|
-
//#region src/core/chart-scaffold.ts
|
|
8
|
-
function s(e, n, r, i) {
|
|
9
|
-
t(e.series), t(e.grid), t(e.xAxis), t(e.yAxis), n?.update([]), r?.hide(), i?.hide();
|
|
10
|
-
}
|
|
11
|
-
function c(e, t, s, c) {
|
|
12
|
-
let u = i(e, {
|
|
13
|
-
a11y: t.a11y,
|
|
14
|
-
margin: t.margin
|
|
15
|
-
}), d = t.tooltip ? r(e, t.tooltip) : null, f = t.legend ? n(e, t.legend) : null, p = new AbortController(), m = s(u, d, f, p.signal), h = !1, g = l(u.svg), _ = a();
|
|
16
|
-
_.run(() => {
|
|
17
|
-
o(() => {
|
|
18
|
-
h || g.attach(c(m));
|
|
19
|
-
}, { scheduler: "microtask" });
|
|
20
|
-
});
|
|
21
|
-
let v = [];
|
|
22
|
-
if (t.plugins) {
|
|
23
|
-
let n = {
|
|
24
|
-
container: e,
|
|
25
|
-
dimensions: u.dimensions,
|
|
26
|
-
disposalSignal: p.signal,
|
|
27
|
-
svg: u.svg
|
|
28
|
-
};
|
|
29
|
-
for (let e of t.plugins) try {
|
|
30
|
-
e.install(n), v.push(e);
|
|
31
|
-
} catch {}
|
|
32
|
-
}
|
|
33
|
-
return {
|
|
34
|
-
get disposalSignal() {
|
|
35
|
-
return p.signal;
|
|
36
|
-
},
|
|
37
|
-
dispose() {
|
|
38
|
-
if (!h) {
|
|
39
|
-
h = !0, p.abort(), g.detach();
|
|
40
|
-
for (let e of v) try {
|
|
41
|
-
e.dispose();
|
|
42
|
-
} catch {}
|
|
43
|
-
d?.dispose(), f?.dispose(), _.dispose(), u.dispose();
|
|
44
|
-
}
|
|
45
|
-
},
|
|
46
|
-
get disposed() {
|
|
47
|
-
return h;
|
|
48
|
-
},
|
|
49
|
-
el: u.svg,
|
|
50
|
-
[Symbol.dispose]() {
|
|
51
|
-
this.dispose();
|
|
52
|
-
}
|
|
53
|
-
};
|
|
54
|
-
}
|
|
55
|
-
function l(e) {
|
|
56
|
-
let t = null;
|
|
57
|
-
return {
|
|
58
|
-
attach(n) {
|
|
59
|
-
t &&= (t.onMouseMove && e.removeEventListener("mousemove", t.onMouseMove), t.onMouseLeave && e.removeEventListener("mouseleave", t.onMouseLeave), t.onClick && e.removeEventListener("click", t.onClick), t.onKeyDown && e.removeEventListener("keydown", t.onKeyDown), null), n && (t = n, n.onMouseMove && e.addEventListener("mousemove", n.onMouseMove), n.onMouseLeave && e.addEventListener("mouseleave", n.onMouseLeave), n.onClick && e.addEventListener("click", n.onClick), n.onKeyDown && e.addEventListener("keydown", n.onKeyDown));
|
|
60
|
-
},
|
|
61
|
-
detach() {
|
|
62
|
-
this.attach(void 0);
|
|
63
|
-
}
|
|
64
|
-
};
|
|
65
|
-
}
|
|
66
|
-
function u(t, n, r) {
|
|
67
|
-
return c(t, n, (n, r, i, a) => {
|
|
68
|
-
let o = {
|
|
69
|
-
grid: e("g", {
|
|
70
|
-
"aria-hidden": "true",
|
|
71
|
-
class: "prism-grid"
|
|
72
|
-
}),
|
|
73
|
-
series: e("g", { class: "prism-series" }),
|
|
74
|
-
xAxis: e("g", { class: "prism-x-axis" }),
|
|
75
|
-
yAxis: e("g", { class: "prism-y-axis" })
|
|
76
|
-
};
|
|
77
|
-
return n.chartArea.appendChild(o.grid), n.chartArea.appendChild(o.xAxis), n.chartArea.appendChild(o.yAxis), n.chartArea.appendChild(o.series), {
|
|
78
|
-
chartArea: n.chartArea,
|
|
79
|
-
container: t,
|
|
80
|
-
dimensions: n.dimensions,
|
|
81
|
-
disposalSignal: a,
|
|
82
|
-
groups: o,
|
|
83
|
-
legend: i,
|
|
84
|
-
svg: n.svg,
|
|
85
|
-
tooltip: r
|
|
86
|
-
};
|
|
87
|
-
}, r);
|
|
88
|
-
}
|
|
89
|
-
function d(e, t, n) {
|
|
90
|
-
return c(e, t, (t, n, r, i) => ({
|
|
91
|
-
container: e,
|
|
92
|
-
dimensions: t.dimensions,
|
|
93
|
-
disposalSignal: i,
|
|
94
|
-
legend: r,
|
|
95
|
-
svg: t.svg,
|
|
96
|
-
tooltip: n
|
|
97
|
-
}), n);
|
|
98
|
-
}
|
|
99
|
-
//#endregion
|
|
100
|
-
export { s as clearCartesianDom, u as createChartScaffold, d as createRadialScaffold };
|
|
101
|
-
|
|
1
|
+
import{createSvgElement as e,removeChildren as t}from"../svg/element.js";import{PrismRenderError as n}from"../errors.js";import{createLegend as r}from"../interaction/legend.js";import{createTooltip as i}from"../interaction/tooltip.js";import{createChartBase as a}from"./chart-base.js";function clearCartesianDom(e,n,r,i){t(e.series),t(e.grid),t(e.xAxis),t(e.yAxis),n?.update([]),r?.hide(),i?.hide()}function runScaffold(e,t,o,s,c){let render=()=>{},l=a(e,{a11y:t.a11y,margin:t.margin},()=>render()),u=t.tooltip?i(e,t.tooltip):null,d=t.legend?r(e,t.legend):null,f=new AbortController,p=o(l,u,d,f.signal),m=!1,h=makeEventManager(l.svg);render=()=>{m||h.attach(s(p))};try{render()}catch(e){throw m=!0,f.abort(),h.detach(),u?.dispose(),d?.dispose(),l.dispose(),e instanceof n?e:new n(`Failed to render chart.`,{cause:e})}return{get disposalSignal(){return f.signal},dispose(){m||(m=!0,f.abort(),h.detach(),u?.dispose(),d?.dispose(),l.dispose())},get disposed(){return m},el:l.svg,update(e){if(m)throw new n(`Cannot update a disposed chart.`);c(e),render()},[Symbol.dispose](){this.dispose()}}}function makeEventManager(e){let t=null;return{attach(n){t&&=(t.onMouseMove&&e.removeEventListener(`mousemove`,t.onMouseMove),t.onMouseLeave&&e.removeEventListener(`mouseleave`,t.onMouseLeave),t.onClick&&e.removeEventListener(`click`,t.onClick),t.onKeyDown&&e.removeEventListener(`keydown`,t.onKeyDown),null),n&&(t=n,n.onMouseMove&&e.addEventListener(`mousemove`,n.onMouseMove),n.onMouseLeave&&e.addEventListener(`mouseleave`,n.onMouseLeave),n.onClick&&e.addEventListener(`click`,n.onClick),n.onKeyDown&&e.addEventListener(`keydown`,n.onKeyDown))},detach(){this.attach(void 0)}}}function createChartScaffold(t,n,r,i){return runScaffold(t,n,(n,r,i,a)=>{let o={grid:e(`g`,{"aria-hidden":`true`,class:`prism-grid`}),series:e(`g`,{class:`prism-series`}),xAxis:e(`g`,{class:`prism-x-axis`}),yAxis:e(`g`,{class:`prism-y-axis`})};return n.chartArea.appendChild(o.grid),n.chartArea.appendChild(o.xAxis),n.chartArea.appendChild(o.yAxis),n.chartArea.appendChild(o.series),{chartArea:n.chartArea,container:t,dimensions:n.dimensions,disposalSignal:a,groups:o,legend:i,svg:n.svg,tooltip:r}},r,i)}function createRadialScaffold(e,t,n,r){return runScaffold(e,t,(t,n,r,i)=>({container:e,dimensions:t.dimensions,disposalSignal:i,legend:r,svg:t.svg,tooltip:n}),n,r)}export{clearCartesianDom,createChartScaffold,createRadialScaffold};
|
|
102
2
|
//# sourceMappingURL=chart-scaffold.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"chart-scaffold.js","names":[],"sources":["../../src/core/chart-scaffold.ts"],"sourcesContent":["import type { Readable } from '@vielzeug/ripple';\n\nimport { createScope, effect } from '@vielzeug/ripple';\nimport { error } from '../_dev';\nimport type { CrosshairState } from '../interaction/crosshair';\nimport type { LegendState } from '../interaction/legend';\nimport { createLegend } from '../interaction/legend';\nimport type { TooltipState } from '../interaction/tooltip';\nimport { createTooltip } from '../interaction/tooltip';\nimport { createSvgElement, removeChildren } from '../svg/element';\nimport type { BaseChartConfig, ChartDimensions, ChartHandle, ChartPlugin, ChartPluginContext } from '../types';\nimport { createChartBase } from './chart-base';\n\nexport interface ScaffoldGroups {\n grid: SVGGElement;\n series: SVGGElement;\n xAxis: SVGGElement;\n yAxis: SVGGElement;\n}\n\n/**\n * Clears a cartesian chart's series/grid/axis groups and hides its legend/tooltip/crosshair —\n * shared by every cartesian chart factory's \"no data\" early-return so a reactive series\n * transitioning to empty leaves a fully blank chart, not a half-cleared one.\n */\nexport function clearCartesianDom(\n groups: ScaffoldGroups,\n legend: LegendState | null,\n tooltip: TooltipState | null,\n crosshair?: CrosshairState | null,\n): void {\n removeChildren(groups.series);\n removeChildren(groups.grid);\n removeChildren(groups.xAxis);\n removeChildren(groups.yAxis);\n legend?.update([]);\n tooltip?.hide();\n crosshair?.hide();\n}\n\nexport interface ScaffoldContext {\n chartArea: SVGGElement;\n container: HTMLElement;\n dimensions: Readable<ChartDimensions>;\n /** Aborted when the chart is disposed — renderers use this to stop rescheduling in-flight `requestAnimationFrame` transitions. */\n disposalSignal: AbortSignal;\n groups: ScaffoldGroups;\n legend: LegendState | null;\n svg: SVGSVGElement;\n tooltip: TooltipState | null;\n}\n\nexport interface RadialScaffoldContext {\n container: HTMLElement;\n dimensions: Readable<ChartDimensions>;\n /** Aborted when the chart is disposed — renderers use this to stop rescheduling in-flight `requestAnimationFrame` transitions. */\n disposalSignal: AbortSignal;\n legend: LegendState | null;\n svg: SVGSVGElement;\n tooltip: TooltipState | null;\n}\n\nexport interface ChartEventHandlers {\n onClick?: (event: MouseEvent) => void;\n onKeyDown?: (event: KeyboardEvent) => void;\n onMouseLeave?: (event: MouseEvent) => void;\n onMouseMove?: (event: MouseEvent) => void;\n}\n\nfunction runScaffold<TCtx>(\n container: HTMLElement,\n config: BaseChartConfig,\n buildCtx: (\n base: {\n chartArea: SVGGElement;\n dimensions: Readable<ChartDimensions>;\n svg: SVGSVGElement;\n },\n tooltip: TooltipState | null,\n legend: LegendState | null,\n disposalSignal: AbortSignal,\n ) => TCtx,\n renderFn: (ctx: TCtx) => ChartEventHandlers | undefined,\n): ChartHandle {\n const base = createChartBase(container, { a11y: config.a11y, margin: config.margin });\n const tooltip = config.tooltip ? createTooltip(container, config.tooltip) : null;\n const legend = config.legend ? createLegend(container, config.legend) : null;\n const ac = new AbortController();\n const ctx = buildCtx(base, tooltip, legend, ac.signal);\n\n let disposed = false;\n const events = makeEventManager(base.svg);\n\n const scope = createScope();\n\n scope.run(() => {\n effect(\n () => {\n if (disposed) return;\n\n events.attach(renderFn(ctx));\n },\n { scheduler: 'microtask' },\n );\n });\n\n const installedPlugins: ChartPlugin[] = [];\n\n if (config.plugins) {\n const pluginCtx: ChartPluginContext = {\n container,\n dimensions: base.dimensions,\n disposalSignal: ac.signal,\n svg: base.svg,\n };\n\n for (const plugin of config.plugins) {\n try {\n plugin.install(pluginCtx);\n installedPlugins.push(plugin);\n } catch (err) {\n error('A chart plugin threw during install() — skipping it; the rest of the chart still renders.', err);\n }\n }\n }\n\n return {\n get disposalSignal(): AbortSignal {\n return ac.signal;\n },\n\n dispose() {\n if (disposed) return;\n\n disposed = true;\n ac.abort();\n events.detach();\n\n for (const p of installedPlugins) {\n try {\n p.dispose();\n } catch (err) {\n error('A chart plugin threw during dispose() — continuing to tear down the rest of the chart.', err);\n }\n }\n\n tooltip?.dispose();\n legend?.dispose();\n scope.dispose();\n base.dispose();\n },\n\n get disposed(): boolean {\n return disposed;\n },\n\n el: base.svg,\n\n [Symbol.dispose]() {\n this.dispose();\n },\n };\n}\n\nfunction makeEventManager(svg: SVGSVGElement): {\n attach(handlers: ChartEventHandlers | undefined): void;\n detach(): void;\n} {\n let active: ChartEventHandlers | null = null;\n\n return {\n attach(handlers) {\n if (active) {\n if (active.onMouseMove) svg.removeEventListener('mousemove', active.onMouseMove);\n\n if (active.onMouseLeave) svg.removeEventListener('mouseleave', active.onMouseLeave);\n\n if (active.onClick) svg.removeEventListener('click', active.onClick);\n\n if (active.onKeyDown) svg.removeEventListener('keydown', active.onKeyDown);\n\n active = null;\n }\n\n if (!handlers) return;\n\n active = handlers;\n\n if (handlers.onMouseMove) svg.addEventListener('mousemove', handlers.onMouseMove);\n\n if (handlers.onMouseLeave) svg.addEventListener('mouseleave', handlers.onMouseLeave);\n\n if (handlers.onClick) svg.addEventListener('click', handlers.onClick);\n\n if (handlers.onKeyDown) svg.addEventListener('keydown', handlers.onKeyDown);\n },\n detach() {\n this.attach(undefined);\n },\n };\n}\n\n/**\n * Cartesian scaffold: provides grid/axis/series SVG groups and a reactive\n * render loop. `renderFn` is called inside a reactive effect; it returns\n * optional `ChartEventHandlers` that are attached/replaced on every render.\n */\nexport function createChartScaffold(\n container: HTMLElement,\n config: BaseChartConfig,\n renderFn: (ctx: ScaffoldContext) => ChartEventHandlers | undefined,\n): ChartHandle {\n return runScaffold(\n container,\n config,\n (base, tooltip, legend, disposalSignal) => {\n const groups: ScaffoldGroups = {\n // Grid lines are purely decorative relative to the root svg's own role=\"img\"/aria-label.\n // Axis groups are NOT hidden wholesale — they can contain a meaningful `.prism-axis-title`;\n // `renderAxis` marks its own decorative tick lines/labels individually instead.\n grid: createSvgElement('g', { 'aria-hidden': 'true', class: 'prism-grid' }),\n series: createSvgElement('g', { class: 'prism-series' }),\n xAxis: createSvgElement('g', { class: 'prism-x-axis' }),\n yAxis: createSvgElement('g', { class: 'prism-y-axis' }),\n };\n\n base.chartArea.appendChild(groups.grid);\n base.chartArea.appendChild(groups.xAxis);\n base.chartArea.appendChild(groups.yAxis);\n base.chartArea.appendChild(groups.series);\n\n return {\n chartArea: base.chartArea,\n container,\n dimensions: base.dimensions,\n disposalSignal,\n groups,\n legend,\n svg: base.svg,\n tooltip,\n } satisfies ScaffoldContext;\n },\n renderFn,\n );\n}\n\n/**\n * Radial scaffold: for charts that do not use cartesian axis groups\n * (pie, donut, semi). Provides only tooltip, legend, and the SVG root.\n */\nexport function createRadialScaffold(\n container: HTMLElement,\n config: BaseChartConfig,\n renderFn: (ctx: RadialScaffoldContext) => ChartEventHandlers | undefined,\n): ChartHandle {\n return runScaffold(\n container,\n config,\n (base, tooltip, legend, disposalSignal) =>\n ({\n container,\n dimensions: base.dimensions,\n disposalSignal,\n legend,\n svg: base.svg,\n tooltip,\n }) satisfies RadialScaffoldContext,\n renderFn,\n );\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"chart-scaffold.js","names":[],"sources":["../../src/core/chart-scaffold.ts"],"sourcesContent":["import { PrismRenderError } from '../errors';\nimport type { CrosshairState } from '../interaction/crosshair';\nimport type { LegendState } from '../interaction/legend';\nimport { createLegend } from '../interaction/legend';\nimport type { TooltipState } from '../interaction/tooltip';\nimport { createTooltip } from '../interaction/tooltip';\nimport { createSvgElement, removeChildren } from '../svg/element';\nimport type { BaseChartConfig, ChartDimensions, ChartHandle } from '../types';\nimport { createChartBase } from './chart-base';\n\nexport interface ScaffoldGroups {\n grid: SVGGElement;\n series: SVGGElement;\n xAxis: SVGGElement;\n yAxis: SVGGElement;\n}\n\n/**\n * Clears a cartesian chart's series/grid/axis groups and hides its legend/tooltip/crosshair —\n * shared by every cartesian chart factory's \"no data\" early-return so an update\n * to empty data leaves a fully blank chart, not a half-cleared one.\n */\nexport function clearCartesianDom(\n groups: ScaffoldGroups,\n legend: LegendState | null,\n tooltip: TooltipState | null,\n crosshair?: CrosshairState | null,\n): void {\n removeChildren(groups.series);\n removeChildren(groups.grid);\n removeChildren(groups.xAxis);\n removeChildren(groups.yAxis);\n legend?.update([]);\n tooltip?.hide();\n crosshair?.hide();\n}\n\nexport interface ScaffoldContext {\n chartArea: SVGGElement;\n container: HTMLElement;\n dimensions: ChartDimensions;\n /** Aborted when the chart is disposed — renderers use this to stop rescheduling in-flight `requestAnimationFrame` transitions. */\n disposalSignal: AbortSignal;\n groups: ScaffoldGroups;\n legend: LegendState | null;\n svg: SVGSVGElement;\n tooltip: TooltipState | null;\n}\n\nexport interface RadialScaffoldContext {\n container: HTMLElement;\n dimensions: ChartDimensions;\n /** Aborted when the chart is disposed — renderers use this to stop rescheduling in-flight `requestAnimationFrame` transitions. */\n disposalSignal: AbortSignal;\n legend: LegendState | null;\n svg: SVGSVGElement;\n tooltip: TooltipState | null;\n}\n\nexport interface ChartEventHandlers {\n onClick?: (event: MouseEvent) => void;\n onKeyDown?: (event: KeyboardEvent) => void;\n onMouseLeave?: (event: MouseEvent) => void;\n onMouseMove?: (event: MouseEvent) => void;\n}\n\nfunction runScaffold<TCtx, TData>(\n container: HTMLElement,\n config: BaseChartConfig,\n buildCtx: (\n base: {\n chartArea: SVGGElement;\n dimensions: ChartDimensions;\n svg: SVGSVGElement;\n },\n tooltip: TooltipState | null,\n legend: LegendState | null,\n disposalSignal: AbortSignal,\n ) => TCtx,\n renderFn: (ctx: TCtx) => ChartEventHandlers | undefined,\n updateData: (data: TData) => void,\n): ChartHandle<TData> {\n let render = () => {};\n const base = createChartBase(container, { a11y: config.a11y, margin: config.margin }, () => render());\n const tooltip = config.tooltip ? createTooltip(container, config.tooltip) : null;\n const legend = config.legend ? createLegend(container, config.legend) : null;\n const ac = new AbortController();\n const ctx = buildCtx(base, tooltip, legend, ac.signal);\n\n let disposed = false;\n const events = makeEventManager(base.svg);\n\n render = () => {\n if (disposed) return;\n events.attach(renderFn(ctx));\n };\n\n try {\n render();\n } catch (error) {\n disposed = true;\n ac.abort();\n events.detach();\n tooltip?.dispose();\n legend?.dispose();\n base.dispose();\n throw error instanceof PrismRenderError ? error : new PrismRenderError('Failed to render chart.', { cause: error });\n }\n\n return {\n get disposalSignal(): AbortSignal {\n return ac.signal;\n },\n\n dispose() {\n if (disposed) return;\n\n disposed = true;\n ac.abort();\n events.detach();\n tooltip?.dispose();\n legend?.dispose();\n base.dispose();\n },\n\n get disposed(): boolean {\n return disposed;\n },\n\n el: base.svg,\n\n update(data) {\n if (disposed) throw new PrismRenderError('Cannot update a disposed chart.');\n updateData(data);\n render();\n },\n\n [Symbol.dispose]() {\n this.dispose();\n },\n };\n}\n\nfunction makeEventManager(svg: SVGSVGElement): {\n attach(handlers: ChartEventHandlers | undefined): void;\n detach(): void;\n} {\n let active: ChartEventHandlers | null = null;\n\n return {\n attach(handlers) {\n if (active) {\n if (active.onMouseMove) svg.removeEventListener('mousemove', active.onMouseMove);\n\n if (active.onMouseLeave) svg.removeEventListener('mouseleave', active.onMouseLeave);\n\n if (active.onClick) svg.removeEventListener('click', active.onClick);\n\n if (active.onKeyDown) svg.removeEventListener('keydown', active.onKeyDown);\n\n active = null;\n }\n\n if (!handlers) return;\n\n active = handlers;\n\n if (handlers.onMouseMove) svg.addEventListener('mousemove', handlers.onMouseMove);\n\n if (handlers.onMouseLeave) svg.addEventListener('mouseleave', handlers.onMouseLeave);\n\n if (handlers.onClick) svg.addEventListener('click', handlers.onClick);\n\n if (handlers.onKeyDown) svg.addEventListener('keydown', handlers.onKeyDown);\n },\n detach() {\n this.attach(undefined);\n },\n };\n}\n\n/**\n * Cartesian scaffold: provides grid/axis/series SVG groups and a render loop.\n * `renderFn` returns optional `ChartEventHandlers` that are attached/replaced\n * after every data update or resize.\n */\nexport function createChartScaffold<TData>(\n container: HTMLElement,\n config: BaseChartConfig,\n renderFn: (ctx: ScaffoldContext) => ChartEventHandlers | undefined,\n updateData: (data: TData) => void,\n): ChartHandle<TData> {\n return runScaffold(\n container,\n config,\n (base, tooltip, legend, disposalSignal) => {\n const groups: ScaffoldGroups = {\n // Grid lines are purely decorative relative to the root svg's own role=\"img\"/aria-label.\n // Axis groups are NOT hidden wholesale — they can contain a meaningful `.prism-axis-title`;\n // `renderAxis` marks its own decorative tick lines/labels individually instead.\n grid: createSvgElement('g', { 'aria-hidden': 'true', class: 'prism-grid' }),\n series: createSvgElement('g', { class: 'prism-series' }),\n xAxis: createSvgElement('g', { class: 'prism-x-axis' }),\n yAxis: createSvgElement('g', { class: 'prism-y-axis' }),\n };\n\n base.chartArea.appendChild(groups.grid);\n base.chartArea.appendChild(groups.xAxis);\n base.chartArea.appendChild(groups.yAxis);\n base.chartArea.appendChild(groups.series);\n\n return {\n chartArea: base.chartArea,\n container,\n dimensions: base.dimensions,\n disposalSignal,\n groups,\n legend,\n svg: base.svg,\n tooltip,\n } satisfies ScaffoldContext;\n },\n renderFn,\n updateData,\n );\n}\n\n/**\n * Radial scaffold: for charts that do not use cartesian axis groups\n * (pie, donut, semi). Provides only tooltip, legend, and the SVG root.\n */\nexport function createRadialScaffold<TData>(\n container: HTMLElement,\n config: BaseChartConfig,\n renderFn: (ctx: RadialScaffoldContext) => ChartEventHandlers | undefined,\n updateData: (data: TData) => void,\n): ChartHandle<TData> {\n return runScaffold(\n container,\n config,\n (base, tooltip, legend, disposalSignal) =>\n ({\n container,\n dimensions: base.dimensions,\n disposalSignal,\n legend,\n svg: base.svg,\n tooltip,\n }) satisfies RadialScaffoldContext,\n renderFn,\n updateData,\n );\n}\n"],"mappings":"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"}
|
package/dist/core/index.d.ts
CHANGED
|
@@ -3,6 +3,5 @@ export { createChartBase } from './chart-base';
|
|
|
3
3
|
export type { ChartEventHandlers, RadialScaffoldContext, ScaffoldContext, ScaffoldGroups } from './chart-scaffold';
|
|
4
4
|
export { createChartScaffold, createRadialScaffold } from './chart-scaffold';
|
|
5
5
|
export { chartArea, resolveMargin } from './layout';
|
|
6
|
-
export { resolveMaybeSignal } from './resolve';
|
|
7
6
|
export { observeResize } from './responsive';
|
|
8
7
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/core/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/core/index.ts"],"names":[],"mappings":"AAAA,YAAY,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAC9C,OAAO,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAC/C,YAAY,EAAE,kBAAkB,EAAE,qBAAqB,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AACnH,OAAO,EAAE,mBAAmB,EAAE,oBAAoB,EAAE,MAAM,kBAAkB,CAAC;AAC7E,OAAO,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACpD,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/core/index.ts"],"names":[],"mappings":"AAAA,YAAY,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAC9C,OAAO,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAC/C,YAAY,EAAE,kBAAkB,EAAE,qBAAqB,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AACnH,OAAO,EAAE,mBAAmB,EAAE,oBAAoB,EAAE,MAAM,kBAAkB,CAAC;AAC7E,OAAO,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACpD,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC"}
|
package/dist/core/layout.cjs
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
var e={bottom:
|
|
1
|
+
var e={bottom:48,left:50,right:20,top:20};function resolveMargin(t){return{...e,...t}}function chartArea(e,t,n){return{height:Math.max(0,t-n.top-n.bottom),width:Math.max(0,e-n.left-n.right)}}exports.chartArea=chartArea,exports.resolveMargin=resolveMargin;
|
|
2
2
|
//# sourceMappingURL=layout.cjs.map
|
package/dist/core/layout.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"layout.cjs","names":[],"sources":["../../src/core/layout.ts"],"sourcesContent":["import type { ChartMargin } from '../types';\n\nconst DEFAULT_MARGIN: ChartMargin = { bottom:
|
|
1
|
+
{"version":3,"file":"layout.cjs","names":[],"sources":["../../src/core/layout.ts"],"sourcesContent":["import type { ChartMargin } from '../types';\n\nconst DEFAULT_MARGIN: ChartMargin = { bottom: 48, left: 50, right: 20, top: 20 };\n\nexport function resolveMargin(margin?: Partial<ChartMargin>): ChartMargin {\n return { ...DEFAULT_MARGIN, ...margin };\n}\n\nexport function chartArea(width: number, height: number, margin: ChartMargin): { height: number; width: number } {\n return {\n height: Math.max(0, height - margin.top - margin.bottom),\n width: Math.max(0, width - margin.left - margin.right),\n };\n}\n"],"mappings":"AAEA,IAAM,EAA8B,CAAE,OAAQ,GAAI,KAAM,GAAI,MAAO,GAAI,IAAK,EAAG,EAE/E,SAAgB,cAAc,EAA4C,CACxE,MAAO,CAAE,GAAG,EAAgB,GAAG,CAAO,CACxC,CAEA,SAAgB,UAAU,EAAe,EAAgB,EAAwD,CAC/G,MAAO,CACL,OAAQ,KAAK,IAAI,EAAG,EAAS,EAAO,IAAM,EAAO,MAAM,EACvD,MAAO,KAAK,IAAI,EAAG,EAAQ,EAAO,KAAO,EAAO,KAAK,CACvD,CACF"}
|
package/dist/core/layout.js
CHANGED
|
@@ -1,23 +1,2 @@
|
|
|
1
|
-
|
|
2
|
-
var e = {
|
|
3
|
-
bottom: 40,
|
|
4
|
-
left: 50,
|
|
5
|
-
right: 20,
|
|
6
|
-
top: 20
|
|
7
|
-
};
|
|
8
|
-
function t(t) {
|
|
9
|
-
return {
|
|
10
|
-
...e,
|
|
11
|
-
...t
|
|
12
|
-
};
|
|
13
|
-
}
|
|
14
|
-
function n(e, t, n) {
|
|
15
|
-
return {
|
|
16
|
-
height: Math.max(0, t - n.top - n.bottom),
|
|
17
|
-
width: Math.max(0, e - n.left - n.right)
|
|
18
|
-
};
|
|
19
|
-
}
|
|
20
|
-
//#endregion
|
|
21
|
-
export { n as chartArea, t as resolveMargin };
|
|
22
|
-
|
|
1
|
+
var e={bottom:48,left:50,right:20,top:20};function resolveMargin(t){return{...e,...t}}function chartArea(e,t,n){return{height:Math.max(0,t-n.top-n.bottom),width:Math.max(0,e-n.left-n.right)}}export{chartArea,resolveMargin};
|
|
23
2
|
//# sourceMappingURL=layout.js.map
|
package/dist/core/layout.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"layout.js","names":[],"sources":["../../src/core/layout.ts"],"sourcesContent":["import type { ChartMargin } from '../types';\n\nconst DEFAULT_MARGIN: ChartMargin = { bottom:
|
|
1
|
+
{"version":3,"file":"layout.js","names":[],"sources":["../../src/core/layout.ts"],"sourcesContent":["import type { ChartMargin } from '../types';\n\nconst DEFAULT_MARGIN: ChartMargin = { bottom: 48, left: 50, right: 20, top: 20 };\n\nexport function resolveMargin(margin?: Partial<ChartMargin>): ChartMargin {\n return { ...DEFAULT_MARGIN, ...margin };\n}\n\nexport function chartArea(width: number, height: number, margin: ChartMargin): { height: number; width: number } {\n return {\n height: Math.max(0, height - margin.top - margin.bottom),\n width: Math.max(0, width - margin.left - margin.right),\n };\n}\n"],"mappings":"AAEA,IAAM,EAA8B,CAAE,OAAQ,GAAI,KAAM,GAAI,MAAO,GAAI,IAAK,EAAG,EAE/E,SAAgB,cAAc,EAA4C,CACxE,MAAO,CAAE,GAAG,EAAgB,GAAG,CAAO,CACxC,CAEA,SAAgB,UAAU,EAAe,EAAgB,EAAwD,CAC/G,MAAO,CACL,OAAQ,KAAK,IAAI,EAAG,EAAS,EAAO,IAAM,EAAO,MAAM,EACvD,MAAO,KAAK,IAAI,EAAG,EAAQ,EAAO,KAAO,EAAO,KAAK,CACvD,CACF"}
|
package/dist/core/responsive.cjs
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
function
|
|
1
|
+
function observeResize(e,t){let n=null,r=new ResizeObserver(e=>{n!==null&&cancelAnimationFrame(n),n=requestAnimationFrame(()=>{n=null;let r=e[0];if(r){let{height:e,width:n}=r.contentRect;t(n,e)}})});return r.observe(e),()=>{n!==null&&cancelAnimationFrame(n),r.disconnect()}}exports.observeResize=observeResize;
|
|
2
2
|
//# sourceMappingURL=responsive.cjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"responsive.cjs","names":[],"sources":["../../src/core/responsive.ts"],"sourcesContent":["export function observeResize(el: HTMLElement, callback: (width: number, height: number) => void): () => void {\n let rafId: number | null = null;\n\n const observer = new ResizeObserver((entries) => {\n if (rafId !== null) cancelAnimationFrame(rafId);\n\n rafId = requestAnimationFrame(() => {\n rafId = null;\n\n const entry = entries[0];\n\n if (entry) {\n const { height, width } = entry.contentRect;\n\n callback(width, height);\n }\n });\n });\n\n observer.observe(el);\n\n return () => {\n if (rafId !== null) cancelAnimationFrame(rafId);\n\n observer.disconnect();\n };\n}\n"],"mappings":"AAAA,SAAgB,
|
|
1
|
+
{"version":3,"file":"responsive.cjs","names":[],"sources":["../../src/core/responsive.ts"],"sourcesContent":["export function observeResize(el: HTMLElement, callback: (width: number, height: number) => void): () => void {\n let rafId: number | null = null;\n\n const observer = new ResizeObserver((entries) => {\n if (rafId !== null) cancelAnimationFrame(rafId);\n\n rafId = requestAnimationFrame(() => {\n rafId = null;\n\n const entry = entries[0];\n\n if (entry) {\n const { height, width } = entry.contentRect;\n\n callback(width, height);\n }\n });\n });\n\n observer.observe(el);\n\n return () => {\n if (rafId !== null) cancelAnimationFrame(rafId);\n\n observer.disconnect();\n };\n}\n"],"mappings":"AAAA,SAAgB,cAAc,EAAiB,EAA+D,CAC5G,IAAI,EAAuB,KAErB,EAAW,IAAI,eAAgB,GAAY,CAC3C,IAAU,MAAM,qBAAqB,CAAK,EAE9C,EAAQ,0BAA4B,CAClC,EAAQ,KAER,IAAM,EAAQ,EAAQ,GAEtB,GAAI,EAAO,CACT,GAAM,CAAE,SAAQ,SAAU,EAAM,YAEhC,EAAS,EAAO,CAAM,CACxB,CACF,CAAC,CACH,CAAC,EAID,OAFA,EAAS,QAAQ,CAAE,MAEN,CACP,IAAU,MAAM,qBAAqB,CAAK,EAE9C,EAAS,WAAW,CACtB,CACF"}
|
package/dist/core/responsive.js
CHANGED
|
@@ -1,20 +1,2 @@
|
|
|
1
|
-
|
|
2
|
-
function e(e, t) {
|
|
3
|
-
let n = null, r = new ResizeObserver((e) => {
|
|
4
|
-
n !== null && cancelAnimationFrame(n), n = requestAnimationFrame(() => {
|
|
5
|
-
n = null;
|
|
6
|
-
let r = e[0];
|
|
7
|
-
if (r) {
|
|
8
|
-
let { height: e, width: n } = r.contentRect;
|
|
9
|
-
t(n, e);
|
|
10
|
-
}
|
|
11
|
-
});
|
|
12
|
-
});
|
|
13
|
-
return r.observe(e), () => {
|
|
14
|
-
n !== null && cancelAnimationFrame(n), r.disconnect();
|
|
15
|
-
};
|
|
16
|
-
}
|
|
17
|
-
//#endregion
|
|
18
|
-
export { e as observeResize };
|
|
19
|
-
|
|
1
|
+
function observeResize(e,t){let n=null,r=new ResizeObserver(e=>{n!==null&&cancelAnimationFrame(n),n=requestAnimationFrame(()=>{n=null;let r=e[0];if(r){let{height:e,width:n}=r.contentRect;t(n,e)}})});return r.observe(e),()=>{n!==null&&cancelAnimationFrame(n),r.disconnect()}}export{observeResize};
|
|
20
2
|
//# sourceMappingURL=responsive.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"responsive.js","names":[],"sources":["../../src/core/responsive.ts"],"sourcesContent":["export function observeResize(el: HTMLElement, callback: (width: number, height: number) => void): () => void {\n let rafId: number | null = null;\n\n const observer = new ResizeObserver((entries) => {\n if (rafId !== null) cancelAnimationFrame(rafId);\n\n rafId = requestAnimationFrame(() => {\n rafId = null;\n\n const entry = entries[0];\n\n if (entry) {\n const { height, width } = entry.contentRect;\n\n callback(width, height);\n }\n });\n });\n\n observer.observe(el);\n\n return () => {\n if (rafId !== null) cancelAnimationFrame(rafId);\n\n observer.disconnect();\n };\n}\n"],"mappings":"
|
|
1
|
+
{"version":3,"file":"responsive.js","names":[],"sources":["../../src/core/responsive.ts"],"sourcesContent":["export function observeResize(el: HTMLElement, callback: (width: number, height: number) => void): () => void {\n let rafId: number | null = null;\n\n const observer = new ResizeObserver((entries) => {\n if (rafId !== null) cancelAnimationFrame(rafId);\n\n rafId = requestAnimationFrame(() => {\n rafId = null;\n\n const entry = entries[0];\n\n if (entry) {\n const { height, width } = entry.contentRect;\n\n callback(width, height);\n }\n });\n });\n\n observer.observe(el);\n\n return () => {\n if (rafId !== null) cancelAnimationFrame(rafId);\n\n observer.disconnect();\n };\n}\n"],"mappings":"AAAA,SAAgB,cAAc,EAAiB,EAA+D,CAC5G,IAAI,EAAuB,KAErB,EAAW,IAAI,eAAgB,GAAY,CAC3C,IAAU,MAAM,qBAAqB,CAAK,EAE9C,EAAQ,0BAA4B,CAClC,EAAQ,KAER,IAAM,EAAQ,EAAQ,GAEtB,GAAI,EAAO,CACT,GAAM,CAAE,SAAQ,SAAU,EAAM,YAEhC,EAAS,EAAO,CAAM,CACxB,CACF,CAAC,CACH,CAAC,EAID,OAFA,EAAS,QAAQ,CAAE,MAEN,CACP,IAAU,MAAM,qBAAqB,CAAK,EAE9C,EAAS,WAAW,CACtB,CACF"}
|
package/dist/devtools.cjs
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});function
|
|
1
|
+
Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});function debugChart(e,t){let n=`[prism:${t?.label??`chart`}]`;console.debug(`${n} mounted`);let r=new ResizeObserver(e=>{let t=e[0];if(t){let{height:e,width:r}=t.contentRect;console.debug(`${n} resized ${Math.round(r)}×${Math.round(e)}`)}});return r.observe(e.el),e.disposalSignal.addEventListener(`abort`,()=>{r.disconnect(),console.debug(`${n} disposed`)},{once:!0}),e}exports.debugChart=debugChart;
|
|
2
2
|
//# sourceMappingURL=devtools.cjs.map
|
package/dist/devtools.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"devtools.cjs","names":[],"sources":["../src/devtools/index.ts"],"sourcesContent":["/**\n * @vielzeug/prism — debug utilities for chart visualisation.\n *\n * Import from the dedicated sub-path so debug code is tree-shaken from\n * production bundles:\n * ```ts\n * import { debugChart } from '@vielzeug/prism/devtools';\n * ```\n *\n * Internal validation warnings (misuse of the public API) are emitted\n * automatically in development builds and live in the private `src/_dev.ts`\n * module. They are not part of this sub-path.\n */\n\nimport type { ChartHandle } from '../types';\n\n/** Options for {@link debugChart}. */\nexport interface DebugChartOptions {\n /**\n * Label used in log prefixes. Defaults to `'chart'`, producing `[prism:chart]`.\n * Useful when debugging multiple charts on the same page so their log output\n * can be distinguished:\n * ```ts\n * debugChart(createLineChart(el, config), { label: 'revenue' });\n * // [prism:revenue] mounted\n * ```\n */\n label?: string;\n}\n\n/**\n * Wraps an already-created {@link ChartHandle} with lifecycle logging pre-wired to\n * `console.debug`, imported from a dedicated sub-path so `console.debug` references\n * and the `ResizeObserver` it uses are tree-shaken from production bundles when this\n * sub-path is not imported.\n *\n * Logs the chart's mount, every resize (via its own `ResizeObserver` on `handle.el`,\n * independent of the chart's internal one), and disposal, each with `[prism:<label>]`\n * prefixes. Returns the same handle unchanged so it can wrap any `create*Chart()` call\n * in place.\n *\n * @example\n * ```ts\n * import { createLineChart } from '@vielzeug/prism';\n * import { debugChart } from '@vielzeug/prism/devtools';\n *\n * const chart = debugChart(createLineChart(container, config), { label: 'revenue' });\n * // [prism:revenue] mounted\n * // [prism:revenue] resized 600×300\n * chart.dispose();\n * // [prism:revenue] disposed\n * ```\n */\nexport function debugChart<T extends ChartHandle>(handle: T, options?: DebugChartOptions): T {\n const prefix = `[prism:${options?.label ?? 'chart'}]`;\n\n console.debug(`${prefix} mounted`);\n\n const resizeObserver = new ResizeObserver((entries) => {\n const entry = entries[0];\n\n if (entry) {\n const { height, width } = entry.contentRect;\n\n console.debug(`${prefix} resized ${Math.round(width)}×${Math.round(height)}`);\n }\n });\n\n resizeObserver.observe(handle.el);\n\n handle.disposalSignal.addEventListener(\n 'abort',\n () => {\n resizeObserver.disconnect();\n console.debug(`${prefix} disposed`);\n },\n { once: true },\n );\n\n return handle;\n}\n"],"mappings":"mEAqDA,SAAgB,
|
|
1
|
+
{"version":3,"file":"devtools.cjs","names":[],"sources":["../src/devtools/index.ts"],"sourcesContent":["/**\n * @vielzeug/prism — debug utilities for chart visualisation.\n *\n * Import from the dedicated sub-path so debug code is tree-shaken from\n * production bundles:\n * ```ts\n * import { debugChart } from '@vielzeug/prism/devtools';\n * ```\n *\n * Internal validation warnings (misuse of the public API) are emitted\n * automatically in development builds and live in the private `src/_dev.ts`\n * module. They are not part of this sub-path.\n */\n\nimport type { ChartHandle } from '../types';\n\n/** Options for {@link debugChart}. */\nexport interface DebugChartOptions {\n /**\n * Label used in log prefixes. Defaults to `'chart'`, producing `[prism:chart]`.\n * Useful when debugging multiple charts on the same page so their log output\n * can be distinguished:\n * ```ts\n * debugChart(createLineChart(el, config), { label: 'revenue' });\n * // [prism:revenue] mounted\n * ```\n */\n label?: string;\n}\n\n/**\n * Wraps an already-created {@link ChartHandle} with lifecycle logging pre-wired to\n * `console.debug`, imported from a dedicated sub-path so `console.debug` references\n * and the `ResizeObserver` it uses are tree-shaken from production bundles when this\n * sub-path is not imported.\n *\n * Logs the chart's mount, every resize (via its own `ResizeObserver` on `handle.el`,\n * independent of the chart's internal one), and disposal, each with `[prism:<label>]`\n * prefixes. Returns the same handle unchanged so it can wrap any `create*Chart()` call\n * in place.\n *\n * @example\n * ```ts\n * import { createLineChart } from '@vielzeug/prism';\n * import { debugChart } from '@vielzeug/prism/devtools';\n *\n * const chart = debugChart(createLineChart(container, config), { label: 'revenue' });\n * // [prism:revenue] mounted\n * // [prism:revenue] resized 600×300\n * chart.dispose();\n * // [prism:revenue] disposed\n * ```\n */\nexport function debugChart<T extends ChartHandle>(handle: T, options?: DebugChartOptions): T {\n const prefix = `[prism:${options?.label ?? 'chart'}]`;\n\n console.debug(`${prefix} mounted`);\n\n const resizeObserver = new ResizeObserver((entries) => {\n const entry = entries[0];\n\n if (entry) {\n const { height, width } = entry.contentRect;\n\n console.debug(`${prefix} resized ${Math.round(width)}×${Math.round(height)}`);\n }\n });\n\n resizeObserver.observe(handle.el);\n\n handle.disposalSignal.addEventListener(\n 'abort',\n () => {\n resizeObserver.disconnect();\n console.debug(`${prefix} disposed`);\n },\n { once: true },\n );\n\n return handle;\n}\n"],"mappings":"mEAqDA,SAAgB,WAAkC,EAAW,EAAgC,CAC3F,IAAM,EAAS,UAAU,GAAS,OAAS,QAAQ,GAEnD,QAAQ,MAAM,GAAG,EAAO,SAAS,EAEjC,IAAM,EAAiB,IAAI,eAAgB,GAAY,CACrD,IAAM,EAAQ,EAAQ,GAEtB,GAAI,EAAO,CACT,GAAM,CAAE,SAAQ,SAAU,EAAM,YAEhC,QAAQ,MAAM,GAAG,EAAO,YAAY,KAAK,MAAM,CAAK,EAAE,GAAG,KAAK,MAAM,CAAM,GAAG,CAC/E,CACF,CAAC,EAaD,OAXA,EAAe,QAAQ,EAAO,EAAE,EAEhC,EAAO,eAAe,iBACpB,YACM,CACJ,EAAe,WAAW,EAC1B,QAAQ,MAAM,GAAG,EAAO,UAAU,CACpC,EACA,CAAE,KAAM,EAAK,CACf,EAEO,CACT"}
|
package/dist/devtools.js
CHANGED
|
@@ -1,19 +1,2 @@
|
|
|
1
|
-
|
|
2
|
-
function e(e, t) {
|
|
3
|
-
let n = `[prism:${t?.label ?? "chart"}]`;
|
|
4
|
-
console.debug(`${n} mounted`);
|
|
5
|
-
let r = new ResizeObserver((e) => {
|
|
6
|
-
let t = e[0];
|
|
7
|
-
if (t) {
|
|
8
|
-
let { height: e, width: r } = t.contentRect;
|
|
9
|
-
console.debug(`${n} resized ${Math.round(r)}×${Math.round(e)}`);
|
|
10
|
-
}
|
|
11
|
-
});
|
|
12
|
-
return r.observe(e.el), e.disposalSignal.addEventListener("abort", () => {
|
|
13
|
-
r.disconnect(), console.debug(`${n} disposed`);
|
|
14
|
-
}, { once: !0 }), e;
|
|
15
|
-
}
|
|
16
|
-
//#endregion
|
|
17
|
-
export { e as debugChart };
|
|
18
|
-
|
|
1
|
+
function debugChart(e,t){let n=`[prism:${t?.label??`chart`}]`;console.debug(`${n} mounted`);let r=new ResizeObserver(e=>{let t=e[0];if(t){let{height:e,width:r}=t.contentRect;console.debug(`${n} resized ${Math.round(r)}×${Math.round(e)}`)}});return r.observe(e.el),e.disposalSignal.addEventListener(`abort`,()=>{r.disconnect(),console.debug(`${n} disposed`)},{once:!0}),e}export{debugChart};
|
|
19
2
|
//# sourceMappingURL=devtools.js.map
|
package/dist/devtools.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"devtools.js","names":[],"sources":["../src/devtools/index.ts"],"sourcesContent":["/**\n * @vielzeug/prism — debug utilities for chart visualisation.\n *\n * Import from the dedicated sub-path so debug code is tree-shaken from\n * production bundles:\n * ```ts\n * import { debugChart } from '@vielzeug/prism/devtools';\n * ```\n *\n * Internal validation warnings (misuse of the public API) are emitted\n * automatically in development builds and live in the private `src/_dev.ts`\n * module. They are not part of this sub-path.\n */\n\nimport type { ChartHandle } from '../types';\n\n/** Options for {@link debugChart}. */\nexport interface DebugChartOptions {\n /**\n * Label used in log prefixes. Defaults to `'chart'`, producing `[prism:chart]`.\n * Useful when debugging multiple charts on the same page so their log output\n * can be distinguished:\n * ```ts\n * debugChart(createLineChart(el, config), { label: 'revenue' });\n * // [prism:revenue] mounted\n * ```\n */\n label?: string;\n}\n\n/**\n * Wraps an already-created {@link ChartHandle} with lifecycle logging pre-wired to\n * `console.debug`, imported from a dedicated sub-path so `console.debug` references\n * and the `ResizeObserver` it uses are tree-shaken from production bundles when this\n * sub-path is not imported.\n *\n * Logs the chart's mount, every resize (via its own `ResizeObserver` on `handle.el`,\n * independent of the chart's internal one), and disposal, each with `[prism:<label>]`\n * prefixes. Returns the same handle unchanged so it can wrap any `create*Chart()` call\n * in place.\n *\n * @example\n * ```ts\n * import { createLineChart } from '@vielzeug/prism';\n * import { debugChart } from '@vielzeug/prism/devtools';\n *\n * const chart = debugChart(createLineChart(container, config), { label: 'revenue' });\n * // [prism:revenue] mounted\n * // [prism:revenue] resized 600×300\n * chart.dispose();\n * // [prism:revenue] disposed\n * ```\n */\nexport function debugChart<T extends ChartHandle>(handle: T, options?: DebugChartOptions): T {\n const prefix = `[prism:${options?.label ?? 'chart'}]`;\n\n console.debug(`${prefix} mounted`);\n\n const resizeObserver = new ResizeObserver((entries) => {\n const entry = entries[0];\n\n if (entry) {\n const { height, width } = entry.contentRect;\n\n console.debug(`${prefix} resized ${Math.round(width)}×${Math.round(height)}`);\n }\n });\n\n resizeObserver.observe(handle.el);\n\n handle.disposalSignal.addEventListener(\n 'abort',\n () => {\n resizeObserver.disconnect();\n console.debug(`${prefix} disposed`);\n },\n { once: true },\n );\n\n return handle;\n}\n"],"mappings":"
|
|
1
|
+
{"version":3,"file":"devtools.js","names":[],"sources":["../src/devtools/index.ts"],"sourcesContent":["/**\n * @vielzeug/prism — debug utilities for chart visualisation.\n *\n * Import from the dedicated sub-path so debug code is tree-shaken from\n * production bundles:\n * ```ts\n * import { debugChart } from '@vielzeug/prism/devtools';\n * ```\n *\n * Internal validation warnings (misuse of the public API) are emitted\n * automatically in development builds and live in the private `src/_dev.ts`\n * module. They are not part of this sub-path.\n */\n\nimport type { ChartHandle } from '../types';\n\n/** Options for {@link debugChart}. */\nexport interface DebugChartOptions {\n /**\n * Label used in log prefixes. Defaults to `'chart'`, producing `[prism:chart]`.\n * Useful when debugging multiple charts on the same page so their log output\n * can be distinguished:\n * ```ts\n * debugChart(createLineChart(el, config), { label: 'revenue' });\n * // [prism:revenue] mounted\n * ```\n */\n label?: string;\n}\n\n/**\n * Wraps an already-created {@link ChartHandle} with lifecycle logging pre-wired to\n * `console.debug`, imported from a dedicated sub-path so `console.debug` references\n * and the `ResizeObserver` it uses are tree-shaken from production bundles when this\n * sub-path is not imported.\n *\n * Logs the chart's mount, every resize (via its own `ResizeObserver` on `handle.el`,\n * independent of the chart's internal one), and disposal, each with `[prism:<label>]`\n * prefixes. Returns the same handle unchanged so it can wrap any `create*Chart()` call\n * in place.\n *\n * @example\n * ```ts\n * import { createLineChart } from '@vielzeug/prism';\n * import { debugChart } from '@vielzeug/prism/devtools';\n *\n * const chart = debugChart(createLineChart(container, config), { label: 'revenue' });\n * // [prism:revenue] mounted\n * // [prism:revenue] resized 600×300\n * chart.dispose();\n * // [prism:revenue] disposed\n * ```\n */\nexport function debugChart<T extends ChartHandle>(handle: T, options?: DebugChartOptions): T {\n const prefix = `[prism:${options?.label ?? 'chart'}]`;\n\n console.debug(`${prefix} mounted`);\n\n const resizeObserver = new ResizeObserver((entries) => {\n const entry = entries[0];\n\n if (entry) {\n const { height, width } = entry.contentRect;\n\n console.debug(`${prefix} resized ${Math.round(width)}×${Math.round(height)}`);\n }\n });\n\n resizeObserver.observe(handle.el);\n\n handle.disposalSignal.addEventListener(\n 'abort',\n () => {\n resizeObserver.disconnect();\n console.debug(`${prefix} disposed`);\n },\n { once: true },\n );\n\n return handle;\n}\n"],"mappings":"AAqDA,SAAgB,WAAkC,EAAW,EAAgC,CAC3F,IAAM,EAAS,UAAU,GAAS,OAAS,QAAQ,GAEnD,QAAQ,MAAM,GAAG,EAAO,SAAS,EAEjC,IAAM,EAAiB,IAAI,eAAgB,GAAY,CACrD,IAAM,EAAQ,EAAQ,GAEtB,GAAI,EAAO,CACT,GAAM,CAAE,SAAQ,SAAU,EAAM,YAEhC,QAAQ,MAAM,GAAG,EAAO,YAAY,KAAK,MAAM,CAAK,EAAE,GAAG,KAAK,MAAM,CAAM,GAAG,CAC/E,CACF,CAAC,EAaD,OAXA,EAAe,QAAQ,EAAO,EAAE,EAEhC,EAAO,eAAe,iBACpB,YACM,CACJ,EAAe,WAAW,EAC1B,QAAQ,MAAM,GAAG,EAAO,UAAU,CACpC,EACA,CAAE,KAAM,EAAK,CACf,EAEO,CACT"}
|
package/dist/errors.cjs
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
var
|
|
1
|
+
var PrismError=class extends Error{constructor(e,t){super(e,t),this.name=new.target.name,Object.setPrototypeOf(this,new.target.prototype)}},PrismRenderError=class extends PrismError{};exports.PrismError=PrismError,exports.PrismRenderError=PrismRenderError;
|
|
2
2
|
//# sourceMappingURL=errors.cjs.map
|
package/dist/errors.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"errors.cjs","names":[],"sources":["../src/errors.ts"],"sourcesContent":["/** Base class for all prism errors. Use `instanceof PrismError` to catch any prism-originated error. */\nexport class PrismError extends Error {\n constructor(message: string, opts?: ErrorOptions) {\n super(message, opts);\n this.name = new.target.name;\n Object.setPrototypeOf(this, new.target.prototype);\n }\n}\n\n/** Thrown when a chart is given a structurally invalid configuration it cannot render at all (e.g. a non-Element `container`). Recoverable issues like empty or malformed data emit a dev-mode warning instead — see the package docs for details. */\nexport class PrismRenderError extends PrismError {}\n"],"mappings":"AACA,IAAa,
|
|
1
|
+
{"version":3,"file":"errors.cjs","names":[],"sources":["../src/errors.ts"],"sourcesContent":["/** Base class for all prism errors. Use `instanceof PrismError` to catch any prism-originated error. */\nexport class PrismError extends Error {\n constructor(message: string, opts?: ErrorOptions) {\n super(message, opts);\n this.name = new.target.name;\n Object.setPrototypeOf(this, new.target.prototype);\n }\n}\n\n/** Thrown when a chart is given a structurally invalid configuration it cannot render at all (e.g. a non-Element `container`). Recoverable issues like empty or malformed data emit a dev-mode warning instead — see the package docs for details. */\nexport class PrismRenderError extends PrismError {}\n"],"mappings":"AACA,IAAa,WAAb,cAAgC,KAAM,CACpC,YAAY,EAAiB,EAAqB,CAChD,MAAM,EAAS,CAAI,EACnB,KAAK,KAAO,WAAW,KACvB,OAAO,eAAe,KAAM,WAAW,SAAS,CAClD,CACF,EAGa,iBAAb,cAAsC,UAAW,CAAC"}
|
package/dist/errors.js
CHANGED
|
@@ -1,10 +1,2 @@
|
|
|
1
|
-
|
|
2
|
-
var e = class extends Error {
|
|
3
|
-
constructor(e, t) {
|
|
4
|
-
super(e, t), this.name = new.target.name, Object.setPrototypeOf(this, new.target.prototype);
|
|
5
|
-
}
|
|
6
|
-
}, t = class extends e {};
|
|
7
|
-
//#endregion
|
|
8
|
-
export { e as PrismError, t as PrismRenderError };
|
|
9
|
-
|
|
1
|
+
var PrismError=class extends Error{constructor(e,t){super(e,t),this.name=new.target.name,Object.setPrototypeOf(this,new.target.prototype)}},PrismRenderError=class extends PrismError{};export{PrismError,PrismRenderError};
|
|
10
2
|
//# sourceMappingURL=errors.js.map
|
package/dist/errors.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"errors.js","names":[],"sources":["../src/errors.ts"],"sourcesContent":["/** Base class for all prism errors. Use `instanceof PrismError` to catch any prism-originated error. */\nexport class PrismError extends Error {\n constructor(message: string, opts?: ErrorOptions) {\n super(message, opts);\n this.name = new.target.name;\n Object.setPrototypeOf(this, new.target.prototype);\n }\n}\n\n/** Thrown when a chart is given a structurally invalid configuration it cannot render at all (e.g. a non-Element `container`). Recoverable issues like empty or malformed data emit a dev-mode warning instead — see the package docs for details. */\nexport class PrismRenderError extends PrismError {}\n"],"mappings":"
|
|
1
|
+
{"version":3,"file":"errors.js","names":[],"sources":["../src/errors.ts"],"sourcesContent":["/** Base class for all prism errors. Use `instanceof PrismError` to catch any prism-originated error. */\nexport class PrismError extends Error {\n constructor(message: string, opts?: ErrorOptions) {\n super(message, opts);\n this.name = new.target.name;\n Object.setPrototypeOf(this, new.target.prototype);\n }\n}\n\n/** Thrown when a chart is given a structurally invalid configuration it cannot render at all (e.g. a non-Element `container`). Recoverable issues like empty or malformed data emit a dev-mode warning instead — see the package docs for details. */\nexport class PrismRenderError extends PrismError {}\n"],"mappings":"AACA,IAAa,WAAb,cAAgC,KAAM,CACpC,YAAY,EAAiB,EAAqB,CAChD,MAAM,EAAS,CAAI,EACnB,KAAK,KAAO,WAAW,KACvB,OAAO,eAAe,KAAM,WAAW,SAAS,CAClD,CACF,EAGa,iBAAb,cAAsC,UAAW,CAAC"}
|
package/dist/index.cjs
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require("./
|
|
1
|
+
Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require("./scales/linear.cjs"),t=require("./scales/time.cjs"),n=require("./errors.cjs"),r=require("./theme/index.cjs"),i=require("./charts/area/area-chart.cjs"),a=require("./scales/band.cjs"),o=require("./charts/bar/bar-chart.cjs"),s=require("./charts/line/line-chart.cjs"),c=require("./charts/pie/pie-chart.cjs"),l=require("./charts/sparkline/sparkline.cjs");exports.PrismError=n.PrismError,exports.PrismRenderError=n.PrismRenderError,exports.bandScale=a.bandScale,exports.createAreaChart=i.createAreaChart,exports.createBarChart=o.createBarChart,exports.createLineChart=s.createLineChart,exports.createPieChart=c.createPieChart,exports.createSparkline=l.createSparkline,exports.linearScale=e.linearScale,exports.resetTheme=r.resetTheme,exports.seriesColor=r.seriesColor,exports.setTheme=r.setTheme,exports.timeScale=t.timeScale;
|
package/dist/index.d.ts
CHANGED
|
@@ -1,18 +1,14 @@
|
|
|
1
1
|
export type { EasingFn } from './animation/easing';
|
|
2
|
-
export type { AnimationTarget } from './animation/transition';
|
|
3
|
-
export { animate } from './animation/transition';
|
|
4
2
|
export { createAreaChart } from './charts/area';
|
|
5
3
|
export { createBarChart } from './charts/bar';
|
|
6
4
|
export { createLineChart } from './charts/line';
|
|
7
5
|
export { createPieChart } from './charts/pie';
|
|
8
6
|
export { createSparkline } from './charts/sparkline';
|
|
9
7
|
export { PrismError, PrismRenderError } from './errors';
|
|
10
|
-
export type { LegendState } from './interaction/legend';
|
|
11
|
-
export type { TooltipState } from './interaction/tooltip';
|
|
12
8
|
export { bandScale } from './scales/band';
|
|
13
9
|
export { linearScale } from './scales/linear';
|
|
14
10
|
export { timeScale } from './scales/time';
|
|
15
|
-
export type {
|
|
11
|
+
export type { BandScaleConfig, LinearScaleConfig, TimeScaleConfig } from './scales/types';
|
|
16
12
|
export { resetTheme, seriesColor, setTheme } from './theme';
|
|
17
|
-
export type { AreaChartConfig, AreaSeriesConfig, AxisConfig, AxisPosition, BandScale, BarChartConfig, BarSeriesConfig, BarVariant, BaseChartConfig, ChartA11y, ChartDimensions, ChartEvent, ChartHandle, ChartMargin,
|
|
13
|
+
export type { AreaChartConfig, AreaSeriesConfig, AxisConfig, AxisPosition, BandScale, BarChartConfig, BarSeriesConfig, BarVariant, BaseChartConfig, ChartA11y, ChartDimensions, ChartEvent, ChartHandle, ChartMargin, ContinuousDatum, CrosshairConfig, Datum, GridConfig, HorizontalAxisPosition, LegendConfig, LegendPosition, LineChartConfig, LineSeriesConfig, PieChartConfig, PieSliceConfig, PieVariant, PrismTheme, Scale, Series, SparklineConfig, SparklineVariant, StackSegment, TooltipConfig, TransitionConfig, VerticalAxisPosition, XAxisConfig, YAxisConfig, } from './types';
|
|
18
14
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAEA,YAAY,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAEA,YAAY,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAEnD,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAChD,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAC9C,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAChD,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAC9C,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAErD,OAAO,EAAE,UAAU,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAC;AAExD,OAAO,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAC1C,OAAO,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAC9C,OAAO,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAC1C,YAAY,EAAE,eAAe,EAAE,iBAAiB,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AAE1F,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAC5D,YAAY,EACV,eAAe,EACf,gBAAgB,EAChB,UAAU,EACV,YAAY,EACZ,SAAS,EACT,cAAc,EACd,eAAe,EACf,UAAU,EACV,eAAe,EACf,SAAS,EACT,eAAe,EACf,UAAU,EACV,WAAW,EACX,WAAW,EACX,eAAe,EACf,eAAe,EACf,KAAK,EACL,UAAU,EACV,sBAAsB,EACtB,YAAY,EACZ,cAAc,EACd,eAAe,EACf,gBAAgB,EAChB,cAAc,EACd,cAAc,EACd,UAAU,EACV,UAAU,EACV,KAAK,EACL,MAAM,EACN,eAAe,EACf,gBAAgB,EAChB,YAAY,EACZ,aAAa,EACb,gBAAgB,EAChB,oBAAoB,EACpB,WAAW,EACX,WAAW,GACZ,MAAM,SAAS,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -1,12 +1 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { linearScale as t } from "./scales/linear.js";
|
|
3
|
-
import { timeScale as n } from "./scales/time.js";
|
|
4
|
-
import { PrismError as r, PrismRenderError as i } from "./errors.js";
|
|
5
|
-
import { resetTheme as a, seriesColor as o, setTheme as s } from "./theme/index.js";
|
|
6
|
-
import { createAreaChart as c } from "./charts/area/area-chart.js";
|
|
7
|
-
import { bandScale as l } from "./scales/band.js";
|
|
8
|
-
import { createBarChart as u } from "./charts/bar/bar-chart.js";
|
|
9
|
-
import { createLineChart as d } from "./charts/line/line-chart.js";
|
|
10
|
-
import { createPieChart as f } from "./charts/pie/pie-chart.js";
|
|
11
|
-
import { createSparkline as p } from "./charts/sparkline/sparkline.js";
|
|
12
|
-
export { r as PrismError, i as PrismRenderError, e as animate, l as bandScale, c as createAreaChart, u as createBarChart, d as createLineChart, f as createPieChart, p as createSparkline, t as linearScale, a as resetTheme, o as seriesColor, s as setTheme, n as timeScale };
|
|
1
|
+
import{linearScale as e}from"./scales/linear.js";import{timeScale as t}from"./scales/time.js";import{PrismError as n,PrismRenderError as r}from"./errors.js";import{resetTheme as i,seriesColor as a,setTheme as o}from"./theme/index.js";import{createAreaChart as s}from"./charts/area/area-chart.js";import{bandScale as c}from"./scales/band.js";import{createBarChart as l}from"./charts/bar/bar-chart.js";import{createLineChart as u}from"./charts/line/line-chart.js";import{createPieChart as d}from"./charts/pie/pie-chart.js";import{createSparkline as f}from"./charts/sparkline/sparkline.js";export{n as PrismError,r as PrismRenderError,c as bandScale,s as createAreaChart,l as createBarChart,u as createLineChart,d as createPieChart,f as createSparkline,e as linearScale,i as resetTheme,a as seriesColor,o as setTheme,t as timeScale};
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
const e=require("../svg/element.cjs");function
|
|
1
|
+
const e=require("../svg/element.cjs");function createCrosshair(t,n){let r=n===!0||n?.vertical!==!1,i=n!==!0&&n?.horizontal===!0,a=n===!0||n?.snap!==!1,o=e.createSvgElement(`g`,{"aria-hidden":`true`,class:`prism-crosshair`,style:`display:none`}),s=r?e.createSvgElement(`line`,{class:`prism-crosshair-v`,"stroke-dasharray":`var(--prism-crosshair-dash, 4 2)`}):null,c=i?e.createSvgElement(`line`,{class:`prism-crosshair-h`,"stroke-dasharray":`var(--prism-crosshair-dash, 4 2)`}):null;s&&o.appendChild(s),c&&o.appendChild(c),t.appendChild(o);let l=e.createSvgElement(`text`,{"aria-live":`polite`,class:`prism-crosshair-live`,role:`status`,x:-9999,y:-9999});return t.appendChild(l),{hide(){o.style.display=`none`,l.textContent=``},show(t,n,r,i,a){o.style.display=``,s&&e.setAttributes(s,{x1:t,x2:t,y1:0,y2:i}),c&&e.setAttributes(c,{x1:0,x2:r,y1:n,y2:n}),a!==void 0&&(l.textContent=a)},snap:a}}exports.createCrosshair=createCrosshair;
|
|
2
2
|
//# sourceMappingURL=crosshair.cjs.map
|