@doist/reactist 29.1.1 → 30.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +18 -0
- package/dist/reactist.cjs.development.js +6749 -1832
- package/dist/reactist.cjs.development.js.map +1 -1
- package/dist/reactist.cjs.production.min.js +1 -1
- package/dist/reactist.cjs.production.min.js.map +1 -1
- package/es/avatar/avatar.js +106 -36
- package/es/avatar/avatar.js.map +1 -1
- package/es/avatar/utils.js +17 -19
- package/es/avatar/utils.js.map +1 -1
- package/es/badge/badge.js +50 -6
- package/es/badge/badge.js.map +1 -1
- package/es/banner/banner.js +384 -41
- package/es/banner/banner.js.map +1 -1
- package/es/base-field/base-field.js +367 -77
- package/es/base-field/base-field.js.map +1 -1
- package/es/box/box.js +139 -61
- package/es/box/box.js.map +1 -1
- package/es/button/button.js +346 -36
- package/es/button/button.js.map +1 -1
- package/es/checkbox-field/checkbox-field.js +71 -48
- package/es/checkbox-field/checkbox-field.js.map +1 -1
- package/es/checkbox-field/checkbox-icon.js +88 -28
- package/es/checkbox-field/checkbox-icon.js.map +1 -1
- package/es/checkbox-field/use-fork-ref.js +15 -20
- package/es/checkbox-field/use-fork-ref.js.map +1 -1
- package/es/columns/columns.js +46 -23
- package/es/columns/columns.js.map +1 -1
- package/es/components/color-picker/color-picker.js +190 -46
- package/es/components/color-picker/color-picker.js.map +1 -1
- package/es/components/deprecated-button/deprecated-button.js +102 -9
- package/es/components/deprecated-button/deprecated-button.js.map +1 -1
- package/es/components/deprecated-button/index.js +5 -2
- package/es/components/deprecated-button/index.js.map +1 -1
- package/es/components/deprecated-dropdown/dropdown.js +234 -134
- package/es/components/deprecated-dropdown/dropdown.js.map +1 -1
- package/es/components/deprecated-dropdown/index.js +4 -1
- package/es/components/deprecated-dropdown/index.js.map +1 -1
- package/es/components/deprecated-input/index.js +5 -2
- package/es/components/deprecated-input/index.js.map +1 -1
- package/es/components/deprecated-input/input.js +27 -4
- package/es/components/deprecated-input/input.js.map +1 -1
- package/es/components/deprecated-select/select.js +110 -7
- package/es/components/deprecated-select/select.js.map +1 -1
- package/es/components/key-capturer/key-capturer.js +190 -137
- package/es/components/key-capturer/key-capturer.js.map +1 -1
- package/es/components/keyboard-shortcut/keyboard-shortcut.js +65 -45
- package/es/components/keyboard-shortcut/keyboard-shortcut.js.map +1 -1
- package/es/components/progress-bar/progress-bar.js +61 -9
- package/es/components/progress-bar/progress-bar.js.map +1 -1
- package/es/components/time/index.js +5 -2
- package/es/components/time/index.js.map +1 -1
- package/es/components/time/time-utils.js +59 -53
- package/es/components/time/time-utils.js.map +1 -1
- package/es/components/time/time.js +94 -91
- package/es/components/time/time.js.map +1 -1
- package/es/divider/divider.js +44 -5
- package/es/divider/divider.js.map +1 -1
- package/es/heading/heading.js +122 -20
- package/es/heading/heading.js.map +1 -1
- package/es/hidden/hidden.js +36 -30
- package/es/hidden/hidden.js.map +1 -1
- package/es/hidden-visually/hidden-visually.js +9 -4
- package/es/hidden-visually/hidden-visually.js.map +1 -1
- package/es/icons/alert-icon.js +145 -18
- package/es/icons/alert-icon.js.map +1 -1
- package/es/icons/banner-icon.js +213 -25
- package/es/icons/banner-icon.js.map +1 -1
- package/es/icons/close-icon.js +26 -3
- package/es/icons/close-icon.js.map +1 -1
- package/es/icons/password-hidden-icon.js +40 -6
- package/es/icons/password-hidden-icon.js.map +1 -1
- package/es/icons/password-visible-icon.js +33 -5
- package/es/icons/password-visible-icon.js.map +1 -1
- package/es/index.js +9 -9
- package/es/inline/inline.js +24 -9
- package/es/inline/inline.js.map +1 -1
- package/es/loading/loading.js +63 -17
- package/es/loading/loading.js.map +1 -1
- package/es/menu/menu.js +469 -92
- package/es/menu/menu.js.map +1 -1
- package/es/modal/modal.js +675 -112
- package/es/modal/modal.js.map +1 -1
- package/es/notice/notice.js +77 -10
- package/es/notice/notice.js.map +1 -1
- package/es/password-field/password-field.js +89 -11
- package/es/password-field/password-field.js.map +1 -1
- package/es/prose/prose.js +48 -9
- package/es/prose/prose.js.map +1 -1
- package/es/select-field/select-field.js +150 -19
- package/es/select-field/select-field.js.map +1 -1
- package/es/spinner/spinner.js +39 -6
- package/es/spinner/spinner.js.map +1 -1
- package/es/stack/stack.js +29 -17
- package/es/stack/stack.js.map +1 -1
- package/es/switch-field/switch-field.js +225 -42
- package/es/switch-field/switch-field.js.map +1 -1
- package/es/tabs/tabs.js +207 -109
- package/es/tabs/tabs.js.map +1 -1
- package/es/text/text.js +27 -17
- package/es/text/text.js.map +1 -1
- package/es/text-area/text-area.js +264 -54
- package/es/text-area/text-area.js.map +1 -1
- package/es/text-field/text-field.js +204 -31
- package/es/text-field/text-field.js.map +1 -1
- package/es/text-link/text-link.js +21 -10
- package/es/text-link/text-link.js.map +1 -1
- package/es/toast/static-toast.js +143 -25
- package/es/toast/static-toast.js.map +1 -1
- package/es/toast/toast-animation.js +159 -109
- package/es/toast/toast-animation.js.map +1 -1
- package/es/toast/use-toasts.js +309 -84
- package/es/toast/use-toasts.js.map +1 -1
- package/es/tooltip/tooltip.js +88 -32
- package/es/tooltip/tooltip.js.map +1 -1
- package/es/utils/common-helpers.js +12 -11
- package/es/utils/common-helpers.js.map +1 -1
- package/es/utils/polymorphism.js +84 -1
- package/es/utils/polymorphism.js.map +1 -1
- package/es/utils/responsive-props.js +43 -32
- package/es/utils/responsive-props.js.map +1 -1
- package/lib/avatar/avatar.js +109 -35
- package/lib/avatar/avatar.js.map +1 -1
- package/lib/avatar/utils.js +17 -19
- package/lib/avatar/utils.js.map +1 -1
- package/lib/badge/badge.js +53 -5
- package/lib/badge/badge.js.map +1 -1
- package/lib/banner/banner.js +385 -38
- package/lib/banner/banner.js.map +1 -1
- package/lib/base-field/base-field.js +366 -73
- package/lib/base-field/base-field.js.map +1 -1
- package/lib/box/box.js +141 -61
- package/lib/box/box.js.map +1 -1
- package/lib/button/button.js +347 -35
- package/lib/button/button.js.map +1 -1
- package/lib/checkbox-field/checkbox-field.js +73 -46
- package/lib/checkbox-field/checkbox-field.js.map +1 -1
- package/lib/checkbox-field/checkbox-icon.js +92 -28
- package/lib/checkbox-field/checkbox-icon.js.map +1 -1
- package/lib/checkbox-field/use-fork-ref.js +15 -20
- package/lib/checkbox-field/use-fork-ref.js.map +1 -1
- package/lib/columns/columns.js +49 -22
- package/lib/columns/columns.js.map +1 -1
- package/lib/components/color-picker/color-picker.js +189 -45
- package/lib/components/color-picker/color-picker.js.map +1 -1
- package/lib/components/deprecated-button/deprecated-button.js +104 -9
- package/lib/components/deprecated-button/deprecated-button.js.map +1 -1
- package/lib/components/deprecated-dropdown/dropdown.js +235 -133
- package/lib/components/deprecated-dropdown/dropdown.js.map +1 -1
- package/lib/components/deprecated-input/input.js +28 -4
- package/lib/components/deprecated-input/input.js.map +1 -1
- package/lib/components/deprecated-select/select.js +112 -7
- package/lib/components/deprecated-select/select.js.map +1 -1
- package/lib/components/key-capturer/key-capturer.js +188 -135
- package/lib/components/key-capturer/key-capturer.js.map +1 -1
- package/lib/components/keyboard-shortcut/keyboard-shortcut.js +67 -45
- package/lib/components/keyboard-shortcut/keyboard-shortcut.js.map +1 -1
- package/lib/components/progress-bar/progress-bar.js +60 -8
- package/lib/components/progress-bar/progress-bar.js.map +1 -1
- package/lib/components/time/time-utils.js +59 -53
- package/lib/components/time/time-utils.js.map +1 -1
- package/lib/components/time/time.js +93 -90
- package/lib/components/time/time.js.map +1 -1
- package/lib/divider/divider.js +47 -4
- package/lib/divider/divider.js.map +1 -1
- package/lib/heading/heading.js +125 -19
- package/lib/heading/heading.js.map +1 -1
- package/lib/hidden/hidden.js +39 -29
- package/lib/hidden/hidden.js.map +1 -1
- package/lib/hidden-visually/hidden-visually.js +11 -3
- package/lib/hidden-visually/hidden-visually.js.map +1 -1
- package/lib/icons/alert-icon.js +149 -18
- package/lib/icons/alert-icon.js.map +1 -1
- package/lib/icons/banner-icon.js +217 -25
- package/lib/icons/banner-icon.js.map +1 -1
- package/lib/icons/close-icon.js +29 -3
- package/lib/icons/close-icon.js.map +1 -1
- package/lib/icons/password-hidden-icon.js +43 -6
- package/lib/icons/password-hidden-icon.js.map +1 -1
- package/lib/icons/password-visible-icon.js +36 -5
- package/lib/icons/password-visible-icon.js.map +1 -1
- package/lib/inline/inline.js +27 -8
- package/lib/inline/inline.js.map +1 -1
- package/lib/loading/loading.js +67 -17
- package/lib/loading/loading.js.map +1 -1
- package/lib/menu/menu.js +471 -91
- package/lib/menu/menu.js.map +1 -1
- package/lib/modal/modal.js +671 -106
- package/lib/modal/modal.js.map +1 -1
- package/lib/notice/notice.js +75 -8
- package/lib/notice/notice.js.map +1 -1
- package/lib/password-field/password-field.js +92 -10
- package/lib/password-field/password-field.js.map +1 -1
- package/lib/prose/prose.js +51 -8
- package/lib/prose/prose.js.map +1 -1
- package/lib/select-field/select-field.js +152 -17
- package/lib/select-field/select-field.js.map +1 -1
- package/lib/spinner/spinner.js +39 -6
- package/lib/spinner/spinner.js.map +1 -1
- package/lib/stack/stack.js +29 -15
- package/lib/stack/stack.js.map +1 -1
- package/lib/switch-field/switch-field.js +225 -38
- package/lib/switch-field/switch-field.js.map +1 -1
- package/lib/tabs/tabs.js +207 -107
- package/lib/tabs/tabs.js.map +1 -1
- package/lib/text/text.js +30 -16
- package/lib/text/text.js.map +1 -1
- package/lib/text-area/text-area.js +264 -52
- package/lib/text-area/text-area.js.map +1 -1
- package/lib/text-field/text-field.js +207 -30
- package/lib/text-field/text-field.js.map +1 -1
- package/lib/text-link/text-link.js +24 -9
- package/lib/text-link/text-link.js.map +1 -1
- package/lib/toast/static-toast.js +142 -22
- package/lib/toast/static-toast.js.map +1 -1
- package/lib/toast/toast-animation.js +158 -108
- package/lib/toast/toast-animation.js.map +1 -1
- package/lib/toast/use-toasts.js +310 -82
- package/lib/toast/use-toasts.js.map +1 -1
- package/lib/tooltip/tooltip.js +87 -31
- package/lib/tooltip/tooltip.js.map +1 -1
- package/lib/utils/common-helpers.js +12 -11
- package/lib/utils/common-helpers.js.map +1 -1
- package/lib/utils/polymorphism.js +84 -1
- package/lib/utils/polymorphism.js.map +1 -1
- package/lib/utils/responsive-props.js +43 -32
- package/lib/utils/responsive-props.js.map +1 -1
- package/package.json +12 -3
|
@@ -1,70 +1,90 @@
|
|
|
1
|
-
import
|
|
1
|
+
import _extends from '@babel/runtime/helpers/extends';
|
|
2
|
+
import _objectWithoutProperties from '@babel/runtime/helpers/objectWithoutProperties';
|
|
2
3
|
import * as React from 'react';
|
|
3
4
|
import classNames from 'classnames';
|
|
4
5
|
|
|
6
|
+
const _excluded = ["children", "className", "translateKey", "isMac"];
|
|
7
|
+
|
|
5
8
|
//
|
|
6
9
|
// Support for setting up how to translate modifiers globally.
|
|
7
10
|
//
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
+
|
|
12
|
+
let globalTranslateKey = key => key;
|
|
13
|
+
KeyboardShortcut.setTranslateKey = tr => {
|
|
14
|
+
globalTranslateKey = tr;
|
|
11
15
|
};
|
|
12
16
|
function translateKeyMac(key) {
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
17
|
+
switch (key.toLowerCase()) {
|
|
18
|
+
case 'cmd':
|
|
19
|
+
case 'mod':
|
|
20
|
+
return '⌘';
|
|
21
|
+
case 'control':
|
|
22
|
+
case 'ctrl':
|
|
23
|
+
return '⌃';
|
|
24
|
+
case 'alt':
|
|
25
|
+
return '⌥';
|
|
26
|
+
case 'shift':
|
|
27
|
+
return '⇧';
|
|
28
|
+
case 'space':
|
|
29
|
+
return '␣';
|
|
30
|
+
default:
|
|
31
|
+
return key;
|
|
32
|
+
}
|
|
29
33
|
}
|
|
34
|
+
|
|
30
35
|
//
|
|
31
36
|
// Some helpers
|
|
32
37
|
//
|
|
38
|
+
|
|
33
39
|
function capitalize(str) {
|
|
34
|
-
|
|
40
|
+
return str.charAt(0).toUpperCase() + str.slice(1).toLowerCase();
|
|
35
41
|
}
|
|
36
42
|
function hasModifiers(str) {
|
|
37
|
-
|
|
43
|
+
return /\b(mod|cmd|ctrl|control|alt|shift)\b/i.test(str);
|
|
38
44
|
}
|
|
39
45
|
function isSpecialKey(str) {
|
|
40
|
-
|
|
46
|
+
return /^(mod|cmd|ctrl|control|alt|shift|space|super)$/i.test(str);
|
|
41
47
|
}
|
|
42
48
|
function parseKeys(shortcut, isMac, translateKey) {
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
}
|
|
49
|
-
if (_hasModifiers && str.length === 1) {
|
|
50
|
-
return str.toUpperCase();
|
|
51
|
-
}
|
|
52
|
-
return str;
|
|
49
|
+
const t = isMac ? translateKeyMac : translateKey;
|
|
50
|
+
const _hasModifiers = hasModifiers(shortcut);
|
|
51
|
+
function mapIndividualKey(str) {
|
|
52
|
+
if (isSpecialKey(str)) {
|
|
53
|
+
return capitalize(t(str));
|
|
53
54
|
}
|
|
54
|
-
if (
|
|
55
|
-
|
|
55
|
+
if (_hasModifiers && str.length === 1) {
|
|
56
|
+
return str.toUpperCase();
|
|
56
57
|
}
|
|
57
|
-
return
|
|
58
|
+
return str;
|
|
59
|
+
}
|
|
60
|
+
if (!isMac) {
|
|
61
|
+
shortcut = shortcut.replace(/\b(mod|cmd)\b/i, 'ctrl');
|
|
62
|
+
}
|
|
63
|
+
return shortcut.split(/\s*\+\s*/).map(mapIndividualKey);
|
|
58
64
|
}
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
65
|
+
|
|
66
|
+
//
|
|
67
|
+
// The KeyboardShortcut component
|
|
68
|
+
//
|
|
69
|
+
|
|
70
|
+
function KeyboardShortcut(_ref) {
|
|
71
|
+
let {
|
|
72
|
+
children,
|
|
73
|
+
className,
|
|
74
|
+
translateKey = globalTranslateKey,
|
|
75
|
+
isMac = navigator.platform?.toUpperCase().includes('MAC') ?? false
|
|
76
|
+
} = _ref,
|
|
77
|
+
props = _objectWithoutProperties(_ref, _excluded);
|
|
78
|
+
const shortcuts = typeof children === 'string' ? [children] : children;
|
|
79
|
+
return /*#__PURE__*/React.createElement("span", _extends({
|
|
80
|
+
className: classNames('reactist_keyboard_shortcut', className, {
|
|
81
|
+
'reactist_keyboard_shortcut--macos': isMac
|
|
82
|
+
})
|
|
83
|
+
}, props), shortcuts.map((shortcut, i) => /*#__PURE__*/React.createElement(React.Fragment, {
|
|
84
|
+
key: i
|
|
85
|
+
}, i === 0 ? null : ', ', /*#__PURE__*/React.createElement("kbd", null, parseKeys(shortcut, isMac, translateKey).map((key, j) => /*#__PURE__*/React.createElement("kbd", {
|
|
86
|
+
key: j
|
|
87
|
+
}, key))))));
|
|
68
88
|
}
|
|
69
89
|
|
|
70
90
|
export { KeyboardShortcut };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"keyboard-shortcut.js","sources":["../../../src/components/keyboard-shortcut/keyboard-shortcut.tsx"],"sourcesContent":[null],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"keyboard-shortcut.js","sources":["../../../src/components/keyboard-shortcut/keyboard-shortcut.tsx"],"sourcesContent":["import * as React from 'react'\n\nimport classNames from 'classnames'\n\n//\n// Support for setting up how to translate modifiers globally.\n//\n\nlet globalTranslateKey = (key: string) => key\n\ntype TranslateKey = typeof globalTranslateKey\n\nKeyboardShortcut.setTranslateKey = (tr: TranslateKey) => {\n globalTranslateKey = tr\n}\n\nfunction translateKeyMac(key: string) {\n switch (key.toLowerCase()) {\n case 'cmd':\n case 'mod':\n return '⌘'\n case 'control':\n case 'ctrl':\n return '⌃'\n case 'alt':\n return '⌥'\n case 'shift':\n return '⇧'\n case 'space':\n return '␣'\n default:\n return key\n }\n}\n\n//\n// Some helpers\n//\n\nfunction capitalize(str: string) {\n return str.charAt(0).toUpperCase() + str.slice(1).toLowerCase()\n}\n\nfunction hasModifiers(str: string) {\n return /\\b(mod|cmd|ctrl|control|alt|shift)\\b/i.test(str)\n}\n\nfunction isSpecialKey(str: string) {\n return /^(mod|cmd|ctrl|control|alt|shift|space|super)$/i.test(str)\n}\n\nfunction parseKeys(shortcut: string, isMac: boolean, translateKey: TranslateKey) {\n const t = isMac ? translateKeyMac : translateKey\n const _hasModifiers = hasModifiers(shortcut)\n\n function mapIndividualKey(str: string) {\n if (isSpecialKey(str)) {\n return capitalize(t(str))\n }\n if (_hasModifiers && str.length === 1) {\n return str.toUpperCase()\n }\n return str\n }\n\n if (!isMac) {\n shortcut = shortcut.replace(/\\b(mod|cmd)\\b/i, 'ctrl')\n }\n\n return shortcut.split(/\\s*\\+\\s*/).map(mapIndividualKey)\n}\n\n//\n// The KeyboardShortcut component\n//\n\ntype NativeSpanProps = React.DetailedHTMLProps<\n React.HTMLAttributes<HTMLSpanElement>,\n HTMLSpanElement\n>\n\ntype Props = Omit<NativeSpanProps, 'children'> & {\n /**\n * The shortcut to be represented as markup. It supports an intuitive syntax where you can\n * combine modifiers (cmd, ctrl, shift, alt) with single keys all concatenated with plus signs.\n * You can also pass various shortcuts as an array, which will be depicted separated by commas.\n */\n children: string | string[]\n /**\n * A function that allows you to change how some key names are represented. This may be useful,\n * for instance, to translate modifier names that are expressed differently in other languages\n * (e.g. `Ctrl` is named `Strg` in German).\n *\n * It defaults to a global version that leaves the key as is. You can pass your version as a\n * prop, or you can also set your own version of this global default one, so you don't need to\n * pass your own on each invocation of this component.\n *\n * ```js\n * import { KeyboardShortcut } from '@doist/reactist'\n * KeyboardShortcut.setTranslateKey = key => { ... }\n * ```\n *\n * Note: When the component detects the macOS operating system it bypasses key translation for\n * most modifiers and uses macOS-specific symbols. See the `isMac` prop for details.\n */\n translateKey?: TranslateKey\n /**\n * This prop is not meant to be passed. The component will automatically initialize it to `true`\n * if it detects that the current browser / operating system is on macOS, in which case modifier\n * keys are represented using macOS' notation (e.g. ⌘ ⌃ ⌥ ⇧).\n *\n * Though it is discouraged, if you don't want this special treatment in macOS, you can pass\n * `isMac={false}` in all invocations of this component.\n */\n isMac?: boolean\n}\n\nfunction KeyboardShortcut({\n children,\n className,\n translateKey = globalTranslateKey,\n isMac = navigator.platform?.toUpperCase().includes('MAC') ?? false,\n ...props\n}: Props) {\n const shortcuts = typeof children === 'string' ? [children] : children\n return (\n <span\n className={classNames('reactist_keyboard_shortcut', className, {\n 'reactist_keyboard_shortcut--macos': isMac,\n })}\n {...props}\n >\n {shortcuts.map((shortcut, i) => (\n <React.Fragment key={i}>\n {i === 0 ? null : ', '}\n <kbd>\n {parseKeys(shortcut, isMac, translateKey).map((key, j) => (\n <kbd key={j}>{key}</kbd>\n ))}\n </kbd>\n </React.Fragment>\n ))}\n </span>\n )\n}\n\nexport { KeyboardShortcut }\n"],"names":["globalTranslateKey","key","KeyboardShortcut","setTranslateKey","tr","translateKeyMac","toLowerCase","capitalize","str","charAt","toUpperCase","slice","hasModifiers","test","isSpecialKey","parseKeys","shortcut","isMac","translateKey","t","_hasModifiers","mapIndividualKey","length","replace","split","map","_ref","children","className","navigator","platform","includes","props","_objectWithoutProperties","_excluded","shortcuts","React","createElement","_extends","classNames","i","Fragment","j"],"mappings":"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"}
|
|
@@ -1,16 +1,68 @@
|
|
|
1
|
+
import { c } from 'react-compiler-runtime';
|
|
1
2
|
import * as React from 'react';
|
|
2
3
|
import classNames from 'classnames';
|
|
3
|
-
import { HiddenVisually } from '../../hidden-visually/hidden-visually.js';
|
|
4
4
|
import modules_a0e70af1 from './progress-bar.module.css.js';
|
|
5
|
+
import { HiddenVisually } from '../../hidden-visually/hidden-visually.js';
|
|
5
6
|
|
|
6
|
-
function ProgressBar(
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
7
|
+
function ProgressBar(t0) {
|
|
8
|
+
const $ = c(11);
|
|
9
|
+
const {
|
|
10
|
+
fillPercentage: t1,
|
|
11
|
+
className,
|
|
12
|
+
"aria-valuetext": ariaValuetext
|
|
13
|
+
} = t0;
|
|
14
|
+
const fillPercentage = t1 === undefined ? 0 : t1;
|
|
15
|
+
let t2;
|
|
16
|
+
if ($[0] !== className) {
|
|
17
|
+
t2 = classNames(modules_a0e70af1.progressBar, className);
|
|
18
|
+
$[0] = className;
|
|
19
|
+
$[1] = t2;
|
|
20
|
+
} else {
|
|
21
|
+
t2 = $[1];
|
|
22
|
+
}
|
|
23
|
+
const finalClassName = t2;
|
|
24
|
+
const width = fillPercentage < 0 ? 0 : fillPercentage > 100 ? 100 : fillPercentage;
|
|
25
|
+
const t3 = `${width}%`;
|
|
26
|
+
let t4;
|
|
27
|
+
if ($[2] !== t3) {
|
|
28
|
+
t4 = /*#__PURE__*/React.createElement("div", {
|
|
29
|
+
className: modules_a0e70af1.inner,
|
|
30
|
+
style: {
|
|
31
|
+
width: t3
|
|
32
|
+
}
|
|
33
|
+
});
|
|
34
|
+
$[2] = t3;
|
|
35
|
+
$[3] = t4;
|
|
36
|
+
} else {
|
|
37
|
+
t4 = $[3];
|
|
38
|
+
}
|
|
39
|
+
const t5 = ariaValuetext ?? undefined;
|
|
40
|
+
let t6;
|
|
41
|
+
if ($[4] !== t5 || $[5] !== width) {
|
|
42
|
+
t6 = /*#__PURE__*/React.createElement(HiddenVisually, null, /*#__PURE__*/React.createElement("progress", {
|
|
43
|
+
value: width,
|
|
44
|
+
max: 100,
|
|
45
|
+
"aria-valuetext": t5
|
|
46
|
+
}));
|
|
47
|
+
$[4] = t5;
|
|
48
|
+
$[5] = width;
|
|
49
|
+
$[6] = t6;
|
|
50
|
+
} else {
|
|
51
|
+
t6 = $[6];
|
|
52
|
+
}
|
|
53
|
+
let t7;
|
|
54
|
+
if ($[7] !== finalClassName || $[8] !== t4 || $[9] !== t6) {
|
|
55
|
+
t7 = /*#__PURE__*/React.createElement("div", {
|
|
56
|
+
className: finalClassName
|
|
57
|
+
}, t4, t6);
|
|
58
|
+
$[7] = finalClassName;
|
|
59
|
+
$[8] = t4;
|
|
60
|
+
$[9] = t6;
|
|
61
|
+
$[10] = t7;
|
|
62
|
+
} else {
|
|
63
|
+
t7 = $[10];
|
|
64
|
+
}
|
|
65
|
+
return t7;
|
|
14
66
|
}
|
|
15
67
|
ProgressBar.displayName = 'ProgressBar';
|
|
16
68
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"progress-bar.js","sources":["../../../src/components/progress-bar/progress-bar.tsx"],"sourcesContent":[
|
|
1
|
+
{"version":3,"file":"progress-bar.js","sources":["../../../src/components/progress-bar/progress-bar.tsx"],"sourcesContent":["import * as React from 'react'\n\nimport classNames from 'classnames'\n\nimport { HiddenVisually } from '../../hidden-visually'\n\nimport styles from './progress-bar.module.css'\n\ntype Props = {\n /** Additional css class applied to the progress bar. */\n className?: string\n /** How much of the progress bar should be filled. Number between 0 and 100 inclusive. */\n fillPercentage?: number\n /** Defines the human readable text alternative for assitive technologies. */\n 'aria-valuetext'?: string\n}\nfunction ProgressBar({ fillPercentage = 0, className, 'aria-valuetext': ariaValuetext }: Props) {\n const finalClassName = classNames(styles.progressBar, className)\n const width = fillPercentage < 0 ? 0 : fillPercentage > 100 ? 100 : fillPercentage\n return (\n <div className={finalClassName}>\n <div className={styles.inner} style={{ width: `${width}%` }} />\n <HiddenVisually>\n <progress value={width} max={100} aria-valuetext={ariaValuetext ?? undefined} />\n </HiddenVisually>\n </div>\n )\n}\nProgressBar.displayName = 'ProgressBar'\n\nexport { ProgressBar }\n"],"names":["ProgressBar","t0","$","_c","fillPercentage","t1","className","ariaValuetext","undefined","t2","classNames","styles","progressBar","finalClassName","width","t3","t4","React","createElement","inner","style","t5","t6","HiddenVisually","max","t7","displayName"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../../../src/components/time/index.ts"],"sourcesContent":["import { Time } from './time'\n\nexport default Time\n"],"names":["Time"],"mappings":";;AAEA,WAAeA,MAAI;;;;"}
|
|
@@ -2,59 +2,65 @@ import dayjs from 'dayjs';
|
|
|
2
2
|
import LocalizedFormat from 'dayjs/plugin/localizedFormat';
|
|
3
3
|
|
|
4
4
|
dayjs.extend(LocalizedFormat);
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
5
|
+
const TimeUtils = {
|
|
6
|
+
SHORT_FORMAT_CURRENT_YEAR: 'L',
|
|
7
|
+
SHORT_FORMAT_PAST_YEAR: 'LL',
|
|
8
|
+
LONG_FORMAT: 'LL, LT',
|
|
9
|
+
timeAgo(timestamp, config = {}) {
|
|
10
|
+
const {
|
|
11
|
+
locale = 'en',
|
|
12
|
+
shortFormatCurrentYear = this.SHORT_FORMAT_CURRENT_YEAR,
|
|
13
|
+
shortFormatPastYear = this.SHORT_FORMAT_PAST_YEAR,
|
|
14
|
+
daysSuffix = 'd',
|
|
15
|
+
hoursSuffix = 'h',
|
|
16
|
+
minutesSuffix = 'm',
|
|
17
|
+
momentsAgo = 'moments ago'
|
|
18
|
+
} = config;
|
|
19
|
+
const now = dayjs();
|
|
20
|
+
const date = dayjs(timestamp * 1000);
|
|
21
|
+
date.locale(locale);
|
|
22
|
+
const diffMinutes = now.diff(date, 'minute');
|
|
23
|
+
const diffHours = now.diff(date, 'hour');
|
|
24
|
+
const diffDays = now.diff(date, 'day');
|
|
25
|
+
if (diffDays > 1) {
|
|
26
|
+
if (date.isSame(now, 'year')) {
|
|
27
|
+
return date.format(shortFormatCurrentYear);
|
|
28
|
+
} else {
|
|
29
|
+
return date.format(shortFormatPastYear);
|
|
30
|
+
}
|
|
31
|
+
} else if (diffDays === 1) {
|
|
32
|
+
return `${diffDays}${daysSuffix}`;
|
|
33
|
+
} else if (diffHours > 0 && diffHours <= 23) {
|
|
34
|
+
return `${diffHours}${hoursSuffix}`;
|
|
35
|
+
} else if (diffMinutes > 0 && diffMinutes <= 59) {
|
|
36
|
+
return `${diffMinutes}${minutesSuffix}`;
|
|
37
|
+
} else {
|
|
38
|
+
return momentsAgo;
|
|
39
|
+
}
|
|
40
|
+
},
|
|
41
|
+
formatTime(timestamp, config = {}) {
|
|
42
|
+
const {
|
|
43
|
+
locale = 'en',
|
|
44
|
+
shortFormatCurrentYear = this.SHORT_FORMAT_CURRENT_YEAR,
|
|
45
|
+
shortFormatPastYear = this.SHORT_FORMAT_PAST_YEAR
|
|
46
|
+
} = config;
|
|
47
|
+
const date = dayjs(timestamp * 1000);
|
|
48
|
+
date.locale(locale);
|
|
49
|
+
if (date.isSame(dayjs(), 'year')) {
|
|
50
|
+
return date.format(shortFormatCurrentYear);
|
|
51
|
+
} else {
|
|
52
|
+
return date.format(shortFormatPastYear);
|
|
53
|
+
}
|
|
54
|
+
},
|
|
55
|
+
formatTimeLong(timestamp, config = {}) {
|
|
56
|
+
const {
|
|
57
|
+
locale = 'en',
|
|
58
|
+
longFormat = this.LONG_FORMAT
|
|
59
|
+
} = config;
|
|
60
|
+
const date = dayjs(timestamp * 1000);
|
|
61
|
+
date.locale(locale);
|
|
62
|
+
return date.format(longFormat);
|
|
63
|
+
}
|
|
58
64
|
};
|
|
59
65
|
|
|
60
66
|
export { TimeUtils };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"time-utils.js","sources":["../../../src/components/time/time-utils.ts"],"sourcesContent":[
|
|
1
|
+
{"version":3,"file":"time-utils.js","sources":["../../../src/components/time/time-utils.ts"],"sourcesContent":["import dayjs from 'dayjs'\n/**\n * There's a problem with our setup where the default export from\n * localizedFormat (and likely every other dayjs plugin) isn't properly\n * recognized. The proposed workarounds (importing with `.js` ending, or adding\n * `allowSyntheticDefaultImports` to the tsconfig) either broke linting or type\n * checking. After spending some time on this it was decided that further\n * investigations are not worth it, the code works and the eslint ignore is fine.\n * ref: https://github.com/iamkun/dayjs/issues/593\n * ref: https://day.js.org/docs/en/installation/typescript\n */\n// eslint-disable-next-line import/default\nimport LocalizedFormat from 'dayjs/plugin/localizedFormat'\n\ndayjs.extend(LocalizedFormat)\n\ntype TimeConfig = {\n locale?: string\n longFormat?: string\n shortFormatCurrentYear?: string\n shortFormatPastYear?: string\n daysSuffix?: string\n hoursSuffix?: string\n minutesSuffix?: string\n momentsAgo?: string\n}\n\nconst TimeUtils = {\n SHORT_FORMAT_CURRENT_YEAR: 'L',\n SHORT_FORMAT_PAST_YEAR: 'LL',\n LONG_FORMAT: 'LL, LT',\n\n timeAgo(timestamp: number, config: TimeConfig = {}) {\n const {\n locale = 'en',\n shortFormatCurrentYear = this.SHORT_FORMAT_CURRENT_YEAR,\n shortFormatPastYear = this.SHORT_FORMAT_PAST_YEAR,\n daysSuffix = 'd',\n hoursSuffix = 'h',\n minutesSuffix = 'm',\n momentsAgo = 'moments ago',\n } = config\n const now = dayjs()\n const date = dayjs(timestamp * 1000)\n date.locale(locale)\n const diffMinutes = now.diff(date, 'minute')\n const diffHours = now.diff(date, 'hour')\n const diffDays = now.diff(date, 'day')\n\n if (diffDays > 1) {\n if (date.isSame(now, 'year')) {\n return date.format(shortFormatCurrentYear)\n } else {\n return date.format(shortFormatPastYear)\n }\n } else if (diffDays === 1) {\n return `${diffDays}${daysSuffix}`\n } else if (diffHours > 0 && diffHours <= 23) {\n return `${diffHours}${hoursSuffix}`\n } else if (diffMinutes > 0 && diffMinutes <= 59) {\n return `${diffMinutes}${minutesSuffix}`\n } else {\n return momentsAgo\n }\n },\n\n formatTime(timestamp: number, config: TimeConfig = {}) {\n const {\n locale = 'en',\n shortFormatCurrentYear = this.SHORT_FORMAT_CURRENT_YEAR,\n shortFormatPastYear = this.SHORT_FORMAT_PAST_YEAR,\n } = config\n const date = dayjs(timestamp * 1000)\n date.locale(locale)\n if (date.isSame(dayjs(), 'year')) {\n return date.format(shortFormatCurrentYear)\n } else {\n return date.format(shortFormatPastYear)\n }\n },\n\n formatTimeLong(timestamp: number, config: TimeConfig = {}) {\n const { locale = 'en', longFormat = this.LONG_FORMAT } = config\n const date = dayjs(timestamp * 1000)\n date.locale(locale)\n return date.format(longFormat)\n },\n}\n\nexport type { TimeConfig }\nexport { TimeUtils }\n"],"names":["dayjs","extend","LocalizedFormat","TimeUtils","SHORT_FORMAT_CURRENT_YEAR","SHORT_FORMAT_PAST_YEAR","LONG_FORMAT","timeAgo","timestamp","config","locale","shortFormatCurrentYear","shortFormatPastYear","daysSuffix","hoursSuffix","minutesSuffix","momentsAgo","now","date","diffMinutes","diff","diffHours","diffDays","isSame","format","formatTime","formatTimeLong","longFormat"],"mappings":"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"}
|
|
@@ -1,100 +1,103 @@
|
|
|
1
|
-
import { __extends } from 'tslib';
|
|
2
1
|
import * as React from 'react';
|
|
3
|
-
import { Tooltip } from '../../tooltip/tooltip.js';
|
|
4
2
|
import { TimeUtils } from './time-utils.js';
|
|
3
|
+
import { Tooltip } from '../../tooltip/tooltip.js';
|
|
5
4
|
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
mouseY: undefined,
|
|
16
|
-
};
|
|
17
|
-
return _this;
|
|
18
|
-
}
|
|
19
|
-
Time.prototype.componentDidMount = function () {
|
|
20
|
-
if (this.props.refresh) {
|
|
21
|
-
this._refresh();
|
|
22
|
-
}
|
|
23
|
-
};
|
|
24
|
-
Time.prototype.componentDidUpdate = function (prevProps) {
|
|
25
|
-
if (!prevProps.refresh && this.props.refresh) {
|
|
26
|
-
this._refresh();
|
|
27
|
-
}
|
|
28
|
-
if (prevProps.refresh && !this.props.refresh) {
|
|
29
|
-
if (this.refreshInterval) {
|
|
30
|
-
clearTimeout(this.refreshInterval);
|
|
31
|
-
}
|
|
32
|
-
}
|
|
33
|
-
};
|
|
34
|
-
Time.prototype.componentWillUnmount = function () {
|
|
35
|
-
if (this.refreshInterval) {
|
|
36
|
-
clearTimeout(this.refreshInterval);
|
|
37
|
-
}
|
|
38
|
-
};
|
|
39
|
-
Time.prototype._setHovered = function (hovered, event) {
|
|
40
|
-
var _a = this.state, mouseX = _a.mouseX, mouseY = _a.mouseY;
|
|
41
|
-
var clientX = event.clientX, clientY = event.clientY;
|
|
42
|
-
if (clientX !== mouseX || clientY !== mouseY) {
|
|
43
|
-
// mouse has moved
|
|
44
|
-
this.setState(function () { return ({
|
|
45
|
-
hovered: hovered,
|
|
46
|
-
mouseX: clientX,
|
|
47
|
-
mouseY: clientY,
|
|
48
|
-
}); });
|
|
49
|
-
}
|
|
50
|
-
};
|
|
51
|
-
Time.prototype._renderTime = function (config) {
|
|
52
|
-
if (!this.props.time) {
|
|
53
|
-
return;
|
|
54
|
-
}
|
|
55
|
-
if (this.state.hovered) {
|
|
56
|
-
if (this.props.expandFullyOnHover && !this.props.tooltipOnHover) {
|
|
57
|
-
return TimeUtils.formatTimeLong(this.props.time, config);
|
|
58
|
-
}
|
|
59
|
-
if (this.props.expandOnHover && !this.props.tooltipOnHover) {
|
|
60
|
-
return TimeUtils.formatTime(this.props.time, config);
|
|
61
|
-
}
|
|
62
|
-
}
|
|
63
|
-
return TimeUtils.timeAgo(this.props.time, config);
|
|
64
|
-
};
|
|
65
|
-
Time.prototype._refresh = function () {
|
|
66
|
-
var _this = this;
|
|
67
|
-
this.refreshInterval = setInterval(function () {
|
|
68
|
-
_this.forceUpdate();
|
|
69
|
-
}, DELAY);
|
|
70
|
-
};
|
|
71
|
-
Time.prototype.render = function () {
|
|
72
|
-
var _this = this;
|
|
73
|
-
var className = 'reactist_time';
|
|
74
|
-
if (this.props.className) {
|
|
75
|
-
className = this.props.className;
|
|
76
|
-
}
|
|
77
|
-
var timeComponent = this._renderTime(this.props.config);
|
|
78
|
-
return (React.createElement("time", { className: className, onMouseEnter: function (event) { return _this._setHovered(true, event); }, onMouseLeave: function (event) { return _this._setHovered(false, event); } }, this.props.tooltipOnHover ? (React.createElement(Tooltip, { content: this.props.tooltip ||
|
|
79
|
-
(this.props.time &&
|
|
80
|
-
TimeUtils.formatTimeLong(this.props.time, this.props.config)) },
|
|
81
|
-
React.createElement("span", null, timeComponent))) : (timeComponent)));
|
|
5
|
+
const DELAY = 60000;
|
|
6
|
+
class Time extends React.Component {
|
|
7
|
+
constructor(props) {
|
|
8
|
+
super(props);
|
|
9
|
+
this.refreshInterval = undefined;
|
|
10
|
+
this.state = {
|
|
11
|
+
hovered: false,
|
|
12
|
+
mouseX: undefined,
|
|
13
|
+
mouseY: undefined
|
|
82
14
|
};
|
|
83
|
-
|
|
84
|
-
|
|
15
|
+
}
|
|
16
|
+
componentDidMount() {
|
|
17
|
+
if (this.props.refresh) {
|
|
18
|
+
this._refresh();
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
componentDidUpdate(prevProps) {
|
|
22
|
+
if (!prevProps.refresh && this.props.refresh) {
|
|
23
|
+
this._refresh();
|
|
24
|
+
}
|
|
25
|
+
if (prevProps.refresh && !this.props.refresh) {
|
|
26
|
+
if (this.refreshInterval) {
|
|
27
|
+
clearTimeout(this.refreshInterval);
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
componentWillUnmount() {
|
|
32
|
+
if (this.refreshInterval) {
|
|
33
|
+
clearTimeout(this.refreshInterval);
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
_setHovered(hovered, event) {
|
|
37
|
+
const {
|
|
38
|
+
mouseX,
|
|
39
|
+
mouseY
|
|
40
|
+
} = this.state;
|
|
41
|
+
const {
|
|
42
|
+
clientX,
|
|
43
|
+
clientY
|
|
44
|
+
} = event;
|
|
45
|
+
if (clientX !== mouseX || clientY !== mouseY) {
|
|
46
|
+
// mouse has moved
|
|
47
|
+
this.setState(() => ({
|
|
48
|
+
hovered,
|
|
49
|
+
mouseX: clientX,
|
|
50
|
+
mouseY: clientY
|
|
51
|
+
}));
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
_renderTime(config) {
|
|
55
|
+
if (!this.props.time) {
|
|
56
|
+
return;
|
|
57
|
+
}
|
|
58
|
+
if (this.state.hovered) {
|
|
59
|
+
if (this.props.expandFullyOnHover && !this.props.tooltipOnHover) {
|
|
60
|
+
return TimeUtils.formatTimeLong(this.props.time, config);
|
|
61
|
+
}
|
|
62
|
+
if (this.props.expandOnHover && !this.props.tooltipOnHover) {
|
|
63
|
+
return TimeUtils.formatTime(this.props.time, config);
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
return TimeUtils.timeAgo(this.props.time, config);
|
|
67
|
+
}
|
|
68
|
+
_refresh() {
|
|
69
|
+
this.refreshInterval = setInterval(() => {
|
|
70
|
+
this.forceUpdate();
|
|
71
|
+
}, DELAY);
|
|
72
|
+
}
|
|
73
|
+
render() {
|
|
74
|
+
let className = 'reactist_time';
|
|
75
|
+
if (this.props.className) {
|
|
76
|
+
className = this.props.className;
|
|
77
|
+
}
|
|
78
|
+
const timeComponent = this._renderTime(this.props.config);
|
|
79
|
+
return /*#__PURE__*/React.createElement("time", {
|
|
80
|
+
className: className,
|
|
81
|
+
onMouseEnter: event => this._setHovered(true, event),
|
|
82
|
+
onMouseLeave: event => this._setHovered(false, event)
|
|
83
|
+
}, this.props.tooltipOnHover ? /*#__PURE__*/React.createElement(Tooltip, {
|
|
84
|
+
content: this.props.tooltip || this.props.time && TimeUtils.formatTimeLong(this.props.time, this.props.config)
|
|
85
|
+
}, /*#__PURE__*/React.createElement("span", null, timeComponent)) : timeComponent);
|
|
86
|
+
}
|
|
87
|
+
}
|
|
85
88
|
Time.displayName = 'Time';
|
|
86
89
|
Time.defaultProps = {
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
90
|
+
expandOnHover: false,
|
|
91
|
+
expandFullyOnHover: false,
|
|
92
|
+
tooltipOnHover: false,
|
|
93
|
+
refresh: true,
|
|
94
|
+
config: {
|
|
95
|
+
locale: 'en',
|
|
96
|
+
daysSuffix: 'd',
|
|
97
|
+
hoursSuffix: 'h',
|
|
98
|
+
minutesSuffix: 'm',
|
|
99
|
+
momentsAgo: 'moments ago'
|
|
100
|
+
}
|
|
98
101
|
};
|
|
99
102
|
|
|
100
103
|
export { Time };
|