Files
OpenMAIC/configs/chart.ts
T
wyuc 7cb129183d chore(packages): publish the @openmaic/* SDK family to npm (#778) (#780)
* chore(packages): publish the @openmaic/* SDK family to npm (#778)

Prepares the @openmaic/{dsl,renderer,importer} family for its first npm
publish, and moves the SDK packages onto the @openmaic scope.

Why the scope move: the @maic org name is unavailable on npm (an unscoped
`maic` package already holds the name), so @maic/* is not claimable. @openmaic
matches the project name, the scope is free, and the repo already ships an
@openmaic/docs package — so the SDK family now lines up with that convention.

- rename @maic/{dsl,renderer,importer} -> @openmaic/* across packages, the
  workspace glob, the package dir, and all import sites; lockfile regenerated
- renderer: add publishConfig (public, registry.npmjs.org) — was missing, so
  a scoped publish would default to the wrong registry / restricted access
- importer: add a files allowlist (dist, README, LICENSE) and drop the
  fragile .npmignore blacklist that shipped src; add an exports map so ESM
  consumers resolve dist/index.js instead of falling back to the .cjs main
- all three: add a prepublishOnly build (+ test/typecheck) guard so a publish
  can never ship a stale or empty dist
- add a tag-triggered publish workflow with npm provenance, pinned by name to
  the three @openmaic packages so the vendored forks (mathml2omml, pptxgenjs)
  are never published

Refs #778, #720 (Phase 1).

* fix(packages): address cross-review on the @openmaic publish prep

Cross-review (Claude /code-review + codex) on this PR surfaced:

- renderer's advertised CJS entry was broken: it keeps @openmaic/dsl external
  and imports a runtime enum from it, but dsl is ESM-only (no `require`
  condition), so `require('@openmaic/renderer')` would throw
  ERR_PACKAGE_PATH_NOT_EXPORTED. Make renderer ESM-only: drop the `.cjs`
  rollup output, `main` now points at the ESM build, and the `require`
  conditions are removed from `exports`. (importer is unaffected — it bundles
  dsl, so its CJS build still works.)
- prepublishOnly re-ran the test suite during `pnpm -r publish`, so a flaky
  test after dsl had already published gave a non-atomic partial release.
  Reduce prepublishOnly to a build-only guard (never ship stale/empty dist)
  and move the real test/typecheck gate into the workflow, before any publish.
- document that an @openmaic/* tag publishes the whole family via `pnpm -r`
  (pnpm skips already-published versions); the tag is a release marker, not a
  per-package gate.

Verified: dsl + renderer + importer build; renderer emits ESM only (0 .cjs),
all exports entries resolve; `npm pack` ships dist + README + LICENSE with no
src leak; frozen-lockfile passes.

Refs #778.

* style: reflow @openmaic/dsl type imports past print-width after rename

The @maic -> @openmaic rename lengthened two single-line type imports past
prettier's 100-col width; prettier --check flagged them. Pure formatting.

Refs #778.

* docs(importer): mark @openmaic/importer browser-only (cr-loop accepted limitation)

codex cross-review flagged that the published @openmaic/importer throws
`XMLHttpRequest is not a constructor` when loaded in a pure Node process —
its rollup build is browser-targeted (`nodeResolve({browser:true})` + a
browser pdf.js build). The app only consumes it client-side ('use client'),
so this is by design. Document it as an accepted limitation: prominent
browser-only note in the README and a `browser` field in the manifest.

Refs #778.
2026-06-24 15:12:23 +08:00

89 lines
2.6 KiB
TypeScript

import type { ChartData } from '@openmaic/dsl';
export const CHART_TYPE_MAP: Record<string, string> = {
bar: '柱状图',
column: '条形图',
line: '折线图',
area: '面积图',
scatter: '散点图',
pie: '饼图',
ring: '环形图',
radar: '雷达图',
};
export const CHART_DEFAULT_DATA: Record<string, ChartData> = {
bar: {
labels: ['类别1', '类别2', '类别3', '类别4', '类别5'],
legends: ['系列1', '系列2'],
series: [
[12, 19, 5, 2, 18],
[7, 11, 13, 21, 9],
],
},
column: {
labels: ['类别1', '类别2', '类别3', '类别4', '类别5'],
legends: ['系列1', '系列2'],
series: [
[12, 19, 5, 2, 18],
[7, 11, 13, 21, 9],
],
},
line: {
labels: ['类别1', '类别2', '类别3', '类别4', '类别5'],
legends: ['系列1', '系列2'],
series: [
[12, 19, 5, 2, 18],
[7, 11, 13, 21, 9],
],
},
pie: {
labels: ['类别1', '类别2', '类别3', '类别4', '类别5'],
legends: ['值'],
series: [[12, 19, 5, 2, 18]],
},
ring: {
labels: ['类别1', '类别2', '类别3', '类别4', '类别5'],
legends: ['值'],
series: [[12, 19, 5, 2, 18]],
},
area: {
labels: ['类别1', '类别2', '类别3', '类别4', '类别5'],
legends: ['系列1', '系列2'],
series: [
[12, 19, 5, 2, 18],
[7, 11, 13, 21, 9],
],
},
radar: {
labels: ['类别1', '类别2', '类别3', '类别4', '类别5'],
legends: ['系列1', '系列2'],
series: [
[12, 19, 5, 2, 18],
[7, 11, 13, 21, 9],
],
},
scatter: {
labels: ['坐标1', '坐标2', '坐标3', '坐标4', '坐标5'],
legends: ['X', 'Y'],
series: [
[12, 19, 5, 2, 18],
[7, 11, 13, 21, 9],
],
},
};
export const CHART_PRESET_THEMES = [
['#d87c7c', '#919e8b', '#d7ab82', '#6e7074', '#61a0a8', '#efa18d'],
['#dd6b66', '#759aa0', '#e69d87', '#8dc1a9', '#ea7e53', '#eedd78'],
['#516b91', '#59c4e6', '#edafda', '#93b7e3', '#a5e7f0', '#cbb0e3'],
['#893448', '#d95850', '#eb8146', '#ffb248', '#f2d643', '#ebdba4'],
['#4ea397', '#22c3aa', '#7bd9a5', '#d0648a', '#f58db2', '#f2b3c9'],
['#3fb1e3', '#6be6c1', '#626c91', '#a0a7e6', '#c4ebad', '#96dee8'],
['#fc97af', '#87f7cf', '#f7f494', '#72ccff', '#f7c5a0', '#d4a4eb'],
['#c1232b', '#27727b', '#fcce10', '#e87c25', '#b5c334', '#fe8463'],
['#2ec7c9', '#b6a2de', '#5ab1ef', '#ffb980', '#d87a80', '#8d98b3'],
['#e01f54', '#001852', '#f5e8c8', '#b8d2c7', '#c6b38e', '#a4d8c2'],
['#c12e34', '#e6b600', '#0098d9', '#2b821d', '#005eaa', '#339ca8'],
['#8a7ca8', '#e098c7', '#8fd3e8', '#71669e', '#cc70af', '#7cb4cc'],
];