@lemonppt/templates 0.1.6 → 0.1.7
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/dist/base/comparison-v3.d.ts +19 -0
- package/dist/base/comparison-v3.d.ts.map +1 -0
- package/dist/base/comparison-v3.js +16 -0
- package/dist/base/comparison-v3.js.map +1 -0
- package/dist/base/comparison-v3.test.d.ts +2 -0
- package/dist/base/comparison-v3.test.d.ts.map +1 -0
- package/dist/base/comparison-v3.test.js +16 -0
- package/dist/base/comparison-v3.test.js.map +1 -0
- package/dist/base/content-v4.d.ts +16 -0
- package/dist/base/content-v4.d.ts.map +1 -0
- package/dist/base/content-v4.js +16 -0
- package/dist/base/content-v4.js.map +1 -0
- package/dist/base/content-v4.test.d.ts +2 -0
- package/dist/base/content-v4.test.d.ts.map +1 -0
- package/dist/base/content-v4.test.js +16 -0
- package/dist/base/content-v4.test.js.map +1 -0
- package/dist/base/cover-v2.d.ts +15 -0
- package/dist/base/cover-v2.d.ts.map +1 -0
- package/dist/base/cover-v2.js +15 -0
- package/dist/base/cover-v2.js.map +1 -0
- package/dist/base/cover-v2.test.d.ts +2 -0
- package/dist/base/cover-v2.test.d.ts.map +1 -0
- package/dist/base/cover-v2.test.js +16 -0
- package/dist/base/cover-v2.test.js.map +1 -0
- package/dist/base/feature-v2.d.ts +17 -0
- package/dist/base/feature-v2.d.ts.map +1 -0
- package/dist/base/feature-v2.js +15 -0
- package/dist/base/feature-v2.js.map +1 -0
- package/dist/base/feature-v2.test.d.ts +2 -0
- package/dist/base/feature-v2.test.d.ts.map +1 -0
- package/dist/base/feature-v2.test.js +16 -0
- package/dist/base/feature-v2.test.js.map +1 -0
- package/dist/base/feature-v3.d.ts +17 -0
- package/dist/base/feature-v3.d.ts.map +1 -0
- package/dist/base/feature-v3.js +16 -0
- package/dist/base/feature-v3.js.map +1 -0
- package/dist/base/feature-v3.test.d.ts +2 -0
- package/dist/base/feature-v3.test.d.ts.map +1 -0
- package/dist/base/feature-v3.test.js +16 -0
- package/dist/base/feature-v3.test.js.map +1 -0
- package/dist/base/gallery-v3.d.ts +16 -0
- package/dist/base/gallery-v3.d.ts.map +1 -0
- package/dist/base/gallery-v3.js +16 -0
- package/dist/base/gallery-v3.js.map +1 -0
- package/dist/base/gallery-v3.test.d.ts +2 -0
- package/dist/base/gallery-v3.test.d.ts.map +1 -0
- package/dist/base/gallery-v3.test.js +16 -0
- package/dist/base/gallery-v3.test.js.map +1 -0
- package/dist/base/image-v2.d.ts +15 -0
- package/dist/base/image-v2.d.ts.map +1 -0
- package/dist/base/image-v2.js +15 -0
- package/dist/base/image-v2.js.map +1 -0
- package/dist/base/image-v2.test.d.ts +2 -0
- package/dist/base/image-v2.test.d.ts.map +1 -0
- package/dist/base/image-v2.test.js +16 -0
- package/dist/base/image-v2.test.js.map +1 -0
- package/dist/base/metric-v3.d.ts +18 -0
- package/dist/base/metric-v3.d.ts.map +1 -0
- package/dist/base/metric-v3.js +15 -0
- package/dist/base/metric-v3.js.map +1 -0
- package/dist/base/metric-v3.test.d.ts +2 -0
- package/dist/base/metric-v3.test.d.ts.map +1 -0
- package/dist/base/metric-v3.test.js +16 -0
- package/dist/base/metric-v3.test.js.map +1 -0
- package/dist/base/pricing-v2.d.ts +19 -0
- package/dist/base/pricing-v2.d.ts.map +1 -0
- package/dist/base/pricing-v2.js +15 -0
- package/dist/base/pricing-v2.js.map +1 -0
- package/dist/base/pricing-v2.test.d.ts +2 -0
- package/dist/base/pricing-v2.test.d.ts.map +1 -0
- package/dist/base/pricing-v2.test.js +16 -0
- package/dist/base/pricing-v2.test.js.map +1 -0
- package/dist/base/process-v3.d.ts +16 -0
- package/dist/base/process-v3.d.ts.map +1 -0
- package/dist/base/process-v3.js +16 -0
- package/dist/base/process-v3.js.map +1 -0
- package/dist/base/process-v3.test.d.ts +2 -0
- package/dist/base/process-v3.test.d.ts.map +1 -0
- package/dist/base/process-v3.test.js +16 -0
- package/dist/base/process-v3.test.js.map +1 -0
- package/dist/base/quote-v3.d.ts +14 -0
- package/dist/base/quote-v3.d.ts.map +1 -0
- package/dist/base/quote-v3.js +15 -0
- package/dist/base/quote-v3.js.map +1 -0
- package/dist/base/quote-v3.test.d.ts +2 -0
- package/dist/base/quote-v3.test.d.ts.map +1 -0
- package/dist/base/quote-v3.test.js +16 -0
- package/dist/base/quote-v3.test.js.map +1 -0
- package/dist/base/roadmap-v2.d.ts +16 -0
- package/dist/base/roadmap-v2.d.ts.map +1 -0
- package/dist/base/roadmap-v2.js +15 -0
- package/dist/base/roadmap-v2.js.map +1 -0
- package/dist/base/roadmap-v2.test.d.ts +2 -0
- package/dist/base/roadmap-v2.test.d.ts.map +1 -0
- package/dist/base/roadmap-v2.test.js +16 -0
- package/dist/base/roadmap-v2.test.js.map +1 -0
- package/dist/base/stats-v2.d.ts +18 -0
- package/dist/base/stats-v2.d.ts.map +1 -0
- package/dist/base/stats-v2.js +16 -0
- package/dist/base/stats-v2.js.map +1 -0
- package/dist/base/stats-v2.test.d.ts +2 -0
- package/dist/base/stats-v2.test.d.ts.map +1 -0
- package/dist/base/stats-v2.test.js +16 -0
- package/dist/base/stats-v2.test.js.map +1 -0
- package/dist/base/team-v2.d.ts +18 -0
- package/dist/base/team-v2.d.ts.map +1 -0
- package/dist/base/team-v2.js +15 -0
- package/dist/base/team-v2.js.map +1 -0
- package/dist/base/team-v2.test.d.ts +2 -0
- package/dist/base/team-v2.test.d.ts.map +1 -0
- package/dist/base/team-v2.test.js +16 -0
- package/dist/base/team-v2.test.js.map +1 -0
- package/dist/base/testimonial-v3.d.ts +17 -0
- package/dist/base/testimonial-v3.d.ts.map +1 -0
- package/dist/base/testimonial-v3.js +15 -0
- package/dist/base/testimonial-v3.js.map +1 -0
- package/dist/base/testimonial-v3.test.d.ts +2 -0
- package/dist/base/testimonial-v3.test.d.ts.map +1 -0
- package/dist/base/testimonial-v3.test.js +16 -0
- package/dist/base/testimonial-v3.test.js.map +1 -0
- package/dist/base/timeline-v2.d.ts +17 -0
- package/dist/base/timeline-v2.d.ts.map +1 -0
- package/dist/base/timeline-v2.js +15 -0
- package/dist/base/timeline-v2.js.map +1 -0
- package/dist/base/timeline-v2.test.d.ts +2 -0
- package/dist/base/timeline-v2.test.d.ts.map +1 -0
- package/dist/base/timeline-v2.test.js +27 -0
- package/dist/base/timeline-v2.test.js.map +1 -0
- package/dist/base/timeline-v3.d.ts +17 -0
- package/dist/base/timeline-v3.d.ts.map +1 -0
- package/dist/base/timeline-v3.js +16 -0
- package/dist/base/timeline-v3.js.map +1 -0
- package/dist/base/timeline-v3.test.d.ts +2 -0
- package/dist/base/timeline-v3.test.d.ts.map +1 -0
- package/dist/base/timeline-v3.test.js +16 -0
- package/dist/base/timeline-v3.test.js.map +1 -0
- package/dist/index.d.ts +22 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +22 -0
- package/dist/index.js.map +1 -1
- package/dist/registry.d.ts +17 -0
- package/dist/registry.d.ts.map +1 -1
- package/dist/registry.js +110 -6
- package/dist/registry.js.map +1 -1
- package/dist/themes/dark-tech/cover-v1.d.ts +15 -0
- package/dist/themes/dark-tech/cover-v1.d.ts.map +1 -0
- package/dist/themes/dark-tech/cover-v1.js +15 -0
- package/dist/themes/dark-tech/cover-v1.js.map +1 -0
- package/dist/themes/dark-tech/cover-v1.test.d.ts +2 -0
- package/dist/themes/dark-tech/cover-v1.test.d.ts.map +1 -0
- package/dist/themes/dark-tech/cover-v1.test.js +17 -0
- package/dist/themes/dark-tech/cover-v1.test.js.map +1 -0
- package/dist/themes/dark-tech/feature-v1.d.ts +16 -0
- package/dist/themes/dark-tech/feature-v1.d.ts.map +1 -0
- package/dist/themes/dark-tech/feature-v1.js +15 -0
- package/dist/themes/dark-tech/feature-v1.js.map +1 -0
- package/dist/themes/dark-tech/feature-v1.test.d.ts +2 -0
- package/dist/themes/dark-tech/feature-v1.test.d.ts.map +1 -0
- package/dist/themes/dark-tech/feature-v1.test.js +23 -0
- package/dist/themes/dark-tech/feature-v1.test.js.map +1 -0
- package/dist/themes/dark-tech/metric-v1.d.ts +14 -0
- package/dist/themes/dark-tech/metric-v1.d.ts.map +1 -0
- package/dist/themes/dark-tech/metric-v1.js +15 -0
- package/dist/themes/dark-tech/metric-v1.js.map +1 -0
- package/dist/themes/dark-tech/metric-v1.test.d.ts +2 -0
- package/dist/themes/dark-tech/metric-v1.test.d.ts.map +1 -0
- package/dist/themes/dark-tech/metric-v1.test.js +22 -0
- package/dist/themes/dark-tech/metric-v1.test.js.map +1 -0
- package/dist/themes/warm-business/testimonial-v1.d.ts +15 -0
- package/dist/themes/warm-business/testimonial-v1.d.ts.map +1 -0
- package/dist/themes/warm-business/testimonial-v1.js +15 -0
- package/dist/themes/warm-business/testimonial-v1.js.map +1 -0
- package/dist/themes/warm-business/testimonial-v1.test.d.ts +2 -0
- package/dist/themes/warm-business/testimonial-v1.test.d.ts.map +1 -0
- package/dist/themes/warm-business/testimonial-v1.test.js +22 -0
- package/dist/themes/warm-business/testimonial-v1.test.js.map +1 -0
- package/dist/themes/warm-business/timeline-v1.d.ts +17 -0
- package/dist/themes/warm-business/timeline-v1.d.ts.map +1 -0
- package/dist/themes/warm-business/timeline-v1.js +15 -0
- package/dist/themes/warm-business/timeline-v1.js.map +1 -0
- package/dist/themes/warm-business/timeline-v1.test.d.ts +2 -0
- package/dist/themes/warm-business/timeline-v1.test.d.ts.map +1 -0
- package/dist/themes/warm-business/timeline-v1.test.js +23 -0
- package/dist/themes/warm-business/timeline-v1.test.js.map +1 -0
- package/package.json +3 -3
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { EditableField } from '../editable-field.js';
|
|
3
|
+
export const timelineV2Meta = {
|
|
4
|
+
id: 'timeline_v2',
|
|
5
|
+
theme: 'base',
|
|
6
|
+
role: 'timeline',
|
|
7
|
+
displayName: '垂直时间线',
|
|
8
|
+
description: '垂直时间线展示关键里程碑,适合发展历程、项目节点',
|
|
9
|
+
needsMedia: false,
|
|
10
|
+
};
|
|
11
|
+
export function TimelineV2(props) {
|
|
12
|
+
const { kicker, title, milestones = [], _slideIdx, _editable } = props;
|
|
13
|
+
return (_jsxs("div", { className: "lp-slide lp-timeline-v2", children: [_jsxs("div", { className: "lp-timeline-v2-header", children: [kicker && (_jsx(EditableField, { prop: "kicker", slideIdx: _slideIdx, editable: _editable, as: "div", className: "lp-kicker", children: kicker })), _jsx(EditableField, { prop: "title", slideIdx: _slideIdx, editable: _editable, as: "h2", className: "lp-heading", children: title })] }), _jsx("div", { className: "lp-timeline-v2-list", children: milestones.map((milestone, index) => (_jsxs("div", { className: "lp-timeline-v2-item", children: [_jsxs("div", { className: "lp-timeline-v2-marker", children: [_jsx("div", { className: "lp-timeline-v2-dot" }), index < milestones.length - 1 && _jsx("div", { className: "lp-timeline-v2-line" })] }), _jsxs("div", { className: "lp-timeline-v2-body", children: [_jsx(EditableField, { prop: `milestones.${index}.date`, slideIdx: _slideIdx, editable: _editable, as: "div", className: "lp-timeline-v2-date", children: milestone.date }), _jsx(EditableField, { prop: `milestones.${index}.title`, slideIdx: _slideIdx, editable: _editable, as: "h3", className: "lp-timeline-v2-title", children: milestone.title }), milestone.description && (_jsx(EditableField, { prop: `milestones.${index}.description`, slideIdx: _slideIdx, editable: _editable, as: "p", className: "lp-timeline-v2-description", children: milestone.description }))] })] }, index))) })] }));
|
|
14
|
+
}
|
|
15
|
+
//# sourceMappingURL=timeline-v2.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"timeline-v2.js","sourceRoot":"","sources":["../../src/base/timeline-v2.tsx"],"names":[],"mappings":";AAMA,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAWrD,MAAM,CAAC,MAAM,cAAc,GAAe;IACxC,EAAE,EAAE,aAAa;IACjB,KAAK,EAAE,MAAM;IACb,IAAI,EAAE,UAAU;IAChB,WAAW,EAAE,OAAO;IACpB,WAAW,EAAE,0BAA0B;IACvC,UAAU,EAAE,KAAK;CAClB,CAAC;AAEF,MAAM,UAAU,UAAU,CAAC,KAAsB;IAC/C,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,UAAU,GAAG,EAAE,EAAE,SAAS,EAAE,SAAS,EAAE,GAAG,KAAK,CAAC;IAEvE,OAAO,CACL,eAAK,SAAS,EAAC,yBAAyB,aACtC,eAAK,SAAS,EAAC,uBAAuB,aACnC,MAAM,IAAI,CACT,KAAC,aAAa,IAAC,IAAI,EAAC,QAAQ,EAAC,QAAQ,EAAE,SAAS,EAAE,QAAQ,EAAE,SAAS,EAAE,EAAE,EAAC,KAAK,EAAC,SAAS,EAAC,WAAW,YAClG,MAAM,GACO,CACjB,EACD,KAAC,aAAa,IAAC,IAAI,EAAC,OAAO,EAAC,QAAQ,EAAE,SAAS,EAAE,QAAQ,EAAE,SAAS,EAAE,EAAE,EAAC,IAAI,EAAC,SAAS,EAAC,YAAY,YACjG,KAAK,GACQ,IACZ,EACN,cAAK,SAAS,EAAC,qBAAqB,YACjC,UAAU,CAAC,GAAG,CAAC,CAAC,SAAS,EAAE,KAAK,EAAE,EAAE,CAAC,CACpC,eAAiB,SAAS,EAAC,qBAAqB,aAC9C,eAAK,SAAS,EAAC,uBAAuB,aACpC,cAAK,SAAS,EAAC,oBAAoB,GAAG,EACrC,KAAK,GAAG,UAAU,CAAC,MAAM,GAAG,CAAC,IAAI,cAAK,SAAS,EAAC,qBAAqB,GAAG,IACrE,EACN,eAAK,SAAS,EAAC,qBAAqB,aAClC,KAAC,aAAa,IACZ,IAAI,EAAE,cAAc,KAAK,OAAO,EAChC,QAAQ,EAAE,SAAS,EACnB,QAAQ,EAAE,SAAS,EACnB,EAAE,EAAC,KAAK,EACR,SAAS,EAAC,qBAAqB,YAE9B,SAAS,CAAC,IAAI,GACD,EAChB,KAAC,aAAa,IACZ,IAAI,EAAE,cAAc,KAAK,QAAQ,EACjC,QAAQ,EAAE,SAAS,EACnB,QAAQ,EAAE,SAAS,EACnB,EAAE,EAAC,IAAI,EACP,SAAS,EAAC,sBAAsB,YAE/B,SAAS,CAAC,KAAK,GACF,EACf,SAAS,CAAC,WAAW,IAAI,CACxB,KAAC,aAAa,IACZ,IAAI,EAAE,cAAc,KAAK,cAAc,EACvC,QAAQ,EAAE,SAAS,EACnB,QAAQ,EAAE,SAAS,EACnB,EAAE,EAAC,GAAG,EACN,SAAS,EAAC,4BAA4B,YAErC,SAAS,CAAC,WAAW,GACR,CACjB,IACG,KAnCE,KAAK,CAoCT,CACP,CAAC,GACE,IACF,CACP,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"timeline-v2.test.d.ts","sourceRoot":"","sources":["../../src/base/timeline-v2.test.tsx"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
// lemonPPT - AI-powered presentation generation
|
|
2
|
+
// Copyright (c) 2026 lemonforme
|
|
3
|
+
// SPDX-License-Identifier: AGPL-3.0-or-later
|
|
4
|
+
import { describe, expect, it } from 'vitest';
|
|
5
|
+
import { TimelineV2, timelineV2Meta } from './timeline-v2.js';
|
|
6
|
+
describe('timeline_v2', () => {
|
|
7
|
+
it('should have correct meta', () => {
|
|
8
|
+
expect(timelineV2Meta.id).toBe('timeline_v2');
|
|
9
|
+
expect(timelineV2Meta.role).toBe('timeline');
|
|
10
|
+
});
|
|
11
|
+
it('should render with title and milestones', () => {
|
|
12
|
+
const result = TimelineV2({
|
|
13
|
+
title: '项目里程碑',
|
|
14
|
+
kicker: '发展历程',
|
|
15
|
+
milestones: [
|
|
16
|
+
{ date: '2026 Q1', title: '立项', description: '确定产品方向' },
|
|
17
|
+
{ date: '2026 Q2', title: 'MVP', description: '完成核心功能' },
|
|
18
|
+
],
|
|
19
|
+
});
|
|
20
|
+
expect(result).toBeDefined();
|
|
21
|
+
});
|
|
22
|
+
it('should render without milestones', () => {
|
|
23
|
+
const result = TimelineV2({ title: '空时间线' });
|
|
24
|
+
expect(result).toBeDefined();
|
|
25
|
+
});
|
|
26
|
+
});
|
|
27
|
+
//# sourceMappingURL=timeline-v2.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"timeline-v2.test.js","sourceRoot":"","sources":["../../src/base/timeline-v2.test.tsx"],"names":[],"mappings":"AAAA,gDAAgD;AAChD,gCAAgC;AAChC,6CAA6C;AAE7C,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AAC9C,OAAO,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAE9D,QAAQ,CAAC,aAAa,EAAE,GAAG,EAAE;IAC3B,EAAE,CAAC,0BAA0B,EAAE,GAAG,EAAE;QAClC,MAAM,CAAC,cAAc,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;QAC9C,MAAM,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;IAC/C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,yCAAyC,EAAE,GAAG,EAAE;QACjD,MAAM,MAAM,GAAG,UAAU,CAAC;YACxB,KAAK,EAAE,OAAO;YACd,MAAM,EAAE,MAAM;YACd,UAAU,EAAE;gBACV,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,IAAI,EAAE,WAAW,EAAE,QAAQ,EAAE;gBACvD,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,KAAK,EAAE,WAAW,EAAE,QAAQ,EAAE;aACzD;SACF,CAAC,CAAC;QACH,MAAM,CAAC,MAAM,CAAC,CAAC,WAAW,EAAE,CAAC;IAC/B,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,kCAAkC,EAAE,GAAG,EAAE;QAC1C,MAAM,MAAM,GAAG,UAAU,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC;QAC7C,MAAM,CAAC,MAAM,CAAC,CAAC,WAAW,EAAE,CAAC;IAC/B,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import type { LayoutMeta } from '@lemonppt/core';
|
|
2
|
+
import type { ReactNode } from 'react';
|
|
3
|
+
export interface TimelineV3Props {
|
|
4
|
+
kicker?: string;
|
|
5
|
+
title: string;
|
|
6
|
+
events?: {
|
|
7
|
+
date?: string;
|
|
8
|
+
title?: string;
|
|
9
|
+
description?: string;
|
|
10
|
+
}[];
|
|
11
|
+
_slideIdx?: number;
|
|
12
|
+
_editable?: boolean;
|
|
13
|
+
[key: string]: unknown;
|
|
14
|
+
}
|
|
15
|
+
export declare const timelineV3Meta: LayoutMeta;
|
|
16
|
+
export declare function TimelineV3(props: TimelineV3Props): ReactNode;
|
|
17
|
+
//# sourceMappingURL=timeline-v3.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"timeline-v3.d.ts","sourceRoot":"","sources":["../../src/base/timeline-v3.tsx"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AACjD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAGvC,MAAM,WAAW,eAAe;IAC9B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE;QAAE,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,WAAW,CAAC,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;IACnE,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AAED,eAAO,MAAM,cAAc,EAAE,UAO5B,CAAC;AAEF,wBAAgB,UAAU,CAAC,KAAK,EAAE,eAAe,GAAG,SAAS,CAyD5D"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { EditableField } from '../editable-field.js';
|
|
3
|
+
export const timelineV3Meta = {
|
|
4
|
+
id: 'timeline_v3',
|
|
5
|
+
theme: 'base',
|
|
6
|
+
role: 'timeline',
|
|
7
|
+
displayName: '垂直时间线',
|
|
8
|
+
description: '左侧节点时间线加右侧事件卡片',
|
|
9
|
+
needsMedia: false,
|
|
10
|
+
};
|
|
11
|
+
export function TimelineV3(props) {
|
|
12
|
+
const { kicker, title, events = [], _slideIdx, _editable } = props;
|
|
13
|
+
const safeEvents = events.slice(0, 4);
|
|
14
|
+
return (_jsxs("div", { className: "lp-slide lp-timeline-v3", children: [_jsxs("div", { className: "lp-timeline-v3-header", children: [kicker && (_jsx(EditableField, { prop: "kicker", slideIdx: _slideIdx, editable: _editable, as: "div", className: "lp-kicker", children: kicker })), _jsx(EditableField, { prop: "title", slideIdx: _slideIdx, editable: _editable, as: "h2", className: "lp-heading lp-timeline-v3-title", children: title })] }), _jsx("div", { className: "lp-timeline-v3-list", children: safeEvents.map((event, index) => (_jsxs("div", { className: "lp-timeline-v3-event", children: [_jsxs("div", { className: "lp-timeline-v3-node", children: [_jsx("div", { className: "lp-timeline-v3-dot" }), index < safeEvents.length - 1 && _jsx("div", { className: "lp-timeline-v3-line" })] }), _jsxs("div", { className: "lp-timeline-v3-card", children: [_jsx(EditableField, { prop: `events.${index}.date`, slideIdx: _slideIdx, editable: _editable, as: "div", className: "lp-timeline-v3-date", children: event.date }), _jsx(EditableField, { prop: `events.${index}.title`, slideIdx: _slideIdx, editable: _editable, as: "div", className: "lp-timeline-v3-event-title", children: event.title }), _jsx(EditableField, { prop: `events.${index}.description`, slideIdx: _slideIdx, editable: _editable, as: "p", className: "lp-timeline-v3-event-desc", children: event.description })] })] }, index))) })] }));
|
|
15
|
+
}
|
|
16
|
+
//# sourceMappingURL=timeline-v3.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"timeline-v3.js","sourceRoot":"","sources":["../../src/base/timeline-v3.tsx"],"names":[],"mappings":";AAMA,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAWrD,MAAM,CAAC,MAAM,cAAc,GAAe;IACxC,EAAE,EAAE,aAAa;IACjB,KAAK,EAAE,MAAM;IACb,IAAI,EAAE,UAAU;IAChB,WAAW,EAAE,OAAO;IACpB,WAAW,EAAE,gBAAgB;IAC7B,UAAU,EAAE,KAAK;CAClB,CAAC;AAEF,MAAM,UAAU,UAAU,CAAC,KAAsB;IAC/C,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,EAAE,EAAE,SAAS,EAAE,SAAS,EAAE,GAAG,KAAK,CAAC;IACnE,MAAM,UAAU,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IAEtC,OAAO,CACL,eAAK,SAAS,EAAC,yBAAyB,aACtC,eAAK,SAAS,EAAC,uBAAuB,aACnC,MAAM,IAAI,CACT,KAAC,aAAa,IAAC,IAAI,EAAC,QAAQ,EAAC,QAAQ,EAAE,SAAS,EAAE,QAAQ,EAAE,SAAS,EAAE,EAAE,EAAC,KAAK,EAAC,SAAS,EAAC,WAAW,YAClG,MAAM,GACO,CACjB,EACD,KAAC,aAAa,IAAC,IAAI,EAAC,OAAO,EAAC,QAAQ,EAAE,SAAS,EAAE,QAAQ,EAAE,SAAS,EAAE,EAAE,EAAC,IAAI,EAAC,SAAS,EAAC,iCAAiC,YACtH,KAAK,GACQ,IACZ,EACN,cAAK,SAAS,EAAC,qBAAqB,YACjC,UAAU,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE,CAAC,CAChC,eAAiB,SAAS,EAAC,sBAAsB,aAC/C,eAAK,SAAS,EAAC,qBAAqB,aAClC,cAAK,SAAS,EAAC,oBAAoB,GAAG,EACrC,KAAK,GAAG,UAAU,CAAC,MAAM,GAAG,CAAC,IAAI,cAAK,SAAS,EAAC,qBAAqB,GAAG,IACrE,EACN,eAAK,SAAS,EAAC,qBAAqB,aAClC,KAAC,aAAa,IACZ,IAAI,EAAE,UAAU,KAAK,OAAO,EAC5B,QAAQ,EAAE,SAAS,EACnB,QAAQ,EAAE,SAAS,EACnB,EAAE,EAAC,KAAK,EACR,SAAS,EAAC,qBAAqB,YAE9B,KAAK,CAAC,IAAI,GACG,EAChB,KAAC,aAAa,IACZ,IAAI,EAAE,UAAU,KAAK,QAAQ,EAC7B,QAAQ,EAAE,SAAS,EACnB,QAAQ,EAAE,SAAS,EACnB,EAAE,EAAC,KAAK,EACR,SAAS,EAAC,4BAA4B,YAErC,KAAK,CAAC,KAAK,GACE,EAChB,KAAC,aAAa,IACZ,IAAI,EAAE,UAAU,KAAK,cAAc,EACnC,QAAQ,EAAE,SAAS,EACnB,QAAQ,EAAE,SAAS,EACnB,EAAE,EAAC,GAAG,EACN,SAAS,EAAC,2BAA2B,YAEpC,KAAK,CAAC,WAAW,GACJ,IACZ,KAjCE,KAAK,CAkCT,CACP,CAAC,GACE,IACF,CACP,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"timeline-v3.test.d.ts","sourceRoot":"","sources":["../../src/base/timeline-v3.test.tsx"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
// lemonPPT - AI-powered presentation generation
|
|
2
|
+
// Copyright (c) 2026 lemonforme
|
|
3
|
+
// SPDX-License-Identifier: AGPL-3.0-or-later
|
|
4
|
+
import { describe, expect, it } from 'vitest';
|
|
5
|
+
import { TimelineV3, timelineV3Meta } from './timeline-v3.js';
|
|
6
|
+
describe('timeline_v3', () => {
|
|
7
|
+
it('should have correct meta', () => {
|
|
8
|
+
expect(timelineV3Meta.id).toBe('timeline_v3');
|
|
9
|
+
expect(timelineV3Meta.role).toBe('timeline');
|
|
10
|
+
});
|
|
11
|
+
it('should render with title', () => {
|
|
12
|
+
const result = TimelineV3({ title: '测试标题', kicker: '标签' });
|
|
13
|
+
expect(result).toBeDefined();
|
|
14
|
+
});
|
|
15
|
+
});
|
|
16
|
+
//# sourceMappingURL=timeline-v3.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"timeline-v3.test.js","sourceRoot":"","sources":["../../src/base/timeline-v3.test.tsx"],"names":[],"mappings":"AAAA,gDAAgD;AAChD,gCAAgC;AAChC,6CAA6C;AAC7C,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AAC9C,OAAO,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAE9D,QAAQ,CAAC,aAAa,EAAE,GAAG,EAAE;IAC3B,EAAE,CAAC,0BAA0B,EAAE,GAAG,EAAE;QAClC,MAAM,CAAC,cAAc,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;QAC9C,MAAM,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;IAC/C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,0BAA0B,EAAE,GAAG,EAAE;QAClC,MAAM,MAAM,GAAG,UAAU,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC;QAC3D,MAAM,CAAC,MAAM,CAAC,CAAC,WAAW,EAAE,CAAC;IAC/B,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
|
package/dist/index.d.ts
CHANGED
|
@@ -32,4 +32,26 @@ export * from './base/partners-v1.js';
|
|
|
32
32
|
export * from './base/testimonial-v1.js';
|
|
33
33
|
export * from './base/testimonial-v2.js';
|
|
34
34
|
export * from './base/roadmap-v1.js';
|
|
35
|
+
export * from './base/timeline-v2.js';
|
|
36
|
+
export * from './base/roadmap-v2.js';
|
|
37
|
+
export * from './base/pricing-v2.js';
|
|
38
|
+
export * from './base/feature-v2.js';
|
|
39
|
+
export * from './base/team-v2.js';
|
|
40
|
+
export * from './base/metric-v3.js';
|
|
41
|
+
export * from './base/cover-v2.js';
|
|
42
|
+
export * from './base/content-v4.js';
|
|
43
|
+
export * from './base/stats-v2.js';
|
|
44
|
+
export * from './base/image-v2.js';
|
|
45
|
+
export * from './base/quote-v3.js';
|
|
46
|
+
export * from './base/process-v3.js';
|
|
47
|
+
export * from './base/feature-v3.js';
|
|
48
|
+
export * from './base/gallery-v3.js';
|
|
49
|
+
export * from './base/testimonial-v3.js';
|
|
50
|
+
export * from './base/comparison-v3.js';
|
|
51
|
+
export * from './base/timeline-v3.js';
|
|
52
|
+
export * from './themes/dark-tech/cover-v1.js';
|
|
53
|
+
export * from './themes/dark-tech/feature-v1.js';
|
|
54
|
+
export * from './themes/dark-tech/metric-v1.js';
|
|
55
|
+
export * from './themes/warm-business/timeline-v1.js';
|
|
56
|
+
export * from './themes/warm-business/testimonial-v1.js';
|
|
35
57
|
//# 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":"AAIA,cAAc,eAAe,CAAC;AAC9B,cAAc,oBAAoB,CAAC;AACnC,cAAc,qBAAqB,CAAC;AACpC,cAAc,qBAAqB,CAAC;AACpC,cAAc,sBAAsB,CAAC;AACrC,cAAc,sBAAsB,CAAC;AACrC,cAAc,sBAAsB,CAAC;AACrC,cAAc,oBAAoB,CAAC;AACnC,cAAc,oBAAoB,CAAC;AACnC,cAAc,oBAAoB,CAAC;AACnC,cAAc,mBAAmB,CAAC;AAClC,cAAc,sBAAsB,CAAC;AACrC,cAAc,uBAAuB,CAAC;AACtC,cAAc,sBAAsB,CAAC;AACrC,cAAc,yBAAyB,CAAC;AACxC,cAAc,yBAAyB,CAAC;AACxC,cAAc,sBAAsB,CAAC;AACrC,cAAc,sBAAsB,CAAC;AACrC,cAAc,oBAAoB,CAAC;AACnC,cAAc,oBAAoB,CAAC;AACnC,cAAc,sBAAsB,CAAC;AACrC,cAAc,sBAAsB,CAAC;AACrC,cAAc,gCAAgC,CAAC;AAC/C,cAAc,mBAAmB,CAAC;AAClC,cAAc,mBAAmB,CAAC;AAClC,cAAc,oBAAoB,CAAC;AACnC,cAAc,oBAAoB,CAAC;AACnC,cAAc,sBAAsB,CAAC;AACrC,cAAc,sBAAsB,CAAC;AACrC,cAAc,kBAAkB,CAAC;AACjC,cAAc,uBAAuB,CAAC;AACtC,cAAc,0BAA0B,CAAC;AACzC,cAAc,0BAA0B,CAAC;AACzC,cAAc,sBAAsB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAIA,cAAc,eAAe,CAAC;AAC9B,cAAc,oBAAoB,CAAC;AACnC,cAAc,qBAAqB,CAAC;AACpC,cAAc,qBAAqB,CAAC;AACpC,cAAc,sBAAsB,CAAC;AACrC,cAAc,sBAAsB,CAAC;AACrC,cAAc,sBAAsB,CAAC;AACrC,cAAc,oBAAoB,CAAC;AACnC,cAAc,oBAAoB,CAAC;AACnC,cAAc,oBAAoB,CAAC;AACnC,cAAc,mBAAmB,CAAC;AAClC,cAAc,sBAAsB,CAAC;AACrC,cAAc,uBAAuB,CAAC;AACtC,cAAc,sBAAsB,CAAC;AACrC,cAAc,yBAAyB,CAAC;AACxC,cAAc,yBAAyB,CAAC;AACxC,cAAc,sBAAsB,CAAC;AACrC,cAAc,sBAAsB,CAAC;AACrC,cAAc,oBAAoB,CAAC;AACnC,cAAc,oBAAoB,CAAC;AACnC,cAAc,sBAAsB,CAAC;AACrC,cAAc,sBAAsB,CAAC;AACrC,cAAc,gCAAgC,CAAC;AAC/C,cAAc,mBAAmB,CAAC;AAClC,cAAc,mBAAmB,CAAC;AAClC,cAAc,oBAAoB,CAAC;AACnC,cAAc,oBAAoB,CAAC;AACnC,cAAc,sBAAsB,CAAC;AACrC,cAAc,sBAAsB,CAAC;AACrC,cAAc,kBAAkB,CAAC;AACjC,cAAc,uBAAuB,CAAC;AACtC,cAAc,0BAA0B,CAAC;AACzC,cAAc,0BAA0B,CAAC;AACzC,cAAc,sBAAsB,CAAC;AACrC,cAAc,uBAAuB,CAAC;AACtC,cAAc,sBAAsB,CAAC;AACrC,cAAc,sBAAsB,CAAC;AACrC,cAAc,sBAAsB,CAAC;AACrC,cAAc,mBAAmB,CAAC;AAClC,cAAc,qBAAqB,CAAC;AACpC,cAAc,oBAAoB,CAAC;AACnC,cAAc,sBAAsB,CAAC;AACrC,cAAc,oBAAoB,CAAC;AACnC,cAAc,oBAAoB,CAAC;AACnC,cAAc,oBAAoB,CAAC;AACnC,cAAc,sBAAsB,CAAC;AACrC,cAAc,sBAAsB,CAAC;AACrC,cAAc,sBAAsB,CAAC;AACrC,cAAc,0BAA0B,CAAC;AACzC,cAAc,yBAAyB,CAAC;AACxC,cAAc,uBAAuB,CAAC;AACtC,cAAc,gCAAgC,CAAC;AAC/C,cAAc,kCAAkC,CAAC;AACjD,cAAc,iCAAiC,CAAC;AAChD,cAAc,uCAAuC,CAAC;AACtD,cAAc,0CAA0C,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -35,4 +35,26 @@ export * from './base/partners-v1.js';
|
|
|
35
35
|
export * from './base/testimonial-v1.js';
|
|
36
36
|
export * from './base/testimonial-v2.js';
|
|
37
37
|
export * from './base/roadmap-v1.js';
|
|
38
|
+
export * from './base/timeline-v2.js';
|
|
39
|
+
export * from './base/roadmap-v2.js';
|
|
40
|
+
export * from './base/pricing-v2.js';
|
|
41
|
+
export * from './base/feature-v2.js';
|
|
42
|
+
export * from './base/team-v2.js';
|
|
43
|
+
export * from './base/metric-v3.js';
|
|
44
|
+
export * from './base/cover-v2.js';
|
|
45
|
+
export * from './base/content-v4.js';
|
|
46
|
+
export * from './base/stats-v2.js';
|
|
47
|
+
export * from './base/image-v2.js';
|
|
48
|
+
export * from './base/quote-v3.js';
|
|
49
|
+
export * from './base/process-v3.js';
|
|
50
|
+
export * from './base/feature-v3.js';
|
|
51
|
+
export * from './base/gallery-v3.js';
|
|
52
|
+
export * from './base/testimonial-v3.js';
|
|
53
|
+
export * from './base/comparison-v3.js';
|
|
54
|
+
export * from './base/timeline-v3.js';
|
|
55
|
+
export * from './themes/dark-tech/cover-v1.js';
|
|
56
|
+
export * from './themes/dark-tech/feature-v1.js';
|
|
57
|
+
export * from './themes/dark-tech/metric-v1.js';
|
|
58
|
+
export * from './themes/warm-business/timeline-v1.js';
|
|
59
|
+
export * from './themes/warm-business/testimonial-v1.js';
|
|
38
60
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,gDAAgD;AAChD,gCAAgC;AAChC,6CAA6C;AAE7C,cAAc,eAAe,CAAC;AAC9B,cAAc,oBAAoB,CAAC;AACnC,cAAc,qBAAqB,CAAC;AACpC,cAAc,qBAAqB,CAAC;AACpC,cAAc,sBAAsB,CAAC;AACrC,cAAc,sBAAsB,CAAC;AACrC,cAAc,sBAAsB,CAAC;AACrC,cAAc,oBAAoB,CAAC;AACnC,cAAc,oBAAoB,CAAC;AACnC,cAAc,oBAAoB,CAAC;AACnC,cAAc,mBAAmB,CAAC;AAClC,cAAc,sBAAsB,CAAC;AACrC,cAAc,uBAAuB,CAAC;AACtC,cAAc,sBAAsB,CAAC;AACrC,cAAc,yBAAyB,CAAC;AACxC,cAAc,yBAAyB,CAAC;AACxC,cAAc,sBAAsB,CAAC;AACrC,cAAc,sBAAsB,CAAC;AACrC,cAAc,oBAAoB,CAAC;AACnC,cAAc,oBAAoB,CAAC;AACnC,cAAc,sBAAsB,CAAC;AACrC,cAAc,sBAAsB,CAAC;AACrC,cAAc,gCAAgC,CAAC;AAC/C,cAAc,mBAAmB,CAAC;AAClC,cAAc,mBAAmB,CAAC;AAClC,cAAc,oBAAoB,CAAC;AACnC,cAAc,oBAAoB,CAAC;AACnC,cAAc,sBAAsB,CAAC;AACrC,cAAc,sBAAsB,CAAC;AACrC,cAAc,kBAAkB,CAAC;AACjC,cAAc,uBAAuB,CAAC;AACtC,cAAc,0BAA0B,CAAC;AACzC,cAAc,0BAA0B,CAAC;AACzC,cAAc,sBAAsB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,gDAAgD;AAChD,gCAAgC;AAChC,6CAA6C;AAE7C,cAAc,eAAe,CAAC;AAC9B,cAAc,oBAAoB,CAAC;AACnC,cAAc,qBAAqB,CAAC;AACpC,cAAc,qBAAqB,CAAC;AACpC,cAAc,sBAAsB,CAAC;AACrC,cAAc,sBAAsB,CAAC;AACrC,cAAc,sBAAsB,CAAC;AACrC,cAAc,oBAAoB,CAAC;AACnC,cAAc,oBAAoB,CAAC;AACnC,cAAc,oBAAoB,CAAC;AACnC,cAAc,mBAAmB,CAAC;AAClC,cAAc,sBAAsB,CAAC;AACrC,cAAc,uBAAuB,CAAC;AACtC,cAAc,sBAAsB,CAAC;AACrC,cAAc,yBAAyB,CAAC;AACxC,cAAc,yBAAyB,CAAC;AACxC,cAAc,sBAAsB,CAAC;AACrC,cAAc,sBAAsB,CAAC;AACrC,cAAc,oBAAoB,CAAC;AACnC,cAAc,oBAAoB,CAAC;AACnC,cAAc,sBAAsB,CAAC;AACrC,cAAc,sBAAsB,CAAC;AACrC,cAAc,gCAAgC,CAAC;AAC/C,cAAc,mBAAmB,CAAC;AAClC,cAAc,mBAAmB,CAAC;AAClC,cAAc,oBAAoB,CAAC;AACnC,cAAc,oBAAoB,CAAC;AACnC,cAAc,sBAAsB,CAAC;AACrC,cAAc,sBAAsB,CAAC;AACrC,cAAc,kBAAkB,CAAC;AACjC,cAAc,uBAAuB,CAAC;AACtC,cAAc,0BAA0B,CAAC;AACzC,cAAc,0BAA0B,CAAC;AACzC,cAAc,sBAAsB,CAAC;AACrC,cAAc,uBAAuB,CAAC;AACtC,cAAc,sBAAsB,CAAC;AACrC,cAAc,sBAAsB,CAAC;AACrC,cAAc,sBAAsB,CAAC;AACrC,cAAc,mBAAmB,CAAC;AAClC,cAAc,qBAAqB,CAAC;AACpC,cAAc,oBAAoB,CAAC;AACnC,cAAc,sBAAsB,CAAC;AACrC,cAAc,oBAAoB,CAAC;AACnC,cAAc,oBAAoB,CAAC;AACnC,cAAc,oBAAoB,CAAC;AACnC,cAAc,sBAAsB,CAAC;AACrC,cAAc,sBAAsB,CAAC;AACrC,cAAc,sBAAsB,CAAC;AACrC,cAAc,0BAA0B,CAAC;AACzC,cAAc,yBAAyB,CAAC;AACxC,cAAc,uBAAuB,CAAC;AACtC,cAAc,gCAAgC,CAAC;AAC/C,cAAc,kCAAkC,CAAC;AACjD,cAAc,iCAAiC,CAAC;AAChD,cAAc,uCAAuC,CAAC;AACtD,cAAc,0CAA0C,CAAC"}
|
package/dist/registry.d.ts
CHANGED
|
@@ -4,14 +4,31 @@ export interface RegisteredLayout<P extends Record<string, unknown>> {
|
|
|
4
4
|
meta: LayoutMeta;
|
|
5
5
|
component: ComponentType<P>;
|
|
6
6
|
}
|
|
7
|
+
/** 通用共享版式的主题标识;旧版式中仍可能使用 'base',两者等价。 */
|
|
8
|
+
export declare const UNIVERSAL_THEME = "*";
|
|
9
|
+
/** 与 UNIVERSAL_THEME 等价的历史主题标识,用于兼容旧版式。 */
|
|
10
|
+
export declare const LEGACY_UNIVERSAL_THEME = "base";
|
|
11
|
+
export declare function normalizeUniversalTheme(theme: string): string;
|
|
7
12
|
export declare function registerLayout<P extends Record<string, unknown>>(layout: RegisteredLayout<P>): void;
|
|
8
13
|
export declare function getLayout(id: string): RegisteredLayout<Record<string, unknown>> | undefined;
|
|
14
|
+
/**
|
|
15
|
+
* 根据页面角色和主题解析最合适的版式。
|
|
16
|
+
* 优先返回主题专属变体,找不到则返回通用共享版式。
|
|
17
|
+
*/
|
|
18
|
+
export declare function resolveLayout(role: string, theme?: string): RegisteredLayout<Record<string, unknown>> | undefined;
|
|
9
19
|
export declare function listLayouts(): LayoutMeta[];
|
|
10
20
|
export declare function listLayoutsByTheme(theme: string): LayoutMeta[];
|
|
11
21
|
export declare function listLayoutsByRole(role: LayoutMeta['role']): LayoutMeta[];
|
|
22
|
+
/**
|
|
23
|
+
* 返回指定角色在指定主题下可用的版式元数据。
|
|
24
|
+
* 包含主题专属变体与通用共享版式。
|
|
25
|
+
*/
|
|
26
|
+
export declare function listLayoutsByRoleAndTheme(role: LayoutMeta['role'], theme?: string): LayoutMeta[];
|
|
12
27
|
export interface RenderSlideOptions {
|
|
13
28
|
slideIdx?: number;
|
|
14
29
|
editable?: boolean;
|
|
30
|
+
/** 当前 deck 主题,用于未来支持主题专属渲染回退。 */
|
|
31
|
+
theme?: string;
|
|
15
32
|
}
|
|
16
33
|
export declare function renderSlide(slide: Slide, options?: RenderSlideOptions): ReactElement | null;
|
|
17
34
|
//# sourceMappingURL=registry.d.ts.map
|
package/dist/registry.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../src/registry.tsx"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,UAAU,EAAE,KAAK,EAAE,MAAM,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../src/registry.tsx"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,UAAU,EAAE,KAAK,EAAE,MAAM,gBAAgB,CAAC;AAkBxD,OAAO,KAAK,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,OAAO,CAAC;AAgDzD,MAAM,WAAW,gBAAgB,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IACjE,IAAI,EAAE,UAAU,CAAC;IACjB,SAAS,EAAE,aAAa,CAAC,CAAC,CAAC,CAAC;CAC7B;AAED,yCAAyC;AACzC,eAAO,MAAM,eAAe,MAAM,CAAC;AACnC,2CAA2C;AAC3C,eAAO,MAAM,sBAAsB,SAAS,CAAC;AAE7C,wBAAgB,uBAAuB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAE7D;AAQD,wBAAgB,cAAc,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC9D,MAAM,EAAE,gBAAgB,CAAC,CAAC,CAAC,GAC1B,IAAI,CAUN;AAED,wBAAgB,SAAS,CAAC,EAAE,EAAE,MAAM,GAAG,gBAAgB,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,GAAG,SAAS,CAE3F;AAED;;;GAGG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,gBAAgB,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,GAAG,SAAS,CAejH;AAED,wBAAgB,WAAW,IAAI,UAAU,EAAE,CAE1C;AAED,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,MAAM,GAAG,UAAU,EAAE,CAM9D;AAED,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,UAAU,CAAC,MAAM,CAAC,GAAG,UAAU,EAAE,CAExE;AAED;;;GAGG;AACH,wBAAgB,yBAAyB,CAAC,IAAI,EAAE,UAAU,CAAC,MAAM,CAAC,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,UAAU,EAAE,CAShG;AAED,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,iCAAiC;IACjC,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,wBAAgB,WAAW,CAAC,KAAK,EAAE,KAAK,EAAE,OAAO,GAAE,kBAAuB,GAAG,YAAY,GAAG,IAAI,CAO/F"}
|
package/dist/registry.js
CHANGED
|
@@ -1,4 +1,21 @@
|
|
|
1
1
|
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
+
import { TimelineV3, timelineV3Meta } from './base/timeline-v3.js';
|
|
3
|
+
import { ComparisonV3, comparisonV3Meta } from './base/comparison-v3.js';
|
|
4
|
+
import { TestimonialV3, testimonialV3Meta } from './base/testimonial-v3.js';
|
|
5
|
+
import { GalleryV3, galleryV3Meta } from './base/gallery-v3.js';
|
|
6
|
+
import { FeatureV3, featureV3Meta } from './base/feature-v3.js';
|
|
7
|
+
import { ProcessV3, processV3Meta } from './base/process-v3.js';
|
|
8
|
+
import { QuoteV3, quoteV3Meta } from './base/quote-v3.js';
|
|
9
|
+
import { ImageV2, imageV2Meta } from './base/image-v2.js';
|
|
10
|
+
import { StatsV2, statsV2Meta } from './base/stats-v2.js';
|
|
11
|
+
import { ContentV4, contentV4Meta } from './base/content-v4.js';
|
|
12
|
+
import { CoverV2, coverV2Meta } from './base/cover-v2.js';
|
|
13
|
+
import { MetricV3, metricV3Meta } from './base/metric-v3.js';
|
|
14
|
+
import { TeamV2, teamV2Meta } from './base/team-v2.js';
|
|
15
|
+
import { FeatureV2, featureV2Meta } from './base/feature-v2.js';
|
|
16
|
+
import { PricingV2, pricingV2Meta } from './base/pricing-v2.js';
|
|
17
|
+
import { RoadmapV2, roadmapV2Meta } from './base/roadmap-v2.js';
|
|
18
|
+
import { TimelineV2, timelineV2Meta } from './base/timeline-v2.js';
|
|
2
19
|
import { ClosingV1, closingV1Meta } from './base/closing-v1.js';
|
|
3
20
|
import { ClosingV2, closingV2Meta } from './base/closing-v2.js';
|
|
4
21
|
import { ChartV1, chartV1Meta } from './base/chart-v1.js';
|
|
@@ -32,24 +49,82 @@ import { QuoteV1, quoteV1Meta } from './base/quote-v1.js';
|
|
|
32
49
|
import { QuoteV2, quoteV2Meta } from './base/quote-v2.js';
|
|
33
50
|
import { SwotV1, swotV1Meta } from './base/swot-v1.js';
|
|
34
51
|
import { TableOfContentsV1, tableOfContentsV1Meta } from './base/table-of-contents-v1.js';
|
|
35
|
-
|
|
52
|
+
import { DarkTechCoverV1, darkTechCoverV1Meta } from './themes/dark-tech/cover-v1.js';
|
|
53
|
+
import { DarkTechFeatureV1, darkTechFeatureV1Meta } from './themes/dark-tech/feature-v1.js';
|
|
54
|
+
import { DarkTechMetricV1, darkTechMetricV1Meta } from './themes/dark-tech/metric-v1.js';
|
|
55
|
+
import { WarmBusinessTimelineV1, warmBusinessTimelineV1Meta, } from './themes/warm-business/timeline-v1.js';
|
|
56
|
+
import { WarmBusinessTestimonialV1, warmBusinessTestimonialV1Meta, } from './themes/warm-business/testimonial-v1.js';
|
|
57
|
+
/** 通用共享版式的主题标识;旧版式中仍可能使用 'base',两者等价。 */
|
|
58
|
+
export const UNIVERSAL_THEME = '*';
|
|
59
|
+
/** 与 UNIVERSAL_THEME 等价的历史主题标识,用于兼容旧版式。 */
|
|
60
|
+
export const LEGACY_UNIVERSAL_THEME = 'base';
|
|
61
|
+
export function normalizeUniversalTheme(theme) {
|
|
62
|
+
return theme === LEGACY_UNIVERSAL_THEME ? UNIVERSAL_THEME : theme;
|
|
63
|
+
}
|
|
64
|
+
/** 按版式 ID 索引,保持向后兼容。 */
|
|
65
|
+
const registryById = new Map();
|
|
66
|
+
/** 按 (role, theme) 二维索引,支持主题专属变体。 */
|
|
67
|
+
const registryByRoleTheme = new Map();
|
|
36
68
|
export function registerLayout(layout) {
|
|
37
|
-
|
|
69
|
+
const normalized = layout;
|
|
70
|
+
registryById.set(normalized.meta.id, normalized);
|
|
71
|
+
const role = normalized.meta.role;
|
|
72
|
+
const theme = normalizeUniversalTheme(normalized.meta.theme);
|
|
73
|
+
if (!registryByRoleTheme.has(role)) {
|
|
74
|
+
registryByRoleTheme.set(role, new Map());
|
|
75
|
+
}
|
|
76
|
+
registryByRoleTheme.get(role).set(theme, normalized);
|
|
38
77
|
}
|
|
39
78
|
export function getLayout(id) {
|
|
40
|
-
return
|
|
79
|
+
return registryById.get(id);
|
|
80
|
+
}
|
|
81
|
+
/**
|
|
82
|
+
* 根据页面角色和主题解析最合适的版式。
|
|
83
|
+
* 优先返回主题专属变体,找不到则返回通用共享版式。
|
|
84
|
+
*/
|
|
85
|
+
export function resolveLayout(role, theme) {
|
|
86
|
+
const byTheme = registryByRoleTheme.get(role);
|
|
87
|
+
if (!byTheme) {
|
|
88
|
+
return undefined;
|
|
89
|
+
}
|
|
90
|
+
if (theme) {
|
|
91
|
+
const normalized = normalizeUniversalTheme(theme);
|
|
92
|
+
const exact = byTheme.get(normalized);
|
|
93
|
+
if (exact) {
|
|
94
|
+
return exact;
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
return byTheme.get(UNIVERSAL_THEME) ?? byTheme.get(LEGACY_UNIVERSAL_THEME);
|
|
41
98
|
}
|
|
42
99
|
export function listLayouts() {
|
|
43
|
-
return Array.from(
|
|
100
|
+
return Array.from(registryById.values()).map((l) => l.meta);
|
|
44
101
|
}
|
|
45
102
|
export function listLayoutsByTheme(theme) {
|
|
46
|
-
|
|
103
|
+
const normalized = normalizeUniversalTheme(theme);
|
|
104
|
+
return listLayouts().filter((l) => {
|
|
105
|
+
const layoutTheme = normalizeUniversalTheme(l.theme);
|
|
106
|
+
return layoutTheme === normalized;
|
|
107
|
+
});
|
|
47
108
|
}
|
|
48
109
|
export function listLayoutsByRole(role) {
|
|
49
110
|
return listLayouts().filter((l) => l.role === role);
|
|
50
111
|
}
|
|
112
|
+
/**
|
|
113
|
+
* 返回指定角色在指定主题下可用的版式元数据。
|
|
114
|
+
* 包含主题专属变体与通用共享版式。
|
|
115
|
+
*/
|
|
116
|
+
export function listLayoutsByRoleAndTheme(role, theme) {
|
|
117
|
+
const normalized = theme ? normalizeUniversalTheme(theme) : UNIVERSAL_THEME;
|
|
118
|
+
return listLayouts().filter((l) => {
|
|
119
|
+
if (l.role !== role) {
|
|
120
|
+
return false;
|
|
121
|
+
}
|
|
122
|
+
const layoutTheme = normalizeUniversalTheme(l.theme);
|
|
123
|
+
return layoutTheme === normalized || layoutTheme === UNIVERSAL_THEME;
|
|
124
|
+
});
|
|
125
|
+
}
|
|
51
126
|
export function renderSlide(slide, options = {}) {
|
|
52
|
-
const registered = getLayout(slide.layout);
|
|
127
|
+
const registered = getLayout(slide.layout) ?? resolveLayout(slide.role, options.theme);
|
|
53
128
|
if (!registered) {
|
|
54
129
|
return null;
|
|
55
130
|
}
|
|
@@ -57,6 +132,23 @@ export function renderSlide(slide, options = {}) {
|
|
|
57
132
|
return _jsx(Component, { ...slide.props, _slideIdx: options.slideIdx, _editable: options.editable });
|
|
58
133
|
}
|
|
59
134
|
// 注册内置版式
|
|
135
|
+
registerLayout({ meta: timelineV3Meta, component: TimelineV3 });
|
|
136
|
+
registerLayout({ meta: comparisonV3Meta, component: ComparisonV3 });
|
|
137
|
+
registerLayout({ meta: testimonialV3Meta, component: TestimonialV3 });
|
|
138
|
+
registerLayout({ meta: galleryV3Meta, component: GalleryV3 });
|
|
139
|
+
registerLayout({ meta: featureV3Meta, component: FeatureV3 });
|
|
140
|
+
registerLayout({ meta: processV3Meta, component: ProcessV3 });
|
|
141
|
+
registerLayout({ meta: quoteV3Meta, component: QuoteV3 });
|
|
142
|
+
registerLayout({ meta: imageV2Meta, component: ImageV2 });
|
|
143
|
+
registerLayout({ meta: statsV2Meta, component: StatsV2 });
|
|
144
|
+
registerLayout({ meta: contentV4Meta, component: ContentV4 });
|
|
145
|
+
registerLayout({ meta: coverV2Meta, component: CoverV2 });
|
|
146
|
+
registerLayout({ meta: metricV3Meta, component: MetricV3 });
|
|
147
|
+
registerLayout({ meta: teamV2Meta, component: TeamV2 });
|
|
148
|
+
registerLayout({ meta: featureV2Meta, component: FeatureV2 });
|
|
149
|
+
registerLayout({ meta: pricingV2Meta, component: PricingV2 });
|
|
150
|
+
registerLayout({ meta: roadmapV2Meta, component: RoadmapV2 });
|
|
151
|
+
registerLayout({ meta: timelineV2Meta, component: TimelineV2 });
|
|
60
152
|
registerLayout({ meta: coverV1Meta, component: CoverV1 });
|
|
61
153
|
registerLayout({ meta: metricV1Meta, component: MetricV1 });
|
|
62
154
|
registerLayout({ meta: metricV2Meta, component: MetricV2 });
|
|
@@ -90,4 +182,16 @@ registerLayout({ meta: closingV1Meta, component: ClosingV1 });
|
|
|
90
182
|
registerLayout({ meta: closingV2Meta, component: ClosingV2 });
|
|
91
183
|
registerLayout({ meta: swotV1Meta, component: SwotV1 });
|
|
92
184
|
registerLayout({ meta: pestV1Meta, component: PestV1 });
|
|
185
|
+
// 主题专属变体(阶段 3)
|
|
186
|
+
registerLayout({ meta: darkTechCoverV1Meta, component: DarkTechCoverV1 });
|
|
187
|
+
registerLayout({ meta: darkTechFeatureV1Meta, component: DarkTechFeatureV1 });
|
|
188
|
+
registerLayout({ meta: darkTechMetricV1Meta, component: DarkTechMetricV1 });
|
|
189
|
+
registerLayout({
|
|
190
|
+
meta: warmBusinessTimelineV1Meta,
|
|
191
|
+
component: WarmBusinessTimelineV1,
|
|
192
|
+
});
|
|
193
|
+
registerLayout({
|
|
194
|
+
meta: warmBusinessTestimonialV1Meta,
|
|
195
|
+
component: WarmBusinessTestimonialV1,
|
|
196
|
+
});
|
|
93
197
|
//# sourceMappingURL=registry.js.map
|
package/dist/registry.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"registry.js","sourceRoot":"","sources":["../src/registry.tsx"],"names":[],"mappings":";
|
|
1
|
+
{"version":3,"file":"registry.js","sourceRoot":"","sources":["../src/registry.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import type { LayoutMeta } from '@lemonppt/core';
|
|
2
|
+
import type { ReactNode } from 'react';
|
|
3
|
+
export interface DarkTechCoverV1Props {
|
|
4
|
+
kicker?: string;
|
|
5
|
+
title: string;
|
|
6
|
+
subtitle?: string;
|
|
7
|
+
date?: string;
|
|
8
|
+
image?: string;
|
|
9
|
+
_slideIdx?: number;
|
|
10
|
+
_editable?: boolean;
|
|
11
|
+
[key: string]: unknown;
|
|
12
|
+
}
|
|
13
|
+
export declare const darkTechCoverV1Meta: LayoutMeta;
|
|
14
|
+
export declare function DarkTechCoverV1(props: DarkTechCoverV1Props): ReactNode;
|
|
15
|
+
//# sourceMappingURL=cover-v1.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cover-v1.d.ts","sourceRoot":"","sources":["../../../src/themes/dark-tech/cover-v1.tsx"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AACjD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAGvC,MAAM,WAAW,oBAAoB;IACnC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AAED,eAAO,MAAM,mBAAmB,EAAE,UAOjC,CAAC;AAEF,wBAAgB,eAAe,CAAC,KAAK,EAAE,oBAAoB,GAAG,SAAS,CAuCtE"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { EditableField } from '../../editable-field.js';
|
|
3
|
+
export const darkTechCoverV1Meta = {
|
|
4
|
+
id: 'dark_tech_cover_v1',
|
|
5
|
+
theme: 'dark-tech',
|
|
6
|
+
role: 'cover',
|
|
7
|
+
displayName: '深色科技封面',
|
|
8
|
+
description: '科技网格背景 + 霓虹标题',
|
|
9
|
+
needsMedia: true,
|
|
10
|
+
};
|
|
11
|
+
export function DarkTechCoverV1(props) {
|
|
12
|
+
const { kicker, title, subtitle, date, image, _slideIdx, _editable } = props;
|
|
13
|
+
return (_jsxs("div", { className: "lp-slide lp-dark-tech-cover-v1", children: [_jsx("div", { className: "lp-dark-tech-cover-grid", "aria-hidden": "true" }), _jsx("div", { className: "lp-dark-tech-cover-glow", "aria-hidden": "true" }), image && (_jsx("img", { className: "lp-dark-tech-cover-image", src: image, alt: "", "data-lp-editable-image": "true", "data-lp-slide-idx": _slideIdx, "data-lp-prop": "image" })), _jsxs("div", { className: "lp-dark-tech-cover-content", children: [kicker && (_jsx(EditableField, { prop: "kicker", slideIdx: _slideIdx, editable: _editable, as: "div", className: "lp-dark-tech-cover-kicker", children: kicker })), _jsx(EditableField, { prop: "title", slideIdx: _slideIdx, editable: _editable, as: "h1", className: "lp-dark-tech-cover-title", children: title }), subtitle && (_jsx(EditableField, { prop: "subtitle", slideIdx: _slideIdx, editable: _editable, as: "p", className: "lp-dark-tech-cover-subtitle", children: subtitle })), date && (_jsx(EditableField, { prop: "date", slideIdx: _slideIdx, editable: _editable, as: "div", className: "lp-dark-tech-cover-date", children: date }))] })] }));
|
|
14
|
+
}
|
|
15
|
+
//# sourceMappingURL=cover-v1.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cover-v1.js","sourceRoot":"","sources":["../../../src/themes/dark-tech/cover-v1.tsx"],"names":[],"mappings":";AAMA,OAAO,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AAaxD,MAAM,CAAC,MAAM,mBAAmB,GAAe;IAC7C,EAAE,EAAE,oBAAoB;IACxB,KAAK,EAAE,WAAW;IAClB,IAAI,EAAE,OAAO;IACb,WAAW,EAAE,QAAQ;IACrB,WAAW,EAAE,eAAe;IAC5B,UAAU,EAAE,IAAI;CACjB,CAAC;AAEF,MAAM,UAAU,eAAe,CAAC,KAA2B;IACzD,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,IAAI,EAAE,KAAK,EAAE,SAAS,EAAE,SAAS,EAAE,GAAG,KAAK,CAAC;IAE7E,OAAO,CACL,eAAK,SAAS,EAAC,gCAAgC,aAC7C,cAAK,SAAS,EAAC,yBAAyB,iBAAa,MAAM,GAAG,EAC9D,cAAK,SAAS,EAAC,yBAAyB,iBAAa,MAAM,GAAG,EAC7D,KAAK,IAAI,CACR,cACE,SAAS,EAAC,0BAA0B,EACpC,GAAG,EAAE,KAAK,EACV,GAAG,EAAC,EAAE,4BACiB,MAAM,uBACV,SAAS,kBACf,OAAO,GACpB,CACH,EACD,eAAK,SAAS,EAAC,4BAA4B,aACxC,MAAM,IAAI,CACT,KAAC,aAAa,IAAC,IAAI,EAAC,QAAQ,EAAC,QAAQ,EAAE,SAAS,EAAE,QAAQ,EAAE,SAAS,EAAE,EAAE,EAAC,KAAK,EAAC,SAAS,EAAC,2BAA2B,YAClH,MAAM,GACO,CACjB,EACD,KAAC,aAAa,IAAC,IAAI,EAAC,OAAO,EAAC,QAAQ,EAAE,SAAS,EAAE,QAAQ,EAAE,SAAS,EAAE,EAAE,EAAC,IAAI,EAAC,SAAS,EAAC,0BAA0B,YAC/G,KAAK,GACQ,EACf,QAAQ,IAAI,CACX,KAAC,aAAa,IAAC,IAAI,EAAC,UAAU,EAAC,QAAQ,EAAE,SAAS,EAAE,QAAQ,EAAE,SAAS,EAAE,EAAE,EAAC,GAAG,EAAC,SAAS,EAAC,6BAA6B,YACpH,QAAQ,GACK,CACjB,EACA,IAAI,IAAI,CACP,KAAC,aAAa,IAAC,IAAI,EAAC,MAAM,EAAC,QAAQ,EAAE,SAAS,EAAE,QAAQ,EAAE,SAAS,EAAE,EAAE,EAAC,KAAK,EAAC,SAAS,EAAC,yBAAyB,YAC9G,IAAI,GACS,CACjB,IACG,IACF,CACP,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cover-v1.test.d.ts","sourceRoot":"","sources":["../../../src/themes/dark-tech/cover-v1.test.tsx"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
// lemonPPT - AI-powered presentation generation
|
|
2
|
+
// Copyright (c) 2026 lemonforme
|
|
3
|
+
// SPDX-License-Identifier: AGPL-3.0-or-later
|
|
4
|
+
import { describe, expect, it } from 'vitest';
|
|
5
|
+
import { DarkTechCoverV1, darkTechCoverV1Meta } from './cover-v1.js';
|
|
6
|
+
describe('dark_tech_cover_v1', () => {
|
|
7
|
+
it('should have correct meta', () => {
|
|
8
|
+
expect(darkTechCoverV1Meta.id).toBe('dark_tech_cover_v1');
|
|
9
|
+
expect(darkTechCoverV1Meta.role).toBe('cover');
|
|
10
|
+
expect(darkTechCoverV1Meta.theme).toBe('dark-tech');
|
|
11
|
+
});
|
|
12
|
+
it('should render with title', () => {
|
|
13
|
+
const result = DarkTechCoverV1({ title: '测试标题', kicker: '标签' });
|
|
14
|
+
expect(result).toBeDefined();
|
|
15
|
+
});
|
|
16
|
+
});
|
|
17
|
+
//# sourceMappingURL=cover-v1.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cover-v1.test.js","sourceRoot":"","sources":["../../../src/themes/dark-tech/cover-v1.test.tsx"],"names":[],"mappings":"AAAA,gDAAgD;AAChD,gCAAgC;AAChC,6CAA6C;AAC7C,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AAC9C,OAAO,EAAE,eAAe,EAAE,mBAAmB,EAAE,MAAM,eAAe,CAAC;AAErE,QAAQ,CAAC,oBAAoB,EAAE,GAAG,EAAE;IAClC,EAAE,CAAC,0BAA0B,EAAE,GAAG,EAAE;QAClC,MAAM,CAAC,mBAAmB,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAC;QAC1D,MAAM,CAAC,mBAAmB,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAC/C,MAAM,CAAC,mBAAmB,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;IACtD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,0BAA0B,EAAE,GAAG,EAAE;QAClC,MAAM,MAAM,GAAG,eAAe,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC;QAChE,MAAM,CAAC,MAAM,CAAC,CAAC,WAAW,EAAE,CAAC;IAC/B,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import type { LayoutMeta } from '@lemonppt/core';
|
|
2
|
+
import type { ReactNode } from 'react';
|
|
3
|
+
export interface DarkTechFeatureV1Props {
|
|
4
|
+
kicker?: string;
|
|
5
|
+
title: string;
|
|
6
|
+
features?: {
|
|
7
|
+
title?: string;
|
|
8
|
+
description?: string;
|
|
9
|
+
}[];
|
|
10
|
+
_slideIdx?: number;
|
|
11
|
+
_editable?: boolean;
|
|
12
|
+
[key: string]: unknown;
|
|
13
|
+
}
|
|
14
|
+
export declare const darkTechFeatureV1Meta: LayoutMeta;
|
|
15
|
+
export declare function DarkTechFeatureV1(props: DarkTechFeatureV1Props): ReactNode;
|
|
16
|
+
//# sourceMappingURL=feature-v1.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"feature-v1.d.ts","sourceRoot":"","sources":["../../../src/themes/dark-tech/feature-v1.tsx"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AACjD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAGvC,MAAM,WAAW,sBAAsB;IACrC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE;QAAE,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,WAAW,CAAC,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;IACtD,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AAED,eAAO,MAAM,qBAAqB,EAAE,UAOnC,CAAC;AAEF,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,sBAAsB,GAAG,SAAS,CA8C1E"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { EditableField } from '../../editable-field.js';
|
|
3
|
+
export const darkTechFeatureV1Meta = {
|
|
4
|
+
id: 'dark_tech_feature_v1',
|
|
5
|
+
theme: 'dark-tech',
|
|
6
|
+
role: 'feature',
|
|
7
|
+
displayName: '深色科技特性',
|
|
8
|
+
description: '霓虹边框卡片 + 科技网格背景',
|
|
9
|
+
needsMedia: false,
|
|
10
|
+
};
|
|
11
|
+
export function DarkTechFeatureV1(props) {
|
|
12
|
+
const { kicker, title, features = [], _slideIdx, _editable } = props;
|
|
13
|
+
return (_jsxs("div", { className: "lp-slide lp-dark-tech-feature-v1", children: [_jsx("div", { className: "lp-dark-tech-feature-grid", "aria-hidden": "true" }), _jsx("div", { className: "lp-dark-tech-feature-glow", "aria-hidden": "true" }), _jsxs("div", { className: "lp-dark-tech-feature-header", children: [kicker && (_jsx(EditableField, { prop: "kicker", slideIdx: _slideIdx, editable: _editable, as: "div", className: "lp-dark-tech-feature-kicker", children: kicker })), _jsx(EditableField, { prop: "title", slideIdx: _slideIdx, editable: _editable, as: "h2", className: "lp-dark-tech-feature-title", children: title })] }), _jsx("div", { className: "lp-dark-tech-feature-grid-cards", children: features.map((feature, index) => (_jsxs("div", { className: "lp-dark-tech-feature-card", children: [_jsx("div", { className: "lp-dark-tech-feature-number", children: String(index + 1).padStart(2, '0') }), _jsx(EditableField, { prop: `features.${index}.title`, slideIdx: _slideIdx, editable: _editable, as: "h3", className: "lp-dark-tech-feature-card-title", children: feature.title }), feature.description && (_jsx(EditableField, { prop: `features.${index}.description`, slideIdx: _slideIdx, editable: _editable, as: "p", className: "lp-dark-tech-feature-card-description", children: feature.description }))] }, index))) })] }));
|
|
14
|
+
}
|
|
15
|
+
//# sourceMappingURL=feature-v1.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"feature-v1.js","sourceRoot":"","sources":["../../../src/themes/dark-tech/feature-v1.tsx"],"names":[],"mappings":";AAMA,OAAO,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AAWxD,MAAM,CAAC,MAAM,qBAAqB,GAAe;IAC/C,EAAE,EAAE,sBAAsB;IAC1B,KAAK,EAAE,WAAW;IAClB,IAAI,EAAE,SAAS;IACf,WAAW,EAAE,QAAQ;IACrB,WAAW,EAAE,iBAAiB;IAC9B,UAAU,EAAE,KAAK;CAClB,CAAC;AAEF,MAAM,UAAU,iBAAiB,CAAC,KAA6B;IAC7D,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,QAAQ,GAAG,EAAE,EAAE,SAAS,EAAE,SAAS,EAAE,GAAG,KAAK,CAAC;IAErE,OAAO,CACL,eAAK,SAAS,EAAC,kCAAkC,aAC/C,cAAK,SAAS,EAAC,2BAA2B,iBAAa,MAAM,GAAG,EAChE,cAAK,SAAS,EAAC,2BAA2B,iBAAa,MAAM,GAAG,EAChE,eAAK,SAAS,EAAC,6BAA6B,aACzC,MAAM,IAAI,CACT,KAAC,aAAa,IAAC,IAAI,EAAC,QAAQ,EAAC,QAAQ,EAAE,SAAS,EAAE,QAAQ,EAAE,SAAS,EAAE,EAAE,EAAC,KAAK,EAAC,SAAS,EAAC,6BAA6B,YACpH,MAAM,GACO,CACjB,EACD,KAAC,aAAa,IAAC,IAAI,EAAC,OAAO,EAAC,QAAQ,EAAE,SAAS,EAAE,QAAQ,EAAE,SAAS,EAAE,EAAE,EAAC,IAAI,EAAC,SAAS,EAAC,4BAA4B,YACjH,KAAK,GACQ,IACZ,EACN,cAAK,SAAS,EAAC,iCAAiC,YAC7C,QAAQ,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,KAAK,EAAE,EAAE,CAAC,CAChC,eAAiB,SAAS,EAAC,2BAA2B,aACpD,cAAK,SAAS,EAAC,6BAA6B,YAAE,MAAM,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,GAAO,EACvF,KAAC,aAAa,IACZ,IAAI,EAAE,YAAY,KAAK,QAAQ,EAC/B,QAAQ,EAAE,SAAS,EACnB,QAAQ,EAAE,SAAS,EACnB,EAAE,EAAC,IAAI,EACP,SAAS,EAAC,iCAAiC,YAE1C,OAAO,CAAC,KAAK,GACA,EACf,OAAO,CAAC,WAAW,IAAI,CACtB,KAAC,aAAa,IACZ,IAAI,EAAE,YAAY,KAAK,cAAc,EACrC,QAAQ,EAAE,SAAS,EACnB,QAAQ,EAAE,SAAS,EACnB,EAAE,EAAC,GAAG,EACN,SAAS,EAAC,uCAAuC,YAEhD,OAAO,CAAC,WAAW,GACN,CACjB,KArBO,KAAK,CAsBT,CACP,CAAC,GACE,IACF,CACP,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"feature-v1.test.d.ts","sourceRoot":"","sources":["../../../src/themes/dark-tech/feature-v1.test.tsx"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
// lemonPPT - AI-powered presentation generation
|
|
2
|
+
// Copyright (c) 2026 lemonforme
|
|
3
|
+
// SPDX-License-Identifier: AGPL-3.0-or-later
|
|
4
|
+
import { describe, expect, it } from 'vitest';
|
|
5
|
+
import { DarkTechFeatureV1, darkTechFeatureV1Meta } from './feature-v1.js';
|
|
6
|
+
describe('dark_tech_feature_v1', () => {
|
|
7
|
+
it('should have correct meta', () => {
|
|
8
|
+
expect(darkTechFeatureV1Meta.id).toBe('dark_tech_feature_v1');
|
|
9
|
+
expect(darkTechFeatureV1Meta.role).toBe('feature');
|
|
10
|
+
expect(darkTechFeatureV1Meta.theme).toBe('dark-tech');
|
|
11
|
+
});
|
|
12
|
+
it('should render with title and features', () => {
|
|
13
|
+
const result = DarkTechFeatureV1({
|
|
14
|
+
title: '核心能力',
|
|
15
|
+
features: [
|
|
16
|
+
{ title: 'AI 生成', description: '一句话生成完整大纲' },
|
|
17
|
+
{ title: '多主题', description: '一键切换视觉风格' },
|
|
18
|
+
],
|
|
19
|
+
});
|
|
20
|
+
expect(result).toBeDefined();
|
|
21
|
+
});
|
|
22
|
+
});
|
|
23
|
+
//# sourceMappingURL=feature-v1.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"feature-v1.test.js","sourceRoot":"","sources":["../../../src/themes/dark-tech/feature-v1.test.tsx"],"names":[],"mappings":"AAAA,gDAAgD;AAChD,gCAAgC;AAChC,6CAA6C;AAC7C,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AAC9C,OAAO,EAAE,iBAAiB,EAAE,qBAAqB,EAAE,MAAM,iBAAiB,CAAC;AAE3E,QAAQ,CAAC,sBAAsB,EAAE,GAAG,EAAE;IACpC,EAAE,CAAC,0BAA0B,EAAE,GAAG,EAAE;QAClC,MAAM,CAAC,qBAAqB,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,sBAAsB,CAAC,CAAC;QAC9D,MAAM,CAAC,qBAAqB,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QACnD,MAAM,CAAC,qBAAqB,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;IACxD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,uCAAuC,EAAE,GAAG,EAAE;QAC/C,MAAM,MAAM,GAAG,iBAAiB,CAAC;YAC/B,KAAK,EAAE,MAAM;YACb,QAAQ,EAAE;gBACR,EAAE,KAAK,EAAE,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE;gBAC5C,EAAE,KAAK,EAAE,KAAK,EAAE,WAAW,EAAE,UAAU,EAAE;aAC1C;SACF,CAAC,CAAC;QACH,MAAM,CAAC,MAAM,CAAC,CAAC,WAAW,EAAE,CAAC;IAC/B,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
|