From 7cb129183dc9077066606c457cec395823daf181 Mon Sep 17 00:00:00 2001 From: wyuc Date: Wed, 24 Jun 2026 15:12:23 +0800 Subject: [PATCH] chore(packages): publish the @openmaic/* SDK family to npm (#778) (#780) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * 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. --- .github/workflows/ci.yml | 2 +- .github/workflows/publish-packages.yml | 97 ++++++++++++++++++ .gitignore | 2 +- .prettierignore | 6 +- app/eval/whiteboard/page.tsx | 2 +- app/globals.css | 2 +- app/layout.tsx | 2 +- app/page.tsx | 2 +- .../surfaces/slide/AnchoredElementBar.tsx | 2 +- .../edit/surfaces/slide/ImageActions.tsx | 2 +- .../edit/surfaces/slide/editing-state.ts | 2 +- .../edit/surfaces/slide/use-slide-surface.ts | 2 +- .../Editor/Canvas/EditableElement.tsx | 2 +- .../Editor/Canvas/GridLines.tsx | 2 +- .../Canvas/Operate/CommonElementOperate.tsx | 7 +- .../Canvas/Operate/ImageElementOperate.tsx | 2 +- .../Canvas/Operate/LineElementOperate.tsx | 2 +- .../Canvas/Operate/MultiSelectOperate.tsx | 2 +- .../Canvas/Operate/ShapeElementOperate.tsx | 2 +- .../Canvas/Operate/TableElementOperate.tsx | 2 +- .../Canvas/Operate/TextElementOperate.tsx | 2 +- .../Editor/Canvas/Operate/index.tsx | 2 +- .../slide-renderer/Editor/Canvas/Ruler.tsx | 2 +- .../Editor/Canvas/ShapeCreateCanvas.tsx | 2 +- .../Editor/Canvas/ViewportBackground.tsx | 2 +- .../Editor/Canvas/hooks/useDragElement.ts | 2 +- .../Editor/Canvas/hooks/useDragLineElement.ts | 2 +- .../hooks/useInsertFromCreateSelection.ts | 2 +- .../Editor/Canvas/hooks/useMouseSelection.ts | 2 +- .../Canvas/hooks/useMoveShapeKeypoint.ts | 2 +- .../Editor/Canvas/hooks/useRotateElement.ts | 2 +- .../Editor/Canvas/hooks/useScaleElement.ts | 2 +- .../Editor/Canvas/hooks/useSelectElement.ts | 2 +- .../slide-renderer/Editor/Canvas/index.tsx | 2 +- .../Editor/HighlightOverlay.tsx | 2 +- .../Editor/LaserPointerOverlay.tsx | 2 +- .../slide-renderer/Editor/ScreenCanvas.tsx | 2 +- .../slide-renderer/Editor/ScreenElement.tsx | 2 +- .../Editor/SpotlightOverlay.tsx | 2 +- components/slide-renderer/SlideThumbnail.tsx | 12 +-- .../element/ChartElement/BaseChartElement.tsx | 2 +- .../components/element/ChartElement/Chart.tsx | 2 +- .../element/ChartElement/chartOption.ts | 2 +- .../components/element/ChartElement/index.tsx | 2 +- .../element/CodeElement/BaseCodeElement.tsx | 2 +- .../components/element/ElementOutline.tsx | 2 +- .../element/ImageElement/BaseImageElement.tsx | 2 +- .../element/ImageElement/ImageClipHandler.tsx | 2 +- .../ImageOutline/image-ellipse-outline.tsx | 2 +- .../ImageOutline/image-polygon-outline.tsx | 2 +- .../ImageOutline/image-rect-outline.tsx | 2 +- .../ImageElement/ImageOutline/index.tsx | 2 +- .../components/element/ImageElement/index.tsx | 2 +- .../element/ImageElement/useClipImage.ts | 2 +- .../element/ImageElement/useFilter.ts | 2 +- .../ImageElement/useResolvedImageSrc.ts | 2 +- .../element/LatexElement/BaseLatexElement.tsx | 2 +- .../components/element/LatexElement/index.tsx | 2 +- .../element/LineElement/BaseLineElement.tsx | 2 +- .../element/LineElement/LinePointMarker.tsx | 2 +- .../components/element/LineElement/index.tsx | 2 +- .../element/ShapeElement/BaseShapeElement.tsx | 2 +- .../element/ShapeElement/GradientDefs.tsx | 2 +- .../components/element/ShapeElement/index.tsx | 2 +- .../element/TableElement/BaseTableElement.tsx | 2 +- .../element/TableElement/StaticTable.tsx | 2 +- .../components/element/TableElement/index.tsx | 2 +- .../element/TableElement/tableUtils.ts | 2 +- .../element/TextElement/BaseTextElement.tsx | 2 +- .../components/element/TextElement/index.tsx | 2 +- .../element/VideoElement/BaseVideoElement.tsx | 2 +- .../components/element/VideoElement/index.tsx | 2 +- .../element/hooks/useElementFill.ts | 2 +- .../element/hooks/useElementOutline.ts | 2 +- .../element/hooks/useElementShadow.ts | 2 +- components/whiteboard/whiteboard-canvas.tsx | 2 +- configs/animation.ts | 2 +- configs/chart.ts | 2 +- configs/lines.ts | 2 +- configs/shapes.ts | 2 +- configs/theme.ts | 2 +- e2e/fixtures/test-data/scene-content.ts | 4 +- eslint.config.mjs | 8 +- eval/whiteboard-layout/capture.ts | 2 +- eval/whiteboard-layout/state-manager.ts | 2 +- eval/whiteboard-layout/types.ts | 2 +- lib/action/engine.ts | 2 +- lib/agent/tools/read-scene-content.ts | 2 +- lib/api/stage-api-canvas.ts | 2 +- lib/api/stage-api-element.ts | 2 +- lib/api/stage-api-types.ts | 2 +- lib/api/stage-api-whiteboard.ts | 2 +- lib/edit/scene-edit-bridge.ts | 2 +- lib/edit/slide-defaults.ts | 2 +- lib/edit/slide-edit-elements.ts | 2 +- lib/edit/slide-ops.ts | 2 +- lib/export/classroom-zip-types.ts | 2 +- lib/export/use-export-pptx.ts | 2 +- lib/generation/scene-builder.ts | 2 +- lib/generation/scene-generator.ts | 2 +- lib/hooks/use-canvas-operations.ts | 2 +- lib/hooks/use-order-element.ts | 2 +- lib/hooks/use-slide-background-style.ts | 2 +- lib/import/use-import-pptx.ts | 4 +- lib/media/video-manifest.ts | 2 +- lib/store/whiteboard-history.ts | 2 +- lib/types/edit.ts | 7 +- lib/types/generation.ts | 2 +- lib/types/stage.ts | 20 ++-- lib/utils/element-fingerprint.ts | 2 +- lib/utils/element.ts | 2 +- lib/utils/geometry.ts | 2 +- lib/utils/stage-storage.ts | 2 +- next.config.ts | 2 +- package.json | 8 +- packages/@maic/importer/.npmignore | 30 ------ packages/@maic/renderer/src/types/index.ts | 5 - packages/{@maic => @openmaic}/dsl/.gitignore | 0 packages/{@maic => @openmaic}/dsl/LICENSE | 0 packages/{@maic => @openmaic}/dsl/README.md | 48 ++++----- .../{@maic => @openmaic}/dsl/package.json | 7 +- .../{@maic => @openmaic}/dsl/src/guards.ts | 0 .../{@maic => @openmaic}/dsl/src/index.ts | 10 +- .../{@maic => @openmaic}/dsl/src/slides.ts | 6 +- .../{@maic => @openmaic}/dsl/src/stage.ts | 2 +- .../{@maic => @openmaic}/dsl/src/version.ts | 0 .../dsl/test/stage.test.ts | 4 +- .../{@maic => @openmaic}/dsl/tsconfig.json | 0 .../{@maic => @openmaic}/dsl/vitest.config.ts | 4 +- .../importer/.babelrc.cjs | 0 .../importer/.eslintignore | 0 .../importer/.eslintrc.cjs | 0 .../{@maic => @openmaic}/importer/.gitignore | 0 .../{@maic => @openmaic}/importer/DESIGN.md | 0 .../{@maic => @openmaic}/importer/LICENSE | 0 .../{@maic => @openmaic}/importer/README.md | 18 ++-- .../{@maic => @openmaic}/importer/SKILL.md | 2 +- .../{@maic => @openmaic}/importer/favicon.ico | Bin .../{@maic => @openmaic}/importer/index.html | 0 .../importer/package.json | 18 +++- .../importer/rollup.config.js | 0 .../scripts/extract-pptx-structure.js | 0 .../importer/scripts/transvert.js | 0 .../importer/scripts/transvert.ts | 0 .../importer/src/adapter/toPptxtojson.ts | 0 .../importer/src/adapter/types.ts | 0 .../src/export/serializePresentation.ts | 0 .../importer/src/import-pipeline/index.ts | 2 +- .../src/import-pipeline/mockContext.ts | 2 +- .../transformParsedToSlides.ts | 2 +- .../importer/src/import-pipeline/types.ts | 2 +- .../importer/src/index.ts | 2 +- .../importer/src/model/Layout.ts | 0 .../importer/src/model/Master.ts | 0 .../importer/src/model/Presentation.ts | 0 .../importer/src/model/Slide.ts | 0 .../importer/src/model/Theme.ts | 0 .../importer/src/model/nodes/BaseNode.ts | 0 .../importer/src/model/nodes/ChartNode.ts | 0 .../importer/src/model/nodes/GroupNode.ts | 0 .../importer/src/model/nodes/MathNode.ts | 0 .../importer/src/model/nodes/PicNode.ts | 0 .../importer/src/model/nodes/ShapeNode.ts | 0 .../importer/src/model/nodes/TableNode.ts | 0 .../importer/src/openmaic/configs/shapes.ts | 2 +- .../src/openmaic/utils/svgPathParser.ts | 0 .../importer/src/openmaic/utils/videoCodec.ts | 0 .../importer/src/parser/RelParser.ts | 0 .../importer/src/parser/XmlParser.ts | 0 .../importer/src/parser/ZipParser.ts | 0 .../importer/src/parser/units.ts | 0 .../importer/src/serializer/RenderContext.ts | 0 .../importer/src/serializer/StyleResolver.ts | 0 .../src/serializer/backgroundSerializer.ts | 0 .../importer/src/serializer/borderMapper.ts | 0 .../src/serializer/chartSerializer.ts | 0 .../src/serializer/groupSerializer.ts | 0 .../src/serializer/imageSerializer.ts | 0 .../importer/src/serializer/index.ts | 0 .../importer/src/serializer/mathSerializer.ts | 0 .../src/serializer/shapeSerializer.ts | 0 .../src/serializer/slideSerializer.ts | 0 .../src/serializer/tableSerializer.ts | 0 .../importer/src/serializer/textSerializer.md | 0 .../importer/src/serializer/textSerializer.ts | 0 .../importer/src/shapes/customGeometry.ts | 0 .../importer/src/shapes/presets.ts | 0 .../importer/src/shapes/shapeArc.ts | 0 .../importer/src/types/vendor-shims.d.ts | 0 .../importer/src/utils/color.ts | 0 .../importer/src/utils/emfParser.ts | 0 .../importer/src/utils/eqFieldParser.ts | 0 .../importer/src/utils/media.ts | 0 .../importer/src/utils/mediaWebConvert.ts | 0 .../importer/src/utils/rgbaToPng.ts | 0 .../importer/src/utils/urlSafety.ts | 0 .../importer/src1/align.js | 0 .../importer/src1/animation.js | 0 .../importer/src1/border.js | 0 .../importer/src1/chart.js | 0 .../importer/src1/color.js | 0 .../importer/src1/constants.js | 0 .../importer/src1/diagram.js | 0 .../importer/src1/fill.js | 0 .../importer/src1/fontStyle.js | 0 .../importer/src1/math.js | 0 .../importer/src1/position.js | 0 .../importer/src1/pptxtojson.js | 0 .../importer/src1/readXmlFile.js | 0 .../importer/src1/schemeColor.js | 0 .../importer/src1/shadow.js | 0 .../importer/src1/shape.js | 0 .../importer/src1/shapePath.js | 0 .../importer/src1/table.js | 0 .../importer/src1/text.js | 0 .../importer/src1/utils.js | 0 .../importer/test/helpers.ts | 0 .../importer/test/mathSerializer.test.ts | 0 .../importer/test/tableSerializer.test.ts | 0 .../test/textSerializer.bullet.test.ts | 0 .../textSerializer.emptyParagraph.test.ts | 0 .../importer/test/textSerializer.fill.test.ts | 0 .../test/textSerializer.tabStop.test.ts | 0 .../importer/tsconfig.json | 0 .../importer/vitest.config.ts | 0 .../{@maic => @openmaic}/renderer/.gitignore | 0 .../{@maic => @openmaic}/renderer/DESIGN.md | 0 .../{@maic => @openmaic}/renderer/FONTS.md | 2 +- .../{@maic => @openmaic}/renderer/LICENSE | 0 .../{@maic => @openmaic}/renderer/README.md | 24 ++--- .../renderer/font-licenses/ARPHIC-PL.txt | 0 .../renderer/font-licenses/OFL.txt | 2 +- .../font-licenses/ZcoolHappy-LICENSE.txt | 0 .../renderer/fonts.config.mjs | 0 .../{@maic => @openmaic}/renderer/fonts.css | 2 +- .../renderer/package.json | 25 ++--- .../renderer/rollup.config.js | 15 +-- .../renderer/scripts/generate-fonts-css.mjs | 2 +- .../renderer/src/SlideCanvas.tsx | 2 +- .../renderer/src/SlideElement.tsx | 2 +- .../renderer/src/context.tsx | 2 +- .../renderer/src/effects/HighlightOverlay.tsx | 2 +- .../renderer/src/effects/LaserOverlay.tsx | 0 .../renderer/src/effects/SpotlightOverlay.tsx | 0 .../renderer/src/effects/ZoomWrapper.tsx | 0 .../renderer/src/effects/index.ts | 0 .../src/elements/chart/BaseChartElement.tsx | 2 +- .../renderer/src/elements/chart/Chart.tsx | 2 +- .../src/elements/chart/chartOption.ts | 2 +- .../src/elements/code/BaseCodeElement.tsx | 2 +- .../src/elements/image/BaseImageElement.tsx | 2 +- .../src/elements/image/ImageOutline.tsx | 2 +- .../renderer/src/elements/image/clipPaths.ts | 0 .../src/elements/image/useClipImage.ts | 2 +- .../renderer/src/elements/image/useFilter.ts | 2 +- .../renderer/src/elements/index.ts | 0 .../src/elements/latex/BaseLatexElement.tsx | 2 +- .../src/elements/line/BaseLineElement.tsx | 2 +- .../src/elements/line/LinePointMarker.tsx | 2 +- .../src/elements/shape/BaseShapeElement.tsx | 2 +- .../src/elements/shape/GradientDefs.tsx | 2 +- .../src/elements/shape/PatternDefs.tsx | 0 .../src/elements/shared/ElementOutline.tsx | 2 +- .../src/elements/shared/useElementFill.ts | 2 +- .../src/elements/shared/useElementFlip.ts | 0 .../src/elements/shared/useElementOutline.ts | 2 +- .../src/elements/shared/useElementShadow.ts | 2 +- .../src/elements/table/BaseTableElement.tsx | 2 +- .../src/elements/table/StaticTable.tsx | 2 +- .../renderer/src/elements/table/tableUtils.ts | 2 +- .../src/elements/text/BaseTextElement.tsx | 2 +- .../src/elements/video/BaseVideoElement.tsx | 2 +- .../src/hooks/useSlideBackgroundStyle.ts | 2 +- .../renderer/src/hooks/useViewportSize.ts | 0 .../renderer/src/index.ts | 0 .../renderer/src/snapshot/index.ts | 2 +- .../renderer/src/styles.ts | 0 .../renderer/src/types/effects.ts | 0 .../@openmaic/renderer/src/types/index.ts | 5 + .../renderer/src/utils/cn.ts | 0 .../renderer/src/utils/element.ts | 2 +- .../renderer/src/utils/geometry.ts | 2 +- .../renderer/tsconfig.json | 0 pnpm-lock.yaml | 28 ++--- pnpm-workspace.yaml | 2 +- scripts/assert-vendor-maic-importer.mjs | 2 +- scripts/sync-maic-importer.mjs | 4 +- tests/edit/round-trip/fixtures.ts | 2 +- tests/edit/scene-edit-bridge.test.ts | 2 +- tests/edit/slide-defaults.test.ts | 2 +- tests/edit/slide-edit-session.test.ts | 2 +- tests/edit/slide-ops.test.ts | 2 +- tests/edit/slide-schema.test.ts | 2 +- .../edit/surfaces/slide/image-actions.test.ts | 2 +- .../agent/tools/build-image-resources.test.ts | 2 +- .../tools/regenerate-scene-actions.test.ts | 2 +- .../lib/agent/tools/regenerate-scene.test.ts | 2 +- .../use-resolved-image-src.test.ts | 2 +- 298 files changed, 423 insertions(+), 321 deletions(-) create mode 100644 .github/workflows/publish-packages.yml delete mode 100644 packages/@maic/importer/.npmignore delete mode 100644 packages/@maic/renderer/src/types/index.ts rename packages/{@maic => @openmaic}/dsl/.gitignore (100%) rename packages/{@maic => @openmaic}/dsl/LICENSE (100%) rename packages/{@maic => @openmaic}/dsl/README.md (74%) rename packages/{@maic => @openmaic}/dsl/package.json (85%) rename packages/{@maic => @openmaic}/dsl/src/guards.ts (100%) rename packages/{@maic => @openmaic}/dsl/src/index.ts (71%) rename packages/{@maic => @openmaic}/dsl/src/slides.ts (99%) rename packages/{@maic => @openmaic}/dsl/src/stage.ts (98%) rename packages/{@maic => @openmaic}/dsl/src/version.ts (100%) rename packages/{@maic => @openmaic}/dsl/test/stage.test.ts (98%) rename packages/{@maic => @openmaic}/dsl/tsconfig.json (100%) rename packages/{@maic => @openmaic}/dsl/vitest.config.ts (68%) rename packages/{@maic => @openmaic}/importer/.babelrc.cjs (100%) rename packages/{@maic => @openmaic}/importer/.eslintignore (100%) rename packages/{@maic => @openmaic}/importer/.eslintrc.cjs (100%) rename packages/{@maic => @openmaic}/importer/.gitignore (100%) rename packages/{@maic => @openmaic}/importer/DESIGN.md (100%) rename packages/{@maic => @openmaic}/importer/LICENSE (100%) rename packages/{@maic => @openmaic}/importer/README.md (95%) rename packages/{@maic => @openmaic}/importer/SKILL.md (94%) rename packages/{@maic => @openmaic}/importer/favicon.ico (100%) rename packages/{@maic => @openmaic}/importer/index.html (100%) rename packages/{@maic => @openmaic}/importer/package.json (83%) rename packages/{@maic => @openmaic}/importer/rollup.config.js (100%) rename packages/{@maic => @openmaic}/importer/scripts/extract-pptx-structure.js (100%) rename packages/{@maic => @openmaic}/importer/scripts/transvert.js (100%) rename packages/{@maic => @openmaic}/importer/scripts/transvert.ts (100%) rename packages/{@maic => @openmaic}/importer/src/adapter/toPptxtojson.ts (100%) rename packages/{@maic => @openmaic}/importer/src/adapter/types.ts (100%) rename packages/{@maic => @openmaic}/importer/src/export/serializePresentation.ts (100%) rename packages/{@maic => @openmaic}/importer/src/import-pipeline/index.ts (99%) rename packages/{@maic => @openmaic}/importer/src/import-pipeline/mockContext.ts (94%) rename packages/{@maic => @openmaic}/importer/src/import-pipeline/transformParsedToSlides.ts (99%) rename packages/{@maic => @openmaic}/importer/src/import-pipeline/types.ts (93%) rename packages/{@maic => @openmaic}/importer/src/index.ts (96%) rename packages/{@maic => @openmaic}/importer/src/model/Layout.ts (100%) rename packages/{@maic => @openmaic}/importer/src/model/Master.ts (100%) rename packages/{@maic => @openmaic}/importer/src/model/Presentation.ts (100%) rename packages/{@maic => @openmaic}/importer/src/model/Slide.ts (100%) rename packages/{@maic => @openmaic}/importer/src/model/Theme.ts (100%) rename packages/{@maic => @openmaic}/importer/src/model/nodes/BaseNode.ts (100%) rename packages/{@maic => @openmaic}/importer/src/model/nodes/ChartNode.ts (100%) rename packages/{@maic => @openmaic}/importer/src/model/nodes/GroupNode.ts (100%) rename packages/{@maic => @openmaic}/importer/src/model/nodes/MathNode.ts (100%) rename packages/{@maic => @openmaic}/importer/src/model/nodes/PicNode.ts (100%) rename packages/{@maic => @openmaic}/importer/src/model/nodes/ShapeNode.ts (100%) rename packages/{@maic => @openmaic}/importer/src/model/nodes/TableNode.ts (100%) rename packages/{@maic => @openmaic}/importer/src/openmaic/configs/shapes.ts (99%) rename packages/{@maic => @openmaic}/importer/src/openmaic/utils/svgPathParser.ts (100%) rename packages/{@maic => @openmaic}/importer/src/openmaic/utils/videoCodec.ts (100%) rename packages/{@maic => @openmaic}/importer/src/parser/RelParser.ts (100%) rename packages/{@maic => @openmaic}/importer/src/parser/XmlParser.ts (100%) rename packages/{@maic => @openmaic}/importer/src/parser/ZipParser.ts (100%) rename packages/{@maic => @openmaic}/importer/src/parser/units.ts (100%) rename packages/{@maic => @openmaic}/importer/src/serializer/RenderContext.ts (100%) rename packages/{@maic => @openmaic}/importer/src/serializer/StyleResolver.ts (100%) rename packages/{@maic => @openmaic}/importer/src/serializer/backgroundSerializer.ts (100%) rename packages/{@maic => @openmaic}/importer/src/serializer/borderMapper.ts (100%) rename packages/{@maic => @openmaic}/importer/src/serializer/chartSerializer.ts (100%) rename packages/{@maic => @openmaic}/importer/src/serializer/groupSerializer.ts (100%) rename packages/{@maic => @openmaic}/importer/src/serializer/imageSerializer.ts (100%) rename packages/{@maic => @openmaic}/importer/src/serializer/index.ts (100%) rename packages/{@maic => @openmaic}/importer/src/serializer/mathSerializer.ts (100%) rename packages/{@maic => @openmaic}/importer/src/serializer/shapeSerializer.ts (100%) rename packages/{@maic => @openmaic}/importer/src/serializer/slideSerializer.ts (100%) rename packages/{@maic => @openmaic}/importer/src/serializer/tableSerializer.ts (100%) rename packages/{@maic => @openmaic}/importer/src/serializer/textSerializer.md (100%) rename packages/{@maic => @openmaic}/importer/src/serializer/textSerializer.ts (100%) rename packages/{@maic => @openmaic}/importer/src/shapes/customGeometry.ts (100%) rename packages/{@maic => @openmaic}/importer/src/shapes/presets.ts (100%) rename packages/{@maic => @openmaic}/importer/src/shapes/shapeArc.ts (100%) rename packages/{@maic => @openmaic}/importer/src/types/vendor-shims.d.ts (100%) rename packages/{@maic => @openmaic}/importer/src/utils/color.ts (100%) rename packages/{@maic => @openmaic}/importer/src/utils/emfParser.ts (100%) rename packages/{@maic => @openmaic}/importer/src/utils/eqFieldParser.ts (100%) rename packages/{@maic => @openmaic}/importer/src/utils/media.ts (100%) rename packages/{@maic => @openmaic}/importer/src/utils/mediaWebConvert.ts (100%) rename packages/{@maic => @openmaic}/importer/src/utils/rgbaToPng.ts (100%) rename packages/{@maic => @openmaic}/importer/src/utils/urlSafety.ts (100%) rename packages/{@maic => @openmaic}/importer/src1/align.js (100%) rename packages/{@maic => @openmaic}/importer/src1/animation.js (100%) rename packages/{@maic => @openmaic}/importer/src1/border.js (100%) rename packages/{@maic => @openmaic}/importer/src1/chart.js (100%) rename packages/{@maic => @openmaic}/importer/src1/color.js (100%) rename packages/{@maic => @openmaic}/importer/src1/constants.js (100%) rename packages/{@maic => @openmaic}/importer/src1/diagram.js (100%) rename packages/{@maic => @openmaic}/importer/src1/fill.js (100%) rename packages/{@maic => @openmaic}/importer/src1/fontStyle.js (100%) rename packages/{@maic => @openmaic}/importer/src1/math.js (100%) rename packages/{@maic => @openmaic}/importer/src1/position.js (100%) rename packages/{@maic => @openmaic}/importer/src1/pptxtojson.js (100%) rename packages/{@maic => @openmaic}/importer/src1/readXmlFile.js (100%) rename packages/{@maic => @openmaic}/importer/src1/schemeColor.js (100%) rename packages/{@maic => @openmaic}/importer/src1/shadow.js (100%) rename packages/{@maic => @openmaic}/importer/src1/shape.js (100%) rename packages/{@maic => @openmaic}/importer/src1/shapePath.js (100%) rename packages/{@maic => @openmaic}/importer/src1/table.js (100%) rename packages/{@maic => @openmaic}/importer/src1/text.js (100%) rename packages/{@maic => @openmaic}/importer/src1/utils.js (100%) rename packages/{@maic => @openmaic}/importer/test/helpers.ts (100%) rename packages/{@maic => @openmaic}/importer/test/mathSerializer.test.ts (100%) rename packages/{@maic => @openmaic}/importer/test/tableSerializer.test.ts (100%) rename packages/{@maic => @openmaic}/importer/test/textSerializer.bullet.test.ts (100%) rename packages/{@maic => @openmaic}/importer/test/textSerializer.emptyParagraph.test.ts (100%) rename packages/{@maic => @openmaic}/importer/test/textSerializer.fill.test.ts (100%) rename packages/{@maic => @openmaic}/importer/test/textSerializer.tabStop.test.ts (100%) rename packages/{@maic => @openmaic}/importer/tsconfig.json (100%) rename packages/{@maic => @openmaic}/importer/vitest.config.ts (100%) rename packages/{@maic => @openmaic}/renderer/.gitignore (100%) rename packages/{@maic => @openmaic}/renderer/DESIGN.md (100%) rename packages/{@maic => @openmaic}/renderer/FONTS.md (98%) rename packages/{@maic => @openmaic}/renderer/LICENSE (100%) rename packages/{@maic => @openmaic}/renderer/README.md (90%) rename packages/{@maic => @openmaic}/renderer/font-licenses/ARPHIC-PL.txt (100%) rename packages/{@maic => @openmaic}/renderer/font-licenses/OFL.txt (98%) rename packages/{@maic => @openmaic}/renderer/font-licenses/ZcoolHappy-LICENSE.txt (100%) rename packages/{@maic => @openmaic}/renderer/fonts.config.mjs (100%) rename packages/{@maic => @openmaic}/renderer/fonts.css (96%) rename packages/{@maic => @openmaic}/renderer/package.json (81%) rename packages/{@maic => @openmaic}/renderer/rollup.config.js (73%) rename packages/{@maic => @openmaic}/renderer/scripts/generate-fonts-css.mjs (96%) rename packages/{@maic => @openmaic}/renderer/src/SlideCanvas.tsx (99%) rename packages/{@maic => @openmaic}/renderer/src/SlideElement.tsx (99%) rename packages/{@maic => @openmaic}/renderer/src/context.tsx (98%) rename packages/{@maic => @openmaic}/renderer/src/effects/HighlightOverlay.tsx (97%) rename packages/{@maic => @openmaic}/renderer/src/effects/LaserOverlay.tsx (100%) rename packages/{@maic => @openmaic}/renderer/src/effects/SpotlightOverlay.tsx (100%) rename packages/{@maic => @openmaic}/renderer/src/effects/ZoomWrapper.tsx (100%) rename packages/{@maic => @openmaic}/renderer/src/effects/index.ts (100%) rename packages/{@maic => @openmaic}/renderer/src/elements/chart/BaseChartElement.tsx (96%) rename packages/{@maic => @openmaic}/renderer/src/elements/chart/Chart.tsx (97%) rename packages/{@maic => @openmaic}/renderer/src/elements/chart/chartOption.ts (99%) rename packages/{@maic => @openmaic}/renderer/src/elements/code/BaseCodeElement.tsx (99%) rename packages/{@maic => @openmaic}/renderer/src/elements/image/BaseImageElement.tsx (98%) rename packages/{@maic => @openmaic}/renderer/src/elements/image/ImageOutline.tsx (98%) rename packages/{@maic => @openmaic}/renderer/src/elements/image/clipPaths.ts (100%) rename packages/{@maic => @openmaic}/renderer/src/elements/image/useClipImage.ts (95%) rename packages/{@maic => @openmaic}/renderer/src/elements/image/useFilter.ts (92%) rename packages/{@maic => @openmaic}/renderer/src/elements/index.ts (100%) rename packages/{@maic => @openmaic}/renderer/src/elements/latex/BaseLatexElement.tsx (98%) rename packages/{@maic => @openmaic}/renderer/src/elements/line/BaseLineElement.tsx (98%) rename packages/{@maic => @openmaic}/renderer/src/elements/line/LinePointMarker.tsx (95%) rename packages/{@maic => @openmaic}/renderer/src/elements/shape/BaseShapeElement.tsx (99%) rename packages/{@maic => @openmaic}/renderer/src/elements/shape/GradientDefs.tsx (92%) rename packages/{@maic => @openmaic}/renderer/src/elements/shape/PatternDefs.tsx (100%) rename packages/{@maic => @openmaic}/renderer/src/elements/shared/ElementOutline.tsx (94%) rename packages/{@maic => @openmaic}/renderer/src/elements/shared/useElementFill.ts (88%) rename packages/{@maic => @openmaic}/renderer/src/elements/shared/useElementFlip.ts (100%) rename packages/{@maic => @openmaic}/renderer/src/elements/shared/useElementOutline.ts (93%) rename packages/{@maic => @openmaic}/renderer/src/elements/shared/useElementShadow.ts (84%) rename packages/{@maic => @openmaic}/renderer/src/elements/table/BaseTableElement.tsx (94%) rename packages/{@maic => @openmaic}/renderer/src/elements/table/StaticTable.tsx (98%) rename packages/{@maic => @openmaic}/renderer/src/elements/table/tableUtils.ts (96%) rename packages/{@maic => @openmaic}/renderer/src/elements/text/BaseTextElement.tsx (98%) rename packages/{@maic => @openmaic}/renderer/src/elements/video/BaseVideoElement.tsx (98%) rename packages/{@maic => @openmaic}/renderer/src/hooks/useSlideBackgroundStyle.ts (96%) rename packages/{@maic => @openmaic}/renderer/src/hooks/useViewportSize.ts (100%) rename packages/{@maic => @openmaic}/renderer/src/index.ts (100%) rename packages/{@maic => @openmaic}/renderer/src/snapshot/index.ts (99%) rename packages/{@maic => @openmaic}/renderer/src/styles.ts (100%) rename packages/{@maic => @openmaic}/renderer/src/types/effects.ts (100%) create mode 100644 packages/@openmaic/renderer/src/types/index.ts rename packages/{@maic => @openmaic}/renderer/src/utils/cn.ts (100%) rename packages/{@maic => @openmaic}/renderer/src/utils/element.ts (98%) rename packages/{@maic => @openmaic}/renderer/src/utils/geometry.ts (97%) rename packages/{@maic => @openmaic}/renderer/tsconfig.json (100%) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 29aa99dad..f994d9d4c 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -42,7 +42,7 @@ jobs: run: pnpm test - name: Unit Tests (importer) - run: pnpm --filter @maic/importer test + run: pnpm --filter @openmaic/importer test e2e: name: E2E Tests diff --git a/.github/workflows/publish-packages.yml b/.github/workflows/publish-packages.yml new file mode 100644 index 000000000..15593a742 --- /dev/null +++ b/.github/workflows/publish-packages.yml @@ -0,0 +1,97 @@ +name: Publish @openmaic packages + +# Publishes the @openmaic/* package family (dsl, renderer, importer) to npm. +# +# Scope is pinned to those three packages by name on purpose: the workspace also +# contains vendored forks (mathml2omml, pptxgenjs) whose names we do NOT own, so +# a recursive publish must never touch them. +# +# Triggers: +# - push a tag like `@openmaic/dsl@0.1.0` (real publish). NOTE: any @openmaic/* +# tag runs `pnpm -r publish` over all three packages — pnpm skips versions +# already on the registry, so in steady state this is idempotent. The tag is a +# release marker, not a per-package gate: an unpublished version bump for a +# sibling package sitting in the repo will also be published by any tag. Bump +# only the package(s) you intend to release in the same change. +# - manual run via the Actions tab (dry-run by default; uncheck to publish) +# +# Prerequisites (one-time, see issue #778): +# - npm org `openmaic` created and owning the `@openmaic` scope +# - repo secret NPM_TOKEN: an automation/granular token with publish rights +# to @openmaic/*, 2FA set to "auth only" (not "auth and writes") so CI can publish + +on: + push: + tags: + - "@openmaic/*@*" + workflow_dispatch: + inputs: + dry_run: + description: "Pack and validate only, do not publish" + type: boolean + default: true + +concurrency: + group: publish-openmaic-${{ github.ref }} + cancel-in-progress: false + +jobs: + publish: + name: Build, validate & publish + runs-on: ubuntu-latest + permissions: + contents: read + id-token: write # required for npm provenance + steps: + - uses: actions/checkout@v4 + + - uses: pnpm/action-setup@v4 + + - uses: actions/setup-node@v4 + with: + node-version: 22 + cache: pnpm + registry-url: https://registry.npmjs.org + + - run: pnpm install --frozen-lockfile + + # Build in dependency order (dsl first); renderer/importer resolve + # @openmaic/dsl through the workspace link. + - name: Build @openmaic packages + run: >- + pnpm -r + --filter "@openmaic/dsl" + --filter "@openmaic/renderer" + --filter "@openmaic/importer" + run build + + # Gate BEFORE any publish: a failure here aborts before a single package + # reaches the registry. npm versions are immutable, so this prevents a + # partial release (e.g. dsl published, then a sibling's test fails). + - name: Test & typecheck (pre-publish gate) + run: | + pnpm --filter "@openmaic/dsl" --filter "@openmaic/importer" run test + pnpm --filter "@openmaic/dsl" --filter "@openmaic/renderer" run typecheck + + # Always review tarball contents before any publish. + - name: Inspect tarball contents (dry-run pack) + run: | + for pkg in dsl renderer importer; do + echo "::group::@openmaic/$pkg" + ( cd "packages/@openmaic/$pkg" && pnpm pack --dry-run ) + echo "::endgroup::" + done + + # Real publish. pnpm rewrites the workspace:* dep on @openmaic/dsl to the + # concrete published version and publishes in topological order. + - name: Publish to npm + if: github.event_name == 'push' || inputs.dry_run == false + run: >- + pnpm -r + --filter "@openmaic/dsl" + --filter "@openmaic/renderer" + --filter "@openmaic/importer" + publish --access public --provenance --no-git-checks + env: + NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }} + NPM_CONFIG_PROVENANCE: "true" diff --git a/.gitignore b/.gitignore index 9a831e26a..cd88cae29 100644 --- a/.gitignore +++ b/.gitignore @@ -33,7 +33,7 @@ CLAUDE.local.md /build /dist -# generated: synced from packages/@maic/importer/dist for runtime URL import +# generated: synced from packages/@openmaic/importer/dist for runtime URL import /public/vendor/maic-importer # misc diff --git a/.prettierignore b/.prettierignore index 372ccb087..99df28556 100644 --- a/.prettierignore +++ b/.prettierignore @@ -6,10 +6,10 @@ node_modules/ packages/pptxgenjs/ packages/mathml2omml/ -# @maic workspace packages: the source is formatted to the root style, but skip +# @openmaic workspace packages: the source is formatted to the root style, but skip # generated build output and the vendored legacy reference under the importer. -packages/@maic/*/dist/ -packages/@maic/importer/src1/ +packages/@openmaic/*/dist/ +packages/@openmaic/importer/src1/ # Docs site (separate Fumadocs app with its own toolchain) packages/docs/ diff --git a/app/eval/whiteboard/page.tsx b/app/eval/whiteboard/page.tsx index 1efda2636..29a1177c9 100644 --- a/app/eval/whiteboard/page.tsx +++ b/app/eval/whiteboard/page.tsx @@ -4,7 +4,7 @@ import { useEffect, useState } from 'react'; import { ScreenElement } from '@/components/slide-renderer/Editor/ScreenElement'; import { SceneProvider } from '@/lib/contexts/scene-context'; import { useStageStore } from '@/lib/store/stage'; -import type { PPTElement } from '@maic/dsl'; +import type { PPTElement } from '@openmaic/dsl'; const EVAL_STAGE_ID = '__eval_stage__'; const EVAL_SCENE_ID = '__eval_scene__'; diff --git a/app/globals.css b/app/globals.css index a3bf931ee..b024b87cf 100644 --- a/app/globals.css +++ b/app/globals.css @@ -6,7 +6,7 @@ Tailwind must scan its dist so those classes get generated. */ @source '../node_modules/streamdown/dist/*.js'; @source '../node_modules/@streamdown/code/dist/*.js'; -@source "../node_modules/@maic/renderer/dist/**/*.{js,cjs}"; +@source "../node_modules/@openmaic/renderer/dist/**/*.{js,cjs}"; /* slide-renderer-demo is gitignored (local sandbox), which makes Tailwind v4's auto source detection skip it. Re-include it explicitly so the demo's Tailwind classes (e.g. bg-violet-600) still get generated. */ diff --git a/app/layout.tsx b/app/layout.tsx index a426828f2..75e50e0f1 100644 --- a/app/layout.tsx +++ b/app/layout.tsx @@ -3,7 +3,7 @@ import localFont from 'next/font/local'; import { GeistSans } from 'geist/font/sans'; import { GeistMono } from 'geist/font/mono'; import './globals.css'; -import '@maic/renderer/fonts.css'; +import '@openmaic/renderer/fonts.css'; import 'animate.css'; import 'katex/dist/katex.min.css'; import { ThemeProvider } from '@/lib/hooks/use-theme'; diff --git a/app/page.tsx b/app/page.tsx index 1416183bc..b4d32e8cb 100644 --- a/app/page.tsx +++ b/app/page.tsx @@ -50,7 +50,7 @@ import { revokeThumbnailSlideMediaUrls, } from '@/lib/utils/stage-storage'; import { SlideThumbnail } from '@/components/slide-renderer/SlideThumbnail'; -import type { Slide } from '@maic/dsl'; +import type { Slide } from '@openmaic/dsl'; import { useMediaGenerationStore } from '@/lib/store/media-generation'; import { toast } from 'sonner'; import { Tooltip, TooltipContent, TooltipTrigger } from '@/components/ui/tooltip'; diff --git a/components/edit/surfaces/slide/AnchoredElementBar.tsx b/components/edit/surfaces/slide/AnchoredElementBar.tsx index 03613022d..cbbf62efd 100644 --- a/components/edit/surfaces/slide/AnchoredElementBar.tsx +++ b/components/edit/surfaces/slide/AnchoredElementBar.tsx @@ -1,6 +1,6 @@ 'use client'; -import type { PPTElement } from '@maic/dsl'; +import type { PPTElement } from '@openmaic/dsl'; import { AnchoredBar } from './AnchoredBar'; import { DeleteButton } from './DeleteButton'; import { ImageActions } from './ImageActions'; diff --git a/components/edit/surfaces/slide/ImageActions.tsx b/components/edit/surfaces/slide/ImageActions.tsx index 156a8618e..93e8828ea 100644 --- a/components/edit/surfaces/slide/ImageActions.tsx +++ b/components/edit/surfaces/slide/ImageActions.tsx @@ -3,7 +3,7 @@ import { FlipHorizontal, FlipVertical, ImageUp } from 'lucide-react'; import { Popover, PopoverContent, PopoverTrigger } from '@/components/ui/popover'; import { useI18n } from '@/lib/hooks/use-i18n'; -import type { PPTImageElement } from '@maic/dsl'; +import type { PPTImageElement } from '@openmaic/dsl'; import { ImagePicker } from './ImagePicker'; import { replaceImageSrc, toggleImageFlip } from './use-slide-surface'; diff --git a/components/edit/surfaces/slide/editing-state.ts b/components/edit/surfaces/slide/editing-state.ts index f4190c058..3ce8ec786 100644 --- a/components/edit/surfaces/slide/editing-state.ts +++ b/components/edit/surfaces/slide/editing-state.ts @@ -1,4 +1,4 @@ -import type { PPTElement } from '@maic/dsl'; +import type { PPTElement } from '@openmaic/dsl'; /** * The single selected slide element — `undefined` unless exactly one element is diff --git a/components/edit/surfaces/slide/use-slide-surface.ts b/components/edit/surfaces/slide/use-slide-surface.ts index ac799394d..af66d246a 100644 --- a/components/edit/surfaces/slide/use-slide-surface.ts +++ b/components/edit/surfaces/slide/use-slide-surface.ts @@ -12,7 +12,7 @@ import { defaultRichTextAttrs } from '@/lib/prosemirror/utils'; import { useCanvasStore } from '@/lib/store/canvas'; import { useStageStore } from '@/lib/store/stage'; import type { SlideContent } from '@/lib/types/stage'; -import type { PPTElement, PPTImageElement, SlideBackground } from '@maic/dsl'; +import type { PPTElement, PPTImageElement, SlideBackground } from '@openmaic/dsl'; import { ImagePicker } from './ImagePicker'; import { BackgroundControl } from './BackgroundControl'; import { useSlideEditSession } from './slide-edit-session'; diff --git a/components/slide-renderer/Editor/Canvas/EditableElement.tsx b/components/slide-renderer/Editor/Canvas/EditableElement.tsx index 6ceeb5a66..4139e0a69 100644 --- a/components/slide-renderer/Editor/Canvas/EditableElement.tsx +++ b/components/slide-renderer/Editor/Canvas/EditableElement.tsx @@ -1,5 +1,5 @@ import { useMemo } from 'react'; -import { ElementTypes, type PPTElement } from '@maic/dsl'; +import { ElementTypes, type PPTElement } from '@openmaic/dsl'; import { ImageElement } from '../../components/element/ImageElement'; import { TextElement } from '../../components/element/TextElement'; import { LineElement } from '../../components/element/LineElement'; diff --git a/components/slide-renderer/Editor/Canvas/GridLines.tsx b/components/slide-renderer/Editor/Canvas/GridLines.tsx index 8d8889a2b..910212938 100644 --- a/components/slide-renderer/Editor/Canvas/GridLines.tsx +++ b/components/slide-renderer/Editor/Canvas/GridLines.tsx @@ -1,7 +1,7 @@ import { useMemo } from 'react'; import { useCanvasStore, useSceneSelector } from '@/lib/store'; import type { SlideContent } from '@/lib/types/stage'; -import type { SlideBackground } from '@maic/dsl'; +import type { SlideBackground } from '@openmaic/dsl'; export function GridLines() { const gridLineSize = useCanvasStore.use.gridLineSize(); diff --git a/components/slide-renderer/Editor/Canvas/Operate/CommonElementOperate.tsx b/components/slide-renderer/Editor/Canvas/Operate/CommonElementOperate.tsx index d591a7f6e..466686b4a 100644 --- a/components/slide-renderer/Editor/Canvas/Operate/CommonElementOperate.tsx +++ b/components/slide-renderer/Editor/Canvas/Operate/CommonElementOperate.tsx @@ -1,6 +1,11 @@ import { useMemo } from 'react'; import { useCanvasStore } from '@/lib/store'; -import type { PPTVideoElement, PPTLatexElement, PPTAudioElement, PPTChartElement } from '@maic/dsl'; +import type { + PPTVideoElement, + PPTLatexElement, + PPTAudioElement, + PPTChartElement, +} from '@openmaic/dsl'; import type { OperateResizeHandlers } from '@/lib/types/edit'; import { useCommonOperate } from '../hooks/useCommonOperate'; import { RotateHandler } from './RotateHandler'; diff --git a/components/slide-renderer/Editor/Canvas/Operate/ImageElementOperate.tsx b/components/slide-renderer/Editor/Canvas/Operate/ImageElementOperate.tsx index 992aabe40..0b5dd6611 100644 --- a/components/slide-renderer/Editor/Canvas/Operate/ImageElementOperate.tsx +++ b/components/slide-renderer/Editor/Canvas/Operate/ImageElementOperate.tsx @@ -1,6 +1,6 @@ import { useMemo } from 'react'; import { useCanvasStore } from '@/lib/store'; -import type { PPTImageElement } from '@maic/dsl'; +import type { PPTImageElement } from '@openmaic/dsl'; import type { OperateResizeHandlers } from '@/lib/types/edit'; import { useCommonOperate } from '../hooks/useCommonOperate'; import { RotateHandler } from './RotateHandler'; diff --git a/components/slide-renderer/Editor/Canvas/Operate/LineElementOperate.tsx b/components/slide-renderer/Editor/Canvas/Operate/LineElementOperate.tsx index a40cc9b8b..aebc046a3 100644 --- a/components/slide-renderer/Editor/Canvas/Operate/LineElementOperate.tsx +++ b/components/slide-renderer/Editor/Canvas/Operate/LineElementOperate.tsx @@ -1,6 +1,6 @@ import { useMemo } from 'react'; import { useCanvasStore } from '@/lib/store'; -import type { PPTLineElement } from '@maic/dsl'; +import type { PPTLineElement } from '@openmaic/dsl'; import { OperateLineHandlers } from '@/lib/types/edit'; import { ResizeHandler } from './ResizeHandler'; diff --git a/components/slide-renderer/Editor/Canvas/Operate/MultiSelectOperate.tsx b/components/slide-renderer/Editor/Canvas/Operate/MultiSelectOperate.tsx index 4ef03db6d..7b736c3f2 100644 --- a/components/slide-renderer/Editor/Canvas/Operate/MultiSelectOperate.tsx +++ b/components/slide-renderer/Editor/Canvas/Operate/MultiSelectOperate.tsx @@ -1,6 +1,6 @@ import { useMemo, useEffect, useState } from 'react'; import { useCanvasStore } from '@/lib/store'; -import type { PPTElement } from '@maic/dsl'; +import type { PPTElement } from '@openmaic/dsl'; import { getElementListRange } from '@/lib/utils/element'; import type { OperateResizeHandlers, MultiSelectRange } from '@/lib/types/edit'; import { useCommonOperate } from '../hooks/useCommonOperate'; diff --git a/components/slide-renderer/Editor/Canvas/Operate/ShapeElementOperate.tsx b/components/slide-renderer/Editor/Canvas/Operate/ShapeElementOperate.tsx index 0699429c3..ed4c8a507 100644 --- a/components/slide-renderer/Editor/Canvas/Operate/ShapeElementOperate.tsx +++ b/components/slide-renderer/Editor/Canvas/Operate/ShapeElementOperate.tsx @@ -1,6 +1,6 @@ import { useMemo } from 'react'; import { useCanvasStore } from '@/lib/store'; -import type { PPTShapeElement } from '@maic/dsl'; +import type { PPTShapeElement } from '@openmaic/dsl'; import type { OperateResizeHandlers } from '@/lib/types/edit'; import { SHAPE_PATH_FORMULAS } from '@/configs/shapes'; import { useCommonOperate } from '../hooks/useCommonOperate'; diff --git a/components/slide-renderer/Editor/Canvas/Operate/TableElementOperate.tsx b/components/slide-renderer/Editor/Canvas/Operate/TableElementOperate.tsx index 7aeb2a971..fe6aea012 100644 --- a/components/slide-renderer/Editor/Canvas/Operate/TableElementOperate.tsx +++ b/components/slide-renderer/Editor/Canvas/Operate/TableElementOperate.tsx @@ -1,6 +1,6 @@ import { useMemo } from 'react'; import { useCanvasStore } from '@/lib/store'; -import type { PPTTableElement } from '@maic/dsl'; +import type { PPTTableElement } from '@openmaic/dsl'; import type { OperateResizeHandlers } from '@/lib/types/edit'; import { useCommonOperate } from '../hooks/useCommonOperate'; import { RotateHandler } from './RotateHandler'; diff --git a/components/slide-renderer/Editor/Canvas/Operate/TextElementOperate.tsx b/components/slide-renderer/Editor/Canvas/Operate/TextElementOperate.tsx index 19c7323d0..3353c0c75 100644 --- a/components/slide-renderer/Editor/Canvas/Operate/TextElementOperate.tsx +++ b/components/slide-renderer/Editor/Canvas/Operate/TextElementOperate.tsx @@ -1,6 +1,6 @@ import { useMemo } from 'react'; import { useCanvasStore } from '@/lib/store'; -import type { PPTTextElement } from '@maic/dsl'; +import type { PPTTextElement } from '@openmaic/dsl'; import type { OperateResizeHandlers } from '@/lib/types/edit'; import { useCommonOperate } from '../hooks/useCommonOperate'; import { RotateHandler } from './RotateHandler'; diff --git a/components/slide-renderer/Editor/Canvas/Operate/index.tsx b/components/slide-renderer/Editor/Canvas/Operate/index.tsx index 618477a28..69368e6f1 100644 --- a/components/slide-renderer/Editor/Canvas/Operate/index.tsx +++ b/components/slide-renderer/Editor/Canvas/Operate/index.tsx @@ -10,7 +10,7 @@ import { type PPTChartElement, type Slide, type PPTAnimation, -} from '@maic/dsl'; +} from '@openmaic/dsl'; import type { OperateLineHandlers, OperateResizeHandlers } from '@/lib/types/edit'; import { ImageElementOperate } from './ImageElementOperate'; import { TextElementOperate } from './TextElementOperate'; diff --git a/components/slide-renderer/Editor/Canvas/Ruler.tsx b/components/slide-renderer/Editor/Canvas/Ruler.tsx index 26361be77..f58062875 100644 --- a/components/slide-renderer/Editor/Canvas/Ruler.tsx +++ b/components/slide-renderer/Editor/Canvas/Ruler.tsx @@ -1,7 +1,7 @@ import { useMemo, useEffect, useState } from 'react'; import { useCanvasStore } from '@/lib/store'; import { getElementListRange } from '@/lib/utils/element'; -import type { PPTElement } from '@maic/dsl'; +import type { PPTElement } from '@openmaic/dsl'; import type { ViewportStyles } from './hooks/useViewportSize'; interface RulerProps { diff --git a/components/slide-renderer/Editor/Canvas/ShapeCreateCanvas.tsx b/components/slide-renderer/Editor/Canvas/ShapeCreateCanvas.tsx index 8b5798b72..bcae8e1de 100644 --- a/components/slide-renderer/Editor/Canvas/ShapeCreateCanvas.tsx +++ b/components/slide-renderer/Editor/Canvas/ShapeCreateCanvas.tsx @@ -3,7 +3,7 @@ import { useKeyboardStore } from '@/lib/store/keyboard'; import { useCanvasStore, useSceneSelector } from '@/lib/store'; import type { CreateCustomShapeData } from '@/lib/types/edit'; import type { SlideContent } from '@/lib/types/stage'; -import type { SlideTheme } from '@maic/dsl'; +import type { SlideTheme } from '@openmaic/dsl'; import { toast } from 'sonner'; interface ShapeCreateCanvasProps { diff --git a/components/slide-renderer/Editor/Canvas/ViewportBackground.tsx b/components/slide-renderer/Editor/Canvas/ViewportBackground.tsx index 2d027b9f9..33d788d16 100644 --- a/components/slide-renderer/Editor/Canvas/ViewportBackground.tsx +++ b/components/slide-renderer/Editor/Canvas/ViewportBackground.tsx @@ -3,7 +3,7 @@ import { useSceneSelector } from '@/lib/contexts/scene-context'; import { useSlideBackgroundStyle } from '@/lib/hooks/use-slide-background-style'; import type { SlideContent } from '@/lib/types/stage'; -import type { SlideBackground } from '@maic/dsl'; +import type { SlideBackground } from '@openmaic/dsl'; /** * Viewport background component using Scene Context diff --git a/components/slide-renderer/Editor/Canvas/hooks/useDragElement.ts b/components/slide-renderer/Editor/Canvas/hooks/useDragElement.ts index 6a36bf1f1..951891e61 100644 --- a/components/slide-renderer/Editor/Canvas/hooks/useDragElement.ts +++ b/components/slide-renderer/Editor/Canvas/hooks/useDragElement.ts @@ -1,7 +1,7 @@ import { useCallback } from 'react'; import { useCanvasStore, useKeyboardStore } from '@/lib/store'; import { useHistorySnapshot } from '@/lib/hooks/use-history-snapshot'; -import type { PPTElement } from '@maic/dsl'; +import type { PPTElement } from '@openmaic/dsl'; import type { AlignmentLineProps } from '@/lib/types/edit'; import { getRectRotatedRange, uniqAlignLines, type AlignLine } from '@/lib/utils/element'; import { useCanvasOperations } from '@/lib/hooks/use-canvas-operations'; diff --git a/components/slide-renderer/Editor/Canvas/hooks/useDragLineElement.ts b/components/slide-renderer/Editor/Canvas/hooks/useDragLineElement.ts index 638b0acbb..28013cf1f 100644 --- a/components/slide-renderer/Editor/Canvas/hooks/useDragLineElement.ts +++ b/components/slide-renderer/Editor/Canvas/hooks/useDragLineElement.ts @@ -1,7 +1,7 @@ import { useCallback } from 'react'; import { useKeyboardStore } from '@/lib/store/keyboard'; import { useCanvasStore } from '@/lib/store'; -import type { PPTElement, PPTLineElement } from '@maic/dsl'; +import type { PPTElement, PPTLineElement } from '@openmaic/dsl'; import { OperateLineHandlers } from '@/lib/types/edit'; import { useHistorySnapshot } from '@/lib/hooks/use-history-snapshot'; import { useCanvasOperations } from '@/lib/hooks/use-canvas-operations'; diff --git a/components/slide-renderer/Editor/Canvas/hooks/useInsertFromCreateSelection.ts b/components/slide-renderer/Editor/Canvas/hooks/useInsertFromCreateSelection.ts index a67121611..eb60b60d7 100644 --- a/components/slide-renderer/Editor/Canvas/hooks/useInsertFromCreateSelection.ts +++ b/components/slide-renderer/Editor/Canvas/hooks/useInsertFromCreateSelection.ts @@ -3,7 +3,7 @@ import { useCanvasStore } from '@/lib/store'; import { createElementId } from '@/lib/edit/element-id'; import { useCanvasOperations } from '@/lib/hooks/use-canvas-operations'; import type { CreateElementSelectionData } from '@/lib/types/edit'; -import type { PPTTextElement } from '@maic/dsl'; +import type { PPTTextElement } from '@openmaic/dsl'; // Click-fallback default size when the user clicks instead of drags (or wobbles // under this in either dimension): a sensibly-sized text box at the start point. diff --git a/components/slide-renderer/Editor/Canvas/hooks/useMouseSelection.ts b/components/slide-renderer/Editor/Canvas/hooks/useMouseSelection.ts index faf3ca43b..0a49e5e99 100644 --- a/components/slide-renderer/Editor/Canvas/hooks/useMouseSelection.ts +++ b/components/slide-renderer/Editor/Canvas/hooks/useMouseSelection.ts @@ -1,7 +1,7 @@ import { useState, useCallback, type RefObject } from 'react'; import { useKeyboardStore } from '@/lib/store/keyboard'; import { useCanvasStore } from '@/lib/store'; -import type { PPTElement } from '@maic/dsl'; +import type { PPTElement } from '@openmaic/dsl'; import { getElementRange } from '@/lib/utils/element'; export function useMouseSelection( diff --git a/components/slide-renderer/Editor/Canvas/hooks/useMoveShapeKeypoint.ts b/components/slide-renderer/Editor/Canvas/hooks/useMoveShapeKeypoint.ts index b6507a96a..a9c712036 100644 --- a/components/slide-renderer/Editor/Canvas/hooks/useMoveShapeKeypoint.ts +++ b/components/slide-renderer/Editor/Canvas/hooks/useMoveShapeKeypoint.ts @@ -1,5 +1,5 @@ import { useCallback } from 'react'; -import type { PPTElement, PPTShapeElement } from '@maic/dsl'; +import type { PPTElement, PPTShapeElement } from '@openmaic/dsl'; import { useHistorySnapshot } from '@/lib/hooks/use-history-snapshot'; import { SHAPE_PATH_FORMULAS } from '@/configs/shapes'; import { useCanvasOperations } from '@/lib/hooks/use-canvas-operations'; diff --git a/components/slide-renderer/Editor/Canvas/hooks/useRotateElement.ts b/components/slide-renderer/Editor/Canvas/hooks/useRotateElement.ts index 286f197ee..469ad6e2d 100644 --- a/components/slide-renderer/Editor/Canvas/hooks/useRotateElement.ts +++ b/components/slide-renderer/Editor/Canvas/hooks/useRotateElement.ts @@ -5,7 +5,7 @@ import type { PPTVideoElement, PPTAudioElement, PPTChartElement, -} from '@maic/dsl'; +} from '@openmaic/dsl'; import { useHistorySnapshot } from '@/lib/hooks/use-history-snapshot'; import { useCanvasOperations } from '@/lib/hooks/use-canvas-operations'; diff --git a/components/slide-renderer/Editor/Canvas/hooks/useScaleElement.ts b/components/slide-renderer/Editor/Canvas/hooks/useScaleElement.ts index 47264ce4d..0c4f17e7f 100644 --- a/components/slide-renderer/Editor/Canvas/hooks/useScaleElement.ts +++ b/components/slide-renderer/Editor/Canvas/hooks/useScaleElement.ts @@ -1,7 +1,7 @@ import { useCallback } from 'react'; import { useCanvasStore } from '@/lib/store'; import { useKeyboardStore } from '@/lib/store/keyboard'; -import type { PPTElement, PPTLineElement, PPTImageElement, PPTShapeElement } from '@maic/dsl'; +import type { PPTElement, PPTLineElement, PPTImageElement, PPTShapeElement } from '@openmaic/dsl'; import { OperateResizeHandlers, type AlignmentLineProps, diff --git a/components/slide-renderer/Editor/Canvas/hooks/useSelectElement.ts b/components/slide-renderer/Editor/Canvas/hooks/useSelectElement.ts index e1ebe0a8a..fcbb65cdc 100644 --- a/components/slide-renderer/Editor/Canvas/hooks/useSelectElement.ts +++ b/components/slide-renderer/Editor/Canvas/hooks/useSelectElement.ts @@ -2,7 +2,7 @@ import { useCallback } from 'react'; import { uniq } from 'lodash'; import { useCanvasStore } from '@/lib/store'; import { useKeyboardStore } from '@/lib/store/keyboard'; -import type { PPTElement } from '@maic/dsl'; +import type { PPTElement } from '@openmaic/dsl'; /** * Hook for handling element selection in Canvas diff --git a/components/slide-renderer/Editor/Canvas/index.tsx b/components/slide-renderer/Editor/Canvas/index.tsx index 48e51fcaf..b7a2c53a6 100644 --- a/components/slide-renderer/Editor/Canvas/index.tsx +++ b/components/slide-renderer/Editor/Canvas/index.tsx @@ -24,7 +24,7 @@ import { ElementCreateSelection } from './ElementCreateSelection'; import { ShapeCreateCanvas } from './ShapeCreateCanvas'; import { Ruler } from './Ruler'; import { GridLines } from './GridLines'; -import type { PPTElement } from '@maic/dsl'; +import type { PPTElement } from '@openmaic/dsl'; import type { AlignmentLineProps } from '@/lib/types/edit'; import type { ContextmenuItem } from './EditableElement'; import type { SlideContent } from '@/lib/types/stage'; diff --git a/components/slide-renderer/Editor/HighlightOverlay.tsx b/components/slide-renderer/Editor/HighlightOverlay.tsx index 19691d42b..7edd9af62 100644 --- a/components/slide-renderer/Editor/HighlightOverlay.tsx +++ b/components/slide-renderer/Editor/HighlightOverlay.tsx @@ -4,7 +4,7 @@ import { useMemo } from 'react'; import { useSceneSelector } from '@/lib/contexts/scene-context'; import { useCanvasStore } from '@/lib/store/canvas'; import type { SlideContent } from '@/lib/types/stage'; -import type { PPTElement } from '@maic/dsl'; +import type { PPTElement } from '@openmaic/dsl'; /** * Highlight overlay component diff --git a/components/slide-renderer/Editor/LaserPointerOverlay.tsx b/components/slide-renderer/Editor/LaserPointerOverlay.tsx index c24f0f1b3..c6d42f155 100644 --- a/components/slide-renderer/Editor/LaserPointerOverlay.tsx +++ b/components/slide-renderer/Editor/LaserPointerOverlay.tsx @@ -5,7 +5,7 @@ import { AnimatePresence } from 'motion/react'; import { useSceneSelector } from '@/lib/contexts/scene-context'; import { useCanvasStore } from '@/lib/store/canvas'; import type { SlideContent } from '@/lib/types/stage'; -import type { PPTElement } from '@maic/dsl'; +import type { PPTElement } from '@openmaic/dsl'; import { LaserOverlay } from './LaserOverlay'; interface LaserPointerOverlayProps { diff --git a/components/slide-renderer/Editor/ScreenCanvas.tsx b/components/slide-renderer/Editor/ScreenCanvas.tsx index 60d05b846..4a924d6df 100644 --- a/components/slide-renderer/Editor/ScreenCanvas.tsx +++ b/components/slide-renderer/Editor/ScreenCanvas.tsx @@ -9,7 +9,7 @@ import { useCanvasStore } from '@/lib/store'; import { useSceneSelector } from '@/lib/contexts/scene-context'; import { findElementGeometry } from '@/lib/utils/geometry'; import type { SlideContent } from '@/lib/types/stage'; -import type { PPTElement, SlideBackground } from '@maic/dsl'; +import type { PPTElement, SlideBackground } from '@openmaic/dsl'; import type { PercentageGeometry } from '@/lib/types/action'; import { useViewportSize } from './Canvas/hooks/useViewportSize'; import { useRef, useMemo } from 'react'; diff --git a/components/slide-renderer/Editor/ScreenElement.tsx b/components/slide-renderer/Editor/ScreenElement.tsx index 83d7bf0c1..d153e9497 100644 --- a/components/slide-renderer/Editor/ScreenElement.tsx +++ b/components/slide-renderer/Editor/ScreenElement.tsx @@ -1,6 +1,6 @@ 'use client'; -import { ElementTypes, type PPTElement } from '@maic/dsl'; +import { ElementTypes, type PPTElement } from '@openmaic/dsl'; import { useMemo } from 'react'; import { BaseImageElement } from '../components/element/ImageElement/BaseImageElement'; diff --git a/components/slide-renderer/Editor/SpotlightOverlay.tsx b/components/slide-renderer/Editor/SpotlightOverlay.tsx index b8a767699..7d5f63f7a 100644 --- a/components/slide-renderer/Editor/SpotlightOverlay.tsx +++ b/components/slide-renderer/Editor/SpotlightOverlay.tsx @@ -5,7 +5,7 @@ import { motion, AnimatePresence } from 'motion/react'; import { useSceneSelector } from '@/lib/contexts/scene-context'; import { useCanvasStore } from '@/lib/store/canvas'; import type { SlideContent } from '@/lib/types/stage'; -import type { PPTElement } from '@maic/dsl'; +import type { PPTElement } from '@openmaic/dsl'; interface SpotlightRect { x: number; diff --git a/components/slide-renderer/SlideThumbnail.tsx b/components/slide-renderer/SlideThumbnail.tsx index 5d7ed305b..874278a9c 100644 --- a/components/slide-renderer/SlideThumbnail.tsx +++ b/components/slide-renderer/SlideThumbnail.tsx @@ -2,11 +2,11 @@ import { useMemo } from 'react'; import { Play } from 'lucide-react'; -import type { Slide, PPTElement, PPTVideoElement } from '@maic/dsl'; +import type { Slide, PPTElement, PPTVideoElement } from '@openmaic/dsl'; import { isMediaPlaceholder, useMediaGenerationStore } from '@/lib/store/media-generation'; import { useMediaStageId } from '@/lib/contexts/media-stage-context'; import { getVideoMediaRefForElement } from '@/lib/media/video-manifest'; -import { SlideCanvas } from '@maic/renderer'; +import { SlideCanvas } from '@openmaic/renderer'; interface SlideThumbnailProps { /** Slide data */ @@ -43,7 +43,7 @@ function mediaTaskKeyFor(el: PPTElement): string | undefined { * Resolve a slide's generated-media refs against the media-generation store so * the thumbnail stays in sync as generation (and retries) complete. * - * `@maic/renderer` is a pure package: it renders `element.src` as-is and knows + * `@openmaic/renderer` is a pure package: it renders `element.src` as-is and knows * nothing about this app's async media generation. The store never mutates the * slide's elements (it keeps the `gen_*`/`mediaRef` key and tracks the * generated `objectUrl` in a task), so a static render would show the raw @@ -105,7 +105,7 @@ function useResolvedSlide(slide: Slide): Slide { } /** - * Read-only thumbnail rendering for a video element. Replaces `@maic/renderer`'s + * Read-only thumbnail rendering for a video element. Replaces `@openmaic/renderer`'s * default `