tycho-components 0.8.14 → 0.8.15
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/dist/AppClipboard/AppClipboard.d.ts +0 -1
- package/dist/AppClipboard/AppClipboard.js +15 -8
- package/dist/AppColorpicker/AppColorpicker.js +3 -2
- package/dist/AppColorpicker/style.scss +6 -18
- package/dist/AppCopyText/styles.scss +1 -1
- package/dist/AppEditable/AppEditable.d.ts +3 -3
- package/dist/AppEditable/AppEditable.js +42 -42
- package/dist/AppEditable/style.scss +35 -26
- package/dist/Base/ErrorBoundary.js +1 -1
- package/dist/Base/style.scss +5 -3
- package/dist/Comments/style.scss +0 -37
- package/dist/Participants/ParticipantCreate/ParticipantCreate.d.ts +0 -1
- package/dist/Participants/ParticipantCreate/ParticipantCreate.js +0 -1
- package/dist/Participants/Participants.js +2 -2
- package/dist/Participants/style.scss +10 -5
- package/dist/SentenceView/style.scss +12 -5
- package/dist/TreeView/TreeViewSearch/style.scss +4 -4
- package/dist/TreeView/style.scss +2 -67
- package/dist/configs/localization/BaseTexts.js +2 -2
- package/dist/index.d.ts +84 -85
- package/dist/index.js +65 -66
- package/dist/styles/main.scss +4 -39
- package/package.json +1 -2
- package/dist/AppClipboard/style.scss +0 -29
- package/dist/AppSelect/AppSelect.d.ts +0 -9
- package/dist/AppSelect/AppSelect.js +0 -20
- package/dist/AppSelect/index.d.ts +0 -2
- package/dist/AppSelect/index.js +0 -2
- package/dist/AppSelect/style.scss +0 -0
- package/dist/Participants/ParticipantCreate/style.scss +0 -32
- package/dist/styles/_variables.scss +0 -67
- package/dist/styles/bootstrap.min.css +0 -9871
|
@@ -1,16 +1,23 @@
|
|
|
1
1
|
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
+
import { useState } from 'react';
|
|
2
3
|
import { useTranslation } from 'react-i18next';
|
|
3
4
|
import { IconButton } from 'tycho-storybook';
|
|
4
|
-
import { useMessageUtils } from '../configs/useMessageUtils';
|
|
5
|
-
import UsabilityUtils from '../functions/UsabilityUtils';
|
|
6
|
-
import './style.scss';
|
|
7
5
|
export default function AppClipboard({ text, size = 'x-small' }) {
|
|
8
|
-
const { t } = useTranslation('
|
|
9
|
-
const
|
|
6
|
+
const { t } = useTranslation('common');
|
|
7
|
+
const [copied, setCopied] = useState(false);
|
|
10
8
|
const handleCopy = () => {
|
|
11
|
-
|
|
12
|
-
|
|
9
|
+
navigator.clipboard
|
|
10
|
+
.writeText(text)
|
|
11
|
+
.then(() => {
|
|
12
|
+
setCopied(true);
|
|
13
|
+
setTimeout(() => {
|
|
14
|
+
setCopied(false);
|
|
15
|
+
}, 2000);
|
|
16
|
+
})
|
|
17
|
+
.catch((err) => {
|
|
18
|
+
console.error('Failed to copy text:', err);
|
|
13
19
|
});
|
|
14
20
|
};
|
|
15
|
-
|
|
21
|
+
const tooltipTitle = copied ? t('tooltip.copied') : t('tooltip.copy');
|
|
22
|
+
return (_jsx(IconButton, { name: "content_copy", title: tooltipTitle, onClick: handleCopy, size: size }));
|
|
16
23
|
}
|
|
@@ -2,6 +2,7 @@ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-run
|
|
|
2
2
|
import { useEffect, useState } from 'react';
|
|
3
3
|
import { HexColorPicker } from 'react-colorful';
|
|
4
4
|
import { useTranslation } from 'react-i18next';
|
|
5
|
+
import { Button } from 'tycho-storybook';
|
|
5
6
|
import './style.scss';
|
|
6
7
|
const defaultColor = '#FFFFFF';
|
|
7
8
|
export default function AppColorpicker({ field, item, handleSave, }) {
|
|
@@ -14,8 +15,8 @@ export default function AppColorpicker({ field, item, handleSave, }) {
|
|
|
14
15
|
else
|
|
15
16
|
setColor(defaultColor);
|
|
16
17
|
}, [item]);
|
|
17
|
-
return (_jsxs("div", { className: "color-picker-container", children: [_jsx("div", { className: "swatch", style: { backgroundColor: color }, onClick: () => setOpenColor(!openColor), onKeyDown: () => setOpenColor(!openColor), role: "link", "aria-label": "open color picker", tabIndex: 0 }), openColor && (_jsxs(_Fragment, { children: [_jsx(HexColorPicker, { color: color, onChange: setColor }), _jsxs("div", { className: "buttons", children: [_jsx(
|
|
18
|
+
return (_jsxs("div", { className: "color-picker-container", children: [_jsx("div", { className: "swatch", style: { backgroundColor: color }, onClick: () => setOpenColor(!openColor), onKeyDown: () => setOpenColor(!openColor), role: "link", "aria-label": "open color picker", tabIndex: 0 }), openColor && (_jsxs(_Fragment, { children: [_jsx(HexColorPicker, { color: color, onChange: setColor }), _jsxs("div", { className: "buttons", children: [_jsx(Button, { text: t('button.confirm'), onClick: () => {
|
|
18
19
|
handleSave(color, field);
|
|
19
20
|
setOpenColor(false);
|
|
20
|
-
},
|
|
21
|
+
}, size: "x-small" }), _jsx(Button, { text: t('button.cancel'), onClick: () => setOpenColor(false), color: "danger", size: "x-small" })] })] }))] }));
|
|
21
22
|
}
|
|
@@ -1,12 +1,15 @@
|
|
|
1
1
|
.color-picker-container {
|
|
2
2
|
display: flex;
|
|
3
|
+
flex-direction: column;
|
|
3
4
|
|
|
4
5
|
.swatch {
|
|
5
6
|
width: 28px;
|
|
6
7
|
height: 28px;
|
|
7
8
|
border-radius: 8px;
|
|
8
9
|
border: 3px solid #fff;
|
|
9
|
-
box-shadow:
|
|
10
|
+
box-shadow:
|
|
11
|
+
0 0 0 1px rgba(0, 0, 0, 0.1),
|
|
12
|
+
inset 0 0 0 1px rgba(0, 0, 0, 0.1);
|
|
10
13
|
cursor: pointer;
|
|
11
14
|
margin-bottom: 8px;
|
|
12
15
|
}
|
|
@@ -17,22 +20,7 @@
|
|
|
17
20
|
|
|
18
21
|
.buttons {
|
|
19
22
|
display: flex;
|
|
20
|
-
justify-content:
|
|
21
|
-
|
|
22
|
-
button {
|
|
23
|
-
height: fit-content;
|
|
24
|
-
padding-right: var(--spacing-xsmall);
|
|
25
|
-
padding-left: var(--spacing-xsmall);
|
|
26
|
-
|
|
27
|
-
&[name='cancel'] {
|
|
28
|
-
background-color: var(--color-error);
|
|
29
|
-
color: var(--color-surface);
|
|
30
|
-
}
|
|
31
|
-
|
|
32
|
-
&[name='save'] {
|
|
33
|
-
background-color: var(--color-confirmed);
|
|
34
|
-
color: var(--color-surface);
|
|
35
|
-
}
|
|
36
|
-
}
|
|
23
|
+
justify-content: center;
|
|
24
|
+
gap: 8px;
|
|
37
25
|
}
|
|
38
26
|
}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { AppEditableField } from
|
|
2
|
-
import { FormField } from
|
|
3
|
-
import
|
|
1
|
+
import { AppEditableField } from './AppEditableField';
|
|
2
|
+
import { FormField } from './FormField';
|
|
3
|
+
import './style.scss';
|
|
4
4
|
type Item = {
|
|
5
5
|
uid?: string;
|
|
6
6
|
[key: string]: unknown;
|
|
@@ -1,22 +1,22 @@
|
|
|
1
|
-
import { jsx as _jsx, jsxs as _jsxs
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
4
|
-
import
|
|
5
|
-
import
|
|
6
|
-
import
|
|
7
|
-
import { Icon, Tooltip } from
|
|
8
|
-
import AppColorpicker from
|
|
9
|
-
import
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { Switch } from '@mui/material';
|
|
3
|
+
import { format } from 'date-fns-tz';
|
|
4
|
+
import { useCallback } from 'react';
|
|
5
|
+
import EasyEdit from 'react-easy-edit';
|
|
6
|
+
import { useTranslation } from 'react-i18next';
|
|
7
|
+
import { Icon, Tooltip } from 'tycho-storybook';
|
|
8
|
+
import AppColorpicker from '../AppColorpicker';
|
|
9
|
+
import './style.scss';
|
|
10
10
|
// Utility to safely get nested values via a dotted path
|
|
11
|
-
const getNestedValue = (obj, path) => path.split(
|
|
11
|
+
const getNestedValue = (obj, path) => path.split('.').reduce((o, key) => (o && key in o ? o[key] : undefined), obj);
|
|
12
12
|
// Pure function — no need to inline this in the component
|
|
13
13
|
const formatDate = (date, fmt) => {
|
|
14
14
|
if (!date)
|
|
15
|
-
return
|
|
15
|
+
return '';
|
|
16
16
|
return format(date, fmt);
|
|
17
17
|
};
|
|
18
18
|
export default function AppEditable({ translation, fields, item, save, group, className, reference, }) {
|
|
19
|
-
const { t } = useTranslation([translation,
|
|
19
|
+
const { t } = useTranslation([translation, 'common']);
|
|
20
20
|
const handleSave = useCallback((value, field) => {
|
|
21
21
|
if (!save)
|
|
22
22
|
return;
|
|
@@ -30,13 +30,13 @@ export default function AppEditable({ translation, fields, item, save, group, cl
|
|
|
30
30
|
}, [save, item, reference]);
|
|
31
31
|
const getValue = (field) => {
|
|
32
32
|
const value = getNestedValue(item, field.name);
|
|
33
|
-
return value !== undefined && value !==
|
|
33
|
+
return value !== undefined && value !== ''
|
|
34
34
|
? value
|
|
35
35
|
: (field.default ?? null);
|
|
36
36
|
};
|
|
37
37
|
const getDateValue = (field) => {
|
|
38
38
|
const v = getValue(field);
|
|
39
|
-
return !v ? null : formatDate(new Date(v),
|
|
39
|
+
return !v ? null : formatDate(new Date(v), 'yyyy-MM-dd');
|
|
40
40
|
};
|
|
41
41
|
const getValueToDisplay = (field) => {
|
|
42
42
|
const value = getValue(field);
|
|
@@ -45,48 +45,48 @@ export default function AppEditable({ translation, fields, item, save, group, cl
|
|
|
45
45
|
if (option)
|
|
46
46
|
return option.label;
|
|
47
47
|
}
|
|
48
|
-
if (typeof value ===
|
|
49
|
-
typeof value ===
|
|
50
|
-
typeof value ===
|
|
48
|
+
if (typeof value === 'string' ||
|
|
49
|
+
typeof value === 'number' ||
|
|
50
|
+
typeof value === 'boolean')
|
|
51
51
|
return value;
|
|
52
52
|
return null;
|
|
53
53
|
};
|
|
54
54
|
const getLabelValueForList = (options) => options.map((op) => ({ label: t(op.label), value: op.value }));
|
|
55
55
|
const sharedEditProps = {
|
|
56
|
-
saveButtonLabel: t(
|
|
57
|
-
cancelButtonLabel: t(
|
|
58
|
-
placeholder: t(
|
|
56
|
+
saveButtonLabel: t('common:button.confirm'),
|
|
57
|
+
cancelButtonLabel: t('common:button.cancel'),
|
|
58
|
+
placeholder: t('common:placeholder.input'),
|
|
59
59
|
};
|
|
60
60
|
const renderField = (field) => {
|
|
61
61
|
const value = getValue(field);
|
|
62
62
|
switch (field.type) {
|
|
63
|
-
case
|
|
64
|
-
return _jsx("span", { children: getValueToDisplay(field) ??
|
|
65
|
-
case
|
|
63
|
+
case 'display':
|
|
64
|
+
return _jsx("span", { children: getValueToDisplay(field) ?? '--' });
|
|
65
|
+
case 'code':
|
|
66
66
|
return (_jsx("div", { className: "textarea-code", children: _jsx(EasyEdit, { type: "textarea", onSave: (v) => handleSave(JSON.parse(v), field), value: JSON.stringify(value || {}, null, 2), ...sharedEditProps }) }));
|
|
67
|
-
case
|
|
68
|
-
case
|
|
69
|
-
case
|
|
70
|
-
case
|
|
67
|
+
case 'text':
|
|
68
|
+
case 'number':
|
|
69
|
+
case 'locale':
|
|
70
|
+
case 'year':
|
|
71
71
|
return (_jsx(EasyEdit, { type: "text", onSave: (v) => handleSave(v, field), value: value, ...sharedEditProps }));
|
|
72
|
-
case
|
|
72
|
+
case 'textarea':
|
|
73
73
|
return (_jsx(EasyEdit, { type: "textarea", onSave: (v) => handleSave(v, field), value: value, ...sharedEditProps }));
|
|
74
|
-
case
|
|
75
|
-
case
|
|
74
|
+
case 'select':
|
|
75
|
+
case 'list':
|
|
76
76
|
return (_jsx(EasyEdit, { type: "select", options: getLabelValueForList(field.options || []), onSave: (v) => handleSave(v, field), value: value, ...sharedEditProps }));
|
|
77
|
-
case
|
|
78
|
-
return (_jsx(EasyEdit, { type: "range", onSave: (v) => handleSave(v, field), attributes: { name:
|
|
79
|
-
case
|
|
80
|
-
return (_jsx(Switch, { onChange: (checked) => handleSave(checked, field), checked: value || false }));
|
|
81
|
-
case
|
|
77
|
+
case 'range':
|
|
78
|
+
return (_jsx(EasyEdit, { type: "range", onSave: (v) => handleSave(v, field), attributes: { name: 'awesome-range', min: 0, max: 100, step: 1 }, value: value, ...sharedEditProps }));
|
|
79
|
+
case 'switch':
|
|
80
|
+
return (_jsx(Switch, { onChange: (_event, checked) => handleSave(checked, field), checked: value || false }));
|
|
81
|
+
case 'date':
|
|
82
82
|
return (_jsx(EasyEdit, { type: "date", onSave: (v) => handleSave(new Date(v), field), value: getDateValue(field), ...sharedEditProps }));
|
|
83
|
-
case
|
|
83
|
+
case 'password':
|
|
84
84
|
return (_jsx(EasyEdit, { type: "password", onSave: (v) => handleSave(v, field), value: value, ...sharedEditProps }));
|
|
85
|
-
case
|
|
85
|
+
case 'color':
|
|
86
86
|
return (_jsx(AppColorpicker, { item: item, field: field, handleSave: handleSave }));
|
|
87
|
-
case
|
|
88
|
-
return _jsx("span", { children: field.fn ? field.fn(getValue(field)) :
|
|
89
|
-
case
|
|
87
|
+
case 'function':
|
|
88
|
+
return _jsx("span", { children: field.fn ? field.fn(getValue(field)) : '' });
|
|
89
|
+
case 'check':
|
|
90
90
|
const val = getValue(field);
|
|
91
91
|
return (_jsx(EasyEdit, { type: "checkbox", options: getLabelValueForList(field.options || []), onSave: (value) => handleSave(value, field), value: val === undefined || val === null
|
|
92
92
|
? undefined
|
|
@@ -97,7 +97,7 @@ export default function AppEditable({ translation, fields, item, save, group, cl
|
|
|
97
97
|
return null;
|
|
98
98
|
}
|
|
99
99
|
};
|
|
100
|
-
return (_jsx(
|
|
100
|
+
return (_jsx("div", { className: "editable-group-container", children: fields.map((field, idx) => (_jsxs("div", { className: `editable-container ${className || ''}`, children: [_jsxs("div", { className: "title", children: [_jsxs("h6", { children: [field.title
|
|
101
101
|
? field.title
|
|
102
|
-
: t(`${translation}:${group ||
|
|
102
|
+
: t(`${translation}:${group || ''}.field.${field.name}`), field.required && _jsx("span", { children: "*" })] }), field.tooltip && (_jsx(Tooltip, { title: t(`${translation}:${group || ''}.tooltip.${field.name}`), children: _jsx("span", { children: _jsx(Icon, { name: "help", className: "info", size: "x-small" }) }) }))] }), renderField(field)] }, idx))) }));
|
|
103
103
|
}
|
|
@@ -1,18 +1,26 @@
|
|
|
1
|
-
.editable-container {
|
|
2
|
-
|
|
1
|
+
.editable-group-container {
|
|
2
|
+
display: flex;
|
|
3
|
+
flex-direction: column;
|
|
4
|
+
gap: 16px;
|
|
3
5
|
|
|
4
|
-
.
|
|
6
|
+
.editable-container {
|
|
5
7
|
display: flex;
|
|
6
|
-
|
|
7
|
-
|
|
8
|
+
flex-direction: column;
|
|
9
|
+
gap: 4px;
|
|
8
10
|
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
11
|
+
.title {
|
|
12
|
+
display: flex;
|
|
13
|
+
align-items: center;
|
|
12
14
|
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
15
|
+
h6 {
|
|
16
|
+
@include label-small-2;
|
|
17
|
+
margin: 0px;
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
.info {
|
|
21
|
+
margin-left: 8px;
|
|
22
|
+
cursor: pointer;
|
|
23
|
+
}
|
|
16
24
|
}
|
|
17
25
|
}
|
|
18
26
|
}
|
|
@@ -24,7 +32,7 @@
|
|
|
24
32
|
|
|
25
33
|
.easy-edit-wrapper {
|
|
26
34
|
cursor: pointer;
|
|
27
|
-
color: var(--
|
|
35
|
+
color: var(--text-accent);
|
|
28
36
|
text-decoration: underline;
|
|
29
37
|
text-decoration-style: dotted;
|
|
30
38
|
text-underline-offset: 5px;
|
|
@@ -43,7 +51,6 @@
|
|
|
43
51
|
.easy-edit-component-wrapper {
|
|
44
52
|
width: 100%;
|
|
45
53
|
display: block;
|
|
46
|
-
margin-bottom: var(--spacing-xsmall);
|
|
47
54
|
|
|
48
55
|
input,
|
|
49
56
|
textarea,
|
|
@@ -52,16 +59,15 @@
|
|
|
52
59
|
}
|
|
53
60
|
|
|
54
61
|
select {
|
|
55
|
-
padding:
|
|
56
|
-
border-color: var(--
|
|
57
|
-
border-radius: var(--
|
|
62
|
+
padding: 8px;
|
|
63
|
+
border-color: var(--border-subtle-2);
|
|
64
|
+
border-radius: var(--radius-100);
|
|
58
65
|
}
|
|
59
66
|
}
|
|
60
67
|
|
|
61
68
|
.easy-edit-checkbox-label {
|
|
62
69
|
cursor: pointer;
|
|
63
|
-
|
|
64
|
-
margin-bottom: var(--spacing-xxsmall);
|
|
70
|
+
margin-bottom: 4px;
|
|
65
71
|
|
|
66
72
|
input[type='checkbox'] {
|
|
67
73
|
margin-right: 8px;
|
|
@@ -71,21 +77,24 @@
|
|
|
71
77
|
.easy-edit-button-wrapper {
|
|
72
78
|
width: 100%;
|
|
73
79
|
display: flex;
|
|
74
|
-
|
|
75
|
-
margin-top: 16px;
|
|
80
|
+
margin-top: 8px;
|
|
76
81
|
|
|
77
82
|
.easy-edit-button {
|
|
78
|
-
padding
|
|
79
|
-
|
|
83
|
+
padding: 4px 8px;
|
|
84
|
+
cursor: pointer;
|
|
80
85
|
|
|
81
86
|
&[name='save'] {
|
|
82
|
-
background-color: var(--
|
|
83
|
-
color: var(--
|
|
87
|
+
background-color: var(--button-primary-default);
|
|
88
|
+
color: var(--background-default);
|
|
84
89
|
}
|
|
85
90
|
|
|
86
91
|
&[name='cancel'] {
|
|
87
|
-
background-color: var(--
|
|
88
|
-
color: var(--
|
|
92
|
+
background-color: var(--button-danger-default);
|
|
93
|
+
color: var(--background-default);
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
&:hover {
|
|
97
|
+
opacity: 0.8;
|
|
89
98
|
}
|
|
90
99
|
}
|
|
91
100
|
}
|
|
@@ -33,7 +33,7 @@ export default function ErrorBoundary({ children }) {
|
|
|
33
33
|
};
|
|
34
34
|
}, []);
|
|
35
35
|
if (state.hasError && state.error) {
|
|
36
|
-
return (_jsx("div", { className: "box-container", children: _jsxs("div", { className: "box", children: [_jsx("img", { src: logo }), _jsx("div", { className: "title", children: t('label.error.found') }), _jsx("
|
|
36
|
+
return (_jsx("div", { className: "box-container", children: _jsxs("div", { className: "box", children: [_jsx("img", { src: logo }), _jsx("div", { className: "title", children: t('label.error.found') }), _jsx("div", { className: "message", children: state.error?.message }), _jsx("pre", { className: "error-stack", children: state.error?.stack })] }) }));
|
|
37
37
|
}
|
|
38
38
|
return _jsx(_Fragment, { children: children });
|
|
39
39
|
}
|
package/dist/Base/style.scss
CHANGED
|
@@ -5,13 +5,15 @@
|
|
|
5
5
|
height: 100%;
|
|
6
6
|
|
|
7
7
|
.box {
|
|
8
|
+
display: flex;
|
|
9
|
+
flex-direction: column;
|
|
10
|
+
align-items: center;
|
|
8
11
|
border: 1px solid var(--border-subtle-2);
|
|
9
|
-
background-color: var(--
|
|
12
|
+
background-color: var(--background-default);
|
|
10
13
|
width: 50vw;
|
|
11
14
|
border-radius: 8px;
|
|
12
15
|
padding: 48px;
|
|
13
16
|
margin-top: 10%;
|
|
14
|
-
text-align: center;
|
|
15
17
|
|
|
16
18
|
img {
|
|
17
19
|
width: 150px;
|
|
@@ -41,7 +43,7 @@
|
|
|
41
43
|
}
|
|
42
44
|
|
|
43
45
|
.error-stack {
|
|
44
|
-
background-color: var(--
|
|
46
|
+
background-color: var(--background-default);
|
|
45
47
|
padding: 24px;
|
|
46
48
|
margin-top: 16px;
|
|
47
49
|
}
|
package/dist/Comments/style.scss
CHANGED
|
@@ -50,12 +50,6 @@
|
|
|
50
50
|
display: flex;
|
|
51
51
|
margin-left: auto;
|
|
52
52
|
gap: 8px;
|
|
53
|
-
|
|
54
|
-
button {
|
|
55
|
-
border: none;
|
|
56
|
-
border-radius: var(--border-radius-button);
|
|
57
|
-
cursor: pointer;
|
|
58
|
-
}
|
|
59
53
|
}
|
|
60
54
|
}
|
|
61
55
|
|
|
@@ -127,36 +121,5 @@
|
|
|
127
121
|
}
|
|
128
122
|
}
|
|
129
123
|
}
|
|
130
|
-
|
|
131
|
-
.placeholder-container {
|
|
132
|
-
margin: 0px;
|
|
133
|
-
font-size: var(--font-size-medium);
|
|
134
|
-
}
|
|
135
|
-
}
|
|
136
|
-
}
|
|
137
|
-
|
|
138
|
-
.modal-comment-info {
|
|
139
|
-
.modal-body {
|
|
140
|
-
> textarea {
|
|
141
|
-
width: 100%;
|
|
142
|
-
height: 20vh;
|
|
143
|
-
padding: 8px;
|
|
144
|
-
}
|
|
145
|
-
|
|
146
|
-
.footnote-actions {
|
|
147
|
-
text-align: center;
|
|
148
|
-
|
|
149
|
-
> button {
|
|
150
|
-
font-family: var(--font-family-regular);
|
|
151
|
-
font-style: var(--font-weight-medium);
|
|
152
|
-
font-weight: var(--font-weight-medium);
|
|
153
|
-
font-size: var(--font-size-button);
|
|
154
|
-
color: var(--color-background);
|
|
155
|
-
width: 200px;
|
|
156
|
-
border-radius: 8px;
|
|
157
|
-
padding: 12px;
|
|
158
|
-
border: none;
|
|
159
|
-
}
|
|
160
|
-
}
|
|
161
124
|
}
|
|
162
125
|
}
|
|
@@ -8,7 +8,6 @@ import * as yup from 'yup';
|
|
|
8
8
|
import AppModal from '../../AppModal';
|
|
9
9
|
import CommonContext from '../../configs/CommonContext';
|
|
10
10
|
import ParticipantService from '../types/ParticipantService';
|
|
11
|
-
import './style.scss';
|
|
12
11
|
import { useMessageUtils } from '../../configs/useMessageUtils';
|
|
13
12
|
export default function ParticipantCreate({ document, onClose, onCreate, }) {
|
|
14
13
|
const { t } = useTranslation('participants');
|
|
@@ -39,9 +39,9 @@ export default function Participants({ document, participants, onChange, useChat
|
|
|
39
39
|
if (participants.length > 0)
|
|
40
40
|
setParticipant(participants[0]);
|
|
41
41
|
}, []);
|
|
42
|
-
return (_jsxs("div", { className: "participants-container", children: [_jsxs("div", { className: "header", children: [_jsx("
|
|
42
|
+
return (_jsxs("div", { className: "participants-container", children: [_jsxs("div", { className: "header", children: [_jsx("div", { className: "title", children: t('label.title') }), _jsx("div", { className: "actions", children: _jsx(Button, { icon: "add", text: t('button.label.add'), onClick: () => setOpenCreate(true), size: "small", mode: "outlined" }) })] }), _jsx("div", { className: "body", children: participant && (_jsxs(_Fragment, { children: [_jsx(Select, { onChange: (e) => setParticipant(participants[Number(e.target.value)]), value: participant
|
|
43
43
|
? participants.findIndex((p) => p.code === participant.code)
|
|
44
|
-
: 0, fullWidth: true, children: participants.map((el, idx) => (_jsx(MenuItem, { value: idx, children: `${el.code} - ${el.name}` }, idx))) }), _jsx(AppEditable, { translation: "participants", group: "participant", save: handleSave, item: { ...participant, uid: document }, fields: PARTICIPANT_FIELDS, className: "fields", reference: "code" }), useChat && (_jsx(AppEditable, { translation: "participants", group: "participant", save: handleSave, item: { ...participant, uid: document }, fields: CHAT_FIELDS, className: "fields", reference: "code" })), _jsx("div", { className: "footer", children: _jsx(Button, { icon: "delete", text: t('common:button.remove'), size: "small", className: "danger", onClick: () => {
|
|
44
|
+
: 0, fullWidth: true, className: "select-participant", children: participants.map((el, idx) => (_jsx(MenuItem, { value: idx, children: `${el.code} - ${el.name}` }, idx))) }), _jsx(AppEditable, { translation: "participants", group: "participant", save: handleSave, item: { ...participant, uid: document }, fields: PARTICIPANT_FIELDS, className: "fields", reference: "code" }), useChat && (_jsx(AppEditable, { translation: "participants", group: "participant", save: handleSave, item: { ...participant, uid: document }, fields: CHAT_FIELDS, className: "fields", reference: "code" })), _jsx("div", { className: "footer", children: _jsx(Button, { icon: "delete", text: t('common:button.remove'), size: "small", className: "danger", onClick: () => {
|
|
45
45
|
setParticipant(participant);
|
|
46
46
|
setOpenRemove(true);
|
|
47
47
|
} }) })] })) }), participant && openRemove && (_jsx(ParticipantRemove, { document: document, onChange: (list) => {
|
|
@@ -1,9 +1,10 @@
|
|
|
1
1
|
.participants-container {
|
|
2
2
|
.header {
|
|
3
3
|
display: flex;
|
|
4
|
-
|
|
5
|
-
background-color: var(--
|
|
4
|
+
@include subtitle-medium-2;
|
|
5
|
+
background-color: var(--layer-hover-2);
|
|
6
6
|
padding: 8px 16px;
|
|
7
|
+
border-bottom: 1px solid var(--border-subtle-2);
|
|
7
8
|
|
|
8
9
|
.actions {
|
|
9
10
|
margin-left: auto;
|
|
@@ -13,7 +14,11 @@
|
|
|
13
14
|
.body {
|
|
14
15
|
height: 90vh;
|
|
15
16
|
overflow-y: auto;
|
|
16
|
-
padding:
|
|
17
|
+
padding: 16px;
|
|
18
|
+
|
|
19
|
+
> .select-participant {
|
|
20
|
+
margin-bottom: 16px;
|
|
21
|
+
}
|
|
17
22
|
}
|
|
18
23
|
|
|
19
24
|
.footer {
|
|
@@ -26,8 +31,8 @@
|
|
|
26
31
|
}
|
|
27
32
|
|
|
28
33
|
.modal-participant {
|
|
29
|
-
width:
|
|
30
|
-
max-width:
|
|
34
|
+
width: 40vw !important;
|
|
35
|
+
max-width: 40vw !important;
|
|
31
36
|
|
|
32
37
|
.body {
|
|
33
38
|
.participant-container {
|
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
.table {
|
|
8
8
|
width: 100%;
|
|
9
9
|
margin-bottom: 8px;
|
|
10
|
-
|
|
10
|
+
border-collapse: collapse;
|
|
11
11
|
|
|
12
12
|
tbody {
|
|
13
13
|
tr {
|
|
@@ -16,16 +16,16 @@
|
|
|
16
16
|
min-width: 5vw;
|
|
17
17
|
text-align: center;
|
|
18
18
|
white-space: nowrap;
|
|
19
|
-
border: 1px solid var(--
|
|
19
|
+
border: 1px solid var(--border-subtle-2);
|
|
20
20
|
line-height: 32px;
|
|
21
21
|
|
|
22
22
|
&.edited {
|
|
23
|
-
background-color:
|
|
23
|
+
background-color: var(--layer-hover-1);
|
|
24
24
|
}
|
|
25
25
|
|
|
26
26
|
&:first-child {
|
|
27
27
|
position: absolute;
|
|
28
|
-
background-color:
|
|
28
|
+
background-color: var(--background-default);
|
|
29
29
|
display: inline-block;
|
|
30
30
|
font-weight: bolder;
|
|
31
31
|
width: 8vw;
|
|
@@ -33,7 +33,8 @@
|
|
|
33
33
|
left: 0;
|
|
34
34
|
top: auto;
|
|
35
35
|
cursor: default;
|
|
36
|
-
|
|
36
|
+
padding-left: 12px;
|
|
37
|
+
text-align: left;
|
|
37
38
|
}
|
|
38
39
|
|
|
39
40
|
&.split {
|
|
@@ -52,6 +53,12 @@
|
|
|
52
53
|
}
|
|
53
54
|
}
|
|
54
55
|
}
|
|
56
|
+
|
|
57
|
+
&.table-striped {
|
|
58
|
+
tbody tr:nth-of-type(odd) {
|
|
59
|
+
background-color: var(--layer-hover-1);
|
|
60
|
+
}
|
|
61
|
+
}
|
|
55
62
|
}
|
|
56
63
|
}
|
|
57
64
|
}
|
|
@@ -12,7 +12,7 @@
|
|
|
12
12
|
display: block;
|
|
13
13
|
margin-bottom: 8px;
|
|
14
14
|
font-weight: 600;
|
|
15
|
-
color: var(--
|
|
15
|
+
color: var(--text-secondary);
|
|
16
16
|
}
|
|
17
17
|
|
|
18
18
|
.input-with-button {
|
|
@@ -23,13 +23,13 @@
|
|
|
23
23
|
input {
|
|
24
24
|
flex: 1;
|
|
25
25
|
padding: 8px 12px;
|
|
26
|
-
border:
|
|
27
|
-
border-radius: var(--
|
|
26
|
+
border: var(--border-default);
|
|
27
|
+
border-radius: var(--radius-100);
|
|
28
28
|
font-size: 14px;
|
|
29
29
|
|
|
30
30
|
&:focus {
|
|
31
31
|
outline: none;
|
|
32
|
-
border-color: var(--
|
|
32
|
+
border-color: var(--text-accent);
|
|
33
33
|
}
|
|
34
34
|
}
|
|
35
35
|
}
|