@daoyi/nmtl-ui 2.0.1-beta.52 → 2.0.1-beta.53

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.
Files changed (81) hide show
  1. package/lib/components/Autocomplete-3dae80ca.js +335 -0
  2. package/lib/components/Autocomplete.js +13 -0
  3. package/lib/components/Avatar.js +49 -0
  4. package/lib/components/BackTop.js +109 -0
  5. package/lib/components/BarChart.js +762 -0
  6. package/lib/components/Breadcrumbs.js +122 -0
  7. package/lib/components/Button-433372aa.js +92 -0
  8. package/lib/components/Button.js +6 -0
  9. package/lib/components/Carousel.js +4654 -0
  10. package/lib/components/Checkbox.js +37 -0
  11. package/lib/components/CollapseContent.js +179 -0
  12. package/lib/components/ContactModal-66bcb5d3.js +10779 -0
  13. package/lib/components/ContactModal.js +22 -0
  14. package/lib/components/Drawer-df3535c2.js +157 -0
  15. package/lib/components/Drawer.js +11 -0
  16. package/lib/components/Dropdown.js +134 -0
  17. package/lib/components/Empty-7318f658.js +45 -0
  18. package/lib/components/Empty.js +5 -0
  19. package/lib/components/ExportButton.js +112 -0
  20. package/lib/components/ExtraTools-b0bb9399.js +3537 -0
  21. package/lib/components/ExtraTools.js +10 -0
  22. package/lib/components/Filter.js +776 -0
  23. package/lib/components/Footer.js +271 -0
  24. package/lib/components/ForwardLink-0571e627.js +105 -0
  25. package/lib/components/ForwardLink.js +9 -0
  26. package/lib/components/Header.js +187 -0
  27. package/lib/components/Image.js +61 -0
  28. package/lib/components/Input.js +77 -0
  29. package/lib/components/InputMethod.js +33963 -0
  30. package/lib/components/KeywordSearch-568a8a44.js +139 -0
  31. package/lib/components/KeywordSearch.js +15 -0
  32. package/lib/components/KeywordTicker.js +190 -0
  33. package/lib/components/Keywords.js +317 -0
  34. package/lib/components/Loading.js +28 -0
  35. package/lib/components/MUITheme.js +2627 -0
  36. package/lib/components/Modal-64c4ab0d.js +108 -0
  37. package/lib/components/Modal.js +9 -0
  38. package/lib/components/MoreButton-6654cc5b.js +110 -0
  39. package/lib/components/MoreButton.js +6 -0
  40. package/lib/components/Radio.js +78 -0
  41. package/lib/components/SNA.js +1691 -0
  42. package/lib/components/Select-113372b2.js +115 -0
  43. package/lib/components/Select.js +8 -0
  44. package/lib/components/Spin-8a5a600d.js +75 -0
  45. package/lib/components/Spin.js +6 -0
  46. package/lib/components/Table.js +51 -0
  47. package/lib/components/Tooltip-abe1205f.js +70 -0
  48. package/lib/components/Tooltip.js +7 -0
  49. package/lib/components/_commonjsHelpers-70de2c37.js +28 -0
  50. package/lib/components/_rollupPluginBabelHelpers-3d9c8289.js +478 -0
  51. package/lib/components/createSvgIcon-a79ae4b1.js +576 -0
  52. package/lib/components/dataExport-d55d6fa3.js +92 -0
  53. package/lib/components/debounce-127da66c.js +355 -0
  54. package/lib/components/defaultTheme-19a14721.js +1485 -0
  55. package/lib/components/globalConfig.js +172 -0
  56. package/lib/components/hoist-non-react-statics.cjs-3f408ad2.js +105 -0
  57. package/lib/components/index-66babe67.js +61 -0
  58. package/lib/components/index-fdcc884e.js +481 -0
  59. package/lib/components/isObjectLike-e111475d.js +190 -0
  60. package/lib/components/style-inject.es-1f59c1d0.js +28 -0
  61. package/lib/components/transform-3a04288b.js +5475 -0
  62. package/lib/index.d.ts +36 -0
  63. package/lib/index.js +36 -0
  64. package/lib/utils/_rollupPluginBabelHelpers-8dd26e1a.js +121 -0
  65. package/lib/utils/arrayMerge.js +100 -0
  66. package/lib/utils/chunkArray.js +15 -0
  67. package/lib/utils/convert2HtmlEntities.js +42 -0
  68. package/lib/utils/domToImage.js +802 -0
  69. package/lib/utils/downloadGephi.js +106 -0
  70. package/lib/utils/exportXlsx.js +219 -0
  71. package/lib/utils/historyAppendSearch.js +502 -0
  72. package/lib/utils/index.d.ts +13 -0
  73. package/lib/utils/index.js +13 -0
  74. package/lib/utils/isDevelopMode.js +5 -0
  75. package/lib/utils/parseYMD.js +36 -0
  76. package/lib/utils/removeDuplicateItem.js +11 -0
  77. package/lib/utils/sendEmail.js +39 -0
  78. package/lib/utils/snaDefine-6a2bcd94.js +5 -0
  79. package/lib/utils/snaDefine.js +1 -0
  80. package/lib/utils/snaPreProcess.js +84 -0
  81. package/package.json +1 -1
@@ -0,0 +1,139 @@
1
+ import { a as _slicedToArray } from './_rollupPluginBabelHelpers-3d9c8289.js';
2
+ import React__default, { useState, useEffect } from 'react';
3
+ import PropTypes from 'prop-types';
4
+ import { c as classNames } from './index-66babe67.js';
5
+ import axios from 'axios';
6
+ import { s as styleInject } from './style-inject.es-1f59c1d0.js';
7
+ import { A as Autocomplete } from './Autocomplete-3dae80ca.js';
8
+
9
+ var css_248z = ".keywordSearch {\n border-radius: 4px;\n width: 100%;\n margin-right: 14px; }\n .keywordSearch--animation .autocomplete {\n transition: max-width 0.3s ease-out;\n max-width: 240px; }\n .keywordSearch--focus {\n flex: 1; }\n .keywordSearch--focus .autocomplete {\n max-width: 100%; }\n .keywordSearch .MuiAutocomplete-hasPopupIcon.MuiAutocomplete-hasClearIcon .MuiAutocomplete-inputRoot[class*='MuiOutlinedInput-root'] {\n border-radius: 10px;\n background-color: #ffffff66; }\n";
10
+ styleInject(css_248z);
11
+
12
+ const removeDuplicateItem = function (array) {
13
+ let key = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'value';
14
+ if (Array.isArray(array)) return array.filter((v, i, a) => a.findIndex(t => t[key] === v[key]) === i);
15
+ return [];
16
+ };
17
+
18
+ // 必須要有的參數:name
19
+ var FILTER_ID = 'id';
20
+ var FILTER_KEY = 'name';
21
+ var KeywordSearch = function KeywordSearch(_ref) {
22
+ var className = _ref.className,
23
+ animation = _ref.animation,
24
+ filterSameName = _ref.filterSameName,
25
+ keyword = _ref.keyword,
26
+ searchAPI = _ref.searchAPI,
27
+ placeholder = _ref.placeholder,
28
+ setMenuOpen = _ref.setMenuOpen,
29
+ menuOpen = _ref.menuOpen,
30
+ onSearch = _ref.onSearch;
31
+ var _useState = useState(false),
32
+ _useState2 = _slicedToArray(_useState, 2),
33
+ loading = _useState2[0],
34
+ setLoading = _useState2[1];
35
+ var _useState3 = useState([]),
36
+ _useState4 = _slicedToArray(_useState3, 2),
37
+ options = _useState4[0],
38
+ setOptions = _useState4[1];
39
+ var _useState5 = useState(keyword),
40
+ _useState6 = _slicedToArray(_useState5, 2),
41
+ currentKeyword = _useState6[0],
42
+ setCurrentKeyword = _useState6[1];
43
+ var fetchSearchList = function fetchSearchList(text) {
44
+ if (!text || text.length === 0) return;
45
+ setLoading(true);
46
+ axios.get(searchAPI, {
47
+ params: {
48
+ keyword: text
49
+ }
50
+ }).then(function (response) {
51
+ if (response.data && response.data.data) {
52
+ setOptions(removeDuplicateItem(response.data.data, FILTER_ID));
53
+ }
54
+ }).finally(function () {
55
+ return setLoading(false);
56
+ });
57
+ };
58
+
59
+ /* 偵測keyword變動時開始搜尋 */
60
+ useEffect(function () {
61
+ return fetchSearchList(currentKeyword);
62
+ }, [currentKeyword]);
63
+ return /*#__PURE__*/React__default.createElement("div", {
64
+ className: classNames('keywordSearch', {
65
+ 'keywordSearch--animation': animation
66
+ }, {
67
+ 'keywordSearch--focus': menuOpen
68
+ }, className)
69
+ }, /*#__PURE__*/React__default.createElement(Autocomplete, {
70
+ freeTyping: true,
71
+ renderAfterDefaultValueChange: true,
72
+ defaultValue: {
73
+ label: keyword,
74
+ value: keyword
75
+ },
76
+ loading: loading,
77
+ options: (filterSameName ? removeDuplicateItem(options, FILTER_KEY) : options).map(function (_ref2) {
78
+ var name = _ref2.name,
79
+ id = _ref2.id,
80
+ value = _ref2.value,
81
+ label = _ref2.label;
82
+ return {
83
+ value: id || value || name,
84
+ label: name || label
85
+ };
86
+ }),
87
+ placeholder: placeholder,
88
+ onSearch: setCurrentKeyword,
89
+ onChange: function onChange(result) {
90
+ if (result) onSearch(options.find(function (_ref3) {
91
+ var id = _ref3.id,
92
+ value = _ref3.value;
93
+ return id === result.value || value === result.value;
94
+ }) || result);
95
+ },
96
+ onEnter: function onEnter(event, result) {
97
+ return onSearch(result);
98
+ },
99
+ onFocus: function onFocus() {
100
+ return setMenuOpen(true);
101
+ },
102
+ onBlur: function onBlur() {
103
+ return setMenuOpen(false);
104
+ }
105
+ }));
106
+ };
107
+ KeywordSearch.defaultProps = {
108
+ className: undefined,
109
+ animation: false,
110
+ filterSameName: true,
111
+ keyword: undefined,
112
+ searchAPI: undefined,
113
+ placeholder: undefined,
114
+ menuOpen: false,
115
+ setMenuOpen: function setMenuOpen() {},
116
+ onSearch: function onSearch() {}
117
+ };
118
+ KeywordSearch.propTypes = {
119
+ /** Css Name */
120
+ className: PropTypes.string,
121
+ /** 點擊後自動展開(動畫) */
122
+ animation: PropTypes.bool,
123
+ /** 是否過濾相同名字的項目 */
124
+ filterSameName: PropTypes.bool,
125
+ /** 預設的關鍵字 */
126
+ keyword: PropTypes.string,
127
+ /** SearchBar的API */
128
+ searchAPI: PropTypes.string,
129
+ /** 提示字 */
130
+ placeholder: PropTypes.string,
131
+ /** Dropdown是否開啟 */
132
+ menuOpen: PropTypes.bool,
133
+ /** 設定Dropdown開啟 */
134
+ setMenuOpen: PropTypes.func,
135
+ /** 搜尋後點擊的callback */
136
+ onSearch: PropTypes.func
137
+ };
138
+
139
+ export { KeywordSearch as K };
@@ -0,0 +1,15 @@
1
+ export { K as default } from './KeywordSearch-568a8a44.js';
2
+ import './_rollupPluginBabelHelpers-3d9c8289.js';
3
+ import 'react';
4
+ import 'prop-types';
5
+ import './index-66babe67.js';
6
+ import 'axios';
7
+ import './style-inject.es-1f59c1d0.js';
8
+ import './Autocomplete-3dae80ca.js';
9
+ import './debounce-127da66c.js';
10
+ import './isObjectLike-e111475d.js';
11
+ import './_commonjsHelpers-70de2c37.js';
12
+ import '@material-ui/lab';
13
+ import '@material-ui/core';
14
+ import '@material-ui/icons';
15
+ import './Empty-7318f658.js';
@@ -0,0 +1,190 @@
1
+ import { a as _slicedToArray } from './_rollupPluginBabelHelpers-3d9c8289.js';
2
+ import React__default, { useState, useRef, useEffect } from 'react';
3
+ import PropTypes from 'prop-types';
4
+ import { c as classNames } from './index-66babe67.js';
5
+ import { F as ForwardLink } from './ForwardLink-0571e627.js';
6
+ import { s as styleInject } from './style-inject.es-1f59c1d0.js';
7
+ import './index-fdcc884e.js';
8
+ import 'react-router-dom';
9
+ import '@material-ui/core';
10
+
11
+ var css_248z = ".keywordTicker {\n width: 100%;\n display: flex;\n justify-content: flex-start;\n align-items: center; }\n .keywordTicker__track {\n display: flex;\n width: 100%;\n padding: 20px 0px;\n background-color: #ece8c0;\n overflow: hidden;\n margin-left: -80px;\n padding-left: 100px;\n z-index: 1;\n position: relative; }\n .keywordTicker__items {\n display: flex;\n justify-content: flex-start;\n align-items: center;\n flex-wrap: nowrap;\n position: relative; }\n .keywordTicker-item {\n width: auto;\n display: flex;\n justify-content: center;\n align-items: center;\n white-space: nowrap;\n cursor: pointer; }\n .keywordTicker-text {\n font-size: 1.5rem;\n z-index: 2;\n font-weight: bold;\n color: #825c0d;\n border-left: 2px solid #fff;\n padding: 0px 40px; }\n .keywordTicker__img {\n z-index: 2;\n position: relative;\n display: flex; }\n .keywordTicker__img img {\n height: 100%;\n max-height: 195px;\n image-rendering: -webkit-optimize-contrast;\n position: relative; }\n .keywordTicker--fake {\n position: absolute;\n opacity: 0;\n width: 100%; }\n\n@media only screen and (max-width: 768px) {\n .keywordTicker-text {\n font-size: 1.5rem;\n padding: 0px 15px; }\n .keywordTicker__img img {\n max-height: 104px;\n left: -60px; }\n .keywordTicker__track {\n padding: 10px 0px;\n margin-left: -100px; } }\n\n@media only screen and (max-width: 484px) {\n .keywordTicker-text {\n font-size: 14px; } }\n";
12
+ styleInject(css_248z);
13
+
14
+ var KeywordTicker = function KeywordTicker(_ref) {
15
+ var className = _ref.className,
16
+ tickerStyles = _ref.tickerStyles,
17
+ leftImg = _ref.leftImg,
18
+ tickerAttribute = _ref.tickerAttribute,
19
+ setTickerAttribute = _ref.setTickerAttribute,
20
+ _onClick = _ref.onClick;
21
+ var _useState = useState(null),
22
+ _useState2 = _slicedToArray(_useState, 2),
23
+ tracking = _useState2[0],
24
+ setTracking = _useState2[1];
25
+ var _ref2 = tickerAttribute || {
26
+ result: [],
27
+ mounted: false,
28
+ strp: 0
29
+ },
30
+ result = _ref2.result,
31
+ mounted = _ref2.mounted,
32
+ step = _ref2.step;
33
+ var _ref3 = tickerStyles || {},
34
+ _ref3$fontColor = _ref3.fontColor,
35
+ fontColor = _ref3$fontColor === void 0 ? '#825c0d' : _ref3$fontColor,
36
+ _ref3$backgroundColor = _ref3.backgroundColor,
37
+ backgroundColor = _ref3$backgroundColor === void 0 ? '#ece8c0' : _ref3$backgroundColor,
38
+ _ref3$borderColor = _ref3.borderColor,
39
+ borderColor = _ref3$borderColor === void 0 ? '#fff' : _ref3$borderColor;
40
+ var track = useRef(null);
41
+ var words = useRef(null);
42
+
43
+ // 1.算出api長出UI的長度, 並計算需溢出次數
44
+ useEffect(function () {
45
+ // 第一次mount且參考的dom皆就緒
46
+ if (result && !mounted && track.current && words.current) {
47
+ // dom初始值
48
+ var _trackWidth$wordsWidt = {
49
+ trackWidth: track.current.offsetWidth || 0,
50
+ wordsWidth: words.current.offsetWidth || 0
51
+ },
52
+ trackWidth = _trackWidth$wordsWidt.trackWidth,
53
+ wordsWidth = _trackWidth$wordsWidt.wordsWidth;
54
+ var wordsNum = Math.ceil(trackWidth / wordsWidth) > 0 ? Math.ceil(trackWidth / wordsWidth) : 0;
55
+ var newResults = Array(wordsNum * 2).fill(null).map(function () {
56
+ return result;
57
+ }).flat();
58
+ setTickerAttribute({
59
+ result: newResults,
60
+ loading: false,
61
+ mounted: true,
62
+ step: wordsNum * wordsWidth
63
+ });
64
+ }
65
+ }, [result]);
66
+
67
+ // 2.取得溢出後的文字長度製作無限跑馬燈動畫 (跑馬燈動畫核心)
68
+ useEffect(function () {
69
+ if (mounted && window) {
70
+ // dom初始值
71
+ var _wordsWidth = {
72
+ wordsWidth: words.current.offsetWidth || 0
73
+ },
74
+ wordsWidth = _wordsWidth.wordsWidth;
75
+
76
+ // 不同螢幕寬度時取得不同播放速度
77
+ var responsiveSpeed = function responsiveSpeed(width) {
78
+ if (width) {
79
+ if (width < 767) return 0.06 * 0.6;
80
+ if (width < 480) return 0.06 * 0.55;
81
+ return 0.06;
82
+ }
83
+ return 0.06;
84
+ };
85
+
86
+ // 起始點為0
87
+ var startLine = 0;
88
+
89
+ // animation config
90
+ var _buffer$speed = {
91
+ buffer: startLine,
92
+ // 左側跑馬燈進入buffer
93
+ speed: responsiveSpeed(window.innerWidth) || 0.06 // 速度
94
+ },
95
+ speed = _buffer$speed.speed;
96
+ var _start$end = {
97
+ start: startLine,
98
+ end: wordsWidth - step
99
+ },
100
+ start = _start$end.start,
101
+ end = _start$end.end;
102
+
103
+ // 固定移動速度並計算動畫時間
104
+ var distance = startLine + wordsWidth - step; // 減掉單次畫面溢出的長度
105
+ var duration = distance / speed;
106
+ var initTracking = words.current.animate(
107
+ // keyframes
108
+ [{
109
+ left: "".concat(start, "px")
110
+ }, {
111
+ left: "-".concat(end, "px")
112
+ }],
113
+ // timing options
114
+ {
115
+ duration: duration,
116
+ iterations: Infinity
117
+ });
118
+
119
+ // 初始化並將狀態傳出
120
+ setTracking(initTracking);
121
+ }
122
+ }, [mounted, step]);
123
+ return /*#__PURE__*/React__default.createElement("div", {
124
+ className: classNames('keywordTicker', className)
125
+ }, leftImg && /*#__PURE__*/React__default.createElement("div", {
126
+ className: "keywordTicker__img"
127
+ }, /*#__PURE__*/React__default.createElement("img", {
128
+ src: leftImg,
129
+ alt: "hotKeyword"
130
+ })), /*#__PURE__*/React__default.createElement("div", {
131
+ className: "keywordTicker__track",
132
+ ref: track,
133
+ style: {
134
+ backgroundColor: backgroundColor
135
+ },
136
+ onMouseEnter: function onMouseEnter() {
137
+ return tracking === null || tracking === void 0 ? void 0 : tracking.pause();
138
+ },
139
+ onMouseLeave: function onMouseLeave() {
140
+ return tracking === null || tracking === void 0 ? void 0 : tracking.play();
141
+ }
142
+ }, /*#__PURE__*/React__default.createElement("div", {
143
+ className: "keywordTicker__items",
144
+ ref: words
145
+ }, (result || []).map(function (_ref4, index) {
146
+ var keyword = _ref4.keyword;
147
+ return /*#__PURE__*/React__default.createElement(ForwardLink, {
148
+ key: index.toString(),
149
+ className: "keywordTicker-item",
150
+ pathname: "/knowledge/keyword",
151
+ search: {
152
+ keyword: keyword
153
+ },
154
+ disabled: _onClick
155
+ }, /*#__PURE__*/React__default.createElement("div", {
156
+ className: "keywordTicker-text",
157
+ style: {
158
+ color: fontColor,
159
+ borderColor: borderColor
160
+ },
161
+ onClick: function onClick() {
162
+ return _onClick === null || _onClick === void 0 ? void 0 : _onClick(keyword);
163
+ }
164
+ }, keyword));
165
+ }))));
166
+ };
167
+ KeywordTicker.defaultProps = {
168
+ className: undefined,
169
+ leftImg: undefined,
170
+ tickerStyles: undefined,
171
+ tickerAttribute: undefined,
172
+ setTickerAttribute: function setTickerAttribute() {},
173
+ onClick: undefined
174
+ };
175
+ KeywordTicker.propTypes = {
176
+ /** Css Name */
177
+ className: PropTypes.string,
178
+ /** Custom image by each project */
179
+ leftImg: PropTypes.string,
180
+ /** Items Color */
181
+ tickerStyles: PropTypes.objectOf(PropTypes.any),
182
+ /** Attribute of result, loading, mounted, step */
183
+ tickerAttribute: PropTypes.objectOf(PropTypes.any),
184
+ /** Set Attribute */
185
+ setTickerAttribute: PropTypes.func,
186
+ /** Click callback */
187
+ onClick: PropTypes.func
188
+ };
189
+
190
+ export { KeywordTicker as default };
@@ -0,0 +1,317 @@
1
+ import { a as _slicedToArray } from './_rollupPluginBabelHelpers-3d9c8289.js';
2
+ import React__default, { useState, useEffect } from 'react';
3
+ import PropTypes from 'prop-types';
4
+ import { c as classNames } from './index-66babe67.js';
5
+ import { M as Modal } from './Modal-64c4ab0d.js';
6
+ import { Typography } from '@material-ui/core';
7
+ import { r as requireCreateSvgIcon, i as interopRequireDefault, a as interopRequireWildcard } from './createSvgIcon-a79ae4b1.js';
8
+ import { s as styleInject } from './style-inject.es-1f59c1d0.js';
9
+ import '@material-ui/icons';
10
+ import './Button-433372aa.js';
11
+ import './Spin-8a5a600d.js';
12
+ import './_commonjsHelpers-70de2c37.js';
13
+ import './defaultTheme-19a14721.js';
14
+ import 'react-is';
15
+ import '@material-ui/styles';
16
+ import 'react-dom';
17
+
18
+ const useRWD = () => {
19
+ const [device, setDevice] = useState('PC');
20
+ const handleRWD = () => {
21
+ if (window.innerWidth > 768) setDevice('PC');else if (window.innerWidth > 576) setDevice('tablet');else setDevice('mobile');
22
+ };
23
+ useEffect(() => {
24
+ handleRWD();
25
+ window.addEventListener('resize', handleRWD);
26
+ return () => {
27
+ window.removeEventListener('resize', handleRWD);
28
+ };
29
+ }, []);
30
+ return device;
31
+ };
32
+
33
+ var MoreHoriz = {};
34
+
35
+ var _interopRequireDefault = interopRequireDefault.exports;
36
+
37
+ var _interopRequireWildcard = interopRequireWildcard.exports;
38
+
39
+ Object.defineProperty(MoreHoriz, "__esModule", {
40
+ value: true
41
+ });
42
+ var default_1 = MoreHoriz.default = void 0;
43
+
44
+ var React = _interopRequireWildcard(React__default);
45
+
46
+ var _createSvgIcon = _interopRequireDefault(requireCreateSvgIcon());
47
+
48
+ var _default = (0, _createSvgIcon.default)( /*#__PURE__*/React.createElement("path", {
49
+ d: "M6 10c-1.1 0-2 .9-2 2s.9 2 2 2 2-.9 2-2-.9-2-2-2zm12 0c-1.1 0-2 .9-2 2s.9 2 2 2 2-.9 2-2-.9-2-2-2zm-6 0c-1.1 0-2 .9-2 2s.9 2 2 2 2-.9 2-2-.9-2-2-2z"
50
+ }), 'MoreHoriz');
51
+
52
+ default_1 = MoreHoriz.default = _default;
53
+
54
+ var css_248z$2 = ".keywordList {\n display: flex;\n flex-wrap: wrap;\n margin-top: 0.8rem; }\n .keywordList__item {\n font-size: 1.125rem !important;\n border-radius: 5px;\n margin-right: 0.5rem !important;\n margin-bottom: 0.5rem !important;\n cursor: pointer; }\n .keywordList__item__hover {\n border-radius: 5px;\n line-height: normal;\n padding: 0.125rem 0.625rem;\n background: transparent;\n transition: 0.3s background ease-in-out; }\n .keywordList__item__hover:hover {\n background: rgba(0, 0, 0, 0.1); }\n .keywordList__icon svg {\n font-size: 1rem;\n line-height: 1rem; }\n .keywordList__icon .keywordList__item__hover {\n display: flex;\n align-items: center;\n height: 100%;\n padding: 0.125rem 0.875rem; }\n\n@media screen and (max-width: 484px) {\n .keywordList__item {\n font-size: 0.75rem !important; } }\n";
55
+ styleInject(css_248z$2);
56
+
57
+ const KeywordList = _ref => {
58
+ let {
59
+ className,
60
+ keywords,
61
+ backgroundColor,
62
+ textColor,
63
+ limit,
64
+ onMoreClick,
65
+ onKeywordClick
66
+ } = _ref;
67
+ return Array.isArray(keywords) && /*#__PURE__*/React__default.createElement("div", {
68
+ className: classNames('keywordList', className)
69
+ }, (limit ? keywords.slice(0, limit) : keywords).map((keyword, i) => /*#__PURE__*/React__default.createElement(Typography, {
70
+ color: "textSecondary",
71
+ className: "keywordList__item",
72
+ key: i.toString(),
73
+ onClick: () => onKeywordClick(keyword)
74
+ }, /*#__PURE__*/React__default.createElement("div", {
75
+ style: {
76
+ color: textColor,
77
+ backgroundColor
78
+ },
79
+ className: "keywordList__item__hover"
80
+ }, keyword))), limit && keywords.length > limit && /*#__PURE__*/React__default.createElement("div", {
81
+ className: classNames('keywordList__item', 'keywordList__icon'),
82
+ style: {
83
+ backgroundColor
84
+ },
85
+ onClick: onMoreClick
86
+ }, /*#__PURE__*/React__default.createElement("div", {
87
+ className: "keywordList__item__hover",
88
+ style: {
89
+ color: textColor
90
+ }
91
+ }, /*#__PURE__*/React__default.createElement(default_1, null))));
92
+ };
93
+ KeywordList.defaultProps = {
94
+ className: undefined,
95
+ keywords: undefined,
96
+ backgroundColor: undefined,
97
+ textColor: undefined,
98
+ limit: undefined,
99
+ onMoreClick: () => {},
100
+ onKeywordClick: () => {}
101
+ };
102
+
103
+ /* Write props detail information and 'npm run updateStory' will help you generate stories's argTypes */
104
+ KeywordList.propTypes = {
105
+ /** Css Name */
106
+ className: PropTypes.string,
107
+ /** 背景顏色 */
108
+ backgroundColor: PropTypes.string,
109
+ /** 文字顏色 */
110
+ textColor: PropTypes.string,
111
+ /** 關鍵字 */
112
+ keywords: PropTypes.arrayOf(PropTypes.any),
113
+ /** 關鍵字限制(用來評估是否要啟用顯示更多) */
114
+ limit: PropTypes.number,
115
+ /** 顯示更多被按時 */
116
+ onMoreClick: PropTypes.func,
117
+ /** 關鍵字被按時 */
118
+ onKeywordClick: PropTypes.func
119
+ };
120
+
121
+ var css_248z$1 = ".keywordModal__content {\n width: 100%;\n display: flex;\n flex-direction: column;\n align-items: center;\n border-radius: 5px; }\n .keywordModal__content__image {\n display: flex;\n justify-content: center;\n width: 100%; }\n .keywordModal__content__image__img {\n height: 7.75rem;\n object-fit: scale-down; }\n .keywordModal__content__detail {\n width: 100%;\n padding: 1rem 1.25rem;\n border-radius: 5px; }\n .keywordModal__content__detail__title {\n font-weight: bold;\n font-size: 1.5rem;\n text-decoration: underline;\n cursor: pointer; }\n .keywordModal__content__detail__desc {\n margin-top: 0.8rem;\n font-size: 1rem;\n display: -webkit-box;\n overflow: hidden;\n -webkit-line-clamp: 2;\n -webkit-box-orient: vertical; }\n .keywordModal__content__detail__author {\n margin-top: 0.8rem;\n font-size: 1.25rem;\n cursor: pointer; }\n .keywordModal__content__detail__author:hover {\n text-decoration: underline; }\n\n.keywordModal p {\n font-family: 'Noto Sans TC', 'Arial', sans-serif !important; }\n\n.keywordModal .MuiPaper-root {\n min-width: initial !important; }\n";
122
+ styleInject(css_248z$1);
123
+
124
+ const KeywordModal = props => {
125
+ const {
126
+ visible,
127
+ setVisible,
128
+ cardData
129
+ } = props;
130
+ const {
131
+ modalTextColor,
132
+ modalImageColor,
133
+ backgroundColor,
134
+ modalBackgroundColor,
135
+ textColor
136
+ } = props;
137
+ const {
138
+ onKeywordClick,
139
+ onTitleClick,
140
+ onAuthorClick
141
+ } = props;
142
+ const {
143
+ author,
144
+ imgUrl,
145
+ title
146
+ } = cardData || {};
147
+ const keywords = cardData && cardData.keywords && cardData.keywords.split('\n') || [];
148
+ const contentColor = modalTextColor || textColor;
149
+ // const desc = introduction || description;
150
+
151
+ return /*#__PURE__*/React__default.createElement(Modal, {
152
+ transparent: true,
153
+ size: "small",
154
+ className: "keywordModal",
155
+ visible: visible,
156
+ footer: null,
157
+ onCancel: () => setVisible(false)
158
+ }, /*#__PURE__*/React__default.createElement("div", {
159
+ className: "keywordModal__content",
160
+ style: {
161
+ backgroundColor: modalBackgroundColor
162
+ }
163
+ }, imgUrl && /*#__PURE__*/React__default.createElement("div", {
164
+ className: "keywordModal__content__image",
165
+ style: {
166
+ backgroundColor: modalImageColor
167
+ }
168
+ }, /*#__PURE__*/React__default.createElement("img", {
169
+ className: "keywordModal__content__image__img",
170
+ src: imgUrl,
171
+ alt: ""
172
+ })), /*#__PURE__*/React__default.createElement("div", {
173
+ className: "keywordModal__content__detail"
174
+ }, /*#__PURE__*/React__default.createElement("div", {
175
+ title: title,
176
+ className: "keywordModal__content__detail__title",
177
+ style: {
178
+ color: contentColor
179
+ },
180
+ onClick: onTitleClick
181
+ }, title), author && /*#__PURE__*/React__default.createElement("div", {
182
+ className: "keywordModal__content__detail__author",
183
+ title: author,
184
+ onClick: onAuthorClick,
185
+ style: {
186
+ color: contentColor
187
+ }
188
+ }, author), /*#__PURE__*/React__default.createElement(KeywordList, {
189
+ keywords,
190
+ textColor,
191
+ backgroundColor,
192
+ onKeywordClick
193
+ }))));
194
+ };
195
+ KeywordModal.defaultProps = {
196
+ visible: undefined,
197
+ setVisible: () => {},
198
+ modalTextColor: undefined,
199
+ modalImageColor: undefined,
200
+ modalBackgroundColor: undefined,
201
+ backgroundColor: undefined,
202
+ textColor: undefined,
203
+ cardData: undefined,
204
+ onKeywordClick: () => {},
205
+ onTitleClick: () => {},
206
+ onAuthorClick: () => {}
207
+ };
208
+ KeywordModal.propTypes = {
209
+ visible: PropTypes.bool,
210
+ setVisible: PropTypes.func,
211
+ cardData: PropTypes.objectOf(PropTypes.any),
212
+ modalTextColor: PropTypes.string,
213
+ modalImageColor: PropTypes.string,
214
+ modalBackgroundColor: PropTypes.string,
215
+ backgroundColor: PropTypes.string,
216
+ textColor: PropTypes.string,
217
+ onKeywordClick: PropTypes.func,
218
+ onTitleClick: PropTypes.func,
219
+ onAuthorClick: PropTypes.func
220
+ };
221
+
222
+ var css_248z = ".keywords p {\n font-family: 'Noto Sans TC', 'Arial', sans-serif !important; }\n";
223
+ styleInject(css_248z);
224
+
225
+ var Keywords = function Keywords(props) {
226
+ var className = props.className,
227
+ keywords = props.keywords,
228
+ cardData = props.cardData,
229
+ limit = props.limit,
230
+ theme = props.theme;
231
+ var _ref = theme || {},
232
+ backgroundColor = _ref.backgroundColor,
233
+ textColor = _ref.textColor,
234
+ modalTextColor = _ref.modalTextColor,
235
+ modalImageColor = _ref.modalImageColor,
236
+ modalBackgroundColor = _ref.modalBackgroundColor;
237
+ var onKeywordClick = props.onKeywordClick,
238
+ _onMoreClick = props.onMoreClick,
239
+ onTitleClick = props.onTitleClick,
240
+ onAuthorClick = props.onAuthorClick;
241
+ var currentKeywords = cardData && cardData.keywords && cardData.keywords.split('\n') || keywords || [];
242
+ if (currentKeywords.filter(function (keyword) {
243
+ return keyword && keyword.length > 0;
244
+ }).length === 0) return null;
245
+ var _useState = useState(),
246
+ _useState2 = _slicedToArray(_useState, 2),
247
+ modalVisible = _useState2[0],
248
+ setModalVisible = _useState2[1];
249
+ var device = useRWD();
250
+ return /*#__PURE__*/React__default.createElement("div", {
251
+ className: classNames('keywords', className)
252
+ }, /*#__PURE__*/React__default.createElement(KeywordList, {
253
+ limit: limit || (device === 'mobile' ? 1 : undefined),
254
+ keywords: currentKeywords,
255
+ backgroundColor: backgroundColor,
256
+ textColor: textColor,
257
+ onMoreClick: function onMoreClick() {
258
+ return cardData ? setModalVisible(true) : _onMoreClick();
259
+ },
260
+ onKeywordClick: onKeywordClick
261
+ }), /*#__PURE__*/React__default.createElement(KeywordModal, {
262
+ visible: modalVisible,
263
+ setVisible: setModalVisible,
264
+ modalTextColor: modalTextColor,
265
+ modalImageColor: modalImageColor,
266
+ modalBackgroundColor: modalBackgroundColor,
267
+ cardData: cardData,
268
+ backgroundColor: backgroundColor,
269
+ textColor: textColor,
270
+ onKeywordClick: onKeywordClick,
271
+ onTitleClick: onTitleClick,
272
+ onAuthorClick: onAuthorClick
273
+ }));
274
+ };
275
+ Keywords.defaultProps = {
276
+ className: undefined,
277
+ keywords: undefined,
278
+ cardData: undefined,
279
+ limit: undefined,
280
+ theme: undefined,
281
+ onKeywordClick: function onKeywordClick() {},
282
+ onMoreClick: function onMoreClick() {},
283
+ onTitleClick: function onTitleClick() {},
284
+ onAuthorClick: function onAuthorClick() {}
285
+ };
286
+ Keywords.propTypes = {
287
+ /** Css Name */
288
+ className: PropTypes.string,
289
+ /** 關鍵字 */
290
+ keywords: PropTypes.arrayOf(PropTypes.any),
291
+ /** 卡片資訊 */
292
+ cardData: PropTypes.objectOf(PropTypes.any),
293
+ /** 關鍵字限制(用來評估是否要啟用顯示更多) */
294
+ limit: PropTypes.number,
295
+ theme: PropTypes.shape({
296
+ /** 背景顏色 */
297
+ backgroundColor: PropTypes.string,
298
+ /** 文字顏色 */
299
+ textColor: PropTypes.string,
300
+ /** Modal標題顏色 */
301
+ modalTextColor: PropTypes.string,
302
+ /** Modal圖片背景顏色 */
303
+ modalImageColor: PropTypes.string,
304
+ /** Modal背景顏色 */
305
+ modalBackgroundColor: PropTypes.string
306
+ }),
307
+ /** 當關鍵字被點擊時 */
308
+ onKeywordClick: PropTypes.func,
309
+ /** 顯示更多被按時 */
310
+ onMoreClick: PropTypes.func,
311
+ /** 標題被按時 */
312
+ onTitleClick: PropTypes.func,
313
+ /** 作者被按時 */
314
+ onAuthorClick: PropTypes.func
315
+ };
316
+
317
+ export { Keywords as default };
@@ -0,0 +1,28 @@
1
+ import React__default from 'react';
2
+ import { c as classNames } from './index-66babe67.js';
3
+ import { CircularProgress } from '@material-ui/core';
4
+ import PropTypes from 'prop-types';
5
+ import { s as styleInject } from './style-inject.es-1f59c1d0.js';
6
+
7
+ var css_248z = ".loadingPage {\n padding: 4rem 0;\n color: #0087dc;\n width: 100%;\n display: flex;\n align-items: center;\n justify-content: center; }\n";
8
+ styleInject(css_248z);
9
+
10
+ var Loading = function Loading(_ref) {
11
+ var className = _ref.className;
12
+ return /*#__PURE__*/React__default.createElement("div", {
13
+ className: classNames('loadingPage', className)
14
+ }, /*#__PURE__*/React__default.createElement(CircularProgress, {
15
+ size: 80
16
+ }));
17
+ };
18
+ Loading.defaultProps = {
19
+ className: undefined
20
+ };
21
+
22
+ /* Write props detail information and 'npm run updateStory' will help you generate stories's argTypes */
23
+ Loading.propTypes = {
24
+ /** Css Name */
25
+ className: PropTypes.string
26
+ };
27
+
28
+ export { Loading as default };