@daoyi/nmtl-ui 2.0.1-beta.14 → 2.0.1-beta.140

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 (112) hide show
  1. package/README.md +45 -45
  2. package/lib/components/Autocomplete-e40d7145.js +494 -0
  3. package/lib/components/Autocomplete.js +20 -1
  4. package/lib/components/Avatar.js +59 -1
  5. package/lib/components/BackTop.js +124 -1
  6. package/lib/components/BarChart.js +764 -1
  7. package/lib/components/Breadcrumbs.js +146 -1
  8. package/lib/components/Button-8cf35bc0.js +114 -0
  9. package/lib/components/Button.js +7 -1
  10. package/lib/components/Carousel.js +4654 -1
  11. package/lib/components/Checkbox.js +37 -1
  12. package/lib/components/CollapseContent.js +235 -1
  13. package/lib/components/ContactModal-af7fa280.js +12295 -0
  14. package/lib/components/ContactModal.js +24 -3
  15. package/lib/components/Drawer-b770014f.js +247 -0
  16. package/lib/components/Drawer.js +18 -1
  17. package/lib/components/Dropdown.js +134 -1
  18. package/lib/components/Empty-48685dd0.js +46 -0
  19. package/lib/components/Empty.js +5 -1
  20. package/lib/components/ExportButton.js +128 -1
  21. package/lib/components/ExtraTools-c46c1965.js +3676 -0
  22. package/lib/components/ExtraTools.js +11 -22
  23. package/lib/components/Filter.js +821 -12
  24. package/lib/components/Footer.js +317 -1
  25. package/lib/components/ForwardLink-2905563c.js +184 -0
  26. package/lib/components/ForwardLink.js +10 -0
  27. package/lib/components/Header.js +267 -1
  28. package/lib/components/Image.js +61 -1
  29. package/lib/components/Input.js +89 -1
  30. package/lib/components/InputMethod.js +33937 -10
  31. package/lib/components/KeywordSearch-4e621ded.js +156 -0
  32. package/lib/components/KeywordSearch.js +22 -1
  33. package/lib/components/KeywordTicker.js +224 -1
  34. package/lib/components/Keywords.js +383 -1
  35. package/lib/components/Loading.js +32 -1
  36. package/lib/components/MUITheme.js +2657 -1
  37. package/lib/components/Modal-aa77d4d8.js +171 -0
  38. package/lib/components/Modal.js +11 -1
  39. package/lib/components/MoreButton-0b5aaef3.js +148 -0
  40. package/lib/components/MoreButton.js +8 -1
  41. package/lib/components/Pagination.js +3702 -0
  42. package/lib/components/Radio.js +83 -1
  43. package/lib/components/SNA.js +1755 -22
  44. package/lib/components/SegmentedControl-804da0a6.js +113 -0
  45. package/lib/components/SegmentedControl.js +11 -0
  46. package/lib/components/Select-979f7e73.js +189 -0
  47. package/lib/components/Select.js +14 -1
  48. package/lib/components/Spin-07679812.js +79 -0
  49. package/lib/components/Spin.js +7 -1
  50. package/lib/components/Table.js +51 -1
  51. package/lib/components/Tooltip-bbbaa9c7.js +70 -0
  52. package/lib/components/Tooltip.js +7 -1
  53. package/lib/components/_commonjsHelpers-70de2c37.js +28 -0
  54. package/lib/components/_rollupPluginBabelHelpers-a52356f6.js +142 -0
  55. package/lib/components/createSvgIcon-370e163a.js +576 -0
  56. package/lib/components/dataExport-a9e3fae1.js +91 -0
  57. package/lib/components/debounce-127da66c.js +355 -0
  58. package/lib/components/defaultTheme-c5dd0f64.js +1661 -0
  59. package/lib/components/globalConfig.js +471 -0
  60. package/lib/components/hoist-non-react-statics.cjs-3f408ad2.js +105 -0
  61. package/lib/components/index-c33afcb5.js +61 -0
  62. package/lib/components/index-ff95f719.js +481 -0
  63. package/lib/components/isObjectLike-e111475d.js +190 -0
  64. package/lib/components/style-inject.es-1f59c1d0.js +28 -1
  65. package/lib/components/toConsumableArray-c268c112.js +19 -0
  66. package/lib/components/transform-849a452c.js +5475 -0
  67. package/lib/components/useTheme-98b6cf17.js +11 -0
  68. package/lib/components/withTheme-3486f38b.js +6 -0
  69. package/lib/configs/config.selector.js +151 -0
  70. package/lib/configs/index.d.ts +1 -0
  71. package/lib/configs/index.js +1 -0
  72. package/lib/index.d.ts +6 -1
  73. package/lib/index.js +6 -1
  74. package/lib/utils/_rollupPluginBabelHelpers-9802e640.js +121 -0
  75. package/lib/utils/arrayMerge.js +4953 -1
  76. package/lib/utils/chunkArray.js +15 -1
  77. package/lib/utils/convert2HtmlEntities.js +57 -1
  78. package/lib/utils/domToImage.js +802 -1
  79. package/lib/utils/downloadGephi.js +106 -1
  80. package/lib/utils/exportXlsx.js +221 -1
  81. package/lib/utils/historyAppendSearch.js +502 -1
  82. package/lib/utils/index.d.ts +2 -0
  83. package/lib/utils/index.js +2 -0
  84. package/lib/utils/isDevelopMode.js +5 -1
  85. package/lib/utils/newWindowHint-72ebfe3b.js +53 -0
  86. package/lib/utils/parseYMD.js +36 -1
  87. package/lib/utils/prepareTimelineData.js +70 -0
  88. package/lib/utils/removeDuplicateItem.js +11 -1
  89. package/lib/utils/sendEmail.js +39 -1
  90. package/lib/utils/snaDefine-6a2bcd94.js +5 -0
  91. package/lib/utils/snaDefine.js +1 -1
  92. package/lib/utils/snaPreProcess.js +84 -1
  93. package/lib/utils/syncTimelineA11y.js +293 -0
  94. package/package.json +141 -128
  95. package/lib/components/Empty-54b79907.js +0 -1
  96. package/lib/components/KeywordSearch-5a393f12.js +0 -1
  97. package/lib/components/Select-f2441b83.js +0 -1
  98. package/lib/components/_rollupPluginBabelHelpers-1b8c042f.js +0 -1
  99. package/lib/components/_rollupPluginBabelHelpers-ec4e2a53.js +0 -1
  100. package/lib/components/createSvgIcon-62b64929.js +0 -1
  101. package/lib/components/createSvgIcon-e24792d4.js +0 -1
  102. package/lib/components/createTheme-7fffa109.js +0 -1
  103. package/lib/components/dataExport-9fccd4f0.js +0 -1
  104. package/lib/components/debounce-c993109b.js +0 -1
  105. package/lib/components/hoist-non-react-statics.cjs-d6a9befd.js +0 -1
  106. package/lib/components/index-11391ca3.js +0 -7
  107. package/lib/components/index-b2745105.js +0 -7
  108. package/lib/components/isObjectLike-2f1983fe.js +0 -1
  109. package/lib/components/style-inject.es-c875d022.js +0 -1
  110. package/lib/components/transform-95ae0119.js +0 -1
  111. package/lib/utils/_commonjsHelpers-e2cda605.js +0 -1
  112. package/lib/utils/_rollupPluginBabelHelpers-928a52ce.js +0 -1
@@ -0,0 +1,247 @@
1
+ import { _ as _extends, a as _slicedToArray } from './_rollupPluginBabelHelpers-a52356f6.js';
2
+ import React__default, { useState } from 'react';
3
+ import PropTypes from 'prop-types';
4
+ import { List, ListItem, ListItemIcon, ListItemText, IconButton, Drawer as Drawer$1, Divider } from '@material-ui/core';
5
+ import { DehazeRounded, CloseRounded } from '@material-ui/icons';
6
+ import { S as Select } from './Select-979f7e73.js';
7
+ import { S as SegmentedControl } from './SegmentedControl-804da0a6.js';
8
+ import { useRouteMatch, NavLink } from 'react-router-dom';
9
+ import { getIntl } from './globalConfig';
10
+ import { s as styleInject } from './style-inject.es-1f59c1d0.js';
11
+
12
+ var defaultSupportLanguage = [
13
+ // { value: 'en', label: 'English' },
14
+ {
15
+ value: 'zh-tw',
16
+ label: '繁體中文'
17
+ }
18
+ // { value: 'zh-cn', label: '簡體中文' },
19
+ ];
20
+
21
+ /* [檢查-語系]本系統是否支援該語系 並回傳語系 */
22
+ var checkLanguageSupport = function checkLanguageSupport(_ref) {
23
+ var language = _ref.language,
24
+ supportLanguages = _ref.supportLanguages;
25
+ var isSupport = supportLanguages.some(function (_ref2) {
26
+ var value = _ref2.value;
27
+ return value === language;
28
+ });
29
+ return isSupport ? language : supportLanguages[0].value;
30
+ };
31
+
32
+ /* 抽屜內的主選單:與桌機頁首一致用真連結(可長按另開、讀屏唸「連結」)。
33
+ * 保留 MUI List/ListItem/ListItemText 結構:各站以主題或 app.scss 覆蓋了這些 class
34
+ * (ada 的 MuiList 深底白字、tahl 的 hover 色),換成自訂標記會讓那些樣式失效。
35
+ * - ListItem 以 NavLink 渲染成 <a href>;目前所在頁由 NavLink 自動加 aria-current="page",
36
+ * 並掛上 Mui-selected(沿用各站既有的選中底色)與 drawer__link--active(左側色條+粗體)
37
+ * - ButtonBase 對非 <button> 元件會補 role="button",須明確清掉,否則讀屏仍唸成按鈕 */
38
+ const DrawerList = _ref => {
39
+ let {
40
+ drawerList,
41
+ setOpen
42
+ } = _ref;
43
+ const {
44
+ url
45
+ } = useRouteMatch();
46
+ return /*#__PURE__*/React__default.createElement("nav", null, /*#__PURE__*/React__default.createElement(List, {
47
+ className: "drawer__list"
48
+ }, Array.isArray(drawerList) && drawerList.map((_ref2, index) => {
49
+ let {
50
+ name,
51
+ icon,
52
+ path = ''
53
+ } = _ref2;
54
+ const internalProps = {
55
+ component: NavLink,
56
+ to: `${url}${path}`,
57
+ /* 不沿用 Mui-selected:各站的選中底色是為其他清單調的,套到抽屜會與文字色衝突
58
+ (ocean 白字配淺藍底只有 1.78:1)。選中樣式一律由 drawer__link--active 決定 */
59
+ activeClassName: 'drawer__link--active'
60
+ };
61
+ /* 外部連結比照桌機頁首另開新視窗,並預先提示(WCAG 3.2.2) */
62
+ const externalProps = {
63
+ component: 'a',
64
+ href: path,
65
+ target: '_blank',
66
+ rel: 'noopener noreferrer',
67
+ 'aria-label': `${name}${getIntl().formatMessage({
68
+ id: 'aria.newWindow'
69
+ })}`
70
+ };
71
+ const linkProps = path.indexOf('http') > -1 ? externalProps : internalProps;
72
+ return /*#__PURE__*/React__default.createElement("li", {
73
+ key: index.toString()
74
+ }, /*#__PURE__*/React__default.createElement(ListItem, _extends({
75
+ button: true,
76
+ className: "drawer__link",
77
+ role: undefined,
78
+ onClick: () => setOpen(false)
79
+ }, linkProps), icon && /*#__PURE__*/React__default.createElement(ListItemIcon, {
80
+ style: {
81
+ marginRight: 24
82
+ }
83
+ }, icon), /*#__PURE__*/React__default.createElement(ListItemText, {
84
+ primary: name
85
+ })));
86
+ })));
87
+ };
88
+ DrawerList.defaultProps = {};
89
+ DrawerList.propTypes = {
90
+ drawerList: PropTypes.arrayOf(PropTypes.any).isRequired,
91
+ setOpen: PropTypes.func.isRequired
92
+ };
93
+
94
+ var css_248z = "@charset \"UTF-8\";\n/* 抽屜內容統一靠左對齊在同一條線上(選單文字、工具區標籤都從 1.5rem 起排) */\n.drawer {\n /* 兩層 class 提高權重,蓋過 MUI 主題注入的 .MuiIconButton-root */\n /* ListItem(渲染成 <a>)。hover/選中底色沿用 MUI 與各站主題的 MuiListItem、Mui-selected 設定 */\n /* 目前所在頁的淡底:取文字色加 8% 透明度疊在原本的底色上,\n 深淺底、各站自訂色都不會讓文字對比變差(不像各站的 Mui-selected 底色會衝突) */\n /* 目前所在頁:左側色條+粗體,不只靠底色(WCAG 1.4.1)。\n 色條畫在文字元素上取 currentColor:各站常以 !important 改抽屜文字色(ada 白字、tahl 藍綠),\n 色條才會與文字同色;ListItem 本身是 position:relative,色條貼齊整列左緣 */\n /* 語系超過 3 種時退回下拉:撐滿工具區寬度 */\n}\n.drawer__icon {\n display: none !important;\n}\n.drawer__paper {\n width: 20rem;\n max-width: 90vw;\n /* 開啟時 MUI 把焦點放在紙面本身(tabindex=-1 的容器,非操作元件),不畫焦點框;\n 須 !important 才蓋得過各站 a11y.scss 的全域 :focus-visible */\n}\n.drawer__paper:focus {\n outline: none !important;\n}\n.drawer__header {\n display: flex;\n align-items: center;\n justify-content: space-between;\n gap: 0.5rem;\n padding: 0.75rem 0.5rem 0.75rem 1.5rem;\n}\n.drawer__header-brand {\n display: flex;\n align-items: center;\n min-width: 0;\n}\n.drawer__header-title {\n font-size: 1.125rem;\n font-weight: bold;\n}\n.drawer__header .drawer__close {\n flex-shrink: 0;\n /* 觸控目標 48px(WCAG 2.5.5):共用主題把 IconButton padding 改成 8(只剩 40px),\n 部分子站手機版又把根字級縮到 70%,故用 px 保底 */\n min-width: 48px;\n min-height: 48px;\n margin-left: auto;\n /* 深色主題(palette.type=dark,如 ada、tahl)的 IconButton 預設白色,在淺色抽屜上看不見 → 沿用抽屜文字色 */\n color: inherit;\n}\n.drawer__header .drawer__close.Mui-focusVisible {\n outline: 2px solid currentColor;\n}\n.drawer__list > li {\n list-style: none;\n}\n.drawer__list .drawer__link {\n /* 觸控目標 48px(WCAG 2.5.5) */\n min-height: 3rem;\n /* 文字與工具區標籤對齊 1.5rem(蓋過 MuiListItem-gutters 的 16px) */\n padding-left: 1.5rem;\n padding-right: 1.5rem;\n color: inherit;\n text-decoration: none;\n /* 連結撐滿抽屜寬度,紙面又會捲動(overflow:auto),外凸的焦點框左右會被裁掉 → 內縮完整框。\n 各站 a11y.scss 的全域 :focus-visible 以 !important 設 outline-offset,這裡也須 !important 才蓋得過 */\n}\n.drawer__list .drawer__link:focus-visible {\n outline: 2px solid currentColor;\n outline-offset: -4px !important;\n}\n.drawer__link--active::before {\n content: \"\";\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n background: currentColor;\n opacity: 0.08;\n pointer-events: none;\n}\n.drawer__link--active .MuiTypography-root {\n font-weight: 700;\n}\n.drawer__link--active .MuiTypography-root::before {\n content: \"\";\n position: absolute;\n top: 0;\n bottom: 0;\n left: 0;\n width: 0.25rem;\n background: currentColor;\n}\n.drawer__tools {\n display: flex;\n flex-direction: column;\n gap: 1.25rem;\n padding: 1.25rem 1.5rem;\n}\n.drawer__lang.select {\n width: 100%;\n}\n\n@media screen and (max-width: 768px) {\n .drawer {\n display: flex;\n justify-content: flex-end;\n }\n .drawer__icon {\n display: flex !important;\n }\n}";
95
+ styleInject(css_248z);
96
+
97
+ /* 語系不多時並排成分段按鈕(點一下即切換),太多才退回下拉 */
98
+ var MAX_SEGMENTED_LANGUAGES = 3;
99
+ var Drawer = function Drawer(_ref) {
100
+ var title = _ref.title,
101
+ logo = _ref.logo,
102
+ locale = _ref.locale,
103
+ supportLanguages = _ref.supportLanguages,
104
+ drawerList = _ref.drawerList,
105
+ onLanguageChange = _ref.onLanguageChange,
106
+ languageSelectLabel = _ref.languageSelectLabel,
107
+ extraTools = _ref.extraTools;
108
+ var _useState = useState(false),
109
+ _useState2 = _slicedToArray(_useState, 2),
110
+ open = _useState2[0],
111
+ setOpen = _useState2[1];
112
+ var languages = Array.isArray(supportLanguages) ? supportLanguages : [];
113
+ var currentLanguage = languages.length > 0 ? checkLanguageSupport({
114
+ language: locale,
115
+ supportLanguages: languages
116
+ }) : undefined;
117
+ /* extraTools 可傳函式,依擺放位置(header/drawer)給不同版面 */
118
+ var tools = typeof extraTools === 'function' ? extraTools({
119
+ placement: 'drawer'
120
+ }) : extraTools;
121
+ return /*#__PURE__*/React__default.createElement("div", {
122
+ className: "drawer"
123
+ }, /*#__PURE__*/React__default.createElement(IconButton, {
124
+ className: "drawer__icon",
125
+ "aria-label": getIntl().formatMessage({
126
+ id: 'aria.header.menuOpen'
127
+ }),
128
+ "aria-haspopup": "dialog",
129
+ "aria-expanded": open,
130
+ onClick: function onClick() {
131
+ return setOpen(true);
132
+ }
133
+ }, /*#__PURE__*/React__default.createElement(DehazeRounded, {
134
+ fontSize: "large",
135
+ "aria-hidden": "true"
136
+ })), /*#__PURE__*/React__default.createElement(Drawer$1, {
137
+ anchor: "right",
138
+ open: open,
139
+ onClose: function onClose() {
140
+ return setOpen(false);
141
+ },
142
+ onKeyDown: function onKeyDown(event) {
143
+ if (event.key === 'Escape') setOpen(false);
144
+ }
145
+ /* 抽屜是強制回應的浮層(背景不可操作),以 dialog 語意讓讀屏在開啟時唸出名稱(WCAG 4.1.2) */,
146
+ PaperProps: {
147
+ className: 'drawer__paper',
148
+ role: 'dialog',
149
+ 'aria-modal': true,
150
+ 'aria-label': getIntl().formatMessage({
151
+ id: 'aria.header.navigation'
152
+ })
153
+ }
154
+ }, /*#__PURE__*/React__default.createElement("div", {
155
+ className: "drawer__header"
156
+ }, (logo || title) && /*#__PURE__*/React__default.createElement("div", {
157
+ className: "drawer__header-brand"
158
+ }, logo && /*#__PURE__*/React__default.createElement("div", {
159
+ className: "drawer__header-logo"
160
+ }, logo), title && /*#__PURE__*/React__default.createElement("div", {
161
+ className: "drawer__header-title"
162
+ }, title)), /*#__PURE__*/React__default.createElement(IconButton, {
163
+ className: "drawer__close",
164
+ "aria-label": getIntl().formatMessage({
165
+ id: 'aria.header.menuClose'
166
+ }),
167
+ onClick: function onClick() {
168
+ return setOpen(false);
169
+ }
170
+ }, /*#__PURE__*/React__default.createElement(CloseRounded, {
171
+ "aria-hidden": "true"
172
+ }))), /*#__PURE__*/React__default.createElement(Divider, null), /*#__PURE__*/React__default.createElement(DrawerList, {
173
+ drawerList: (Array.isArray(drawerList) ? drawerList : []).filter(function (_ref2) {
174
+ var showInHeader = _ref2.showInHeader;
175
+ return showInHeader;
176
+ }),
177
+ setOpen: setOpen
178
+ }), (languages.length > 0 || tools) && /*#__PURE__*/React__default.createElement(React__default.Fragment, null, /*#__PURE__*/React__default.createElement(Divider, null), /*#__PURE__*/React__default.createElement("div", {
179
+ className: "drawer__tools"
180
+ }, languages.length > 0 && languages.length <= MAX_SEGMENTED_LANGUAGES && /*#__PURE__*/React__default.createElement(SegmentedControl, {
181
+ className: "drawer__lang",
182
+ label: getIntl().formatMessage({
183
+ id: 'header.language'
184
+ }),
185
+ options: languages.map(function (_ref3) {
186
+ var value = _ref3.value,
187
+ label = _ref3.label,
188
+ lang = _ref3.lang;
189
+ return {
190
+ value: value,
191
+ label: label,
192
+ lang: lang
193
+ };
194
+ }),
195
+ value: currentLanguage,
196
+ onChange: function onChange(value) {
197
+ return onLanguageChange(value);
198
+ }
199
+ }), languages.length > MAX_SEGMENTED_LANGUAGES && /*#__PURE__*/React__default.createElement(Select, {
200
+ className: "drawer__lang",
201
+ ariaLabel: languageSelectLabel || getIntl().formatMessage({
202
+ id: 'aria.header.languageSelect'
203
+ }),
204
+ defaultValue: currentLanguage,
205
+ onChange: function onChange(value) {
206
+ return onLanguageChange(value);
207
+ },
208
+ options: languages
209
+ }), tools && /*#__PURE__*/React__default.createElement("div", {
210
+ className: "drawer__extraTools"
211
+ }, tools)))));
212
+ };
213
+ Drawer.defaultProps = {
214
+ title: undefined,
215
+ logo: undefined,
216
+ locale: undefined,
217
+ supportLanguages: [
218
+ // { value: 'en', label: 'English' },
219
+ {
220
+ value: 'zh-tw',
221
+ label: '繁體中文'
222
+ }
223
+ // { value: 'zh-cn', label: '簡體中文' },
224
+ ],
225
+
226
+ drawerList: undefined,
227
+ onLanguageChange: function onLanguageChange() {},
228
+ languageSelectLabel: undefined,
229
+ extraTools: undefined
230
+ };
231
+ Drawer.propTypes = {
232
+ title: PropTypes.string,
233
+ logo: PropTypes.node,
234
+ /** 目前語系(決定語言切換鈕的選中狀態) */
235
+ locale: PropTypes.string,
236
+ /** 支援的語系;3 種以內並排成分段按鈕,超過改用下拉 */
237
+ supportLanguages: PropTypes.arrayOf(PropTypes.any),
238
+ drawerList: PropTypes.arrayOf(PropTypes.any),
239
+ onLanguageChange: PropTypes.func,
240
+ /** 語言下拉的無障礙名稱(WCAG 3.3.2);未提供時使用套件內 aria.header.languageSelect */
241
+ languageSelectLabel: PropTypes.string,
242
+ /** 呼叫端自訂的工具區(如字級縮放);由 Header 一併傳入,窄畫面時顯示於抽屜內。
243
+ 傳函式時以 ({ placement: 'drawer' }) 呼叫,可給抽屜專用的版面 */
244
+ extraTools: PropTypes.oneOfType([PropTypes.node, PropTypes.func])
245
+ };
246
+
247
+ export { Drawer as D, checkLanguageSupport as c, defaultSupportLanguage as d };
@@ -1 +1,18 @@
1
- import{a as e}from"./_rollupPluginBabelHelpers-ec4e2a53.js";import r,{useState as a}from"react";import n from"prop-types";import{List as t,ListItem as o,ListItemIcon as i,ListItemText as l,IconButton as s,Drawer as p,Divider as d}from"@material-ui/core";import{DehazeRounded as u}from"@material-ui/icons";import c from"./Select.js";import{useHistory as m,useRouteMatch as g}from"react-router-dom";import{s as f}from"./style-inject.es-1f59c1d0.js";import"./index-b2745105.js";import"./Empty.js";var w=function(e){var r=e.language,a=e.supportLanguages;return a.some((function(e){return e.value===r}))?r:a[0].value};const _=e=>{let{drawerList:a,setOpen:n}=e;const s=m(),{url:p}=g();return r.createElement(t,{className:"drawer__list"},Array.isArray(a)&&a.map(((e,a)=>{let{name:t,icon:d,path:u}=e;return r.createElement(o,{button:!0,key:a.toString(),onClick:()=>{u.indexOf("http")>-1?window.location=u:s.push({pathname:`${p}${u}`}),n(!1)}},d&&r.createElement(i,{style:{marginRight:24}},d),r.createElement(l,{primary:t}))})))};_.defaultProps={},_.propTypes={drawerList:n.arrayOf(n.any).isRequired,setOpen:n.func.isRequired};f(".drawer__icon {\n display: none !important; }\n\n.drawer__header {\n display: flex;\n align-items: center;\n padding: 20px; }\n .drawer__header-title {\n font-size: 18px;\n font-weight: bold; }\n\n.drawer__list {\n padding: 10px !important; }\n .drawer__list .MuiSvgIcon-root {\n margin-left: 8px; }\n\n.drawer__lang {\n margin: 24px 36px !important; }\n\n@media screen and (max-width: 768px) {\n .drawer {\n display: flex;\n justify-content: flex-end; }\n .drawer__icon {\n display: flex !important; } }\n");var y=function(n){var t=n.title,o=n.logo,i=n.locale,l=n.supportLanguages,m=n.drawerList,g=n.onLanguageChange,f=a(!1),y=e(f,2),h=y[0],v=y[1];return r.createElement("div",{className:"drawer"},r.createElement(s,{className:"drawer__icon",onClick:function(){return v(!0)}},r.createElement(u,{fontSize:"large"})),r.createElement(p,{anchor:"right",open:h,onClose:function(){return v(!1)},onKeyDown:function(){return v(!1)}},(o||t)&&r.createElement("div",{className:"drawer__header"},r.createElement("div",{className:"drawer__header-logo"},o),r.createElement("div",{className:"drawer__header-title"},t)),r.createElement(d,null),r.createElement(_,{drawerList:(Array.isArray(m)?m:[]).filter((function(e){return e.showInHeader})),setOpen:v}),r.createElement(d,null),Array.isArray(l)&&l.length>0&&r.createElement(c,{className:"drawer__lang",defaultValue:w({language:i,supportLanguages:l}),onChange:function(e){return g(e)},options:l})))};y.defaultProps={title:void 0,logo:void 0,locale:void 0,supportLanguages:[{value:"en",label:"English"},{value:"zh-tw",label:"繁體中文"},{value:"zh-cn",label:"簡體中文"}],drawerList:void 0,onLanguageChange:function(){}},y.propTypes={title:n.string,logo:n.node,locale:n.string,supportLanguages:n.arrayOf(n.any),drawerList:n.arrayOf(n.any),onLanguageChange:n.func};export{y as default};
1
+ export { D as default } from './Drawer-b770014f.js';
2
+ import './_rollupPluginBabelHelpers-a52356f6.js';
3
+ import 'react';
4
+ import 'prop-types';
5
+ import '@material-ui/core';
6
+ import '@material-ui/icons';
7
+ import './Select-979f7e73.js';
8
+ import './index-c33afcb5.js';
9
+ import './defaultTheme-c5dd0f64.js';
10
+ import 'react-is';
11
+ import '@material-ui/styles';
12
+ import './useTheme-98b6cf17.js';
13
+ import './withTheme-3486f38b.js';
14
+ import './Empty-48685dd0.js';
15
+ import './style-inject.es-1f59c1d0.js';
16
+ import './globalConfig';
17
+ import './SegmentedControl-804da0a6.js';
18
+ import 'react-router-dom';
@@ -1 +1,134 @@
1
- import{a as e}from"./_rollupPluginBabelHelpers-ec4e2a53.js";import n,{useRef as o,useState as t}from"react";import{c as r}from"./index-b2745105.js";import i from"prop-types";import{Button as a,Menu as l,Divider as c,MenuItem as s,ListItemIcon as p,ListItemText as d}from"@material-ui/core";import{makeStyles as u}from"@material-ui/styles";import{s as m}from"./style-inject.es-1f59c1d0.js";m("");var f={default:"outlined",primary:"contained",link:"text"},b=function(i){var m=i.className,b=i.type,v=i.disabled,y=i.children,C=i.icon,E=i.options,g=i.onOpen,h=i.onClose,k=i.getPopupContainer,O=o(null),P=t(!1),j=e(P,2),x=j[0],A=j[1],N=u((function(){return{root:{opacity:.6,pointerEvents:"none",cursor:"pointer"},disabled:!0}}));return n.createElement("div",{className:r("dropdown",m)},n.createElement(a,{id:"basic-button",ref:O,"aria-controls":"basic-menu","aria-haspopup":"true","aria-expanded":x?"true":void 0,onClick:function(){E&&Array.isArray(E)&&E.length>0&&(A(!0),g&&g())},variant:f[b]||"text",startIcon:C||null,disabled:v||!1},y||null),n.createElement(l,{id:"basic-menu",getContentAnchorEl:null,container:k||O.current,anchorOrigin:{vertical:"bottom",horizontal:"center"},transformOrigin:{vertical:"top",horizontal:"center"},anchorEl:O.current,open:x,onClose:function(){A(!1),h&&h()},MenuListProps:{"aria-labelledby":"basic-button"}},E&&Array.isArray(E)&&E.map((function(e,o){return n.createElement("div",{key:o.toString()},e.divider&&n.createElement(c,null),n.createElement(s,{className:e.disabled?N().root:"",onClick:function(){A(!1),h&&h(),e.onClick&&e.onClick({label:e.label,value:e.value})}},e.icon&&n.createElement(p,null,e.icon),e.label&&n.createElement(d,null,e.label)))}))))};b.defaultProps={className:void 0,children:void 0,icon:void 0,type:"link",disabled:void 0,options:void 0,getPopupContainer:void 0,onOpen:void 0,onClose:void 0},b.propTypes={className:i.string,children:i.node,icon:i.node,type:i.oneOf(Object.keys(f)),disabled:i.bool,options:i.arrayOf(i.any),getPopupContainer:i.func,onOpen:i.func,onClose:i.func};export{b as default};
1
+ import { a as _slicedToArray } from './_rollupPluginBabelHelpers-a52356f6.js';
2
+ import React__default, { useRef, useState } from 'react';
3
+ import { c as classNames } from './index-c33afcb5.js';
4
+ import PropTypes from 'prop-types';
5
+ import { Button, Menu, Divider, MenuItem, ListItemIcon, ListItemText } from '@material-ui/core';
6
+ import { makeStyles } from '@material-ui/styles';
7
+ import { s as styleInject } from './style-inject.es-1f59c1d0.js';
8
+
9
+ var css_248z = "";
10
+ styleInject(css_248z);
11
+
12
+ var buttonType = {
13
+ default: 'outlined',
14
+ primary: 'contained',
15
+ link: 'text'
16
+ };
17
+ var Dropdown = function Dropdown(props) {
18
+ var className = props.className,
19
+ type = props.type,
20
+ disabled = props.disabled; // Attributes
21
+
22
+ var children = props.children,
23
+ icon = props.icon; // Node/Elements
24
+
25
+ var options = props.options; // Data List
26
+
27
+ var onOpen = props.onOpen,
28
+ _onClose = props.onClose,
29
+ getPopupContainer = props.getPopupContainer; // Callback List
30
+
31
+ var buttonRef = useRef(null);
32
+ var _useState = useState(false),
33
+ _useState2 = _slicedToArray(_useState, 2),
34
+ open = _useState2[0],
35
+ setOpen = _useState2[1];
36
+ var useStyles = makeStyles(function () {
37
+ return {
38
+ root: {
39
+ opacity: 0.6,
40
+ pointerEvents: 'none',
41
+ cursor: 'pointer'
42
+ },
43
+ disabled: true
44
+ };
45
+ });
46
+ return /*#__PURE__*/React__default.createElement("div", {
47
+ className: classNames('dropdown', className)
48
+ }, /*#__PURE__*/React__default.createElement(Button, {
49
+ id: "basic-button",
50
+ ref: buttonRef,
51
+ "aria-controls": "basic-menu",
52
+ "aria-haspopup": "true",
53
+ "aria-expanded": open ? 'true' : undefined,
54
+ onClick: function onClick() {
55
+ if (options && Array.isArray(options) && options.length > 0) {
56
+ setOpen(true);
57
+ if (onOpen) onOpen();
58
+ }
59
+ },
60
+ variant: buttonType[type] || 'text',
61
+ startIcon: icon || null,
62
+ disabled: disabled || false
63
+ }, children || null), /*#__PURE__*/React__default.createElement(Menu, {
64
+ id: "basic-menu",
65
+ getContentAnchorEl: null,
66
+ container: getPopupContainer || buttonRef.current,
67
+ anchorOrigin: {
68
+ vertical: 'bottom',
69
+ horizontal: 'center'
70
+ },
71
+ transformOrigin: {
72
+ vertical: 'top',
73
+ horizontal: 'center'
74
+ },
75
+ anchorEl: buttonRef.current,
76
+ open: open,
77
+ onClose: function onClose() {
78
+ setOpen(false);
79
+ if (_onClose) _onClose();
80
+ },
81
+ MenuListProps: {
82
+ 'aria-labelledby': 'basic-button'
83
+ }
84
+ }, options && Array.isArray(options) && options.map(function (item, index) {
85
+ return /*#__PURE__*/React__default.createElement("div", {
86
+ key: index.toString()
87
+ }, item.divider && /*#__PURE__*/React__default.createElement(Divider, null), /*#__PURE__*/React__default.createElement(MenuItem, {
88
+ className: item.disabled ? useStyles().root : '',
89
+ onClick: function onClick() {
90
+ setOpen(false);
91
+ if (_onClose) _onClose();
92
+ if (item.onClick) item.onClick({
93
+ label: item.label,
94
+ value: item.value
95
+ });
96
+ }
97
+ }, item.icon && /*#__PURE__*/React__default.createElement(ListItemIcon, null, item.icon), item.label && /*#__PURE__*/React__default.createElement(ListItemText, null, item.label)));
98
+ })));
99
+ };
100
+ Dropdown.defaultProps = {
101
+ className: undefined,
102
+ children: undefined,
103
+ icon: undefined,
104
+ type: 'link',
105
+ disabled: undefined,
106
+ options: undefined,
107
+ getPopupContainer: undefined,
108
+ onOpen: undefined,
109
+ onClose: undefined
110
+ };
111
+
112
+ /* Write props detail information and 'npm run updateStory' will help you generate stories's argTypes */
113
+ Dropdown.propTypes = {
114
+ /** Css Name */
115
+ className: PropTypes.string,
116
+ /** 按鈕內容 */
117
+ children: PropTypes.node,
118
+ /** 按鈕左側Icon */
119
+ icon: PropTypes.node,
120
+ /** 按鈕類型 */
121
+ type: PropTypes.oneOf(Object.keys(buttonType)),
122
+ /** Menu按鈕是否禁用 */
123
+ disabled: PropTypes.bool,
124
+ /** Menu Data list */
125
+ options: PropTypes.arrayOf(PropTypes.any),
126
+ /** Menu content render by node */
127
+ getPopupContainer: PropTypes.func,
128
+ /** Menu 開啟 Callback */
129
+ onOpen: PropTypes.func,
130
+ /** Menu 關閉 Callback */
131
+ onClose: PropTypes.func
132
+ };
133
+
134
+ export { Dropdown as default };
@@ -0,0 +1,46 @@
1
+ import React__default from 'react';
2
+ import PropTypes from 'prop-types';
3
+ import { c as classNames } from './index-c33afcb5.js';
4
+ import { s as styleInject } from './style-inject.es-1f59c1d0.js';
5
+
6
+ var img = "data:image/svg+xml,%3csvg class='ant-empty-img-default' width='184' height='152' viewBox='0 0 184 152' xmlns='http://www.w3.org/2000/svg'%3e %3cg fill='none' fill-rule='evenodd'%3e %3cg transform='translate(24 31.67)'%3e %3cellipse fill='%23f5f5f5' fill-opacity='0.8' cx='67.797' cy='106.89' rx='67.797' ry='12.668'%3e%3c/ellipse%3e %3cpath fill='%23aeb8c2' d='M122.034 69.674L98.109 40.229c-1.148-1.386-2.826-2.225-4.593-2.225h-51.44c-1.766 0-3.444.839-4.592 2.225L13.56 69.674v15.383h108.475V69.674z'%3e%3c/path%3e %3cpath fill='url(%23linearGradient-1)' d='M101.537 86.214L80.63 61.102c-1.001-1.207-2.507-1.867-4.048-1.867H31.724c-1.54 0-3.047.66-4.048 1.867L6.769 86.214v13.792h94.768V86.214z' transform='translate(13.56)'%3e%3c/path%3e %3cpath fill='%23f5f5f7' d='M33.83 0h67.933a4 4 0 0 1 4 4v93.344a4 4 0 0 1-4 4H33.83a4 4 0 0 1-4-4V4a4 4 0 0 1 4-4z'%3e%3c/path%3e %3cpath fill='%23dce0e6' d='M42.678 9.953h50.237a2 2 0 0 1 2 2V36.91a2 2 0 0 1-2 2H42.678a2 2 0 0 1-2-2V11.953a2 2 0 0 1 2-2zM42.94 49.767h49.713a2.262 2.262 0 1 1 0 4.524H42.94a2.262 2.262 0 0 1 0-4.524zM42.94 61.53h49.713a2.262 2.262 0 1 1 0 4.525H42.94a2.262 2.262 0 0 1 0-4.525zM121.813 105.032c-.775 3.071-3.497 5.36-6.735 5.36H20.515c-3.238 0-5.96-2.29-6.734-5.36a7.309 7.309 0 0 1-.222-1.79V69.675h26.318c2.907 0 5.25 2.448 5.25 5.42v.04c0 2.971 2.37 5.37 5.277 5.37h34.785c2.907 0 5.277-2.421 5.277-5.393V75.1c0-2.972 2.343-5.426 5.25-5.426h26.318v33.569c0 .617-.077 1.216-.221 1.789z'%3e%3c/path%3e %3c/g%3e %3cpath fill='%23dce0e6' d='M149.121 33.292l-6.83 2.65a1 1 0 0 1-1.317-1.23l1.937-6.207c-2.589-2.944-4.109-6.534-4.109-10.408C138.802 8.102 148.92 0 161.402 0 173.881 0 184 8.102 184 18.097c0 9.995-10.118 18.097-22.599 18.097-4.528 0-8.744-1.066-12.28-2.902z'%3e%3c/path%3e %3cg fill='white' transform='translate(149.65 15.383)'%3e %3cellipse cx='20.654' cy='3.167' rx='2.849' ry='2.815'%3e%3c/ellipse%3e %3cpath d='M5.698 5.63H0L2.898.704zM9.259.704h4.985V5.63H9.259z'%3e%3c/path%3e %3c/g%3e %3c/g%3e%3c/svg%3e";
7
+
8
+ var css_248z = ".antd-empty {\n width: 100%;\n font-size: 1rem;\n line-height: 1.5715;\n text-align: center;\n overflow: hidden;\n height: 100%;\n}\n.antd-empty .ant-empty-image {\n height: 100px;\n margin-bottom: 8px;\n}\n.antd-empty .ant-empty-image img {\n height: calc(100% - 22px);\n margin: auto;\n}\n.antd-empty .antd-empty-description {\n color: rgba(0, 0, 0, 0.85);\n}";
9
+ styleInject(css_248z);
10
+
11
+ var Empty = function Empty(_ref) {
12
+ var className = _ref.className,
13
+ description = _ref.description,
14
+ emptySrc = _ref.emptySrc,
15
+ imageStyle = _ref.imageStyle;
16
+ return /*#__PURE__*/React__default.createElement("div", {
17
+ className: classNames('antd-empty', className)
18
+ }, /*#__PURE__*/React__default.createElement("div", {
19
+ className: "ant-empty-image"
20
+ }, /*#__PURE__*/React__default.createElement("img", {
21
+ src: emptySrc || img,
22
+ alt: "",
23
+ "aria-hidden": "true",
24
+ style: imageStyle
25
+ }), description && /*#__PURE__*/React__default.createElement("div", {
26
+ className: "ant-empty-description"
27
+ }, description)));
28
+ };
29
+ Empty.defaultProps = {
30
+ className: undefined,
31
+ emptySrc: undefined,
32
+ description: 'No Data',
33
+ imageStyle: {}
34
+ };
35
+ Empty.propTypes = {
36
+ /** Css名稱 */
37
+ className: PropTypes.string,
38
+ /** 空白時圖案的Src */
39
+ emptySrc: PropTypes.string,
40
+ /** 描述 */
41
+ description: PropTypes.node,
42
+ /** 圖案的style */
43
+ imageStyle: PropTypes.objectOf(PropTypes.any)
44
+ };
45
+
46
+ export { Empty as E };
@@ -1 +1,5 @@
1
- import e from"react";import t from"prop-types";import{c as a}from"./index-b2745105.js";import{s as c}from"./style-inject.es-1f59c1d0.js";c(".antd-empty {\n width: 100%;\n font-size: 1rem;\n line-height: 1.5715;\n text-align: center;\n overflow: hidden;\n height: 100%; }\n .antd-empty .ant-empty-image {\n height: 100px;\n margin-bottom: 8px; }\n .antd-empty .ant-empty-image img {\n height: calc(100% - 22px);\n margin: auto; }\n .antd-empty .antd-empty-description {\n color: rgba(0, 0, 0, 0.85); }\n");var i=function(t){var c=t.className,i=t.description,l=t.emptySrc,n=t.imageStyle;return e.createElement("div",{className:a("antd-empty",c)},e.createElement("div",{className:"ant-empty-image"},e.createElement("img",{src:l||"data:image/svg+xml,%3csvg class='ant-empty-img-default' width='184' height='152' viewBox='0 0 184 152' xmlns='http://www.w3.org/2000/svg'%3e %3cg fill='none' fill-rule='evenodd'%3e %3cg transform='translate(24 31.67)'%3e %3cellipse fill='%23f5f5f5' fill-opacity='0.8' cx='67.797' cy='106.89' rx='67.797' ry='12.668'%3e%3c/ellipse%3e %3cpath fill='%23aeb8c2' d='M122.034 69.674L98.109 40.229c-1.148-1.386-2.826-2.225-4.593-2.225h-51.44c-1.766 0-3.444.839-4.592 2.225L13.56 69.674v15.383h108.475V69.674z'%3e%3c/path%3e %3cpath fill='url(%23linearGradient-1)' d='M101.537 86.214L80.63 61.102c-1.001-1.207-2.507-1.867-4.048-1.867H31.724c-1.54 0-3.047.66-4.048 1.867L6.769 86.214v13.792h94.768V86.214z' transform='translate(13.56)'%3e%3c/path%3e %3cpath fill='%23f5f5f7' d='M33.83 0h67.933a4 4 0 0 1 4 4v93.344a4 4 0 0 1-4 4H33.83a4 4 0 0 1-4-4V4a4 4 0 0 1 4-4z'%3e%3c/path%3e %3cpath fill='%23dce0e6' d='M42.678 9.953h50.237a2 2 0 0 1 2 2V36.91a2 2 0 0 1-2 2H42.678a2 2 0 0 1-2-2V11.953a2 2 0 0 1 2-2zM42.94 49.767h49.713a2.262 2.262 0 1 1 0 4.524H42.94a2.262 2.262 0 0 1 0-4.524zM42.94 61.53h49.713a2.262 2.262 0 1 1 0 4.525H42.94a2.262 2.262 0 0 1 0-4.525zM121.813 105.032c-.775 3.071-3.497 5.36-6.735 5.36H20.515c-3.238 0-5.96-2.29-6.734-5.36a7.309 7.309 0 0 1-.222-1.79V69.675h26.318c2.907 0 5.25 2.448 5.25 5.42v.04c0 2.971 2.37 5.37 5.277 5.37h34.785c2.907 0 5.277-2.421 5.277-5.393V75.1c0-2.972 2.343-5.426 5.25-5.426h26.318v33.569c0 .617-.077 1.216-.221 1.789z'%3e%3c/path%3e %3c/g%3e %3cpath fill='%23dce0e6' d='M149.121 33.292l-6.83 2.65a1 1 0 0 1-1.317-1.23l1.937-6.207c-2.589-2.944-4.109-6.534-4.109-10.408C138.802 8.102 148.92 0 161.402 0 173.881 0 184 8.102 184 18.097c0 9.995-10.118 18.097-22.599 18.097-4.528 0-8.744-1.066-12.28-2.902z'%3e%3c/path%3e %3cg fill='white' transform='translate(149.65 15.383)'%3e %3cellipse cx='20.654' cy='3.167' rx='2.849' ry='2.815'%3e%3c/ellipse%3e %3cpath d='M5.698 5.63H0L2.898.704zM9.259.704h4.985V5.63H9.259z'%3e%3c/path%3e %3c/g%3e %3c/g%3e%3c/svg%3e",alt:i,style:n}),i&&e.createElement("div",{className:"ant-empty-description"},i)))};i.defaultProps={className:void 0,emptySrc:void 0,description:"No Data",imageStyle:{}},i.propTypes={className:t.string,emptySrc:t.string,description:t.node,imageStyle:t.objectOf(t.any)};export{i as default};
1
+ export { E as default } from './Empty-48685dd0.js';
2
+ import 'react';
3
+ import 'prop-types';
4
+ import './index-c33afcb5.js';
5
+ import './style-inject.es-1f59c1d0.js';
@@ -1 +1,128 @@
1
- import{a as t}from"./_rollupPluginBabelHelpers-ec4e2a53.js";import e,{useState as o}from"react";import r from"prop-types";import{c as n}from"./index-b2745105.js";import{ExitToApp as a}from"@material-ui/icons";import{Dialog as i,DialogContent as c,DialogContentText as l,DialogActions as s,Button as p}from"@material-ui/core";import{f as u,j as f,a as x}from"./dataExport-9fccd4f0.js";import{s as m}from"./style-inject.es-1f59c1d0.js";m(".exportButton {\n display: flex;\n align-items: center;\n font-size: 1.5rem;\n transition: color 0.3s ease-in-out;\n -webkit-user-select: none;\n user-select: none; }\n .exportButton--right {\n justify-content: flex-end; }\n .exportButton__text {\n display: flex;\n align-items: center;\n text-decoration: underline;\n cursor: pointer; }\n .exportButton__text__icon {\n font-size: 2rem;\n margin-right: 4px; }\n .exportButton__text:hover {\n font-weight: bold; }\n");var d=function(r){var m=r.className,d=r.color,y=r.right,g=r.forceTxt,T=r.exportText,_=r.exportTypeText,E=r.data,b=o(!1),v=t(b,2),B=v[0],k=v[1],h=[{type:"CSV",click:function(){return u("\ufeff".concat(x(E)),"output.csv")}},{type:"EXCEL",click:function(){return u("\ufeff".concat(x(E)),"output.xls")}},{type:"TXT",click:function(){return u("\ufeff".concat(f(E)),"output.txt")}}];return e.createElement("div",{style:{color:d},className:n("exportButton",{"exportButton--right":y},m)},e.createElement("div",{className:"exportButton__text",onClick:function(){return g?u("\ufeff".concat(f(E)),"output.txt"):k(!0)}},e.createElement(a,{className:"exportButton__text__icon"}),T),e.createElement(i,{open:B,keepMounted:!0,onClose:function(){return k(!1)},"aria-labelledby":"alert-dialog-slide-title","aria-describedby":"alert-dialog-slide-description"},e.createElement(c,null,e.createElement(l,null,_)),e.createElement(s,null,h.map((function(t){var o=t.type,r=t.click;return e.createElement(p,{key:o,variant:"text",onClick:function(){r(),k(!1)}},o)})))))};d.defaultProps={className:void 0,color:"#4e3a16",right:void 0,forceTxt:!0,exportText:"Export",exportTypeText:"Export Type",data:void 0},d.propTypes={className:r.string,color:r.string,right:r.bool,forceTxt:r.bool,exportText:r.string,exportTypeText:r.string,data:r.oneOfType([r.objectOf(r.any),r.arrayOf(r.any)])};export{d as default};
1
+ import { a as _slicedToArray } from './_rollupPluginBabelHelpers-a52356f6.js';
2
+ import React__default, { useState } from 'react';
3
+ import PropTypes from 'prop-types';
4
+ import { c as classNames } from './index-c33afcb5.js';
5
+ import { ExitToApp } from '@material-ui/icons';
6
+ import { Dialog, DialogContent, DialogContentText, DialogActions, Button } from '@material-ui/core';
7
+ import { f as fileDownload, j as jsonTxt, a as jsonExcel } from './dataExport-a9e3fae1.js';
8
+ import { getIntl } from './globalConfig';
9
+ import { s as styleInject } from './style-inject.es-1f59c1d0.js';
10
+
11
+ var css_248z = ".exportButton {\n display: flex;\n align-items: center;\n font-size: 1.5rem;\n transition: color 0.3s ease-in-out;\n -webkit-user-select: none;\n user-select: none;\n}\n.exportButton--right {\n justify-content: flex-end;\n}\n.exportButton__text {\n display: flex;\n align-items: center;\n text-decoration: underline;\n cursor: pointer;\n}\n.exportButton__text__icon {\n font-size: 2rem;\n margin-right: 4px;\n}\n.exportButton__text:hover {\n font-weight: bold;\n}";
12
+ styleInject(css_248z);
13
+
14
+ var ExportButton = function ExportButton(_ref) {
15
+ var className = _ref.className,
16
+ color = _ref.color,
17
+ right = _ref.right,
18
+ forceTxt = _ref.forceTxt,
19
+ exportText = _ref.exportText,
20
+ exportTypeText = _ref.exportTypeText,
21
+ data = _ref.data;
22
+ var _getIntl = getIntl(),
23
+ formatMessage = _getIntl.formatMessage;
24
+ var _useState = useState(false),
25
+ _useState2 = _slicedToArray(_useState, 2),
26
+ open = _useState2[0],
27
+ setOpen = _useState2[1];
28
+ var buttons = [{
29
+ type: 'CSV',
30
+ click: function click() {
31
+ return fileDownload("\uFEFF".concat(jsonExcel(data)), 'output.csv');
32
+ }
33
+ }, {
34
+ type: 'EXCEL',
35
+ click: function click() {
36
+ return fileDownload("\uFEFF".concat(jsonExcel(data)), 'output.xls');
37
+ }
38
+ }, {
39
+ type: 'TXT',
40
+ click: function click() {
41
+ return fileDownload("\uFEFF".concat(jsonTxt(data)), 'output.txt');
42
+ }
43
+ }];
44
+ var handleExport = function handleExport() {
45
+ return forceTxt ? fileDownload("\uFEFF".concat(jsonTxt(data)), 'output.txt') : setOpen(true);
46
+ };
47
+ return /*#__PURE__*/React__default.createElement("div", {
48
+ style: {
49
+ color: color
50
+ },
51
+ className: classNames('exportButton', {
52
+ 'exportButton--right': right
53
+ }, className)
54
+ }, /*#__PURE__*/React__default.createElement("div", {
55
+ className: "exportButton__text",
56
+ role: "button",
57
+ tabIndex: 0,
58
+ "aria-haspopup": forceTxt ? undefined : 'dialog',
59
+ "aria-label": "".concat(exportText || formatMessage({
60
+ id: 'common.export'
61
+ })).concat(formatMessage({
62
+ id: forceTxt ? 'aria.export.download' : 'aria.opensDialog'
63
+ })),
64
+ onClick: handleExport,
65
+ onKeyDown: function onKeyDown(event) {
66
+ if (event.key === 'Enter' || event.key === ' ') {
67
+ event.preventDefault();
68
+ handleExport();
69
+ }
70
+ }
71
+ }, /*#__PURE__*/React__default.createElement(ExitToApp, {
72
+ className: "exportButton__text__icon",
73
+ "aria-hidden": "true"
74
+ }), exportText || formatMessage({
75
+ id: 'common.export'
76
+ })), /*#__PURE__*/React__default.createElement(Dialog, {
77
+ open: open,
78
+ keepMounted: true,
79
+ onClose: function onClose() {
80
+ return setOpen(false);
81
+ },
82
+ "aria-labelledby": "alert-dialog-slide-title",
83
+ "aria-describedby": "alert-dialog-slide-description"
84
+ }, /*#__PURE__*/React__default.createElement(DialogContent, null, /*#__PURE__*/React__default.createElement(DialogContentText, null, exportTypeText || formatMessage({
85
+ id: 'common.export.type'
86
+ }))), /*#__PURE__*/React__default.createElement(DialogActions, null, buttons.map(function (_ref2) {
87
+ var type = _ref2.type,
88
+ click = _ref2.click;
89
+ return /*#__PURE__*/React__default.createElement(Button, {
90
+ key: type,
91
+ variant: "text",
92
+ onClick: function onClick() {
93
+ click();
94
+ setOpen(false);
95
+ }
96
+ }, type);
97
+ }))));
98
+ };
99
+ ExportButton.defaultProps = {
100
+ className: undefined,
101
+ color: '#4e3a16',
102
+ right: undefined,
103
+ forceTxt: true,
104
+ // 聽說Excel怪怪的 先強制隱藏
105
+ exportText: undefined,
106
+ exportTypeText: 'Export Type',
107
+ data: undefined
108
+ };
109
+
110
+ /* Write props detail information and 'npm run updateStory' will help you generate stories's argTypes */
111
+ ExportButton.propTypes = {
112
+ /** Css Name */
113
+ className: PropTypes.string,
114
+ /** 主題顏色 */
115
+ color: PropTypes.string,
116
+ /** 靠右起來 */
117
+ right: PropTypes.bool,
118
+ /** 匯出是否強制txt */
119
+ forceTxt: PropTypes.bool,
120
+ /** 匯出的文字 */
121
+ exportText: PropTypes.string,
122
+ /** 匯出類型的文字 */
123
+ exportTypeText: PropTypes.string,
124
+ /** 要匯出的JSON資料 */
125
+ data: PropTypes.oneOfType([PropTypes.objectOf(PropTypes.any), PropTypes.arrayOf(PropTypes.any)])
126
+ };
127
+
128
+ export { ExportButton as default };