react-science 0.32.2 → 0.34.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (207) hide show
  1. package/lib/app/about/AboutDialogToolbarButton.d.ts.map +1 -1
  2. package/lib/app/about/AboutDialogToolbarButton.js +2 -9
  3. package/lib/app/about/AboutDialogToolbarButton.js.map +1 -1
  4. package/lib/app/kinds/ir/IrPeaksPanel.js +1 -1
  5. package/lib/app/kinds/ir/IrPeaksPanel.js.map +1 -1
  6. package/lib/app/panels/SignalProcessingPanel.js +1 -1
  7. package/lib/app/panels/SignalProcessingPanel.js.map +1 -1
  8. package/lib/app/panels/measurements/MeasurementsPanel.d.ts +1 -1
  9. package/lib/app/panels/measurements/MeasurementsPanel.d.ts.map +1 -1
  10. package/lib/app/panels/measurements/MeasurementsPanel.js +20 -12
  11. package/lib/app/panels/measurements/MeasurementsPanel.js.map +1 -1
  12. package/lib/app/panels/measurements/MeasurementsTable.d.ts +1 -1
  13. package/lib/app/panels/measurements/MeasurementsTable.d.ts.map +1 -1
  14. package/lib/app/panels/measurements/MeasurementsTable.js +15 -12
  15. package/lib/app/panels/measurements/MeasurementsTable.js.map +1 -1
  16. package/lib/components/color-picker/color-picker-dropdown/ColorPickerDropdown.d.ts +4 -1
  17. package/lib/components/color-picker/color-picker-dropdown/ColorPickerDropdown.d.ts.map +1 -1
  18. package/lib/components/color-picker/color-picker-dropdown/ColorPickerDropdown.js +3 -17
  19. package/lib/components/color-picker/color-picker-dropdown/ColorPickerDropdown.js.map +1 -1
  20. package/lib/components/dialog/ConfirmDialog.d.ts +12 -0
  21. package/lib/components/dialog/ConfirmDialog.d.ts.map +1 -0
  22. package/lib/components/dialog/ConfirmDialog.js +22 -0
  23. package/lib/components/dialog/ConfirmDialog.js.map +1 -0
  24. package/lib/components/dialog/index.d.ts +2 -0
  25. package/lib/components/dialog/index.d.ts.map +1 -0
  26. package/lib/components/{tabs → dialog}/index.js +1 -1
  27. package/lib/components/dialog/index.js.map +1 -0
  28. package/lib/components/index.d.ts +1 -2
  29. package/lib/components/index.d.ts.map +1 -1
  30. package/lib/components/index.js +1 -2
  31. package/lib/components/index.js.map +1 -1
  32. package/lib/components/info-panel/InfoPanel.d.ts +0 -1
  33. package/lib/components/info-panel/InfoPanel.d.ts.map +1 -1
  34. package/lib/components/info-panel/InfoPanel.js +2 -8
  35. package/lib/components/info-panel/InfoPanel.js.map +1 -1
  36. package/lib/components/layout-manager/LayoutManager.d.ts.map +1 -1
  37. package/lib/components/layout-manager/LayoutManager.js +0 -2
  38. package/lib/components/layout-manager/LayoutManager.js.map +1 -1
  39. package/lib/components/root-layout/RootLayout.js +1 -1
  40. package/lib/components/root-layout/RootLayout.js.map +1 -1
  41. package/lib/components/table/Table.d.ts +8 -3
  42. package/lib/components/table/Table.d.ts.map +1 -1
  43. package/lib/components/table/Table.js +14 -65
  44. package/lib/components/table/Table.js.map +1 -1
  45. package/lib/components/table/TableHeader.d.ts +3 -0
  46. package/lib/components/table/TableHeader.d.ts.map +1 -0
  47. package/lib/components/table/TableHeader.js +10 -0
  48. package/lib/components/table/TableHeader.js.map +1 -0
  49. package/lib/components/table/TableRow.d.ts +3 -0
  50. package/lib/components/table/TableRow.d.ts.map +1 -0
  51. package/lib/components/table/TableRow.js +57 -0
  52. package/lib/components/table/TableRow.js.map +1 -0
  53. package/lib/components/table/tableContext.d.ts +10 -0
  54. package/lib/components/table/tableContext.d.ts.map +1 -0
  55. package/lib/components/table/tableContext.js +11 -0
  56. package/lib/components/table/tableContext.js.map +1 -0
  57. package/lib/components/toolbar/PanelPreferencesToolbar.d.ts.map +1 -1
  58. package/lib/components/toolbar/PanelPreferencesToolbar.js +2 -2
  59. package/lib/components/toolbar/PanelPreferencesToolbar.js.map +1 -1
  60. package/lib/components/toolbar/Toolbar.d.ts +8 -5
  61. package/lib/components/toolbar/Toolbar.d.ts.map +1 -1
  62. package/lib/components/toolbar/Toolbar.js +12 -9
  63. package/lib/components/toolbar/Toolbar.js.map +1 -1
  64. package/lib-esm/app/about/AboutDialogToolbarButton.d.ts.map +1 -1
  65. package/lib-esm/app/about/AboutDialogToolbarButton.js +4 -8
  66. package/lib-esm/app/about/AboutDialogToolbarButton.js.map +1 -1
  67. package/lib-esm/app/kinds/ir/IrPeaksPanel.js +1 -1
  68. package/lib-esm/app/kinds/ir/IrPeaksPanel.js.map +1 -1
  69. package/lib-esm/app/panels/SignalProcessingPanel.js +1 -1
  70. package/lib-esm/app/panels/SignalProcessingPanel.js.map +1 -1
  71. package/lib-esm/app/panels/measurements/MeasurementsPanel.d.ts +1 -1
  72. package/lib-esm/app/panels/measurements/MeasurementsPanel.d.ts.map +1 -1
  73. package/lib-esm/app/panels/measurements/MeasurementsPanel.js +16 -8
  74. package/lib-esm/app/panels/measurements/MeasurementsPanel.js.map +1 -1
  75. package/lib-esm/app/panels/measurements/MeasurementsTable.d.ts +1 -1
  76. package/lib-esm/app/panels/measurements/MeasurementsTable.d.ts.map +1 -1
  77. package/lib-esm/app/panels/measurements/MeasurementsTable.js +11 -8
  78. package/lib-esm/app/panels/measurements/MeasurementsTable.js.map +1 -1
  79. package/lib-esm/components/color-picker/color-picker-dropdown/ColorPickerDropdown.d.ts +4 -1
  80. package/lib-esm/components/color-picker/color-picker-dropdown/ColorPickerDropdown.d.ts.map +1 -1
  81. package/lib-esm/components/color-picker/color-picker-dropdown/ColorPickerDropdown.js +4 -18
  82. package/lib-esm/components/color-picker/color-picker-dropdown/ColorPickerDropdown.js.map +1 -1
  83. package/lib-esm/components/dialog/ConfirmDialog.d.ts +12 -0
  84. package/lib-esm/components/dialog/ConfirmDialog.d.ts.map +1 -0
  85. package/lib-esm/components/dialog/ConfirmDialog.js +18 -0
  86. package/lib-esm/components/dialog/ConfirmDialog.js.map +1 -0
  87. package/lib-esm/components/dialog/index.d.ts +2 -0
  88. package/lib-esm/components/dialog/index.d.ts.map +1 -0
  89. package/lib-esm/components/dialog/index.js +2 -0
  90. package/lib-esm/components/dialog/index.js.map +1 -0
  91. package/lib-esm/components/index.d.ts +1 -2
  92. package/lib-esm/components/index.d.ts.map +1 -1
  93. package/lib-esm/components/index.js +1 -2
  94. package/lib-esm/components/index.js.map +1 -1
  95. package/lib-esm/components/info-panel/InfoPanel.d.ts +0 -1
  96. package/lib-esm/components/info-panel/InfoPanel.d.ts.map +1 -1
  97. package/lib-esm/components/info-panel/InfoPanel.js +2 -8
  98. package/lib-esm/components/info-panel/InfoPanel.js.map +1 -1
  99. package/lib-esm/components/layout-manager/LayoutManager.d.ts.map +1 -1
  100. package/lib-esm/components/layout-manager/LayoutManager.js +0 -2
  101. package/lib-esm/components/layout-manager/LayoutManager.js.map +1 -1
  102. package/lib-esm/components/root-layout/RootLayout.js +1 -1
  103. package/lib-esm/components/root-layout/RootLayout.js.map +1 -1
  104. package/lib-esm/components/table/Table.d.ts +8 -3
  105. package/lib-esm/components/table/Table.d.ts.map +1 -1
  106. package/lib-esm/components/table/Table.js +12 -63
  107. package/lib-esm/components/table/Table.js.map +1 -1
  108. package/lib-esm/components/table/TableHeader.d.ts +3 -0
  109. package/lib-esm/components/table/TableHeader.d.ts.map +1 -0
  110. package/lib-esm/components/table/TableHeader.js +6 -0
  111. package/lib-esm/components/table/TableHeader.js.map +1 -0
  112. package/lib-esm/components/table/TableRow.d.ts +3 -0
  113. package/lib-esm/components/table/TableRow.d.ts.map +1 -0
  114. package/lib-esm/components/table/TableRow.js +53 -0
  115. package/lib-esm/components/table/TableRow.js.map +1 -0
  116. package/lib-esm/components/table/tableContext.d.ts +10 -0
  117. package/lib-esm/components/table/tableContext.d.ts.map +1 -0
  118. package/lib-esm/components/table/tableContext.js +7 -0
  119. package/lib-esm/components/table/tableContext.js.map +1 -0
  120. package/lib-esm/components/toolbar/PanelPreferencesToolbar.d.ts.map +1 -1
  121. package/lib-esm/components/toolbar/PanelPreferencesToolbar.js +2 -2
  122. package/lib-esm/components/toolbar/PanelPreferencesToolbar.js.map +1 -1
  123. package/lib-esm/components/toolbar/Toolbar.d.ts +8 -5
  124. package/lib-esm/components/toolbar/Toolbar.d.ts.map +1 -1
  125. package/lib-esm/components/toolbar/Toolbar.js +12 -9
  126. package/lib-esm/components/toolbar/Toolbar.js.map +1 -1
  127. package/package.json +30 -30
  128. package/src/app/about/AboutDialogToolbarButton.tsx +10 -14
  129. package/src/app/kinds/ir/IrPeaksPanel.tsx +1 -1
  130. package/src/app/panels/SignalProcessingPanel.tsx +5 -5
  131. package/src/app/panels/measurements/MeasurementsPanel.tsx +33 -15
  132. package/src/app/panels/measurements/MeasurementsTable.tsx +33 -26
  133. package/src/components/color-picker/color-picker-dropdown/ColorPickerDropdown.tsx +17 -37
  134. package/src/components/dialog/ConfirmDialog.tsx +65 -0
  135. package/src/components/dialog/index.ts +1 -0
  136. package/src/components/index.ts +1 -2
  137. package/src/components/info-panel/InfoPanel.tsx +4 -17
  138. package/src/components/layout-manager/LayoutManager.tsx +0 -2
  139. package/src/components/root-layout/RootLayout.tsx +1 -1
  140. package/src/components/table/Table.tsx +37 -96
  141. package/src/components/table/TableHeader.tsx +12 -0
  142. package/src/components/table/TableRow.tsx +89 -0
  143. package/src/components/table/tableContext.ts +7 -0
  144. package/src/components/toolbar/PanelPreferencesToolbar.tsx +17 -3
  145. package/src/components/toolbar/Toolbar.tsx +22 -13
  146. package/lib/components/modal/ConfirmModal.d.ts +0 -17
  147. package/lib/components/modal/ConfirmModal.d.ts.map +0 -1
  148. package/lib/components/modal/ConfirmModal.js +0 -71
  149. package/lib/components/modal/ConfirmModal.js.map +0 -1
  150. package/lib/components/modal/Modal.d.ts +0 -25
  151. package/lib/components/modal/Modal.d.ts.map +0 -1
  152. package/lib/components/modal/Modal.js +0 -85
  153. package/lib/components/modal/Modal.js.map +0 -1
  154. package/lib/components/modal/index.d.ts +0 -3
  155. package/lib/components/modal/index.d.ts.map +0 -1
  156. package/lib/components/modal/index.js +0 -19
  157. package/lib/components/modal/index.js.map +0 -1
  158. package/lib/components/modal/useDialog.d.ts +0 -19
  159. package/lib/components/modal/useDialog.d.ts.map +0 -1
  160. package/lib/components/modal/useDialog.js +0 -51
  161. package/lib/components/modal/useDialog.js.map +0 -1
  162. package/lib/components/tabs/Tabs.d.ts +0 -16
  163. package/lib/components/tabs/Tabs.d.ts.map +0 -1
  164. package/lib/components/tabs/Tabs.js +0 -99
  165. package/lib/components/tabs/Tabs.js.map +0 -1
  166. package/lib/components/tabs/TabsContext.d.ts +0 -8
  167. package/lib/components/tabs/TabsContext.d.ts.map +0 -1
  168. package/lib/components/tabs/TabsContext.js +0 -20
  169. package/lib/components/tabs/TabsContext.js.map +0 -1
  170. package/lib/components/tabs/index.d.ts +0 -2
  171. package/lib/components/tabs/index.d.ts.map +0 -1
  172. package/lib/components/tabs/index.js.map +0 -1
  173. package/lib-esm/components/modal/ConfirmModal.d.ts +0 -17
  174. package/lib-esm/components/modal/ConfirmModal.d.ts.map +0 -1
  175. package/lib-esm/components/modal/ConfirmModal.js +0 -64
  176. package/lib-esm/components/modal/ConfirmModal.js.map +0 -1
  177. package/lib-esm/components/modal/Modal.d.ts +0 -25
  178. package/lib-esm/components/modal/Modal.d.ts.map +0 -1
  179. package/lib-esm/components/modal/Modal.js +0 -78
  180. package/lib-esm/components/modal/Modal.js.map +0 -1
  181. package/lib-esm/components/modal/index.d.ts +0 -3
  182. package/lib-esm/components/modal/index.d.ts.map +0 -1
  183. package/lib-esm/components/modal/index.js +0 -3
  184. package/lib-esm/components/modal/index.js.map +0 -1
  185. package/lib-esm/components/modal/useDialog.d.ts +0 -19
  186. package/lib-esm/components/modal/useDialog.d.ts.map +0 -1
  187. package/lib-esm/components/modal/useDialog.js +0 -47
  188. package/lib-esm/components/modal/useDialog.js.map +0 -1
  189. package/lib-esm/components/tabs/Tabs.d.ts +0 -16
  190. package/lib-esm/components/tabs/Tabs.d.ts.map +0 -1
  191. package/lib-esm/components/tabs/Tabs.js +0 -95
  192. package/lib-esm/components/tabs/Tabs.js.map +0 -1
  193. package/lib-esm/components/tabs/TabsContext.d.ts +0 -8
  194. package/lib-esm/components/tabs/TabsContext.d.ts.map +0 -1
  195. package/lib-esm/components/tabs/TabsContext.js +0 -15
  196. package/lib-esm/components/tabs/TabsContext.js.map +0 -1
  197. package/lib-esm/components/tabs/index.d.ts +0 -2
  198. package/lib-esm/components/tabs/index.d.ts.map +0 -1
  199. package/lib-esm/components/tabs/index.js +0 -2
  200. package/lib-esm/components/tabs/index.js.map +0 -1
  201. package/src/components/modal/ConfirmModal.tsx +0 -134
  202. package/src/components/modal/Modal.tsx +0 -143
  203. package/src/components/modal/index.ts +0 -2
  204. package/src/components/modal/useDialog.ts +0 -95
  205. package/src/components/tabs/Tabs.tsx +0 -189
  206. package/src/components/tabs/TabsContext.tsx +0 -22
  207. package/src/components/tabs/index.ts +0 -1
@@ -1,47 +0,0 @@
1
- import { useCallback, useEffect, useMemo, } from 'react';
2
- import { useKbsDisableGlobal } from 'react-kbs';
3
- import { useOnOff } from '../hooks/useOnOff';
4
- export function useDialog({ dialogRef, isOpen, requestCloseOnEsc, requestCloseOnBackdrop, onRequestClose, }) {
5
- useKbsDisableGlobal(isOpen);
6
- const [isModalShown, showModal, hideModal] = useOnOff(false);
7
- useEffect(() => {
8
- const dialog = dialogRef.current;
9
- if (dialog && isOpen) {
10
- showModal();
11
- dialog.showModal();
12
- return () => {
13
- hideModal();
14
- dialog.close();
15
- };
16
- }
17
- }, [dialogRef, isOpen, showModal, hideModal]);
18
- const onCancel = useCallback((event) => {
19
- if (!requestCloseOnEsc) {
20
- event.preventDefault();
21
- }
22
- }, [requestCloseOnEsc]);
23
- const onClick = useCallback((event) => {
24
- const dialog = dialogRef.current;
25
- if (!dialog) {
26
- return;
27
- }
28
- // Ref: https://stackoverflow.com/questions/25864259/how-to-close-the-new-html-dialog-tag-by-clicking-on-its-backdrop
29
- const rect = dialog.getBoundingClientRect();
30
- const isInDialog = rect.top <= event.clientY &&
31
- event.clientY <= rect.top + rect.height &&
32
- rect.left <= event.clientX &&
33
- event.clientX <= rect.left + rect.width;
34
- event.stopPropagation();
35
- // Since the dialog has no size of itself, this condition is only
36
- // `true` when we click on the backdrop.
37
- if (!isInDialog && requestCloseOnBackdrop) {
38
- onRequestClose();
39
- }
40
- }, [requestCloseOnBackdrop, onRequestClose, dialogRef]);
41
- const dialogProps = useMemo(() => ({ onClick, onCancel, onClose: onRequestClose }), [onClick, onCancel, onRequestClose]);
42
- return {
43
- dialogProps,
44
- isModalShown,
45
- };
46
- }
47
- //# sourceMappingURL=useDialog.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"useDialog.js","sourceRoot":"","sources":["../../../src/components/modal/useDialog.ts"],"names":[],"mappings":"AAAA,OAAO,EAIL,WAAW,EACX,SAAS,EACT,OAAO,GACR,MAAM,OAAO,CAAC;AACf,OAAO,EAAE,mBAAmB,EAAE,MAAM,WAAW,CAAC;AAEhD,OAAO,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAmB7C,MAAM,UAAU,SAAS,CAAC,EACxB,SAAS,EACT,MAAM,EACN,iBAAiB,EACjB,sBAAsB,EACtB,cAAc,GACG;IACjB,mBAAmB,CAAC,MAAM,CAAC,CAAC;IAC5B,MAAM,CAAC,YAAY,EAAE,SAAS,EAAE,SAAS,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;IAE7D,SAAS,CAAC,GAAG,EAAE;QACb,MAAM,MAAM,GAAG,SAAS,CAAC,OAAO,CAAC;QACjC,IAAI,MAAM,IAAI,MAAM,EAAE,CAAC;YACrB,SAAS,EAAE,CAAC;YACZ,MAAM,CAAC,SAAS,EAAE,CAAC;YACnB,OAAO,GAAG,EAAE;gBACV,SAAS,EAAE,CAAC;gBACZ,MAAM,CAAC,KAAK,EAAE,CAAC;YACjB,CAAC,CAAC;QACJ,CAAC;IACH,CAAC,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,SAAS,CAAC,CAAC,CAAC;IAE9C,MAAM,QAAQ,GAAG,WAAW,CAC1B,CAAC,KAAK,EAAE,EAAE;QACR,IAAI,CAAC,iBAAiB,EAAE,CAAC;YACvB,KAAK,CAAC,cAAc,EAAE,CAAC;QACzB,CAAC;IACH,CAAC,EACD,CAAC,iBAAiB,CAAC,CACpB,CAAC;IAEF,MAAM,OAAO,GAAG,WAAW,CACzB,CAAC,KAAK,EAAE,EAAE;QACR,MAAM,MAAM,GAAG,SAAS,CAAC,OAAO,CAAC;QACjC,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,OAAO;QACT,CAAC;QAED,qHAAqH;QACrH,MAAM,IAAI,GAAG,MAAM,CAAC,qBAAqB,EAAE,CAAC;QAC5C,MAAM,UAAU,GACd,IAAI,CAAC,GAAG,IAAI,KAAK,CAAC,OAAO;YACzB,KAAK,CAAC,OAAO,IAAI,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,MAAM;YACvC,IAAI,CAAC,IAAI,IAAI,KAAK,CAAC,OAAO;YAC1B,KAAK,CAAC,OAAO,IAAI,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC;QAE1C,KAAK,CAAC,eAAe,EAAE,CAAC;QACxB,iEAAiE;QACjE,wCAAwC;QACxC,IAAI,CAAC,UAAU,IAAI,sBAAsB,EAAE,CAAC;YAC1C,cAAc,EAAE,CAAC;QACnB,CAAC;IACH,CAAC,EACD,CAAC,sBAAsB,EAAE,cAAc,EAAE,SAAS,CAAC,CACpD,CAAC;IAEF,MAAM,WAAW,GAAG,OAAO,CACzB,GAAG,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,cAAc,EAAE,CAAC,EACtD,CAAC,OAAO,EAAE,QAAQ,EAAE,cAAc,CAAC,CACpC,CAAC;IAEF,OAAO;QACL,WAAW;QACX,YAAY;KACb,CAAC;AACJ,CAAC"}
@@ -1,16 +0,0 @@
1
- import { ReactNode } from 'react';
2
- type TabsOrientation = 'vertical' | 'horizontal';
3
- export interface TabItem<T extends string = string> {
4
- id: T;
5
- title: ReactNode;
6
- content: ReactNode;
7
- }
8
- interface TabsProps<T extends string = string> {
9
- opened?: T;
10
- orientation?: TabsOrientation;
11
- items: Array<TabItem<T>>;
12
- onClick?: (id: T) => void;
13
- }
14
- export declare function Tabs<T extends string = string>(props: TabsProps<T>): import("@emotion/react/jsx-runtime").JSX.Element;
15
- export {};
16
- //# sourceMappingURL=Tabs.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"Tabs.d.ts","sourceRoot":"","sources":["../../../src/components/tabs/Tabs.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAE,SAAS,EAAW,MAAM,OAAO,CAAC;AAI3C,KAAK,eAAe,GAAG,UAAU,GAAG,YAAY,CAAC;AAEjD,MAAM,WAAW,OAAO,CAAC,CAAC,SAAS,MAAM,GAAG,MAAM;IAChD,EAAE,EAAE,CAAC,CAAC;IACN,KAAK,EAAE,SAAS,CAAC;IACjB,OAAO,EAAE,SAAS,CAAC;CACpB;AAQD,UAAU,SAAS,CAAC,CAAC,SAAS,MAAM,GAAG,MAAM;IAC3C,MAAM,CAAC,EAAE,CAAC,CAAC;IACX,WAAW,CAAC,EAAE,eAAe,CAAC;IAC9B,KAAK,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;IACzB,OAAO,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,KAAK,IAAI,CAAC;CAC3B;AA4CD,wBAAgB,IAAI,CAAC,CAAC,SAAS,MAAM,GAAG,MAAM,EAAE,KAAK,EAAE,SAAS,CAAC,CAAC,CAAC,oDAmBlE"}
@@ -1,95 +0,0 @@
1
- import { jsx as _jsx, jsxs as _jsxs } from "@emotion/react/jsx-runtime";
2
- /** @jsxImportSource @emotion/react */
3
- import { css } from '@emotion/react';
4
- import { useMemo } from 'react';
5
- import { TabsProvider, useTabsContext } from './TabsContext';
6
- const styles = {
7
- scroll: css({
8
- '&::-webkit-scrollbar': {
9
- height: '7px',
10
- width: '7px',
11
- },
12
- '&::-webkit-scrollbar-track': {
13
- backgroundColor: 'rgba(0,0,0,.05)',
14
- },
15
- '&::-webkit-scrollbar-thumb': {
16
- backgroundColor: 'rgba(0,0,0,.2)',
17
- },
18
- }),
19
- item: (isSelected, orientation) => {
20
- return css([
21
- {
22
- padding: '0.25em 1em',
23
- border: '1px solid hsl(0deg, 0%, 80%)',
24
- fontSize: '1.125em',
25
- ':hover': {
26
- backgroundColor: 'hsl(0deg, 0%, 90%)',
27
- },
28
- whiteSpace: 'nowrap',
29
- },
30
- isSelected && {
31
- backgroundColor: 'hsl(0deg, 0%, 95%)',
32
- ':hover': {
33
- backgroundColor: 'hsl(0deg, 0%, 90%)',
34
- },
35
- },
36
- orientation === 'horizontal' && {
37
- margin: '0px 2px 0px 2px',
38
- borderBottom: 'none',
39
- },
40
- orientation === 'vertical' && {
41
- margin: '2px 0px 2px 0px',
42
- borderRight: 'none',
43
- },
44
- ]);
45
- },
46
- };
47
- export function Tabs(props) {
48
- const { orientation = 'horizontal', items, onClick, opened } = props;
49
- const item = useMemo(() => items.find(({ id: itemId }) => itemId === opened), [items, opened]);
50
- if (orientation === 'horizontal') {
51
- return (_jsx(TabsProvider, { opened: item, children: _jsx(TabsHorizontal, { items: items, onClick: onClick }) }));
52
- }
53
- return (_jsx(TabsProvider, { opened: item, children: _jsx(TabsVertical, { items: items, onClick: onClick }) }));
54
- }
55
- function TabsItem(props) {
56
- const item = useTabsContext();
57
- return (_jsx("button", { type: "button", onClick: props.onClick, css: styles.item(item?.id === props.id, props.orientation), children: props.title }));
58
- }
59
- function TabsVertical(props) {
60
- const { items, onClick } = props;
61
- const item = useTabsContext();
62
- return (_jsxs("div", { style: {
63
- display: 'flex',
64
- flexDirection: 'row',
65
- flex: '1 1 0%',
66
- overflowY: 'hidden',
67
- height: '100%',
68
- }, children: [_jsx("div", { style: {
69
- display: 'flex',
70
- flexDirection: 'column',
71
- borderRight: '1px solid hsl(0deg, 0%, 80%)',
72
- overflowY: 'auto',
73
- }, css: styles.scroll, children: items.map((item) => (_jsx(TabsItem, { orientation: "vertical", title: item.title, id: item.id, onClick: () => {
74
- onClick?.(item.id);
75
- } }, item.id))) }), item && (_jsx("div", { style: { flex: '1 1 0%', overflowX: 'auto' }, children: item.content }))] }));
76
- }
77
- function TabsHorizontal(props) {
78
- const { items, onClick } = props;
79
- const item = useTabsContext();
80
- return (_jsxs("div", { style: {
81
- display: 'flex',
82
- flexDirection: 'column',
83
- overflowX: 'hidden',
84
- height: '100%',
85
- }, children: [_jsx("div", { style: {
86
- display: 'flex',
87
- flexDirection: 'row',
88
- borderBottom: '1px solid hsl(0deg, 0%, 80%)',
89
- overflowX: 'auto',
90
- overflowY: 'hidden',
91
- }, css: styles.scroll, children: items.map((item) => (_jsx(TabsItem, { orientation: "horizontal", id: item.id, title: item.title, onClick: () => {
92
- onClick?.(item.id);
93
- } }, item.id))) }), item && (_jsx("div", { style: { flex: '1 1 0%', overflowX: 'auto' }, children: item.content }))] }));
94
- }
95
- //# sourceMappingURL=Tabs.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"Tabs.js","sourceRoot":"","sources":["../../../src/components/tabs/Tabs.tsx"],"names":[],"mappings":"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"}
@@ -1,8 +0,0 @@
1
- import { ReactNode } from 'react';
2
- import type { TabItem } from './Tabs';
3
- export declare function useTabsContext(): TabItem<string> | undefined;
4
- export declare function TabsProvider<T extends string = string>(props: {
5
- children: ReactNode;
6
- opened?: TabItem<T>;
7
- }): import("react/jsx-runtime").JSX.Element;
8
- //# sourceMappingURL=TabsContext.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"TabsContext.d.ts","sourceRoot":"","sources":["../../../src/components/tabs/TabsContext.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAiB,SAAS,EAAc,MAAM,OAAO,CAAC;AAE7D,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,QAAQ,CAAC;AAItC,wBAAgB,cAAc,gCAO7B;AAED,wBAAgB,YAAY,CAAC,CAAC,SAAS,MAAM,GAAG,MAAM,EAAE,KAAK,EAAE;IAC7D,QAAQ,EAAE,SAAS,CAAC;IACpB,MAAM,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC;CACrB,2CAGA"}
@@ -1,15 +0,0 @@
1
- import { jsx as _jsx } from "react/jsx-runtime";
2
- import { createContext, useContext } from 'react';
3
- const tabsContext = createContext(null);
4
- export function useTabsContext() {
5
- const context = useContext(tabsContext);
6
- if (context === null) {
7
- throw new Error('TabsContext was not found');
8
- }
9
- return context;
10
- }
11
- export function TabsProvider(props) {
12
- const { children, opened } = props;
13
- return _jsx(tabsContext.Provider, { value: opened, children: children });
14
- }
15
- //# sourceMappingURL=TabsContext.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"TabsContext.js","sourceRoot":"","sources":["../../../src/components/tabs/TabsContext.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,aAAa,EAAa,UAAU,EAAE,MAAM,OAAO,CAAC;AAI7D,MAAM,WAAW,GAAG,aAAa,CAA6B,IAAI,CAAC,CAAC;AAEpE,MAAM,UAAU,cAAc;IAC5B,MAAM,OAAO,GAAG,UAAU,CAAC,WAAW,CAAC,CAAC;IACxC,IAAI,OAAO,KAAK,IAAI,EAAE,CAAC;QACrB,MAAM,IAAI,KAAK,CAAC,2BAA2B,CAAC,CAAC;IAC/C,CAAC;IAED,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,MAAM,UAAU,YAAY,CAA4B,KAGvD;IACC,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,GAAG,KAAK,CAAC;IACnC,OAAO,KAAC,WAAW,CAAC,QAAQ,IAAC,KAAK,EAAE,MAAM,YAAG,QAAQ,GAAwB,CAAC;AAChF,CAAC"}
@@ -1,2 +0,0 @@
1
- export * from './Tabs';
2
- //# sourceMappingURL=index.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/tabs/index.ts"],"names":[],"mappings":"AAAA,cAAc,QAAQ,CAAC"}
@@ -1,2 +0,0 @@
1
- export * from './Tabs';
2
- //# sourceMappingURL=index.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/components/tabs/index.ts"],"names":[],"mappings":"AAAA,cAAc,QAAQ,CAAC"}
@@ -1,134 +0,0 @@
1
- import styled from '@emotion/styled';
2
- import type { ReactNode } from 'react';
3
- import { useCallback, useImperativeHandle, useRef, useState } from 'react';
4
-
5
- import { Button } from '..';
6
- import { Portal } from '../root-layout/Portal';
7
- import { RootLayoutProvider } from '../root-layout/RootLayoutContext';
8
-
9
- import { useDialog } from './useDialog';
10
-
11
- interface ConfirmModalProps {
12
- children: ReactNode;
13
- isOpen: boolean;
14
- requestCloseOnEsc?: boolean;
15
- requestCloseOnBackdrop?: boolean;
16
- onConfirm: () => void;
17
- onCancel?: () => void;
18
- onRequestClose: () => void;
19
- saveText?: string;
20
- cancelText?: string;
21
- headerColor: string;
22
- maxWidth?: number;
23
- }
24
-
25
- const ConfirmModalDialog = styled.dialog`
26
- background-color: transparent;
27
- :focus {
28
- outline: none;
29
- }
30
- ::backdrop {
31
- background-color: rgba(113, 113, 122, 0.75);
32
- }
33
- `;
34
-
35
- const ConfirmModalContents = styled.div<{
36
- headerColor: string;
37
- }>`
38
- position: relative;
39
- display: flex;
40
- flex-direction: column;
41
- background-color: white;
42
- width: 100%;
43
- border-radius: 0.5rem;
44
- box-shadow:
45
- 0 0 0 0,
46
- 0 0px 16px rgba(0, 0, 0, 0.3);
47
- border-top: 10px solid ${({ headerColor }) => headerColor};
48
- `;
49
-
50
- const ConfirmModalChildrenRoot = styled.div<{ headerColor: string }>`
51
- color: ${({ headerColor }) => headerColor};
52
- display: flex;
53
- flex: 1 1 0%;
54
- font-weight: bold;
55
- padding: 20px;
56
- font-size: 14px;
57
- `;
58
-
59
- const ConfirmModalFooter = styled.div`
60
- border-top: 2px solid rgb(247, 247, 247);
61
- padding: 10px 20px 10px 20px;
62
- display: flex;
63
- flex-direction: row-reverse;
64
- gap: 10px;
65
- `;
66
-
67
- type MaybeHTMLDialogElement = HTMLDialogElement | null;
68
-
69
- export function ConfirmModal(props: ConfirmModalProps) {
70
- const {
71
- isOpen,
72
- saveText = 'Save',
73
- cancelText = 'Cancel',
74
- headerColor,
75
- maxWidth,
76
- onRequestClose,
77
- onCancel = onRequestClose,
78
- onConfirm,
79
- requestCloseOnBackdrop = true,
80
- requestCloseOnEsc = true,
81
- children,
82
- } = props;
83
-
84
- const dialogRef = useRef<HTMLDialogElement>(null);
85
- const { dialogProps, isModalShown } = useDialog({
86
- dialogRef,
87
- isOpen,
88
- requestCloseOnEsc,
89
- requestCloseOnBackdrop,
90
- onRequestClose,
91
- });
92
- const [portalDomNode, setPortalDomNode] =
93
- useState<MaybeHTMLDialogElement>(null);
94
- const dialogCallbackRef = useCallback((node: MaybeHTMLDialogElement) => {
95
- setPortalDomNode(node);
96
- }, []);
97
-
98
- useImperativeHandle<MaybeHTMLDialogElement, MaybeHTMLDialogElement>(
99
- dialogCallbackRef,
100
- () => dialogRef.current,
101
- );
102
-
103
- if (!isOpen) {
104
- return null;
105
- }
106
-
107
- return (
108
- <Portal>
109
- <ConfirmModalDialog {...dialogProps} ref={dialogRef}>
110
- {isModalShown && (
111
- <RootLayoutProvider innerRef={portalDomNode}>
112
- <ConfirmModalContents
113
- headerColor={headerColor}
114
- style={{ maxWidth }}
115
- >
116
- <ConfirmModalChildrenRoot headerColor={headerColor}>
117
- {children}
118
- </ConfirmModalChildrenRoot>
119
-
120
- <ConfirmModalFooter>
121
- <Button intent="primary" onClick={onConfirm}>
122
- {saveText}
123
- </Button>
124
- <Button intent="danger" onClick={onCancel}>
125
- {cancelText}
126
- </Button>
127
- </ConfirmModalFooter>
128
- </ConfirmModalContents>
129
- </RootLayoutProvider>
130
- )}
131
- </ConfirmModalDialog>
132
- </Portal>
133
- );
134
- }
@@ -1,143 +0,0 @@
1
- import styled from '@emotion/styled';
2
- import type { ReactElement, ReactNode } from 'react';
3
- import { useCallback, useImperativeHandle, useRef, useState } from 'react';
4
-
5
- import { Button } from '../index';
6
- import { Portal } from '../root-layout/Portal';
7
- import { RootLayoutProvider } from '../root-layout/RootLayoutContext';
8
-
9
- import { useDialog } from './useDialog';
10
-
11
- export interface ModalProps {
12
- children: ReactElement | ReactElement[];
13
- isOpen: boolean;
14
- requestCloseOnEsc?: boolean;
15
- hasCloseButton?: boolean;
16
- requestCloseOnBackdrop?: boolean;
17
- onRequestClose: () => void;
18
- maxWidth?: number;
19
- width?: number;
20
- height?: number;
21
- }
22
-
23
- const DialogRoot = styled.dialog`
24
- background-color: transparent;
25
- :focus {
26
- outline: none;
27
- }
28
- ::backdrop {
29
- background-color: rgba(113, 113, 122, 0.75);
30
- }
31
- `;
32
-
33
- const DialogContents = styled.div`
34
- position: relative;
35
- display: flex;
36
- flex-direction: column;
37
- background-color: white;
38
- border-width: 1px;
39
- border-color: transparent;
40
- border-radius: 0.5rem;
41
- box-shadow:
42
- 0 0 0 0,
43
- 0 0px 16px rgba(0, 0, 0, 0.3);
44
- `;
45
-
46
- const ModalHeaderStyled = styled.div`
47
- display: flex;
48
- align-items: center;
49
- justify-content: space-between;
50
- padding: 10px 20px 10px 20px;
51
- border-bottom: 2px solid rgb(247, 247, 247);
52
- `;
53
-
54
- const ModalBodyStyled = styled.div`
55
- display: flex;
56
- flex: 1 1 0%;
57
- overflow-y: auto;
58
- `;
59
-
60
- const ModalFooterStyled = styled.div`
61
- border-top: 2px solid rgb(247, 247, 247);
62
- padding: 10px 20px 10px 20px;
63
- `;
64
-
65
- type MaybeHTMLDialogElement = HTMLDialogElement | null;
66
-
67
- export function Modal(props: ModalProps) {
68
- const {
69
- isOpen,
70
- onRequestClose,
71
- hasCloseButton = true,
72
- requestCloseOnBackdrop = true,
73
- requestCloseOnEsc = true,
74
- children,
75
- width,
76
- maxWidth,
77
- height,
78
- } = props;
79
-
80
- const dialogRef = useRef<HTMLDialogElement>(null);
81
- const { dialogProps, isModalShown } = useDialog({
82
- dialogRef,
83
- isOpen,
84
- requestCloseOnEsc,
85
- requestCloseOnBackdrop,
86
- onRequestClose,
87
- });
88
- const [portalDomNode, setPortalDomNode] =
89
- useState<MaybeHTMLDialogElement>(null);
90
- const dialogCallbackRef = useCallback((node: MaybeHTMLDialogElement) => {
91
- setPortalDomNode(node);
92
- }, []);
93
-
94
- useImperativeHandle<MaybeHTMLDialogElement, MaybeHTMLDialogElement>(
95
- dialogCallbackRef,
96
- () => dialogRef.current,
97
- );
98
-
99
- if (!isOpen) {
100
- return null;
101
- }
102
-
103
- return (
104
- <Portal>
105
- <DialogRoot {...dialogProps} ref={dialogRef}>
106
- {isModalShown && (
107
- <RootLayoutProvider innerRef={portalDomNode}>
108
- <DialogContents
109
- style={{
110
- maxWidth,
111
- height: height || 'max-content',
112
- width: width || '100%',
113
- }}
114
- >
115
- {children}
116
- {hasCloseButton && (
117
- <Button
118
- style={{ position: 'absolute', top: 4, right: 4 }}
119
- onClick={onRequestClose}
120
- intent="danger"
121
- minimal
122
- icon="cross"
123
- />
124
- )}
125
- </DialogContents>
126
- </RootLayoutProvider>
127
- )}
128
- </DialogRoot>
129
- </Portal>
130
- );
131
- }
132
-
133
- Modal.Header = function ModalHeader(props: { children: ReactNode }) {
134
- return <ModalHeaderStyled>{props.children}</ModalHeaderStyled>;
135
- };
136
-
137
- Modal.Body = function ModalBody(props: { children: ReactNode }) {
138
- return <ModalBodyStyled>{props.children}</ModalBodyStyled>;
139
- };
140
-
141
- Modal.Footer = function ModalFooter(props: { children: ReactNode }) {
142
- return <ModalFooterStyled>{props.children}</ModalFooterStyled>;
143
- };
@@ -1,2 +0,0 @@
1
- export * from './ConfirmModal';
2
- export * from './Modal';
@@ -1,95 +0,0 @@
1
- import {
2
- MouseEventHandler,
3
- ReactEventHandler,
4
- RefObject,
5
- useCallback,
6
- useEffect,
7
- useMemo,
8
- } from 'react';
9
- import { useKbsDisableGlobal } from 'react-kbs';
10
-
11
- import { useOnOff } from '../hooks/useOnOff';
12
-
13
- interface UseDialogOptions {
14
- dialogRef: RefObject<HTMLDialogElement>;
15
- isOpen: boolean;
16
- requestCloseOnEsc: boolean;
17
- requestCloseOnBackdrop: boolean;
18
- onRequestClose: () => void;
19
- }
20
-
21
- interface UseDialogReturn {
22
- dialogProps: {
23
- onClick: MouseEventHandler<HTMLDialogElement>;
24
- onCancel: ReactEventHandler<HTMLDialogElement>;
25
- onClose: UseDialogOptions['onRequestClose'];
26
- };
27
- isModalShown: boolean;
28
- }
29
-
30
- export function useDialog({
31
- dialogRef,
32
- isOpen,
33
- requestCloseOnEsc,
34
- requestCloseOnBackdrop,
35
- onRequestClose,
36
- }: UseDialogOptions): UseDialogReturn {
37
- useKbsDisableGlobal(isOpen);
38
- const [isModalShown, showModal, hideModal] = useOnOff(false);
39
-
40
- useEffect(() => {
41
- const dialog = dialogRef.current;
42
- if (dialog && isOpen) {
43
- showModal();
44
- dialog.showModal();
45
- return () => {
46
- hideModal();
47
- dialog.close();
48
- };
49
- }
50
- }, [dialogRef, isOpen, showModal, hideModal]);
51
-
52
- const onCancel = useCallback<ReactEventHandler<HTMLDialogElement>>(
53
- (event) => {
54
- if (!requestCloseOnEsc) {
55
- event.preventDefault();
56
- }
57
- },
58
- [requestCloseOnEsc],
59
- );
60
-
61
- const onClick = useCallback<MouseEventHandler<HTMLDialogElement>>(
62
- (event) => {
63
- const dialog = dialogRef.current;
64
- if (!dialog) {
65
- return;
66
- }
67
-
68
- // Ref: https://stackoverflow.com/questions/25864259/how-to-close-the-new-html-dialog-tag-by-clicking-on-its-backdrop
69
- const rect = dialog.getBoundingClientRect();
70
- const isInDialog =
71
- rect.top <= event.clientY &&
72
- event.clientY <= rect.top + rect.height &&
73
- rect.left <= event.clientX &&
74
- event.clientX <= rect.left + rect.width;
75
-
76
- event.stopPropagation();
77
- // Since the dialog has no size of itself, this condition is only
78
- // `true` when we click on the backdrop.
79
- if (!isInDialog && requestCloseOnBackdrop) {
80
- onRequestClose();
81
- }
82
- },
83
- [requestCloseOnBackdrop, onRequestClose, dialogRef],
84
- );
85
-
86
- const dialogProps = useMemo<UseDialogReturn['dialogProps']>(
87
- () => ({ onClick, onCancel, onClose: onRequestClose }),
88
- [onClick, onCancel, onRequestClose],
89
- );
90
-
91
- return {
92
- dialogProps,
93
- isModalShown,
94
- };
95
- }