no-frills-ui 0.0.14-alpha.1 → 0.0.14-alpha.11

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 (222) hide show
  1. package/README.md +28 -22
  2. package/dist/index.js +3418 -2772
  3. package/dist/index.js.map +1 -1
  4. package/lib-esm/components/Accordion/Accordion.d.ts +11 -16
  5. package/lib-esm/components/Accordion/Accordion.js +25 -29
  6. package/lib-esm/components/Accordion/Accordion.js.map +1 -1
  7. package/lib-esm/components/Accordion/AccordionStep.d.ts +22 -22
  8. package/lib-esm/components/Accordion/AccordionStep.js +111 -109
  9. package/lib-esm/components/Accordion/AccordionStep.js.map +1 -1
  10. package/lib-esm/components/Badge/Badge.d.ts +13 -16
  11. package/lib-esm/components/Badge/Badge.js +31 -51
  12. package/lib-esm/components/Badge/Badge.js.map +1 -1
  13. package/lib-esm/components/Button/ActionButton.d.ts +9 -5
  14. package/lib-esm/components/Button/ActionButton.js +18 -38
  15. package/lib-esm/components/Button/ActionButton.js.map +1 -1
  16. package/lib-esm/components/Button/Button.d.ts +9 -5
  17. package/lib-esm/components/Button/Button.js +18 -40
  18. package/lib-esm/components/Button/Button.js.map +1 -1
  19. package/lib-esm/components/Button/IconButton.d.ts +9 -5
  20. package/lib-esm/components/Button/IconButton.js +18 -42
  21. package/lib-esm/components/Button/IconButton.js.map +1 -1
  22. package/lib-esm/components/Button/LinkButton.d.ts +9 -5
  23. package/lib-esm/components/Button/LinkButton.js +18 -32
  24. package/lib-esm/components/Button/LinkButton.js.map +1 -1
  25. package/lib-esm/components/Button/RaisedButton.d.ts +9 -5
  26. package/lib-esm/components/Button/RaisedButton.js +18 -46
  27. package/lib-esm/components/Button/RaisedButton.js.map +1 -1
  28. package/lib-esm/components/Card/Card.d.ts +4 -6
  29. package/lib-esm/components/Card/Card.js +18 -13
  30. package/lib-esm/components/Card/Card.js.map +1 -1
  31. package/lib-esm/components/Chip/Chip.d.ts +6 -3
  32. package/lib-esm/components/Chip/Chip.js +44 -43
  33. package/lib-esm/components/Chip/Chip.js.map +1 -1
  34. package/lib-esm/components/ChipInput/ChipInput.d.ts +28 -30
  35. package/lib-esm/components/ChipInput/ChipInput.js +121 -139
  36. package/lib-esm/components/ChipInput/ChipInput.js.map +1 -1
  37. package/lib-esm/components/Dialog/AlertDialog.d.ts +11 -12
  38. package/lib-esm/components/Dialog/AlertDialog.js +44 -28
  39. package/lib-esm/components/Dialog/AlertDialog.js.map +1 -1
  40. package/lib-esm/components/Dialog/ConfirmDialog.d.ts +13 -14
  41. package/lib-esm/components/Dialog/ConfirmDialog.js +49 -33
  42. package/lib-esm/components/Dialog/ConfirmDialog.js.map +1 -1
  43. package/lib-esm/components/Dialog/Dialog.d.ts +40 -18
  44. package/lib-esm/components/Dialog/Dialog.js +125 -70
  45. package/lib-esm/components/Dialog/Dialog.js.map +1 -1
  46. package/lib-esm/components/Dialog/PromptDialog.d.ts +18 -19
  47. package/lib-esm/components/Dialog/PromptDialog.js +78 -49
  48. package/lib-esm/components/Dialog/PromptDialog.js.map +1 -1
  49. package/lib-esm/components/DragAndDrop/DragAndDrop.d.ts +43 -41
  50. package/lib-esm/components/DragAndDrop/DragAndDrop.js +104 -31
  51. package/lib-esm/components/DragAndDrop/DragAndDrop.js.map +1 -1
  52. package/lib-esm/components/DragAndDrop/DragItem.d.ts +5 -1
  53. package/lib-esm/components/DragAndDrop/DragItem.js +171 -92
  54. package/lib-esm/components/DragAndDrop/DragItem.js.map +1 -1
  55. package/lib-esm/components/DragAndDrop/types.d.ts +22 -3
  56. package/lib-esm/components/DragAndDrop/types.js +9 -6
  57. package/lib-esm/components/DragAndDrop/types.js.map +1 -1
  58. package/lib-esm/components/Drawer/Drawer.d.ts +86 -22
  59. package/lib-esm/components/Drawer/Drawer.js +176 -97
  60. package/lib-esm/components/Drawer/Drawer.js.map +1 -1
  61. package/lib-esm/components/Drawer/index.d.ts +1 -1
  62. package/lib-esm/components/Groups/Group.d.ts +5 -8
  63. package/lib-esm/components/Groups/Group.js +34 -79
  64. package/lib-esm/components/Groups/Group.js.map +1 -1
  65. package/lib-esm/components/Groups/GroupLabel.js +8 -17
  66. package/lib-esm/components/Groups/GroupLabel.js.map +1 -1
  67. package/lib-esm/components/Input/Checkbox.d.ts +12 -15
  68. package/lib-esm/components/Input/Checkbox.js +51 -118
  69. package/lib-esm/components/Input/Checkbox.js.map +1 -1
  70. package/lib-esm/components/Input/Dropdown.d.ts +11 -12
  71. package/lib-esm/components/Input/Dropdown.js +133 -52
  72. package/lib-esm/components/Input/Dropdown.js.map +1 -1
  73. package/lib-esm/components/Input/Input.d.ts +3 -3
  74. package/lib-esm/components/Input/Input.js +61 -109
  75. package/lib-esm/components/Input/Input.js.map +1 -1
  76. package/lib-esm/components/Input/Radio.d.ts +4 -8
  77. package/lib-esm/components/Input/Radio.js +35 -79
  78. package/lib-esm/components/Input/Radio.js.map +1 -1
  79. package/lib-esm/components/Input/RadioButton.d.ts +4 -8
  80. package/lib-esm/components/Input/RadioButton.js +34 -71
  81. package/lib-esm/components/Input/RadioButton.js.map +1 -1
  82. package/lib-esm/components/Input/Select.d.ts +6 -13
  83. package/lib-esm/components/Input/Select.js +75 -122
  84. package/lib-esm/components/Input/Select.js.map +1 -1
  85. package/lib-esm/components/Input/TextArea.d.ts +6 -13
  86. package/lib-esm/components/Input/TextArea.js +64 -108
  87. package/lib-esm/components/Input/TextArea.js.map +1 -1
  88. package/lib-esm/components/Input/Toggle.d.ts +4 -9
  89. package/lib-esm/components/Input/Toggle.js +31 -80
  90. package/lib-esm/components/Input/Toggle.js.map +1 -1
  91. package/lib-esm/components/Menu/Menu.d.ts +8 -6
  92. package/lib-esm/components/Menu/Menu.js +116 -31
  93. package/lib-esm/components/Menu/Menu.js.map +1 -1
  94. package/lib-esm/components/Menu/MenuContext.d.ts +11 -5
  95. package/lib-esm/components/Menu/MenuContext.js +6 -2
  96. package/lib-esm/components/Menu/MenuContext.js.map +1 -1
  97. package/lib-esm/components/Menu/MenuItem.d.ts +7 -4
  98. package/lib-esm/components/Menu/MenuItem.js +46 -47
  99. package/lib-esm/components/Menu/MenuItem.js.map +1 -1
  100. package/lib-esm/components/Modal/Modal.d.ts +75 -16
  101. package/lib-esm/components/Modal/Modal.js +146 -51
  102. package/lib-esm/components/Modal/Modal.js.map +1 -1
  103. package/lib-esm/components/Notification/Notification.d.ts +46 -39
  104. package/lib-esm/components/Notification/Notification.js +80 -87
  105. package/lib-esm/components/Notification/Notification.js.map +1 -1
  106. package/lib-esm/components/Notification/NotificationManager.d.ts +19 -5
  107. package/lib-esm/components/Notification/NotificationManager.js +177 -79
  108. package/lib-esm/components/Notification/NotificationManager.js.map +1 -1
  109. package/lib-esm/components/Notification/style.d.ts +6 -3
  110. package/lib-esm/components/Notification/style.js +64 -140
  111. package/lib-esm/components/Notification/style.js.map +1 -1
  112. package/lib-esm/components/Notification/types.d.ts +2 -0
  113. package/lib-esm/components/Notification/types.js +9 -10
  114. package/lib-esm/components/Notification/types.js.map +1 -1
  115. package/lib-esm/components/Popover/Popover.d.ts +21 -20
  116. package/lib-esm/components/Popover/Popover.js +159 -126
  117. package/lib-esm/components/Popover/Popover.js.map +1 -1
  118. package/lib-esm/components/Spinner/Spinner.d.ts +14 -12
  119. package/lib-esm/components/Spinner/Spinner.js +22 -27
  120. package/lib-esm/components/Spinner/Spinner.js.map +1 -1
  121. package/lib-esm/components/Stepper/Step.d.ts +15 -12
  122. package/lib-esm/components/Stepper/Step.js +18 -25
  123. package/lib-esm/components/Stepper/Step.js.map +1 -1
  124. package/lib-esm/components/Stepper/Stepper.d.ts +11 -17
  125. package/lib-esm/components/Stepper/Stepper.js +104 -102
  126. package/lib-esm/components/Stepper/Stepper.js.map +1 -1
  127. package/lib-esm/components/Tabs/Tab.d.ts +10 -16
  128. package/lib-esm/components/Tabs/Tab.js +9 -15
  129. package/lib-esm/components/Tabs/Tab.js.map +1 -1
  130. package/lib-esm/components/Tabs/Tabs.d.ts +11 -22
  131. package/lib-esm/components/Tabs/Tabs.js +96 -55
  132. package/lib-esm/components/Tabs/Tabs.js.map +1 -1
  133. package/lib-esm/components/Toast/Toast.d.ts +34 -7
  134. package/lib-esm/components/Toast/Toast.js +200 -109
  135. package/lib-esm/components/Toast/Toast.js.map +1 -1
  136. package/lib-esm/components/Toast/ToastStory.d.ts +21 -24
  137. package/lib-esm/components/Tooltip/Tooltip.d.ts +11 -14
  138. package/lib-esm/components/Tooltip/Tooltip.js +52 -67
  139. package/lib-esm/components/Tooltip/Tooltip.js.map +1 -1
  140. package/lib-esm/components/index.d.ts +1 -0
  141. package/lib-esm/icons/CheckCircle.d.ts +1 -1
  142. package/lib-esm/icons/CheckCircle.js +22 -4
  143. package/lib-esm/icons/CheckCircle.js.map +1 -1
  144. package/lib-esm/icons/Close.d.ts +1 -1
  145. package/lib-esm/icons/Close.js +22 -4
  146. package/lib-esm/icons/Close.js.map +1 -1
  147. package/lib-esm/icons/DragIndicator.d.ts +1 -1
  148. package/lib-esm/icons/DragIndicator.js +22 -4
  149. package/lib-esm/icons/DragIndicator.js.map +1 -1
  150. package/lib-esm/icons/ErrorOutline.d.ts +1 -1
  151. package/lib-esm/icons/ErrorOutline.js +16 -4
  152. package/lib-esm/icons/ErrorOutline.js.map +1 -1
  153. package/lib-esm/icons/ExpandMore.d.ts +1 -1
  154. package/lib-esm/icons/ExpandMore.js +22 -4
  155. package/lib-esm/icons/ExpandMore.js.map +1 -1
  156. package/lib-esm/icons/FiberManualRecord.d.ts +1 -1
  157. package/lib-esm/icons/FiberManualRecord.js +24 -4
  158. package/lib-esm/icons/FiberManualRecord.js.map +1 -1
  159. package/lib-esm/icons/Info.d.ts +1 -1
  160. package/lib-esm/icons/Info.js +22 -4
  161. package/lib-esm/icons/Info.js.map +1 -1
  162. package/lib-esm/icons/ReportProblem.d.ts +1 -1
  163. package/lib-esm/icons/ReportProblem.js +22 -4
  164. package/lib-esm/icons/ReportProblem.js.map +1 -1
  165. package/lib-esm/index.js +43 -2
  166. package/lib-esm/index.js.map +1 -1
  167. package/lib-esm/shared/LayerManager.d.ts +34 -4
  168. package/lib-esm/shared/LayerManager.js +248 -114
  169. package/lib-esm/shared/LayerManager.js.map +1 -1
  170. package/lib-esm/shared/constants.d.ts +58 -27
  171. package/lib-esm/shared/constants.js +62 -26
  172. package/lib-esm/shared/constants.js.map +1 -1
  173. package/lib-esm/shared/styles.d.ts +1 -1
  174. package/lib-esm/shared/styles.js +21 -24
  175. package/lib-esm/shared/styles.js.map +1 -1
  176. package/package.json +130 -74
  177. package/lib-esm/components/Accordion/index.js +0 -3
  178. package/lib-esm/components/Accordion/index.js.map +0 -1
  179. package/lib-esm/components/Badge/index.js +0 -2
  180. package/lib-esm/components/Badge/index.js.map +0 -1
  181. package/lib-esm/components/Button/index.js +0 -6
  182. package/lib-esm/components/Button/index.js.map +0 -1
  183. package/lib-esm/components/Card/index.js +0 -3
  184. package/lib-esm/components/Card/index.js.map +0 -1
  185. package/lib-esm/components/Chip/index.js +0 -2
  186. package/lib-esm/components/Chip/index.js.map +0 -1
  187. package/lib-esm/components/ChipInput/index.js +0 -2
  188. package/lib-esm/components/ChipInput/index.js.map +0 -1
  189. package/lib-esm/components/Dialog/index.js +0 -5
  190. package/lib-esm/components/Dialog/index.js.map +0 -1
  191. package/lib-esm/components/DragAndDrop/index.js +0 -3
  192. package/lib-esm/components/DragAndDrop/index.js.map +0 -1
  193. package/lib-esm/components/Drawer/index.js +0 -2
  194. package/lib-esm/components/Drawer/index.js.map +0 -1
  195. package/lib-esm/components/Groups/index.js +0 -3
  196. package/lib-esm/components/Groups/index.js.map +0 -1
  197. package/lib-esm/components/Input/index.js +0 -9
  198. package/lib-esm/components/Input/index.js.map +0 -1
  199. package/lib-esm/components/Menu/index.js +0 -3
  200. package/lib-esm/components/Menu/index.js.map +0 -1
  201. package/lib-esm/components/Modal/index.js +0 -2
  202. package/lib-esm/components/Modal/index.js.map +0 -1
  203. package/lib-esm/components/Notification/index.js +0 -3
  204. package/lib-esm/components/Notification/index.js.map +0 -1
  205. package/lib-esm/components/Popover/index.js +0 -2
  206. package/lib-esm/components/Popover/index.js.map +0 -1
  207. package/lib-esm/components/Spinner/index.js +0 -2
  208. package/lib-esm/components/Spinner/index.js.map +0 -1
  209. package/lib-esm/components/Stepper/index.js +0 -4
  210. package/lib-esm/components/Stepper/index.js.map +0 -1
  211. package/lib-esm/components/Tabs/index.js +0 -3
  212. package/lib-esm/components/Tabs/index.js.map +0 -1
  213. package/lib-esm/components/Toast/ToastStory.js +0 -35
  214. package/lib-esm/components/Toast/ToastStory.js.map +0 -1
  215. package/lib-esm/components/Toast/index.js +0 -2
  216. package/lib-esm/components/Toast/index.js.map +0 -1
  217. package/lib-esm/components/Tooltip/index.js +0 -2
  218. package/lib-esm/components/Tooltip/index.js.map +0 -1
  219. package/lib-esm/components/index.js +0 -20
  220. package/lib-esm/components/index.js.map +0 -1
  221. package/lib-esm/icons/index.js +0 -9
  222. package/lib-esm/icons/index.js.map +0 -1
@@ -1,83 +1,34 @@
1
- import { jsx as _jsx, jsxs as _jsxs } from "@emotion/react/jsx-runtime";
2
- import PropTypes from 'prop-types';
1
+ import { jsxs, jsx } from '@emotion/react/jsx-runtime';
2
+ import React from 'react';
3
3
  import styled from '@emotion/styled';
4
- import constants from '../../shared/constants';
5
- const Switch = styled.label `
6
- position: relative;
7
- display: inline-flex;
8
- margin: 5px 0;
9
- `;
10
- const Input = styled.input `
11
- appearance: none;
12
- margin: 0;
4
+ import { getThemeValue, THEME_NAME } from '../../shared/constants.js';
13
5
 
14
- & + span {
15
- position: relative;
16
- cursor: pointer;
17
- width: 30px;
18
- height: 18px;
19
- background-color: ${constants.LIGHT_GREY};
20
- transition: .4s;
21
- border-radius: 10px;
22
- padding: 0 3px;
23
- margin: 0 10px 0 5px;
24
- }
25
- & + span:before {
26
- position: absolute;
27
- content: "";
28
- height: 14px;
29
- width: 14px;
30
- left: 1px;
31
- top: 1px;
32
- border: 1px solid var(--disabled-border, ${constants.DISABLED_BORDER});
33
- border-radius: 50%;
34
- background-color: var(--background, ${constants.BACKGROUND});
35
- transition: .4s;
36
- }
37
-
38
- /* checked */
39
- &:checked + span {
40
- background-color: var(--primary, ${constants.PRIMARY_LIGHT});
41
- }
42
-
43
- &:checked + span:before {
44
- transform: translateX(18px);
45
- border-color: var(--primary, ${constants.PRIMARY});
46
- }
47
-
48
- /* focus */
49
- &:enabled:focus + span:before {
50
- box-shadow: 0 0 0 3px var(--primary, ${constants.PRIMARY_LIGHT});
51
- border-color: var(--primary, ${constants.PRIMARY});
52
- }
53
-
54
- /* hover */
55
- &:enabled:hover ~ span {
56
- cursor: pointer;
57
- color: var(--primary, ${constants.PRIMARY});
58
- }
59
-
60
- /* disabled */
61
- &:disabled ~ span {
62
- color: var(--disabled-border, ${constants.DISABLED_BORDER});
63
- }
64
-
65
- &:disabled + span {
66
- background-color: ${constants.LIGHT_GREY};
67
- cursor: not-allowed;
68
- }
69
-
70
- &:disabled + span:before {
71
- background-color: var(--border-light-color, ${constants.BORDER_LIGHT_COLOR});
72
- border-color: var(--disabled-border, ${constants.DISABLED_BORDER});
73
- }
74
- `;
75
- function Toggle(props) {
76
- return (_jsxs(Switch, { children: [_jsx(Input, Object.assign({}, props, { type: 'checkbox' })), _jsx("span", {}), _jsx("span", { children: props.label })] }));
6
+ const Switch = /*#__PURE__*/ styled("label", {
7
+ target: "ebp76g50",
8
+ label: "Switch"
9
+ })("position:relative;display:inline-flex;margin:5px 0;");
10
+ const Input$1 = /*#__PURE__*/ styled("input", {
11
+ target: "ebp76g51",
12
+ label: "Input"
13
+ })("position:absolute;width:0;height:0;appearance:none;margin:0;& + span{position:relative;cursor:pointer;width:30px;height:18px;background-color:", getThemeValue(THEME_NAME.LIGHT_GREY), ";transition:0.4s;border-radius:10px;padding:0 3px;margin:0 10px 0 5px;}& + span:before{position:absolute;content:'';height:14px;width:14px;left:1px;top:1px;border:1px solid ", getThemeValue(THEME_NAME.DISABLED_BORDER), ";border-radius:50%;background-color:", getThemeValue(THEME_NAME.BACKGROUND), ";transition:0.4s;}&:checked + span{background-color:", getThemeValue(THEME_NAME.PRIMARY_LIGHT), ";}&:checked + span:before{transform:translateX(18px);border-color:", getThemeValue(THEME_NAME.PRIMARY), ";}&:enabled:focus + span:before{box-shadow:0 0 0 3px ", getThemeValue(THEME_NAME.PRIMARY_LIGHT), ";border-color:", getThemeValue(THEME_NAME.PRIMARY), ";}&:enabled:hover ~ span{cursor:pointer;color:", getThemeValue(THEME_NAME.PRIMARY), ";}&:disabled ~ span{color:", getThemeValue(THEME_NAME.DISABLED_BORDER), ";}&:disabled + span{background-color:", getThemeValue(THEME_NAME.LIGHT_GREY), ";cursor:not-allowed;}&:disabled + span:before{background-color:", getThemeValue(THEME_NAME.BORDER_LIGHT_COLOR), ";border-color:", getThemeValue(THEME_NAME.DISABLED_BORDER), ";}");
14
+ function ToggleComponent(props, ref) {
15
+ return /*#__PURE__*/ jsxs(Switch, {
16
+ children: [
17
+ /*#__PURE__*/ jsx(Input$1, {
18
+ ...props,
19
+ ref: ref,
20
+ type: "checkbox",
21
+ role: "switch",
22
+ "aria-checked": props.checked
23
+ }),
24
+ /*#__PURE__*/ jsx("span", {}),
25
+ /*#__PURE__*/ jsx("span", {
26
+ children: props.label
27
+ })
28
+ ]
29
+ });
77
30
  }
78
- Toggle.propTypes = {
79
- /** Label for the field */
80
- label: PropTypes.string,
81
- };
82
- export default Toggle;
83
- //# sourceMappingURL=Toggle.js.map
31
+ const Toggle = /*#__PURE__*/ React.forwardRef(ToggleComponent);
32
+
33
+ export { Toggle as default };
34
+ //# sourceMappingURL=Toggle.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"Toggle.js","sourceRoot":"","sources":["../../../src/components/Input/Toggle.tsx"],"names":[],"mappings":";AACA,OAAO,SAAS,MAAM,YAAY,CAAC;AACnC,OAAO,MAAM,MAAM,iBAAiB,CAAC;AACrC,OAAO,SAAS,MAAM,wBAAwB,CAAC;AAE/C,MAAM,MAAM,GAAG,MAAM,CAAC,KAAK,CAAA;;;;CAI1B,CAAC;AAEF,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAA;;;;;;;;;4BASE,SAAS,CAAC,UAAU;;;;;;;;;;;;;mDAaG,SAAS,CAAC,eAAe;;8CAE9B,SAAS,CAAC,UAAU;;;;;;2CAMvB,SAAS,CAAC,aAAa;;;;;uCAK3B,SAAS,CAAC,OAAO;;;;;+CAKT,SAAS,CAAC,aAAa;uCAC/B,SAAS,CAAC,OAAO;;;;;;gCAMxB,SAAS,CAAC,OAAO;;;;;wCAKT,SAAS,CAAC,eAAe;;;;4BAIrC,SAAS,CAAC,UAAU;;;;;sDAKM,SAAS,CAAC,kBAAkB;+CACnC,SAAS,CAAC,eAAe;;CAEvE,CAAC;AAKF,SAAS,MAAM,CAAC,KAAkB;IAC9B,OAAO,CACH,MAAC,MAAM,eACH,KAAC,KAAK,oBAAK,KAAK,IAAE,IAAI,EAAC,UAAU,IAAG,EACpC,gBAAa,EACb,yBAAO,KAAK,CAAC,KAAK,GAAQ,IACrB,CACZ,CAAC;AACN,CAAC;AAED,MAAM,CAAC,SAAS,GAAG;IACf,0BAA0B;IAC1B,KAAK,EAAE,SAAS,CAAC,MAAM;CAC1B,CAAA;AAED,eAAe,MAAM,CAAC"}
1
+ {"version":3,"file":"Toggle.js","sources":["../../../src/components/Input/Toggle.tsx"],"sourcesContent":["import React from 'react';\nimport styled from '@emotion/styled';\nimport { getThemeValue, THEME_NAME } from '../../shared/constants';\n\nconst Switch = styled.label`\n position: relative;\n display: inline-flex;\n margin: 5px 0;\n`;\n\nconst Input = styled.input`\n position: absolute;\n width: 0;\n height: 0;\n appearance: none;\n margin: 0;\n\n & + span {\n position: relative;\n cursor: pointer;\n width: 30px;\n height: 18px;\n background-color: ${getThemeValue(THEME_NAME.LIGHT_GREY)};\n transition: 0.4s;\n border-radius: 10px;\n padding: 0 3px;\n margin: 0 10px 0 5px;\n }\n & + span:before {\n position: absolute;\n content: '';\n height: 14px;\n width: 14px;\n left: 1px;\n top: 1px;\n border: 1px solid ${getThemeValue(THEME_NAME.DISABLED_BORDER)};\n border-radius: 50%;\n background-color: ${getThemeValue(THEME_NAME.BACKGROUND)};\n transition: 0.4s;\n }\n\n /* checked */\n &:checked + span {\n background-color: ${getThemeValue(THEME_NAME.PRIMARY_LIGHT)};\n }\n\n &:checked + span:before {\n transform: translateX(18px);\n border-color: ${getThemeValue(THEME_NAME.PRIMARY)};\n }\n\n /* focus */\n &:enabled:focus + span:before {\n box-shadow: 0 0 0 3px ${getThemeValue(THEME_NAME.PRIMARY_LIGHT)};\n border-color: ${getThemeValue(THEME_NAME.PRIMARY)};\n }\n\n /* hover */\n &:enabled:hover ~ span {\n cursor: pointer;\n color: ${getThemeValue(THEME_NAME.PRIMARY)};\n }\n\n /* disabled */\n &:disabled ~ span {\n color: ${getThemeValue(THEME_NAME.DISABLED_BORDER)};\n }\n\n &:disabled + span {\n background-color: ${getThemeValue(THEME_NAME.LIGHT_GREY)};\n cursor: not-allowed;\n }\n\n &:disabled + span:before {\n background-color: ${getThemeValue(THEME_NAME.BORDER_LIGHT_COLOR)};\n border-color: ${getThemeValue(THEME_NAME.DISABLED_BORDER)};\n }\n`;\n\ntype ToggleProps = {\n /** Label for the field */\n label?: string;\n} & React.InputHTMLAttributes<HTMLInputElement>;\n\nfunction ToggleComponent(props: ToggleProps, ref: React.Ref<HTMLInputElement>) {\n return (\n <Switch>\n <Input\n {...props}\n ref={ref}\n type=\"checkbox\"\n role=\"switch\"\n aria-checked={props.checked}\n />\n <span></span>\n <span>{props.label}</span>\n </Switch>\n );\n}\n\nconst Toggle = React.forwardRef(ToggleComponent);\nexport default Toggle;\n"],"names":["Switch","styled","Input","getThemeValue","THEME_NAME","LIGHT_GREY","DISABLED_BORDER","BACKGROUND","PRIMARY_LIGHT","PRIMARY","BORDER_LIGHT_COLOR","ToggleComponent","props","ref","_jsxs","_jsx","type","role","aria-checked","checked","span","label","Toggle","React","forwardRef"],"mappings":";;;;;AAIA,MAAMA,MAAAA,iBAASC,MAAAA,CAAAA,OAAAA,EAAAA;;;;AAMf,MAAMC,OAAAA,iBAAQD,MAAAA,CAAAA,OAAAA,EAAAA;;;qJAYcE,aAAAA,CAAcC,UAAAA,CAAWC,UAAU,CAAA,EAAA,+KAAA,EAanCF,aAAAA,CAAcC,WAAWE,eAAe,CAAA,EAAA,sCAAA,EAExCH,cAAcC,UAAAA,CAAWG,UAAU,2DAMnCJ,aAAAA,CAAcC,UAAAA,CAAWI,aAAa,CAAA,EAAA,oEAAA,EAK1CL,aAAAA,CAAcC,WAAWK,OAAO,CAAA,EAAA,uDAAA,EAKxBN,cAAcC,UAAAA,CAAWI,aAAa,qBAC9CL,aAAAA,CAAcC,UAAAA,CAAWK,OAAO,CAAA,EAAA,gDAAA,EAMvCN,aAAAA,CAAcC,WAAWK,OAAO,CAAA,EAAA,4BAAA,EAKhCN,cAAcC,UAAAA,CAAWE,eAAe,4CAI7BH,aAAAA,CAAcC,UAAAA,CAAWC,UAAU,CAAA,EAAA,iEAAA,EAKnCF,aAAAA,CAAcC,WAAWM,kBAAkB,CAAA,EAAA,gBAAA,EAC/CP,aAAAA,CAAcC,UAAAA,CAAWE,eAAe,CAAA,EAAA,IAAA,CAAA;AAShE,SAASK,eAAAA,CAAgBC,KAAkB,EAAEC,GAAgC,EAAA;AACzE,IAAA,qBACIC,IAAA,CAACd,MAAAA,EAAAA;;0BACGe,GAAA,CAACb,OAAAA,EAAAA;AACI,gBAAA,GAAGU,KAAK;gBACTC,GAAAA,EAAKA,GAAAA;gBACLG,IAAAA,EAAK,UAAA;gBACLC,IAAAA,EAAK,QAAA;AACLC,gBAAAA,cAAAA,EAAcN,MAAMO;;0BAExBJ,GAAA,CAACK,MAAAA,EAAAA,EAAAA,CAAAA;0BACDL,GAAA,CAACK,MAAAA,EAAAA;AAAMR,gBAAAA,QAAAA,EAAAA,KAAAA,CAAMS;;;;AAGzB;AAEA,MAAMC,MAAAA,iBAASC,KAAAA,CAAMC,UAAU,CAACb,eAAAA;;;;"}
@@ -1,13 +1,15 @@
1
- import React, { ReactNode } from 'react';
2
- interface MenuProps<T> {
1
+ import React from 'react';
2
+ /**
3
+ * Props for the Menu component.
4
+ * @template T - The type of value(s) in the menu.
5
+ */
6
+ type MenuProps<T> = {
3
7
  /** Multiple Menu Items can be selected */
4
8
  multiSelect?: boolean;
5
9
  /** Value(s) selected */
6
10
  value?: T | T[];
7
11
  /** Callback when the selected value changes */
8
12
  onChange?: (value: T | T[]) => void;
9
- /** Menu Items */
10
- children?: ReactNode;
11
- }
12
- declare const Menu: React.ForwardRefExoticComponent<MenuProps<unknown> & React.RefAttributes<HTMLDivElement>>;
13
+ } & Omit<React.HTMLAttributes<HTMLDivElement>, 'onChange'>;
14
+ declare const Menu: <T>(props: MenuProps<T> & React.RefAttributes<HTMLDivElement>) => React.ReactElement;
13
15
  export default Menu;
@@ -1,45 +1,130 @@
1
- import { jsx as _jsx } from "@emotion/react/jsx-runtime";
1
+ import { jsx } from '@emotion/react/jsx-runtime';
2
2
  import React, { useState } from 'react';
3
3
  import styled from '@emotion/styled';
4
- import MenuContext from './MenuContext';
5
- const MenuContainer = styled.div `
6
- flex: 1;
7
- display: flex;
8
- flex-direction: column;
4
+ import { getThemeValue, THEME_NAME } from '../../shared/constants.js';
5
+ import MenuContext from './MenuContext.js';
9
6
 
10
- & div:last-child {
11
- border-bottom: none;
12
- }
13
- `;
14
- const Menu = React.forwardRef(function (props, ref) {
15
- const { multiSelect, onChange } = props;
16
- const [value, setValue] = useState(props.value || (multiSelect ? [] : ''));
17
- const updateValue = (val) => {
7
+ const MenuContainer = /*#__PURE__*/ styled("div", {
8
+ target: "e1nm0ogj0",
9
+ label: "MenuContainer"
10
+ })("flex:1;display:flex;flex-direction:column;& div:last-child{border-bottom:none;}&:focus-within{box-shadow:0 0 0 4px ", getThemeValue(THEME_NAME.PRIMARY_LIGHT), ";}");
11
+ /**
12
+ * Menu component that allows selection of items from a list.
13
+ * Supports single and multi-select modes and keyboard navigation.
14
+ *
15
+ * @template T - The type of value(s) in the menu.
16
+ * @param props - The menu properties.
17
+ * @param ref - The ref forwarded to the menu container.
18
+ */ function MenuInner(props, ref) {
19
+ const { multiSelect = false, onChange, value: propValue, children, ...rest } = props;
20
+ // State holds either a single T or an array of T when multiSelect
21
+ const [value, setValue] = useState(propValue);
22
+ /**
23
+ * Updates the selected value(s).
24
+ * Handles both single and multi-select logic.
25
+ *
26
+ * @param {T} val - The value to select or deselect.
27
+ */ const updateValue = (val)=>{
18
28
  let newVal;
19
29
  if (multiSelect) {
20
30
  if (Array.isArray(value)) {
21
31
  if (value.includes(val)) {
22
- newVal = value.filter(item => item !== val);
23
- }
24
- else {
25
- newVal = [...value, val];
32
+ newVal = value.filter((item)=>item !== val);
33
+ } else {
34
+ newVal = [
35
+ ...value,
36
+ val
37
+ ];
26
38
  }
39
+ } else {
40
+ newVal = [
41
+ val
42
+ ];
27
43
  }
28
- }
29
- else {
44
+ } else {
30
45
  newVal = val;
31
46
  }
32
47
  setValue(newVal);
33
- onChange === null || onChange === void 0 ? void 0 : onChange(newVal);
48
+ onChange?.(newVal);
49
+ };
50
+ /**
51
+ * Handles keyboard navigation within the menu.
52
+ * Supports Arrow keys for navigation, and Enter/Space for selection.
53
+ *
54
+ * @param {React.KeyboardEvent} e - The keyboard event.
55
+ */ const handleKeyDown = (e)=>{
56
+ const target = e.target;
57
+ const container = e.currentTarget;
58
+ const items = Array.from(container.querySelectorAll('[role="option"]'));
59
+ const currentIndex = items.indexOf(target);
60
+ let nextIndex;
61
+ switch(e.key){
62
+ case 'ArrowDown':
63
+ e.preventDefault();
64
+ nextIndex = currentIndex + 1;
65
+ if (nextIndex >= items.length) nextIndex = 0;
66
+ items[nextIndex]?.focus();
67
+ break;
68
+ case 'ArrowUp':
69
+ e.preventDefault();
70
+ nextIndex = currentIndex - 1;
71
+ if (nextIndex < 0) nextIndex = items.length - 1;
72
+ items[nextIndex]?.focus();
73
+ break;
74
+ case 'Home':
75
+ e.preventDefault();
76
+ items[0]?.focus();
77
+ break;
78
+ case 'End':
79
+ e.preventDefault();
80
+ items[items.length - 1]?.focus();
81
+ break;
82
+ case 'Enter':
83
+ case ' ':
84
+ e.preventDefault();
85
+ target.click();
86
+ break;
87
+ }
34
88
  };
35
- return (_jsx(MenuContext.Provider, { value: {
36
- value,
37
- multiSelect,
89
+ /**
90
+ * Handles focus events on the menu container.
91
+ * Delegates focus to the first item if the container itself receives focus.
92
+ *
93
+ * @param {React.FocusEvent} e - The focus event.
94
+ */ const focusHandler = (e)=>{
95
+ // Prevent trap: If focus came from inside (Shift+Tab), do NOT auto-focus again.
96
+ // This allows focus to land on the container, and the next Shift+Tab will exit.
97
+ if (e.currentTarget.contains(e.relatedTarget)) {
98
+ return;
99
+ }
100
+ // Only if focus is actually on the container (e.g. tabbing into it)
101
+ // and not bubbling up from a child
102
+ if (e.target === e.currentTarget) {
103
+ // Prevent the container from holding focus; delegate to first item
104
+ const firstItem = e.currentTarget.querySelector('[role="option"]');
105
+ firstItem?.focus();
106
+ }
107
+ };
108
+ return(// @ts-expect-error Generic context typing
109
+ /*#__PURE__*/ jsx(MenuContext.Provider, {
110
+ value: {
111
+ value: value,
112
+ multiSelect: !!multiSelect,
38
113
  updateValue
39
- }, children: _jsx(MenuContainer, { ref: ref, children: props.children }) }));
40
- });
41
- Menu.defaultProps = {
42
- multiSelect: false,
43
- };
44
- export default Menu;
45
- //# sourceMappingURL=Menu.js.map
114
+ },
115
+ children: /*#__PURE__*/ jsx(MenuContainer, {
116
+ ...rest,
117
+ ref: ref,
118
+ role: "listbox",
119
+ "aria-multiselectable": multiSelect,
120
+ tabIndex: 0,
121
+ onKeyDown: handleKeyDown,
122
+ onFocus: focusHandler,
123
+ children: children
124
+ })
125
+ }));
126
+ }
127
+ const Menu = /*#__PURE__*/ React.forwardRef(MenuInner);
128
+
129
+ export { Menu as default };
130
+ //# sourceMappingURL=Menu.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"Menu.js","sourceRoot":"","sources":["../../../src/components/Menu/Menu.tsx"],"names":[],"mappings":";AAAA,OAAO,KAAK,EAAE,EAAE,QAAQ,EAA2B,MAAM,OAAO,CAAC;AACjE,OAAO,MAAM,MAAM,iBAAiB,CAAC;AACrC,OAAO,WAAW,MAAM,eAAe,CAAC;AAYxC,MAAM,aAAa,GAAG,MAAM,CAAC,GAAG,CAAA;;;;;;;;CAQ/B,CAAC;AAEF,MAAM,IAAI,GAAG,KAAK,CAAC,UAAU,CAAC,UAAa,KAAmB,EAAE,GAAiC;IAC7F,MAAM,EAAE,WAAW,EAAE,QAAQ,EAAE,GAAG,KAAK,CAAC;IACxC,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,KAAK,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IAE3E,MAAM,WAAW,GAAG,CAAC,GAAM,EAAE,EAAE;QAC3B,IAAI,MAAM,CAAC;QACX,IAAI,WAAW,EAAE,CAAC;YACd,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;gBACvB,IAAI,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;oBACtB,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,KAAK,GAAG,CAAC,CAAC;gBAChD,CAAC;qBAAM,CAAC;oBACJ,MAAM,GAAG,CAAC,GAAG,KAAK,EAAE,GAAG,CAAC,CAAC;gBAC7B,CAAC;YACL,CAAC;QACL,CAAC;aAAM,CAAC;YACJ,MAAM,GAAG,GAAG,CAAC;QACjB,CAAC;QACD,QAAQ,CAAC,MAAM,CAAC,CAAC;QACjB,QAAQ,aAAR,QAAQ,uBAAR,QAAQ,CAAG,MAAM,CAAC,CAAC;IACvB,CAAC,CAAA;IAED,OAAO,CACH,KAAC,WAAW,CAAC,QAAQ,IAAC,KAAK,EAAE;YACzB,KAAK;YACL,WAAW;YACX,WAAW;SACd,YACG,KAAC,aAAa,IAAC,GAAG,EAAE,GAAG,YAClB,KAAK,CAAC,QAAQ,GACH,GACG,CAC1B,CAAA;AACL,CAAC,CAAC,CAAC;AAEH,IAAI,CAAC,YAAY,GAAG;IAChB,WAAW,EAAE,KAAK;CACrB,CAAA;AAED,eAAe,IAAI,CAAC"}
1
+ {"version":3,"file":"Menu.js","sources":["../../../src/components/Menu/Menu.tsx"],"sourcesContent":["import React, { useState, ForwardedRef } from 'react';\nimport styled from '@emotion/styled';\nimport { getThemeValue, THEME_NAME } from '../../shared/constants';\nimport MenuContext from './MenuContext';\n/**\n * Props for the Menu component.\n * @template T - The type of value(s) in the menu.\n */\ntype MenuProps<T> = {\n /** Multiple Menu Items can be selected */\n multiSelect?: boolean;\n /** Value(s) selected */\n value?: T | T[];\n /** Callback when the selected value changes */\n onChange?: (value: T | T[]) => void;\n} & Omit<React.HTMLAttributes<HTMLDivElement>, 'onChange'>;\n\nconst MenuContainer = styled.div`\n flex: 1;\n display: flex;\n flex-direction: column;\n\n & div:last-child {\n border-bottom: none;\n }\n\n &:focus-within {\n box-shadow: 0 0 0 4px ${getThemeValue(THEME_NAME.PRIMARY_LIGHT)};\n }\n`;\n\n/**\n * Menu component that allows selection of items from a list.\n * Supports single and multi-select modes and keyboard navigation.\n *\n * @template T - The type of value(s) in the menu.\n * @param props - The menu properties.\n * @param ref - The ref forwarded to the menu container.\n */\nfunction MenuInner<T>(props: MenuProps<T>, ref: ForwardedRef<HTMLDivElement>) {\n const { multiSelect = false, onChange, value: propValue, children, ...rest } = props;\n // State holds either a single T or an array of T when multiSelect\n const [value, setValue] = useState<unknown | undefined>(propValue);\n\n /**\n * Updates the selected value(s).\n * Handles both single and multi-select logic.\n *\n * @param {T} val - The value to select or deselect.\n */\n const updateValue = (val: unknown) => {\n let newVal: unknown;\n if (multiSelect) {\n if (Array.isArray(value)) {\n if (value.includes(val as unknown as T)) {\n newVal = (value as T[]).filter((item) => item !== val);\n } else {\n newVal = [...(value as T[]), val];\n }\n } else {\n newVal = [val];\n }\n } else {\n newVal = val;\n }\n\n setValue(newVal as T | T[]);\n onChange?.(newVal as T | T[]);\n };\n\n /**\n * Handles keyboard navigation within the menu.\n * Supports Arrow keys for navigation, and Enter/Space for selection.\n *\n * @param {React.KeyboardEvent} e - The keyboard event.\n */\n const handleKeyDown = (e: React.KeyboardEvent) => {\n const target = e.target as HTMLElement;\n const container = e.currentTarget as HTMLElement;\n const items = Array.from(container.querySelectorAll('[role=\"option\"]')) as HTMLElement[];\n const currentIndex = items.indexOf(target as HTMLElement);\n\n let nextIndex;\n\n switch (e.key) {\n case 'ArrowDown':\n e.preventDefault();\n nextIndex = currentIndex + 1;\n if (nextIndex >= items.length) nextIndex = 0;\n items[nextIndex]?.focus();\n break;\n case 'ArrowUp':\n e.preventDefault();\n nextIndex = currentIndex - 1;\n if (nextIndex < 0) nextIndex = items.length - 1;\n items[nextIndex]?.focus();\n break;\n case 'Home':\n e.preventDefault();\n items[0]?.focus();\n break;\n case 'End':\n e.preventDefault();\n items[items.length - 1]?.focus();\n break;\n case 'Enter':\n case ' ': // Space\n e.preventDefault();\n target.click();\n break;\n default:\n break;\n }\n };\n\n /**\n * Handles focus events on the menu container.\n * Delegates focus to the first item if the container itself receives focus.\n *\n * @param {React.FocusEvent} e - The focus event.\n */\n const focusHandler = (e: React.FocusEvent) => {\n // Prevent trap: If focus came from inside (Shift+Tab), do NOT auto-focus again.\n // This allows focus to land on the container, and the next Shift+Tab will exit.\n if (e.currentTarget.contains(e.relatedTarget as Node)) {\n return;\n }\n\n // Only if focus is actually on the container (e.g. tabbing into it)\n // and not bubbling up from a child\n if (e.target === e.currentTarget) {\n // Prevent the container from holding focus; delegate to first item\n const firstItem = e.currentTarget.querySelector('[role=\"option\"]') as HTMLElement;\n firstItem?.focus();\n }\n };\n\n return (\n // @ts-expect-error Generic context typing\n <MenuContext.Provider value={{ value: value, multiSelect: !!multiSelect, updateValue }}>\n <MenuContainer\n {...rest}\n ref={ref}\n role=\"listbox\"\n aria-multiselectable={multiSelect}\n tabIndex={0}\n onKeyDown={handleKeyDown}\n onFocus={focusHandler}\n >\n {children}\n </MenuContainer>\n </MenuContext.Provider>\n );\n}\n\nconst Menu = React.forwardRef(MenuInner) as <T>(\n props: MenuProps<T> & React.RefAttributes<HTMLDivElement>,\n) => React.ReactElement;\n\nexport default Menu;\n"],"names":["MenuContainer","styled","getThemeValue","THEME_NAME","PRIMARY_LIGHT","MenuInner","props","ref","multiSelect","onChange","value","propValue","children","rest","setValue","useState","updateValue","val","newVal","Array","isArray","includes","filter","item","handleKeyDown","e","target","container","currentTarget","items","from","querySelectorAll","currentIndex","indexOf","nextIndex","key","preventDefault","length","focus","click","focusHandler","contains","relatedTarget","firstItem","querySelector","_jsx","MenuContext","Provider","role","aria-multiselectable","tabIndex","onKeyDown","onFocus","Menu","React","forwardRef"],"mappings":"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"}
@@ -1,7 +1,13 @@
1
- export interface MenuContext<T> {
2
- value: T | T[];
3
- multiSelect: boolean;
1
+ type SingleSelect<T> = {
2
+ value?: T;
3
+ multiSelect: false;
4
4
  updateValue: (newVal: T) => void;
5
- }
6
- declare const _default: import("react").Context<MenuContext<any>>;
5
+ };
6
+ type MultiSelect<T> = {
7
+ value?: T[];
8
+ multiSelect: true;
9
+ updateValue: (newVal: T) => void;
10
+ };
11
+ export type MenuContextType<T> = SingleSelect<T> | MultiSelect<T>;
12
+ declare const _default: import("react").Context<MenuContextType<unknown> | undefined>;
7
13
  export default _default;
@@ -1,3 +1,7 @@
1
1
  import { createContext } from 'react';
2
- export default createContext(undefined);
3
- //# sourceMappingURL=MenuContext.js.map
2
+
3
+ // Context may be undefined if used outside a Menu provider
4
+ var MenuContext = createContext(undefined);
5
+
6
+ export { MenuContext as default };
7
+ //# sourceMappingURL=MenuContext.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"MenuContext.js","sourceRoot":"","sources":["../../../src/components/Menu/MenuContext.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,OAAO,CAAC;AAQtC,eAAe,aAAa,CAAmB,SAAS,CAAC,CAAC"}
1
+ {"version":3,"file":"MenuContext.js","sources":["../../../src/components/Menu/MenuContext.ts"],"sourcesContent":["import { createContext } from 'react';\n\ntype SingleSelect<T> = {\n value?: T;\n multiSelect: false;\n updateValue: (newVal: T) => void;\n};\n\ntype MultiSelect<T> = {\n value?: T[];\n multiSelect: true;\n // updateValue takes a single item and the provider will add/remove it\n updateValue: (newVal: T) => void;\n};\nexport type MenuContextType<T> = SingleSelect<T> | MultiSelect<T>;\n\n// Context may be undefined if used outside a Menu provider\nexport default createContext<MenuContextType<unknown> | undefined>(undefined);\n"],"names":["createContext","undefined"],"mappings":";;AAgBA;AACA,kBAAeA,cAAoDC,SAAAA,CAAAA;;;;"}
@@ -1,7 +1,10 @@
1
1
  import React from 'react';
2
- interface MenuItemProps<T> {
2
+ type MenuItemProps<T> = {
3
3
  /** Value of the element */
4
4
  value: T;
5
- }
6
- export default function MenuItem<T>(props: MenuItemProps<T> & React.PropsWithChildren<{}>): import("@emotion/react/jsx-runtime").JSX.Element;
7
- export {};
5
+ } & Omit<React.ButtonHTMLAttributes<HTMLButtonElement>, 'value'>;
6
+ declare const MenuItemInner: <T>(props: MenuItemProps<T>, ref: React.Ref<HTMLButtonElement>) => import("@emotion/react/jsx-runtime").JSX.Element;
7
+ declare const MenuItem: <T>(props: MenuItemProps<T> & {
8
+ ref?: React.Ref<HTMLButtonElement>;
9
+ }) => ReturnType<typeof MenuItemInner>;
10
+ export default MenuItem;
@@ -1,53 +1,52 @@
1
- var __rest = (this && this.__rest) || function (s, e) {
2
- var t = {};
3
- for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
4
- t[p] = s[p];
5
- if (s != null && typeof Object.getOwnPropertySymbols === "function")
6
- for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
7
- if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
8
- t[p[i]] = s[p[i]];
9
- }
10
- return t;
11
- };
12
- import { jsx as _jsx, jsxs as _jsxs } from "@emotion/react/jsx-runtime";
13
- import { useContext } from 'react';
1
+ import { jsxs, jsx } from '@emotion/react/jsx-runtime';
2
+ import React, { useContext } from 'react';
14
3
  import styled from '@emotion/styled';
15
- import MenuContext from './MenuContext';
16
- import constants from '../../shared/constants';
17
- import Checkbox from '../Input/Checkbox';
18
- const Container = styled.button `
19
- font-weight: ${props => props.selected ? 'bold' : 'normal'};
20
- padding: 8px 6px;
21
- border: none;
22
- background-color: transparent;
23
- font-size: 16px;
24
- border-bottom: 1px solid var(--border-light-color, ${constants.BORDER_LIGHT_COLOR});
25
- min-height: 41px;
26
- display: flex;
27
- align-items: center;
28
- cursor: pointer;
29
- position: relative;
30
-
31
- &:hover, &:focus, &:focus-within {
32
- background-color: var(--border-light-color, ${constants.BORDER_LIGHT_COLOR});
33
- }
4
+ import { getThemeValue, THEME_NAME } from '../../shared/constants.js';
5
+ import Checkbox from '../Input/Checkbox.js';
6
+ import MenuContext from './MenuContext.js';
34
7
 
35
- & > label {
36
- margin: 0 4px 0 0;
37
- }
38
- `;
39
- export default function MenuItem(props) {
40
- var _a, _b;
8
+ const Container$4 = /*#__PURE__*/ styled("button", {
9
+ target: "eum9bel0",
10
+ label: "Container"
11
+ })("font-weight:", (props)=>props.selected ? 'bold' : 'normal', ";padding:8px;border:none;border-left:4px solid\n ", (props)=>props.selected && !props.multiselect ? getThemeValue(THEME_NAME.TEXT_COLOR_DARK) : 'transparent', ";background-color:transparent;font-size:16px;border-bottom:1px solid ", getThemeValue(THEME_NAME.BORDER_LIGHT_COLOR), ";min-height:41px;display:flex;align-items:center;cursor:pointer;position:relative;color:", getThemeValue(THEME_NAME.TEXT_COLOR_DARK), ";&:hover,&:focus,&:focus-within{background-color:", getThemeValue(THEME_NAME.BORDER_LIGHT_COLOR), ";}& > label{margin:0 4px 0 0;}");
12
+ const MenuItemInner = (props, ref)=>{
41
13
  const context = useContext(MenuContext);
42
- const { value, children } = props, rest = __rest(props, ["value", "children"]);
43
- const clickHandler = (e) => {
14
+ if (!context) {
15
+ throw new Error('`MenuItem` must be used within a `Menu` provider');
16
+ }
17
+ const { value, children, ...rest } = props;
18
+ const clickHandler = (e)=>{
44
19
  e.stopPropagation();
45
- if (context.multiSelect) {
46
- e.nativeEvent.stopImmediatePropagation();
47
- }
48
20
  context.updateValue(value);
49
21
  };
50
- const selected = context.multiSelect ? (_b = (_a = context.value) === null || _a === void 0 ? void 0 : _a.includes) === null || _b === void 0 ? void 0 : _b.call(_a, value) : context.value === value;
51
- return (_jsxs(Container, Object.assign({}, rest, { type: 'button', tabIndex: context.multiSelect ? -1 : 0, selected: selected, onClick: clickHandler, children: [context.multiSelect && _jsx(Checkbox, { checked: selected }), props.children] })));
52
- }
53
- //# sourceMappingURL=MenuItem.js.map
22
+ let selected = false;
23
+ if (context.multiSelect) {
24
+ const arr = context.value;
25
+ selected = Array.isArray(arr) && arr.includes(value);
26
+ } else {
27
+ selected = context.value === value;
28
+ }
29
+ return /*#__PURE__*/ jsxs(Container$4, {
30
+ ...rest,
31
+ ref: ref,
32
+ type: "button",
33
+ role: "option",
34
+ "aria-selected": selected,
35
+ selected: selected,
36
+ onClick: clickHandler,
37
+ multiselect: context.multiSelect ? true : undefined,
38
+ children: [
39
+ context.multiSelect && /*#__PURE__*/ jsx(Checkbox, {
40
+ checked: selected,
41
+ readOnly: true,
42
+ tabIndex: -1,
43
+ onClick: (e)=>e.stopPropagation()
44
+ }),
45
+ children
46
+ ]
47
+ });
48
+ };
49
+ const MenuItem = /*#__PURE__*/ React.forwardRef(MenuItemInner);
50
+
51
+ export { MenuItem as default };
52
+ //# sourceMappingURL=MenuItem.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"MenuItem.js","sourceRoot":"","sources":["../../../src/components/Menu/MenuItem.tsx"],"names":[],"mappings":";;;;;;;;;;;;AAAA,OAAc,EAA6B,UAAU,EAAE,MAAM,OAAO,CAAC;AACrE,OAAO,MAAM,MAAM,iBAAiB,CAAC;AACrC,OAAO,WAAW,MAAM,eAAe,CAAC;AACxC,OAAO,SAAS,MAAM,wBAAwB,CAAC;AAC/C,OAAO,QAAQ,MAAM,mBAAmB,CAAC;AAOzC,MAAM,SAAS,GAAG,MAAM,CAAC,MAAM,CAAqB;mBACjC,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,QAAQ;;;;;yDAKL,SAAS,CAAC,kBAAkB;;;;;;;;sDAQ/B,SAAS,CAAC,kBAAkB;;;;;;CAMjF,CAAC;AAEF,MAAM,CAAC,OAAO,UAAU,QAAQ,CAAI,KAAqD;;IACrF,MAAM,OAAO,GAAG,UAAU,CAAC,WAAW,CAAC,CAAC;IACxC,MAAM,EAAE,KAAK,EAAE,QAAQ,KAAc,KAAK,EAAd,IAAI,UAAK,KAAK,EAApC,qBAA4B,CAAQ,CAAC;IAC3C,MAAM,YAAY,GAAG,CAAC,CAAiB,EAAE,EAAE;QACvC,CAAC,CAAC,eAAe,EAAE,CAAC;QACpB,IAAI,OAAO,CAAC,WAAW,EAAE,CAAC;YACtB,CAAC,CAAC,WAAW,CAAC,wBAAwB,EAAE,CAAC;QAC7C,CAAC;QACD,OAAO,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;IAC/B,CAAC,CAAC;IAEF,MAAM,QAAQ,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,MAAA,MAAA,OAAO,CAAC,KAAK,0CAAE,QAAQ,mDAAG,KAAK,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,KAAK,KAAK,CAAC;IAElG,OAAO,CACH,MAAC,SAAS,oBAAK,IAAI,IAAE,IAAI,EAAC,QAAQ,EAAC,QAAQ,EAAE,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,QAAQ,EAAE,OAAO,EAAE,YAAY,aAC/G,OAAO,CAAC,WAAW,IAAK,KAAC,QAAQ,IAAC,OAAO,EAAE,QAAQ,GAAI,EACvD,KAAK,CAAC,QAAQ,KACP,CACf,CAAA;AACL,CAAC"}
1
+ {"version":3,"file":"MenuItem.js","sources":["../../../src/components/Menu/MenuItem.tsx"],"sourcesContent":["import React, { SyntheticEvent, useContext } from 'react';\nimport styled from '@emotion/styled';\nimport { getThemeValue, THEME_NAME } from '../../shared/constants';\nimport Checkbox from '../Input/Checkbox';\nimport MenuContext, { MenuContextType } from './MenuContext';\n\ntype MenuItemProps<T> = {\n /** Value of the element */\n value: T;\n} & Omit<React.ButtonHTMLAttributes<HTMLButtonElement>, 'value'>;\n\nconst Container = styled.button<{ selected: boolean; multiselect?: boolean }>`\n font-weight: ${(props) => (props.selected ? 'bold' : 'normal')};\n padding: 8px;\n border: none;\n border-left: 4px solid\n ${(props) =>\n props.selected && !props.multiselect\n ? getThemeValue(THEME_NAME.TEXT_COLOR_DARK)\n : 'transparent'};\n background-color: transparent;\n font-size: 16px;\n border-bottom: 1px solid ${getThemeValue(THEME_NAME.BORDER_LIGHT_COLOR)};\n min-height: 41px;\n display: flex;\n align-items: center;\n cursor: pointer;\n position: relative;\n color: ${getThemeValue(THEME_NAME.TEXT_COLOR_DARK)};\n\n &:hover,\n &:focus,\n &:focus-within {\n background-color: ${getThemeValue(THEME_NAME.BORDER_LIGHT_COLOR)};\n }\n\n & > label {\n margin: 0 4px 0 0;\n }\n`;\n\nconst MenuItemInner = <T,>(props: MenuItemProps<T>, ref: React.Ref<HTMLButtonElement>) => {\n const context = useContext(MenuContext) as MenuContextType<T> | undefined;\n if (!context) {\n throw new Error('`MenuItem` must be used within a `Menu` provider');\n }\n const { value, children, ...rest } = props;\n const clickHandler = (e: SyntheticEvent) => {\n e.stopPropagation();\n context.updateValue(value as T);\n };\n\n let selected = false;\n if (context.multiSelect) {\n const arr = context.value as unknown as T[] | undefined;\n selected = Array.isArray(arr) && arr.includes(value as unknown as T);\n } else {\n selected = (context.value as unknown as T) === value;\n }\n\n return (\n <Container\n {...rest}\n ref={ref}\n type=\"button\"\n role=\"option\"\n aria-selected={selected}\n selected={selected}\n onClick={clickHandler}\n multiselect={context.multiSelect ? true : undefined}\n >\n {context.multiSelect && (\n <Checkbox\n checked={selected}\n readOnly\n tabIndex={-1}\n onClick={(e) => e.stopPropagation()}\n />\n )}\n {children}\n </Container>\n );\n};\n\nconst MenuItem = React.forwardRef(MenuItemInner) as <T>(\n props: MenuItemProps<T> & { ref?: React.Ref<HTMLButtonElement> },\n) => ReturnType<typeof MenuItemInner>;\nexport default MenuItem;\n"],"names":["Container","styled","props","selected","multiselect","getThemeValue","THEME_NAME","TEXT_COLOR_DARK","BORDER_LIGHT_COLOR","MenuItemInner","ref","context","useContext","MenuContext","Error","value","children","rest","clickHandler","e","stopPropagation","updateValue","multiSelect","arr","Array","isArray","includes","_jsxs","type","role","aria-selected","onClick","undefined","_jsx","Checkbox","checked","readOnly","tabIndex","MenuItem","React","forwardRef"],"mappings":";;;;;;;AAWA,MAAMA,WAAAA,iBAAYC,MAAAA,CAAAA,QAAAA,EAAAA;;;AACC,CAAA,CAAA,CAAA,cAAA,EAAA,CAACC,KAAAA,GAAWA,KAAAA,CAAMC,QAAQ,GAAG,MAAA,GAAS,QAAA,EAAA,0DAAA,EAI/C,CAACD,KAAAA,GACCA,KAAAA,CAAMC,QAAQ,IAAI,CAACD,MAAME,WAAW,GAC9BC,aAAAA,CAAcC,UAAAA,CAAWC,eAAe,CAAA,GACxC,aAAA,EAAA,uEAAA,EAGaF,aAAAA,CAAcC,UAAAA,CAAWE,kBAAkB,CAAA,EAAA,0FAAA,EAM7DH,aAAAA,CAAcC,UAAAA,CAAWC,eAAe,CAAA,EAAA,mDAAA,EAKzBF,aAAAA,CAAcC,WAAWE,kBAAkB,CAAA,EAAA,gCAAA,CAAA;AAQvE,MAAMC,aAAAA,GAAgB,CAAKP,KAAAA,EAAyBQ,GAAAA,GAAAA;AAChD,IAAA,MAAMC,UAAUC,UAAAA,CAAWC,WAAAA,CAAAA;AAC3B,IAAA,IAAI,CAACF,OAAAA,EAAS;AACV,QAAA,MAAM,IAAIG,KAAAA,CAAM,kDAAA,CAAA;AACpB,IAAA;AACA,IAAA,MAAM,EAAEC,KAAK,EAAEC,QAAQ,EAAE,GAAGC,MAAM,GAAGf,KAAAA;AACrC,IAAA,MAAMgB,eAAe,CAACC,CAAAA,GAAAA;AAClBA,QAAAA,CAAAA,CAAEC,eAAe,EAAA;AACjBT,QAAAA,OAAAA,CAAQU,WAAW,CAACN,KAAAA,CAAAA;AACxB,IAAA,CAAA;AAEA,IAAA,IAAIZ,QAAAA,GAAW,KAAA;IACf,IAAIQ,OAAAA,CAAQW,WAAW,EAAE;QACrB,MAAMC,GAAAA,GAAMZ,QAAQI,KAAK;AACzBZ,QAAAA,QAAAA,GAAWqB,MAAMC,OAAO,CAACF,GAAAA,CAAAA,IAAQA,GAAAA,CAAIG,QAAQ,CAACX,KAAAA,CAAAA;IAClD,CAAA,MAAO;QACHZ,QAAAA,GAAYQ,OAAAA,CAAQI,KAAK,KAAsBA,KAAAA;AACnD,IAAA;AAEA,IAAA,qBACIY,IAAA,CAAC3B,WAAAA,EAAAA;AACI,QAAA,GAAGiB,IAAI;QACRP,GAAAA,EAAKA,GAAAA;QACLkB,IAAAA,EAAK,QAAA;QACLC,IAAAA,EAAK,QAAA;QACLC,eAAAA,EAAe3B,QAAAA;QACfA,QAAAA,EAAUA,QAAAA;QACV4B,OAAAA,EAASb,YAAAA;QACTd,WAAAA,EAAaO,OAAAA,CAAQW,WAAW,GAAG,IAAA,GAAOU,SAAAA;;YAEzCrB,OAAAA,CAAQW,WAAW,kBAChBW,GAAA,CAACC,QAAAA,EAAAA;gBACGC,OAAAA,EAAShC,QAAAA;gBACTiC,QAAQ,EAAA,IAAA;AACRC,gBAAAA,QAAAA,EAAU,EAAC;gBACXN,OAAAA,EAAS,CAACZ,CAAAA,GAAMA,CAAAA,CAAEC,eAAe;;AAGxCJ,YAAAA;;;AAGb,CAAA;AAEA,MAAMsB,QAAAA,iBAAWC,KAAAA,CAAMC,UAAU,CAAC/B,aAAAA;;;;"}