@twreporter/react-components 8.24.0-rc.1 → 8.24.0-rc.3

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 CHANGED
@@ -3,6 +3,49 @@
3
3
  All notable changes to this project will be documented in this file.
4
4
  See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
5
5
 
6
+ # [8.24.0-rc.3](https://github.com/twreporter/twreporter-npm-packages/compare/@twreporter/react-components@8.24.0-rc.2...@twreporter/react-components@8.24.0-rc.3) (2024-01-17)
7
+
8
+
9
+ ### Bug Fixes
10
+
11
+ * pass bookmark as parameter when create ([c467e68](https://github.com/twreporter/twreporter-npm-packages/commit/c467e68afc1bb401d9a7e9718d9514d69d4564a2))
12
+
13
+
14
+
15
+
16
+
17
+ # [8.24.0-rc.2](https://github.com/twreporter/twreporter-npm-packages/compare/@twreporter/react-components@8.24.0-rc.1...@twreporter/react-components@8.24.0-rc.2) (2024-01-15)
18
+
19
+
20
+ ### Bug Fixes
21
+
22
+ * add twreporter-redex to storybook config ([22f32ac](https://github.com/twreporter/twreporter-npm-packages/commit/22f32ac1fe777ea8c3a7b1992696b114b72847ae))
23
+ * article card description line climp ([97102e8](https://github.com/twreporter/twreporter-npm-packages/commit/97102e81916ec4cfac09736f3532f2338e6547e5))
24
+ * import title1 & title2 ([4818159](https://github.com/twreporter/twreporter-npm-packages/commit/4818159b12923e107720a590b89e2ec8dade88b5))
25
+ * import title1 to listing-page ([6c69a1d](https://github.com/twreporter/twreporter-npm-packages/commit/6c69a1d37192f29eaa56e1940da149d364a0e304))
26
+ * replace TitleBar by Title1 ([64ec60b](https://github.com/twreporter/twreporter-npm-packages/commit/64ec60b596200eea00bfe240a4a6a1dd1cd3239f))
27
+ * topic id prop types fix ([c66ff8a](https://github.com/twreporter/twreporter-npm-packages/commit/c66ff8a0a4d59ec9023e978522f8242f712181fd))
28
+ * use renderButton istead of cloneElement ([826eda9](https://github.com/twreporter/twreporter-npm-packages/commit/826eda908f6052bf920f22fe1eb93bfe38eaa731))
29
+ * useBookmark throw error ([b332f96](https://github.com/twreporter/twreporter-npm-packages/commit/b332f96f0bf8b0c6bbe9cea7fbf8b0dd3851dd53))
30
+
31
+
32
+ ### Features
33
+
34
+ * add short story components ([8f07375](https://github.com/twreporter/twreporter-npm-packages/commit/8f07375709beb48e234a1b2ad4076e27795b73f1))
35
+ * add title2 ([eaf58ae](https://github.com/twreporter/twreporter-npm-packages/commit/eaf58ae4da5d57f73ae7778011b0424a58fd6381))
36
+ * add useBookmark & useStore ([7fd48e5](https://github.com/twreporter/twreporter-npm-packages/commit/7fd48e521e659307b1b91a6b4acdfb4d0a2fd683))
37
+ * article card bookmark button ([824c138](https://github.com/twreporter/twreporter-npm-packages/commit/824c1386f2fa60330fdd7352ad5236715e2b447d))
38
+ * change headline font size ([74b83a1](https://github.com/twreporter/twreporter-npm-packages/commit/74b83a1b853e061dcce10c14a0e7ad4a1986f888))
39
+ * change storybook description ([b9e24d1](https://github.com/twreporter/twreporter-npm-packages/commit/b9e24d11b500f13950d03452f790315c0a68b475))
40
+ * change title bar to title 1 ([951803d](https://github.com/twreporter/twreporter-npm-packages/commit/951803d77cbc22c365f4ad5ef55cc66ee8999aa2))
41
+ * hover on article-card ([4004040](https://github.com/twreporter/twreporter-npm-packages/commit/4004040431825f56b8a5ba1e9c1b02efe1fa3608))
42
+ * no hover effect on bookmark button ([769f0f9](https://github.com/twreporter/twreporter-npm-packages/commit/769f0f9918e4098d8925c9dc4c2196aea258e01d))
43
+ * remove comment ([945f59f](https://github.com/twreporter/twreporter-npm-packages/commit/945f59fc69e1e73168bff6758bd8e423bbd4d013))
44
+
45
+
46
+
47
+
48
+
6
49
  # [8.24.0-rc.1](https://github.com/twreporter/twreporter-npm-packages/compare/@twreporter/react-components@8.24.0-rc.0...@twreporter/react-components@8.24.0-rc.1) (2024-01-15)
7
50
 
8
51
  **Note:** Version bump only for package @twreporter/react-components
@@ -21,12 +21,18 @@ var _icon = require("../../icon");
21
21
 
22
22
  var _button = require("../../button");
23
23
 
24
+ var _customizedLink = _interopRequireDefault(require("../../customized-link"));
25
+
24
26
  var _sharedEnum = require("../../shared-enum");
25
27
 
26
28
  var _color = require("@twreporter/core/lib/constants/color");
27
29
 
28
30
  var _releaseBranch = require("@twreporter/core/lib/constants/release-branch");
29
31
 
32
+ var _theme = require("@twreporter/core/lib/constants/theme");
33
+
34
+ var _entityPath = _interopRequireDefault(require("@twreporter/core/lib/constants/entity-path"));
35
+
30
36
  var _width, _height, _marginLeft, _marginTop, _marginBottom;
31
37
 
32
38
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
@@ -44,25 +50,29 @@ var bookmarkStyle = {
44
50
  var metaStyle = {
45
51
  marginBottom: (_marginBottom = {}, _defineProperty(_marginBottom, _sharedEnum.Size.S, '4px'), _defineProperty(_marginBottom, _sharedEnum.Size.L, '8px'), _marginBottom)
46
52
  };
53
+ var Container = /*#__PURE__*/(0, _styledComponents["default"])(_customizedLink["default"]).withConfig({
54
+ displayName: "article-card__Container",
55
+ componentId: "sc-9196c7-0"
56
+ })(["text-decoration:none;&:hover{.hover{opacity:0.8;}}"]);
47
57
 
48
58
  var FlexGroup = /*#__PURE__*/_styledComponents["default"].div.withConfig({
49
59
  displayName: "article-card__FlexGroup",
50
- componentId: "sc-9196c7-0"
60
+ componentId: "sc-9196c7-1"
51
61
  })(["display:flex;"]);
52
62
 
53
63
  var FlexGroupColumn = /*#__PURE__*/_styledComponents["default"].div.withConfig({
54
64
  displayName: "article-card__FlexGroupColumn",
55
- componentId: "sc-9196c7-1"
65
+ componentId: "sc-9196c7-2"
56
66
  })(["display:flex;flex-direction:column;"]);
57
67
 
58
68
  var FlexSpaceBetween = /*#__PURE__*/(0, _styledComponents["default"])(FlexGroup).withConfig({
59
69
  displayName: "article-card__FlexSpaceBetween",
60
- componentId: "sc-9196c7-2"
70
+ componentId: "sc-9196c7-3"
61
71
  })(["justify-content:space-between;"]);
62
72
  var Meta = /*#__PURE__*/(0, _styledComponents["default"])(FlexGroup).withConfig({
63
73
  displayName: "article-card__Meta",
64
- componentId: "sc-9196c7-3"
65
- })(["color:", ";flex-direction:row;align-items:center;margin-bottom:", ";& > div{margin-right:8px;}&:last-child{margin-right:0;}", ""], _color.colorGrayscale.gray600, function (props) {
74
+ componentId: "sc-9196c7-4"
75
+ })(["color:", ";flex-direction:row;align-items:center;margin-bottom:", ";& > p{margin-right:8px;}&:last-child{margin-right:0;}", ""], _color.colorGrayscale.gray600, function (props) {
66
76
  return metaStyle.marginBottom[props.size];
67
77
  }, function (props) {
68
78
  return props.hide ? "display: none;" : '';
@@ -70,18 +80,18 @@ var Meta = /*#__PURE__*/(0, _styledComponents["default"])(FlexGroup).withConfig(
70
80
 
71
81
  var DescContainer = /*#__PURE__*/_styledComponents["default"].div.withConfig({
72
82
  displayName: "article-card__DescContainer",
73
- componentId: "sc-9196c7-4"
74
- })(["color:", ";margin-top:8px;div{display:-webkit-box;text-overflow:ellipsis;overflow:hidden;line-clamp:3;-webkit-line-clamp:3;-webkit-box-orient:vertical;}"], _color.colorGrayscale.gray800);
83
+ componentId: "sc-9196c7-5"
84
+ })(["color:", ";margin-top:8px;p{display:-webkit-box;text-overflow:ellipsis;overflow:hidden;line-clamp:3;-webkit-line-clamp:3;-webkit-box-orient:vertical;}"], _color.colorGrayscale.gray800);
75
85
 
76
86
  var BookmarkContainer = /*#__PURE__*/(0, _styledComponents["default"])(FlexGroup).withConfig({
77
87
  displayName: "article-card__BookmarkContainer",
78
- componentId: "sc-9196c7-5"
88
+ componentId: "sc-9196c7-6"
79
89
  })(["align-self:flex-end;margin-top:", ";"], function (props) {
80
90
  return bookmarkStyle.marginTop[props.size];
81
91
  });
82
92
  var ImageContainer = /*#__PURE__*/(0, _styledComponents["default"])(FlexGroup).withConfig({
83
93
  displayName: "article-card__ImageContainer",
84
- componentId: "sc-9196c7-6"
94
+ componentId: "sc-9196c7-7"
85
95
  })(["flex:0 0 auto;align-self:center;width:", ";height:", ";margin-left:", ";"], function (props) {
86
96
  return imageStyle.width[props.size];
87
97
  }, function (props) {
@@ -91,11 +101,11 @@ var ImageContainer = /*#__PURE__*/(0, _styledComponents["default"])(FlexGroup).w
91
101
  });
92
102
  var LeftColumn = /*#__PURE__*/(0, _styledComponents["default"])(FlexGroupColumn).withConfig({
93
103
  displayName: "article-card__LeftColumn",
94
- componentId: "sc-9196c7-7"
104
+ componentId: "sc-9196c7-8"
95
105
  })(["flex:1;"]);
96
106
  var TitleText = /*#__PURE__*/(0, _styledComponents["default"])(_headline.H4).withConfig({
97
107
  displayName: "article-card__TitleText",
98
- componentId: "sc-9196c7-8"
108
+ componentId: "sc-9196c7-9"
99
109
  })(["color:", ";"], _color.colorGrayscale.gray800);
100
110
 
101
111
  var ArticleCard = function ArticleCard(_ref) {
@@ -115,50 +125,71 @@ var ArticleCard = function ArticleCard(_ref) {
115
125
  isBookmarked = _ref$isBookmarked === void 0 ? false : _ref$isBookmarked,
116
126
  toggleBookmark = _ref.toggleBookmark,
117
127
  _ref$releaseBranch = _ref.releaseBranch,
118
- releaseBranch = _ref$releaseBranch === void 0 ? _releaseBranch.BRANCH.master : _ref$releaseBranch;
128
+ releaseBranch = _ref$releaseBranch === void 0 ? _releaseBranch.BRANCH.master : _ref$releaseBranch,
129
+ _ref$showIsBookmarked = _ref.showIsBookmarked,
130
+ showIsBookmarked = _ref$showIsBookmarked === void 0 ? false : _ref$showIsBookmarked,
131
+ _ref$style = _ref.style,
132
+ style = _ref$style === void 0 ? _theme.ARTICLE_THEME.v2["default"] : _ref$style,
133
+ _ref$slug = _ref.slug,
134
+ slug = _ref$slug === void 0 ? '' : _ref$slug;
119
135
  var hideMeta = !category && !date;
120
136
  var titleJSX = title ? /*#__PURE__*/_react["default"].createElement(TitleText, {
121
137
  text: title,
122
- type: "article"
138
+ type: "article",
139
+ className: "hover"
123
140
  }) : null;
124
141
  var dateJSX = date ? /*#__PURE__*/_react["default"].createElement(_paragraph.P3, {
125
- text: date
142
+ text: date,
143
+ className: "hover"
126
144
  }) : null;
127
145
  var categoryJSX = category ? /*#__PURE__*/_react["default"].createElement(_paragraph.P3, {
128
- text: category
146
+ text: category,
147
+ className: "hover"
129
148
  }) : null;
130
149
  var descriptionJSX = description ? size === _sharedEnum.Size.S ? /*#__PURE__*/_react["default"].createElement(_paragraph.P2, {
131
- text: description
150
+ text: description,
151
+ className: "hover"
132
152
  }) : /*#__PURE__*/_react["default"].createElement(_paragraph.P1, {
133
- text: description
153
+ text: description,
154
+ className: "hover"
134
155
  }) : null;
156
+ var isInteractiveArticle = style === _theme.ARTICLE_THEME.v2.interactive;
157
+ var link = {
158
+ to: "".concat(isInteractiveArticle ? _entityPath["default"].interactiveArticle : _entityPath["default"].article).concat(slug),
159
+ target: isInteractiveArticle ? '_blank' : ''
160
+ };
161
+
162
+ var onBookmarkClick = function onBookmarkClick(event) {
163
+ event.preventDefault();
164
+ toggleBookmark();
165
+ };
135
166
 
136
167
  var bookmarkIcon = /*#__PURE__*/_react["default"].createElement(_icon.Bookmark, {
137
- type: _icon.Bookmark.Type.SAVED,
168
+ type: isBookmarked ? _icon.Bookmark.Type.SAVED : _icon.Bookmark.Type.ADD,
138
169
  releaseBranch: releaseBranch
139
170
  });
140
171
 
141
- var bookmarkButton = size === _sharedEnum.Size.S ? /*#__PURE__*/_react["default"].createElement(_button.TextButton, {
172
+ var bookmarkButton = /*#__PURE__*/_react["default"].createElement(_button.TextButton, {
142
173
  theme: _button.TextButton.THEME.normal,
143
174
  style: _button.TextButton.Style.LIGHT,
144
175
  leftIconComponent: bookmarkIcon,
145
- text: "\u53D6\u6D88\u6536\u85CF"
146
- }) : /*#__PURE__*/_react["default"].createElement(_button.IconButton, {
147
- theme: _button.IconButton.THEME.normal,
148
- iconComponent: bookmarkIcon
176
+ text: isBookmarked ? '已收藏' : '收藏'
149
177
  });
150
- var bookmarkJSX = isBookmarked ? /*#__PURE__*/_react["default"].createElement(BookmarkContainer, {
151
- onClick: toggleBookmark,
178
+
179
+ var bookmarkJSX = showIsBookmarked ? /*#__PURE__*/_react["default"].createElement(BookmarkContainer, {
180
+ onClick: onBookmarkClick,
152
181
  size: size
153
182
  }, bookmarkButton) : null;
154
183
 
155
184
  var metaJSX = /*#__PURE__*/_react["default"].createElement(Meta, {
156
185
  hide: hideMeta,
157
- size: size
186
+ size: size,
187
+ className: "hover"
158
188
  }, categoryJSX, dateJSX);
159
189
 
160
190
  var imageJSX = /*#__PURE__*/_react["default"].createElement(ImageContainer, {
161
- size: size
191
+ size: size,
192
+ className: "hover"
162
193
  }, /*#__PURE__*/_react["default"].createElement(_imageWithFallback["default"], {
163
194
  src: image.src,
164
195
  alt: image.alt,
@@ -166,11 +197,11 @@ var ArticleCard = function ArticleCard(_ref) {
166
197
  }));
167
198
 
168
199
  if (size === _sharedEnum.Size.S) {
169
- return /*#__PURE__*/_react["default"].createElement(FlexGroupColumn, null, /*#__PURE__*/_react["default"].createElement(FlexSpaceBetween, null, /*#__PURE__*/_react["default"].createElement(FlexGroupColumn, null, metaJSX, titleJSX), /*#__PURE__*/_react["default"].createElement(FlexGroup, null, imageJSX)), /*#__PURE__*/_react["default"].createElement(FlexGroupColumn, null, /*#__PURE__*/_react["default"].createElement(DescContainer, null, descriptionJSX), bookmarkJSX));
200
+ return /*#__PURE__*/_react["default"].createElement(Container, link, /*#__PURE__*/_react["default"].createElement(FlexGroupColumn, null, /*#__PURE__*/_react["default"].createElement(FlexSpaceBetween, null, /*#__PURE__*/_react["default"].createElement(FlexGroupColumn, null, metaJSX, titleJSX), /*#__PURE__*/_react["default"].createElement(FlexGroup, null, imageJSX)), /*#__PURE__*/_react["default"].createElement(FlexGroupColumn, null, /*#__PURE__*/_react["default"].createElement(DescContainer, null, descriptionJSX), bookmarkJSX)));
170
201
  } // L size
171
202
 
172
203
 
173
- return /*#__PURE__*/_react["default"].createElement(FlexSpaceBetween, null, /*#__PURE__*/_react["default"].createElement(LeftColumn, null, metaJSX, /*#__PURE__*/_react["default"].createElement(FlexGroupColumn, null, titleJSX, /*#__PURE__*/_react["default"].createElement(DescContainer, null, descriptionJSX), bookmarkJSX)), imageJSX);
204
+ return /*#__PURE__*/_react["default"].createElement(Container, link, /*#__PURE__*/_react["default"].createElement(FlexSpaceBetween, null, /*#__PURE__*/_react["default"].createElement(LeftColumn, null, metaJSX, /*#__PURE__*/_react["default"].createElement(FlexGroupColumn, null, titleJSX, /*#__PURE__*/_react["default"].createElement(DescContainer, null, descriptionJSX), bookmarkJSX)), imageJSX));
174
205
  };
175
206
 
176
207
  ArticleCard.propTypes = {
@@ -186,7 +217,10 @@ ArticleCard.propTypes = {
186
217
  size: _propTypes["default"].oneOf(Object.values(_sharedEnum.Size)),
187
218
  isBookmarked: _propTypes["default"].bool,
188
219
  toggleBookmark: _propTypes["default"].func,
189
- releaseBranch: _releaseBranch.BRANCH_PROP_TYPES
220
+ releaseBranch: _releaseBranch.BRANCH_PROP_TYPES,
221
+ showIsBookmarked: _propTypes["default"].bool,
222
+ style: _propTypes["default"].oneOf(Object.values(_theme.ARTICLE_THEME.v2)),
223
+ slug: _propTypes["default"].string
190
224
  };
191
225
  ArticleCard.Size = _sharedEnum.Size;
192
226
  var _default = ArticleCard;
@@ -0,0 +1,163 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports["default"] = void 0;
7
+
8
+ var _react = _interopRequireDefault(require("react"));
9
+
10
+ var _propTypes = _interopRequireDefault(require("prop-types"));
11
+
12
+ var _styledComponents = _interopRequireDefault(require("styled-components"));
13
+
14
+ var _imageWithFallback = _interopRequireDefault(require("../../image-with-fallback"));
15
+
16
+ var _paragraph = require("../../text/paragraph");
17
+
18
+ var _headline = require("../../text/headline");
19
+
20
+ var _customizedLink = _interopRequireDefault(require("../../customized-link"));
21
+
22
+ var _sharedEnum = require("../../shared-enum");
23
+
24
+ var _color = require("@twreporter/core/lib/constants/color");
25
+
26
+ var _theme = require("@twreporter/core/lib/constants/theme");
27
+
28
+ var _entityPath = _interopRequireDefault(require("@twreporter/core/lib/constants/entity-path"));
29
+
30
+ var _releaseBranch = require("@twreporter/core/lib/constants/release-branch");
31
+
32
+ var _width, _height, _marginLeft, _marginBottom;
33
+
34
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
35
+
36
+ function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
37
+
38
+ var imageStyle = {
39
+ width: (_width = {}, _defineProperty(_width, _sharedEnum.Size.S, '48px'), _defineProperty(_width, _sharedEnum.Size.L, '80px'), _width),
40
+ height: (_height = {}, _defineProperty(_height, _sharedEnum.Size.S, '48px'), _defineProperty(_height, _sharedEnum.Size.L, '80px'), _height),
41
+ marginLeft: (_marginLeft = {}, _defineProperty(_marginLeft, _sharedEnum.Size.S, '8px'), _defineProperty(_marginLeft, _sharedEnum.Size.L, '16px'), _marginLeft)
42
+ };
43
+ var metaStyle = {
44
+ marginBottom: (_marginBottom = {}, _defineProperty(_marginBottom, _sharedEnum.Size.S, '4px'), _defineProperty(_marginBottom, _sharedEnum.Size.L, '8px'), _marginBottom)
45
+ };
46
+ var Container = /*#__PURE__*/(0, _styledComponents["default"])(_customizedLink["default"]).withConfig({
47
+ displayName: "short-story__Container",
48
+ componentId: "sc-119yx1u-0"
49
+ })(["text-decoration:none;&:hover{opacity:0.8;}"]);
50
+
51
+ var FlexGroup = /*#__PURE__*/_styledComponents["default"].div.withConfig({
52
+ displayName: "short-story__FlexGroup",
53
+ componentId: "sc-119yx1u-1"
54
+ })(["display:flex;"]);
55
+
56
+ var FlexGroupColumn = /*#__PURE__*/_styledComponents["default"].div.withConfig({
57
+ displayName: "short-story__FlexGroupColumn",
58
+ componentId: "sc-119yx1u-2"
59
+ })(["display:flex;flex-direction:column;"]);
60
+
61
+ var FlexSpaceBetween = /*#__PURE__*/(0, _styledComponents["default"])(FlexGroup).withConfig({
62
+ displayName: "short-story__FlexSpaceBetween",
63
+ componentId: "sc-119yx1u-3"
64
+ })(["justify-content:space-between;"]);
65
+ var Meta = /*#__PURE__*/(0, _styledComponents["default"])(FlexGroup).withConfig({
66
+ displayName: "short-story__Meta",
67
+ componentId: "sc-119yx1u-4"
68
+ })(["color:", ";flex-direction:row;align-items:center;margin-bottom:", ";& > p{margin-right:8px;}&:last-child{margin-right:0;}", ""], _color.colorGrayscale.gray600, function (props) {
69
+ return metaStyle.marginBottom[props.size];
70
+ }, function (props) {
71
+ return props.hide ? "display: none;" : '';
72
+ });
73
+ var ImageContainer = /*#__PURE__*/(0, _styledComponents["default"])(FlexGroup).withConfig({
74
+ displayName: "short-story__ImageContainer",
75
+ componentId: "sc-119yx1u-5"
76
+ })(["flex:0 0 auto;align-self:center;width:", ";height:", ";margin-left:", ";"], function (props) {
77
+ return imageStyle.width[props.size];
78
+ }, function (props) {
79
+ return imageStyle.height[props.size];
80
+ }, function (props) {
81
+ return imageStyle.marginLeft[props.size];
82
+ });
83
+ var LeftColumn = /*#__PURE__*/(0, _styledComponents["default"])(FlexGroupColumn).withConfig({
84
+ displayName: "short-story__LeftColumn",
85
+ componentId: "sc-119yx1u-6"
86
+ })(["flex:1;"]);
87
+ var TitleText = /*#__PURE__*/(0, _styledComponents["default"])(_headline.H6).withConfig({
88
+ displayName: "short-story__TitleText",
89
+ componentId: "sc-119yx1u-7"
90
+ })(["color:", ";"], _color.colorGrayscale.gray800);
91
+
92
+ var ShortStory = function ShortStory(_ref) {
93
+ var _ref$title = _ref.title,
94
+ title = _ref$title === void 0 ? '' : _ref$title,
95
+ _ref$date = _ref.date,
96
+ date = _ref$date === void 0 ? '' : _ref$date,
97
+ _ref$image = _ref.image,
98
+ image = _ref$image === void 0 ? {} : _ref$image,
99
+ _ref$category = _ref.category,
100
+ category = _ref$category === void 0 ? '' : _ref$category,
101
+ _ref$size = _ref.size,
102
+ size = _ref$size === void 0 ? _sharedEnum.Size.S : _ref$size,
103
+ _ref$releaseBranch = _ref.releaseBranch,
104
+ releaseBranch = _ref$releaseBranch === void 0 ? _releaseBranch.BRANCH.master : _ref$releaseBranch,
105
+ _ref$style = _ref.style,
106
+ style = _ref$style === void 0 ? _theme.ARTICLE_THEME.v2["default"] : _ref$style,
107
+ _ref$slug = _ref.slug,
108
+ slug = _ref$slug === void 0 ? '' : _ref$slug;
109
+ var hideMeta = !category && !date;
110
+ var titleJSX = title ? /*#__PURE__*/_react["default"].createElement(TitleText, {
111
+ text: title,
112
+ type: "article"
113
+ }) : null;
114
+ var dateJSX = date ? /*#__PURE__*/_react["default"].createElement(_paragraph.P3, {
115
+ text: date
116
+ }) : null;
117
+ var categoryJSX = category ? /*#__PURE__*/_react["default"].createElement(_paragraph.P3, {
118
+ text: category
119
+ }) : null;
120
+ var isInteractiveArticle = style === _theme.ARTICLE_THEME.v2.interactive;
121
+ var link = {
122
+ to: "".concat(isInteractiveArticle ? _entityPath["default"].interactiveArticle : _entityPath["default"].article).concat(slug),
123
+ target: isInteractiveArticle ? '_blank' : ''
124
+ };
125
+
126
+ var metaJSX = /*#__PURE__*/_react["default"].createElement(Meta, {
127
+ hide: hideMeta,
128
+ size: size
129
+ }, categoryJSX, dateJSX);
130
+
131
+ var imageJSX = /*#__PURE__*/_react["default"].createElement(ImageContainer, {
132
+ size: size
133
+ }, /*#__PURE__*/_react["default"].createElement(_imageWithFallback["default"], {
134
+ src: image.src,
135
+ alt: image.alt,
136
+ releaseBranch: releaseBranch
137
+ }));
138
+
139
+ if (size === _sharedEnum.Size.S) {
140
+ return /*#__PURE__*/_react["default"].createElement(Container, link, /*#__PURE__*/_react["default"].createElement(FlexGroupColumn, null, /*#__PURE__*/_react["default"].createElement(FlexSpaceBetween, null, /*#__PURE__*/_react["default"].createElement(FlexGroupColumn, null, metaJSX, titleJSX), /*#__PURE__*/_react["default"].createElement(FlexGroup, null, imageJSX))));
141
+ } // L size
142
+
143
+
144
+ return /*#__PURE__*/_react["default"].createElement(Container, link, /*#__PURE__*/_react["default"].createElement(FlexSpaceBetween, null, /*#__PURE__*/_react["default"].createElement(LeftColumn, null, metaJSX, /*#__PURE__*/_react["default"].createElement(FlexGroupColumn, null, titleJSX)), imageJSX));
145
+ };
146
+
147
+ ShortStory.propTypes = {
148
+ title: _propTypes["default"].string.isRequired,
149
+ date: _propTypes["default"].string,
150
+ image: _propTypes["default"].shape({
151
+ alt: _propTypes["default"].string,
152
+ src: _propTypes["default"].string.isRequired,
153
+ srcSet: _propTypes["default"].string
154
+ }),
155
+ category: _propTypes["default"].string,
156
+ size: _propTypes["default"].oneOf(Object.values(_sharedEnum.Size)),
157
+ releaseBranch: _releaseBranch.BRANCH_PROP_TYPES,
158
+ style: _propTypes["default"].oneOf(Object.values(_theme.ARTICLE_THEME.v2)),
159
+ slug: _propTypes["default"].string
160
+ };
161
+ ShortStory.Size = _sharedEnum.Size;
162
+ var _default = ShortStory;
163
+ exports["default"] = _default;
@@ -51,7 +51,9 @@ var article = {
51
51
  src: 'https://upload.wikimedia.org/wikipedia/commons/thumb/7/77/Google_Images_2015_logo.svg/220px-Google_Images_2015_logo.svg.png',
52
52
  alt: 'test'
53
53
  },
54
- releaseBranch: _releaseBranch.BRANCH.master
54
+ releaseBranch: _releaseBranch.BRANCH.master,
55
+ isBookmarked: true,
56
+ showIsBookmarked: false
55
57
  }
56
58
  };
57
59
  exports.article = article;
@@ -0,0 +1,66 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.shortStory = exports["default"] = void 0;
7
+
8
+ var _react = _interopRequireDefault(require("react"));
9
+
10
+ var _styledComponents = _interopRequireDefault(require("styled-components"));
11
+
12
+ var _shortStory = _interopRequireDefault(require("../components/short-story"));
13
+
14
+ var _constants = require("../../storybook/constants");
15
+
16
+ var _getEnumArg = require("../../storybook/utils/get-enum-arg");
17
+
18
+ var _releaseBranch = require("@twreporter/core/lib/constants/release-branch");
19
+
20
+ var _theme = require("@twreporter/core/lib/constants/theme");
21
+
22
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
23
+
24
+ /* eslint react/display-name:0 */
25
+ // components
26
+ // storybooks
27
+ // @twreporters
28
+ var _default = {
29
+ title: 'Card/Short Story',
30
+ component: _shortStory["default"],
31
+ argTypes: {
32
+ releaseBranch: _constants.BRANCH_STORYBOOK_ARG_TYPE,
33
+ size: _constants.SIZE_STORYBOOK_ARG_TYPE,
34
+ style: (0, _getEnumArg.getRadioArg)(_theme.ARTICLE_THEME.v2, _theme.ARTICLE_THEME.v2["default"])
35
+ }
36
+ };
37
+ exports["default"] = _default;
38
+
39
+ var Container = /*#__PURE__*/_styledComponents["default"].div.withConfig({
40
+ displayName: "shortStorystories__Container",
41
+ componentId: "luhojz-0"
42
+ })(["width:", "px;"], function (props) {
43
+ return props.size === _shortStory["default"].Size.S ? '343' : '516';
44
+ });
45
+
46
+ var shortStory = {
47
+ render: function render(args) {
48
+ return /*#__PURE__*/_react["default"].createElement(Container, {
49
+ size: args.size
50
+ }, /*#__PURE__*/_react["default"].createElement(_shortStory["default"], args));
51
+ },
52
+ args: {
53
+ size: _shortStory["default"].Size.L,
54
+ title: '文章標題文章標題文章標題文章標題文章標題文章標題文章標題文章標題',
55
+ category: '主分類',
56
+ date: '2022/01/01',
57
+ image: {
58
+ src: 'https://upload.wikimedia.org/wikipedia/commons/thumb/7/77/Google_Images_2015_logo.svg/220px-Google_Images_2015_logo.svg.png',
59
+ alt: 'test'
60
+ },
61
+ releaseBranch: _releaseBranch.BRANCH.master,
62
+ style: _theme.ARTICLE_THEME.v2["default"],
63
+ slug: 'a-test-slug'
64
+ }
65
+ };
66
+ exports.shortStory = shortStory;
package/lib/hook/index.js CHANGED
@@ -4,6 +4,12 @@ Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
6
  exports["default"] = void 0;
7
+ Object.defineProperty(exports, "useBookmark", {
8
+ enumerable: true,
9
+ get: function get() {
10
+ return _useBookmark["default"];
11
+ }
12
+ });
7
13
  Object.defineProperty(exports, "useFontFaceObserver", {
8
14
  enumerable: true,
9
15
  get: function get() {
@@ -16,15 +22,27 @@ Object.defineProperty(exports, "useOutsideClick", {
16
22
  return _useOutsideClick["default"];
17
23
  }
18
24
  });
25
+ Object.defineProperty(exports, "useStore", {
26
+ enumerable: true,
27
+ get: function get() {
28
+ return _useStore["default"];
29
+ }
30
+ });
19
31
 
20
32
  var _useOutsideClick = _interopRequireDefault(require("./use-outside-click"));
21
33
 
22
34
  var _useFontFaceObserver = _interopRequireDefault(require("./use-font-face-observer"));
23
35
 
36
+ var _useBookmark = _interopRequireDefault(require("./use-bookmark"));
37
+
38
+ var _useStore = _interopRequireDefault(require("./use-store"));
39
+
24
40
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
25
41
 
26
42
  var _default = {
27
43
  useOutsideClick: _useOutsideClick["default"],
28
- useFontFaceObserver: _useFontFaceObserver["default"]
44
+ useFontFaceObserver: _useFontFaceObserver["default"],
45
+ useBookmark: _useBookmark["default"],
46
+ useStore: _useStore["default"]
29
47
  };
30
48
  exports["default"] = _default;
@@ -0,0 +1,102 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports["default"] = void 0;
7
+
8
+ var _redux = _interopRequireDefault(require("@twreporter/redux"));
9
+
10
+ var _get = _interopRequireDefault(require("lodash/get"));
11
+
12
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
13
+
14
+ function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
15
+
16
+ function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
17
+
18
+ function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
19
+
20
+ function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }
21
+
22
+ function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
23
+
24
+ function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
25
+
26
+ function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }
27
+
28
+ function _iterableToArrayLimit(arr, i) { var _i = arr == null ? null : typeof Symbol !== "undefined" && arr[Symbol.iterator] || arr["@@iterator"]; if (_i == null) return; var _arr = []; var _n = true; var _d = false; var _s, _e; try { for (_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"] != null) _i["return"](); } finally { if (_d) throw _e; } } return _arr; }
29
+
30
+ function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
31
+
32
+ var _ = {
33
+ get: _get["default"]
34
+ };
35
+
36
+ function getHostFromWindowLocation() {
37
+ var defaultHost = 'https://www.twreporter.org';
38
+
39
+ try {
40
+ var _window$location = window.location,
41
+ host = _window$location.host,
42
+ protocol = _window$location.protocol;
43
+
44
+ if (host && protocol) {
45
+ return "".concat(protocol, "//").concat(host);
46
+ } else {
47
+ console.warn('The host or protocol in `window.location` is not valid:', 'window.location.protocol:', protocol, 'window.location.host:', host, "Return default host '".concat(defaultHost, "' instead."));
48
+ return defaultHost;
49
+ }
50
+ } catch (err) {
51
+ console.warn('Error on getting `host` and `protocol` from `window.location`:', err);
52
+ }
53
+ }
54
+
55
+ var _twreporterRedux$acti = _redux["default"].actions,
56
+ createSingleBookmark = _twreporterRedux$acti.createSingleBookmark,
57
+ deleteSingleBookmark = _twreporterRedux$acti.deleteSingleBookmark;
58
+ /**
59
+ * hook for create or delete bookmark
60
+ * @param {Array.<{state: object, dispatch: Function}>} store
61
+ * @param {object} bookmark
62
+ * @param {string} bookmark.slug
63
+ * @param {boolean} bookmark.is_external
64
+ * @param {string} bookmark.title
65
+ * @param {string} bookmark.desc
66
+ * @param {string} bookmark.thumbnail
67
+ * @param {string} bookmark.published_date
68
+ */
69
+
70
+ var useBookmark = function useBookmark(store) {
71
+ var _store = _slicedToArray(store, 2),
72
+ state = _store[0],
73
+ dispatch = _store[1];
74
+
75
+ var jwt = _.get(state, 'auth.accessToken');
76
+
77
+ var userID = _.get(state, 'auth.userInfo.user_id');
78
+
79
+ var addCurrentPageToBookmarks = function addCurrentPageToBookmarks(bookmark) {
80
+ var bookmarkToBeCreated = _objectSpread(_objectSpread({}, bookmark), {}, {
81
+ host: getHostFromWindowLocation()
82
+ });
83
+
84
+ return dispatch(createSingleBookmark(jwt, userID, bookmarkToBeCreated));
85
+ };
86
+
87
+ var removeCurrentPageFromBookmarks = function removeCurrentPageFromBookmarks(bookmarkID) {
88
+ if (bookmarkID) {
89
+ return dispatch(deleteSingleBookmark(jwt, userID, bookmarkID));
90
+ } else {
91
+ throw new Error('Error on deleting bookmark: No valid bookmark id.');
92
+ }
93
+ };
94
+
95
+ return {
96
+ addAction: addCurrentPageToBookmarks,
97
+ removeAction: removeCurrentPageFromBookmarks
98
+ };
99
+ };
100
+
101
+ var _default = useBookmark;
102
+ exports["default"] = _default;
@@ -0,0 +1,46 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports["default"] = void 0;
7
+
8
+ var _react = require("react");
9
+
10
+ var _reactRedux = require("react-redux");
11
+
12
+ function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }
13
+
14
+ function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
15
+
16
+ function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
17
+
18
+ function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }
19
+
20
+ function _iterableToArrayLimit(arr, i) { var _i = arr == null ? null : typeof Symbol !== "undefined" && arr[Symbol.iterator] || arr["@@iterator"]; if (_i == null) return; var _arr = []; var _n = true; var _d = false; var _s, _e; try { for (_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"] != null) _i["return"](); } finally { if (_d) throw _e; } } return _arr; }
21
+
22
+ function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
23
+
24
+ function useStore() {
25
+ var _useContext = (0, _react.useContext)(_reactRedux.ReactReduxContext),
26
+ store = _useContext.store;
27
+
28
+ var getState = store.getState,
29
+ dispatch = store.dispatch,
30
+ subscribe = store.subscribe;
31
+
32
+ var _useState = (0, _react.useState)(getState()),
33
+ _useState2 = _slicedToArray(_useState, 2),
34
+ storeState = _useState2[0],
35
+ setStoreState = _useState2[1];
36
+
37
+ (0, _react.useEffect)(function () {
38
+ return subscribe(function () {
39
+ setStoreState(getState());
40
+ }, []);
41
+ });
42
+ return [storeState, dispatch];
43
+ }
44
+
45
+ var _default = useStore;
46
+ exports["default"] = _default;
@@ -17,22 +17,16 @@ var _isFetchingWrapper = _interopRequireDefault(require("../../is-fetching-wrapp
17
17
 
18
18
  var _divider = _interopRequireDefault(require("../../divider"));
19
19
 
20
- var _customizedLink = _interopRequireDefault(require("../../customized-link"));
21
-
22
20
  var _rwd = require("../../rwd");
23
21
 
24
22
  var _mockupSpec = _interopRequireDefault(require("../constants/mockup-spec"));
25
23
 
26
- var _entityPath = _interopRequireDefault(require("@twreporter/core/lib/constants/entity-path"));
27
-
28
24
  var _mediaQuery = _interopRequireDefault(require("@twreporter/core/lib/utils/media-query"));
29
25
 
30
26
  var _date = require("@twreporter/core/lib/utils/date");
31
27
 
32
28
  var _releaseBranch = require("@twreporter/core/lib/constants/release-branch");
33
29
 
34
- var _theme = require("@twreporter/core/lib/constants/theme");
35
-
36
30
  var _forEach = _interopRequireDefault(require("lodash/forEach"));
37
31
 
38
32
  var _get = _interopRequireDefault(require("lodash/get"));
@@ -60,12 +54,12 @@ var Card = /*#__PURE__*/(0, _styledComponents["default"])(_card.ArticleCard).wit
60
54
  var Container = /*#__PURE__*/_styledComponents["default"].div.withConfig({
61
55
  displayName: "card-list__Container",
62
56
  componentId: "yvf001-1"
63
- })(["display:flex;flex-direction:column;a{color:inherit;text-decoration:none;}"]);
57
+ })(["display:flex;flex-direction:column;"]);
64
58
 
65
59
  var Item = /*#__PURE__*/_styledComponents["default"].div.withConfig({
66
60
  displayName: "card-list__Item",
67
61
  componentId: "yvf001-2"
68
- })(["margin-bottom:24px;&:hover{opacity:0.7;}&:last-child{margin-bottom:0;}width:100%;"]);
62
+ })(["margin-bottom:24px;&:last-child{margin-bottom:0;}width:100%;"]);
69
63
 
70
64
  var StyledDivider = /*#__PURE__*/(0, _styledComponents["default"])(_divider["default"]).withConfig({
71
65
  displayName: "card-list__StyledDivider",
@@ -75,7 +69,13 @@ var StyledDivider = /*#__PURE__*/(0, _styledComponents["default"])(_divider["def
75
69
  var FlexItem = /*#__PURE__*/_styledComponents["default"].div.withConfig({
76
70
  displayName: "card-list__FlexItem",
77
71
  componentId: "yvf001-4"
78
- })(["width:", "px;margin:0 auto;display:flex;justify-content:flex-start;align-items:flex-start;flex-wrap:wrap;", " ", " ", ""], _mockupSpec["default"].hd.maxWidth, _mediaQuery["default"].desktopOnly(_templateObject || (_templateObject = _taggedTemplateLiteral(["\n width: ", "px;\n "])), _mockupSpec["default"].desktop.maxWidth), _mediaQuery["default"].tabletOnly(_templateObject2 || (_templateObject2 = _taggedTemplateLiteral(["\n width: ", "px;\n "])), _mockupSpec["default"].tablet.maxWidth), _mediaQuery["default"].mobileOnly(_templateObject3 || (_templateObject3 = _taggedTemplateLiteral(["\n width: 100%;\n justify-content: center;\n "]))));
72
+ })(["width:", "px;margin:0 auto;display:flex;justify-content:flex-start;align-items:flex-start;flex-wrap:wrap;", " ", " ", ""], function (props) {
73
+ return props.width !== 0 ? "".concat(props.width, "%") : _mockupSpec["default"].hd.maxWidth;
74
+ }, _mediaQuery["default"].desktopOnly(_templateObject || (_templateObject = _taggedTemplateLiteral(["\n width: ", "px;\n "])), function (props) {
75
+ return props.width !== 0 ? "".concat(props.width, "%") : _mockupSpec["default"].desktop.maxWidth;
76
+ }), _mediaQuery["default"].tabletOnly(_templateObject2 || (_templateObject2 = _taggedTemplateLiteral(["\n width: ", "px;\n "])), function (props) {
77
+ return props.width !== 0 ? "".concat(props.width, "%") : _mockupSpec["default"].tablet.maxWidth;
78
+ }), _mediaQuery["default"].mobileOnly(_templateObject3 || (_templateObject3 = _taggedTemplateLiteral(["\n width: 100%;\n justify-content: center;\n "]))));
79
79
 
80
80
  var Content = (0, _isFetchingWrapper["default"])(FlexItem);
81
81
 
@@ -87,7 +87,11 @@ var CardList = function CardList(_ref) {
87
87
  _ref$showSpinner = _ref.showSpinner,
88
88
  showSpinner = _ref$showSpinner === void 0 ? false : _ref$showSpinner,
89
89
  _ref$releaseBranch = _ref.releaseBranch,
90
- releaseBranch = _ref$releaseBranch === void 0 ? _releaseBranch.BRANCH.master : _ref$releaseBranch;
90
+ releaseBranch = _ref$releaseBranch === void 0 ? _releaseBranch.BRANCH.master : _ref$releaseBranch,
91
+ _ref$showIsBookmarked = _ref.showIsBookmarked,
92
+ showIsBookmarked = _ref$showIsBookmarked === void 0 ? false : _ref$showIsBookmarked,
93
+ _ref$width = _ref.width,
94
+ width = _ref$width === void 0 ? 0 : _ref$width;
91
95
 
92
96
  if (!data || data.length === 0) {
93
97
  return null;
@@ -114,11 +118,6 @@ var CardList = function CardList(_ref) {
114
118
  title = item.title,
115
119
  slug = item.slug,
116
120
  style = item.style;
117
- var isInteractiveArticle = style === _theme.ARTICLE_THEME.interactive;
118
- var link = {
119
- to: "".concat(isInteractiveArticle ? _entityPath["default"].interactiveArticle : _entityPath["default"].article).concat(slug),
120
- target: isInteractiveArticle ? '_blank' : ''
121
- };
122
121
  var articleCardProps = {
123
122
  title: title,
124
123
  description: _.get(item, 'og_description', ''),
@@ -128,20 +127,27 @@ var CardList = function CardList(_ref) {
128
127
  },
129
128
  category: getFirstCategory(_.get(item, 'category_set', [])),
130
129
  date: (0, _date.date2yyyymmdd)(_.get(item, 'published_date'), '/'),
131
- releaseBranch: releaseBranch
130
+ releaseBranch: releaseBranch,
131
+ style: style,
132
+ slug: slug,
133
+ isBookmarked: _.get(item, 'is_bookmarked', false),
134
+ toggleBookmark: _.get(item, 'toggle_bookmark')
132
135
  };
133
136
  return /*#__PURE__*/_react["default"].createElement(Item, {
134
137
  key: id
135
- }, /*#__PURE__*/_react["default"].createElement(_customizedLink["default"], link, /*#__PURE__*/_react["default"].createElement(_rwd.DesktopAndAbove, null, /*#__PURE__*/_react["default"].createElement(Card, _extends({}, articleCardProps, {
138
+ }, /*#__PURE__*/_react["default"].createElement(_rwd.DesktopAndAbove, null, /*#__PURE__*/_react["default"].createElement(Card, _extends({}, articleCardProps, {
139
+ showIsBookmarked: showIsBookmarked,
136
140
  size: _card.ArticleCard.Size.L
137
141
  }))), /*#__PURE__*/_react["default"].createElement(_rwd.TabletAndBelow, null, /*#__PURE__*/_react["default"].createElement(Card, _extends({}, articleCardProps, {
142
+ showIsBookmarked: showIsBookmarked,
138
143
  size: _card.ArticleCard.Size.S
139
- }))), /*#__PURE__*/_react["default"].createElement(StyledDivider, null)));
144
+ }))), /*#__PURE__*/_react["default"].createElement(StyledDivider, null));
140
145
  });
141
146
 
142
147
  return /*#__PURE__*/_react["default"].createElement(Container, null, /*#__PURE__*/_react["default"].createElement(Content, {
143
148
  isFetching: isFetching,
144
- showSpinner: showSpinner
149
+ showSpinner: showSpinner,
150
+ width: width
145
151
  }, listJSX));
146
152
  };
147
153
 
@@ -155,11 +161,15 @@ CardList.propTypes = {
155
161
  category_set: _propTypes["default"].array,
156
162
  published_date: _propTypes["default"].string.isRequired,
157
163
  slug: _propTypes["default"].string.isRequired,
158
- style: _propTypes["default"].string
164
+ style: _propTypes["default"].string,
165
+ is_bookmarked: _propTypes["default"].bool,
166
+ toggle_bookmark: _propTypes["default"].func
159
167
  })),
160
168
  isFetching: _propTypes["default"].bool,
161
169
  showSpinner: _propTypes["default"].bool,
162
- releaseBranch: _releaseBranch.BRANCH_PROP_TYPES
170
+ releaseBranch: _releaseBranch.BRANCH_PROP_TYPES,
171
+ showIsBookmarked: _propTypes["default"].bool,
172
+ width: _propTypes["default"].number
163
173
  };
164
174
  var _default = CardList;
165
175
  exports["default"] = _default;
@@ -147,7 +147,7 @@ var List = /*#__PURE__*/function (_PureComponent) {
147
147
  });
148
148
 
149
149
  var headerTitle = catName || (tagName ? "#".concat(tagName) : '');
150
- var headerJSX = headerTitle ? /*#__PURE__*/_react["default"].createElement(_titleBar.TitleBar, {
150
+ var headerJSX = headerTitle ? /*#__PURE__*/_react["default"].createElement(_titleBar.Title1, {
151
151
  title: headerTitle !== null && headerTitle !== void 0 ? headerTitle : ''
152
152
  }) : null;
153
153
  return /*#__PURE__*/_react["default"].createElement(_pageContent["default"], null, headerJSX, /*#__PURE__*/_react["default"].createElement(Items, {
@@ -166,7 +166,7 @@ var Topics = /*#__PURE__*/function (_Component) {
166
166
 
167
167
  topTopicName = _.get(topics, [0, 'topic_name'], '');
168
168
  topicUrl = _.get(topics, [0, 'linkTo'], '');
169
- topSectionJSX = [/*#__PURE__*/_react["default"].createElement(_titleBar.TitleBar, {
169
+ topSectionJSX = [/*#__PURE__*/_react["default"].createElement(_titleBar.Title1, {
170
170
  key: "top-title",
171
171
  title: "\u6DF1\u5EA6\u5C08\u984C",
172
172
  subtitle: _topics.TEXT.SECTION_TITLE_FEATURED
@@ -180,7 +180,7 @@ var Topics = /*#__PURE__*/function (_Component) {
180
180
  }
181
181
 
182
182
  var WrappedListSectionContent = (0, _isFetchingWrapper["default"])( /*#__PURE__*/_react["default"].createElement(_section.ListSectionContent, null, listedTopicsJSX));
183
- return /*#__PURE__*/_react["default"].createElement(_pageContent["default"], null, topSectionJSX, isFetching && isFirstPage ? null : /*#__PURE__*/_react["default"].createElement(_titleBar.TitleBar, {
183
+ return /*#__PURE__*/_react["default"].createElement(_pageContent["default"], null, topSectionJSX, isFetching && isFirstPage ? null : /*#__PURE__*/_react["default"].createElement(_titleBar.Title1, {
184
184
  subtitle: _topics.TEXT.SECTION_TITLE_OTHERS
185
185
  }), /*#__PURE__*/_react["default"].createElement(WrappedListSectionContent, {
186
186
  isFetching: isFetching,
@@ -194,7 +194,7 @@ var Topics = /*#__PURE__*/function (_Component) {
194
194
 
195
195
  Topics.propTypes = {
196
196
  topics: _propTypes["default"].arrayOf(_propTypes["default"].shape({
197
- id: _propTypes["default"].string.isRequired,
197
+ id: _propTypes["default"].oneOfType([_propTypes["default"].number, _propTypes["default"].string]).isRequired,
198
198
  linkTo: _propTypes["default"].string.isRequired,
199
199
  title: _propTypes["default"].string.isRequired,
200
200
  topic_name: _propTypes["default"].string.isRequired,
@@ -39,7 +39,8 @@ var card = {
39
39
  hero_image: {
40
40
  description: 'test'
41
41
  },
42
- slug: 'this-is-a-test-article'
42
+ slug: 'this-is-a-test-article',
43
+ is_bookmarked: true
43
44
  }, {
44
45
  id: '12347',
45
46
  title: '文章標題',
@@ -72,7 +73,9 @@ var card = {
72
73
  },
73
74
  slug: 'this-is-a-test-article-2'
74
75
  }],
75
- releaseBranch: _releaseBranch.BRANCH.master
76
+ releaseBranch: _releaseBranch.BRANCH.master,
77
+ showIsBookmarked: false,
78
+ width: 100
76
79
  }
77
80
  };
78
81
  exports.card = card;
@@ -61,13 +61,13 @@ var H4Container = /*#__PURE__*/(0, _styledComponents["default"])(DefaultContaine
61
61
  componentId: "axdp97-4"
62
62
  })(["line-height:150%;font-size:22px;font-family:", ";", ""], function (props) {
63
63
  return props.fontFamily;
64
- }, _mediaQuery["default"].tabletAndBelow(_templateObject4 || (_templateObject4 = _taggedTemplateLiteral(["\n font-size: 20px;\n "]))));
64
+ }, _mediaQuery["default"].tabletAndBelow(_templateObject4 || (_templateObject4 = _taggedTemplateLiteral(["\n font-size: 18px;\n "]))));
65
65
  var H5Container = /*#__PURE__*/(0, _styledComponents["default"])(DefaultContainer).withConfig({
66
66
  displayName: "headline__H5Container",
67
67
  componentId: "axdp97-5"
68
68
  })(["line-height:150%;font-size:18px;font-family:", ";", ""], function (props) {
69
69
  return props.fontFamily;
70
- }, _mediaQuery["default"].tabletAndBelow(_templateObject5 || (_templateObject5 = _taggedTemplateLiteral(["\n font-size: 18px;\n "]))));
70
+ }, _mediaQuery["default"].tabletAndBelow(_templateObject5 || (_templateObject5 = _taggedTemplateLiteral(["\n font-size: 17px;\n "]))));
71
71
  var H6Container = /*#__PURE__*/(0, _styledComponents["default"])(DefaultContainer).withConfig({
72
72
  displayName: "headline__H6Container",
73
73
  componentId: "axdp97-6"
@@ -0,0 +1,59 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports["default"] = void 0;
7
+
8
+ var _react = _interopRequireDefault(require("react"));
9
+
10
+ var _propTypes = _interopRequireDefault(require("prop-types"));
11
+
12
+ var _styledComponents = _interopRequireDefault(require("styled-components"));
13
+
14
+ var _headline = require("../../text/headline");
15
+
16
+ var _paragraph = require("../../text/paragraph");
17
+
18
+ var _divider = _interopRequireDefault(require("../../divider"));
19
+
20
+ var _color = require("@twreporter/core/lib/constants/color");
21
+
22
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
23
+
24
+ // component
25
+ // @twreporter
26
+ var BarContainer = /*#__PURE__*/_styledComponents["default"].div.withConfig({
27
+ displayName: "title1__BarContainer",
28
+ componentId: "l5ydji-0"
29
+ })(["width:100%;display:flex;align-items:baseline;gap:16px;align-self:stretch;margin-bottom:16px;"]);
30
+
31
+ var H2Gray800 = /*#__PURE__*/(0, _styledComponents["default"])(_headline.H2).withConfig({
32
+ displayName: "title1__H2Gray800",
33
+ componentId: "l5ydji-1"
34
+ })(["color:", ";"], _color.colorGrayscale.gray800);
35
+ var P1Gray600 = /*#__PURE__*/(0, _styledComponents["default"])(_paragraph.P1).withConfig({
36
+ displayName: "title1__P1Gray600",
37
+ componentId: "l5ydji-2"
38
+ })(["color:", ";"], _color.colorGrayscale.gray600);
39
+
40
+ var Title1 = function Title1(_ref) {
41
+ var _ref$title = _ref.title,
42
+ title = _ref$title === void 0 ? '' : _ref$title,
43
+ _ref$subtitle = _ref.subtitle,
44
+ subtitle = _ref$subtitle === void 0 ? '' : _ref$subtitle;
45
+ return /*#__PURE__*/_react["default"].createElement("div", null, /*#__PURE__*/_react["default"].createElement(BarContainer, null, /*#__PURE__*/_react["default"].createElement(H2Gray800, {
46
+ text: title
47
+ }), subtitle ? /*#__PURE__*/_react["default"].createElement(P1Gray600, {
48
+ text: subtitle
49
+ }) : null), /*#__PURE__*/_react["default"].createElement(_divider["default"], {
50
+ direction: _divider["default"].Direction.HORIZONTAL
51
+ }));
52
+ };
53
+
54
+ Title1.propTypes = {
55
+ title: _propTypes["default"].string.isRequired,
56
+ subtitle: _propTypes["default"].string
57
+ };
58
+ var _default = Title1;
59
+ exports["default"] = _default;
@@ -0,0 +1,84 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports["default"] = void 0;
7
+
8
+ var _react = _interopRequireDefault(require("react"));
9
+
10
+ var _propTypes = _interopRequireDefault(require("prop-types"));
11
+
12
+ var _styledComponents = _interopRequireDefault(require("styled-components"));
13
+
14
+ var _headline = require("../../text/headline");
15
+
16
+ var _paragraph = require("../../text/paragraph");
17
+
18
+ var _divider = _interopRequireDefault(require("../../divider"));
19
+
20
+ var _rwd = require("../../rwd");
21
+
22
+ var _sharedEnum = require("../../shared-enum");
23
+
24
+ var _color = require("@twreporter/core/lib/constants/color");
25
+
26
+ var _mediaQuery = _interopRequireDefault(require("@twreporter/core/lib/utils/media-query"));
27
+
28
+ var _templateObject;
29
+
30
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
31
+
32
+ function _taggedTemplateLiteral(strings, raw) { if (!raw) { raw = strings.slice(0); } return Object.freeze(Object.defineProperties(strings, { raw: { value: Object.freeze(raw) } })); }
33
+
34
+ var BarContainer = /*#__PURE__*/_styledComponents["default"].div.withConfig({
35
+ displayName: "title2__BarContainer",
36
+ componentId: "t8u2lz-0"
37
+ })(["width:100%;display:flex;align-self:stretch;margin-bottom:16px;justify-content:space-between;", ""], _mediaQuery["default"].tabletAndBelow(_templateObject || (_templateObject = _taggedTemplateLiteral(["\n margin-bottom: 8px;\n "]))));
38
+
39
+ var Text = /*#__PURE__*/_styledComponents["default"].div.withConfig({
40
+ displayName: "title2__Text",
41
+ componentId: "t8u2lz-1"
42
+ })(["display:flex;align-items:baseline;gap:16px;"]);
43
+
44
+ var H5Gray800 = /*#__PURE__*/(0, _styledComponents["default"])(_headline.H5).withConfig({
45
+ displayName: "title2__H5Gray800",
46
+ componentId: "t8u2lz-2"
47
+ })(["color:", ";"], _color.colorGrayscale.gray800);
48
+ var P2Gray600 = /*#__PURE__*/(0, _styledComponents["default"])(_paragraph.P2).withConfig({
49
+ displayName: "title2__P2Gray600",
50
+ componentId: "t8u2lz-3"
51
+ })(["color:", ";"], _color.colorGrayscale.gray600);
52
+ var DividerGray800 = /*#__PURE__*/(0, _styledComponents["default"])(_divider["default"]).withConfig({
53
+ displayName: "title2__DividerGray800",
54
+ componentId: "t8u2lz-4"
55
+ })(["border-color:", ";"], _color.colorGrayscale.gray800);
56
+
57
+ var Title2 = function Title2(_ref) {
58
+ var _ref$title = _ref.title,
59
+ title = _ref$title === void 0 ? '' : _ref$title,
60
+ _ref$subtitle = _ref.subtitle,
61
+ subtitle = _ref$subtitle === void 0 ? '' : _ref$subtitle,
62
+ renderButton = _ref.renderButton;
63
+ return /*#__PURE__*/_react["default"].createElement(_react["default"].Fragment, null, /*#__PURE__*/_react["default"].createElement(_rwd.DesktopAndAbove, null, /*#__PURE__*/_react["default"].createElement(BarContainer, null, /*#__PURE__*/_react["default"].createElement(Text, null, /*#__PURE__*/_react["default"].createElement(H5Gray800, {
64
+ text: title
65
+ }), subtitle ? /*#__PURE__*/_react["default"].createElement(P2Gray600, {
66
+ text: subtitle
67
+ }) : null), renderButton ? renderButton(_sharedEnum.Size.L) : null), /*#__PURE__*/_react["default"].createElement(DividerGray800, {
68
+ direction: _divider["default"].Direction.HORIZONTAL
69
+ })), /*#__PURE__*/_react["default"].createElement(_rwd.TabletAndBelow, null, /*#__PURE__*/_react["default"].createElement(BarContainer, null, /*#__PURE__*/_react["default"].createElement(Text, null, /*#__PURE__*/_react["default"].createElement(H5Gray800, {
70
+ text: title
71
+ }), subtitle ? /*#__PURE__*/_react["default"].createElement(P2Gray600, {
72
+ text: subtitle
73
+ }) : null), renderButton ? renderButton(_sharedEnum.Size.S) : null), /*#__PURE__*/_react["default"].createElement(DividerGray800, {
74
+ direction: _divider["default"].Direction.HORIZONTAL
75
+ })));
76
+ };
77
+
78
+ Title2.propTypes = {
79
+ title: _propTypes["default"].string.isRequired,
80
+ subtitle: _propTypes["default"].string,
81
+ renderButton: _propTypes["default"].func
82
+ };
83
+ var _default = Title2;
84
+ exports["default"] = _default;
@@ -3,10 +3,16 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
- Object.defineProperty(exports, "TitleBar", {
6
+ Object.defineProperty(exports, "Title1", {
7
7
  enumerable: true,
8
8
  get: function get() {
9
- return _bar["default"];
9
+ return _title["default"];
10
+ }
11
+ });
12
+ Object.defineProperty(exports, "Title2", {
13
+ enumerable: true,
14
+ get: function get() {
15
+ return _title2["default"];
10
16
  }
11
17
  });
12
18
  Object.defineProperty(exports, "TitleTab", {
@@ -17,14 +23,17 @@ Object.defineProperty(exports, "TitleTab", {
17
23
  });
18
24
  exports["default"] = void 0;
19
25
 
20
- var _bar = _interopRequireDefault(require("./components/bar"));
26
+ var _title = _interopRequireDefault(require("./components/title1"));
27
+
28
+ var _title2 = _interopRequireDefault(require("./components/title2"));
21
29
 
22
30
  var _tab = _interopRequireDefault(require("./components/tab"));
23
31
 
24
32
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
25
33
 
26
34
  var _default = {
27
- TitleBar: _bar["default"],
35
+ Title1: _title["default"],
36
+ Title2: _title2["default"],
28
37
  TitleTab: _tab["default"]
29
38
  };
30
39
  exports["default"] = _default;
@@ -5,13 +5,13 @@ Object.defineProperty(exports, "__esModule", {
5
5
  });
6
6
  exports.tagBar = exports["default"] = exports.bookmarkBar = exports.bar = void 0;
7
7
 
8
- var _bar = _interopRequireDefault(require("../components/bar"));
8
+ var _title = _interopRequireDefault(require("../components/title1"));
9
9
 
10
10
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
11
11
 
12
12
  var _default = {
13
- title: 'Title Bar/Bar',
14
- component: _bar["default"]
13
+ title: 'Title Bar/Title 1',
14
+ component: _title["default"]
15
15
  };
16
16
  exports["default"] = _default;
17
17
  var bar = {
@@ -0,0 +1,57 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.title2 = exports["default"] = void 0;
7
+
8
+ var _react = _interopRequireDefault(require("react"));
9
+
10
+ var _title = _interopRequireDefault(require("../components/title2"));
11
+
12
+ var _textButton = _interopRequireDefault(require("../../button/components/textButton"));
13
+
14
+ var _icon = require("../../icon");
15
+
16
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
17
+
18
+ /* eslint react/display-name:0 */
19
+ var _default = {
20
+ title: 'Title Bar/Title 2',
21
+ component: _title["default"],
22
+ argTypes: {
23
+ // showButton is only for storybook check
24
+ showButton: {
25
+ defaultValue: true,
26
+ control: {
27
+ type: 'boolean'
28
+ }
29
+ }
30
+ }
31
+ };
32
+ exports["default"] = _default;
33
+ var title2 = {
34
+ render: function render(args) {
35
+ args.renderButton = args.showButton ? function (size) {
36
+ return /*#__PURE__*/_react["default"].createElement(_textButton["default"], {
37
+ text: "RWD \u6309\u9215",
38
+ rightIconComponent: /*#__PURE__*/_react["default"].createElement(_icon.Arrow, {
39
+ direction: "right"
40
+ }),
41
+ size: size
42
+ });
43
+ } : null;
44
+ return /*#__PURE__*/_react["default"].createElement(_title["default"], args);
45
+ },
46
+ args: {
47
+ title: 'RWD 標題',
48
+ subtitle: '副標',
49
+ showButton: true
50
+ },
51
+ parameters: {
52
+ controls: {
53
+ exclude: ['renderButton']
54
+ }
55
+ }
56
+ };
57
+ exports.title2 = title2;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@twreporter/react-components",
3
- "version": "8.24.0-rc.1",
3
+ "version": "8.24.0-rc.3",
4
4
  "main": "lib/index.js",
5
5
  "repository": "https://github.com/twreporter/twreporter-npm-packages.git",
6
6
  "author": "twreporter <developer@twreporter.org>",
@@ -15,8 +15,8 @@
15
15
  "chromatic": "npx chromatic --exit-zero-on-changes"
16
16
  },
17
17
  "dependencies": {
18
- "@twreporter/core": "^1.16.0",
19
- "@twreporter/redux": "^7.10.0-rc.0",
18
+ "@twreporter/core": "^1.17.0-rc.0",
19
+ "@twreporter/redux": "^7.10.0-rc.2",
20
20
  "fontfaceobserver-es": "^3.3.3",
21
21
  "hoist-non-react-statics": "^2.3.1",
22
22
  "lodash": "^4.0.0",
@@ -51,5 +51,5 @@
51
51
  "react-dom": "^16.0.0",
52
52
  "storybook": "^7.5.2"
53
53
  },
54
- "gitHead": "101e7eefd114f9d586d1882490c1742426b1e40d"
54
+ "gitHead": "fae9f717d3c7766dc48a538d5cf1f5c8d2d93f6d"
55
55
  }
@@ -1,51 +0,0 @@
1
- "use strict";
2
-
3
- Object.defineProperty(exports, "__esModule", {
4
- value: true
5
- });
6
- exports["default"] = void 0;
7
-
8
- var _react = _interopRequireDefault(require("react"));
9
-
10
- var _propTypes = _interopRequireDefault(require("prop-types"));
11
-
12
- var _styledComponents = _interopRequireDefault(require("styled-components"));
13
-
14
- var _headline = require("../../text/headline");
15
-
16
- var _paragraph = require("../../text/paragraph");
17
-
18
- var _divider = _interopRequireDefault(require("../../divider"));
19
-
20
- var _color = require("@twreporter/core/lib/constants/color");
21
-
22
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
23
-
24
- // component
25
- // @twreporter
26
- var BarContainer = /*#__PURE__*/_styledComponents["default"].div.withConfig({
27
- displayName: "bar__BarContainer",
28
- componentId: "sc-18ncllq-0"
29
- })(["display:flex;width:100%;flex-direction:column;color:", ";& > div{margin-bottom:16px;&:last-child{margin-bottom:0;}}"], _color.colorGrayscale.gray800);
30
-
31
- var TitleBar = function TitleBar(_ref) {
32
- var _ref$title = _ref.title,
33
- title = _ref$title === void 0 ? '' : _ref$title,
34
- _ref$subtitle = _ref.subtitle,
35
- subtitle = _ref$subtitle === void 0 ? '' : _ref$subtitle;
36
- return /*#__PURE__*/_react["default"].createElement(BarContainer, null, title ? /*#__PURE__*/_react["default"].createElement(_headline.H1, {
37
- text: title
38
- }) : null, subtitle ? /*#__PURE__*/_react["default"].createElement(_paragraph.P1, {
39
- text: subtitle,
40
- weight: _paragraph.P1.Weight.BOLD
41
- }) : null, /*#__PURE__*/_react["default"].createElement(_divider["default"], {
42
- direction: _divider["default"].Direction.HORIZONTAL
43
- }));
44
- };
45
-
46
- TitleBar.propTypes = {
47
- title: _propTypes["default"].string,
48
- subtitle: _propTypes["default"].string
49
- };
50
- var _default = TitleBar;
51
- exports["default"] = _default;