@daoyi/nmtl-ui 2.0.1-beta.133 → 2.0.1-beta.135
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +45 -45
- package/lib/components/{Autocomplete-0ea4a31c.js → Autocomplete-e40d7145.js} +4 -4
- package/lib/components/Autocomplete.js +4 -4
- package/lib/components/Avatar.js +1 -1
- package/lib/components/BackTop.js +2 -2
- package/lib/components/BarChart.js +1 -1
- package/lib/components/Breadcrumbs.js +20 -9
- package/lib/components/{Button-7bd5aa09.js → Button-8cf35bc0.js} +1 -1
- package/lib/components/Button.js +2 -2
- package/lib/components/Carousel.js +1 -1
- package/lib/components/CollapseContent.js +46 -4
- package/lib/components/{ContactModal-159de99c.js → ContactModal-19979528.js} +37 -24
- package/lib/components/ContactModal.js +8 -8
- package/lib/components/{Drawer-a5be9257.js → Drawer-b770014f.js} +6 -4
- package/lib/components/Drawer.js +5 -5
- package/lib/components/Dropdown.js +1 -1
- package/lib/components/{Empty-c6a44967.js → Empty-48685dd0.js} +1 -1
- package/lib/components/Empty.js +2 -2
- package/lib/components/ExportButton.js +1 -1
- package/lib/components/{ExtraTools-2691c13e.js → ExtraTools-c46c1965.js} +3 -3
- package/lib/components/ExtraTools.js +3 -3
- package/lib/components/Filter.js +2 -2
- package/lib/components/Footer.js +8 -8
- package/lib/components/{ForwardLink-5fbd2705.js → ForwardLink-2905563c.js} +2 -2
- package/lib/components/ForwardLink.js +3 -3
- package/lib/components/Header.js +8 -8
- package/lib/components/Image.js +1 -1
- package/lib/components/Input.js +1 -1
- package/lib/components/InputMethod.js +186 -196
- package/lib/components/{KeywordSearch-db9c45d9.js → KeywordSearch-4e621ded.js} +5 -5
- package/lib/components/KeywordSearch.js +5 -5
- package/lib/components/KeywordTicker.js +3 -3
- package/lib/components/Keywords.js +5 -5
- package/lib/components/Loading.js +1 -1
- package/lib/components/MUITheme.js +2 -2
- package/lib/components/{Modal-e04532fa.js → Modal-b984f381.js} +3 -3
- package/lib/components/Modal.js +4 -4
- package/lib/components/{MoreButton-19055e07.js → MoreButton-0b5aaef3.js} +2 -2
- package/lib/components/MoreButton.js +2 -2
- package/lib/components/Pagination.js +2 -2
- package/lib/components/SNA.js +11 -11
- package/lib/components/{SegmentedControl-81f63afc.js → SegmentedControl-804da0a6.js} +1 -1
- package/lib/components/SegmentedControl.js +2 -2
- package/lib/components/{Select-89841c71.js → Select-979f7e73.js} +2 -2
- package/lib/components/Select.js +3 -3
- package/lib/components/{Spin-8f87eadc.js → Spin-07679812.js} +1 -1
- package/lib/components/Spin.js +2 -2
- package/lib/components/{Tooltip-6ebfa9c1.js → Tooltip-bbbaa9c7.js} +1 -1
- package/lib/components/Tooltip.js +2 -2
- package/lib/components/globalConfig.js +19 -4
- package/lib/utils/arrayMerge.js +20 -20
- package/lib/utils/convert2HtmlEntities.js +5 -1
- package/lib/utils/exportXlsx.js +1 -1
- package/lib/utils/index.d.ts +2 -0
- package/lib/utils/index.js +2 -0
- package/lib/utils/newWindowHint-db113a69.js +49 -0
- package/lib/utils/prepareTimelineData.js +78 -0
- package/lib/utils/syncTimelineA11y.js +53 -0
- package/package.json +1 -1
- /package/lib/components/{createSvgIcon-dc603596.js → createSvgIcon-370e163a.js} +0 -0
- /package/lib/components/{index-b76a85f4.js → index-c33afcb5.js} +0 -0
- /package/lib/components/{index-b47819f3.js → index-ff95f719.js} +0 -0
package/README.md
CHANGED
|
@@ -1,45 +1,45 @@
|
|
|
1
|
-
# react-storybook-jsx-starter
|
|
2
|
-
|
|
3
|
-
This project based
|
|
4
|
-
|
|
5
|
-
This project is bootstrapped with the following
|
|
6
|
-
- [Create React App](https://github.com/facebook/create-react-app)
|
|
7
|
-
- [Storybook/react v.6.3.5](https://storybook.js.org/)
|
|
8
|
-
- [Rollup v.2.54.0](https://rollupjs.org/guide/en/)
|
|
9
|
-
- [Airbnb esint config v.18.0.0](https://www.npmjs.com/package/eslint-config-airbnb)
|
|
10
|
-
|
|
11
|
-
## Getting Started
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
## Available Scripts
|
|
15
|
-
|
|
16
|
-
In the project directory, you can run:
|
|
17
|
-
|
|
18
|
-
### `yarn start` and `yarn storybook`
|
|
19
|
-
|
|
20
|
-
Runs storybook.<br>
|
|
21
|
-
Open [http://localhost:6006](http://localhost:6006) to view it in the browser.
|
|
22
|
-
The page will reload if you make component edits.
|
|
23
|
-
|
|
24
|
-
### `yarn create`
|
|
25
|
-
|
|
26
|
-
Help you create component or util. It will automatic generate `folder`, `JSX`, `.store.jsx`.
|
|
27
|
-
|
|
28
|
-
### `yarn lint`
|
|
29
|
-
|
|
30
|
-
Runs airbnb linting config.<br>
|
|
31
|
-
Please refer to `.eslintrc` for more details in rules that are excluded/added from the initial Airbnb configuration, which can be found [here](https://www.npmjs.com/package/eslint-config-airbnb)
|
|
32
|
-
Notice: If developer using visual code IDE, download `eslint` and `prettier` extensions to help you develop.
|
|
33
|
-
|
|
34
|
-
### `yarn build`
|
|
35
|
-
|
|
36
|
-
Builds the component library using rollup.<br>
|
|
37
|
-
This runs a set of defined configurations under `rollup.config.js` file.<br>
|
|
38
|
-
Index.js & index.ts will automatic generated by `rollup.index.js` file.
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
### `yarn build-storybook`
|
|
42
|
-
|
|
43
|
-
Builds static files for storybook site. This is so it can be deployed as the docs source for the component library.
|
|
44
|
-
|
|
45
|
-
|
|
1
|
+
# react-storybook-jsx-starter
|
|
2
|
+
|
|
3
|
+
This project based
|
|
4
|
+
|
|
5
|
+
This project is bootstrapped with the following
|
|
6
|
+
- [Create React App](https://github.com/facebook/create-react-app)
|
|
7
|
+
- [Storybook/react v.6.3.5](https://storybook.js.org/)
|
|
8
|
+
- [Rollup v.2.54.0](https://rollupjs.org/guide/en/)
|
|
9
|
+
- [Airbnb esint config v.18.0.0](https://www.npmjs.com/package/eslint-config-airbnb)
|
|
10
|
+
|
|
11
|
+
## Getting Started
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
## Available Scripts
|
|
15
|
+
|
|
16
|
+
In the project directory, you can run:
|
|
17
|
+
|
|
18
|
+
### `yarn start` and `yarn storybook`
|
|
19
|
+
|
|
20
|
+
Runs storybook.<br>
|
|
21
|
+
Open [http://localhost:6006](http://localhost:6006) to view it in the browser.
|
|
22
|
+
The page will reload if you make component edits.
|
|
23
|
+
|
|
24
|
+
### `yarn create`
|
|
25
|
+
|
|
26
|
+
Help you create component or util. It will automatic generate `folder`, `JSX`, `.store.jsx`.
|
|
27
|
+
|
|
28
|
+
### `yarn lint`
|
|
29
|
+
|
|
30
|
+
Runs airbnb linting config.<br>
|
|
31
|
+
Please refer to `.eslintrc` for more details in rules that are excluded/added from the initial Airbnb configuration, which can be found [here](https://www.npmjs.com/package/eslint-config-airbnb)
|
|
32
|
+
Notice: If developer using visual code IDE, download `eslint` and `prettier` extensions to help you develop.
|
|
33
|
+
|
|
34
|
+
### `yarn build`
|
|
35
|
+
|
|
36
|
+
Builds the component library using rollup.<br>
|
|
37
|
+
This runs a set of defined configurations under `rollup.config.js` file.<br>
|
|
38
|
+
Index.js & index.ts will automatic generated by `rollup.index.js` file.
|
|
39
|
+
|
|
40
|
+
|
|
41
|
+
### `yarn build-storybook`
|
|
42
|
+
|
|
43
|
+
Builds static files for storybook site. This is so it can be deployed as the docs source for the component library.
|
|
44
|
+
|
|
45
|
+
|
|
@@ -1,19 +1,19 @@
|
|
|
1
1
|
import { _ as _extends$1, a as _slicedToArray, b as _objectSpread2 } from './_rollupPluginBabelHelpers-a52356f6.js';
|
|
2
2
|
import React__default, { useCallback, useState, useRef, useEffect } from 'react';
|
|
3
3
|
import PropTypes from 'prop-types';
|
|
4
|
-
import { c as classNames } from './index-
|
|
4
|
+
import { c as classNames } from './index-c33afcb5.js';
|
|
5
5
|
import { d as debounce_1 } from './debounce-127da66c.js';
|
|
6
6
|
import { Autocomplete as Autocomplete$1 } from '@material-ui/lab';
|
|
7
7
|
import { Chip, TextField, CircularProgress } from '@material-ui/core';
|
|
8
8
|
import { Close, SearchOutlined } from '@material-ui/icons';
|
|
9
|
-
import { r as requireCreateSvgIcon, i as interopRequireDefault, a as interopRequireWildcard } from './createSvgIcon-
|
|
9
|
+
import { r as requireCreateSvgIcon, i as interopRequireDefault, a as interopRequireWildcard } from './createSvgIcon-370e163a.js';
|
|
10
10
|
import { _ as _extends, m as merge, d as defaultTheme, c as compose, b as borders, a as display, f as flexbox, g as grid, p as positions, e as palette, h as boxShadow, s as sizing, i as spacing, t as typography } from './defaultTheme-c5dd0f64.js';
|
|
11
11
|
import 'react-is';
|
|
12
12
|
import { _ as _toConsumableArray } from './toConsumableArray-c268c112.js';
|
|
13
13
|
import { styled as styled$1 } from '@material-ui/styles';
|
|
14
14
|
import { getIntl } from './globalConfig';
|
|
15
15
|
import { s as styleInject } from './style-inject.es-1f59c1d0.js';
|
|
16
|
-
import { E as Empty } from './Empty-
|
|
16
|
+
import { E as Empty } from './Empty-48685dd0.js';
|
|
17
17
|
|
|
18
18
|
var ArrowDropDown = {};
|
|
19
19
|
|
|
@@ -294,7 +294,7 @@ var Autocomplete = function Autocomplete(props) {
|
|
|
294
294
|
var handleSearch = useRef(debounce_1(function (result) {
|
|
295
295
|
return onSearch(result);
|
|
296
296
|
}, 500)).current;
|
|
297
|
-
/* WCAG 2.4.3 renderAfterDefaultValueChange 重繪會使焦點掉到 body(NVDA 改從頁面頂端讀起、
|
|
297
|
+
/* WCAG 2.4.3 renderAfterDefaultValueChange 重繪會使焦點掉到 body(NVDA 改從頁面頂端讀起、
|
|
298
298
|
蓋掉 aria-live 播報)——unmount 前記錄焦點是否在元件內,remount 後還原 */
|
|
299
299
|
var rootRef = useRef(null);
|
|
300
300
|
var hadFocusRef = useRef(false);
|
|
@@ -1,15 +1,15 @@
|
|
|
1
|
-
export { A as default } from './Autocomplete-
|
|
1
|
+
export { A as default } from './Autocomplete-e40d7145.js';
|
|
2
2
|
import './_rollupPluginBabelHelpers-a52356f6.js';
|
|
3
3
|
import 'react';
|
|
4
4
|
import 'prop-types';
|
|
5
|
-
import './index-
|
|
5
|
+
import './index-c33afcb5.js';
|
|
6
6
|
import './debounce-127da66c.js';
|
|
7
7
|
import './isObjectLike-e111475d.js';
|
|
8
8
|
import './_commonjsHelpers-70de2c37.js';
|
|
9
9
|
import '@material-ui/lab';
|
|
10
10
|
import '@material-ui/core';
|
|
11
11
|
import '@material-ui/icons';
|
|
12
|
-
import './createSvgIcon-
|
|
12
|
+
import './createSvgIcon-370e163a.js';
|
|
13
13
|
import './defaultTheme-c5dd0f64.js';
|
|
14
14
|
import 'react-is';
|
|
15
15
|
import '@material-ui/styles';
|
|
@@ -17,4 +17,4 @@ import 'react-dom';
|
|
|
17
17
|
import './toConsumableArray-c268c112.js';
|
|
18
18
|
import './globalConfig';
|
|
19
19
|
import './style-inject.es-1f59c1d0.js';
|
|
20
|
-
import './Empty-
|
|
20
|
+
import './Empty-48685dd0.js';
|
package/lib/components/Avatar.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import React__default from 'react';
|
|
2
|
-
import { c as classNames } from './index-
|
|
2
|
+
import { c as classNames } from './index-c33afcb5.js';
|
|
3
3
|
import PropTypes from 'prop-types';
|
|
4
4
|
import { Avatar as Avatar$1 } from '@material-ui/core';
|
|
5
5
|
import { s as styleInject } from './style-inject.es-1f59c1d0.js';
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
import { a as _slicedToArray } from './_rollupPluginBabelHelpers-a52356f6.js';
|
|
2
2
|
import React__default, { useState, useRef, useEffect } from 'react';
|
|
3
3
|
import PropTypes from 'prop-types';
|
|
4
|
-
import { c as classNames } from './index-
|
|
4
|
+
import { c as classNames } from './index-c33afcb5.js';
|
|
5
5
|
import { d as debounce_1 } from './debounce-127da66c.js';
|
|
6
6
|
import { Fade, NoSsr, Box } from '@material-ui/core';
|
|
7
|
-
import { r as requireCreateSvgIcon, i as interopRequireDefault, a as interopRequireWildcard } from './createSvgIcon-
|
|
7
|
+
import { r as requireCreateSvgIcon, i as interopRequireDefault, a as interopRequireWildcard } from './createSvgIcon-370e163a.js';
|
|
8
8
|
import { getIntl } from './globalConfig';
|
|
9
9
|
import { s as styleInject } from './style-inject.es-1f59c1d0.js';
|
|
10
10
|
import './isObjectLike-e111475d.js';
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import React__default, { useEffect } from 'react';
|
|
2
|
-
import { c as classNames } from './index-
|
|
2
|
+
import { c as classNames } from './index-c33afcb5.js';
|
|
3
3
|
import PropTypes from 'prop-types';
|
|
4
4
|
import { g as constant$1, h as interpolateNumber, j as color, k as interpolateRgb, l as interpolateString, n as exponent, o as ordinal, p as initRange, r as map, u as slice$1, v as bisectRight, w as formatSpecifier, x as formatPrefix, y as format, s as select } from './transform-849a452c.js';
|
|
5
5
|
import { s as styleInject } from './style-inject.es-1f59c1d0.js';
|
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
import React__default from 'react';
|
|
2
|
-
import { c as classNames } from './index-
|
|
2
|
+
import { c as classNames } from './index-c33afcb5.js';
|
|
3
3
|
import PropTypes from 'prop-types';
|
|
4
|
-
import {
|
|
4
|
+
import { Link } from 'react-router-dom';
|
|
5
5
|
import { Typography, Breadcrumbs as Breadcrumbs$1 } from '@material-ui/core';
|
|
6
|
+
import { getIntl } from './globalConfig';
|
|
6
7
|
import { s as styleInject } from './style-inject.es-1f59c1d0.js';
|
|
7
8
|
|
|
8
9
|
var css_248z$1 = ".breadcrumbItem {\n display: flex;\n opacity: 0.8;\n transition: opacity 0.1s ease-in-out;\n}\n.breadcrumbItem:hover {\n opacity: 1;\n}\n.breadcrumbItem--last {\n opacity: 1;\n font-weight: 500 !important;\n}\n.breadcrumbItem__icon {\n display: flex;\n align-items: center;\n margin-right: 4px;\n}\n.breadcrumbItem__icon svg {\n font-size: 1.125rem;\n}";
|
|
@@ -14,12 +15,14 @@ const BreadcrumbItem = _ref => {
|
|
|
14
15
|
icon,
|
|
15
16
|
text,
|
|
16
17
|
lastItem,
|
|
18
|
+
current,
|
|
17
19
|
onClick
|
|
18
20
|
} = _ref;
|
|
19
21
|
return /*#__PURE__*/React__default.createElement(Typography, {
|
|
20
22
|
color: "textPrimary",
|
|
21
23
|
className: className,
|
|
22
|
-
onClick: onClick
|
|
24
|
+
onClick: onClick,
|
|
25
|
+
"aria-current": current ? 'page' : undefined
|
|
23
26
|
}, /*#__PURE__*/React__default.createElement("div", {
|
|
24
27
|
className: classNames('breadcrumbItem', {
|
|
25
28
|
'breadcrumbItem--last': lastItem
|
|
@@ -35,6 +38,7 @@ BreadcrumbItem.defaultProps = {
|
|
|
35
38
|
icon: undefined,
|
|
36
39
|
text: undefined,
|
|
37
40
|
lastItem: undefined,
|
|
41
|
+
current: false,
|
|
38
42
|
onClick: () => {}
|
|
39
43
|
};
|
|
40
44
|
BreadcrumbItem.propTypes = {
|
|
@@ -42,6 +46,8 @@ BreadcrumbItem.propTypes = {
|
|
|
42
46
|
icon: PropTypes.node,
|
|
43
47
|
text: PropTypes.string,
|
|
44
48
|
lastItem: PropTypes.bool,
|
|
49
|
+
/** 目前所在頁(麵包屑最後一項):加 aria-current="page" */
|
|
50
|
+
current: PropTypes.bool,
|
|
45
51
|
onClick: PropTypes.func
|
|
46
52
|
};
|
|
47
53
|
|
|
@@ -53,8 +59,11 @@ var Breadcrumbs = function Breadcrumbs(_ref) {
|
|
|
53
59
|
links = _ref.links,
|
|
54
60
|
separator = _ref.separator;
|
|
55
61
|
return /*#__PURE__*/React__default.createElement(Breadcrumbs$1, {
|
|
56
|
-
className: classNames('breadcrumbs', className)
|
|
57
|
-
|
|
62
|
+
className: classNames('breadcrumbs', className)
|
|
63
|
+
/* nav 地標名稱依語系(原本中文頁也唸英文 breadcrumb) */,
|
|
64
|
+
"aria-label": getIntl().formatMessage({
|
|
65
|
+
id: 'aria.breadcrumbs'
|
|
66
|
+
}),
|
|
58
67
|
separator: separator && separator.length > 0 ? separator : undefined
|
|
59
68
|
}, Array.isArray(links) && links.length > 0 && links.map(function (_ref2, i) {
|
|
60
69
|
var icon = _ref2.icon,
|
|
@@ -63,18 +72,20 @@ var Breadcrumbs = function Breadcrumbs(_ref) {
|
|
|
63
72
|
onClick = _ref2.onClick;
|
|
64
73
|
var lastLink = i === links.length - 1;
|
|
65
74
|
|
|
66
|
-
/*
|
|
75
|
+
/* 尾巴=目前所在頁:aria-current="page" 標在這裡(WCAG 4.1.2,數位部人工檢測 GN1410200E,2026-10-07) */
|
|
67
76
|
if (lastLink) return /*#__PURE__*/React__default.createElement(BreadcrumbItem, {
|
|
68
77
|
key: i.toString(),
|
|
69
78
|
lastItem: true,
|
|
79
|
+
current: true,
|
|
70
80
|
icon: icon,
|
|
71
81
|
text: text,
|
|
72
82
|
onClick: onClick
|
|
73
83
|
});
|
|
74
84
|
|
|
75
|
-
/*
|
|
85
|
+
/* 頭、中間用 Link 而不是 NavLink:NavLink 沒加 exact 時,「首頁」的 /zh-tw/ 是所有網址的開頭,
|
|
86
|
+
會被自動標成 aria-current="page"+active,讀屏誤報首頁為目前頁(GN1410200E) */
|
|
76
87
|
if (i === 0) {
|
|
77
|
-
return /*#__PURE__*/React__default.createElement(
|
|
88
|
+
return /*#__PURE__*/React__default.createElement(Link, {
|
|
78
89
|
className: "breadcrumbs__link",
|
|
79
90
|
key: i.toString(),
|
|
80
91
|
to: href || '/',
|
|
@@ -86,7 +97,7 @@ var Breadcrumbs = function Breadcrumbs(_ref) {
|
|
|
86
97
|
}
|
|
87
98
|
|
|
88
99
|
/* 中間 */
|
|
89
|
-
return href ? /*#__PURE__*/React__default.createElement(
|
|
100
|
+
return href ? /*#__PURE__*/React__default.createElement(Link, {
|
|
90
101
|
className: "breadcrumbs__link",
|
|
91
102
|
key: i.toString(),
|
|
92
103
|
to: href,
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { c as _objectWithoutProperties, _ as _extends } from './_rollupPluginBabelHelpers-a52356f6.js';
|
|
2
2
|
import React__default from 'react';
|
|
3
3
|
import PropTypes from 'prop-types';
|
|
4
|
-
import { c as classNames } from './index-
|
|
4
|
+
import { c as classNames } from './index-c33afcb5.js';
|
|
5
5
|
import { Button as Button$1, CircularProgress } from '@material-ui/core';
|
|
6
6
|
import { s as styleInject } from './style-inject.es-1f59c1d0.js';
|
|
7
7
|
|
package/lib/components/Button.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
export { B as default } from './Button-
|
|
1
|
+
export { B as default } from './Button-8cf35bc0.js';
|
|
2
2
|
import './_rollupPluginBabelHelpers-a52356f6.js';
|
|
3
3
|
import 'react';
|
|
4
4
|
import 'prop-types';
|
|
5
|
-
import './index-
|
|
5
|
+
import './index-c33afcb5.js';
|
|
6
6
|
import '@material-ui/core';
|
|
7
7
|
import './style-inject.es-1f59c1d0.js';
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { c as _objectWithoutProperties$1, b as _objectSpread2, _ as _extends$3 } from './_rollupPluginBabelHelpers-a52356f6.js';
|
|
2
2
|
import React__default, { forwardRef, useRef, useImperativeHandle } from 'react';
|
|
3
|
-
import { a as classnames, c as classNames } from './index-
|
|
3
|
+
import { a as classnames, c as classNames } from './index-c33afcb5.js';
|
|
4
4
|
import PropTypes from 'prop-types';
|
|
5
5
|
import { c as commonjsGlobal, g as getAugmentedNamespace, a as getDefaultExportFromCjs } from './_commonjsHelpers-70de2c37.js';
|
|
6
6
|
import { s as styleInject } from './style-inject.es-1f59c1d0.js';
|
|
@@ -1,12 +1,53 @@
|
|
|
1
1
|
import { a as _slicedToArray } from './_rollupPluginBabelHelpers-a52356f6.js';
|
|
2
2
|
import React__default, { useState, useRef, useEffect } from 'react';
|
|
3
|
-
import { c as classNames } from './index-
|
|
3
|
+
import { c as classNames } from './index-c33afcb5.js';
|
|
4
4
|
import PropTypes from 'prop-types';
|
|
5
5
|
import { Typography } from '@material-ui/core';
|
|
6
|
-
import { M as MoreButton } from './MoreButton-
|
|
6
|
+
import { M as MoreButton } from './MoreButton-0b5aaef3.js';
|
|
7
|
+
import { getIntl } from './globalConfig';
|
|
7
8
|
import { s as styleInject } from './style-inject.es-1f59c1d0.js';
|
|
8
9
|
import '@material-ui/icons';
|
|
9
|
-
|
|
10
|
+
|
|
11
|
+
/*
|
|
12
|
+
* 在 HTML 字串裡另開新視窗的連結文字後面補「(另開新視窗)」
|
|
13
|
+
* (數位部人工檢測 HM1240404E,2026-10-07:要直接寫在連結文字上,不能只放 title)。
|
|
14
|
+
* convert2HtmlEntities 與時間軸資料處理共用;不對外匯出。
|
|
15
|
+
*/
|
|
16
|
+
const HINT_CLASS = 'newwindow-hint';
|
|
17
|
+
const hasHint = text => /另開新視窗|另开新窗口|new window/i.test(text);
|
|
18
|
+
const newWindowHintText = () => getIntl().formatMessage({
|
|
19
|
+
id: 'aria.newWindow'
|
|
20
|
+
});
|
|
21
|
+
|
|
22
|
+
/**
|
|
23
|
+
* @param {string} html
|
|
24
|
+
* @param {object} [options]
|
|
25
|
+
* @param {boolean} [options.treatMissingTargetAsBlank] 沒寫 target 的連結也當成另開新視窗
|
|
26
|
+
* (@daoyi/timeline 的 DOMPurify 會把它們強制改成 _blank)
|
|
27
|
+
* @param {string} [options.className] 提示 span 的 class
|
|
28
|
+
*/
|
|
29
|
+
const addNewWindowHint = function (html) {
|
|
30
|
+
let {
|
|
31
|
+
treatMissingTargetAsBlank = false,
|
|
32
|
+
className = HINT_CLASS
|
|
33
|
+
} = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
|
|
34
|
+
if (typeof html !== 'string' || html.indexOf('<a') === -1 || typeof DOMParser === 'undefined') return html;
|
|
35
|
+
const doc = new DOMParser().parseFromString(`<body>${html}</body>`, 'text/html');
|
|
36
|
+
const hint = newWindowHintText();
|
|
37
|
+
let changed = false;
|
|
38
|
+
doc.body.querySelectorAll('a[href]').forEach(a => {
|
|
39
|
+
const target = (a.getAttribute('target') || (treatMissingTargetAsBlank ? '_blank' : '')).toLowerCase();
|
|
40
|
+
if (target !== '_blank') return;
|
|
41
|
+
if (!a.getAttribute('rel')) a.setAttribute('rel', 'noopener noreferrer');
|
|
42
|
+
if (hasHint(a.textContent)) return;
|
|
43
|
+
const span = doc.createElement('span');
|
|
44
|
+
span.className = className;
|
|
45
|
+
span.textContent = hint;
|
|
46
|
+
a.appendChild(span);
|
|
47
|
+
changed = true;
|
|
48
|
+
});
|
|
49
|
+
return changed ? doc.body.innerHTML : html;
|
|
50
|
+
};
|
|
10
51
|
|
|
11
52
|
const HtmlToReactParser = require('html-to-react').Parser;
|
|
12
53
|
const htmlToReactParser = new HtmlToReactParser();
|
|
@@ -47,7 +88,8 @@ const md = require('markdown-it')({
|
|
|
47
88
|
// eslint-disable-next-line import/prefer-default-export
|
|
48
89
|
const convert2HtmlEntities = text => {
|
|
49
90
|
if (text === undefined) return '';
|
|
50
|
-
|
|
91
|
+
/* 後台文稿裡 target="_blank" 的連結,連結文字補「(另開新視窗)」(HM1240404E,2026-10-07) */
|
|
92
|
+
return htmlToReactParser.parse(addNewWindowHint(md.render(text)));
|
|
51
93
|
};
|
|
52
94
|
|
|
53
95
|
/* eslint-disable react/no-danger */
|
|
@@ -8,15 +8,15 @@ import '@material-ui/styles';
|
|
|
8
8
|
import { u as useTheme } from './useTheme-98b6cf17.js';
|
|
9
9
|
import './withTheme-3486f38b.js';
|
|
10
10
|
import axios from 'axios';
|
|
11
|
-
import { M as Modal } from './Modal-
|
|
11
|
+
import { M as Modal } from './Modal-b984f381.js';
|
|
12
12
|
import { c as commonjsGlobal, a as getDefaultExportFromCjs } from './_commonjsHelpers-70de2c37.js';
|
|
13
|
-
import { c as classNames } from './index-
|
|
13
|
+
import { c as classNames } from './index-c33afcb5.js';
|
|
14
14
|
import { Input, IconButton, Button, Box, Typography, FormControl, RadioGroup, FormControlLabel, Radio, TextField, TextareaAutosize } from '@material-ui/core';
|
|
15
|
-
import { S as Select } from './Select-
|
|
15
|
+
import { S as Select } from './Select-979f7e73.js';
|
|
16
16
|
import { VolumeUp } from '@material-ui/icons';
|
|
17
17
|
import { getIntl } from './globalConfig';
|
|
18
18
|
import { s as styleInject } from './style-inject.es-1f59c1d0.js';
|
|
19
|
-
import { r as requireCreateSvgIcon, i as interopRequireDefault, a as interopRequireWildcard } from './createSvgIcon-
|
|
19
|
+
import { r as requireCreateSvgIcon, i as interopRequireDefault, a as interopRequireWildcard } from './createSvgIcon-370e163a.js';
|
|
20
20
|
|
|
21
21
|
var isArray$1 = Array.isArray;
|
|
22
22
|
var keyList = Object.keys;
|
|
@@ -9984,7 +9984,7 @@ const VCode = _ref => {
|
|
|
9984
9984
|
}, [visible]);
|
|
9985
9985
|
const vcodeNumber = `${convert(data[0])}${convert(data[1])}${convert(data[2])}${convert(data[3])}`;
|
|
9986
9986
|
|
|
9987
|
-
/* WCAG 1.1.1 驗證碼語音替代(tltc 認證模式):speechSynthesis 逐字報讀,
|
|
9987
|
+
/* WCAG 1.1.1 驗證碼語音替代(tltc 認證模式):speechSynthesis 逐字報讀,
|
|
9988
9988
|
讓無法辨識圖片的使用者取得驗證碼內容 */
|
|
9989
9989
|
const speakVerificationCode = () => {
|
|
9990
9990
|
if ('speechSynthesis' in window) {
|
|
@@ -11677,15 +11677,23 @@ const FormItem = _ref => {
|
|
|
11677
11677
|
} = getFormItemIds(name);
|
|
11678
11678
|
/* 這些欄位型別會渲染帶 inputId 的 input,標題才能用 label htmlFor;其餘型別改以 aria-labelledby 關聯 */
|
|
11679
11679
|
const hasInputId = ['input', 'textarea', 'datePicker', 'email', 'vcode'].includes(type);
|
|
11680
|
-
/* WCAG 1.4.3 必填星號依主題深淺自動選色:formItem.scss 的 #b91c1c 只適用淺底 Modal,
|
|
11681
|
-
深色主題(如 ocean Paper #30353d)對比僅約 1.5:1(WAVE 實測被抓)→ 深色用 #ff8a80(約 5.4:1)。
|
|
11680
|
+
/* WCAG 1.4.3 必填星號依主題深淺自動選色:formItem.scss 的 #b91c1c 只適用淺底 Modal,
|
|
11681
|
+
深色主題(如 ocean Paper #30353d)對比僅約 1.5:1(WAVE 實測被抓)→ 深色用 #ff8a80(約 5.4:1)。
|
|
11682
11682
|
錯誤訊息同色,一併套用 */
|
|
11683
11683
|
const theme = useTheme();
|
|
11684
11684
|
const starStyle = theme && theme.palette && theme.palette.type === 'dark' ? {
|
|
11685
11685
|
color: '#ff8a80'
|
|
11686
11686
|
} : undefined;
|
|
11687
|
+
/* WCAG 3.3.2(數位部人工檢測 GN1330201E,2026-10-07):必填要直接寫成文字「(必填)」,
|
|
11688
|
+
原本只有 aria-hidden 的星號,檢測認定讀屏無法正確提示。文字在 label 裡,會成為欄位名稱的一部分 */
|
|
11689
|
+
const requiredMark = required && /*#__PURE__*/React__default.createElement("span", {
|
|
11690
|
+
className: "formItem__title__star",
|
|
11691
|
+
style: starStyle
|
|
11692
|
+
}, formatMessage({
|
|
11693
|
+
id: 'common.form.required'
|
|
11694
|
+
}));
|
|
11687
11695
|
|
|
11688
|
-
/* WCAG 3.3.1 欄位出錯時:aria-invalid,並以 aria-describedby 指向下方的錯誤訊息,
|
|
11696
|
+
/* WCAG 3.3.1 欄位出錯時:aria-invalid,並以 aria-describedby 指向下方的錯誤訊息,
|
|
11689
11697
|
讀屏聚焦欄位就會唸出錯在哪裡(規範 04 §2)。沒有錯誤時兩者都不輸出 */
|
|
11690
11698
|
const render = (field, _ref2) => {
|
|
11691
11699
|
let {
|
|
@@ -11750,7 +11758,13 @@ const FormItem = _ref => {
|
|
|
11750
11758
|
key: option.value
|
|
11751
11759
|
}, /*#__PURE__*/React__default.createElement(FormControlLabel, {
|
|
11752
11760
|
value: option.value,
|
|
11753
|
-
|
|
11761
|
+
htmlFor: `${inputId}-${option.value}`,
|
|
11762
|
+
control: /*#__PURE__*/React__default.createElement(Radio, {
|
|
11763
|
+
inputProps: {
|
|
11764
|
+
id: `${inputId}-${option.value}`,
|
|
11765
|
+
title: option.label
|
|
11766
|
+
}
|
|
11767
|
+
}),
|
|
11754
11768
|
label: option.label
|
|
11755
11769
|
}), option && option.desc && /*#__PURE__*/React__default.createElement(Typography, {
|
|
11756
11770
|
variant: "caption",
|
|
@@ -11807,18 +11821,10 @@ const FormItem = _ref => {
|
|
|
11807
11821
|
className: "formItem__title",
|
|
11808
11822
|
id: labelId,
|
|
11809
11823
|
htmlFor: inputId
|
|
11810
|
-
}, label,
|
|
11811
|
-
className: "formItem__title__star",
|
|
11812
|
-
style: starStyle,
|
|
11813
|
-
"aria-hidden": "true"
|
|
11814
|
-
}, "*")) : /*#__PURE__*/React__default.createElement("div", {
|
|
11824
|
+
}, label, requiredMark) : /*#__PURE__*/React__default.createElement("div", {
|
|
11815
11825
|
className: "formItem__title",
|
|
11816
11826
|
id: labelId
|
|
11817
|
-
}, label,
|
|
11818
|
-
className: "formItem__title__star",
|
|
11819
|
-
style: starStyle,
|
|
11820
|
-
"aria-hidden": "true"
|
|
11821
|
-
}, "*"))), hint && /*#__PURE__*/React__default.createElement(Box, {
|
|
11827
|
+
}, label, requiredMark)), hint && /*#__PURE__*/React__default.createElement(Box, {
|
|
11822
11828
|
my: 1
|
|
11823
11829
|
}, /*#__PURE__*/React__default.createElement(Typography, {
|
|
11824
11830
|
variant: "body2"
|
|
@@ -11987,10 +11993,10 @@ const problemMail = _ref2 => {
|
|
|
11987
11993
|
return body.join('<br />');
|
|
11988
11994
|
};
|
|
11989
11995
|
|
|
11990
|
-
var css_248z = "@charset \"UTF-8\";\n/* 送出失敗的錯誤摘要(WCAG 3.3.1,規範 04 §2);深色主題由 ContactModal 以 inline color 覆寫 */\n.contactModal__errorSummary {\n color: #b91c1c;\n border-left: 4px solid currentColor;\n padding: 0.5rem 0.75rem;\n margin-bottom: 1rem;\n /* 容器常駐 DOM(role=\"alert\" 才能可靠播報),沒有錯誤時不佔版面 */\n}\n.contactModal__errorSummary:empty {\n padding: 0;\n margin: 0;\n border: 0;\n}\n.contactModal__errorSummary__title {\n margin: 0 0 0.25rem;\n font-weight: bold;\n}\n.contactModal__errorSummary__list {\n margin: 0;\n padding-left: 1.25rem;\n}\n.contactModal__errorSummary__link {\n padding: 0;\n border: 0;\n background: none;\n color: inherit;\n font: inherit;\n text-align: left;\n text-decoration: underline;\n cursor: pointer;\n}";
|
|
11996
|
+
var css_248z = "@charset \"UTF-8\";\n/* 送出失敗的錯誤摘要(WCAG 3.3.1,規範 04 §2);深色主題由 ContactModal 以 inline color 覆寫 */\n.contactModal__errorSummary {\n color: #b91c1c;\n border-left: 4px solid currentColor;\n padding: 0.5rem 0.75rem;\n margin-bottom: 1rem;\n /* 容器常駐 DOM(role=\"alert\" 才能可靠播報),沒有錯誤時不佔版面 */\n}\n.contactModal__errorSummary:empty {\n padding: 0;\n margin: 0;\n border: 0;\n}\n.contactModal__errorSummary__title {\n margin: 0 0 0.25rem;\n font-weight: bold;\n}\n.contactModal__errorSummary__list {\n margin: 0;\n padding-left: 1.25rem;\n}\n.contactModal__errorSummary__link {\n padding: 0;\n border: 0;\n background: none;\n color: inherit;\n font: inherit;\n text-align: left;\n text-decoration: underline;\n cursor: pointer;\n}\n\n/* 必填欄位的說明(WCAG 3.3.2,GN1330201E) */\n.contactModal__requiredNote {\n margin: 0 0 1rem;\n}";
|
|
11991
11997
|
styleInject(css_248z);
|
|
11992
11998
|
|
|
11993
|
-
/* 錯誤摘要的「前往該欄位」:優先聚焦帶 inputId 的欄位;
|
|
11999
|
+
/* 錯誤摘要的「前往該欄位」:優先聚焦帶 inputId 的欄位;
|
|
11994
12000
|
單選、下拉、上傳沒有該 id,改找欄位容器內第一個看得到、可聚焦的元素 */
|
|
11995
12001
|
var focusFormItem = function focusFormItem(name) {
|
|
11996
12002
|
var _getFormItemIds = getFormItemIds(name),
|
|
@@ -12175,8 +12181,8 @@ var ContactModal = function ContactModal(_ref) {
|
|
|
12175
12181
|
setOpen(false);
|
|
12176
12182
|
};
|
|
12177
12183
|
|
|
12178
|
-
/* 送出:先取得驗證結果決定摘要內容,再交給 formik 送出。
|
|
12179
|
-
formik 送出時會把所有欄位標為 touched,欄位下方的錯誤訊息才會出現;驗證通過才會真的寄信。
|
|
12184
|
+
/* 送出:先取得驗證結果決定摘要內容,再交給 formik 送出。
|
|
12185
|
+
formik 送出時會把所有欄位標為 touched,欄位下方的錯誤訊息才會出現;驗證通過才會真的寄信。
|
|
12180
12186
|
(原本在 handleSubmit 之後同步讀取驗證結果,但 formik 2 的驗證是非同步的,第一次按送出時讀不到) */
|
|
12181
12187
|
var handleSubmit = function handleSubmit() {
|
|
12182
12188
|
formik.validateForm().then(function (errors) {
|
|
@@ -12244,7 +12250,14 @@ var ContactModal = function ContactModal(_ref) {
|
|
|
12244
12250
|
return focusFormItem(name);
|
|
12245
12251
|
}
|
|
12246
12252
|
}, message));
|
|
12247
|
-
})))),
|
|
12253
|
+
})))), template.some(function (_ref9) {
|
|
12254
|
+
var required = _ref9.required;
|
|
12255
|
+
return required;
|
|
12256
|
+
}) && /*#__PURE__*/React__default.createElement("p", {
|
|
12257
|
+
className: "contactModal__requiredNote"
|
|
12258
|
+
}, formatMessage({
|
|
12259
|
+
id: 'common.form.requiredNote'
|
|
12260
|
+
})), /*#__PURE__*/React__default.createElement(FormikProvider, {
|
|
12248
12261
|
value: formik
|
|
12249
12262
|
}, template.map(function (schema) {
|
|
12250
12263
|
return /*#__PURE__*/React__default.createElement(FormItem, _extends$1({
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
export { C as default } from './ContactModal-
|
|
1
|
+
export { C as default } from './ContactModal-19979528.js';
|
|
2
2
|
import './_rollupPluginBabelHelpers-a52356f6.js';
|
|
3
3
|
import 'react';
|
|
4
4
|
import 'prop-types';
|
|
@@ -9,16 +9,16 @@ import '@material-ui/styles';
|
|
|
9
9
|
import './useTheme-98b6cf17.js';
|
|
10
10
|
import './withTheme-3486f38b.js';
|
|
11
11
|
import 'axios';
|
|
12
|
-
import './Modal-
|
|
13
|
-
import './index-
|
|
12
|
+
import './Modal-b984f381.js';
|
|
13
|
+
import './index-c33afcb5.js';
|
|
14
14
|
import '@material-ui/core';
|
|
15
15
|
import '@material-ui/icons';
|
|
16
|
-
import './Button-
|
|
16
|
+
import './Button-8cf35bc0.js';
|
|
17
17
|
import './style-inject.es-1f59c1d0.js';
|
|
18
|
-
import './Spin-
|
|
18
|
+
import './Spin-07679812.js';
|
|
19
19
|
import './globalConfig';
|
|
20
20
|
import './_commonjsHelpers-70de2c37.js';
|
|
21
|
-
import './Select-
|
|
22
|
-
import './Empty-
|
|
23
|
-
import './createSvgIcon-
|
|
21
|
+
import './Select-979f7e73.js';
|
|
22
|
+
import './Empty-48685dd0.js';
|
|
23
|
+
import './createSvgIcon-370e163a.js';
|
|
24
24
|
import 'react-dom';
|
|
@@ -3,8 +3,8 @@ import React__default, { useState } from 'react';
|
|
|
3
3
|
import PropTypes from 'prop-types';
|
|
4
4
|
import { List, ListItem, ListItemIcon, ListItemText, IconButton, Drawer as Drawer$1, Divider } from '@material-ui/core';
|
|
5
5
|
import { DehazeRounded, CloseRounded } from '@material-ui/icons';
|
|
6
|
-
import { S as Select } from './Select-
|
|
7
|
-
import { S as SegmentedControl } from './SegmentedControl-
|
|
6
|
+
import { S as Select } from './Select-979f7e73.js';
|
|
7
|
+
import { S as SegmentedControl } from './SegmentedControl-804da0a6.js';
|
|
8
8
|
import { useRouteMatch, NavLink } from 'react-router-dom';
|
|
9
9
|
import { getIntl } from './globalConfig';
|
|
10
10
|
import { s as styleInject } from './style-inject.es-1f59c1d0.js';
|
|
@@ -54,7 +54,9 @@ const DrawerList = _ref => {
|
|
|
54
54
|
const internalProps = {
|
|
55
55
|
component: NavLink,
|
|
56
56
|
to: `${url}${path}`,
|
|
57
|
-
|
|
57
|
+
/* 不沿用 Mui-selected:各站的選中底色是為其他清單調的,套到抽屜會與文字色衝突
|
|
58
|
+
(ocean 白字配淺藍底只有 1.78:1)。選中樣式一律由 drawer__link--active 決定 */
|
|
59
|
+
activeClassName: 'drawer__link--active'
|
|
58
60
|
};
|
|
59
61
|
/* 外部連結比照桌機頁首另開新視窗,並預先提示(WCAG 3.2.2) */
|
|
60
62
|
const externalProps = {
|
|
@@ -89,7 +91,7 @@ DrawerList.propTypes = {
|
|
|
89
91
|
setOpen: PropTypes.func.isRequired
|
|
90
92
|
};
|
|
91
93
|
|
|
92
|
-
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 /* 目前所在頁:左側色條+粗體,不只靠底色(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 .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}";
|
|
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}";
|
|
93
95
|
styleInject(css_248z);
|
|
94
96
|
|
|
95
97
|
/* 語系不多時並排成分段按鈕(點一下即切換),太多才退回下拉 */
|
package/lib/components/Drawer.js
CHANGED
|
@@ -1,18 +1,18 @@
|
|
|
1
|
-
export { D as default } from './Drawer-
|
|
1
|
+
export { D as default } from './Drawer-b770014f.js';
|
|
2
2
|
import './_rollupPluginBabelHelpers-a52356f6.js';
|
|
3
3
|
import 'react';
|
|
4
4
|
import 'prop-types';
|
|
5
5
|
import '@material-ui/core';
|
|
6
6
|
import '@material-ui/icons';
|
|
7
|
-
import './Select-
|
|
8
|
-
import './index-
|
|
7
|
+
import './Select-979f7e73.js';
|
|
8
|
+
import './index-c33afcb5.js';
|
|
9
9
|
import './defaultTheme-c5dd0f64.js';
|
|
10
10
|
import 'react-is';
|
|
11
11
|
import '@material-ui/styles';
|
|
12
12
|
import './useTheme-98b6cf17.js';
|
|
13
13
|
import './withTheme-3486f38b.js';
|
|
14
|
-
import './Empty-
|
|
14
|
+
import './Empty-48685dd0.js';
|
|
15
15
|
import './style-inject.es-1f59c1d0.js';
|
|
16
16
|
import './globalConfig';
|
|
17
|
-
import './SegmentedControl-
|
|
17
|
+
import './SegmentedControl-804da0a6.js';
|
|
18
18
|
import 'react-router-dom';
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { a as _slicedToArray } from './_rollupPluginBabelHelpers-a52356f6.js';
|
|
2
2
|
import React__default, { useRef, useState } from 'react';
|
|
3
|
-
import { c as classNames } from './index-
|
|
3
|
+
import { c as classNames } from './index-c33afcb5.js';
|
|
4
4
|
import PropTypes from 'prop-types';
|
|
5
5
|
import { Button, Menu, Divider, MenuItem, ListItemIcon, ListItemText } from '@material-ui/core';
|
|
6
6
|
import { makeStyles } from '@material-ui/styles';
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import React__default from 'react';
|
|
2
2
|
import PropTypes from 'prop-types';
|
|
3
|
-
import { c as classNames } from './index-
|
|
3
|
+
import { c as classNames } from './index-c33afcb5.js';
|
|
4
4
|
import { s as styleInject } from './style-inject.es-1f59c1d0.js';
|
|
5
5
|
|
|
6
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";
|
package/lib/components/Empty.js
CHANGED