@financial-times/cp-content-pipeline-ui 9.13.0 → 9.14.1
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/CHANGELOG.md +25 -0
- package/lib/components/ContentLayout/index.d.ts +2 -1
- package/lib/components/ContentLayout/index.js +1 -1
- package/lib/components/ContentLayout/index.js.map +1 -1
- package/lib/components/ContentLayout/test/snapshot.spec.d.ts +1 -0
- package/lib/components/ContentLayout/test/snapshot.spec.js +33 -0
- package/lib/components/ContentLayout/test/snapshot.spec.js.map +1 -0
- package/lib/components/RichText/index.js +4 -0
- package/lib/components/RichText/index.js.map +1 -1
- package/lib/components/content-tree/Clip/template/component.js +1 -1
- package/lib/components/content-tree/Clip/template/component.js.map +1 -1
- package/lib/components/content-tree/Timeline/TimelineEvent.d.ts +7 -0
- package/lib/components/content-tree/Timeline/TimelineEvent.js +17 -0
- package/lib/components/content-tree/Timeline/TimelineEvent.js.map +1 -0
- package/lib/components/content-tree/Timeline/index.d.ts +6 -0
- package/lib/components/content-tree/Timeline/index.js +17 -0
- package/lib/components/content-tree/Timeline/index.js.map +1 -0
- package/lib/components/content-tree/Timeline/test/TimelineEvent.spec.d.ts +1 -0
- package/lib/components/content-tree/Timeline/test/TimelineEvent.spec.js +48 -0
- package/lib/components/content-tree/Timeline/test/TimelineEvent.spec.js.map +1 -0
- package/lib/components/content-tree/Timeline/test/snapshot.spec.d.ts +1 -0
- package/lib/components/content-tree/Timeline/test/snapshot.spec.js +17 -0
- package/lib/components/content-tree/Timeline/test/snapshot.spec.js.map +1 -0
- package/lib/index.d.ts +2 -0
- package/lib/index.js +5 -1
- package/lib/index.js.map +1 -1
- package/lib/main.scss +1 -0
- package/package.json +5 -5
- package/src/components/ContentLayout/index.tsx +3 -7
- package/src/components/ContentLayout/test/__snapshots__/snapshot.spec.tsx.snap +80 -0
- package/src/components/ContentLayout/test/snapshot.spec.tsx +47 -0
- package/src/components/RichText/index.tsx +4 -0
- package/src/components/content-tree/Clip/template/component.tsx +1 -1
- package/src/components/content-tree/Timeline/TimelineEvent.tsx +25 -0
- package/src/components/content-tree/Timeline/client/main.scss +55 -0
- package/src/components/content-tree/Timeline/index.tsx +19 -0
- package/src/components/content-tree/Timeline/test/TimelineEvent.spec.tsx +66 -0
- package/src/components/content-tree/Timeline/test/__snapshots__/TimelineEvent.spec.tsx.snap +94 -0
- package/src/components/content-tree/Timeline/test/__snapshots__/snapshot.spec.tsx.snap +20 -0
- package/src/components/content-tree/Timeline/test/snapshot.spec.tsx +15 -0
- package/src/index.ts +2 -0
- package/tsconfig.tsbuildinfo +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -574,6 +574,31 @@
|
|
|
574
574
|
* @financial-times/cp-content-pipeline-client bumped from ^3.7.2 to ^3.7.3
|
|
575
575
|
* @financial-times/cp-content-pipeline-schema bumped from ^2.10.1 to ^2.10.2
|
|
576
576
|
|
|
577
|
+
## [9.14.1](https://github.com/Financial-Times/cp-content-pipeline/compare/cp-content-pipeline-ui-v9.14.0...cp-content-pipeline-ui-v9.14.1) (2025-12-17)
|
|
578
|
+
|
|
579
|
+
|
|
580
|
+
### Dependencies
|
|
581
|
+
|
|
582
|
+
* The following workspace dependencies were updated
|
|
583
|
+
* devDependencies
|
|
584
|
+
* @financial-times/cp-content-pipeline-styles bumped from ^4.6.0 to ^4.6.1
|
|
585
|
+
|
|
586
|
+
## [9.14.0](https://github.com/Financial-Times/cp-content-pipeline/compare/cp-content-pipeline-ui-v9.13.0...cp-content-pipeline-ui-v9.14.0) (2025-12-16)
|
|
587
|
+
|
|
588
|
+
|
|
589
|
+
### Features
|
|
590
|
+
|
|
591
|
+
* timeline component ([e1e8e60](https://github.com/Financial-Times/cp-content-pipeline/commit/e1e8e60dcd6aba2527b8b4a64d144cc7c6180b93))
|
|
592
|
+
|
|
593
|
+
|
|
594
|
+
### Dependencies
|
|
595
|
+
|
|
596
|
+
* The following workspace dependencies were updated
|
|
597
|
+
* devDependencies
|
|
598
|
+
* @financial-times/cp-content-pipeline-client bumped from ^4.20.2 to ^4.21.0
|
|
599
|
+
* @financial-times/cp-content-pipeline-schema bumped from ^3.21.0 to ^3.22.0
|
|
600
|
+
* @financial-times/cp-content-pipeline-styles bumped from ^4.5.0 to ^4.6.0
|
|
601
|
+
|
|
577
602
|
## [9.13.0](https://github.com/Financial-Times/cp-content-pipeline/compare/cp-content-pipeline-ui-v9.12.1...cp-content-pipeline-ui-v9.13.0) (2025-12-11)
|
|
578
603
|
|
|
579
604
|
|
|
@@ -16,9 +16,10 @@ import React from 'react';
|
|
|
16
16
|
*/
|
|
17
17
|
type LayoutWidth = 'in-line' | 'mid-grid' | 'full-grid';
|
|
18
18
|
interface ContentLayoutProps {
|
|
19
|
-
dataLayout
|
|
19
|
+
dataLayout?: LayoutWidth;
|
|
20
20
|
dataComponent?: string;
|
|
21
21
|
className?: string;
|
|
22
|
+
children: React.ReactNode;
|
|
22
23
|
}
|
|
23
24
|
export declare const ContentLayout: React.FC<React.PropsWithChildren<ContentLayoutProps>>;
|
|
24
25
|
export {};
|
|
@@ -17,7 +17,7 @@ const OverflowingLayout = ({ children, }) => (react_1.default.createElement("div
|
|
|
17
17
|
* @param dataLayout - The layout type of the content (e.g., 'full-grid', 'mid-grid', etc.).
|
|
18
18
|
* @param dataComponent - The component type used as data-component attribute for client-side targeting.
|
|
19
19
|
*/
|
|
20
|
-
const ContentLayout = ({ dataLayout = 'in-line', children, dataComponent
|
|
20
|
+
const ContentLayout = ({ dataLayout = 'in-line', children, dataComponent, className = '' }) => {
|
|
21
21
|
const ContainerClassNames = (0, classnames_1.default)('n-content-layout__container', className);
|
|
22
22
|
if (dataLayout === 'full-grid') {
|
|
23
23
|
return (react_1.default.createElement(OverflowingLayout, null,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/components/ContentLayout/index.tsx"],"names":[],"mappings":";;;;;;AAAA,kDAAyB;AACzB,4DAAmC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/components/ContentLayout/index.tsx"],"names":[],"mappings":";;;;;;AAAA,kDAAyB;AACzB,4DAAmC;AA0BnC;;;;GAIG;AACH,MAAM,iBAAiB,GAA4C,CAAC,EAClE,QAAQ,GACT,EAAE,EAAE,CAAC,CACJ,uCAAK,SAAS,EAAC,kBAAkB,uBAAmB,WAAW,IAC5D,QAAQ,CACL,CACP,CAAA;AAED;;;;GAIG;AACI,MAAM,aAAa,GAEtB,CAAC,EAAE,UAAU,GAAG,SAAS,EAAE,QAAQ,EAAE,aAAa,EAAE,SAAS,GAAG,EAAE,EAAE,EAAE,EAAE;IAC1E,MAAM,mBAAmB,GAAG,IAAA,oBAAU,EACpC,6BAA6B,EAC7B,SAAS,CACV,CAAA;IAED,IAAI,UAAU,KAAK,WAAW,EAAE,CAAC;QAC/B,OAAO,CACL,8BAAC,iBAAiB;YAChB,uCAAK,SAAS,EAAE,mBAAmB,oBAAkB,aAAa,IAC/D,QAAQ,CACL,CACY,CACrB,CAAA;IACH,CAAC;IAED,IAAI,UAAU,KAAK,UAAU,EAAE,CAAC;QAC9B,OAAO,CACL,8BAAC,iBAAiB;YAChB,uCAAK,SAAS,EAAE,mBAAmB,oBAAkB,aAAa;gBAChE,8DACsB,qBAAqB,EACzC,SAAS,EAAC,uCAAuC,IAEhD,QAAQ,CACL,CACF,CACY,CACrB,CAAA;IACH,CAAC;IAED,OAAO,CACL,uCACE,SAAS,EAAC,sCAAsC,oBAChC,aAAa,IAE5B,QAAQ,CACL,CACP,CAAA;AACH,CAAC,CAAA;AAzCY,QAAA,aAAa,iBAyCzB"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
const react_1 = __importDefault(require("react"));
|
|
7
|
+
const react_2 = require("@testing-library/react");
|
|
8
|
+
const index_1 = require("../index");
|
|
9
|
+
describe('ContentLayout', () => {
|
|
10
|
+
it('renders with full-grid layout', () => {
|
|
11
|
+
const { container } = (0, react_2.render)(react_1.default.createElement(index_1.ContentLayout, { dataLayout: "full-grid" },
|
|
12
|
+
react_1.default.createElement("div", null, "Test content")));
|
|
13
|
+
expect(container).toMatchSnapshot();
|
|
14
|
+
});
|
|
15
|
+
it('renders with any accepted layout', () => {
|
|
16
|
+
const { container } = (0, react_2.render)(react_1.default.createElement(index_1.ContentLayout, { dataLayout: "mid-grid" },
|
|
17
|
+
react_1.default.createElement("span", null, "Inline content")));
|
|
18
|
+
expect(container).toMatchSnapshot();
|
|
19
|
+
});
|
|
20
|
+
it('renders with multiple children', () => {
|
|
21
|
+
const { container } = (0, react_2.render)(react_1.default.createElement(index_1.ContentLayout, { dataLayout: "mid-grid" },
|
|
22
|
+
react_1.default.createElement("h1", null, "Title"),
|
|
23
|
+
react_1.default.createElement("p", null, "Paragraph content"),
|
|
24
|
+
react_1.default.createElement("div", null, "Additional content")));
|
|
25
|
+
expect(container).toMatchSnapshot();
|
|
26
|
+
});
|
|
27
|
+
it('renders treating no dataLayout as default inline)', () => {
|
|
28
|
+
const { container } = (0, react_2.render)(react_1.default.createElement(index_1.ContentLayout, null,
|
|
29
|
+
react_1.default.createElement("div", null, "Empty layout content")));
|
|
30
|
+
expect(container).toMatchSnapshot();
|
|
31
|
+
});
|
|
32
|
+
});
|
|
33
|
+
//# sourceMappingURL=snapshot.spec.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"snapshot.spec.js","sourceRoot":"","sources":["../../../../src/components/ContentLayout/test/snapshot.spec.tsx"],"names":[],"mappings":";;;;;AAAA,kDAAyB;AACzB,kDAA+C;AAC/C,oCAAwC;AAExC,QAAQ,CAAC,eAAe,EAAE,GAAG,EAAE;IAC7B,EAAE,CAAC,+BAA+B,EAAE,GAAG,EAAE;QACvC,MAAM,EAAE,SAAS,EAAE,GAAG,IAAA,cAAM,EAC1B,8BAAC,qBAAa,IAAC,UAAU,EAAC,WAAW;YACnC,0DAAuB,CACT,CACjB,CAAA;QAED,MAAM,CAAC,SAAS,CAAC,CAAC,eAAe,EAAE,CAAA;IACrC,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,kCAAkC,EAAE,GAAG,EAAE;QAC1C,MAAM,EAAE,SAAS,EAAE,GAAG,IAAA,cAAM,EAC1B,8BAAC,qBAAa,IAAC,UAAU,EAAC,UAAU;YAClC,6DAA2B,CACb,CACjB,CAAA;QAED,MAAM,CAAC,SAAS,CAAC,CAAC,eAAe,EAAE,CAAA;IACrC,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,gCAAgC,EAAE,GAAG,EAAE;QACxC,MAAM,EAAE,SAAS,EAAE,GAAG,IAAA,cAAM,EAC1B,8BAAC,qBAAa,IAAC,UAAU,EAAC,UAAU;YAClC,kDAAc;YACd,6DAAwB;YACxB,gEAA6B,CACf,CACjB,CAAA;QAED,MAAM,CAAC,SAAS,CAAC,CAAC,eAAe,EAAE,CAAA;IACrC,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,mDAAmD,EAAE,GAAG,EAAE;QAC3D,MAAM,EAAE,SAAS,EAAE,GAAG,IAAA,cAAM,EAC1B,8BAAC,qBAAa;YACZ,kEAA+B,CACjB,CACjB,CAAA;QAED,MAAM,CAAC,SAAS,CAAC,CAAC,eAAe,EAAE,CAAA;IACrC,CAAC,CAAC,CAAA;AACJ,CAAC,CAAC,CAAA"}
|
|
@@ -47,6 +47,8 @@ const Scrollytelling_1 = require("../content-tree/Scrollytelling");
|
|
|
47
47
|
const ScrollyImage_1 = require("../content-tree/Scrollytelling/ScrollyImage");
|
|
48
48
|
const YoutubeVideo_1 = __importDefault(require("../content-tree/YoutubeVideo"));
|
|
49
49
|
const CustomCodeComponent_1 = __importDefault(require("../content-tree/CustomCodeComponent"));
|
|
50
|
+
const Timeline_1 = __importDefault(require("../content-tree/Timeline"));
|
|
51
|
+
const TimelineEvent_1 = __importDefault(require("../content-tree/Timeline/TimelineEvent"));
|
|
50
52
|
const BasicComponents_1 = require("./BasicComponents");
|
|
51
53
|
const context_1 = __importDefault(require("./context"));
|
|
52
54
|
exports.ComponentsContext = (0, react_1.createContext)({});
|
|
@@ -95,6 +97,8 @@ const componentMap = {
|
|
|
95
97
|
tweet: Tweet_1.default,
|
|
96
98
|
video: Video_1.default,
|
|
97
99
|
'youtube-video': YoutubeVideo_1.default,
|
|
100
|
+
timeline: Timeline_1.default,
|
|
101
|
+
'timeline-event': TimelineEvent_1.default,
|
|
98
102
|
};
|
|
99
103
|
function isParentNode(node) {
|
|
100
104
|
return 'children' in node;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/components/RichText/index.tsx"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,+CAKc;AAGd,8EAAqD;AACrD,sFAA6D;AAC7D,qEAAkE;AAClE,mDAA2D;AAC3D,0EAAiD;AACjD,kEAAyC;AACzC,wEAA+C;AAC/C,sEAA6C;AAC7C,0EAAiD;AACjD,kEAAyC;AACzC,kEAAyC;AACzC,gEAAuC;AACvC,0EAAiD;AACjD,gFAAuD;AACvD,+DAA2D;AAC3D,mEAKuC;AACvC,8EAA0E;AAC1E,gFAAuD;AACvD,8FAAqE;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/components/RichText/index.tsx"],"names":[],"mappings":"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"}
|
|
@@ -4,8 +4,8 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
4
4
|
};
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
6
|
const react_1 = __importDefault(require("react"));
|
|
7
|
-
const ContentLayout_1 = require("../../../ContentLayout");
|
|
8
7
|
const components_1 = require("../components");
|
|
8
|
+
const ContentLayout_1 = require("../../../ContentLayout");
|
|
9
9
|
const ClipComponent = ({ content, preset = 'full-player', preload = 'auto', maxClipWidth = 0, }) => {
|
|
10
10
|
let poster = 'poster' in content ? content.poster : '';
|
|
11
11
|
let id;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"component.js","sourceRoot":"","sources":["../../../../../src/components/content-tree/Clip/template/component.tsx"],"names":[],"mappings":";;;;;AAAA,kDAAyB;AACzB,
|
|
1
|
+
{"version":3,"file":"component.js","sourceRoot":"","sources":["../../../../../src/components/content-tree/Clip/template/component.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { ContentTree } from '@financial-times/content-tree';
|
|
2
|
+
import React from 'react';
|
|
3
|
+
import { ContentProps } from '../../types';
|
|
4
|
+
interface TimelineEventProps extends ContentProps<Omit<ContentTree.TimelineEvent, 'children'>> {
|
|
5
|
+
}
|
|
6
|
+
declare const TimelineEvent: React.FC<React.PropsWithChildren<TimelineEventProps>>;
|
|
7
|
+
export default TimelineEvent;
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
const react_1 = __importDefault(require("react"));
|
|
7
|
+
/*
|
|
8
|
+
* @description Event component is used to render a single event.
|
|
9
|
+
*/
|
|
10
|
+
const TimelineEvent = ({ content: { title }, children, }) => {
|
|
11
|
+
return (react_1.default.createElement("div", { className: "cp-timeline-event" },
|
|
12
|
+
react_1.default.createElement("h5", { className: "cp-timeline-event__heading o3-type-label" },
|
|
13
|
+
react_1.default.createElement("span", { className: "cp-timeline-event__heading-title" }, title)),
|
|
14
|
+
children));
|
|
15
|
+
};
|
|
16
|
+
exports.default = TimelineEvent;
|
|
17
|
+
//# sourceMappingURL=TimelineEvent.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TimelineEvent.js","sourceRoot":"","sources":["../../../../src/components/content-tree/Timeline/TimelineEvent.tsx"],"names":[],"mappings":";;;;;AACA,kDAAyB;AAMzB;;GAEG;AACH,MAAM,aAAa,GAA0D,CAAC,EAC5E,OAAO,EAAE,EAAE,KAAK,EAAE,EAClB,QAAQ,GACT,EAAE,EAAE;IACH,OAAO,CACL,uCAAK,SAAS,EAAC,mBAAmB;QAChC,sCAAI,SAAS,EAAC,0CAA0C;YACtD,wCAAM,SAAS,EAAC,kCAAkC,IAAE,KAAK,CAAQ,CAC9D;QACJ,QAAQ,CACL,CACP,CAAA;AACH,CAAC,CAAA;AAED,kBAAe,aAAa,CAAA"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
const react_1 = __importDefault(require("react"));
|
|
7
|
+
const ContentLayout_1 = require("../../ContentLayout");
|
|
8
|
+
/*
|
|
9
|
+
* @description Timeline component is used to render a simple timeline of events.
|
|
10
|
+
* @param children - The content to be displayed in the layout.
|
|
11
|
+
*/
|
|
12
|
+
const Timeline = ({ children }) => {
|
|
13
|
+
return (react_1.default.createElement(ContentLayout_1.ContentLayout, null,
|
|
14
|
+
react_1.default.createElement("div", { className: "cp-timeline" }, children)));
|
|
15
|
+
};
|
|
16
|
+
exports.default = Timeline;
|
|
17
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/components/content-tree/Timeline/index.tsx"],"names":[],"mappings":";;;;;AAAA,kDAAyB;AACzB,uDAAmD;AAKnD;;;GAGG;AACH,MAAM,QAAQ,GAA4B,CAAC,EAAE,QAAQ,EAAE,EAAE,EAAE;IACzD,OAAO,CACL,8BAAC,6BAAa;QACZ,uCAAK,SAAS,EAAC,aAAa,IAAE,QAAQ,CAAO,CAC/B,CACjB,CAAA;AACH,CAAC,CAAA;AAED,kBAAe,QAAQ,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
const react_1 = __importDefault(require("react"));
|
|
7
|
+
const react_2 = require("@testing-library/react");
|
|
8
|
+
const TimelineEvent_1 = __importDefault(require("../TimelineEvent"));
|
|
9
|
+
describe('TimelineEvent', () => {
|
|
10
|
+
it('renders with date label and children', () => {
|
|
11
|
+
const { container } = (0, react_2.render)(react_1.default.createElement(TimelineEvent_1.default, { content: {
|
|
12
|
+
type: 'timeline-event',
|
|
13
|
+
title: 'Significant Event',
|
|
14
|
+
} },
|
|
15
|
+
react_1.default.createElement("p", null, "This is the event content")));
|
|
16
|
+
expect(container).toMatchSnapshot();
|
|
17
|
+
});
|
|
18
|
+
it('renders with minimal children content', () => {
|
|
19
|
+
const { container } = (0, react_2.render)(react_1.default.createElement(TimelineEvent_1.default, { content: {
|
|
20
|
+
type: 'timeline-event',
|
|
21
|
+
title: 'Short Event',
|
|
22
|
+
} },
|
|
23
|
+
react_1.default.createElement("p", null, "Brief event description")));
|
|
24
|
+
expect(container).toMatchSnapshot();
|
|
25
|
+
});
|
|
26
|
+
it('renders with long date label', () => {
|
|
27
|
+
const { container } = (0, react_2.render)(react_1.default.createElement(TimelineEvent_1.default, { content: {
|
|
28
|
+
type: 'timeline-event',
|
|
29
|
+
title: 'Wednesday, December 25, 2024 - Christmas Day',
|
|
30
|
+
} },
|
|
31
|
+
react_1.default.createElement("p", null, "Christmas celebration details")));
|
|
32
|
+
expect(container).toMatchSnapshot();
|
|
33
|
+
});
|
|
34
|
+
it('renders with complex nested children', () => {
|
|
35
|
+
const { container } = (0, react_2.render)(react_1.default.createElement(TimelineEvent_1.default, { content: {
|
|
36
|
+
type: 'timeline-event',
|
|
37
|
+
title: 'Q4 2024',
|
|
38
|
+
} },
|
|
39
|
+
react_1.default.createElement("div", null,
|
|
40
|
+
react_1.default.createElement("h3", null, "Quarterly Results"),
|
|
41
|
+
react_1.default.createElement("p", null,
|
|
42
|
+
"The company announced ",
|
|
43
|
+
react_1.default.createElement("strong", null, "strong"),
|
|
44
|
+
" Q4 results."))));
|
|
45
|
+
expect(container).toMatchSnapshot();
|
|
46
|
+
});
|
|
47
|
+
});
|
|
48
|
+
//# sourceMappingURL=TimelineEvent.spec.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TimelineEvent.spec.js","sourceRoot":"","sources":["../../../../../src/components/content-tree/Timeline/test/TimelineEvent.spec.tsx"],"names":[],"mappings":";;;;;AAAA,kDAAyB;AACzB,kDAA+C;AAC/C,qEAA4C;AAE5C,QAAQ,CAAC,eAAe,EAAE,GAAG,EAAE;IAC7B,EAAE,CAAC,sCAAsC,EAAE,GAAG,EAAE;QAC9C,MAAM,EAAE,SAAS,EAAE,GAAG,IAAA,cAAM,EAC1B,8BAAC,uBAAa,IACZ,OAAO,EAAE;gBACP,IAAI,EAAE,gBAAgB;gBACtB,KAAK,EAAE,mBAAmB;aAC3B;YAED,qEAAgC,CAClB,CACjB,CAAA;QACD,MAAM,CAAC,SAAS,CAAC,CAAC,eAAe,EAAE,CAAA;IACrC,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,uCAAuC,EAAE,GAAG,EAAE;QAC/C,MAAM,EAAE,SAAS,EAAE,GAAG,IAAA,cAAM,EAC1B,8BAAC,uBAAa,IACZ,OAAO,EAAE;gBACP,IAAI,EAAE,gBAAgB;gBACtB,KAAK,EAAE,aAAa;aACrB;YAED,mEAA8B,CAChB,CACjB,CAAA;QACD,MAAM,CAAC,SAAS,CAAC,CAAC,eAAe,EAAE,CAAA;IACrC,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,8BAA8B,EAAE,GAAG,EAAE;QACtC,MAAM,EAAE,SAAS,EAAE,GAAG,IAAA,cAAM,EAC1B,8BAAC,uBAAa,IACZ,OAAO,EAAE;gBACP,IAAI,EAAE,gBAAgB;gBACtB,KAAK,EAAE,8CAA8C;aACtD;YAED,yEAAoC,CACtB,CACjB,CAAA;QACD,MAAM,CAAC,SAAS,CAAC,CAAC,eAAe,EAAE,CAAA;IACrC,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,sCAAsC,EAAE,GAAG,EAAE;QAC9C,MAAM,EAAE,SAAS,EAAE,GAAG,IAAA,cAAM,EAC1B,8BAAC,uBAAa,IACZ,OAAO,EAAE;gBACP,IAAI,EAAE,gBAAgB;gBACtB,KAAK,EAAE,SAAS;aACjB;YAED;gBACE,8DAA0B;gBAC1B;;oBACwB,uDAAuB;mCAC3C,CACA,CACQ,CACjB,CAAA;QACD,MAAM,CAAC,SAAS,CAAC,CAAC,eAAe,EAAE,CAAA;IACrC,CAAC,CAAC,CAAA;AACJ,CAAC,CAAC,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
const react_1 = __importDefault(require("react"));
|
|
7
|
+
const react_2 = require("@testing-library/react");
|
|
8
|
+
const __1 = __importDefault(require("../"));
|
|
9
|
+
describe('Timeline component', () => {
|
|
10
|
+
it('renders with full-width layout and children', () => {
|
|
11
|
+
const { container } = (0, react_2.render)(react_1.default.createElement(__1.default, null,
|
|
12
|
+
react_1.default.createElement("div", null, "Event 1"),
|
|
13
|
+
react_1.default.createElement("div", null, "Event 2")));
|
|
14
|
+
expect(container).toMatchSnapshot();
|
|
15
|
+
});
|
|
16
|
+
});
|
|
17
|
+
//# sourceMappingURL=snapshot.spec.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"snapshot.spec.js","sourceRoot":"","sources":["../../../../../src/components/content-tree/Timeline/test/snapshot.spec.tsx"],"names":[],"mappings":";;;;;AAAA,kDAAyB;AACzB,kDAA+C;AAC/C,4CAA0B;AAE1B,QAAQ,CAAC,oBAAoB,EAAE,GAAG,EAAE;IAClC,EAAE,CAAC,6CAA6C,EAAE,GAAG,EAAE;QACrD,MAAM,EAAE,SAAS,EAAE,GAAG,IAAA,cAAM,EAC1B,8BAAC,WAAQ;YACP,qDAAkB;YAClB,qDAAkB,CACT,CACZ,CAAA;QACD,MAAM,CAAC,SAAS,CAAC,CAAC,eAAe,EAAE,CAAA;IACrC,CAAC,CAAC,CAAA;AACJ,CAAC,CAAC,CAAA"}
|
package/lib/index.d.ts
CHANGED
|
@@ -24,5 +24,7 @@ export { default as Table } from './components/content-tree/Table';
|
|
|
24
24
|
export { default as Tweet } from './components/content-tree/Tweet';
|
|
25
25
|
export { default as Video } from './components/content-tree/Video';
|
|
26
26
|
export { default as YoutubeVideo } from './components/content-tree/YoutubeVideo';
|
|
27
|
+
export { default as Timeline } from './components/content-tree/Timeline';
|
|
28
|
+
export { default as TimelineEvent } from './components/content-tree/Timeline/TimelineEvent';
|
|
27
29
|
export { List, ListItem, Link, Blockquote, LineBreak, HorizontalRule, Emphasis, Strong, Strikethrough, Cite, CccFallbackText, } from './components/RichText/BasicComponents';
|
|
28
30
|
export { PresentationFlagsContext, PresentationOverridesContext, } from './context';
|
package/lib/index.js
CHANGED
|
@@ -3,7 +3,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
3
3
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
4
|
};
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
-
exports.PresentationOverridesContext = exports.PresentationFlagsContext = exports.CccFallbackText = exports.Cite = exports.Strikethrough = exports.Strong = exports.Emphasis = exports.HorizontalRule = exports.LineBreak = exports.Blockquote = exports.Link = exports.ListItem = exports.List = exports.YoutubeVideo = exports.Video = exports.Tweet = exports.Table = exports.ScrollyBlock = exports.RecommendedList = exports.Recommended = exports.Pullquote = exports.Paragraph = exports.LayoutSlot = exports.LayoutContainer = exports.Layout = exports.Clip = exports.ImageSet = exports.Heading = exports.Flourish = exports.CustomCodeComponent = exports.BigNumber = exports.RichText = exports.PodcastBody = exports.LiveBlogBody = exports.ArticleBody = exports.Body = exports.Topper = exports.MainImage = exports.LiveBlogWrapper = exports.Byline = exports.ArticleInfo = void 0;
|
|
6
|
+
exports.PresentationOverridesContext = exports.PresentationFlagsContext = exports.CccFallbackText = exports.Cite = exports.Strikethrough = exports.Strong = exports.Emphasis = exports.HorizontalRule = exports.LineBreak = exports.Blockquote = exports.Link = exports.ListItem = exports.List = exports.TimelineEvent = exports.Timeline = exports.YoutubeVideo = exports.Video = exports.Tweet = exports.Table = exports.ScrollyBlock = exports.RecommendedList = exports.Recommended = exports.Pullquote = exports.Paragraph = exports.LayoutSlot = exports.LayoutContainer = exports.Layout = exports.Clip = exports.ImageSet = exports.Heading = exports.Flourish = exports.CustomCodeComponent = exports.BigNumber = exports.RichText = exports.PodcastBody = exports.LiveBlogBody = exports.ArticleBody = exports.Body = exports.Topper = exports.MainImage = exports.LiveBlogWrapper = exports.Byline = exports.ArticleInfo = void 0;
|
|
7
7
|
var ArticleInfo_1 = require("./components/ArticleInfo");
|
|
8
8
|
Object.defineProperty(exports, "ArticleInfo", { enumerable: true, get: function () { return __importDefault(ArticleInfo_1).default; } });
|
|
9
9
|
var Byline_1 = require("./components/Byline");
|
|
@@ -58,6 +58,10 @@ var Video_1 = require("./components/content-tree/Video");
|
|
|
58
58
|
Object.defineProperty(exports, "Video", { enumerable: true, get: function () { return __importDefault(Video_1).default; } });
|
|
59
59
|
var YoutubeVideo_1 = require("./components/content-tree/YoutubeVideo");
|
|
60
60
|
Object.defineProperty(exports, "YoutubeVideo", { enumerable: true, get: function () { return __importDefault(YoutubeVideo_1).default; } });
|
|
61
|
+
var Timeline_1 = require("./components/content-tree/Timeline");
|
|
62
|
+
Object.defineProperty(exports, "Timeline", { enumerable: true, get: function () { return __importDefault(Timeline_1).default; } });
|
|
63
|
+
var TimelineEvent_1 = require("./components/content-tree/Timeline/TimelineEvent");
|
|
64
|
+
Object.defineProperty(exports, "TimelineEvent", { enumerable: true, get: function () { return __importDefault(TimelineEvent_1).default; } });
|
|
61
65
|
var BasicComponents_1 = require("./components/RichText/BasicComponents");
|
|
62
66
|
Object.defineProperty(exports, "List", { enumerable: true, get: function () { return BasicComponents_1.List; } });
|
|
63
67
|
Object.defineProperty(exports, "ListItem", { enumerable: true, get: function () { return BasicComponents_1.ListItem; } });
|
package/lib/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;AAAA,wDAAiE;AAAxD,2HAAA,OAAO,OAAe;AAC/B,8CAAuD;AAA9C,iHAAA,OAAO,OAAU;AAC1B,gEAA8D;AAArD,kHAAA,eAAe,OAAA;AACxB,oDAA6D;AAApD,uHAAA,OAAO,OAAa;AAC7B,8CAAuD;AAA9C,iHAAA,OAAO,OAAU;AAE1B,0CAAmD;AAA1C,6GAAA,OAAO,OAAQ;AACxB,wEAAiF;AAAxE,2HAAA,OAAO,OAAe;AAC/B,0EAAmF;AAA1E,6HAAA,OAAO,OAAgB;AAChC,wEAAiF;AAAxE,2HAAA,OAAO,OAAe;AAE/B,kDAA2D;AAAlD,qHAAA,OAAO,OAAY;AAC5B,iEAA0E;AAAjE,uHAAA,OAAO,OAAa;AAC7B,qFAA8F;AAArF,2IAAA,OAAO,OAAuB;AACvC,+DAAwE;AAA/D,qHAAA,OAAO,OAAY;AAC5B,6DAAsE;AAA7D,mHAAA,OAAO,OAAW;AAC3B,+DAAwE;AAA/D,qHAAA,OAAO,OAAY;AAC5B,+EAAmF;AAA1E,kHAAA,OAAO,OAAQ;AACxB,2DAIyC;AAHvC,gGAAA,MAAM,OAAA;AACN,yGAAA,eAAe,OAAA;AACf,oGAAA,UAAU,OAAA;AAEZ,iEAA0E;AAAjE,uHAAA,OAAO,OAAa;AAC7B,mEAAgF;AAAvE,mHAAA,OAAO,OAAa;AAC7B,qEAA8E;AAArE,2HAAA,OAAO,OAAe;AAC/B,6EAAsF;AAA7E,mIAAA,OAAO,OAAmB;AACnC,2EAAuE;AAA9D,8GAAA,YAAY,OAAA;AACrB,yDAAkE;AAAzD,+GAAA,OAAO,OAAS;AACzB,yDAAkE;AAAzD,+GAAA,OAAO,OAAS;AACzB,yDAAkE;AAAzD,+GAAA,OAAO,OAAS;AACzB,uEAAgF;AAAvE,6HAAA,OAAO,OAAgB;AAChC,yEAY8C;AAX5C,uGAAA,IAAI,OAAA;AACJ,2GAAA,QAAQ,OAAA;AACR,uGAAA,IAAI,OAAA;AACJ,6GAAA,UAAU,OAAA;AACV,4GAAA,SAAS,OAAA;AACT,iHAAA,cAAc,OAAA;AACd,2GAAA,QAAQ,OAAA;AACR,yGAAA,MAAM,OAAA;AACN,gHAAA,aAAa,OAAA;AACb,uGAAA,IAAI,OAAA;AACJ,kHAAA,eAAe,OAAA;AAGjB,qCAGkB;AAFhB,mHAAA,wBAAwB,OAAA;AACxB,uHAAA,4BAA4B,OAAA"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;AAAA,wDAAiE;AAAxD,2HAAA,OAAO,OAAe;AAC/B,8CAAuD;AAA9C,iHAAA,OAAO,OAAU;AAC1B,gEAA8D;AAArD,kHAAA,eAAe,OAAA;AACxB,oDAA6D;AAApD,uHAAA,OAAO,OAAa;AAC7B,8CAAuD;AAA9C,iHAAA,OAAO,OAAU;AAE1B,0CAAmD;AAA1C,6GAAA,OAAO,OAAQ;AACxB,wEAAiF;AAAxE,2HAAA,OAAO,OAAe;AAC/B,0EAAmF;AAA1E,6HAAA,OAAO,OAAgB;AAChC,wEAAiF;AAAxE,2HAAA,OAAO,OAAe;AAE/B,kDAA2D;AAAlD,qHAAA,OAAO,OAAY;AAC5B,iEAA0E;AAAjE,uHAAA,OAAO,OAAa;AAC7B,qFAA8F;AAArF,2IAAA,OAAO,OAAuB;AACvC,+DAAwE;AAA/D,qHAAA,OAAO,OAAY;AAC5B,6DAAsE;AAA7D,mHAAA,OAAO,OAAW;AAC3B,+DAAwE;AAA/D,qHAAA,OAAO,OAAY;AAC5B,+EAAmF;AAA1E,kHAAA,OAAO,OAAQ;AACxB,2DAIyC;AAHvC,gGAAA,MAAM,OAAA;AACN,yGAAA,eAAe,OAAA;AACf,oGAAA,UAAU,OAAA;AAEZ,iEAA0E;AAAjE,uHAAA,OAAO,OAAa;AAC7B,mEAAgF;AAAvE,mHAAA,OAAO,OAAa;AAC7B,qEAA8E;AAArE,2HAAA,OAAO,OAAe;AAC/B,6EAAsF;AAA7E,mIAAA,OAAO,OAAmB;AACnC,2EAAuE;AAA9D,8GAAA,YAAY,OAAA;AACrB,yDAAkE;AAAzD,+GAAA,OAAO,OAAS;AACzB,yDAAkE;AAAzD,+GAAA,OAAO,OAAS;AACzB,yDAAkE;AAAzD,+GAAA,OAAO,OAAS;AACzB,uEAAgF;AAAvE,6HAAA,OAAO,OAAgB;AAChC,+DAAwE;AAA/D,qHAAA,OAAO,OAAY;AAC5B,kFAA2F;AAAlF,+HAAA,OAAO,OAAiB;AACjC,yEAY8C;AAX5C,uGAAA,IAAI,OAAA;AACJ,2GAAA,QAAQ,OAAA;AACR,uGAAA,IAAI,OAAA;AACJ,6GAAA,UAAU,OAAA;AACV,4GAAA,SAAS,OAAA;AACT,iHAAA,cAAc,OAAA;AACd,2GAAA,QAAQ,OAAA;AACR,yGAAA,MAAM,OAAA;AACN,gHAAA,aAAa,OAAA;AACb,uGAAA,IAAI,OAAA;AACJ,kHAAA,eAAe,OAAA;AAGjB,qCAGkB;AAFhB,mHAAA,wBAAwB,OAAA;AACxB,uHAAA,4BAA4B,OAAA"}
|
package/lib/main.scss
CHANGED
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@financial-times/cp-content-pipeline-ui",
|
|
3
|
-
"version": "9.
|
|
3
|
+
"version": "9.14.1",
|
|
4
4
|
"description": "",
|
|
5
5
|
"main": "lib/index.js",
|
|
6
6
|
"scripts": {
|
|
@@ -16,10 +16,10 @@
|
|
|
16
16
|
"@babel/preset-env": "^7.22.5",
|
|
17
17
|
"@babel/preset-react": "^7.22.5",
|
|
18
18
|
"@dotcom-tool-kit/npm": "^5.0.0",
|
|
19
|
-
"@financial-times/content-tree": "github:financial-times/content-tree#
|
|
20
|
-
"@financial-times/cp-content-pipeline-client": "^4.
|
|
21
|
-
"@financial-times/cp-content-pipeline-schema": "^3.
|
|
22
|
-
"@financial-times/cp-content-pipeline-styles": "^4.
|
|
19
|
+
"@financial-times/content-tree": "github:financial-times/content-tree#aa5cf1",
|
|
20
|
+
"@financial-times/cp-content-pipeline-client": "^4.21.0",
|
|
21
|
+
"@financial-times/cp-content-pipeline-schema": "^3.22.0",
|
|
22
|
+
"@financial-times/cp-content-pipeline-styles": "^4.6.1",
|
|
23
23
|
"@financial-times/n-scrollytelling-image": "^1.1.0",
|
|
24
24
|
"@financial-times/o-grid": "^6.1.8",
|
|
25
25
|
"@financial-times/o-share": "^11.0.0",
|
|
@@ -19,9 +19,10 @@ import classnames from 'classnames'
|
|
|
19
19
|
type LayoutWidth = 'in-line' | 'mid-grid' | 'full-grid'
|
|
20
20
|
|
|
21
21
|
interface ContentLayoutProps {
|
|
22
|
-
dataLayout
|
|
22
|
+
dataLayout?: LayoutWidth
|
|
23
23
|
dataComponent?: string
|
|
24
24
|
className?: string
|
|
25
|
+
children: React.ReactNode
|
|
25
26
|
}
|
|
26
27
|
|
|
27
28
|
/*
|
|
@@ -44,12 +45,7 @@ const OverflowingLayout: React.FC<{ children: React.ReactNode }> = ({
|
|
|
44
45
|
*/
|
|
45
46
|
export const ContentLayout: React.FC<
|
|
46
47
|
React.PropsWithChildren<ContentLayoutProps>
|
|
47
|
-
> = ({
|
|
48
|
-
dataLayout = 'in-line',
|
|
49
|
-
children,
|
|
50
|
-
dataComponent = '',
|
|
51
|
-
className = '',
|
|
52
|
-
}) => {
|
|
48
|
+
> = ({ dataLayout = 'in-line', children, dataComponent, className = '' }) => {
|
|
53
49
|
const ContainerClassNames = classnames(
|
|
54
50
|
'n-content-layout__container',
|
|
55
51
|
className
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
// Jest Snapshot v1, https://goo.gl/fbAQLP
|
|
2
|
+
|
|
3
|
+
exports[`ContentLayout renders treating no dataLayout as default inline) 1`] = `
|
|
4
|
+
<div>
|
|
5
|
+
<div
|
|
6
|
+
class="n-content-layout__container--in-line"
|
|
7
|
+
>
|
|
8
|
+
<div>
|
|
9
|
+
Empty layout content
|
|
10
|
+
</div>
|
|
11
|
+
</div>
|
|
12
|
+
</div>
|
|
13
|
+
`;
|
|
14
|
+
|
|
15
|
+
exports[`ContentLayout renders with any accepted layout 1`] = `
|
|
16
|
+
<div>
|
|
17
|
+
<div
|
|
18
|
+
class="n-content-layout"
|
|
19
|
+
data-layout-width="full-grid"
|
|
20
|
+
>
|
|
21
|
+
<div
|
|
22
|
+
class="n-content-layout__container"
|
|
23
|
+
>
|
|
24
|
+
<div
|
|
25
|
+
class="n-content-layout__container--mid-grid"
|
|
26
|
+
data-o-grid-colspan="12 S12 M12 L10 XL10"
|
|
27
|
+
>
|
|
28
|
+
<span>
|
|
29
|
+
Inline content
|
|
30
|
+
</span>
|
|
31
|
+
</div>
|
|
32
|
+
</div>
|
|
33
|
+
</div>
|
|
34
|
+
</div>
|
|
35
|
+
`;
|
|
36
|
+
|
|
37
|
+
exports[`ContentLayout renders with full-grid layout 1`] = `
|
|
38
|
+
<div>
|
|
39
|
+
<div
|
|
40
|
+
class="n-content-layout"
|
|
41
|
+
data-layout-width="full-grid"
|
|
42
|
+
>
|
|
43
|
+
<div
|
|
44
|
+
class="n-content-layout__container"
|
|
45
|
+
>
|
|
46
|
+
<div>
|
|
47
|
+
Test content
|
|
48
|
+
</div>
|
|
49
|
+
</div>
|
|
50
|
+
</div>
|
|
51
|
+
</div>
|
|
52
|
+
`;
|
|
53
|
+
|
|
54
|
+
exports[`ContentLayout renders with multiple children 1`] = `
|
|
55
|
+
<div>
|
|
56
|
+
<div
|
|
57
|
+
class="n-content-layout"
|
|
58
|
+
data-layout-width="full-grid"
|
|
59
|
+
>
|
|
60
|
+
<div
|
|
61
|
+
class="n-content-layout__container"
|
|
62
|
+
>
|
|
63
|
+
<div
|
|
64
|
+
class="n-content-layout__container--mid-grid"
|
|
65
|
+
data-o-grid-colspan="12 S12 M12 L10 XL10"
|
|
66
|
+
>
|
|
67
|
+
<h1>
|
|
68
|
+
Title
|
|
69
|
+
</h1>
|
|
70
|
+
<p>
|
|
71
|
+
Paragraph content
|
|
72
|
+
</p>
|
|
73
|
+
<div>
|
|
74
|
+
Additional content
|
|
75
|
+
</div>
|
|
76
|
+
</div>
|
|
77
|
+
</div>
|
|
78
|
+
</div>
|
|
79
|
+
</div>
|
|
80
|
+
`;
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
import React from 'react'
|
|
2
|
+
import { render } from '@testing-library/react'
|
|
3
|
+
import { ContentLayout } from '../index'
|
|
4
|
+
|
|
5
|
+
describe('ContentLayout', () => {
|
|
6
|
+
it('renders with full-grid layout', () => {
|
|
7
|
+
const { container } = render(
|
|
8
|
+
<ContentLayout dataLayout="full-grid">
|
|
9
|
+
<div>Test content</div>
|
|
10
|
+
</ContentLayout>
|
|
11
|
+
)
|
|
12
|
+
|
|
13
|
+
expect(container).toMatchSnapshot()
|
|
14
|
+
})
|
|
15
|
+
|
|
16
|
+
it('renders with any accepted layout', () => {
|
|
17
|
+
const { container } = render(
|
|
18
|
+
<ContentLayout dataLayout="mid-grid">
|
|
19
|
+
<span>Inline content</span>
|
|
20
|
+
</ContentLayout>
|
|
21
|
+
)
|
|
22
|
+
|
|
23
|
+
expect(container).toMatchSnapshot()
|
|
24
|
+
})
|
|
25
|
+
|
|
26
|
+
it('renders with multiple children', () => {
|
|
27
|
+
const { container } = render(
|
|
28
|
+
<ContentLayout dataLayout="mid-grid">
|
|
29
|
+
<h1>Title</h1>
|
|
30
|
+
<p>Paragraph content</p>
|
|
31
|
+
<div>Additional content</div>
|
|
32
|
+
</ContentLayout>
|
|
33
|
+
)
|
|
34
|
+
|
|
35
|
+
expect(container).toMatchSnapshot()
|
|
36
|
+
})
|
|
37
|
+
|
|
38
|
+
it('renders treating no dataLayout as default inline)', () => {
|
|
39
|
+
const { container } = render(
|
|
40
|
+
<ContentLayout>
|
|
41
|
+
<div>Empty layout content</div>
|
|
42
|
+
</ContentLayout>
|
|
43
|
+
)
|
|
44
|
+
|
|
45
|
+
expect(container).toMatchSnapshot()
|
|
46
|
+
})
|
|
47
|
+
})
|
|
@@ -30,6 +30,8 @@ import {
|
|
|
30
30
|
import { ScrollyImage } from '../content-tree/Scrollytelling/ScrollyImage'
|
|
31
31
|
import YoutubeVideo from '../content-tree/YoutubeVideo'
|
|
32
32
|
import CustomCodeComponent from '../content-tree/CustomCodeComponent'
|
|
33
|
+
import Timeline from '../content-tree/Timeline'
|
|
34
|
+
import TimelineEvent from '../content-tree/Timeline/TimelineEvent'
|
|
33
35
|
|
|
34
36
|
import {
|
|
35
37
|
List,
|
|
@@ -144,6 +146,8 @@ const componentMap: RichTextComponentMapRecord = {
|
|
|
144
146
|
tweet: Tweet,
|
|
145
147
|
video: Video,
|
|
146
148
|
'youtube-video': YoutubeVideo,
|
|
149
|
+
timeline: Timeline,
|
|
150
|
+
'timeline-event': TimelineEvent,
|
|
147
151
|
}
|
|
148
152
|
|
|
149
153
|
function isParentNode(
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import React from 'react'
|
|
2
|
-
import { ContentLayout } from '../../../ContentLayout'
|
|
3
2
|
import { ClipTag } from '../components'
|
|
4
3
|
import { ContentProps } from '../../../types'
|
|
4
|
+
import { ContentLayout } from '../../../ContentLayout'
|
|
5
5
|
import type * as ComponentWorkarounds from '../../Workarounds'
|
|
6
6
|
|
|
7
7
|
type Preset = 'full-player' | 'thumbnail'
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { ContentTree } from '@financial-times/content-tree'
|
|
2
|
+
import React from 'react'
|
|
3
|
+
import { ContentProps } from '../../types'
|
|
4
|
+
|
|
5
|
+
interface TimelineEventProps
|
|
6
|
+
extends ContentProps<Omit<ContentTree.TimelineEvent, 'children'>> {}
|
|
7
|
+
|
|
8
|
+
/*
|
|
9
|
+
* @description Event component is used to render a single event.
|
|
10
|
+
*/
|
|
11
|
+
const TimelineEvent: React.FC<React.PropsWithChildren<TimelineEventProps>> = ({
|
|
12
|
+
content: { title },
|
|
13
|
+
children,
|
|
14
|
+
}) => {
|
|
15
|
+
return (
|
|
16
|
+
<div className="cp-timeline-event">
|
|
17
|
+
<h5 className="cp-timeline-event__heading o3-type-label">
|
|
18
|
+
<span className="cp-timeline-event__heading-title">{title}</span>
|
|
19
|
+
</h5>
|
|
20
|
+
{children}
|
|
21
|
+
</div>
|
|
22
|
+
)
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
export default TimelineEvent
|