@seamapi/react 0.26.0 → 0.27.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +5 -4
- package/index.css +69 -3
- package/index.css.map +1 -1
- package/index.min.css +1 -1
- package/index.min.css.map +1 -1
- package/lib/copy-to-clipboard.d.ts +1 -0
- package/lib/copy-to-clipboard.js +4 -0
- package/lib/copy-to-clipboard.js.map +1 -0
- package/lib/icons/Close.d.ts +2 -0
- package/lib/icons/Close.js +5 -0
- package/lib/icons/Close.js.map +1 -0
- package/lib/icons/Search.d.ts +2 -0
- package/lib/icons/Search.js +5 -0
- package/lib/icons/Search.js.map +1 -0
- package/lib/ui/AccessCodeTable/AccessCodeTable.js +4 -4
- package/lib/ui/AccessCodeTable/AccessCodeTable.js.map +1 -1
- package/lib/ui/Alert/Alert.d.ts +6 -4
- package/lib/ui/Alert/Alert.js +7 -4
- package/lib/ui/Alert/Alert.js.map +1 -1
- package/lib/ui/Alert/Alerts.d.ts +4 -4
- package/lib/ui/Alert/Alerts.js +4 -2
- package/lib/ui/Alert/Alerts.js.map +1 -1
- package/lib/ui/DeviceDetails/DeviceDetails.js +2 -3
- package/lib/ui/DeviceDetails/DeviceDetails.js.map +1 -1
- package/lib/ui/DeviceTable/DeviceRow.d.ts +2 -2
- package/lib/ui/DeviceTable/DeviceRow.js +0 -1
- package/lib/ui/DeviceTable/DeviceRow.js.map +1 -1
- package/lib/ui/DeviceTable/DeviceTable.js +9 -1
- package/lib/ui/DeviceTable/DeviceTable.js.map +1 -1
- package/lib/ui/Menu/Menu.d.ts +9 -10
- package/lib/ui/Menu/Menu.js +23 -21
- package/lib/ui/Menu/Menu.js.map +1 -1
- package/lib/ui/Menu/MenuItem.d.ts +4 -4
- package/lib/ui/Menu/MenuItem.js +1 -1
- package/lib/ui/Menu/MenuItem.js.map +1 -1
- package/lib/ui/Menu/MoreActionsMenu.d.ts +5 -4
- package/lib/ui/Menu/MoreActionsMenu.js +6 -6
- package/lib/ui/Menu/MoreActionsMenu.js.map +1 -1
- package/lib/ui/SupportedDevices/SupportedDeviceRow.d.ts +1 -1
- package/lib/ui/SupportedDevices/SupportedDeviceRow.js +8 -14
- package/lib/ui/SupportedDevices/SupportedDeviceRow.js.map +1 -1
- package/lib/ui/SupportedDevices/SupportedDevices.js +2 -2
- package/lib/ui/SupportedDevices/SupportedDevices.js.map +1 -1
- package/lib/ui/SupportedDevices/SupportedDevicesHeader.d.ts +1 -1
- package/lib/ui/SupportedDevices/SupportedDevicesHeader.js +1 -1
- package/lib/ui/SupportedDevices/SupportedDevicesHeader.js.map +1 -1
- package/lib/ui/Table/TableFilterBar/TableFilterBar.d.ts +3 -2
- package/lib/ui/Table/TableFilterBar/TableFilterBar.js +1 -1
- package/lib/ui/Table/TableFilterBar/TableFilterBar.js.map +1 -1
- package/lib/ui/Table/TableFilterBar/TableFilterItem.d.ts +2 -1
- package/lib/ui/Table/TableFilterBar/TableFilterItem.js +1 -1
- package/lib/ui/Table/TableFilterBar/TableFilterItem.js.map +1 -1
- package/lib/ui/Table/TableHeader.js +1 -1
- package/lib/ui/Table/TableHeader.js.map +1 -1
- package/lib/ui/TextField/SearchTextField.d.ts +1 -1
- package/lib/ui/TextField/SearchTextField.js +52 -2
- package/lib/ui/TextField/SearchTextField.js.map +1 -1
- package/lib/ui/TextField/TextField.d.ts +12 -5
- package/lib/ui/TextField/TextField.js +7 -5
- package/lib/ui/TextField/TextField.js.map +1 -1
- package/lib/ui/device/BatteryStatus.d.ts +2 -1
- package/lib/ui/device/LockStatus.d.ts +2 -1
- package/lib/ui/device/OnlineStatus.d.ts +2 -1
- package/lib/use-toggle.d.ts +1 -2
- package/lib/use-toggle.js +1 -2
- package/lib/use-toggle.js.map +1 -1
- package/package.json +1 -1
- package/src/lib/copy-to-clipboard.ts +3 -0
- package/src/lib/icons/Close.tsx +30 -0
- package/src/lib/icons/Search.tsx +30 -0
- package/src/lib/ui/AccessCodeTable/AccessCodeTable.tsx +4 -4
- package/src/lib/ui/Alert/Alert.tsx +21 -18
- package/src/lib/ui/Alert/Alerts.tsx +7 -5
- package/src/lib/ui/DeviceDetails/DeviceDetails.tsx +3 -6
- package/src/lib/ui/DeviceTable/DeviceRow.tsx +4 -4
- package/src/lib/ui/DeviceTable/DeviceTable.tsx +16 -1
- package/src/lib/ui/Menu/Menu.tsx +34 -34
- package/src/lib/ui/Menu/MenuItem.tsx +6 -4
- package/src/lib/ui/Menu/MoreActionsMenu.tsx +15 -10
- package/src/lib/ui/SupportedDevices/SupportedDeviceRow.tsx +9 -20
- package/src/lib/ui/SupportedDevices/SupportedDevices.tsx +2 -2
- package/src/lib/ui/SupportedDevices/SupportedDevicesHeader.tsx +1 -1
- package/src/lib/ui/Table/TableFilterBar/TableFilterBar.tsx +5 -3
- package/src/lib/ui/Table/TableFilterBar/TableFilterItem.tsx +2 -2
- package/src/lib/ui/Table/TableHeader.tsx +5 -1
- package/src/lib/ui/TextField/SearchTextField.tsx +79 -0
- package/src/lib/ui/TextField/TextField.tsx +45 -14
- package/src/lib/ui/device/BatteryStatus.tsx +1 -1
- package/src/lib/ui/device/LockStatus.tsx +1 -1
- package/src/lib/ui/device/OnlineStatus.tsx +1 -1
- package/src/lib/use-toggle.ts +3 -3
- package/src/styles/_colors.scss +1 -0
- package/src/styles/_device-table.scss +4 -0
- package/src/styles/_inputs.scss +74 -2
- package/src/styles/_supported-devices.scss +0 -1
- package/src/styles/_tables.scss +8 -1
- package/lib/copy.d.ts +0 -1
- package/lib/copy.js +0 -4
- package/lib/copy.js.map +0 -1
- package/src/lib/copy.ts +0 -3
package/lib/ui/Menu/Menu.d.ts
CHANGED
|
@@ -1,19 +1,18 @@
|
|
|
1
|
-
|
|
1
|
+
import { type MouseEvent, type PropsWithChildren } from 'react';
|
|
2
2
|
export interface MenuProps {
|
|
3
|
-
children: JSX.Element | JSX.Element[];
|
|
4
3
|
verticalOffset?: number;
|
|
5
4
|
horizontalOffset?: number;
|
|
6
5
|
edgeOffset?: number;
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
}) =>
|
|
10
|
-
|
|
6
|
+
renderButton: (props: {
|
|
7
|
+
onOpen: (event: MouseEvent<HTMLElement>) => void;
|
|
8
|
+
}) => JSX.Element;
|
|
9
|
+
backgroundProps?: Partial<{
|
|
11
10
|
className?: string;
|
|
12
11
|
}>;
|
|
13
12
|
}
|
|
14
|
-
interface
|
|
13
|
+
interface MenuContextValue {
|
|
15
14
|
close: () => void;
|
|
16
15
|
}
|
|
17
|
-
declare
|
|
18
|
-
export declare function useMenu():
|
|
19
|
-
export
|
|
16
|
+
export declare function Menu({ verticalOffset, horizontalOffset, edgeOffset, children, renderButton, backgroundProps, }: PropsWithChildren<MenuProps>): import("react/jsx-runtime").JSX.Element | null;
|
|
17
|
+
export declare function useMenu(): MenuContextValue;
|
|
18
|
+
export {};
|
package/lib/ui/Menu/Menu.js
CHANGED
|
@@ -2,15 +2,20 @@ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
|
2
2
|
import classNames from 'classnames';
|
|
3
3
|
import { createContext, useCallback, useContext, useEffect, useLayoutEffect, useState, } from 'react';
|
|
4
4
|
import { createPortal } from 'react-dom';
|
|
5
|
-
const
|
|
6
|
-
|
|
5
|
+
const menuContext = createContext({
|
|
6
|
+
close: () => { },
|
|
7
|
+
});
|
|
8
|
+
export function Menu({ verticalOffset = 5, horizontalOffset = 0, edgeOffset = 5, children, renderButton, backgroundProps, }) {
|
|
9
|
+
const { Provider } = menuContext;
|
|
7
10
|
const [anchorEl, setAnchorEl] = useState(null);
|
|
8
11
|
const [documentEl, setDocumentEl] = useState(null);
|
|
9
12
|
const [contentEl, setContentEl] = useState(null);
|
|
10
13
|
const [top, setTop] = useState(0);
|
|
11
14
|
const [left, setLeft] = useState(0);
|
|
12
15
|
useEffect(() => {
|
|
13
|
-
const containers = document
|
|
16
|
+
const containers = globalThis?.document?.querySelectorAll('.seam-components');
|
|
17
|
+
if (containers == null)
|
|
18
|
+
return;
|
|
14
19
|
const el = containers[containers.length - 1];
|
|
15
20
|
if (el != null) {
|
|
16
21
|
setDocumentEl(el);
|
|
@@ -19,7 +24,7 @@ const Menu = ({ verticalOffset = 5, horizontalOffset = 0, edgeOffset = 5, childr
|
|
|
19
24
|
const handleClose = () => {
|
|
20
25
|
setAnchorEl(null);
|
|
21
26
|
};
|
|
22
|
-
const
|
|
27
|
+
const handleOpen = (event) => {
|
|
23
28
|
setAnchorEl(event.currentTarget);
|
|
24
29
|
};
|
|
25
30
|
const setPositions = useCallback(() => {
|
|
@@ -33,15 +38,13 @@ const Menu = ({ verticalOffset = 5, horizontalOffset = 0, edgeOffset = 5, childr
|
|
|
33
38
|
const left = anchorLeft + horizontalOffset;
|
|
34
39
|
const right = left + contentWidth;
|
|
35
40
|
const bottom = top + contentHeight;
|
|
36
|
-
// If the content would overflow right,
|
|
37
|
-
// to the right of the container.
|
|
41
|
+
// If the content would overflow right, set it relative to the right of the container.
|
|
38
42
|
const isOverflowingRight = right > containerRight;
|
|
39
43
|
const visibleLeft = isOverflowingRight
|
|
40
44
|
? containerRight - contentWidth - horizontalOffset - edgeOffset
|
|
41
45
|
: left;
|
|
42
46
|
setLeft(visibleLeft);
|
|
43
|
-
// If the content would overflow bottom,
|
|
44
|
-
// above the anchor.
|
|
47
|
+
// If the content would overflow bottom, position it above the anchor.
|
|
45
48
|
const isOverFlowingBottom = bottom > containerBottom;
|
|
46
49
|
const visibleTop = isOverFlowingBottom
|
|
47
50
|
? anchorTop - contentHeight - verticalOffset
|
|
@@ -55,39 +58,38 @@ const Menu = ({ verticalOffset = 5, horizontalOffset = 0, edgeOffset = 5, childr
|
|
|
55
58
|
documentEl,
|
|
56
59
|
edgeOffset,
|
|
57
60
|
]);
|
|
58
|
-
const isOpen = Boolean(anchorEl);
|
|
59
61
|
useLayoutEffect(() => {
|
|
60
62
|
setPositions();
|
|
61
|
-
|
|
62
|
-
|
|
63
|
+
globalThis?.addEventListener('scroll', setPositions);
|
|
64
|
+
globalThis?.addEventListener('resize', setPositions);
|
|
63
65
|
return () => {
|
|
64
|
-
|
|
65
|
-
|
|
66
|
+
globalThis?.removeEventListener('scroll', setPositions);
|
|
67
|
+
globalThis?.removeEventListener('resize', setPositions);
|
|
66
68
|
};
|
|
67
69
|
}, [setPositions]);
|
|
70
|
+
const isOpen = anchorEl != null;
|
|
68
71
|
const hasSetPosition = top !== 0 && left !== 0;
|
|
69
72
|
const visible = isOpen && hasSetPosition;
|
|
70
73
|
if (documentEl == null) {
|
|
71
74
|
return null;
|
|
72
75
|
}
|
|
73
|
-
return (_jsxs(
|
|
76
|
+
return (_jsxs(Provider, { value: {
|
|
74
77
|
close: handleClose,
|
|
75
|
-
}, children: [
|
|
78
|
+
}, children: [renderButton({ onOpen: handleOpen }), createPortal(_jsx("div", { className: classNames('seam-menu-bg', backgroundProps?.className), style: {
|
|
76
79
|
display: visible ? 'flex' : 'none',
|
|
77
|
-
}, onClick: (
|
|
78
|
-
|
|
80
|
+
}, onClick: (event) => {
|
|
81
|
+
event.stopPropagation();
|
|
79
82
|
handleClose();
|
|
80
83
|
}, children: _jsx("div", { className: 'seam-menu-content', style: {
|
|
81
84
|
top,
|
|
82
85
|
left,
|
|
83
86
|
}, children: children }) }), documentEl), _jsx("div", { className: 'seam-menu-shadow', children: _jsx("div", { className: 'seam-menu-content', ref: setContentEl, children: children }) })] }));
|
|
84
|
-
}
|
|
87
|
+
}
|
|
85
88
|
export function useMenu() {
|
|
86
|
-
const context = useContext(
|
|
87
|
-
if (context
|
|
89
|
+
const context = useContext(menuContext);
|
|
90
|
+
if (context == null) {
|
|
88
91
|
throw new Error('useMenu must be used within a Menu.');
|
|
89
92
|
}
|
|
90
93
|
return context;
|
|
91
94
|
}
|
|
92
|
-
export default Menu;
|
|
93
95
|
//# sourceMappingURL=Menu.js.map
|
package/lib/ui/Menu/Menu.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Menu.js","sourceRoot":"","sources":["../../../src/lib/ui/Menu/Menu.tsx"],"names":[],"mappings":";AAAA,OAAO,UAAU,MAAM,YAAY,CAAA;AACnC,OAAO,EACL,aAAa,
|
|
1
|
+
{"version":3,"file":"Menu.js","sourceRoot":"","sources":["../../../src/lib/ui/Menu/Menu.tsx"],"names":[],"mappings":"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"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import type {
|
|
2
|
-
|
|
3
|
-
children: ReactNode;
|
|
1
|
+
import type { PropsWithChildren } from 'react';
|
|
2
|
+
interface MenuItemProps {
|
|
4
3
|
onClick: () => void;
|
|
5
4
|
}
|
|
6
|
-
export declare function MenuItem({ children,
|
|
5
|
+
export declare function MenuItem({ onClick, children, }: PropsWithChildren<MenuItemProps>): import("react/jsx-runtime").JSX.Element;
|
|
6
|
+
export {};
|
package/lib/ui/Menu/MenuItem.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
2
|
import { useMenu } from '../../../lib/ui/Menu/Menu.js';
|
|
3
|
-
export function MenuItem({ children,
|
|
3
|
+
export function MenuItem({ onClick, children, }) {
|
|
4
4
|
const { close: closeMenu } = useMenu();
|
|
5
5
|
return (_jsx("div", { className: 'seam-menu-item', onClick: () => {
|
|
6
6
|
onClick();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MenuItem.js","sourceRoot":"","sources":["../../../src/lib/ui/Menu/MenuItem.tsx"],"names":[],"mappings":";AAEA,OAAO,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAA;
|
|
1
|
+
{"version":3,"file":"MenuItem.js","sourceRoot":"","sources":["../../../src/lib/ui/Menu/MenuItem.tsx"],"names":[],"mappings":";AAEA,OAAO,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAA;AAM7C,MAAM,UAAU,QAAQ,CAAC,EACvB,OAAO,EACP,QAAQ,GACyB;IACjC,MAAM,EAAE,KAAK,EAAE,SAAS,EAAE,GAAG,OAAO,EAAE,CAAA;IAEtC,OAAO,CACL,cACE,SAAS,EAAC,gBAAgB,EAC1B,OAAO,EAAE,GAAG,EAAE;YACZ,OAAO,EAAE,CAAA;YACT,SAAS,EAAE,CAAA;QACb,CAAC,YAEA,QAAQ,GACL,CACP,CAAA;AACH,CAAC"}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
|
+
import type { PropsWithChildren } from 'react';
|
|
1
2
|
import { type MenuProps } from '../../../lib/ui/Menu/Menu.js';
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
MenuProps?: Partial<MenuProps>;
|
|
3
|
+
interface MoreActionsMenuProps {
|
|
4
|
+
menuProps?: Partial<MenuProps>;
|
|
5
5
|
}
|
|
6
|
-
export declare function MoreActionsMenu({ children,
|
|
6
|
+
export declare function MoreActionsMenu({ children, menuProps, }: PropsWithChildren<MoreActionsMenuProps>): import("react/jsx-runtime").JSX.Element;
|
|
7
|
+
export {};
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
2
|
import { DotsEllipsisMoreIcon } from '../../../lib/icons/DotsEllipsisMore.js';
|
|
3
3
|
import { IconButton } from '../../../lib/ui/IconButton.js';
|
|
4
|
-
import Menu
|
|
5
|
-
export function MoreActionsMenu({ children,
|
|
6
|
-
return (_jsx(Menu, {
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
}, children: _jsx(DotsEllipsisMoreIcon, {}) })), ...
|
|
4
|
+
import { Menu } from '../../../lib/ui/Menu/Menu.js';
|
|
5
|
+
export function MoreActionsMenu({ children, menuProps, }) {
|
|
6
|
+
return (_jsx(Menu, { renderButton: ({ onOpen }) => (_jsx(IconButton, { onClick: (event) => {
|
|
7
|
+
event.stopPropagation();
|
|
8
|
+
onOpen(event);
|
|
9
|
+
}, children: _jsx(DotsEllipsisMoreIcon, {}) })), ...menuProps, children: children }));
|
|
10
10
|
}
|
|
11
11
|
//# sourceMappingURL=MoreActionsMenu.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MoreActionsMenu.js","sourceRoot":"","sources":["../../../src/lib/ui/Menu/MoreActionsMenu.tsx"],"names":[],"mappings":";
|
|
1
|
+
{"version":3,"file":"MoreActionsMenu.js","sourceRoot":"","sources":["../../../src/lib/ui/Menu/MoreActionsMenu.tsx"],"names":[],"mappings":";AAEA,OAAO,EAAE,oBAAoB,EAAE,MAAM,+BAA+B,CAAA;AACpE,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAA;AACjD,OAAO,EAAE,IAAI,EAAkB,MAAM,qBAAqB,CAAA;AAM1D,MAAM,UAAU,eAAe,CAAC,EAC9B,QAAQ,EACR,SAAS,GAC+B;IACxC,OAAO,CACL,KAAC,IAAI,IACH,YAAY,EAAE,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC,CAC5B,KAAC,UAAU,IACT,OAAO,EAAE,CAAC,KAAK,EAAE,EAAE;gBACjB,KAAK,CAAC,eAAe,EAAE,CAAA;gBACvB,MAAM,CAAC,KAAK,CAAC,CAAA;YACf,CAAC,YAED,KAAC,oBAAoB,KAAG,GACb,CACd,KACG,SAAS,YAEZ,QAAQ,GACJ,CACR,CAAA;AACH,CAAC"}
|
|
@@ -2,4 +2,4 @@ import type { DeviceModel } from '../../../lib/ui/SupportedDevices/types.js';
|
|
|
2
2
|
export interface SupportedDeviceRowProps {
|
|
3
3
|
deviceModel: DeviceModel;
|
|
4
4
|
}
|
|
5
|
-
export
|
|
5
|
+
export declare function SupportedDeviceRow({ deviceModel }: SupportedDeviceRowProps): import("react/jsx-runtime").JSX.Element;
|
|
@@ -1,18 +1,12 @@
|
|
|
1
1
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
2
|
import classNames from 'classnames';
|
|
3
|
-
export
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
case 'Live':
|
|
7
|
-
return 'green';
|
|
8
|
-
case 'Beta':
|
|
9
|
-
return 'blue';
|
|
10
|
-
case 'Unsupported':
|
|
11
|
-
return 'orange';
|
|
12
|
-
default:
|
|
13
|
-
return 'gray';
|
|
14
|
-
}
|
|
15
|
-
}
|
|
16
|
-
return (_jsxs("tr", { children: [_jsx("td", { children: _jsx("img", { style: { width: 40 }, src: deviceModel.icon_url }) }), _jsx("td", { children: deviceModel.main_category }), _jsx("td", { children: deviceModel.model_name }), _jsx("td", { children: deviceModel.manufacturer_model_id }), _jsx("td", { children: deviceModel.connection_type }), _jsx("td", { children: _jsx("div", { className: classNames('seam-status-pill', `status-${getColorFromSupportLevel()}`), children: _jsx("span", { children: deviceModel.support_level }) }) })] }));
|
|
3
|
+
export function SupportedDeviceRow({ deviceModel }) {
|
|
4
|
+
const statusColor = supportLevelColors[deviceModel.support_level] ?? 'gray';
|
|
5
|
+
return (_jsxs("tr", { children: [_jsx("td", { children: _jsx("img", { style: { width: 40 }, src: deviceModel.icon_url }) }), _jsx("td", { children: deviceModel.main_category }), _jsx("td", { children: deviceModel.model_name }), _jsx("td", { children: deviceModel.manufacturer_model_id }), _jsx("td", { children: deviceModel.connection_type }), _jsx("td", { children: _jsx("div", { className: classNames('seam-status-pill', `status-${statusColor}`), children: _jsx("span", { children: deviceModel.support_level }) }) })] }));
|
|
17
6
|
}
|
|
7
|
+
const supportLevelColors = {
|
|
8
|
+
Live: 'green',
|
|
9
|
+
Beta: 'blue',
|
|
10
|
+
Unsupported: 'orange',
|
|
11
|
+
};
|
|
18
12
|
//# sourceMappingURL=SupportedDeviceRow.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SupportedDeviceRow.js","sourceRoot":"","sources":["../../../src/lib/ui/SupportedDevices/SupportedDeviceRow.tsx"],"names":[],"mappings":";AAAA,OAAO,UAAU,MAAM,YAAY,CAAA;AAQnC,MAAM,
|
|
1
|
+
{"version":3,"file":"SupportedDeviceRow.js","sourceRoot":"","sources":["../../../src/lib/ui/SupportedDevices/SupportedDeviceRow.tsx"],"names":[],"mappings":";AAAA,OAAO,UAAU,MAAM,YAAY,CAAA;AAQnC,MAAM,UAAU,kBAAkB,CAAC,EAAE,WAAW,EAA2B;IACzE,MAAM,WAAW,GAAG,kBAAkB,CAAC,WAAW,CAAC,aAAa,CAAC,IAAI,MAAM,CAAA;IAC3E,OAAO,CACL,yBACE,uBACE,cAAK,KAAK,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,WAAW,CAAC,QAAQ,GAAI,GACrD,EACL,uBAAK,WAAW,CAAC,aAAa,GAAM,EACpC,uBAAK,WAAW,CAAC,UAAU,GAAM,EACjC,uBAAK,WAAW,CAAC,qBAAqB,GAAM,EAC5C,uBAAK,WAAW,CAAC,eAAe,GAAM,EACtC,uBACE,cACE,SAAS,EAAE,UAAU,CAAC,kBAAkB,EAAE,UAAU,WAAW,EAAE,CAAC,YAElE,yBAAO,WAAW,CAAC,aAAa,GAAQ,GACpC,GACH,IACF,CACN,CAAA;AACH,CAAC;AAED,MAAM,kBAAkB,GAAG;IACzB,IAAI,EAAE,OAAO;IACb,IAAI,EAAE,MAAM;IACZ,WAAW,EAAE,QAAQ;CACtB,CAAA"}
|
|
@@ -2,8 +2,8 @@ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-run
|
|
|
2
2
|
import { useQuery } from '@tanstack/react-query';
|
|
3
3
|
import axios from 'axios';
|
|
4
4
|
import { Button } from '../../../lib/ui/Button.js';
|
|
5
|
-
import SupportedDeviceRow from './SupportedDeviceRow.js';
|
|
6
|
-
import SupportedDevicesHeader from './SupportedDevicesHeader.js';
|
|
5
|
+
import { SupportedDeviceRow } from './SupportedDeviceRow.js';
|
|
6
|
+
import { SupportedDevicesHeader } from './SupportedDevicesHeader.js';
|
|
7
7
|
export function SupportedDevices() {
|
|
8
8
|
const { data, isLoading, isError, refetch } = useQuery({
|
|
9
9
|
queryKey: ['supported_devices'],
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SupportedDevices.js","sourceRoot":"","sources":["../../../src/lib/ui/SupportedDevices/SupportedDevices.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAA;AAChD,OAAO,KAAK,MAAM,OAAO,CAAA;AAEzB,OAAO,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAA;AAGzC,OAAO,kBAAkB,MAAM,yBAAyB,CAAA;
|
|
1
|
+
{"version":3,"file":"SupportedDevices.js","sourceRoot":"","sources":["../../../src/lib/ui/SupportedDevices/SupportedDevices.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAA;AAChD,OAAO,KAAK,MAAM,OAAO,CAAA;AAEzB,OAAO,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAA;AAGzC,OAAO,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAA;AAC5D,OAAO,EAAE,sBAAsB,EAAE,MAAM,6BAA6B,CAAA;AAEpE,MAAM,UAAU,gBAAgB;IAC9B,MAAM,EAAE,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,OAAO,EAAE,GAAG,QAAQ,CAInD;QACD,QAAQ,EAAE,CAAC,mBAAmB,CAAC;QAC/B,OAAO,EAAE,KAAK,IAAI,EAAE;YAClB,OAAO,MAAM,KAAK,CAAC,GAAG,CAAC,iDAAiD,CAAC,CAAA;QAC3E,CAAC;KACF,CAAC,CAAA;IAEF,OAAO,CACL,4BACE,eAAK,SAAS,EAAC,mCAAmC,aAC/C,SAAS,IAAI,CACZ,cAAK,SAAS,EAAC,0CAA0C,YACvD,mDAA+B,GAC3B,CACP,EAEA,OAAO,IAAI,CACV,eAAK,SAAS,EAAC,0CAA0C,aACvD,qEAAiD,EACjD,KAAC,MAAM,IACL,OAAO,EAAC,OAAO,EACf,IAAI,EAAC,OAAO,EACZ,OAAO,EAAE,GAAG,EAAE;gCACZ,KAAK,OAAO,EAAE,CAAA;4BAChB,CAAC,sBAGM,IACL,CACP,EAEA,CAAC,SAAS;oBACT,CAAC,OAAO;oBACR,IAAI,EAAE,IAAI,EAAE,aAAa,KAAK,IAAI;oBAClC,KAAK,CAAC,OAAO,CAAC,IAAI,EAAE,IAAI,EAAE,aAAa,CAAC,IAAI,CAC1C,iBAAO,SAAS,EAAC,8BAA8B,aAC7C,KAAC,sBAAsB,KAAG,EAC1B,0BACG,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC,WAAW,EAAE,EAAE,CAAC,CAC5C,KAAC,kBAAkB,IAEjB,WAAW,EAAE,WAAW,IADnB,WAAW,CAAC,qBAAqB,CAEtC,CACH,CAAC,GACI,IACF,CACT,IACC,GACL,CACJ,CAAA;AACH,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
export
|
|
1
|
+
export declare function SupportedDevicesHeader(): import("react/jsx-runtime").JSX.Element;
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
-
export
|
|
2
|
+
export function SupportedDevicesHeader() {
|
|
3
3
|
return (_jsx("thead", { children: _jsxs("tr", { children: [_jsx("th", {}), _jsx("th", { children: "Category" }), _jsx("th", { children: "Model Name" }), _jsx("th", { children: "Manufacturer Model ID" }), _jsx("th", { children: "Connection Type" }), _jsx("th", { children: "Status" })] }) }));
|
|
4
4
|
}
|
|
5
5
|
//# sourceMappingURL=SupportedDevicesHeader.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SupportedDevicesHeader.js","sourceRoot":"","sources":["../../../src/lib/ui/SupportedDevices/SupportedDevicesHeader.tsx"],"names":[],"mappings":";AAAA,MAAM,
|
|
1
|
+
{"version":3,"file":"SupportedDevicesHeader.js","sourceRoot":"","sources":["../../../src/lib/ui/SupportedDevices/SupportedDevicesHeader.tsx"],"names":[],"mappings":";AAAA,MAAM,UAAU,sBAAsB;IACpC,OAAO,CACL,0BACE,yBACE,cAAM,EACN,oCAAiB,EACjB,sCAAmB,EACnB,iDAA8B,EAC9B,2CAAwB,EACxB,kCAAe,IACZ,GACC,CACT,CAAA;AACH,CAAC"}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import type { DivProps } from '../../../../lib/ui/types.js';
|
|
2
|
-
|
|
2
|
+
interface TableFilterBarProps extends DivProps {
|
|
3
3
|
isFilterCleared?: boolean;
|
|
4
4
|
onFilterClear?: () => void;
|
|
5
5
|
}
|
|
6
|
-
export declare function TableFilterBar({ isFilterCleared, onFilterClear, children, ...props }:
|
|
6
|
+
export declare function TableFilterBar({ isFilterCleared, onFilterClear, children, ...props }: TableFilterBarProps): import("react/jsx-runtime").JSX.Element;
|
|
7
|
+
export {};
|
|
@@ -3,7 +3,7 @@ import { ArrowRestartIcon } from '../../../../lib/icons/ArrowRestart.js';
|
|
|
3
3
|
import { IconButton } from '../../../../lib/ui/IconButton.js';
|
|
4
4
|
export function TableFilterBar({ isFilterCleared, onFilterClear, children, ...props }) {
|
|
5
5
|
const showClearFilterButton = isFilterCleared === false;
|
|
6
|
-
return (_jsxs("div", { className: 'seam-table-filter-bar', ...props, children: [children, ' ', showClearFilterButton
|
|
6
|
+
return (_jsxs("div", { className: 'seam-table-filter-bar', ...props, children: [children, ' ', showClearFilterButton ? (_jsx(ClearFiltersButton, { onClick: onFilterClear })) : null] }));
|
|
7
7
|
}
|
|
8
8
|
function ClearFiltersButton(props) {
|
|
9
9
|
return (_jsx(IconButton, { ...props, className: 'seam-clear-filters-button', children: _jsx(ArrowRestartIcon, {}) }));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TableFilterBar.js","sourceRoot":"","sources":["../../../../src/lib/ui/Table/TableFilterBar/TableFilterBar.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,2BAA2B,CAAA;AAC5D,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAA;AAQjD,MAAM,UAAU,cAAc,CAAC,EAC7B,eAAe,EACf,aAAa,EACb,QAAQ,EACR,GAAG,KAAK,
|
|
1
|
+
{"version":3,"file":"TableFilterBar.js","sourceRoot":"","sources":["../../../../src/lib/ui/Table/TableFilterBar/TableFilterBar.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,2BAA2B,CAAA;AAC5D,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAA;AAQjD,MAAM,UAAU,cAAc,CAAC,EAC7B,eAAe,EACf,aAAa,EACb,QAAQ,EACR,GAAG,KAAK,EACY;IACpB,MAAM,qBAAqB,GAAG,eAAe,KAAK,KAAK,CAAA;IACvD,OAAO,CACL,eAAK,SAAS,EAAC,uBAAuB,KAAK,KAAK,aAC7C,QAAQ,EAAE,GAAG,EACb,qBAAqB,CAAC,CAAC,CAAC,CACvB,KAAC,kBAAkB,IAAC,OAAO,EAAE,aAAa,GAAI,CAC/C,CAAC,CAAC,CAAC,IAAI,IACJ,CACP,CAAA;AACH,CAAC;AAED,SAAS,kBAAkB,CAAC,KAAkB;IAC5C,OAAO,CACL,KAAC,UAAU,OAAK,KAAK,EAAE,SAAS,EAAC,2BAA2B,YAC1D,KAAC,gBAAgB,KAAG,GACT,CACd,CAAA;AACH,CAAC"}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import type { DivProps } from '../../../../lib/ui/types.js';
|
|
2
|
-
|
|
2
|
+
interface TableFilterItemProps extends DivProps {
|
|
3
3
|
selected?: boolean;
|
|
4
4
|
}
|
|
5
5
|
export declare function TableFilterItem({ onClick, selected, ...props }: TableFilterItemProps): import("react/jsx-runtime").JSX.Element;
|
|
6
|
+
export {};
|
|
@@ -2,7 +2,7 @@ import { jsx as _jsx } from "react/jsx-runtime";
|
|
|
2
2
|
import classNames from 'classnames';
|
|
3
3
|
export function TableFilterItem({ onClick, selected, ...props }) {
|
|
4
4
|
return (_jsx("div", { onClick: onClick, className: classNames('seam-table-filter-item', {
|
|
5
|
-
'seam-clickable': onClick
|
|
5
|
+
'seam-clickable': onClick != null,
|
|
6
6
|
'seam-selected': selected,
|
|
7
7
|
}), ...props }));
|
|
8
8
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TableFilterItem.js","sourceRoot":"","sources":["../../../../src/lib/ui/Table/TableFilterBar/TableFilterItem.tsx"],"names":[],"mappings":";AAAA,OAAO,UAAU,MAAM,YAAY,CAAA;AAQnC,MAAM,UAAU,eAAe,CAAC,EAC9B,OAAO,EACP,QAAQ,EACR,GAAG,KAAK,EACa;IACrB,OAAO,CACL,cACE,OAAO,EAAE,OAAO,EAChB,SAAS,EAAE,UAAU,CAAC,wBAAwB,EAAE;YAC9C,gBAAgB,EAAE,OAAO,
|
|
1
|
+
{"version":3,"file":"TableFilterItem.js","sourceRoot":"","sources":["../../../../src/lib/ui/Table/TableFilterBar/TableFilterItem.tsx"],"names":[],"mappings":";AAAA,OAAO,UAAU,MAAM,YAAY,CAAA;AAQnC,MAAM,UAAU,eAAe,CAAC,EAC9B,OAAO,EACP,QAAQ,EACR,GAAG,KAAK,EACa;IACrB,OAAO,CACL,cACE,OAAO,EAAE,OAAO,EAChB,SAAS,EAAE,UAAU,CAAC,wBAAwB,EAAE;YAC9C,gBAAgB,EAAE,OAAO,IAAI,IAAI;YACjC,eAAe,EAAE,QAAQ;SAC1B,CAAC,KACE,KAAK,GACT,CACH,CAAA;AACH,CAAC"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
2
|
export function TableHeader({ children }) {
|
|
3
|
-
return _jsx("div", { className: 'seam-table-header', children: children });
|
|
3
|
+
return (_jsx("div", { className: 'seam-table-header', children: _jsx("div", { className: 'seam-body', children: children }) }));
|
|
4
4
|
}
|
|
5
5
|
//# sourceMappingURL=TableHeader.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TableHeader.js","sourceRoot":"","sources":["../../../src/lib/ui/Table/TableHeader.tsx"],"names":[],"mappings":";AAEA,MAAM,UAAU,WAAW,CAAC,EAAE,QAAQ,EAAqB;IACzD,OAAO,cAAK,SAAS,EAAC,mBAAmB,YAAE,QAAQ,GAAO,CAAA;
|
|
1
|
+
{"version":3,"file":"TableHeader.js","sourceRoot":"","sources":["../../../src/lib/ui/Table/TableHeader.tsx"],"names":[],"mappings":";AAEA,MAAM,UAAU,WAAW,CAAC,EAAE,QAAQ,EAAqB;IACzD,OAAO,CACL,cAAK,SAAS,EAAC,mBAAmB,YAChC,cAAK,SAAS,EAAC,WAAW,YAAE,QAAQ,GAAO,GACvC,CACP,CAAA;AACH,CAAC"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
import { type TextFieldProps } from '../../../lib/ui/TextField/TextField.js';
|
|
2
|
-
export declare function SearchTextField({ className, ...props }: TextFieldProps): JSX.Element;
|
|
2
|
+
export declare function SearchTextField({ className, value, onChange, ...props }: TextFieldProps): JSX.Element;
|
|
@@ -1,7 +1,57 @@
|
|
|
1
1
|
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
2
|
import classNames from 'classnames';
|
|
3
|
+
import { useEffect, useState } from 'react';
|
|
4
|
+
import { CloseIcon } from '../../../lib/icons/Close.js';
|
|
5
|
+
import { SearchIcon } from '../../../lib/icons/Search.js';
|
|
3
6
|
import { TextField } from '../../../lib/ui/TextField/TextField.js';
|
|
4
|
-
export function SearchTextField({ className, ...props }) {
|
|
5
|
-
|
|
7
|
+
export function SearchTextField({ className, value, onChange, ...props }) {
|
|
8
|
+
const [inputEl, setInputEl] = useState(null);
|
|
9
|
+
const valueIsEmpty = useValueIsEmpty(value, inputEl);
|
|
10
|
+
const clearInput = () => {
|
|
11
|
+
if (onChange != null) {
|
|
12
|
+
onChange('');
|
|
13
|
+
return;
|
|
14
|
+
}
|
|
15
|
+
if (inputEl != null) {
|
|
16
|
+
inputEl.value = '';
|
|
17
|
+
}
|
|
18
|
+
};
|
|
19
|
+
return (_jsx(TextField, { value: value, onChange: onChange, ...props, className: classNames(className, 'seam-search-text-field'), startAdornment: _jsx(SearchIcon, {}), inputProps: {
|
|
20
|
+
ref: setInputEl,
|
|
21
|
+
placeholder: 'Search',
|
|
22
|
+
}, endAdornment: _jsx("button", { className: classNames({
|
|
23
|
+
'seam-hidden': valueIsEmpty,
|
|
24
|
+
}), onClick: clearInput, children: _jsx(CloseIcon, {}) }) }));
|
|
25
|
+
}
|
|
26
|
+
function useValueIsEmpty(value, inputEl) {
|
|
27
|
+
const [valueIsEmpty, setValueIsEmpty] = useState(true);
|
|
28
|
+
// If this is a controlled element, we'll just look at `value`
|
|
29
|
+
useEffect(() => {
|
|
30
|
+
setValueIsEmpty(value == null || value === '');
|
|
31
|
+
}, [value]);
|
|
32
|
+
// If this is not a controlled element, we'll need to listen to `input`
|
|
33
|
+
// events.
|
|
34
|
+
useEffect(() => {
|
|
35
|
+
if (inputEl == null) {
|
|
36
|
+
return;
|
|
37
|
+
}
|
|
38
|
+
const handler = (event) => {
|
|
39
|
+
if (value !== undefined) {
|
|
40
|
+
return;
|
|
41
|
+
}
|
|
42
|
+
if (event.target == null || !('value' in event.target)) {
|
|
43
|
+
return;
|
|
44
|
+
}
|
|
45
|
+
const inputValue = event.target.value;
|
|
46
|
+
if (value === undefined) {
|
|
47
|
+
setValueIsEmpty(inputValue === '');
|
|
48
|
+
}
|
|
49
|
+
};
|
|
50
|
+
inputEl.addEventListener('input', handler);
|
|
51
|
+
return () => {
|
|
52
|
+
inputEl.removeEventListener('input', handler);
|
|
53
|
+
};
|
|
54
|
+
}, [inputEl, value]);
|
|
55
|
+
return valueIsEmpty;
|
|
6
56
|
}
|
|
7
57
|
//# sourceMappingURL=SearchTextField.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SearchTextField.js","sourceRoot":"","sources":["../../../src/lib/ui/TextField/SearchTextField.tsx"],"names":[],"mappings":";AAAA,OAAO,UAAU,MAAM,YAAY,CAAA;
|
|
1
|
+
{"version":3,"file":"SearchTextField.js","sourceRoot":"","sources":["../../../src/lib/ui/TextField/SearchTextField.tsx"],"names":[],"mappings":";AAAA,OAAO,UAAU,MAAM,YAAY,CAAA;AACnC,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAA;AAE3C,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAA;AAC9C,OAAO,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAA;AAChD,OAAO,EAAE,SAAS,EAAuB,MAAM,+BAA+B,CAAA;AAE9E,MAAM,UAAU,eAAe,CAAC,EAC9B,SAAS,EACT,KAAK,EACL,QAAQ,EACR,GAAG,KAAK,EACO;IACf,MAAM,CAAC,OAAO,EAAE,UAAU,CAAC,GAAG,QAAQ,CAA0B,IAAI,CAAC,CAAA;IAErE,MAAM,YAAY,GAAG,eAAe,CAAC,KAAK,EAAE,OAAO,CAAC,CAAA;IACpD,MAAM,UAAU,GAAG,GAAG,EAAE;QACtB,IAAI,QAAQ,IAAI,IAAI,EAAE;YACpB,QAAQ,CAAC,EAAE,CAAC,CAAA;YACZ,OAAM;SACP;QAED,IAAI,OAAO,IAAI,IAAI,EAAE;YACnB,OAAO,CAAC,KAAK,GAAG,EAAE,CAAA;SACnB;IACH,CAAC,CAAA;IAED,OAAO,CACL,KAAC,SAAS,IACR,KAAK,EAAE,KAAK,EACZ,QAAQ,EAAE,QAAQ,KACd,KAAK,EACT,SAAS,EAAE,UAAU,CAAC,SAAS,EAAE,wBAAwB,CAAC,EAC1D,cAAc,EAAE,KAAC,UAAU,KAAG,EAC9B,UAAU,EAAE;YACV,GAAG,EAAE,UAAU;YACf,WAAW,EAAE,QAAQ;SACtB,EACD,YAAY,EACV,iBACE,SAAS,EAAE,UAAU,CAAC;gBACpB,aAAa,EAAE,YAAY;aAC5B,CAAC,EACF,OAAO,EAAE,UAAU,YAEnB,KAAC,SAAS,KAAG,GACN,GAEX,CACH,CAAA;AACH,CAAC;AAED,SAAS,eAAe,CACtB,KAAyB,EACzB,OAAgC;IAEhC,MAAM,CAAC,YAAY,EAAE,eAAe,CAAC,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAA;IAEtD,8DAA8D;IAC9D,SAAS,CAAC,GAAG,EAAE;QACb,eAAe,CAAC,KAAK,IAAI,IAAI,IAAI,KAAK,KAAK,EAAE,CAAC,CAAA;IAChD,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAA;IAEX,uEAAuE;IACvE,UAAU;IACV,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,OAAO,IAAI,IAAI,EAAE;YACnB,OAAM;SACP;QAED,MAAM,OAAO,GAAG,CAAC,KAAY,EAAE,EAAE;YAC/B,IAAI,KAAK,KAAK,SAAS,EAAE;gBACvB,OAAM;aACP;YAED,IAAI,KAAK,CAAC,MAAM,IAAI,IAAI,IAAI,CAAC,CAAC,OAAO,IAAI,KAAK,CAAC,MAAM,CAAC,EAAE;gBACtD,OAAM;aACP;YAED,MAAM,UAAU,GAAG,KAAK,CAAC,MAAM,CAAC,KAAK,CAAA;YACrC,IAAI,KAAK,KAAK,SAAS,EAAE;gBACvB,eAAe,CAAC,UAAU,KAAK,EAAE,CAAC,CAAA;aACnC;QACH,CAAC,CAAA;QAED,OAAO,CAAC,gBAAgB,CAAC,OAAO,EAAE,OAAO,CAAC,CAAA;QAE1C,OAAO,GAAG,EAAE;YACV,OAAO,CAAC,mBAAmB,CAAC,OAAO,EAAE,OAAO,CAAC,CAAA;QAC/C,CAAC,CAAA;IACH,CAAC,EAAE,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC,CAAA;IAEpB,OAAO,YAAY,CAAA;AACrB,CAAC"}
|
|
@@ -1,7 +1,14 @@
|
|
|
1
|
-
import type { ChangeEvent, InputHTMLAttributes } from 'react';
|
|
2
|
-
export
|
|
1
|
+
import type { ChangeEvent, InputHTMLAttributes, MutableRefObject } from 'react';
|
|
2
|
+
export interface TextFieldProps {
|
|
3
3
|
value?: string;
|
|
4
|
-
onChange
|
|
5
|
-
|
|
4
|
+
onChange?: (value: string) => void;
|
|
5
|
+
startAdornment?: JSX.Element;
|
|
6
|
+
endAdornment?: JSX.Element;
|
|
7
|
+
disabled?: boolean;
|
|
8
|
+
className?: string;
|
|
9
|
+
inputProps?: {
|
|
10
|
+
ref?: MutableRefObject<HTMLInputElement | null> | ((inputEl: HTMLInputElement) => void);
|
|
11
|
+
} & Omit<InputHTMLAttributes<HTMLInputElement>, 'value' | 'onChange'>;
|
|
12
|
+
}
|
|
6
13
|
export declare function TextField(props: TextFieldProps): JSX.Element;
|
|
7
|
-
export declare const handleString: (setter: (v: string) => void) => (
|
|
14
|
+
export declare const handleString: (setter: (v: string) => void) => (event: ChangeEvent<HTMLInputElement | HTMLTextAreaElement>) => void;
|
|
@@ -1,10 +1,12 @@
|
|
|
1
|
-
import { jsx as _jsx } from "react/jsx-runtime";
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
2
|
import classNames from 'classnames';
|
|
3
3
|
export function TextField(props) {
|
|
4
|
-
const { value, onChange, className,
|
|
5
|
-
return (
|
|
4
|
+
const { value, onChange, className, startAdornment, endAdornment, inputProps, disabled, } = props;
|
|
5
|
+
return (_jsxs("div", { className: classNames('seam-text-field', className, {
|
|
6
|
+
'seam-disabled': disabled,
|
|
7
|
+
}), children: [startAdornment != null && (_jsx("div", { className: 'seam-adornment seam-start', children: startAdornment })), _jsx("input", { className: 'seam-text-field-input', value: value, onChange: onChange == null ? undefined : handleString(onChange), type: 'text', disabled: disabled, ...inputProps }), endAdornment != null && (_jsx("div", { className: 'seam-adornment seam-end', children: endAdornment }))] }));
|
|
6
8
|
}
|
|
7
|
-
export const handleString = (setter) => (
|
|
8
|
-
setter(
|
|
9
|
+
export const handleString = (setter) => (event) => {
|
|
10
|
+
setter(event.currentTarget.value);
|
|
9
11
|
};
|
|
10
12
|
//# sourceMappingURL=TextField.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TextField.js","sourceRoot":"","sources":["../../../src/lib/ui/TextField/TextField.tsx"],"names":[],"mappings":";AAAA,OAAO,UAAU,MAAM,YAAY,CAAA;
|
|
1
|
+
{"version":3,"file":"TextField.js","sourceRoot":"","sources":["../../../src/lib/ui/TextField/TextField.tsx"],"names":[],"mappings":";AAAA,OAAO,UAAU,MAAM,YAAY,CAAA;AAiBnC,MAAM,UAAU,SAAS,CAAC,KAAqB;IAC7C,MAAM,EACJ,KAAK,EACL,QAAQ,EACR,SAAS,EACT,cAAc,EACd,YAAY,EACZ,UAAU,EACV,QAAQ,GACT,GAAG,KAAK,CAAA;IAET,OAAO,CACL,eACE,SAAS,EAAE,UAAU,CAAC,iBAAiB,EAAE,SAAS,EAAE;YAClD,eAAe,EAAE,QAAQ;SAC1B,CAAC,aAED,cAAc,IAAI,IAAI,IAAI,CACzB,cAAK,SAAS,EAAC,2BAA2B,YAAE,cAAc,GAAO,CAClE,EACD,gBACE,SAAS,EAAC,uBAAuB,EACjC,KAAK,EAAE,KAAK,EACZ,QAAQ,EAAE,QAAQ,IAAI,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,YAAY,CAAC,QAAQ,CAAC,EAC/D,IAAI,EAAC,MAAM,EACX,QAAQ,EAAE,QAAQ,KACd,UAAU,GACd,EACD,YAAY,IAAI,IAAI,IAAI,CACvB,cAAK,SAAS,EAAC,yBAAyB,YAAE,YAAY,GAAO,CAC9D,IACG,CACP,CAAA;AACH,CAAC;AAED,MAAM,CAAC,MAAM,YAAY,GACvB,CAAC,MAA2B,EAAE,EAAE,CAChC,CAAC,KAA0D,EAAQ,EAAE;IACnE,MAAM,CAAC,KAAK,CAAC,aAAa,CAAC,KAAK,CAAC,CAAA;AACnC,CAAC,CAAA"}
|
package/lib/use-toggle.d.ts
CHANGED
package/lib/use-toggle.js
CHANGED
|
@@ -2,7 +2,7 @@ import { useCallback, useState } from 'react';
|
|
|
2
2
|
/**
|
|
3
3
|
* Simple util to quickly handle on/off states.
|
|
4
4
|
*/
|
|
5
|
-
const useToggle = (initialState = false) => {
|
|
5
|
+
export const useToggle = (initialState = false) => {
|
|
6
6
|
const [isTrue, setIsTrue] = useState(initialState);
|
|
7
7
|
// use callback otherwise it would yield unexpected results in promises
|
|
8
8
|
const toggle = useCallback(() => {
|
|
@@ -10,5 +10,4 @@ const useToggle = (initialState = false) => {
|
|
|
10
10
|
}, [setIsTrue]);
|
|
11
11
|
return [isTrue, toggle];
|
|
12
12
|
};
|
|
13
|
-
export default useToggle;
|
|
14
13
|
//# sourceMappingURL=use-toggle.js.map
|
package/lib/use-toggle.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"use-toggle.js","sourceRoot":"","sources":["../src/lib/use-toggle.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAA;AAE7C;;GAEG;AACH,MAAM,SAAS,GAAG,
|
|
1
|
+
{"version":3,"file":"use-toggle.js","sourceRoot":"","sources":["../src/lib/use-toggle.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAA;AAE7C;;GAEG;AACH,MAAM,CAAC,MAAM,SAAS,GAAG,CACvB,eAAwB,KAAK,EACN,EAAE;IACzB,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,GAAG,QAAQ,CAAC,YAAY,CAAC,CAAA;IAElD,uEAAuE;IAEvE,MAAM,MAAM,GAAG,WAAW,CAAC,GAAG,EAAE;QAC9B,SAAS,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,MAAM,CAAC,CAAA;IAChC,CAAC,EAAE,CAAC,SAAS,CAAC,CAAC,CAAA;IAEf,OAAO,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;AACzB,CAAC,CAAA"}
|
package/package.json
CHANGED
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import type { SVGProps } from 'react'
|
|
2
|
+
export const CloseIcon = (props: SVGProps<SVGSVGElement>): JSX.Element => (
|
|
3
|
+
<svg
|
|
4
|
+
xmlns='http://www.w3.org/2000/svg'
|
|
5
|
+
width={24}
|
|
6
|
+
height={24}
|
|
7
|
+
fill='none'
|
|
8
|
+
{...props}
|
|
9
|
+
>
|
|
10
|
+
<mask
|
|
11
|
+
id='close_svg__a'
|
|
12
|
+
width={24}
|
|
13
|
+
height={24}
|
|
14
|
+
x={0}
|
|
15
|
+
y={0}
|
|
16
|
+
maskUnits='userSpaceOnUse'
|
|
17
|
+
style={{
|
|
18
|
+
maskType: 'alpha',
|
|
19
|
+
}}
|
|
20
|
+
>
|
|
21
|
+
<path fill='#D9D9D9' d='M0 0h24v24H0z' />
|
|
22
|
+
</mask>
|
|
23
|
+
<g mask='url(#close_svg__a)'>
|
|
24
|
+
<path
|
|
25
|
+
fill='#B9BEC5'
|
|
26
|
+
d='M6.4 19 5 17.6l5.6-5.6L5 6.4 6.4 5l5.6 5.6L17.6 5 19 6.4 13.4 12l5.6 5.6-1.4 1.4-5.6-5.6L6.4 19Z'
|
|
27
|
+
/>
|
|
28
|
+
</g>
|
|
29
|
+
</svg>
|
|
30
|
+
)
|