@manuscripts/style-guide 3.4.5 → 3.4.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (41) hide show
  1. package/dist/cjs/components/ContextMenu.js +45 -4
  2. package/dist/cjs/components/DatePicker.js +188 -0
  3. package/dist/cjs/components/Form.js +1 -1
  4. package/dist/cjs/components/FormCommon.js +53 -0
  5. package/dist/cjs/components/FormFieldContainer.js +24 -0
  6. package/dist/cjs/components/InspectorSection.js +4 -4
  7. package/dist/cjs/components/RadioButton.js +15 -5
  8. package/dist/cjs/components/RadioGroup.js +27 -0
  9. package/dist/cjs/components/SelectField.js +10 -4
  10. package/dist/cjs/components/TextField.js +24 -13
  11. package/dist/cjs/components/icons/calendar.js +7 -0
  12. package/dist/cjs/components/icons/globe.js +7 -0
  13. package/dist/cjs/components/icons/index.js +7 -3
  14. package/dist/cjs/index.js +7 -2
  15. package/dist/es/components/ContextMenu.js +45 -4
  16. package/dist/es/components/DatePicker.js +181 -0
  17. package/dist/es/components/Form.js +1 -1
  18. package/dist/es/components/FormCommon.js +45 -0
  19. package/dist/es/components/FormFieldContainer.js +17 -0
  20. package/dist/es/components/InspectorSection.js +4 -4
  21. package/dist/es/components/RadioButton.js +16 -6
  22. package/dist/es/components/RadioGroup.js +20 -0
  23. package/dist/es/components/SelectField.js +10 -4
  24. package/dist/es/components/TextField.js +24 -13
  25. package/dist/es/components/icons/calendar.js +3 -0
  26. package/dist/es/components/icons/globe.js +3 -0
  27. package/dist/es/components/icons/index.js +2 -0
  28. package/dist/es/index.js +5 -1
  29. package/dist/types/components/DatePicker.d.ts +27 -0
  30. package/dist/types/components/FormCommon.d.ts +25 -0
  31. package/dist/types/components/FormFieldContainer.d.ts +26 -0
  32. package/dist/types/components/InspectorSection.d.ts +1 -0
  33. package/dist/types/components/RadioButton.d.ts +2 -2
  34. package/dist/types/components/RadioGroup.d.ts +28 -0
  35. package/dist/types/components/SelectField.d.ts +4 -2
  36. package/dist/types/components/icons/calendar.d.ts +19 -0
  37. package/dist/types/components/icons/globe.d.ts +19 -0
  38. package/dist/types/components/icons/index.d.ts +2 -0
  39. package/dist/types/index.d.ts +5 -1
  40. package/dist/types/theme.d.ts +2 -0
  41. package/package.json +3 -1
@@ -38,6 +38,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
38
38
  Object.defineProperty(exports, "__esModule", { value: true });
39
39
  exports.ContextMenu = void 0;
40
40
  const jsx_runtime_1 = require("react/jsx-runtime");
41
+ const react_1 = require("react");
41
42
  const styled_components_1 = __importDefault(require("styled-components"));
42
43
  const Button_1 = require("./Button");
43
44
  const Icons = __importStar(require("./icons"));
@@ -52,6 +53,11 @@ const ContextMenuIconButton = (0, styled_components_1.default)(Button_1.IconButt
52
53
  background-color: #f2f2f2;
53
54
  border-color: #f2f2f2;
54
55
  }
56
+ &:not([disabled]):focus-visible {
57
+ outline: 4px solid #3dadff;
58
+ outline-offset: -2px;
59
+ background-color: transparent !important;
60
+ }
55
61
  &[disabled] {
56
62
  color: #c9c9c9 !important;
57
63
  background-color: #fff !important;
@@ -62,8 +68,43 @@ const icons = Object.entries(Icons).reduce((acc, [name, IconComponent]) => {
62
68
  acc[iconName] = IconComponent;
63
69
  return acc;
64
70
  }, {});
65
- const ContextMenu = ({ actions }) => ((0, jsx_runtime_1.jsx)(Button_1.IconButtonGroup, { size: 32, children: actions.map((action) => {
66
- const Icon = icons[action.icon];
67
- return ((0, jsx_runtime_1.jsx)(ContextMenuIconButton, { "data-tooltip-content": action.label, onClick: action.disabled === true ? () => null : action.action, className: action.selected ? 'selected' : '', disabled: !!action.disabled, children: (0, jsx_runtime_1.jsx)(Icon, { width: 18, height: 18 }) }, action.icon));
68
- }) }));
71
+ const ContextMenu = ({ actions }) => {
72
+ const containerRef = (0, react_1.useRef)(null);
73
+ (0, react_1.useEffect)(() => {
74
+ const container = containerRef.current;
75
+ if (!container) {
76
+ return;
77
+ }
78
+ const buttons = Array.from(container.querySelectorAll('button:not([disabled])'));
79
+ if (buttons.length === 0) {
80
+ return;
81
+ }
82
+ buttons.forEach((button, index) => {
83
+ button.tabIndex = index === 0 ? 0 : -1;
84
+ });
85
+ const handleKeyDown = (event) => {
86
+ if (event.key !== 'ArrowRight' && event.key !== 'ArrowLeft') {
87
+ return;
88
+ }
89
+ const target = event.target;
90
+ const currentIndex = buttons.indexOf(target);
91
+ if (currentIndex === -1) {
92
+ return;
93
+ }
94
+ event.preventDefault();
95
+ const nextIndex = event.key === 'ArrowRight'
96
+ ? (currentIndex + 1) % buttons.length
97
+ : (currentIndex - 1 + buttons.length) % buttons.length;
98
+ buttons[nextIndex]?.focus();
99
+ };
100
+ container.addEventListener('keydown', handleKeyDown);
101
+ return () => {
102
+ container.removeEventListener('keydown', handleKeyDown);
103
+ };
104
+ }, [actions]);
105
+ return ((0, jsx_runtime_1.jsx)(Button_1.IconButtonGroup, { size: 32, ref: containerRef, children: actions.map((action) => {
106
+ const Icon = icons[action.icon];
107
+ return ((0, jsx_runtime_1.jsx)(ContextMenuIconButton, { "data-tooltip-content": action.label, onClick: action.disabled === true ? () => null : action.action, className: action.selected ? 'selected' : '', disabled: !!action.disabled, children: (0, jsx_runtime_1.jsx)(Icon, { width: 18, height: 18 }) }, action.icon));
108
+ }) }));
109
+ };
69
110
  exports.ContextMenu = ContextMenu;
@@ -0,0 +1,188 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.DatePicker = void 0;
7
+ const jsx_runtime_1 = require("react/jsx-runtime");
8
+ require("react-datepicker/dist/react-datepicker.css");
9
+ const react_1 = require("react");
10
+ const react_datepicker_1 = __importDefault(require("react-datepicker"));
11
+ const styled_components_1 = __importDefault(require("styled-components"));
12
+ const icons_1 = require("./icons");
13
+ const DatePicker = ({ id, originalDate, date, handleDateChange, placeholder, showTimeSelect, required, }) => {
14
+ const [selectedDate, setSelectedDate] = (0, react_1.useState)(date || null);
15
+ const handleChange = (date) => {
16
+ setSelectedDate(date);
17
+ handleDateChange(date);
18
+ };
19
+ const format = showTimeSelect
20
+ ? 'd MMM yyyy, EEEE h:mm aa'
21
+ : 'd MMM yyyy, EEEE';
22
+ return ((0, jsx_runtime_1.jsxs)(Calendar, { children: [(0, jsx_runtime_1.jsx)(react_datepicker_1.default, { id: id, selected: selectedDate, onChange: handleChange, placeholderText: placeholder, minDate: originalDate, showTimeSelect: showTimeSelect, dateFormat: format, className: "calendar-input", popperPlacement: "bottom", required: required }), (0, jsx_runtime_1.jsx)(IconWrapper, { children: (0, jsx_runtime_1.jsx)(icons_1.CalendarIcon, { width: 16, height: 16 }) })] }));
23
+ };
24
+ exports.DatePicker = DatePicker;
25
+ const Calendar = styled_components_1.default.div `
26
+ width: 100%;
27
+ position: relative;
28
+ display: block;
29
+
30
+ .react-datepicker {
31
+ display: flex;
32
+ padding: ${(props) => props.theme.grid.unit * 5}px;
33
+ font-size: ${(props) => props.theme.font.size.normal};
34
+ }
35
+
36
+ .react-datepicker-wrapper,
37
+ .react-datepicker__input-container {
38
+ display: block;
39
+ width: 100% !important;
40
+
41
+ input::placeholder {
42
+ color: ${(props) => props.theme.colors.text.greyMuted ||
43
+ props.theme.colors.text.secondary ||
44
+ '#6E6E6E'};
45
+ opacity: 1;
46
+ font-family: 'PT Sans', sans-serif;
47
+ font-size: ${(props) => props.theme.font.size.medium};
48
+ font-style: italic;
49
+ font-weight: ${(props) => props.theme.font.weight.normal};
50
+ line-height: ${(props) => props.theme.font.lineHeight.large};
51
+ }
52
+
53
+ input:focus::placeholder {
54
+ color: ${(props) => props.theme.colors.text.greyLight || '#C9C9C9'} !important;
55
+ opacity: 1 !important;
56
+ }
57
+ }
58
+
59
+ .react-datepicker__header {
60
+ background-color: unset;
61
+ border: unset;
62
+ }
63
+
64
+ .react-datepicker__day.react-datepicker__day--disabled {
65
+ color: #ccc;
66
+ }
67
+
68
+ .react-datepicker__day-name,
69
+ .react-datepicker__day,
70
+ .react-datepicker__time-name {
71
+ color: #000000cc;
72
+ padding: ${(props) => props.theme.grid.unit}px;
73
+ }
74
+
75
+ .react-datepicker__day-names .react-datepicker__day-name {
76
+ color: #d4d4d4;
77
+ }
78
+
79
+ .react-datepicker__time {
80
+ .react-datepicker__time-box {
81
+ width: 95px;
82
+
83
+ .react-datepicker__time-list {
84
+ overflow-y: unset;
85
+ }
86
+ }
87
+ }
88
+
89
+ h2.react-datepicker__current-month {
90
+ padding-bottom: ${(props) => props.theme.grid.unit * 5}px;
91
+ font-weight: 400;
92
+ font-size: ${(props) => props.theme.font.size.medium};
93
+ }
94
+
95
+ .react-datepicker[aria-label='Choose Date and Time'] {
96
+ .react-datepicker__navigation--next {
97
+ right: 150px;
98
+ }
99
+ }
100
+
101
+ .react-datepicker__navigation--next {
102
+ right: 65px;
103
+ top: 24px;
104
+ }
105
+
106
+ .react-datepicker__navigation--previous {
107
+ left: 65px;
108
+ top: 24px;
109
+ }
110
+
111
+ .react-datepicker__day--selected {
112
+ border: 1px solid rgb(188, 231, 246);
113
+ background-color: rgb(242, 251, 252);
114
+ border-radius: 50%;
115
+ }
116
+
117
+ .react-datepicker__day:not(.-selected):hover {
118
+ border-radius: 50%;
119
+ background-color: rgb(242, 251, 252);
120
+ }
121
+
122
+ .react-datepicker-popper[data-placement^='bottom']
123
+ .react-datepicker__triangle {
124
+ fill: white;
125
+ color: white;
126
+ }
127
+
128
+ .react-datepicker__day--outside-month {
129
+ visibility: hidden;
130
+ }
131
+
132
+ .react-datepicker__day--keyboard-selected {
133
+ background-color: unset;
134
+ }
135
+
136
+ .calendar-input {
137
+ width: 100%;
138
+ box-sizing: border-box;
139
+ min-height: 40px;
140
+ border-radius: 3px;
141
+ font: ${(props) => props.theme.font.weight.normal}
142
+ ${(props) => props.theme.font.size.medium} / 1
143
+ ${(props) => props.theme.font.family.sans};
144
+ line-height: ${(props) => props.theme.font.lineHeight.large};
145
+ padding: 0 ${(props) => props.theme.grid.unit * 10}px 0
146
+ ${(props) => props.theme.grid.unit * 4}px;
147
+ text-align: start;
148
+ border: 1px solid ${(props) => props.theme.colors.border.field.default};
149
+ color: ${(props) => props.theme.colors.text.primary};
150
+ outline: 0;
151
+ background-color: #fff;
152
+
153
+ &::placeholder {
154
+ color: ${(props) => props.theme.colors.text.greyMuted ||
155
+ props.theme.colors.text.secondary ||
156
+ '#6E6E6E'};
157
+ opacity: 1;
158
+ font-family: 'PT Sans', sans-serif;
159
+ font-size: ${(props) => props.theme.font.size.medium};
160
+ font-style: italic;
161
+ font-weight: ${(props) => props.theme.font.weight.normal};
162
+ line-height: ${(props) => props.theme.font.lineHeight.large};
163
+ }
164
+
165
+ &:focus {
166
+ border: 2px solid ${(props) => props.theme.colors.brand.default};
167
+ background-color: #f2fbfc;
168
+ padding: 0 ${(props) => props.theme.grid.unit * 10 - 1}px 0
169
+ ${(props) => props.theme.grid.unit * 4 - 1}px;
170
+ outline: none;
171
+ }
172
+
173
+ &:hover {
174
+ border-color: ${(props) => props.theme.colors.text.greyMuted};
175
+ background-color: #f2fbfc;
176
+ }
177
+ }
178
+ `;
179
+ const IconWrapper = styled_components_1.default.div `
180
+ position: absolute;
181
+ right: ${(props) => props.theme.grid.unit * 3}px;
182
+ top: 50%;
183
+ transform: translateY(-50%);
184
+ display: flex;
185
+ align-items: center;
186
+ pointer-events: none;
187
+ color: ${(props) => props.theme.colors.border.secondary};
188
+ `;
@@ -81,7 +81,7 @@ exports.FormLabel = styled_components_1.default.legend `
81
81
  ${(props) => props.theme.font.lineHeight.large}
82
82
  ${(props) => props.theme.font.family.sans};
83
83
  letter-spacing: -0.4px;
84
- color: ${(props) => props.theme.colors.text.secondary};
84
+ color: ${(props) => props.theme.colors.text.primary};
85
85
  `;
86
86
  exports.FormActionsBar = styled_components_1.default.div `
87
87
  display: flex;
@@ -0,0 +1,53 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.TextFieldErrorItem = exports.TextFieldError = exports.TextWithGenerationWrapper = exports.FieldInfo = exports.FieldError = void 0;
7
+ const jsx_runtime_1 = require("react/jsx-runtime");
8
+ const styled_components_1 = __importDefault(require("styled-components"));
9
+ const icons_1 = require("./icons");
10
+ const FieldError = ({ error }) => {
11
+ if (!error) {
12
+ return null;
13
+ }
14
+ return ((0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, { children: [(0, jsx_runtime_1.jsx)(icons_1.AttentionRedIcon, { className: "error-icon", width: 16, height: 16 }), (0, jsx_runtime_1.jsx)(ErrorText, { children: error })] }));
15
+ };
16
+ exports.FieldError = FieldError;
17
+ const FieldInfo = ({ info }) => {
18
+ if (!info) {
19
+ return null;
20
+ }
21
+ return (0, jsx_runtime_1.jsx)(FieldInfoText, { children: info });
22
+ };
23
+ exports.FieldInfo = FieldInfo;
24
+ const ErrorText = styled_components_1.default.span `
25
+ font-size: ${(props) => props.theme.font.size.small};
26
+ color: ${(props) => props.theme.colors.text.error};
27
+ `;
28
+ const FieldInfoText = styled_components_1.default.span `
29
+ font-size: ${(props) => props.theme.font.size.small};
30
+ color: ${(props) => props.theme.colors.text.secondary};
31
+ `;
32
+ exports.TextWithGenerationWrapper = styled_components_1.default.div `
33
+ display: flex;
34
+ align-items: start;
35
+ gap: 1rem;
36
+ width: 100%;
37
+
38
+ > div:first-child {
39
+ flex-grow: 1;
40
+ }
41
+
42
+ button {
43
+ margin-top: ${(props) => props.theme.grid.unit * 6}px !important;
44
+ }
45
+ `;
46
+ exports.TextFieldError = styled_components_1.default.div `
47
+ margin-top: 4px;
48
+ `;
49
+ exports.TextFieldErrorItem = styled_components_1.default.div `
50
+ font-family: ${(props) => props.theme.font.family.sans};
51
+ font-size: ${(props) => props.theme.font.size.small};
52
+ color: ${(props) => props.theme.colors.text.error};
53
+ `;
@@ -0,0 +1,24 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.FormFieldContainer = void 0;
7
+ const jsx_runtime_1 = require("react/jsx-runtime");
8
+ const react_1 = require("react");
9
+ const styled_components_1 = __importDefault(require("styled-components"));
10
+ const TextField_1 = require("./TextField");
11
+ const FormCommon_1 = require("./FormCommon");
12
+ const FormFieldContainer = ({ label, error, info, id, children, }) => {
13
+ const childrenWithErrorProp = react_1.Children.map(children, (child) => (0, react_1.cloneElement)(child, {
14
+ error: error ? String(error) : undefined,
15
+ }));
16
+ return ((0, jsx_runtime_1.jsxs)(react_1.Fragment, { children: [label ? ((0, jsx_runtime_1.jsxs)(TextField_1.TextFieldLabel, { htmlFor: id, children: [label, " ", childrenWithErrorProp] })) : (childrenWithErrorProp), info && !error && (0, jsx_runtime_1.jsx)(FormFieldInfo, { children: info }), error && ((0, jsx_runtime_1.jsx)(FormCommon_1.TextFieldError, { children: (0, jsx_runtime_1.jsx)(FormCommon_1.TextFieldErrorItem, { children: error }) }))] }));
17
+ };
18
+ exports.FormFieldContainer = FormFieldContainer;
19
+ const FormFieldInfo = styled_components_1.default.div `
20
+ font-family: ${(props) => props.theme.font.family.sans};
21
+ font-size: ${(props) => props.theme.font.size.small};
22
+ color: ${(props) => props.theme.colors.text.secondary};
23
+ margin-top: 4px;
24
+ `;
@@ -14,7 +14,7 @@ const Section = styled_components_1.default.div `
14
14
  `;
15
15
  const Heading = styled_components_1.default.div `
16
16
  display: flex;
17
- padding: 0 ${(props) => props.theme.grid.unit * 2}px;
17
+ padding: 0;
18
18
  cursor: pointer;
19
19
  margin: ${(props) => props.theme.grid.unit * 4}px
20
20
  ${(props) => props.theme.grid.unit * 6}px
@@ -57,11 +57,11 @@ exports.Subheading = (0, styled_components_1.default)(HeadingText) `
57
57
  exports.Field = styled_components_1.default.div `
58
58
  margin-bottom: ${(props) => props.theme.grid.unit * 4}px;
59
59
  `;
60
- const InspectorSection = ({ title, contentStyles, children, }) => {
60
+ const InspectorSection = ({ title, contentStyles, children, collapsible = true, }) => {
61
61
  const [expanded, setExpanded] = (0, react_1.useState)(true);
62
- return ((0, jsx_runtime_1.jsxs)(Section, { children: [(0, jsx_runtime_1.jsx)(Line, {}), (0, jsx_runtime_1.jsxs)(Heading, { onClick: () => setExpanded(!expanded), marginBottom: (!(expanded && children) && '40px') || undefined, children: [(0, jsx_runtime_1.jsx)(HeadingText, { children: title }), (0, jsx_runtime_1.jsx)(exports.ExpanderButton, { "aria-label": 'Toggle expand section', onClick: () => setExpanded(!expanded), style: {
62
+ return ((0, jsx_runtime_1.jsxs)(Section, { children: [(0, jsx_runtime_1.jsx)(Line, {}), (0, jsx_runtime_1.jsxs)(Heading, { onClick: () => collapsible && setExpanded(!expanded), marginBottom: (!(expanded && children) && '40px') || undefined, style: { cursor: collapsible ? 'pointer' : 'default' }, children: [(0, jsx_runtime_1.jsx)(HeadingText, { children: title }), collapsible && ((0, jsx_runtime_1.jsx)(exports.ExpanderButton, { "aria-label": 'Toggle expand section', onClick: () => setExpanded(!expanded), style: {
63
63
  transform: expanded ? 'rotate(0deg)' : 'rotate(180deg)',
64
- }, children: (0, jsx_runtime_1.jsx)(icons_1.ArrowDownCircleIcon, {}) })] }), expanded && children && (0, jsx_runtime_1.jsx)("div", { style: contentStyles, children: children })] }));
64
+ }, children: (0, jsx_runtime_1.jsx)(icons_1.ArrowDownCircleIcon, {}) }))] }), expanded && children && (0, jsx_runtime_1.jsx)("div", { style: contentStyles, children: children })] }));
65
65
  };
66
66
  exports.InspectorSection = InspectorSection;
67
67
  const Line = styled_components_1.default.hr `
@@ -52,16 +52,16 @@ const Input = styled_components_1.default.input `
52
52
 
53
53
  &:checked + label::before {
54
54
  background: ${(props) => props.theme.colors.background.primary};
55
- box-shadow: inset 0 0 0 4px #0d79d0;
56
- border-color: #0d79d0;
55
+ box-shadow: inset 0 0 0 4px ${(props) => props.theme.colors.brand.default};
56
+ border-color: ${(props) => props.theme.colors.brand.default};
57
57
  }
58
58
 
59
59
  &:hover:not(:disabled) + label::before {
60
- border-color: ${(props) => props.theme.colors.text.secondary};
60
+ border-color: ${(props) => props.theme.colors.text.greyMuted};
61
61
  }
62
62
 
63
63
  &:focus-visible + label::before {
64
- border-color: #0d79d0;
64
+ border-color: ${(props) => props.theme.colors.brand.default};
65
65
  }
66
66
 
67
67
  &:disabled + label {
@@ -75,5 +75,15 @@ const Input = styled_components_1.default.input `
75
75
  border-color: #e4e4e4;
76
76
  }
77
77
  `;
78
- const RadioButton = ({ checked, id, label, name, ...rest }) => ((0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, { children: [(0, jsx_runtime_1.jsx)(Input, { checked: checked, type: "radio", name: name, id: id, ...rest }), (0, jsx_runtime_1.jsx)("label", { htmlFor: id, children: label })] }));
78
+ const RadioButtonContainer = styled_components_1.default.div `
79
+ display: inline-flex;
80
+ align-items: center;
81
+ position: relative;
82
+ margin-right: ${(props) => props.theme.grid.unit * 4}px;
83
+
84
+ &:last-child {
85
+ margin-right: 0;
86
+ }
87
+ `;
88
+ const RadioButton = ({ checked, id, label, name, ...rest }) => ((0, jsx_runtime_1.jsxs)(RadioButtonContainer, { className: "radio-button-container", children: [(0, jsx_runtime_1.jsx)(Input, { checked: checked, type: "radio", name: name, id: id, ...rest }), (0, jsx_runtime_1.jsx)("label", { htmlFor: id, children: label })] }));
79
89
  exports.RadioButton = RadioButton;
@@ -0,0 +1,27 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.StyledRadioGroup = void 0;
7
+ const jsx_runtime_1 = require("react/jsx-runtime");
8
+ const styled_components_1 = __importDefault(require("styled-components"));
9
+ const RadioButton_1 = require("./RadioButton");
10
+ const RadioWrapper = styled_components_1.default.div `
11
+ display: flex;
12
+ flex-direction: row;
13
+ flex-wrap: wrap;
14
+ gap: ${(props) => props.theme.grid.unit * 4}px;
15
+ padding: ${(props) => props.theme.grid.unit * 2}px 0;
16
+
17
+ & > * {
18
+ margin-right: ${(props) => props.theme.grid.unit * 4}px;
19
+ &:last-child {
20
+ margin-right: 0;
21
+ }
22
+ }
23
+ `;
24
+ const StyledRadioGroup = ({ name, options, value, onChange, disabled, }) => {
25
+ return ((0, jsx_runtime_1.jsx)(RadioWrapper, { children: options.map((option, index) => ((0, jsx_runtime_1.jsx)(RadioButton_1.RadioButton, { name: name, id: `${name}-option-${index}`, label: option.label, value: option.value, checked: value === option.value, onChange: onChange, disabled: disabled }, index))) }));
26
+ };
27
+ exports.StyledRadioGroup = StyledRadioGroup;
@@ -19,15 +19,17 @@ const selectStyles = (theme, error, variant) => ({
19
19
  : state.isFocused
20
20
  ? theme.colors.brand.default
21
21
  : theme.colors.border.field.default,
22
+ borderWidth: state.isFocused ? 2 : 1,
22
23
  boxShadow: 'none',
23
24
  '&:hover': {
24
25
  borderColor: error
25
26
  ? theme.colors.border.error
26
27
  : state.isFocused
27
28
  ? theme.colors.brand.default
28
- : theme.colors.text.secondary,
29
+ : theme.colors.text.greyMuted || theme.colors.text.secondary,
29
30
  backgroundColor: !state.isDisabled ? '#F2FBFC' : 'transparent',
30
31
  },
32
+ padding: state.isFocused ? '0 7px' : '0 8px',
31
33
  backgroundColor: state.isDisabled
32
34
  ? '#F5F5F5'
33
35
  : state.isFocused
@@ -67,11 +69,15 @@ const selectStyles = (theme, error, variant) => ({
67
69
  overflow: 'hidden',
68
70
  boxShadow: '0 4px 6px rgba(0, 0, 0, 0.1)',
69
71
  }),
70
- placeholder: (base) => ({
72
+ placeholder: (base, state) => ({
71
73
  ...base,
72
- color: theme.colors.text.secondary,
74
+ color: state.isFocused || state.selectProps.menuIsOpen
75
+ ? theme.colors.text.greyLight || '#C9C9C9'
76
+ : theme.colors.text.greyMuted ||
77
+ theme.colors.text.secondary ||
78
+ '#6E6E6E',
73
79
  fontStyle: 'italic',
74
- fontFamily: theme.font.family.sans,
80
+ fontFamily: "'PT Sans', sans-serif",
75
81
  fontSize: theme.font.size.medium,
76
82
  fontWeight: theme.font.weight.normal,
77
83
  lineHeight: theme.font.lineHeight.large,
@@ -73,9 +73,9 @@ exports.commonStyles = (0, styled_components_1.css) `
73
73
  color: ${(props) => props.theme.colors.text.primary};
74
74
 
75
75
  &::placeholder {
76
- color: ${(props) => props.theme.colors.text.secondary};
76
+ color: ${(props) => props.theme.colors.text.greyMuted || '#6E6E6E'};
77
77
  opacity: 1;
78
- font-family: ${(props) => props.theme.font.family.sans};
78
+ font-family: 'PT Sans', sans-serif;
79
79
  font-size: ${(props) => props.theme.font.size.medium};
80
80
  font-style: italic;
81
81
  font-weight: ${(props) => props.theme.font.weight.normal};
@@ -84,6 +84,7 @@ exports.commonStyles = (0, styled_components_1.css) `
84
84
 
85
85
  &:hover:not(:disabled) {
86
86
  background-color: #f2fbfc;
87
+ border-color: ${(props) => props.theme.colors.text.greyMuted};
87
88
  }
88
89
 
89
90
  &:focus:not(:disabled) {
@@ -92,10 +93,20 @@ exports.commonStyles = (0, styled_components_1.css) `
92
93
  ? props.theme.colors.border.error
93
94
  : props.theme.colors.brand.default};
94
95
  background-color: #f2fbfc;
95
-
96
- &::placeholder {
97
- color: #c9c9c9;
96
+ padding: ${(props) => {
97
+ if (props.variant === 'small') {
98
+ return '0 11px';
99
+ }
100
+ if (props.variant === 'large') {
101
+ return '3px 15px';
98
102
  }
103
+ return '0 11px';
104
+ }};
105
+ }
106
+
107
+ &:focus::placeholder {
108
+ color: ${(props) => props.theme.colors.text.greyLight || '#C9C9C9'} !important;
109
+ opacity: 1 !important;
99
110
  }
100
111
 
101
112
  &:disabled {
@@ -145,16 +156,16 @@ exports.TextFieldGroup = styled_components_1.default.div `
145
156
  }
146
157
  `;
147
158
  exports.TextFieldLabel = styled_components_1.default.label `
159
+ display: block;
148
160
  font-family: ${(props) => props.theme.font.family.sans};
149
- text-transform: uppercase;
150
- color: ${(props) => props.theme.colors.text.secondary};
151
-
152
- & ${exports.TextField} {
153
- margin-top: ${(props) => props.theme.grid.unit}px;
154
- }
161
+ color: ${(props) => props.theme.colors.text.primary};
162
+ font-size: ${(props) => props.theme.font.size.normal};
163
+ font-weight: ${(props) => props.theme.font.weight.normal};
164
+ line-height: ${(props) => props.theme.font.lineHeight.normal};
155
165
 
156
- & ${exports.TextArea} {
157
- margin-top: ${(props) => props.theme.grid.unit}px;
166
+ > * {
167
+ margin-top: ${(props) => props.theme.grid.unit * 2}px;
168
+ display: block;
158
169
  }
159
170
  `;
160
171
  const TextFieldWrapperStyles = styled_components_1.default.div `
@@ -0,0 +1,7 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.CalendarIcon = void 0;
4
+ const jsx_runtime_1 = require("react/jsx-runtime");
5
+ const CalendarIcon = (props) => ((0, jsx_runtime_1.jsxs)("svg", { width: "16", height: "16", viewBox: "0 0 16 16", fill: "none", xmlns: "http://www.w3.org/2000/svg", ...props, children: [(0, jsx_runtime_1.jsx)("path", { d: "M0.5 5.5H15.5", stroke: "currentColor", strokeWidth: "1.5", strokeLinecap: "round", strokeLinejoin: "round" }), (0, jsx_runtime_1.jsx)("path", { d: "M14 2.5H2C1.60218 2.5 1.22064 2.65804 0.93934 2.93934C0.658035 3.22064 0.5 3.60218 0.5 4V13C0.5 13.3978 0.658035 13.7794 0.93934 14.0607C1.22064 14.342 1.60218 14.5 2 14.5H14C14.3978 14.5 14.7794 14.342 15.0607 14.0607C15.342 13.7794 15.5 13.3978 15.5 13V4C15.5 3.60218 15.342 3.22064 15.0607 2.93934C14.7794 2.65804 14.3978 2.5 14 2.5V2.5Z", stroke: "currentColor", strokeWidth: "1.5", strokeLinecap: "round", strokeLinejoin: "round" }), (0, jsx_runtime_1.jsx)("path", { d: "M4.5 0.5V2.5", stroke: "currentColor", strokeWidth: "1.5", strokeLinecap: "round", strokeLinejoin: "round" }), (0, jsx_runtime_1.jsx)("path", { d: "M11.5 0.5V2.5", stroke: "currentColor", strokeWidth: "1.5", strokeLinecap: "round", strokeLinejoin: "round" })] }));
6
+ exports.CalendarIcon = CalendarIcon;
7
+ exports.default = exports.CalendarIcon;
@@ -0,0 +1,7 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.GlobeIcon = void 0;
4
+ const jsx_runtime_1 = require("react/jsx-runtime");
5
+ const GlobeIcon = (props) => ((0, jsx_runtime_1.jsxs)("svg", { width: "16", height: "16", viewBox: "0 0 16 16", fill: "none", xmlns: "http://www.w3.org/2000/svg", ...props, children: [(0, jsx_runtime_1.jsx)("path", { d: "M15 8C15 4.13401 11.866 1 8 1C4.13401 1 1 4.13401 1 8C1 11.866 4.13401 15 8 15V16C3.58172 16 0 12.4183 0 8C0 3.58172 3.58172 0 8 0C12.4183 0 16 3.58172 16 8C16 12.4183 12.4183 16 8 16V15C11.866 15 15 11.866 15 8Z", fill: "currentColor" }), (0, jsx_runtime_1.jsx)("path", { d: "M15.5 7.5V8.5L1 8.5L1 7.5L15.5 7.5Z", fill: "currentColor" }), (0, jsx_runtime_1.jsx)("path", { d: "M10.5 8C10.5 5.89548 10.1247 4.03808 9.55859 2.74414C9.27493 2.09576 8.96317 1.63356 8.66748 1.34766C8.37657 1.06641 8.15238 1 8 1C7.84762 1 7.62343 1.06641 7.33252 1.34766C7.03683 1.63356 6.72507 2.09576 6.44141 2.74414C5.87533 4.03808 5.5 5.89548 5.5 8C5.5 10.1045 5.87533 11.9619 6.44141 13.2559C6.72507 13.9042 7.03683 14.3664 7.33252 14.6523C7.62343 14.9336 7.84762 15 8 15V16C6.067 16 4.5 12.4183 4.5 8C4.5 3.58172 6.067 0 8 0C9.933 0 11.5 3.58172 11.5 8C11.5 12.4183 9.933 16 8 16V15C8.15238 15 8.37657 14.9336 8.66748 14.6523C8.96317 14.3664 9.27493 13.9042 9.55859 13.2559C10.1247 11.9619 10.5 10.1045 10.5 8Z", fill: "currentColor" }), (0, jsx_runtime_1.jsx)("path", { d: "M8 5.5C6.43859 5.5 5.00301 5.27085 3.93994 4.88428C3.41056 4.69177 2.94707 4.45051 2.60645 4.15771C2.26743 3.86625 2 3.47669 2 3H3C3 3.07559 3.04069 3.21233 3.2583 3.39941C3.47429 3.58507 3.816 3.77497 4.28174 3.94434C5.20928 4.28162 6.52384 4.5 8 4.5C9.47616 4.5 10.7907 4.28162 11.7183 3.94434C12.184 3.77497 12.5257 3.58507 12.7417 3.39941C12.9593 3.21233 13 3.07559 13 3H14C14 3.47669 13.7326 3.86625 13.3936 4.15771C13.0529 4.45051 12.5894 4.69177 12.0601 4.88428C10.997 5.27085 9.56141 5.5 8 5.5Z", fill: "currentColor" }), (0, jsx_runtime_1.jsx)("path", { d: "M8 10.5C9.56141 10.5 10.997 10.7292 12.0601 11.1157C12.5894 11.3082 13.0529 11.5495 13.3936 11.8423C13.7326 12.1338 14 12.5233 14 13H13C13 12.9244 12.9593 12.7877 12.7417 12.6006C12.5257 12.4149 12.184 12.225 11.7183 12.0557C10.7907 11.7184 9.47616 11.5 8 11.5C6.52384 11.5 5.20928 11.7184 4.28174 12.0557C3.816 12.225 3.47429 12.4149 3.2583 12.6006C3.04069 12.7877 3 12.9244 3 13H2C2 12.5233 2.26743 12.1337 2.60645 11.8423C2.94707 11.5495 3.41056 11.3082 3.93994 11.1157C5.00301 10.7292 6.43859 10.5 8 10.5Z", fill: "currentColor" })] }));
6
+ exports.GlobeIcon = GlobeIcon;
7
+ exports.default = exports.GlobeIcon;
@@ -18,9 +18,9 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
18
18
  return (mod && mod.__esModule) ? mod : { "default": mod };
19
19
  };
20
20
  Object.defineProperty(exports, "__esModule", { value: true });
21
- exports.FileVideoIcon = exports.FileUnknownIcon = exports.FileTableIcon = exports.FilePdfIcon = exports.FileMainDocumentIcon = exports.FileLatexIcon = exports.FileImageIcon = exports.FileGraphicalAbstractIcon = exports.FileFigureIcon = exports.FileDocumentIcon = exports.FileCorruptedIcon = exports.FileCompressedIcon = exports.FileCodeIcon = exports.FileAudioIcon = exports.EditAttrsTrackingIcon = exports.EditIcon = exports.DraggableIcon = exports.DotsIcon = exports.DeleteIcon = exports.DeleteSolidIcon = exports.CorrespondingAuthorIcon = exports.CommentIcon = exports.CommentResolveIcon = exports.CommentReplyIcon = exports.CitationCountIcon = exports.SystemUserAvatarIcon = exports.ChatIcon = exports.BookIcon = exports.AffiliationPlaceholderIcon = exports.AuthorPlaceholderIcon = exports.AffiliationIcon = exports.AlertIcon = exports.AvatarIcon = exports.AttentionRedIcon = exports.AttentionOrangeIcon = exports.AttentionGreenIcon = exports.AttentionBlueIcon = exports.AttachIcon = exports.ArrowUpIcon = exports.ArrowLeftIcon = exports.ArrowDownCircleIcon = exports.ArrowDownIcon = exports.AddRoleIcon = exports.AddIcon = exports.AddOutlineIcon = exports.AddNewIcon = exports.AddedIcon = exports.AddFigureIcon = exports.AddCommentIcon = exports.AddAuthorIcon = void 0;
22
- exports.ToolbarSymbolIcon = exports.ToolbarSuperscriptIcon = exports.ToolbarSubscriptIcon = exports.ToolbarSpecialCharactersIcon = exports.ToolbarOrderedListIcon = exports.ToolbarItalicIcon = exports.ToolbarFigureIcon = exports.ToolbarEquationIcon = exports.ToolbarCodeIcon = exports.ToolbarCitationIcon = exports.ToolbarBoxedTextIcon = exports.ToolbarBoldIcon = exports.TickIcon = exports.TaskStepDoneIcon = exports.SupplementsIcon = exports.SliderOnIcon = exports.SliderOffIcon = exports.SectionCategoryIcon = exports.SearchIcon = exports.ScrollIcon = exports.SaveStatusErrorIcon = exports.SaveStatusSavingIcon = exports.SaveStatusSavedIcon = exports.SaveStatusOfflineIcon = exports.RoleReadingIcon = exports.RoleAnnotatingIcon = exports.PlusIcon = exports.OutlineUnorderedListIcon = exports.OutlineTableIcon = exports.OutlineSectionIcon = exports.OutlinePullQuoteIcon = exports.OutlineParagraphIcon = exports.OutlineOrderedListIcon = exports.OutlineManuscriptIcon = exports.OutlineFigureIcon = exports.OutlineEmbedIcon = exports.OutlineEquationIcon = exports.OutlineCodeIcon = exports.OutlineBlockQuoteIcon = exports.ManuscriptIcon = exports.LogoutIcon = exports.LockIcon = exports.LinkIcon = exports.InspectorPluginIcon = exports.ImageRightIcon = exports.ImageDefaultIcon = exports.ImageLeftIcon = exports.HelpIcon = exports.HandleOutlineIcon = exports.HandleInspectorIcon = void 0;
23
- exports.XIcon = exports.DangerIcon = exports.AddInstitutionIcon = exports.AddUserIcon = exports.ProfileIcon = exports.CrclTickAnimation = exports.VerticalEllipsisIcon = exports.UploadIcon = exports.TriangleExpandedIcon = exports.TriangleCollapsedIcon = exports.TranslateIcon = exports.ToolbarUnindentIcon = exports.ToolbarIndentIcon = exports.ToolbarUnorderedListIcon = exports.ToolbarUnderlineIcon = exports.ToolbarTableIcon = void 0;
21
+ exports.FileUnknownIcon = exports.FileTableIcon = exports.FilePdfIcon = exports.FileMainDocumentIcon = exports.FileLatexIcon = exports.FileImageIcon = exports.FileGraphicalAbstractIcon = exports.FileFigureIcon = exports.FileDocumentIcon = exports.FileCorruptedIcon = exports.FileCompressedIcon = exports.FileCodeIcon = exports.FileAudioIcon = exports.EditAttrsTrackingIcon = exports.EditIcon = exports.DraggableIcon = exports.DotsIcon = exports.DeleteIcon = exports.DeleteSolidIcon = exports.CorrespondingAuthorIcon = exports.CommentIcon = exports.CommentResolveIcon = exports.CommentReplyIcon = exports.CitationCountIcon = exports.SystemUserAvatarIcon = exports.ChatIcon = exports.CalendarIcon = exports.BookIcon = exports.AffiliationPlaceholderIcon = exports.AuthorPlaceholderIcon = exports.AffiliationIcon = exports.AlertIcon = exports.AvatarIcon = exports.AttentionRedIcon = exports.AttentionOrangeIcon = exports.AttentionGreenIcon = exports.AttentionBlueIcon = exports.AttachIcon = exports.ArrowUpIcon = exports.ArrowLeftIcon = exports.ArrowDownCircleIcon = exports.ArrowDownIcon = exports.AddRoleIcon = exports.AddIcon = exports.AddOutlineIcon = exports.AddNewIcon = exports.AddedIcon = exports.AddFigureIcon = exports.AddCommentIcon = exports.AddAuthorIcon = void 0;
22
+ exports.ToolbarSubscriptIcon = exports.ToolbarSpecialCharactersIcon = exports.ToolbarOrderedListIcon = exports.ToolbarItalicIcon = exports.ToolbarFigureIcon = exports.ToolbarEquationIcon = exports.ToolbarCodeIcon = exports.ToolbarCitationIcon = exports.ToolbarBoxedTextIcon = exports.ToolbarBoldIcon = exports.TickIcon = exports.TaskStepDoneIcon = exports.SupplementsIcon = exports.SliderOnIcon = exports.SliderOffIcon = exports.SectionCategoryIcon = exports.SearchIcon = exports.ScrollIcon = exports.SaveStatusErrorIcon = exports.SaveStatusSavingIcon = exports.SaveStatusSavedIcon = exports.SaveStatusOfflineIcon = exports.RoleReadingIcon = exports.RoleAnnotatingIcon = exports.PlusIcon = exports.OutlineUnorderedListIcon = exports.OutlineTableIcon = exports.OutlineSectionIcon = exports.OutlinePullQuoteIcon = exports.OutlineParagraphIcon = exports.OutlineOrderedListIcon = exports.OutlineManuscriptIcon = exports.OutlineFigureIcon = exports.OutlineEmbedIcon = exports.OutlineEquationIcon = exports.OutlineCodeIcon = exports.OutlineBlockQuoteIcon = exports.ManuscriptIcon = exports.LogoutIcon = exports.LockIcon = exports.LinkIcon = exports.InspectorPluginIcon = exports.ImageRightIcon = exports.ImageDefaultIcon = exports.ImageLeftIcon = exports.HelpIcon = exports.GlobeIcon = exports.HandleOutlineIcon = exports.HandleInspectorIcon = exports.FileVideoIcon = void 0;
23
+ exports.XIcon = exports.DangerIcon = exports.AddInstitutionIcon = exports.AddUserIcon = exports.ProfileIcon = exports.CrclTickAnimation = exports.VerticalEllipsisIcon = exports.UploadIcon = exports.TriangleExpandedIcon = exports.TriangleCollapsedIcon = exports.TranslateIcon = exports.ToolbarUnindentIcon = exports.ToolbarIndentIcon = exports.ToolbarUnorderedListIcon = exports.ToolbarUnderlineIcon = exports.ToolbarTableIcon = exports.ToolbarSymbolIcon = exports.ToolbarSuperscriptIcon = void 0;
24
24
  var add_author_1 = require("./add-author");
25
25
  Object.defineProperty(exports, "AddAuthorIcon", { enumerable: true, get: function () { return __importDefault(add_author_1).default; } });
26
26
  var add_comment_1 = require("./add-comment");
@@ -67,6 +67,8 @@ var affiliation_placeholder_1 = require("./affiliation-placeholder");
67
67
  Object.defineProperty(exports, "AffiliationPlaceholderIcon", { enumerable: true, get: function () { return __importDefault(affiliation_placeholder_1).default; } });
68
68
  var book_1 = require("./book");
69
69
  Object.defineProperty(exports, "BookIcon", { enumerable: true, get: function () { return __importDefault(book_1).default; } });
70
+ var calendar_1 = require("./calendar");
71
+ Object.defineProperty(exports, "CalendarIcon", { enumerable: true, get: function () { return __importDefault(calendar_1).default; } });
70
72
  var chat_1 = require("./chat");
71
73
  Object.defineProperty(exports, "ChatIcon", { enumerable: true, get: function () { return __importDefault(chat_1).default; } });
72
74
  var system_user_avatar_1 = require("./system-user-avatar");
@@ -125,6 +127,8 @@ var handle_inspector_1 = require("./handle-inspector");
125
127
  Object.defineProperty(exports, "HandleInspectorIcon", { enumerable: true, get: function () { return __importDefault(handle_inspector_1).default; } });
126
128
  var handle_outline_1 = require("./handle-outline");
127
129
  Object.defineProperty(exports, "HandleOutlineIcon", { enumerable: true, get: function () { return __importDefault(handle_outline_1).default; } });
130
+ var globe_1 = require("./globe");
131
+ Object.defineProperty(exports, "GlobeIcon", { enumerable: true, get: function () { return __importDefault(globe_1).default; } });
128
132
  var help_1 = require("./help");
129
133
  Object.defineProperty(exports, "HelpIcon", { enumerable: true, get: function () { return __importDefault(help_1).default; } });
130
134
  var image_left_1 = require("./image-left");
package/dist/cjs/index.js CHANGED
@@ -51,15 +51,17 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
51
51
  for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
52
52
  };
53
53
  Object.defineProperty(exports, "__esModule", { value: true });
54
- exports.ToggleIcon = exports.ToggleHeader = exports.colors = exports.defaultTheme = void 0;
54
+ exports.ToggleIcon = exports.ToggleHeader = exports.StyledRadioGroup = exports.defaultTheme = exports.colors = void 0;
55
+ exports.colors = __importStar(require("./colors"));
55
56
  var defaultTheme_1 = require("./defaultTheme");
56
57
  Object.defineProperty(exports, "defaultTheme", { enumerable: true, get: function () { return defaultTheme_1.defaultTheme; } });
57
- exports.colors = __importStar(require("./colors"));
58
58
  __exportStar(require("./components/AlertMessage"), exports);
59
59
  __exportStar(require("./components/Message"), exports);
60
60
  __exportStar(require("./components/Button"), exports);
61
61
  __exportStar(require("./components/ContextMenu"), exports);
62
62
  __exportStar(require("./components/RadioButton"), exports);
63
+ var RadioGroup_1 = require("./components/RadioGroup");
64
+ Object.defineProperty(exports, "StyledRadioGroup", { enumerable: true, get: function () { return RadioGroup_1.StyledRadioGroup; } });
63
65
  __exportStar(require("./components/Avatar"), exports);
64
66
  __exportStar(require("./components/Dialog"), exports);
65
67
  __exportStar(require("./components/DraggableModal"), exports);
@@ -71,6 +73,8 @@ __exportStar(require("./components/SaveStatus"), exports);
71
73
  __exportStar(require("./components/StyledModal"), exports);
72
74
  __exportStar(require("./components/Sidebar"), exports);
73
75
  __exportStar(require("./components/TextField"), exports);
76
+ __exportStar(require("./components/FormFieldContainer"), exports);
77
+ __exportStar(require("./components/FormCommon"), exports);
74
78
  __exportStar(require("./components/ToggleSwitch"), exports);
75
79
  var ToggleHeader_1 = require("./components/ToggleHeader");
76
80
  Object.defineProperty(exports, "ToggleHeader", { enumerable: true, get: function () { return ToggleHeader_1.ToggleHeader; } });
@@ -87,6 +91,7 @@ __exportStar(require("./components/Text"), exports);
87
91
  __exportStar(require("./components/RelativeDate"), exports);
88
92
  __exportStar(require("./components/Menus"), exports);
89
93
  __exportStar(require("./components/Drawer"), exports);
94
+ __exportStar(require("./components/DatePicker"), exports);
90
95
  __exportStar(require("./components/SelectField"), exports);
91
96
  __exportStar(require("./components/SelectedItemsBox"), exports);
92
97
  __exportStar(require("./hooks/use-dropdown"), exports);