@daoyi/nmtl-ui 2.0.1-beta.45 → 2.0.1-beta.47

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 (72) hide show
  1. package/lib/components/Autocomplete-5439ff22.js +333 -1
  2. package/lib/components/Autocomplete.js +12 -1
  3. package/lib/components/Avatar.js +51 -1
  4. package/lib/components/BackTop.js +82 -1
  5. package/lib/components/BarChart.js +132 -1
  6. package/lib/components/Breadcrumbs.js +124 -1
  7. package/lib/components/Button-63c7e9f3.js +91 -1
  8. package/lib/components/Button.js +8 -1
  9. package/lib/components/Carousel.js +61 -1
  10. package/lib/components/Checkbox.js +37 -1
  11. package/lib/components/CollapseContent.js +181 -1
  12. package/lib/components/ContactModal-a59bc808.js +924 -0
  13. package/lib/components/ContactModal.js +17 -1
  14. package/lib/components/Drawer-af3ed21a.js +157 -1
  15. package/lib/components/Drawer.js +13 -1
  16. package/lib/components/Dropdown.js +135 -1
  17. package/lib/components/Empty-70f040a9.js +44 -1
  18. package/lib/components/Empty.js +7 -1
  19. package/lib/components/ExportButton.js +114 -1
  20. package/lib/components/ExtraTools-f10a66a8.js +818 -1
  21. package/lib/components/ExtraTools.js +11 -1
  22. package/lib/components/Filter.js +90 -1
  23. package/lib/components/Footer.js +266 -1
  24. package/lib/components/ForwardLink.js +106 -1
  25. package/lib/components/Header.js +186 -1
  26. package/lib/components/Image.js +58 -1
  27. package/lib/components/Input.js +79 -1
  28. package/lib/components/InputMethod.js +23106 -1
  29. package/lib/components/KeywordSearch-224f84c1.js +138 -1
  30. package/lib/components/KeywordSearch.js +14 -1
  31. package/lib/components/KeywordTicker.js +182 -1
  32. package/lib/components/Keywords.js +292 -1
  33. package/lib/components/Loading.js +30 -1
  34. package/lib/components/MUITheme.js +255 -1
  35. package/lib/components/Modal-a7591b98.js +107 -1
  36. package/lib/components/Modal.js +11 -1
  37. package/lib/components/MoreButton-f15ca38e.js +109 -1
  38. package/lib/components/MoreButton.js +8 -1
  39. package/lib/components/Radio.js +81 -1
  40. package/lib/components/SNA.js +324 -1
  41. package/lib/components/Select-98a8e973.js +114 -1
  42. package/lib/components/Select.js +10 -1
  43. package/lib/components/Spin-690a3597.js +74 -1
  44. package/lib/components/Spin.js +8 -1
  45. package/lib/components/Table.js +51 -1
  46. package/lib/components/Tooltip-b7eb966d.js +69 -1
  47. package/lib/components/Tooltip.js +9 -1
  48. package/lib/components/_rollupPluginBabelHelpers-fde6d1c6.js +491 -1
  49. package/lib/components/dataExport-f418e6fe.js +56 -1
  50. package/lib/components/globalConfig.js +186 -1
  51. package/lib/components/vendor-851c6356.js +41893 -16
  52. package/lib/index.d.ts +1 -3
  53. package/lib/index.js +1 -3
  54. package/lib/utils/_rollupPluginBabelHelpers-a6e0e6e3.js +139 -1
  55. package/lib/utils/arrayMerge.js +100 -1
  56. package/lib/utils/chunkArray.js +15 -1
  57. package/lib/utils/convert2HtmlEntities.js +42 -1
  58. package/lib/utils/domToImage.js +32 -1
  59. package/lib/utils/downloadGephi.js +106 -1
  60. package/lib/utils/exportXlsx.js +184 -1
  61. package/lib/utils/historyAppendSearch.js +23 -1
  62. package/lib/utils/isDevelopMode.js +5 -1
  63. package/lib/utils/parseYMD.js +36 -1
  64. package/lib/utils/removeDuplicateItem.js +11 -1
  65. package/lib/utils/sendEmail.js +39 -1
  66. package/lib/utils/snaDefine-6a2bcd94.js +5 -1
  67. package/lib/utils/snaDefine.js +1 -1
  68. package/lib/utils/snaPreProcess.js +84 -1
  69. package/lib/utils/vendor-3ec75cc9.js +1289 -1
  70. package/package.json +1 -1
  71. package/lib/components/ContactModal-d7e2f8bb.js +0 -1
  72. package/lib/components/globalConfig-40069b54.js +0 -1
@@ -1 +1,333 @@
1
- import{_ as e,a as n,b as t}from"./_rollupPluginBabelHelpers-fde6d1c6.js";import o,{useCallback as r,useState as a,useRef as l,useEffect as u}from"react";import i from"prop-types";import{s as c,d as p,c as s}from"./vendor-851c6356.js";import{Autocomplete as f}from"@material-ui/lab";import{Chip as d,TextField as m,CircularProgress as b}from"@material-ui/core";import{Close as g,SearchOutlined as h}from"@material-ui/icons";import{E as y}from"./Empty-70f040a9.js";c(".autocomplete .MuiAutocomplete-inputRoot[class*='MuiOutlinedInput-root'] {\n padding: 0px 8px; }\n\n.autocomplete .MuiChip-deleteIcon {\n width: 16px;\n height: 16px; }\n\n.autocomplete__icon {\n font-size: 1.25rem;\n margin-right: 8px;\n cursor: pointer; }\n\n.autocomplete--showSearchIcon .MuiAutocomplete-inputRoot[class*='MuiOutlinedInput-root'] {\n display: flex;\n flex-wrap: nowrap;\n padding: 4px 8px; }\n");var v=function(i){var c=i.options,v=i.defaultValue,I=i.renderAfterDefaultValueChange,A=i.filterable,V=i.loading,E=i.labelInValue,C=i.disabled,x=i.className,w=i.multiple,O=i.freeTyping,T=i.placeholder,_=i.searchIcon,D=i.renderInput,N=i.renderTags,F=i.onChange,S=i.onSearch,j=i.onFocus,R=i.onBlur,B=i.onEnter,M=a(!0),P=n(M,2),k=P[0],L=P[1],z=a(),H=n(z,2),J=H[0],K=H[1],U=a(),q=n(U,2),G=q[0],Q=q[1],W=a(),X=n(W,2),Y=X[0],Z=X[1],$=a(),ee=n($,2),ne=ee[0],te=ee[1],oe=(n=>{let{options:t,placeholder:a,loading:l,searchIcon:u,labelInValue:i,onEnter:c,currentResult:p,setCurrentDefaultValue:s}=n;const f=r((e=>"object"==typeof e?e.value:e),[]),y=r((e=>{const n=(Array.isArray(t)?t:[]).find((n=>f(n)===f(e)));return n?"object"==typeof n?n.label:n:"object"==typeof e?e.label:e}),[t]),v=r((e=>{if(Array.isArray(t)){if(Array.isArray(e))return e.map((e=>t.find((n=>{let{value:t}=n;return e===t||e.value===t}))||e));const n=t.find((n=>{let{value:t}=n;return e===t}));return i?e:n||{label:e,value:e}}return e}),[t,i]),I=r(((n,t)=>n.map(((n,r)=>o.createElement(d,e({label:y(n),deleteIcon:o.createElement(g,null)},t({index:r})))))),[t]),A=r((n=>o.createElement(m,e({},n,{variant:"outlined",placeholder:a,InputProps:{...n.InputProps,endAdornment:o.createElement(o.Fragment,null,l&&o.createElement(b,{className:"autocomplete__icon",color:"inherit",size:20}),u&&o.createElement(h,{className:"autocomplete__icon",onClick:e=>(s({label:p,value:p}),c(e,{label:p,value:p}))}),n.InputProps.endAdornment)}}))),[l,u]);return{getValue:f,getValueFromOptions:v,defaultTag:I,defaultRenderInput:A}})(t({},{options:c,placeholder:T,loading:V,searchIcon:_,labelInValue:E,currentResult:G,onEnter:B,setCurrentDefaultValue:te})),re=oe.getValue,ae=oe.getValueFromOptions,le=oe.defaultTag,ue=oe.defaultRenderInput,ie=l(p((function(e){return S(e)}),500)).current;return u((function(){te("string"==typeof v&&w?{label:J,value:J}:ae(v))}),[JSON.stringify(v)]),u((function(){I&&L(!1)}),[ne]),u((function(){k||L(!0)}),[k]),u((function(){G&&(K(G),ie(G))}),[G]),o.createElement("div",{className:s("autocomplete",{"autocomplete--showSearchIcon":_},x)},k&&o.createElement(f,{className:"autocomplete__component",options:Array.isArray(c)&&(O&&J?[{label:J,value:J}].concat(c):c)||[],defaultValue:ne,disabled:C,multiple:w,filterOptions:function(e,n){var t=n.inputValue,o=void 0===t?"":t;return(Array.isArray(e)?e:[]).filter((function(e){var n=(e||{}).label;return!A||(void 0===n?"":n).toLowerCase().indexOf(o.toLowerCase())>-1}))},onChange:function(e,n){Array.isArray(n)?F(n.map((function(e){return E?e:re(e)}))):n&&F(E?n:re(n))},onInputChange:function(e,n,t){n&&"string"==typeof n&&"input"===t&&Q(n)},onKeyDown:function(e){switch(e.key){case"ArrowDown":case"ArrowUp":Z(!0);break;case"Enter":if(!Y){var n=O&&!w;B(e,n?{label:J,value:J}:void 0),n&&te({label:J,value:J})}break;default:Z(!1)}},getOptionLabel:function(e){return e&&e.label||""},getOptionDisabled:function(e){return e.disabled},renderInput:function(e){return D&&D(e)||ue(e)},renderTags:function(e,n){return N&&N(e,n)||le(e,n)},popupIcon:null,noOptionsText:o.createElement(y,null),onFocus:j,onBlur:R}))};v.defaultProps={className:void 0,defaultValue:void 0,renderAfterDefaultValueChange:!1,options:void 0,freeTyping:!1,loading:!1,disabled:!1,labelInValue:!0,searchIcon:!0,multiple:!1,placeholder:"Search...",filterable:!1,renderInput:void 0,renderTags:void 0,onChange:function(){},onSearch:function(){},onFocus:function(){},onBlur:function(){},onEnter:function(){}},v.propTypes={className:i.string,defaultValue:i.any,renderAfterDefaultValueChange:i.bool,options:i.arrayOf(i.any),freeTyping:i.bool,loading:i.bool,disabled:i.bool,labelInValue:i.bool,searchIcon:i.bool,multiple:i.bool,placeholder:i.string,filterable:i.bool,renderInput:i.func,renderTags:i.func,onChange:i.func,onSearch:i.func,onFocus:i.func,onBlur:i.func,onEnter:i.func};export{v as A};
1
+ import { _ as _extends, a as _slicedToArray, b as _objectSpread2 } from './_rollupPluginBabelHelpers-fde6d1c6.js';
2
+ import React__default, { useCallback, useState, useRef, useEffect } from 'react';
3
+ import PropTypes from 'prop-types';
4
+ import { s as styleInject, d as debounce_1, c as classNames } from './vendor-851c6356.js';
5
+ import { Autocomplete as Autocomplete$1 } from '@material-ui/lab';
6
+ import { Chip, TextField, CircularProgress } from '@material-ui/core';
7
+ import { Close, SearchOutlined } from '@material-ui/icons';
8
+ import { E as Empty } from './Empty-70f040a9.js';
9
+
10
+ var useAutocomplete = (_ref => {
11
+ let {
12
+ options,
13
+ placeholder,
14
+ loading,
15
+ searchIcon,
16
+ labelInValue,
17
+ onEnter,
18
+ currentResult,
19
+ setCurrentDefaultValue
20
+ } = _ref;
21
+ const getValue = useCallback(data => typeof data === 'object' ? data.value : data, []);
22
+ const getLabel = useCallback(value => {
23
+ const finder = (Array.isArray(options) ? options : []).find(item => getValue(item) === getValue(value)
24
+ // typeof item === 'object' ? item.label === value : item === value
25
+ );
26
+
27
+ // console.log('options', options);
28
+ // console.log('value', value);
29
+ // console.log('finder', finder);
30
+ if (finder) {
31
+ return typeof finder === 'object' ? finder.label : finder;
32
+ }
33
+ return typeof value === 'object' ? value.label : value;
34
+ }, [options]);
35
+
36
+ /* 若MUI的Autocomplete下方的options列表要勾選已選的項目 必須從options取出才可 */
37
+ const getValueFromOptions = useCallback(defaultValue => {
38
+ if (Array.isArray(options)) {
39
+ if (Array.isArray(defaultValue)) {
40
+ return defaultValue.map(
41
+ // item有可能為 object({ label, value }) 或 string(value)
42
+ item => options.find(_ref2 => {
43
+ let {
44
+ value
45
+ } = _ref2;
46
+ return item === value || item.value === value;
47
+ }) || item
48
+ // if (typeof item === 'object') return options.find(({ value }) => item.value === value) || item;
49
+ // return item;
50
+ );
51
+ }
52
+
53
+ const result = options.find(_ref3 => {
54
+ let {
55
+ value
56
+ } = _ref3;
57
+ return defaultValue === value;
58
+ });
59
+ return labelInValue ? defaultValue : result || {
60
+ label: defaultValue,
61
+ value: defaultValue
62
+ };
63
+ }
64
+ return defaultValue;
65
+ }, [options, labelInValue]);
66
+ const defaultTag = useCallback((tagValue, getTagProps) => tagValue.map((option, index) => /*#__PURE__*/React__default.createElement(Chip, _extends({
67
+ label: getLabel(option),
68
+ deleteIcon: /*#__PURE__*/React__default.createElement(Close, null)
69
+ }, getTagProps({
70
+ index
71
+ })))), [options]);
72
+ const defaultRenderInput = useCallback(params => /*#__PURE__*/React__default.createElement(TextField, _extends({}, params, {
73
+ variant: "outlined",
74
+ placeholder: placeholder,
75
+ InputProps: {
76
+ ...params.InputProps,
77
+ endAdornment: /*#__PURE__*/React__default.createElement(React__default.Fragment, null, loading && /*#__PURE__*/React__default.createElement(CircularProgress, {
78
+ className: "autocomplete__icon",
79
+ color: "inherit",
80
+ size: 20
81
+ }), searchIcon && /*#__PURE__*/React__default.createElement(SearchOutlined, {
82
+ className: "autocomplete__icon",
83
+ onClick: event => {
84
+ setCurrentDefaultValue({
85
+ label: currentResult,
86
+ value: currentResult
87
+ });
88
+ return onEnter(event, {
89
+ label: currentResult,
90
+ value: currentResult
91
+ });
92
+ }
93
+ }), params.InputProps.endAdornment)
94
+ }
95
+ })), [loading, searchIcon]);
96
+ return {
97
+ getValue,
98
+ getValueFromOptions,
99
+ defaultTag,
100
+ defaultRenderInput
101
+ };
102
+ });
103
+
104
+ var css_248z = ".autocomplete .MuiAutocomplete-inputRoot[class*='MuiOutlinedInput-root'] {\n padding: 0px 8px; }\n\n.autocomplete .MuiChip-deleteIcon {\n width: 16px;\n height: 16px; }\n\n.autocomplete__icon {\n font-size: 1.25rem;\n margin-right: 8px;\n cursor: pointer; }\n\n.autocomplete--showSearchIcon .MuiAutocomplete-inputRoot[class*='MuiOutlinedInput-root'] {\n display: flex;\n flex-wrap: nowrap;\n padding: 4px 8px; }\n";
105
+ styleInject(css_248z);
106
+
107
+ var Autocomplete = function Autocomplete(props) {
108
+ var options = props.options,
109
+ defaultValue = props.defaultValue,
110
+ renderAfterDefaultValueChange = props.renderAfterDefaultValueChange,
111
+ filterable = props.filterable,
112
+ loading = props.loading,
113
+ labelInValue = props.labelInValue,
114
+ disabled = props.disabled;
115
+ var className = props.className,
116
+ multiple = props.multiple,
117
+ freeTyping = props.freeTyping,
118
+ placeholder = props.placeholder,
119
+ searchIcon = props.searchIcon,
120
+ _renderInput = props.renderInput,
121
+ _renderTags = props.renderTags;
122
+ var _onChange = props.onChange,
123
+ onSearch = props.onSearch,
124
+ onFocus = props.onFocus,
125
+ onBlur = props.onBlur,
126
+ onEnter = props.onEnter;
127
+ var _useState = useState(true),
128
+ _useState2 = _slicedToArray(_useState, 2),
129
+ rerender = _useState2[0],
130
+ setRerender = _useState2[1];
131
+ var _useState3 = useState(),
132
+ _useState4 = _slicedToArray(_useState3, 2),
133
+ keyword = _useState4[0],
134
+ setKeyword = _useState4[1];
135
+ var _useState5 = useState(),
136
+ _useState6 = _slicedToArray(_useState5, 2),
137
+ currentResult = _useState6[0],
138
+ setCurrentResult = _useState6[1];
139
+ var _useState7 = useState(),
140
+ _useState8 = _slicedToArray(_useState7, 2),
141
+ isFocusItem = _useState8[0],
142
+ setFocusItem = _useState8[1];
143
+ var _useState9 = useState(),
144
+ _useState10 = _slicedToArray(_useState9, 2),
145
+ currentDefaultValue = _useState10[0],
146
+ setCurrentDefaultValue = _useState10[1];
147
+ var _useAutocomplete = useAutocomplete(_objectSpread2({}, {
148
+ options: options,
149
+ placeholder: placeholder,
150
+ loading: loading,
151
+ searchIcon: searchIcon,
152
+ labelInValue: labelInValue,
153
+ currentResult: currentResult,
154
+ onEnter: onEnter,
155
+ setCurrentDefaultValue: setCurrentDefaultValue
156
+ })),
157
+ getValue = _useAutocomplete.getValue,
158
+ getValueFromOptions = _useAutocomplete.getValueFromOptions,
159
+ defaultTag = _useAutocomplete.defaultTag,
160
+ defaultRenderInput = _useAutocomplete.defaultRenderInput;
161
+ var handleSearch = useRef(debounce_1(function (result) {
162
+ return onSearch(result);
163
+ }, 500)).current;
164
+
165
+ // 複選時 defaultValue 必須為Array
166
+ // const currentDefaultValue = typeof defaultValue === 'string' && multiple ? undefined : getValueFromOptions(defaultValue);
167
+ useEffect(function () {
168
+ setCurrentDefaultValue(typeof defaultValue === 'string' && multiple ? {
169
+ label: keyword,
170
+ value: keyword
171
+ } : getValueFromOptions(defaultValue));
172
+ }, [JSON.stringify(defaultValue)]);
173
+ useEffect(function () {
174
+ if (renderAfterDefaultValueChange) setRerender(false);
175
+ }, [currentDefaultValue]); // defaultValue改變時強制rerender
176
+ useEffect(function () {
177
+ if (!rerender) setRerender(true);
178
+ }, [rerender]);
179
+ /* 監聽result變化時才觸發onSearch */
180
+ useEffect(function () {
181
+ if (currentResult) {
182
+ setKeyword(currentResult);
183
+ handleSearch(currentResult);
184
+ }
185
+ }, [currentResult]);
186
+
187
+ /* 這邊邏輯很複雜 變動需再三確認case */
188
+ return /*#__PURE__*/React__default.createElement("div", {
189
+ className: classNames('autocomplete', {
190
+ 'autocomplete--showSearchIcon': searchIcon
191
+ }, className)
192
+ }, rerender && /*#__PURE__*/React__default.createElement(Autocomplete$1, {
193
+ className: "autocomplete__component",
194
+ options: Array.isArray(options) && (freeTyping && keyword ? [{
195
+ label: keyword,
196
+ value: keyword
197
+ }].concat(options) : options) || []
198
+ // value="asd"
199
+ ,
200
+ defaultValue: currentDefaultValue,
201
+ disabled: disabled,
202
+ multiple: multiple
203
+ // 篩選機制(依據filterable決定是否要render全部)
204
+ ,
205
+ filterOptions: function filterOptions(optionList, input) {
206
+ var _input$inputValue = input.inputValue,
207
+ inputValue = _input$inputValue === void 0 ? '' : _input$inputValue;
208
+ return (Array.isArray(optionList) ? optionList : []).filter(function (item) {
209
+ var _ref = item || {},
210
+ _ref$label = _ref.label,
211
+ label = _ref$label === void 0 ? '' : _ref$label;
212
+ return filterable ? label.toLowerCase().indexOf(inputValue.toLowerCase()) > -1 : true;
213
+ });
214
+ },
215
+ onChange: function onChange(event, result) {
216
+ if (Array.isArray(result)) {
217
+ _onChange(result.map(function (item) {
218
+ return labelInValue ? item : getValue(item);
219
+ }));
220
+ } else if (result) {
221
+ _onChange(labelInValue ? result : getValue(result));
222
+ }
223
+ },
224
+ onInputChange: function onInputChange(event, result, reason) {
225
+ /* 此callback會經常被觸發 因此需要setState並搭配useEffect穩定觸發 */
226
+ if (result && typeof result === 'string' && reason === 'input') setCurrentResult(result);
227
+ },
228
+ onKeyDown: function onKeyDown(event) {
229
+ switch (event.key) {
230
+ case 'ArrowDown':
231
+ case 'ArrowUp':
232
+ setFocusItem(true);
233
+ break;
234
+ case 'Enter':
235
+ if (!isFocusItem) {
236
+ var enterFreeTyping = freeTyping && !multiple;
237
+ onEnter(event, enterFreeTyping ? {
238
+ label: keyword,
239
+ value: keyword
240
+ } : undefined);
241
+ if (enterFreeTyping) setCurrentDefaultValue({
242
+ label: keyword,
243
+ value: keyword
244
+ });
245
+ }
246
+ break;
247
+ default:
248
+ setFocusItem(false);
249
+ }
250
+ },
251
+ getOptionLabel: function getOptionLabel(option) {
252
+ return option && option.label || '';
253
+ },
254
+ getOptionDisabled: function getOptionDisabled(option) {
255
+ return option.disabled;
256
+ },
257
+ renderInput: function renderInput(params) {
258
+ return _renderInput && _renderInput(params) || defaultRenderInput(params);
259
+ },
260
+ renderTags: function renderTags(tagValue, getTagProps) {
261
+ return _renderTags && _renderTags(tagValue, getTagProps) || defaultTag(tagValue, getTagProps);
262
+ }
263
+ // popupIcon={<ExpandMore />}
264
+ ,
265
+ popupIcon: null,
266
+ noOptionsText: /*#__PURE__*/React__default.createElement(Empty, null),
267
+ onFocus: onFocus,
268
+ onBlur: onBlur
269
+ }));
270
+ };
271
+ Autocomplete.defaultProps = {
272
+ className: undefined,
273
+ defaultValue: undefined,
274
+ renderAfterDefaultValueChange: false,
275
+ options: undefined,
276
+ freeTyping: false,
277
+ loading: false,
278
+ disabled: false,
279
+ labelInValue: true,
280
+ searchIcon: true,
281
+ multiple: false,
282
+ placeholder: 'Search...',
283
+ filterable: false,
284
+ renderInput: undefined,
285
+ renderTags: undefined,
286
+ onChange: function onChange() {},
287
+ onSearch: function onSearch() {},
288
+ onFocus: function onFocus() {},
289
+ onBlur: function onBlur() {},
290
+ onEnter: function onEnter() {}
291
+ };
292
+ Autocomplete.propTypes = {
293
+ /** Css名稱 */
294
+ className: PropTypes.string,
295
+ /** 初始內容值 */
296
+ defaultValue: PropTypes.any,
297
+ /** 初始值變動後重新載入元件 */
298
+ renderAfterDefaultValueChange: PropTypes.bool,
299
+ /** 下拉選單內容 */
300
+ options: PropTypes.arrayOf(PropTypes.any),
301
+ /** 是否允許自由輸入 */
302
+ freeTyping: PropTypes.bool,
303
+ /** 是否載入中 */
304
+ loading: PropTypes.bool,
305
+ /** 是否禁止使用 */
306
+ disabled: PropTypes.bool,
307
+ /** onChange時 label value 一起回傳 */
308
+ labelInValue: PropTypes.bool,
309
+ /** 搜尋的圖案是否顯示 */
310
+ searchIcon: PropTypes.bool,
311
+ /** 是否複選 */
312
+ multiple: PropTypes.bool,
313
+ /** 提示字 */
314
+ placeholder: PropTypes.string,
315
+ /** 是否要啟動篩選功能(若關閉則option有什麼即顯示什麼) */
316
+ filterable: PropTypes.bool,
317
+ /** input客製化 */
318
+ renderInput: PropTypes.func,
319
+ /** 已選選項客製化 */
320
+ renderTags: PropTypes.func,
321
+ /** 變動時的callback */
322
+ onChange: PropTypes.func,
323
+ /** 搜尋時的callback */
324
+ onSearch: PropTypes.func,
325
+ /** Input被聚焦時的callback */
326
+ onFocus: PropTypes.func,
327
+ /** Input離開時的callback */
328
+ onBlur: PropTypes.func,
329
+ /** 鍵盤輸入Enter的callback */
330
+ onEnter: PropTypes.func
331
+ };
332
+
333
+ export { Autocomplete as A };
@@ -1 +1,12 @@
1
- export{A as default}from"./Autocomplete-5439ff22.js";import"./_rollupPluginBabelHelpers-fde6d1c6.js";import"react";import"prop-types";import"./vendor-851c6356.js";import"react-is";import"@material-ui/styles";import"react-dom";import"@material-ui/lab";import"@material-ui/core";import"@material-ui/icons";import"./Empty-70f040a9.js";
1
+ export { A as default } from './Autocomplete-5439ff22.js';
2
+ import './_rollupPluginBabelHelpers-fde6d1c6.js';
3
+ import 'react';
4
+ import 'prop-types';
5
+ import './vendor-851c6356.js';
6
+ import 'react-is';
7
+ import '@material-ui/styles';
8
+ import 'react-dom';
9
+ import '@material-ui/lab';
10
+ import '@material-ui/core';
11
+ import '@material-ui/icons';
12
+ import './Empty-70f040a9.js';
@@ -1 +1,51 @@
1
- import r from"react";import{s as a,c as e}from"./vendor-851c6356.js";import o from"prop-types";import{Avatar as s}from"@material-ui/core";import"react-is";import"@material-ui/styles";import"react-dom";a("");var t=function(a){var o=a.className,t=a.shape,c=a.src,i=a.onError;return r.createElement(s,{className:e("avatar",o),variant:t,src:c},r.createElement("img",{src:c,onError:function(){return i()},alt:"test",style:{display:"none"}}))};t.defaultProps={className:void 0,shape:"circular",src:void 0,onError:void 0},t.propTypes={className:o.string,shape:o.oneOf(["circle","circular","rounded","square"]),src:o.string,onError:o.func};export{t as default};
1
+ import React__default from 'react';
2
+ import { s as styleInject, c as classNames } from './vendor-851c6356.js';
3
+ import PropTypes from 'prop-types';
4
+ import { Avatar as Avatar$1 } from '@material-ui/core';
5
+ import 'react-is';
6
+ import '@material-ui/styles';
7
+ import 'react-dom';
8
+
9
+ var css_248z = "";
10
+ styleInject(css_248z);
11
+
12
+ var Avatar = function Avatar(_ref) {
13
+ var className = _ref.className,
14
+ shape = _ref.shape,
15
+ src = _ref.src,
16
+ _onError = _ref.onError;
17
+ return /*#__PURE__*/React__default.createElement(Avatar$1, {
18
+ className: classNames('avatar', className),
19
+ variant: shape,
20
+ src: src
21
+ }, /*#__PURE__*/React__default.createElement("img", {
22
+ src: src,
23
+ onError: function onError() {
24
+ return _onError();
25
+ },
26
+ alt: "test",
27
+ style: {
28
+ display: 'none'
29
+ }
30
+ }));
31
+ };
32
+ Avatar.defaultProps = {
33
+ className: undefined,
34
+ shape: 'circular',
35
+ src: undefined,
36
+ onError: undefined
37
+ };
38
+
39
+ /* Write props detail information and 'npm run updateStory' will help you generate stories's argTypes */
40
+ Avatar.propTypes = {
41
+ /** Css Name */
42
+ className: PropTypes.string,
43
+ /** 形狀 */
44
+ shape: PropTypes.oneOf(['circle', 'circular', 'rounded', 'square']),
45
+ /** 圖片來源 */
46
+ src: PropTypes.string,
47
+ /** 圖片有錯誤則callback */
48
+ onError: PropTypes.func
49
+ };
50
+
51
+ export { Avatar as default };
@@ -1 +1,82 @@
1
- import{a as n}from"./_rollupPluginBabelHelpers-fde6d1c6.js";import o,{useState as e,useRef as t,useEffect as i}from"react";import r from"prop-types";import{s as a,d as c,c as l,a as s}from"./vendor-851c6356.js";import{Fade as p,NoSsr as m,Box as d}from"@material-ui/core";import"react-is";import"@material-ui/styles";import"react-dom";a(".backTop {\n right: 30px;\n bottom: 50px;\n position: fixed;\n z-index: 10;\n opacity: 0;\n cursor: pointer; }\n .backTop__default {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n width: 70px;\n height: 70px;\n border-radius: 45px;\n opacity: 0.8;\n transition: opacity 0.3s ease-in-out; }\n .backTop__default:hover {\n opacity: 1; }\n .backTop__default .MuiSvgIcon-root {\n margin-bottom: -3px; }\n .backTop:hover {\n opacity: 0.7; }\n\n@media only screen and (max-width: 484px) {\n .backTop {\n right: 15px; } }\n");var u=function(r){var a=r.className,u=r.visibilityHeight,f=r.onClick,b=r.children,v=e(!1),x=n(v,2),y=x[0],h=x[1],w=t(c((function(){var n=window.scrollY;h(n>=u)}),100)).current;return i((function(){return window.addEventListener("scroll",(function(){return w()})),function(){window.removeEventListener("scroll",(function(){return w()}))}}),[]),o.createElement(p,{in:y,timeout:500,unmountOnExit:!0},o.createElement("div",{className:l("backTop",a),onClick:function(){window.scrollTo?window.scrollTo({top:0,left:0,behavior:"smooth"}):window.scrollTop=0,f()}},b?o.createElement("div",null,b):o.createElement(m,null,o.createElement(d,{className:"backTop__default",color:"text.primary",bgcolor:"primary.main",borderColor:"text.secondary"},o.createElement(s,null),"Top"))))};u.defaultProps={className:void 0,visibilityHeight:300,onClick:function(){},children:void 0},u.propTypes={className:r.string,visibilityHeight:r.number,onClick:r.func,children:r.node};export{u as default};
1
+ import { a as _slicedToArray } from './_rollupPluginBabelHelpers-fde6d1c6.js';
2
+ import React__default, { useState, useRef, useEffect } from 'react';
3
+ import PropTypes from 'prop-types';
4
+ import { s as styleInject, d as debounce_1, c as classNames, a as default_1 } from './vendor-851c6356.js';
5
+ import { Fade, NoSsr, Box } from '@material-ui/core';
6
+ import 'react-is';
7
+ import '@material-ui/styles';
8
+ import 'react-dom';
9
+
10
+ var css_248z = ".backTop {\n right: 30px;\n bottom: 50px;\n position: fixed;\n z-index: 10;\n opacity: 0;\n cursor: pointer; }\n .backTop__default {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n width: 70px;\n height: 70px;\n border-radius: 45px;\n opacity: 0.8;\n transition: opacity 0.3s ease-in-out; }\n .backTop__default:hover {\n opacity: 1; }\n .backTop__default .MuiSvgIcon-root {\n margin-bottom: -3px; }\n .backTop:hover {\n opacity: 0.7; }\n\n@media only screen and (max-width: 484px) {\n .backTop {\n right: 15px; } }\n";
11
+ styleInject(css_248z);
12
+
13
+ var scrollToTop = function scrollToTop() {
14
+ if (window.scrollTo) {
15
+ window.scrollTo({
16
+ top: 0,
17
+ left: 0,
18
+ behavior: 'smooth'
19
+ });
20
+ } else {
21
+ window.scrollTop = 0;
22
+ }
23
+ };
24
+ var BackTop = function BackTop(props) {
25
+ var className = props.className,
26
+ visibilityHeight = props.visibilityHeight,
27
+ _onClick = props.onClick,
28
+ children = props.children;
29
+ var _useState = useState(false),
30
+ _useState2 = _slicedToArray(_useState, 2),
31
+ show = _useState2[0],
32
+ setShow = _useState2[1];
33
+ var scrollDebounce = useRef(debounce_1(function () {
34
+ var top = window.scrollY;
35
+ setShow(top >= visibilityHeight);
36
+ }, 100)).current;
37
+ useEffect(function () {
38
+ // const scrollEvent = () => scrollDebounce.current;
39
+ window.addEventListener('scroll', function () {
40
+ return scrollDebounce();
41
+ });
42
+ return function () {
43
+ window.removeEventListener('scroll', function () {
44
+ return scrollDebounce();
45
+ });
46
+ };
47
+ }, []);
48
+ return /*#__PURE__*/React__default.createElement(Fade, {
49
+ in: show,
50
+ timeout: 500,
51
+ unmountOnExit: true
52
+ }, /*#__PURE__*/React__default.createElement("div", {
53
+ className: classNames('backTop', className),
54
+ onClick: function onClick() {
55
+ scrollToTop();
56
+ _onClick();
57
+ }
58
+ }, children ? /*#__PURE__*/React__default.createElement("div", null, children) : /*#__PURE__*/React__default.createElement(NoSsr, null, /*#__PURE__*/React__default.createElement(Box, {
59
+ className: "backTop__default",
60
+ color: "text.primary",
61
+ bgcolor: "primary.main",
62
+ borderColor: "text.secondary"
63
+ }, /*#__PURE__*/React__default.createElement(default_1, null), "Top"))));
64
+ };
65
+ BackTop.defaultProps = {
66
+ className: undefined,
67
+ visibilityHeight: 300,
68
+ onClick: function onClick() {},
69
+ children: undefined
70
+ };
71
+ BackTop.propTypes = {
72
+ /** Css Name */
73
+ className: PropTypes.string,
74
+ /** 可視返回Icon的高度偵測 */
75
+ visibilityHeight: PropTypes.number,
76
+ /** 點擊後的Callback */
77
+ onClick: PropTypes.func,
78
+ /** custom */
79
+ children: PropTypes.node
80
+ };
81
+
82
+ export { BackTop as default };
@@ -1 +1,132 @@
1
- import t,{useEffect as r}from"react";import{s as a,c as e,k as n,w as o,A as c,B as i,C as l,D as s}from"./vendor-851c6356.js";import u from"prop-types";import"react-is";import"@material-ui/styles";import"react-dom";a("#barChart {\n width: 100%; }\n");var d=function(a){var u=a.className,d=a.barChartData,f=a.setSelectedYear,m=a.fontColor,p=a.barColor,h=a.width,y=a.scaleTicks;if(!d||0===d.length)return null;var b=100,g=30,C=90,v=35,w=window.innerWidth<767?2*window.innerWidth-b-C:700-b-C;function k(){var t=document.getElementById("barChart__block");0===t.scrollLeft&&document.getElementById("yaxis").setAttribute("transform","translate(0, 0 )"),t.scrollLeft>0&&document.getElementById("yaxis").setAttribute("transform","translate(".concat(t.scrollLeft,", 0)"))}return r((function(){d.length>0&&function(t){var r=0;t.forEach((function(t){parseInt(t.count,10)>r&&(r=parseInt(t.count,10))})),n("div#barChart").html("");var a=n("#barChart").append("svg").attr("width",h+v+g).attr("height",w+b+C).append("g").attr("transform","translate(".concat(v,",").concat(b,")")),e=o().range([0,h]).domain(t.map((function(t){return t.year}))).padding(.2);a.append("g").attr("id","xaxis").attr("transform","translate(0,".concat(w,")")).call(c(e)).style("color",m).selectAll("text").attr("transform","translate(-10,0)rotate(-45)").style("text-anchor","end").style("color",m).style("font-size",16).style("cursor","pointer").on("click",(function(t){f(t)}));var u=i().domain([0,r]).range([w,0]);a.selectAll("mybar").data(t).enter().append("rect").attr("x",(function(t){return e(t.year)})).attr("width",e.bandwidth()).attr("fill",p).attr("title",(function(t){return t.count})).attr("height",(function(){return w-u(0)})).attr("y",(function(){return u(0)})).style("cursor","pointer").on("click",(function(t){return f(t.year)})).append("svg:title").text((function(t){return"數量:".concat(t.count)})),a.selectAll("rect").transition().duration(800).attr("y",(function(t){return u(t.count)})).attr("height",(function(t){return w-u(t.count)})).delay((function(t,r){return 10*r})),a.append("g").call(l(u).tickValues(s(u.domain()[0],u.domain()[1]+1,y)).tickFormat((function(t){return Math.round(t)}))).attr("id","yaxis").style("color",m).style("font-size",15)}(d),document.getElementById("barChart__block").addEventListener("scroll",k)}),[d]),t.createElement("div",{id:"barChart",className:e("barChart",u)})};d.defaultProps={className:void 0,barChartData:[],setSelectedYear:function(){return null},fontColor:"#000",barColor:"#69b3a2",width:2e3,scaleTicks:1},d.propTypes={className:u.string,barChartData:u.arrayOf(u.any),setSelectedYear:u.func,fontColor:u.string,barColor:u.string,width:u.number,scaleTicks:u.number};export{d as default};
1
+ import React__default, { useEffect } from 'react';
2
+ import { s as styleInject, c as classNames, k as d3Select, w as band, A as axisBottom, B as linear, C as axisLeft, D as sequence } from './vendor-851c6356.js';
3
+ import PropTypes from 'prop-types';
4
+ import 'react-is';
5
+ import '@material-ui/styles';
6
+ import 'react-dom';
7
+
8
+ var css_248z = "#barChart {\n width: 100%; }\n";
9
+ styleInject(css_248z);
10
+
11
+ var BarChart = function BarChart(_ref) {
12
+ var className = _ref.className,
13
+ barChartData = _ref.barChartData,
14
+ setSelectedYear = _ref.setSelectedYear,
15
+ fontColor = _ref.fontColor,
16
+ barColor = _ref.barColor,
17
+ width = _ref.width,
18
+ scaleTicks = _ref.scaleTicks;
19
+ if (!barChartData || barChartData.length === 0) {
20
+ return null;
21
+ }
22
+ // set the dimensions and margins of the graph
23
+ var margin = {
24
+ top: 100,
25
+ right: 30,
26
+ bottom: 90,
27
+ left: 35
28
+ };
29
+ var height = window.innerWidth < 767 ? window.innerWidth * 2 - margin.top - margin.bottom : 700 - margin.top - margin.bottom;
30
+
31
+ // Parse the Data
32
+ var readData = function readData(data) {
33
+ var maxValue = 0;
34
+ data.forEach(function (item) {
35
+ if (parseInt(item.count, 10) > maxValue) {
36
+ maxValue = parseInt(item.count, 10);
37
+ }
38
+ });
39
+ d3Select('div#barChart').html('');
40
+ var svg = d3Select('#barChart').append('svg').attr('width', width + margin.left + margin.right).attr('height', height + margin.top + margin.bottom).append('g').attr('transform', "translate(".concat(margin.left, ",").concat(margin.top, ")"));
41
+ // X axis
42
+ var x = band().range([0, width]).domain(data.map(function (d) {
43
+ return d.year;
44
+ })).padding(0.2);
45
+ svg.append('g').attr('id', 'xaxis').attr('transform', "translate(0,".concat(height, ")")).call(axisBottom(x)).style('color', fontColor).selectAll('text').attr('transform', 'translate(-10,0)rotate(-45)').style('text-anchor', 'end').style('color', fontColor).style('font-size', 16).style('cursor', 'pointer').on('click', function (d) {
46
+ setSelectedYear(d);
47
+ });
48
+
49
+ // Add Y axis
50
+ var y = linear().domain([0, maxValue]).range([height, 0]);
51
+
52
+ // Bars
53
+ svg.selectAll('mybar').data(data).enter().append('rect').attr('x', function (d) {
54
+ return x(d.year);
55
+ }).attr('width', x.bandwidth()).attr('fill', barColor).attr('title', function (d) {
56
+ return d.count;
57
+ })
58
+ // no bar at the beginning thus:
59
+ .attr('height', function () {
60
+ return height - y(0);
61
+ }) // always equal to 0
62
+ .attr('y', function () {
63
+ return y(0);
64
+ }).style('cursor', 'pointer').on('click', function (d) {
65
+ return setSelectedYear(d.year);
66
+ }).append('svg:title').text(function (d) {
67
+ return "\u6578\u91CF:".concat(d.count);
68
+ });
69
+
70
+ // Animation
71
+ svg.selectAll('rect').transition().duration(800).attr('y', function (d) {
72
+ return y(d.count);
73
+ }).attr('height', function (d) {
74
+ return height - y(d.count);
75
+ }).delay(function (d, i) {
76
+ return i * 10;
77
+ });
78
+ svg.append('g').call(axisLeft(y).tickValues(sequence(y.domain()[0], y.domain()[1] + 1, scaleTicks)).tickFormat(function (d) {
79
+ return Math.round(d);
80
+ })).attr('id', 'yaxis').style('color', fontColor).style('font-size', 15);
81
+ };
82
+ function shiftYaxis() {
83
+ var element = document.getElementById('barChart__block');
84
+ if (element.scrollLeft === 0) {
85
+ document.getElementById('yaxis').setAttribute('transform', 'translate(0, 0 )');
86
+ }
87
+ if (element.scrollLeft > 0) {
88
+ document.getElementById('yaxis').setAttribute('transform', "translate(".concat(element.scrollLeft, ", 0)"));
89
+ }
90
+ }
91
+ useEffect(function () {
92
+ if (barChartData.length > 0) {
93
+ readData(barChartData);
94
+ }
95
+ document.getElementById('barChart__block').addEventListener('scroll', shiftYaxis);
96
+ }, [barChartData]);
97
+ return /*#__PURE__*/React__default.createElement("div", {
98
+ id: "barChart",
99
+ className: classNames('barChart', className)
100
+ });
101
+ };
102
+ BarChart.defaultProps = {
103
+ className: undefined,
104
+ barChartData: [],
105
+ setSelectedYear: function setSelectedYear() {
106
+ return null;
107
+ },
108
+ fontColor: '#000',
109
+ barColor: '#69b3a2',
110
+ width: 2000,
111
+ scaleTicks: 1
112
+ };
113
+
114
+ /* Write props detail information and 'npm run updateStory' will help you generate stories's argTypes */
115
+ BarChart.propTypes = {
116
+ /** Css Name */
117
+ className: PropTypes.string,
118
+ /** 資料來源 */
119
+ barChartData: PropTypes.arrayOf(PropTypes.any),
120
+ /** 設定點選年分 */
121
+ setSelectedYear: PropTypes.func,
122
+ /** X、Y尺度字的顏色 */
123
+ fontColor: PropTypes.string,
124
+ /** 長條圖的顏色 */
125
+ barColor: PropTypes.string,
126
+ /** 圖表的寬度,影響bar的粗度 */
127
+ width: PropTypes.number,
128
+ /** 刻度的級距,以一個刻度相差多少 */
129
+ scaleTicks: PropTypes.number
130
+ };
131
+
132
+ export { BarChart as default };