@esrf/daiquiri-lib 0.0.2-alpha.1 → 0.0.2-alpha.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.d.ts +387 -0
- package/dist/index.esm.js +913 -0
- package/dist/index.esm.js.map +1 -0
- package/dist/index.js +2 -0
- package/dist/index.js.map +1 -0
- package/package.json +1 -1
- package/src/index.ts +1 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.esm.js","sources":["../src/hardware/TypeIcon.tsx","../src/utils/formatting.ts","../src/hardware/Frontend.tsx","../src/hardware/Info.tsx","../src/hardware/utils/HardwareTemplate.tsx","../src/hardware/utils/State.tsx","../src/components/NumericStep.tsx","../src/hardware/utils/HardwareNumericStep.tsx","../src/hardware/utils/HardwareInputNumber.tsx","../src/hardware/MotorDefault.tsx","../src/hardware/Multiposition.tsx","../src/hardware/NoObject.tsx","../src/hardware/Property.tsx","../src/hardware/ShutterDefault.tsx","../src/components/FullSizer.tsx"],"sourcesContent":["interface Props {\n online: boolean;\n activeMessage?: string;\n inactiveMessage?: string;\n message?: string;\n icon: string;\n name: string;\n}\nexport function OnlineStatus(props: Props) {\n const {\n activeMessage = 'Online',\n inactiveMessage = 'Offline',\n message = 'This device is',\n } = props;\n\n return (\n <div\n className={`dot-indicator small bg-${\n props.online ? 'success' : 'danger'\n }`}\n title={`${message} ${props.online ? activeMessage : inactiveMessage}`}\n />\n );\n}\n\nexport default function TypeIcon(props: Props) {\n const { name, icon } = props;\n return (\n <div className=\"icon\" title={name}>\n <i className={`fa ${icon}`} />\n <OnlineStatus {...props} />\n </div>\n );\n}\n","// https://github.com/gentooboontoo/js-quantities/issues/30\nexport function formatEng(scalar: number) {\n const powerPrefix: Record<number, string> = {\n 24: 'Y',\n 21: 'Z',\n 18: 'E',\n 15: 'P',\n 12: 'T',\n 9: 'G',\n 6: 'M',\n 3: 'k',\n '-3': 'm',\n '-6': '\\u00B5',\n '-9': 'n',\n '-12': 'p',\n '-15': 'f',\n '-18': 'a',\n '-21': 'z',\n '-24': 'y',\n };\n\n const q = Math.log(scalar) / Math.log(1e3);\n // so that for example '3 km' does not get converted to '3000 m'\n const subtrhnd = !Number.isInteger(q);\n\n const pow10 = 3 * Math.ceil(q - (subtrhnd ? 1 : 0));\n const prefix = pow10 === 0 ? '' : powerPrefix[pow10];\n\n return {\n scalar: scalar * 10 ** -pow10,\n prefix,\n multiplier: 10 ** -pow10,\n };\n}\n\n/**\n * Returns the argument as capitalized string.\n */\nexport function ucfirst(str: string) {\n return str.charAt(0).toUpperCase() + str.slice(1);\n}\n\nexport function toHoursMins(seconds: number) {\n if (seconds < 60) return `${Math.round(seconds)} sec`;\n\n const min = Math.round(seconds / 60);\n\n const mins = min % 60;\n const hours = Math.floor(min / 60);\n\n return hours ? `${hours} hr ${mins} min` : `${mins} min`;\n}\n\nexport function toEnergy(wavelength: number) {\n return wavelength > 0\n ? (\n ((6.626_070_04e-34 * 2.997_924_58e8) /\n (wavelength * 1e-10) /\n 1.602_18e-19) *\n 1e-3\n ).toFixed(4)\n : 0;\n}\n\nexport function round(value: number, digits: number) {\n return Number.parseFloat(value.toFixed(digits));\n}\n","import type { MouseEvent } from 'react';\nimport { map } from 'lodash';\nimport {\n Badge,\n Button,\n ButtonGroup,\n Container,\n Row,\n Col,\n OverlayTrigger,\n Popover,\n} from 'react-bootstrap';\n\nimport TypeIcon from './TypeIcon';\nimport { toHoursMins } from '../utils/formatting';\nimport type { HardwareWidgetProps } from './utils/types';\nimport type { FrontendSchema } from './utils/schema';\n\nfunction FrontendOverlay(props: HardwareWidgetProps<FrontendSchema>) {\n const { hardware } = props;\n function reset(e: any) {\n void hardware.requestChange({\n function: 'reset',\n });\n }\n\n type StateEnum = 'feitlk' | 'expitlk' | 'pssitlk';\n\n const itlks: { [name: string]: StateEnum } = {\n 'Front End': 'feitlk',\n Experimental: 'expitlk',\n PSS: 'pssitlk',\n };\n\n const ring = {\n Current: `${hardware.properties.current.toFixed(1)} mA`,\n Mode: hardware.properties.mode,\n Refill: toHoursMins(hardware.properties.refill),\n Message: <pre>{hardware.properties.message}</pre>,\n };\n\n function getPropertyState(key: StateEnum): string {\n if (!(key in hardware.properties)) {\n return 'UNKNOWN';\n }\n const state: any = hardware.properties[key];\n if (!state || typeof state !== 'string') {\n return 'UNKNOWN';\n }\n return state;\n }\n\n return (\n <OverlayTrigger\n trigger=\"click\"\n rootClose\n overlay={\n <Popover id=\"popid\">\n <Popover.Header>{hardware.name} Details</Popover.Header>\n <Popover.Body>\n <h6>Status</h6>\n <pre>{hardware.properties.status}</pre>\n <h6>Interlocks</h6>\n <Container>\n {map(itlks, (key, name) => (\n <Row key={name}>\n <Col>{name}:</Col>\n <Col>\n <Badge\n bg={getPropertyState(key) === 'ON' ? 'success' : 'danger'}\n >\n {getPropertyState(key)}\n </Badge>\n </Col>\n </Row>\n ))}\n </Container>\n\n <h6>Ring Status</h6>\n <Container>\n {map(ring, (prop, name) => (\n <Row key={name}>\n <Col>{name}:</Col>\n <Col>{prop}</Col>\n </Row>\n ))}\n </Container>\n\n <div className=\"d-grid gap-2\">\n <Button disabled={props.disabled} onClick={reset}>\n Reset\n </Button>\n </div>\n </Popover.Body>\n </Popover>\n }\n >\n <Button className=\"flex-grow-0\" title=\"Shutter Details\">\n <i className=\"fa fa-ellipsis-h\" />\n </Button>\n </OverlayTrigger>\n );\n}\n\nfunction Frontend(props: HardwareWidgetProps<FrontendSchema>) {\n const { hardware, options = {} } = props;\n function onClick(e: MouseEvent) {\n void hardware.requestChange({\n function: hardware.properties.frontend === 'FE open' ? 'close' : 'open',\n });\n }\n\n return (\n <div className=\"hw-component\">\n <div className=\"hw-head\">\n <TypeIcon\n name=\"Frontend\"\n icon=\"fam-hardware-frontend\"\n online={hardware.online}\n />\n <div className=\"name\">{hardware.name}</div>\n <Badge\n bg={\n hardware.properties.state === 'OPEN' ||\n hardware.properties.state === 'RUNNING'\n ? 'success'\n : 'danger'\n }\n >\n {hardware.properties.state}\n </Badge>\n </div>\n <div className=\"hw-content\">\n <ButtonGroup className=\"d-flex\">\n <Button\n variant={\n hardware.properties.frontend === 'FE open' ? 'danger' : 'success'\n }\n onClick={onClick}\n disabled={props.disabled}\n >\n {hardware.properties.frontend === 'FE open' ? 'Close' : 'Open'}\n </Button>\n <FrontendOverlay {...props} />\n </ButtonGroup>\n </div>\n </div>\n );\n}\n\nexport default Frontend;\n","import type {\n Hardware,\n HardwareWidgetProps,\n HardwareWidgetOptions,\n} from './utils/types';\n\nexport interface InfoOptions extends HardwareWidgetOptions {\n /** The property */\n property?: string;\n /** Unit for the property */\n unit?: string;\n}\n\nexport default function Info(\n props: HardwareWidgetProps<Hardware, InfoOptions>\n) {\n const { hardware, options = {} } = props;\n function getValue() {\n const propertyName = options.property;\n if (propertyName === undefined) {\n return `property is not set`;\n }\n if (propertyName === null) {\n return `property is null`;\n }\n let result: any = hardware;\n for (const segment of propertyName.split('/')) {\n result = result[segment];\n if (result === undefined) {\n return `property '${propertyName}' not found`;\n }\n }\n return `${result}`;\n }\n\n return <>{getValue()}</>;\n}\n","import type { ReactElement } from 'react';\nimport { Form, OverlayTrigger, Popover, Button } from 'react-bootstrap';\nimport type { Hardware } from './types';\n\ninterface Props {\n hardware: Hardware;\n headerMode?: string;\n widgetIcon: ReactElement;\n widgetState: ReactElement;\n widgetContent: ReactElement;\n}\n\n/**\n * Normalized way to compose hardware component in order to provide the same\n * kind of layout\n */\nexport default function HardwareTemplate(props: Props) {\n const { headerMode, hardware } = props;\n\n function getLabel() {\n if (hardware.alias) {\n return hardware.alias;\n }\n if (hardware.name) {\n return hardware.name;\n }\n return hardware.id;\n }\n\n const label = getLabel();\n\n switch (headerMode) {\n case 'front':\n return (\n <div className=\"hw-component\">\n <div className=\"hw-single\">\n {props.widgetIcon}\n <div className=\"name\">{label}</div>\n <div className=\"d-inline-block\">{props.widgetContent}</div>\n </div>\n </div>\n );\n case 'none':\n return (\n <div className=\"hw-component\">\n <div className=\"hw-single\">{props.widgetContent}</div>\n </div>\n );\n case 'state':\n return props.widgetState;\n // case 'top':\n default:\n return (\n <div className=\"hw-component\">\n <div className=\"hw-head\">\n {props.widgetIcon}\n <div className=\"name\">\n <Form.Label htmlFor={hardware.id}>{label}</Form.Label>\n </div>\n {props.widgetState}\n {props.hardware.errors && props.hardware.errors.length > 0 && (\n <OverlayTrigger\n trigger=\"click\"\n placement=\"bottom\"\n rootClose\n overlay={\n <Popover id={props.hardware.id} style={{ maxWidth: 500 }}>\n <Popover.Header>Device Errors</Popover.Header>\n <Popover.Body>\n There were errors with properties on this device:\n <ul>\n {props.hardware.errors.map((error) => (\n <li>\n {error.property}:\n <span className=\"stack-trace\">\n {error.traceback}\n <br />\n {error.exception}\n </span>\n </li>\n ))}\n </ul>\n </Popover.Body>\n </Popover>\n }\n >\n <Button variant=\"danger\" size=\"sm\">\n <i className=\"fa fa-exclamation-triangle\" />\n </Button>\n </OverlayTrigger>\n )}\n </div>\n <div className=\"hw-content\">{props.widgetContent}</div>\n </div>\n );\n }\n}\n","import { Badge } from 'react-bootstrap';\nimport type * as Schema from './schema';\n\n/**\n * Normalize the way to display an hardware state.\n *\n * If `minWidth` is pecified (in `em`) it ensure the widget width will stay the\n * same when the state change\n */\nexport function HardwareState(props: {\n state: string;\n variant: string;\n minWidth?: number;\n}) {\n const style = {\n display: 'inline-block',\n minWidth: '',\n };\n\n if (props.minWidth) style.minWidth = `${props.minWidth}em`;\n return (\n <div style={style}>\n <Badge bg={props.variant}>{props.state}</Badge>\n </div>\n );\n}\n\nexport function MotorState(props: { hardware: Schema.MotorSchema }) {\n const { hardware } = props;\n function getState() {\n if (!hardware.online) {\n return 'OFFLINE';\n }\n let s1 = 'UNKNOWN';\n if (props.hardware.properties.state) {\n [s1] = props.hardware.properties.state;\n }\n return s1;\n }\n const state = getState();\n return (\n <HardwareState\n state={state}\n minWidth={6}\n variant={state === 'READY' ? 'success' : 'warning'}\n />\n );\n}\n\nexport function ShutterState(props: {\n hardware: Schema.ShutterSchema;\n useReadyState?: boolean;\n}) {\n const { hardware } = props;\n function getState() {\n if (!hardware.online) {\n return 'OFFLINE';\n }\n const s = hardware.properties.state;\n if (props.useReadyState && (s === 'OPEN' || s === 'CLOSED')) {\n return 'READY';\n }\n return s;\n }\n\n const state = getState();\n\n function getVariant() {\n switch (state) {\n case 'READY':\n return 'success';\n case 'OPEN':\n return 'success';\n case 'CLOSED':\n return 'danger';\n case 'DISABLED':\n return 'secondary';\n case 'MOVING':\n case 'STANDBY':\n case 'OFFLINE':\n return 'warning';\n case 'FAULT':\n return 'fatal';\n default:\n return 'fatal';\n }\n }\n\n return <HardwareState state={state} minWidth={6} variant={getVariant()} />;\n}\n","import type {\n KeyboardEvent,\n ChangeEvent,\n MutableRefObject,\n ReactChild,\n} from 'react';\nimport { forwardRef, useRef, useState } from 'react';\nimport { map } from 'lodash';\n\nimport { Form, Button, InputGroup } from 'react-bootstrap';\nimport classNames from 'classnames';\n\ninterface Props {\n step?: number;\n steps?: number[];\n disabled: boolean;\n id?: string;\n unit?: string;\n overlay?: ReactChild | null;\n incIcon?: string;\n decIcon?: string;\n swapIncDec?: boolean;\n className?: string;\n type?: 'number' | 'text';\n precision?: number;\n horizontalArrows?: boolean;\n largeArrows?: boolean;\n onBlur: () => void;\n onChange: (e: ChangeEvent<HTMLInputElement>) => void;\n onStep: (params: { target: HTMLInputElement }) => void;\n onKeyDown?: (e: KeyboardEvent<HTMLInputElement>) => void;\n}\n\nconst NumericStep = forwardRef<HTMLInputElement, Props>((props, ref) => {\n const stepSizeRef = useRef<HTMLSelectElement>(null);\n const [currentStep, setCurrentStep] = useState(props.step);\n const onStep = (up: boolean) => {\n // FIXME: Would be good to remove that cast\n const ref2 = ref as MutableRefObject<HTMLInputElement>;\n if (stepSizeRef.current === null) {\n return;\n }\n let val = Number.parseFloat(ref2.current.value);\n const stepSize = Number.parseFloat(stepSizeRef.current.value);\n val += up ? stepSize : -stepSize;\n ref2.current.value = `${val}`;\n\n if (props.onStep) {\n props.onStep({\n target: ref2.current,\n });\n }\n };\n\n const {\n onStep: onStepProp,\n step,\n overlay,\n incIcon,\n decIcon,\n swapIncDec,\n onKeyDown,\n horizontalArrows,\n largeArrows,\n ...rest\n } = props;\n\n const onKeyDown2 = (e: KeyboardEvent<HTMLInputElement>) => {\n if (e.key === 'ArrowUp') {\n e.preventDefault();\n onStep(true);\n } else if (e.key === 'ArrowDown') {\n e.preventDefault();\n onStep(false);\n } else if (onKeyDown) {\n onKeyDown(e);\n }\n };\n\n if (!props.step) {\n return (\n <Form.Control\n ref={ref}\n type=\"number\"\n step=\"any\"\n onKeyDown={onKeyDown2}\n {...rest}\n />\n );\n }\n\n const steps = map(props.steps || [props.step], (s) => (\n <option value={s} key={s}>\n {s}\n </option>\n ));\n\n return (\n <div\n className={classNames('numeric-step', {\n 'numeric-step-large': largeArrows,\n 'numeric-step-horizontal': horizontalArrows,\n })}\n >\n <InputGroup>\n <Form.Control\n onKeyDown={onKeyDown2}\n ref={ref}\n type=\"number\"\n step=\"any\"\n {...rest}\n />\n <>\n {overlay}\n {!overlay && (\n <InputGroup.Text className=\"d-flex flex-column\">\n <Form.Control\n ref={stepSizeRef}\n as=\"select\"\n className=\"step-size\"\n defaultValue={currentStep}\n onChange={(e) =>\n setCurrentStep(Number.parseFloat(e.target.value))\n }\n >\n {steps}\n </Form.Control>\n {props.unit && <div>{props.unit}</div>}\n {!incIcon && !decIcon && (\n <>\n <Button\n className=\"step step-up\"\n disabled={props.disabled}\n onClick={(e) => onStep(true)}\n />\n <Button\n className=\"step step-down\"\n disabled={props.disabled}\n onClick={(e) => onStep(false)}\n />\n </>\n )}\n </InputGroup.Text>\n )}\n {decIcon && swapIncDec && (\n <Button disabled={props.disabled} onClick={(e) => onStep(false)}>\n <i className={`fa fa-fw fa-${decIcon}`} />\n </Button>\n )}\n {incIcon && (\n <Button disabled={props.disabled} onClick={(e) => onStep(true)}>\n <i className={`fa fa-fw fa-${incIcon}`} />\n </Button>\n )}\n {decIcon && !swapIncDec && (\n <Button disabled={props.disabled} onClick={(e) => onStep(false)}>\n <i className={`fa fa-fw fa-${decIcon}`} />\n </Button>\n )}\n </>\n </InputGroup>\n </div>\n );\n});\n\nexport default NumericStep;\n","import { useRef, useState, useEffect } from 'react';\nimport type { KeyboardEvent, ChangeEvent } from 'react';\nimport classNames from 'classnames';\nimport { Button, Form, OverlayTrigger, InputGroup } from 'react-bootstrap';\nimport NumericStep from '../../components/NumericStep';\n\n/**\n * NumericStep handled hardware properties.\n *\n * Input related to hardware have specificities because the hardware state can\n * change during the user interaction.\n */\nexport default function HardwareNumericStep(props: {\n hardwareValue: number | null;\n hardwareIsDisabled: boolean;\n hardwareIsMoving: boolean;\n hardwareIsReady: boolean;\n onMoveRequested: (value: number) => Promise<void> | null;\n onAbortRequested: () => void;\n /** Default step size to use for up / down arrows */\n step?: number;\n /** Array of selectable step sizes */\n steps?: number[];\n /** Number of decimals to show */\n precision?: number;\n /** Whether this widget is read only */\n readOnly?: boolean;\n /** Specify a fontawesome to inc the value */\n incIcon?: string;\n /** Specify a fontawesome to dec the value */\n decIcon?: string;\n /** If true inc and dec icon are swapped */\n swapIncDec?: boolean;\n /** Show the step arrows horizontally instead of vertically */\n horizontalArrows?: boolean;\n /** Show large step arrows */\n largeArrows?: boolean;\n /** Identifier passed to the input element */\n id?: string;\n}) {\n const valueRef = useRef<HTMLInputElement>(null);\n const [edited, setEdited] = useState(false);\n const [error, setError] = useState(false);\n useEffect(() => {\n if (valueRef.current) {\n if (props.hardwareValue === null) {\n valueRef.current.value = '';\n } else {\n valueRef.current.value = props.hardwareValue.toString();\n }\n setEdited(false);\n }\n }, [props.hardwareValue]);\n\n function updateRef(value: any) {\n let newValue = value;\n if (props.precision !== undefined) {\n newValue = Number.parseFloat(newValue).toFixed(props.precision);\n }\n if (valueRef?.current) {\n valueRef.current.value = newValue;\n }\n }\n\n function onBlur() {\n if (edited) {\n setTimeout(() => {\n updateRef(props.hardwareValue);\n setEdited(false);\n }, 3000);\n }\n }\n\n function onChange(e: ChangeEvent<HTMLInputElement>) {\n if (props.hardwareValue === null) {\n return;\n }\n setEdited(true);\n if (valueRef?.current) {\n valueRef.current.value = e.target.value;\n }\n if (e.target.value === props.hardwareValue.toString()) {\n setEdited(false);\n }\n }\n\n function onStep(e: any) {\n setEdited(false);\n void props.onMoveRequested(e.target.value);\n }\n\n function onKeyDown(e: KeyboardEvent<HTMLInputElement>) {\n switch (e.key) {\n case 'Enter':\n {\n setEdited(false);\n // @ts-expect-error\n const value: number = Number.parseFloat(e.target.value);\n const promise = props.onMoveRequested(value);\n if (promise) {\n promise.catch(() => {\n setError(true);\n setTimeout(() => {\n updateRef(props.hardwareValue);\n setError(false);\n }, 2000);\n });\n }\n }\n e.preventDefault();\n e.stopPropagation();\n break;\n case 'Esc': // IE/Edge specific value\n case 'Escape':\n if (edited) {\n setError(false);\n setEdited(false);\n updateRef(props.hardwareValue);\n }\n // @ts-expect-error\n e.target.blur();\n e.preventDefault();\n e.stopPropagation();\n break;\n }\n }\n\n return (\n <NumericStep\n id={props.id}\n className={classNames({\n 'form-control-edited': edited,\n 'form-control-error': error,\n 'hw-moving': props.hardwareIsMoving,\n })}\n type={props.readOnly ? 'text' : 'number'}\n ref={valueRef}\n precision={props.precision}\n onChange={onChange}\n onBlur={onBlur}\n onStep={onStep}\n onKeyDown={onKeyDown}\n disabled={\n props.hardwareIsDisabled || props.readOnly || !props.hardwareIsReady\n }\n step={props.step}\n steps={props.steps}\n incIcon={props.incIcon}\n decIcon={props.decIcon}\n swapIncDec={props.swapIncDec}\n horizontalArrows={props.horizontalArrows}\n largeArrows={props.largeArrows}\n overlay={\n props.hardwareIsMoving && !props.hardwareIsDisabled ? (\n <Button variant=\"danger\" onClick={props.onAbortRequested}>\n <i className=\"fa fa-times\" />\n </Button>\n ) : null\n }\n />\n );\n}\n","import { useEffect, useRef, useState } from 'react';\nimport type { KeyboardEvent, ChangeEvent } from 'react';\nimport { Form } from 'react-bootstrap';\nimport classNames from 'classnames';\n\n/**\n * Input number synchronized with a hardware.\n *\n * Input related to hardware have specificities because the hardware state can\n * change during the user interaction.\n *\n * TODO: Maybe normalize `precision` and `step` together\n */\nexport default function HardwareInputNumber(props: {\n hardwareValue: number;\n hardwareIsDisabled: boolean;\n hardwareIsMoving?: boolean;\n hardwareIsReady?: boolean;\n onMoveRequested: (value: number) => Promise<void> | null;\n onAbortRequested?: () => void;\n readOnly?: boolean;\n precision?: number;\n step?: number;\n}) {\n const valueRef = useRef<HTMLInputElement>(null);\n const [edited, setEdited] = useState(false);\n const [error, setError] = useState(false);\n\n function normalizeNumber(value: string): string {\n if (props.precision !== undefined) {\n return Number.parseFloat(value).toFixed(props.precision);\n }\n return value;\n }\n\n useEffect(() => {\n if (valueRef.current) {\n valueRef.current.value = normalizeNumber(props.hardwareValue?.toString());\n setEdited(false);\n }\n }, [props.hardwareValue, props.precision]);\n\n function updateRef(value: any) {\n const newValue = normalizeNumber(value);\n if (valueRef?.current) {\n valueRef.current.value = newValue;\n }\n }\n\n function onKeyDown(e: KeyboardEvent<HTMLInputElement>) {\n switch (e.key) {\n case 'Enter': {\n setEdited(false);\n // @ts-expect-error\n const value: number = Number.parseFloat(e.target.value);\n const promise = props.onMoveRequested(value);\n if (promise) {\n promise.catch(() => {\n setError(true);\n setTimeout(() => {\n updateRef(props.hardwareValue);\n setError(false);\n }, 2000);\n });\n }\n e.preventDefault();\n e.stopPropagation();\n break;\n }\n case 'Esc': // IE/Edge specific value\n case 'Escape':\n if (edited) {\n setError(false);\n setEdited(false);\n updateRef(props.hardwareValue);\n }\n // @ts-expect-error\n e.target.blur();\n e.preventDefault();\n e.stopPropagation();\n break;\n }\n }\n\n function onChange(e: ChangeEvent<HTMLInputElement>) {\n setEdited(true);\n const { name } = e.target;\n if (valueRef?.current) {\n valueRef.current.value = e.target.value;\n }\n if (e.target.value === props.hardwareValue.toString()) {\n setEdited(false);\n }\n }\n\n return (\n <Form.Control\n className={classNames({\n 'form-control-edited': edited,\n 'form-control-error': error,\n 'hw-moving': props.hardwareIsMoving,\n })}\n type=\"number\"\n ref={valueRef}\n onChange={onChange}\n onKeyDown={onKeyDown}\n disabled={\n props.readOnly || props.hardwareIsMoving || props.hardwareIsDisabled\n }\n step={props.step}\n />\n );\n}\n","import {\n Button,\n Form,\n OverlayTrigger,\n InputGroup,\n Popover,\n} from 'react-bootstrap';\n\nimport TypeIcon from './TypeIcon';\nimport HardwareTemplate from './utils/HardwareTemplate';\nimport { MotorState } from './utils/State';\nimport HardwareNumericStep from './utils/HardwareNumericStep';\nimport HardwareInputNumber from './utils/HardwareInputNumber';\nimport type { MotorSchema } from './utils/schema';\nimport type {\n HardwareWidgetProps,\n HardwareWidgetOptions,\n EditableHardware,\n} from './utils/types';\n\ninterface MotorOverlayProps {\n hardware: EditableHardware<MotorSchema>;\n disabled: boolean;\n readOnly?: boolean;\n}\n\nfunction MotorOverlay(props: MotorOverlayProps) {\n function onMoveVelocityRequested(target: number) {\n return props.hardware.requestChange({\n property: 'velocity',\n value: target,\n });\n }\n\n function onMoveAccelerationRequested(target: number) {\n return props.hardware.requestChange({\n property: 'acceleration',\n value: target,\n });\n }\n\n let s1 = 'UNKNOWN';\n if (props.hardware.properties.state) {\n [s1] = props.hardware.properties.state;\n }\n\n return (\n <OverlayTrigger\n trigger=\"click\"\n rootClose\n overlay={\n <Popover id=\"popid\">\n <Popover.Header>{props.hardware.name} details</Popover.Header>\n <Popover.Body>\n <Form.Group>\n <Form.Label>Velocity</Form.Label>\n <HardwareInputNumber\n hardwareValue={props.hardware.properties.velocity}\n onMoveRequested={onMoveVelocityRequested}\n hardwareIsDisabled={props.disabled}\n hardwareIsReady={s1 === 'READY'}\n hardwareIsMoving={s1 === 'MOVING'}\n readOnly={props.readOnly}\n />\n </Form.Group>\n <Form.Group>\n <Form.Label>Acceleration</Form.Label>\n <HardwareInputNumber\n hardwareValue={props.hardware.properties.acceleration}\n onMoveRequested={onMoveAccelerationRequested}\n hardwareIsDisabled={props.disabled}\n hardwareIsReady={s1 === 'READY'}\n hardwareIsMoving={s1 === 'MOVING'}\n readOnly={props.readOnly}\n />\n </Form.Group>\n </Popover.Body>\n </Popover>\n }\n >\n <Button>\n <i className=\"fa fa-ellipsis-h\" />\n </Button>\n </OverlayTrigger>\n );\n}\n\nexport interface MotorDefaultOptions extends HardwareWidgetOptions {\n /** Default step size to use for up / down arrows */\n step?: number;\n /** Array of selectable step sizes */\n steps?: number[];\n /** Number of decimals to show */\n precision?: number;\n /** Whether to show popup to configure extended parameters */\n extended?: boolean;\n /** Whether this widget is read only */\n readOnly?: boolean;\n /** Kind of header displayed */\n header?: string;\n /** Specify a fontawesome to inc the value */\n incicon?: string;\n /** Specify a fontawesome to dec the value */\n decicon?: string;\n /** If true inc and dec icon are swapped */\n swapincdec?: boolean;\n /** Show the step arrows horizontally instead of vertically */\n horizontalarrows?: boolean;\n /** Show large step arrows */\n largearrows?: boolean;\n}\n\n/**\n * The default motor widget\n */\nexport default function MotorDefault(\n props: HardwareWidgetProps<MotorSchema, MotorDefaultOptions>\n) {\n const { hardware, options = {} } = props;\n function onAbortRequested() {\n void hardware.requestChange({\n function: 'stop',\n });\n }\n\n function onMovePositionRequested(target: number) {\n return hardware.requestChange({\n property: 'position',\n value: target,\n function: 'move',\n });\n }\n\n let s1 = 'UNKNOWN';\n if (props.hardware.properties.state) {\n [s1] = props.hardware.properties.state;\n }\n\n const widgetIcon = (\n <TypeIcon name=\"Motor\" icon=\"fam-hardware-motor\" online={hardware.online} />\n );\n\n const widgetState = <MotorState hardware={hardware} />;\n\n const headerMode = props.options ? props.options.header : 'top';\n\n return (\n <HardwareTemplate\n hardware={hardware}\n widgetIcon={widgetIcon}\n widgetState={widgetState}\n widgetContent={\n <InputGroup>\n <HardwareNumericStep\n id={hardware.id}\n hardwareValue={hardware.properties.position}\n hardwareIsDisabled={props.disabled}\n hardwareIsReady={s1 === 'READY'}\n hardwareIsMoving={s1 === 'MOVING'}\n onMoveRequested={onMovePositionRequested}\n onAbortRequested={onAbortRequested}\n precision={options.precision}\n readOnly={options.readOnly}\n step={options.step}\n steps={options.steps}\n incIcon={options.incicon}\n decIcon={options.decicon}\n swapIncDec={options.swapincdec}\n horizontalArrows={options.horizontalarrows}\n largeArrows={options.largearrows}\n />\n {hardware.properties.unit && (\n <InputGroup.Text>{hardware.properties.unit}</InputGroup.Text>\n )}\n\n {s1 !== 'MOVING' && options.extended && (\n <MotorOverlay\n hardware={hardware}\n disabled={props.disabled}\n readOnly={options.readOnly}\n />\n )}\n\n {s1 === 'MOVING' && !props.disabled && !options.step && (\n <Button variant=\"danger\" onClick={onAbortRequested}>\n <i className=\"fa fa-times\" />\n </Button>\n )}\n </InputGroup>\n }\n headerMode={headerMode}\n />\n );\n}\n","import { useRef, useEffect } from 'react';\nimport { map } from 'lodash';\nimport { Badge, Button, InputGroup, Form } from 'react-bootstrap';\n\nimport TypeIcon from './TypeIcon';\nimport type { MultipositionSchema } from './utils/schema';\nimport type { HardwareWidgetProps } from './utils/types';\n\nexport default function Multiposition(\n props: HardwareWidgetProps<MultipositionSchema>\n) {\n const { hardware, options = {} } = props;\n const selectionRef = useRef<HTMLSelectElement>(null);\n\n useEffect(() => {\n if (!selectionRef.current) {\n console.error('selectionRef ref is unset');\n return;\n }\n selectionRef.current.value = hardware.properties.position;\n }, [hardware.properties.position]);\n\n function onMove(e: any) {\n console.debug('change', e);\n if (!selectionRef || !selectionRef.current) {\n console.error('selection ref is unset');\n return;\n }\n void hardware.requestChange({\n value: selectionRef.current.value,\n function: 'move',\n });\n }\n\n function stop(e: any) {\n void hardware.requestChange({\n function: 'stop',\n });\n }\n\n const opts = map(hardware.properties.positions, (p) => (\n <option key={p.position} title={p.description}>\n {p.position}\n </option>\n ));\n\n return (\n <div className=\"hw-component\">\n <div className=\"hw-head\">\n <TypeIcon\n name=\"Multiposition\"\n icon=\"fam-hardware-multiposition\"\n online={hardware.online}\n />\n <div className=\"name\">{hardware.name}</div>\n <Badge\n bg={hardware.properties.state === 'READY' ? 'success' : 'warning'}\n >\n {hardware.properties.state}\n </Badge>\n </div>\n <div className=\"hw-content\">\n <InputGroup>\n <Form.Control\n className=\"custom-select\"\n as=\"select\"\n ref={selectionRef}\n disabled={props.disabled}\n defaultValue={hardware.properties.position}\n >\n <option disabled>unknown</option>\n {opts}\n </Form.Control>\n {hardware.properties.state !== 'MOVING' && (\n <Button onClick={onMove} disabled={props.disabled}>\n Move\n </Button>\n )}\n\n {hardware.properties.state === 'MOVING' && !props.disabled && (\n <Button variant=\"danger\" onClick={stop}>\n <i className=\"fa fa-times\" />\n </Button>\n )}\n </InputGroup>\n </div>\n </div>\n );\n}\n","import debug from 'debug';\n\nimport TypeIcon from './TypeIcon';\nimport HardwareTemplate from './utils/HardwareTemplate';\nimport type { Hardware } from './utils/types';\n\nconst logger = debug('daiquiri.components.hardware.NoObject');\n\ninterface NoObjectProps {\n id: string;\n name?: string;\n options: {\n header?: string;\n emptyifnone?: boolean;\n };\n}\n\nexport default function NoObject(props: NoObjectProps) {\n if (props.options.emptyifnone) {\n logger(\n 'Component id:\"%s\" name:\"%s\" not displayed cause setup with emptyifnone.',\n props.id,\n props.name\n );\n return <></>;\n }\n\n const widgetIcon = (\n <TypeIcon name=\"NoObject\" icon=\"fam-hardware-any\" online={false} />\n );\n\n const widgetState = <></>;\n\n const widgetContent = <>Missing</>;\n\n const headerMode = props.options ? props.options.header : 'top';\n\n const hardware: Hardware = {\n id: props.id,\n name: props.name ?? '',\n alias: null,\n online: false,\n properties: {},\n type: '',\n };\n\n return (\n <HardwareTemplate\n hardware={hardware}\n widgetIcon={widgetIcon}\n widgetState={widgetState}\n widgetContent={widgetContent}\n headerMode={headerMode}\n />\n );\n}\n","import { InputGroup, Form, Badge } from 'react-bootstrap';\n\nimport TypeIcon from './TypeIcon';\nimport HardwareTemplate from './utils/HardwareTemplate';\nimport type { GenericSchema } from './utils/schema';\nimport type { HardwareWidgetProps, HardwareWidgetOptions } from './utils/types';\n\nfunction DeviceState(props: GenericSchema) {\n const state = props.online ? 'READY' : 'OFFLINE';\n return <Badge bg={state === 'READY' ? 'success' : 'warning'}>{state}</Badge>;\n}\n\ninterface PropertyWidgetOptions extends HardwareWidgetOptions {\n header?: string;\n property?: string;\n unit?: string;\n}\n\nexport default function Property(\n props: HardwareWidgetProps<GenericSchema, PropertyWidgetOptions>\n) {\n const { hardware, options = {} } = props;\n const widgetIcon = (\n <TypeIcon name=\"Optic\" icon=\"fa-cog\" online={hardware.online} />\n );\n\n const widgetState = <DeviceState {...hardware} />;\n\n function getValue() {\n const propertyName = options.property;\n if (propertyName === undefined) {\n return `property is not set`;\n }\n if (propertyName === null) {\n return `property is null`;\n }\n let result: any = hardware;\n for (const segment of propertyName.split('/')) {\n result = result[segment];\n if (result === undefined) {\n return `property '${propertyName}' not found`;\n }\n }\n return `${result}`;\n }\n\n function getUnit() {\n const unitName = options.unit;\n if (!unitName) {\n return null;\n }\n if (!unitName.includes('properties')) {\n // That's a fixed unit defined as an option\n return unitName;\n }\n\n let result: any = props;\n for (const segment of unitName.split('/')) {\n result = result[segment];\n if (result === undefined) {\n return null;\n }\n }\n return `${result}`;\n }\n\n const unit = getUnit();\n\n const widgetContent = (\n <InputGroup>\n <Form.Control value={getValue()} readOnly />\n {unit && <InputGroup.Text>{unit}</InputGroup.Text>}\n </InputGroup>\n );\n\n const headerMode = props.options.header || 'top';\n\n return (\n <HardwareTemplate\n hardware={hardware}\n widgetIcon={widgetIcon}\n widgetState={widgetState}\n widgetContent={widgetContent}\n headerMode={headerMode}\n />\n );\n}\n","import { Button, OverlayTrigger, Popover, ButtonGroup } from 'react-bootstrap';\n\nimport TypeIcon from './TypeIcon';\nimport HardwareTemplate from './utils/HardwareTemplate';\nimport { ShutterState } from './utils/State';\nimport type { ShutterSchema } from './utils/schema';\nimport type { HardwareWidgetProps, HardwareWidgetOptions } from './utils/types';\n\nfunction ShutterOverlay(\n props: HardwareWidgetProps<ShutterSchema, HardwareWidgetOptions>\n) {\n const { hardware } = props;\n const reset = () => {\n void hardware.requestChange({\n function: 'reset',\n });\n };\n\n return (\n <OverlayTrigger\n trigger=\"click\"\n rootClose\n overlay={\n <Popover id=\"popid\">\n <Popover.Header>{hardware.name} Details</Popover.Header>\n <Popover.Body>\n <h6>Status</h6>\n <pre>{hardware.properties.status}</pre>\n <div className=\"d-grid gap-2\">\n <Button onClick={reset} disabled={props.disabled}>\n Reset\n </Button>\n </div>\n </Popover.Body>\n </Popover>\n }\n >\n <Button className=\"flex-grow-0\" title=\"Shutter Details\">\n <i className=\"fa fa-ellipsis-h\" />\n </Button>\n </OverlayTrigger>\n );\n}\n\nexport default function ShutterDefault(\n props: HardwareWidgetProps<ShutterSchema, HardwareWidgetOptions>\n) {\n const { hardware, options = {} } = props;\n const widgetIcon = (\n <TypeIcon\n name=\"Shutter\"\n icon=\"fam-hardware-shutter\"\n online={hardware.online}\n />\n );\n\n const widgetState = <ShutterState hardware={hardware} />;\n\n function getState() {\n if (!hardware.properties) {\n return 'UNKNOWN';\n }\n return hardware.properties.state;\n }\n\n function getAction(s: string) {\n if (s === 'OPEN') {\n return ['Close', 'close'];\n }\n if (s === 'CLOSED') {\n return ['Open', 'open'];\n }\n if (s === 'DISABLED' || s === 'STANDBY' || s === 'FAULT') {\n return ['Closed', ''];\n }\n if (s === 'MOVING') {\n return ['...', ''];\n }\n return ['Unknown', ''];\n }\n\n const state = getState();\n // console.log(state);\n const [label, action] = getAction(state);\n const variants: { [name: string]: string } = {\n OPEN: 'danger',\n CLOSED: 'success',\n MOVING: 'warning',\n DISABLED: 'secondary',\n STANDBY: 'danger',\n FAULT: 'fatal',\n UNKNOWN: 'warning',\n };\n const variant = variants[state] || 'danger';\n\n function onClick() {\n void hardware.requestChange({\n function: action,\n });\n }\n\n const widgetContent = (\n <ButtonGroup className=\"d-flex flex-nowrap\">\n <Button\n variant={variant}\n onClick={onClick}\n disabled={props.disabled || action === ''}\n >\n {label}\n </Button>\n\n {options.extended && <ShutterOverlay {...props} />}\n </ButtonGroup>\n );\n\n const headerMode = props.options.header || 'top';\n\n return (\n <HardwareTemplate\n hardware={hardware}\n widgetIcon={widgetIcon}\n widgetState={widgetState}\n widgetContent={widgetContent}\n headerMode={headerMode}\n />\n );\n}\n","import type { PropsWithChildren } from 'react';\nimport { useEffect, useRef, useState } from 'react';\n\ninterface Props {\n className?: string;\n}\n\nexport default function FullSizer(props: PropsWithChildren<Props>) {\n const [state, setState] = useState<Record<string, number>>({});\n const containerRef = useRef<HTMLDivElement>(null);\n useEffect(() => {\n if (containerRef.current) {\n const view = containerRef.current;\n setState({\n width: view.clientWidth,\n height: view.clientHeight,\n });\n }\n }, []);\n\n return (\n <div\n ref={containerRef}\n style={{ width: '100%', height: '100%' }}\n className={props.className}\n >\n {state.width > 0 && (\n <div\n className=\"full-sizer\"\n style={{\n width: `${state.width}px`,\n height: `${state.height}px`,\n overflow: 'scroll',\n }}\n >\n {props.children}\n </div>\n )}\n </div>\n );\n}\n"],"names":["OnlineStatus","props","activeMessage","inactiveMessage","message","jsx","TypeIcon","name","icon","jsxs","formatEng","scalar","powerPrefix","q","subtrhnd","pow10","prefix","ucfirst","str","toHoursMins","seconds","min","mins","hours","toEnergy","wavelength","round","value","digits","FrontendOverlay","hardware","reset","e","itlks","ring","getPropertyState","key","state","OverlayTrigger","Popover","Container","map","Row","Col","Badge","prop","Button","Frontend","options","onClick","ButtonGroup","Info","getValue","propertyName","result","segment","Fragment","HardwareTemplate","headerMode","getLabel","label","Form","error","HardwareState","style","MotorState","getState","s1","ShutterState","s","getVariant","NumericStep","forwardRef","ref","stepSizeRef","useRef","currentStep","setCurrentStep","useState","onStep","up","ref2","val","stepSize","onStepProp","step","overlay","incIcon","decIcon","swapIncDec","onKeyDown","horizontalArrows","largeArrows","rest","onKeyDown2","steps","classNames","InputGroup","NumericStep$1","HardwareNumericStep","valueRef","edited","setEdited","setError","useEffect","updateRef","newValue","onBlur","onChange","promise","HardwareInputNumber","normalizeNumber","_a","MotorOverlay","onMoveVelocityRequested","target","onMoveAccelerationRequested","MotorDefault","onAbortRequested","onMovePositionRequested","widgetIcon","widgetState","Multiposition","selectionRef","onMove","stop","opts","p","logger","debug","NoObject","widgetContent","DeviceState","Property","getUnit","unitName","unit","ShutterOverlay","ShutterDefault","getAction","action","variant","FullSizer","setState","containerRef","view"],"mappings":"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"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const t=require("react/jsx-runtime"),N=require("lodash"),r=require("react-bootstrap"),m=require("react"),P=require("classnames"),q=require("debug"),F=e=>e&&typeof e=="object"&&"default"in e?e:{default:e},O=F(P),T=F(q);function G(e){const{activeMessage:n="Online",inactiveMessage:a="Offline",message:s="This device is"}=e;return t.jsx("div",{className:`dot-indicator small bg-${e.online?"success":"danger"}`,title:`${s} ${e.online?n:a}`})}function j(e){const{name:n,icon:a}=e;return t.jsxs("div",{className:"icon",title:n,children:[t.jsx("i",{className:`fa ${a}`}),t.jsx(G,{...e})]})}function $(e){const n={24:"Y",21:"Z",18:"E",15:"P",12:"T",9:"G",6:"M",3:"k","-3":"m","-6":"µ","-9":"n","-12":"p","-15":"f","-18":"a","-21":"z","-24":"y"},a=Math.log(e)/Math.log(1e3),s=!Number.isInteger(a),o=3*Math.ceil(a-(s?1:0)),i=o===0?"":n[o];return{scalar:e*10**-o,prefix:i,multiplier:10**-o}}function _(e){return e.charAt(0).toUpperCase()+e.slice(1)}function E(e){if(e<60)return`${Math.round(e)} sec`;const n=Math.round(e/60),a=n%60,s=Math.floor(n/60);return s?`${s} hr ${a} min`:`${a} min`}function z(e){return e>0?(662607004e-42*299792458/(e*1e-10)/160218e-24*.001).toFixed(4):0}function L(e,n){return Number.parseFloat(e.toFixed(n))}const H=Object.freeze(Object.defineProperty({__proto__:null,formatEng:$,round:L,toEnergy:z,toHoursMins:E,ucfirst:_},Symbol.toStringTag,{value:"Module"}));function U(e){const{hardware:n}=e;function a(u){n.requestChange({function:"reset"})}const s={"Front End":"feitlk",Experimental:"expitlk",PSS:"pssitlk"},o={Current:`${n.properties.current.toFixed(1)} mA`,Mode:n.properties.mode,Refill:E(n.properties.refill),Message:t.jsx("pre",{children:n.properties.message})};function i(u){if(!(u in n.properties))return"UNKNOWN";const d=n.properties[u];return!d||typeof d!="string"?"UNKNOWN":d}return t.jsx(r.OverlayTrigger,{trigger:"click",rootClose:!0,overlay:t.jsxs(r.Popover,{id:"popid",children:[t.jsxs(r.Popover.Header,{children:[n.name," Details"]}),t.jsxs(r.Popover.Body,{children:[t.jsx("h6",{children:"Status"}),t.jsx("pre",{children:n.properties.status}),t.jsx("h6",{children:"Interlocks"}),t.jsx(r.Container,{children:N.map(s,(u,d)=>t.jsxs(r.Row,{children:[t.jsxs(r.Col,{children:[d,":"]}),t.jsx(r.Col,{children:t.jsx(r.Badge,{bg:i(u)==="ON"?"success":"danger",children:i(u)})})]},d))}),t.jsx("h6",{children:"Ring Status"}),t.jsx(r.Container,{children:N.map(o,(u,d)=>t.jsxs(r.Row,{children:[t.jsxs(r.Col,{children:[d,":"]}),t.jsx(r.Col,{children:u})]},d))}),t.jsx("div",{className:"d-grid gap-2",children:t.jsx(r.Button,{disabled:e.disabled,onClick:a,children:"Reset"})})]})]}),children:t.jsx(r.Button,{className:"flex-grow-0",title:"Shutter Details",children:t.jsx("i",{className:"fa fa-ellipsis-h"})})})}function W(e){const{hardware:n,options:a={}}=e;function s(o){n.requestChange({function:n.properties.frontend==="FE open"?"close":"open"})}return t.jsxs("div",{className:"hw-component",children:[t.jsxs("div",{className:"hw-head",children:[t.jsx(j,{name:"Frontend",icon:"fam-hardware-frontend",online:n.online}),t.jsx("div",{className:"name",children:n.name}),t.jsx(r.Badge,{bg:n.properties.state==="OPEN"||n.properties.state==="RUNNING"?"success":"danger",children:n.properties.state})]}),t.jsx("div",{className:"hw-content",children:t.jsxs(r.ButtonGroup,{className:"d-flex",children:[t.jsx(r.Button,{variant:n.properties.frontend==="FE open"?"danger":"success",onClick:s,disabled:e.disabled,children:n.properties.frontend==="FE open"?"Close":"Open"}),t.jsx(U,{...e})]})})]})}function K(e){const{hardware:n,options:a={}}=e;function s(){const o=a.property;if(o===void 0)return"property is not set";if(o===null)return"property is null";let i=n;for(const u of o.split("/"))if(i=i[u],i===void 0)return`property '${o}' not found`;return`${i}`}return t.jsx(t.Fragment,{children:s()})}function p(e){const{headerMode:n,hardware:a}=e;function s(){return a.alias?a.alias:a.name?a.name:a.id}const o=s();switch(n){case"front":return t.jsx("div",{className:"hw-component",children:t.jsxs("div",{className:"hw-single",children:[e.widgetIcon,t.jsx("div",{className:"name",children:o}),t.jsx("div",{className:"d-inline-block",children:e.widgetContent})]})});case"none":return t.jsx("div",{className:"hw-component",children:t.jsx("div",{className:"hw-single",children:e.widgetContent})});case"state":return e.widgetState;default:return t.jsxs("div",{className:"hw-component",children:[t.jsxs("div",{className:"hw-head",children:[e.widgetIcon,t.jsx("div",{className:"name",children:t.jsx(r.Form.Label,{htmlFor:a.id,children:o})}),e.widgetState,e.hardware.errors&&e.hardware.errors.length>0&&t.jsx(r.OverlayTrigger,{trigger:"click",placement:"bottom",rootClose:!0,overlay:t.jsxs(r.Popover,{id:e.hardware.id,style:{maxWidth:500},children:[t.jsx(r.Popover.Header,{children:"Device Errors"}),t.jsxs(r.Popover.Body,{children:["There were errors with properties on this device:",t.jsx("ul",{children:e.hardware.errors.map(i=>t.jsxs("li",{children:[i.property,":",t.jsxs("span",{className:"stack-trace",children:[i.traceback,t.jsx("br",{}),i.exception]})]}))})]})]}),children:t.jsx(r.Button,{variant:"danger",size:"sm",children:t.jsx("i",{className:"fa fa-exclamation-triangle"})})})]}),t.jsx("div",{className:"hw-content",children:e.widgetContent})]})}}function I(e){const n={display:"inline-block",minWidth:""};return e.minWidth&&(n.minWidth=`${e.minWidth}em`),t.jsx("div",{style:n,children:t.jsx(r.Badge,{bg:e.variant,children:e.state})})}function R(e){const{hardware:n}=e;function a(){if(!n.online)return"OFFLINE";let o="UNKNOWN";return e.hardware.properties.state&&([o]=e.hardware.properties.state),o}const s=a();return t.jsx(I,{state:s,minWidth:6,variant:s==="READY"?"success":"warning"})}function B(e){const{hardware:n}=e;function a(){if(!n.online)return"OFFLINE";const i=n.properties.state;return e.useReadyState&&(i==="OPEN"||i==="CLOSED")?"READY":i}const s=a();function o(){switch(s){case"READY":return"success";case"OPEN":return"success";case"CLOSED":return"danger";case"DISABLED":return"secondary";case"MOVING":case"STANDBY":case"OFFLINE":return"warning";case"FAULT":return"fatal";default:return"fatal"}}return t.jsx(I,{state:s,minWidth:6,variant:o()})}const Y=Object.freeze(Object.defineProperty({__proto__:null,HardwareState:I,MotorState:R,ShutterState:B},Symbol.toStringTag,{value:"Module"})),Z=m.forwardRef((e,n)=>{const a=m.useRef(null),[s,o]=m.useState(e.step),i=h=>{const y=n;if(a.current===null)return;let M=Number.parseFloat(y.current.value);const D=Number.parseFloat(a.current.value);M+=h?D:-D,y.current.value=`${M}`,e.onStep&&e.onStep({target:y.current})},{onStep:u,step:d,overlay:x,incIcon:g,decIcon:l,swapIncDec:c,onKeyDown:f,horizontalArrows:v,largeArrows:b,...w}=e,C=h=>{h.key==="ArrowUp"?(h.preventDefault(),i(!0)):h.key==="ArrowDown"?(h.preventDefault(),i(!1)):f&&f(h)};if(!e.step)return t.jsx(r.Form.Control,{ref:n,type:"number",step:"any",onKeyDown:C,...w});const V=N.map(e.steps||[e.step],h=>t.jsx("option",{value:h,children:h},h));return t.jsx("div",{className:O.default("numeric-step",{"numeric-step-large":b,"numeric-step-horizontal":v}),children:t.jsxs(r.InputGroup,{children:[t.jsx(r.Form.Control,{onKeyDown:C,ref:n,type:"number",step:"any",...w}),t.jsxs(t.Fragment,{children:[x,!x&&t.jsxs(r.InputGroup.Text,{className:"d-flex flex-column",children:[t.jsx(r.Form.Control,{ref:a,as:"select",className:"step-size",defaultValue:s,onChange:h=>o(Number.parseFloat(h.target.value)),children:V}),e.unit&&t.jsx("div",{children:e.unit}),!g&&!l&&t.jsxs(t.Fragment,{children:[t.jsx(r.Button,{className:"step step-up",disabled:e.disabled,onClick:h=>i(!0)}),t.jsx(r.Button,{className:"step step-down",disabled:e.disabled,onClick:h=>i(!1)})]})]}),l&&c&&t.jsx(r.Button,{disabled:e.disabled,onClick:h=>i(!1),children:t.jsx("i",{className:`fa fa-fw fa-${l}`})}),g&&t.jsx(r.Button,{disabled:e.disabled,onClick:h=>i(!0),children:t.jsx("i",{className:`fa fa-fw fa-${g}`})}),l&&!c&&t.jsx(r.Button,{disabled:e.disabled,onClick:h=>i(!1),children:t.jsx("i",{className:`fa fa-fw fa-${l}`})})]})]})})}),k=Z;function A(e){const n=m.useRef(null),[a,s]=m.useState(!1),[o,i]=m.useState(!1);m.useEffect(()=>{n.current&&(e.hardwareValue===null?n.current.value="":n.current.value=e.hardwareValue.toString(),s(!1))},[e.hardwareValue]);function u(c){let f=c;e.precision!==void 0&&(f=Number.parseFloat(f).toFixed(e.precision)),n!=null&&n.current&&(n.current.value=f)}function d(){a&&setTimeout(()=>{u(e.hardwareValue),s(!1)},3e3)}function x(c){e.hardwareValue!==null&&(s(!0),n!=null&&n.current&&(n.current.value=c.target.value),c.target.value===e.hardwareValue.toString()&&s(!1))}function g(c){s(!1),e.onMoveRequested(c.target.value)}function l(c){switch(c.key){case"Enter":{s(!1);const f=Number.parseFloat(c.target.value),v=e.onMoveRequested(f);v&&v.catch(()=>{i(!0),setTimeout(()=>{u(e.hardwareValue),i(!1)},2e3)})}c.preventDefault(),c.stopPropagation();break;case"Esc":case"Escape":a&&(i(!1),s(!1),u(e.hardwareValue)),c.target.blur(),c.preventDefault(),c.stopPropagation();break}}return t.jsx(k,{id:e.id,className:O.default({"form-control-edited":a,"form-control-error":o,"hw-moving":e.hardwareIsMoving}),type:e.readOnly?"text":"number",ref:n,precision:e.precision,onChange:x,onBlur:d,onStep:g,onKeyDown:l,disabled:e.hardwareIsDisabled||e.readOnly||!e.hardwareIsReady,step:e.step,steps:e.steps,incIcon:e.incIcon,decIcon:e.decIcon,swapIncDec:e.swapIncDec,horizontalArrows:e.horizontalArrows,largeArrows:e.largeArrows,overlay:e.hardwareIsMoving&&!e.hardwareIsDisabled?t.jsx(r.Button,{variant:"danger",onClick:e.onAbortRequested,children:t.jsx("i",{className:"fa fa-times"})}):null})}function S(e){const n=m.useRef(null),[a,s]=m.useState(!1),[o,i]=m.useState(!1);function u(l){return e.precision!==void 0?Number.parseFloat(l).toFixed(e.precision):l}m.useEffect(()=>{var l;n.current&&(n.current.value=u((l=e.hardwareValue)==null?void 0:l.toString()),s(!1))},[e.hardwareValue,e.precision]);function d(l){const c=u(l);n!=null&&n.current&&(n.current.value=c)}function x(l){switch(l.key){case"Enter":{s(!1);const c=Number.parseFloat(l.target.value),f=e.onMoveRequested(c);f&&f.catch(()=>{i(!0),setTimeout(()=>{d(e.hardwareValue),i(!1)},2e3)}),l.preventDefault(),l.stopPropagation();break}case"Esc":case"Escape":a&&(i(!1),s(!1),d(e.hardwareValue)),l.target.blur(),l.preventDefault(),l.stopPropagation();break}}function g(l){s(!0),l.target,n!=null&&n.current&&(n.current.value=l.target.value),l.target.value===e.hardwareValue.toString()&&s(!1)}return t.jsx(r.Form.Control,{className:O.default({"form-control-edited":a,"form-control-error":o,"hw-moving":e.hardwareIsMoving}),type:"number",ref:n,onChange:g,onKeyDown:x,disabled:e.readOnly||e.hardwareIsMoving||e.hardwareIsDisabled,step:e.step})}function J(e){function n(o){return e.hardware.requestChange({property:"velocity",value:o})}function a(o){return e.hardware.requestChange({property:"acceleration",value:o})}let s="UNKNOWN";return e.hardware.properties.state&&([s]=e.hardware.properties.state),t.jsx(r.OverlayTrigger,{trigger:"click",rootClose:!0,overlay:t.jsxs(r.Popover,{id:"popid",children:[t.jsxs(r.Popover.Header,{children:[e.hardware.name," details"]}),t.jsxs(r.Popover.Body,{children:[t.jsxs(r.Form.Group,{children:[t.jsx(r.Form.Label,{children:"Velocity"}),t.jsx(S,{hardwareValue:e.hardware.properties.velocity,onMoveRequested:n,hardwareIsDisabled:e.disabled,hardwareIsReady:s==="READY",hardwareIsMoving:s==="MOVING",readOnly:e.readOnly})]}),t.jsxs(r.Form.Group,{children:[t.jsx(r.Form.Label,{children:"Acceleration"}),t.jsx(S,{hardwareValue:e.hardware.properties.acceleration,onMoveRequested:a,hardwareIsDisabled:e.disabled,hardwareIsReady:s==="READY",hardwareIsMoving:s==="MOVING",readOnly:e.readOnly})]})]})]}),children:t.jsx(r.Button,{children:t.jsx("i",{className:"fa fa-ellipsis-h"})})})}function Q(e){const{hardware:n,options:a={}}=e;function s(){n.requestChange({function:"stop"})}function o(g){return n.requestChange({property:"position",value:g,function:"move"})}let i="UNKNOWN";e.hardware.properties.state&&([i]=e.hardware.properties.state);const u=t.jsx(j,{name:"Motor",icon:"fam-hardware-motor",online:n.online}),d=t.jsx(R,{hardware:n}),x=e.options?e.options.header:"top";return t.jsx(p,{hardware:n,widgetIcon:u,widgetState:d,widgetContent:t.jsxs(r.InputGroup,{children:[t.jsx(A,{id:n.id,hardwareValue:n.properties.position,hardwareIsDisabled:e.disabled,hardwareIsReady:i==="READY",hardwareIsMoving:i==="MOVING",onMoveRequested:o,onAbortRequested:s,precision:a.precision,readOnly:a.readOnly,step:a.step,steps:a.steps,incIcon:a.incicon,decIcon:a.decicon,swapIncDec:a.swapincdec,horizontalArrows:a.horizontalarrows,largeArrows:a.largearrows}),n.properties.unit&&t.jsx(r.InputGroup.Text,{children:n.properties.unit}),i!=="MOVING"&&a.extended&&t.jsx(J,{hardware:n,disabled:e.disabled,readOnly:a.readOnly}),i==="MOVING"&&!e.disabled&&!a.step&&t.jsx(r.Button,{variant:"danger",onClick:s,children:t.jsx("i",{className:"fa fa-times"})})]}),headerMode:x})}function X(e){const{hardware:n,options:a={}}=e,s=m.useRef(null);m.useEffect(()=>{if(!s.current){console.error("selectionRef ref is unset");return}s.current.value=n.properties.position},[n.properties.position]);function o(d){if(console.debug("change",d),!s||!s.current){console.error("selection ref is unset");return}n.requestChange({value:s.current.value,function:"move"})}function i(d){n.requestChange({function:"stop"})}const u=N.map(n.properties.positions,d=>t.jsx("option",{title:d.description,children:d.position},d.position));return t.jsxs("div",{className:"hw-component",children:[t.jsxs("div",{className:"hw-head",children:[t.jsx(j,{name:"Multiposition",icon:"fam-hardware-multiposition",online:n.online}),t.jsx("div",{className:"name",children:n.name}),t.jsx(r.Badge,{bg:n.properties.state==="READY"?"success":"warning",children:n.properties.state})]}),t.jsx("div",{className:"hw-content",children:t.jsxs(r.InputGroup,{children:[t.jsxs(r.Form.Control,{className:"custom-select",as:"select",ref:s,disabled:e.disabled,defaultValue:n.properties.position,children:[t.jsx("option",{disabled:!0,children:"unknown"}),u]}),n.properties.state!=="MOVING"&&t.jsx(r.Button,{onClick:o,disabled:e.disabled,children:"Move"}),n.properties.state==="MOVING"&&!e.disabled&&t.jsx(r.Button,{variant:"danger",onClick:i,children:t.jsx("i",{className:"fa fa-times"})})]})})]})}const ee=T.default("daiquiri.components.hardware.NoObject");function te(e){if(e.options.emptyifnone)return ee('Component id:"%s" name:"%s" not displayed cause setup with emptyifnone.',e.id,e.name),t.jsx(t.Fragment,{});const n=t.jsx(j,{name:"NoObject",icon:"fam-hardware-any",online:!1}),a=t.jsx(t.Fragment,{}),s=t.jsx(t.Fragment,{children:"Missing"}),o=e.options?e.options.header:"top",i={id:e.id,name:e.name??"",alias:null,online:!1,properties:{},type:""};return t.jsx(p,{hardware:i,widgetIcon:n,widgetState:a,widgetContent:s,headerMode:o})}function ne(e){const n=e.online?"READY":"OFFLINE";return t.jsx(r.Badge,{bg:n==="READY"?"success":"warning",children:n})}function re(e){const{hardware:n,options:a={}}=e,s=t.jsx(j,{name:"Optic",icon:"fa-cog",online:n.online}),o=t.jsx(ne,{...n});function i(){const l=a.property;if(l===void 0)return"property is not set";if(l===null)return"property is null";let c=n;for(const f of l.split("/"))if(c=c[f],c===void 0)return`property '${l}' not found`;return`${c}`}function u(){const l=a.unit;if(!l)return null;if(!l.includes("properties"))return l;let c=e;for(const f of l.split("/"))if(c=c[f],c===void 0)return null;return`${c}`}const d=u(),x=t.jsxs(r.InputGroup,{children:[t.jsx(r.Form.Control,{value:i(),readOnly:!0}),d&&t.jsx(r.InputGroup.Text,{children:d})]}),g=e.options.header||"top";return t.jsx(p,{hardware:n,widgetIcon:s,widgetState:o,widgetContent:x,headerMode:g})}function ae(e){const{hardware:n}=e,a=()=>{n.requestChange({function:"reset"})};return t.jsx(r.OverlayTrigger,{trigger:"click",rootClose:!0,overlay:t.jsxs(r.Popover,{id:"popid",children:[t.jsxs(r.Popover.Header,{children:[n.name," Details"]}),t.jsxs(r.Popover.Body,{children:[t.jsx("h6",{children:"Status"}),t.jsx("pre",{children:n.properties.status}),t.jsx("div",{className:"d-grid gap-2",children:t.jsx(r.Button,{onClick:a,disabled:e.disabled,children:"Reset"})})]})]}),children:t.jsx(r.Button,{className:"flex-grow-0",title:"Shutter Details",children:t.jsx("i",{className:"fa fa-ellipsis-h"})})})}function se(e){const{hardware:n,options:a={}}=e,s=t.jsx(j,{name:"Shutter",icon:"fam-hardware-shutter",online:n.online}),o=t.jsx(B,{hardware:n});function i(){return n.properties?n.properties.state:"UNKNOWN"}function u(w){return w==="OPEN"?["Close","close"]:w==="CLOSED"?["Open","open"]:w==="DISABLED"||w==="STANDBY"||w==="FAULT"?["Closed",""]:w==="MOVING"?["...",""]:["Unknown",""]}const d=i(),[x,g]=u(d),c={OPEN:"danger",CLOSED:"success",MOVING:"warning",DISABLED:"secondary",STANDBY:"danger",FAULT:"fatal",UNKNOWN:"warning"}[d]||"danger";function f(){n.requestChange({function:g})}const v=t.jsxs(r.ButtonGroup,{className:"d-flex flex-nowrap",children:[t.jsx(r.Button,{variant:c,onClick:f,disabled:e.disabled||g==="",children:x}),a.extended&&t.jsx(ae,{...e})]}),b=e.options.header||"top";return t.jsx(p,{hardware:n,widgetIcon:s,widgetState:o,widgetContent:v,headerMode:b})}function ie(e){const[n,a]=m.useState({}),s=m.useRef(null);return m.useEffect(()=>{if(s.current){const o=s.current;a({width:o.clientWidth,height:o.clientHeight})}},[]),t.jsx("div",{ref:s,style:{width:"100%",height:"100%"},className:e.className,children:n.width>0&&t.jsx("div",{className:"full-sizer",style:{width:`${n.width}px`,height:`${n.height}px`,overflow:"scroll"},children:e.children})})}const oe=Object.freeze(Object.defineProperty({__proto__:null},Symbol.toStringTag,{value:"Module"})),le=Object.freeze(Object.defineProperty({__proto__:null},Symbol.toStringTag,{value:"Module"}));exports.Formatting=H;exports.Frontend=W;exports.FullSizer=ie;exports.HardwareInputNumber=S;exports.HardwareNumericStep=A;exports.HardwareSchema=le;exports.HardwareState=Y;exports.HardwareTemplate=p;exports.HardwareTypes=oe;exports.Info=K;exports.MotorDefault=Q;exports.Multiposition=X;exports.NoObject=te;exports.NumericStep=k;exports.Property=re;exports.ShutterDefault=se;exports.TypeIcon=j;
|
|
2
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../src/hardware/TypeIcon.tsx","../src/utils/formatting.ts","../src/hardware/Frontend.tsx","../src/hardware/Info.tsx","../src/hardware/utils/HardwareTemplate.tsx","../src/hardware/utils/State.tsx","../src/components/NumericStep.tsx","../src/hardware/utils/HardwareNumericStep.tsx","../src/hardware/utils/HardwareInputNumber.tsx","../src/hardware/MotorDefault.tsx","../src/hardware/Multiposition.tsx","../src/hardware/NoObject.tsx","../src/hardware/Property.tsx","../src/hardware/ShutterDefault.tsx","../src/components/FullSizer.tsx"],"sourcesContent":["interface Props {\n online: boolean;\n activeMessage?: string;\n inactiveMessage?: string;\n message?: string;\n icon: string;\n name: string;\n}\nexport function OnlineStatus(props: Props) {\n const {\n activeMessage = 'Online',\n inactiveMessage = 'Offline',\n message = 'This device is',\n } = props;\n\n return (\n <div\n className={`dot-indicator small bg-${\n props.online ? 'success' : 'danger'\n }`}\n title={`${message} ${props.online ? activeMessage : inactiveMessage}`}\n />\n );\n}\n\nexport default function TypeIcon(props: Props) {\n const { name, icon } = props;\n return (\n <div className=\"icon\" title={name}>\n <i className={`fa ${icon}`} />\n <OnlineStatus {...props} />\n </div>\n );\n}\n","// https://github.com/gentooboontoo/js-quantities/issues/30\nexport function formatEng(scalar: number) {\n const powerPrefix: Record<number, string> = {\n 24: 'Y',\n 21: 'Z',\n 18: 'E',\n 15: 'P',\n 12: 'T',\n 9: 'G',\n 6: 'M',\n 3: 'k',\n '-3': 'm',\n '-6': '\\u00B5',\n '-9': 'n',\n '-12': 'p',\n '-15': 'f',\n '-18': 'a',\n '-21': 'z',\n '-24': 'y',\n };\n\n const q = Math.log(scalar) / Math.log(1e3);\n // so that for example '3 km' does not get converted to '3000 m'\n const subtrhnd = !Number.isInteger(q);\n\n const pow10 = 3 * Math.ceil(q - (subtrhnd ? 1 : 0));\n const prefix = pow10 === 0 ? '' : powerPrefix[pow10];\n\n return {\n scalar: scalar * 10 ** -pow10,\n prefix,\n multiplier: 10 ** -pow10,\n };\n}\n\n/**\n * Returns the argument as capitalized string.\n */\nexport function ucfirst(str: string) {\n return str.charAt(0).toUpperCase() + str.slice(1);\n}\n\nexport function toHoursMins(seconds: number) {\n if (seconds < 60) return `${Math.round(seconds)} sec`;\n\n const min = Math.round(seconds / 60);\n\n const mins = min % 60;\n const hours = Math.floor(min / 60);\n\n return hours ? `${hours} hr ${mins} min` : `${mins} min`;\n}\n\nexport function toEnergy(wavelength: number) {\n return wavelength > 0\n ? (\n ((6.626_070_04e-34 * 2.997_924_58e8) /\n (wavelength * 1e-10) /\n 1.602_18e-19) *\n 1e-3\n ).toFixed(4)\n : 0;\n}\n\nexport function round(value: number, digits: number) {\n return Number.parseFloat(value.toFixed(digits));\n}\n","import type { MouseEvent } from 'react';\nimport { map } from 'lodash';\nimport {\n Badge,\n Button,\n ButtonGroup,\n Container,\n Row,\n Col,\n OverlayTrigger,\n Popover,\n} from 'react-bootstrap';\n\nimport TypeIcon from './TypeIcon';\nimport { toHoursMins } from '../utils/formatting';\nimport type { HardwareWidgetProps } from './utils/types';\nimport type { FrontendSchema } from './utils/schema';\n\nfunction FrontendOverlay(props: HardwareWidgetProps<FrontendSchema>) {\n const { hardware } = props;\n function reset(e: any) {\n void hardware.requestChange({\n function: 'reset',\n });\n }\n\n type StateEnum = 'feitlk' | 'expitlk' | 'pssitlk';\n\n const itlks: { [name: string]: StateEnum } = {\n 'Front End': 'feitlk',\n Experimental: 'expitlk',\n PSS: 'pssitlk',\n };\n\n const ring = {\n Current: `${hardware.properties.current.toFixed(1)} mA`,\n Mode: hardware.properties.mode,\n Refill: toHoursMins(hardware.properties.refill),\n Message: <pre>{hardware.properties.message}</pre>,\n };\n\n function getPropertyState(key: StateEnum): string {\n if (!(key in hardware.properties)) {\n return 'UNKNOWN';\n }\n const state: any = hardware.properties[key];\n if (!state || typeof state !== 'string') {\n return 'UNKNOWN';\n }\n return state;\n }\n\n return (\n <OverlayTrigger\n trigger=\"click\"\n rootClose\n overlay={\n <Popover id=\"popid\">\n <Popover.Header>{hardware.name} Details</Popover.Header>\n <Popover.Body>\n <h6>Status</h6>\n <pre>{hardware.properties.status}</pre>\n <h6>Interlocks</h6>\n <Container>\n {map(itlks, (key, name) => (\n <Row key={name}>\n <Col>{name}:</Col>\n <Col>\n <Badge\n bg={getPropertyState(key) === 'ON' ? 'success' : 'danger'}\n >\n {getPropertyState(key)}\n </Badge>\n </Col>\n </Row>\n ))}\n </Container>\n\n <h6>Ring Status</h6>\n <Container>\n {map(ring, (prop, name) => (\n <Row key={name}>\n <Col>{name}:</Col>\n <Col>{prop}</Col>\n </Row>\n ))}\n </Container>\n\n <div className=\"d-grid gap-2\">\n <Button disabled={props.disabled} onClick={reset}>\n Reset\n </Button>\n </div>\n </Popover.Body>\n </Popover>\n }\n >\n <Button className=\"flex-grow-0\" title=\"Shutter Details\">\n <i className=\"fa fa-ellipsis-h\" />\n </Button>\n </OverlayTrigger>\n );\n}\n\nfunction Frontend(props: HardwareWidgetProps<FrontendSchema>) {\n const { hardware, options = {} } = props;\n function onClick(e: MouseEvent) {\n void hardware.requestChange({\n function: hardware.properties.frontend === 'FE open' ? 'close' : 'open',\n });\n }\n\n return (\n <div className=\"hw-component\">\n <div className=\"hw-head\">\n <TypeIcon\n name=\"Frontend\"\n icon=\"fam-hardware-frontend\"\n online={hardware.online}\n />\n <div className=\"name\">{hardware.name}</div>\n <Badge\n bg={\n hardware.properties.state === 'OPEN' ||\n hardware.properties.state === 'RUNNING'\n ? 'success'\n : 'danger'\n }\n >\n {hardware.properties.state}\n </Badge>\n </div>\n <div className=\"hw-content\">\n <ButtonGroup className=\"d-flex\">\n <Button\n variant={\n hardware.properties.frontend === 'FE open' ? 'danger' : 'success'\n }\n onClick={onClick}\n disabled={props.disabled}\n >\n {hardware.properties.frontend === 'FE open' ? 'Close' : 'Open'}\n </Button>\n <FrontendOverlay {...props} />\n </ButtonGroup>\n </div>\n </div>\n );\n}\n\nexport default Frontend;\n","import type {\n Hardware,\n HardwareWidgetProps,\n HardwareWidgetOptions,\n} from './utils/types';\n\nexport interface InfoOptions extends HardwareWidgetOptions {\n /** The property */\n property?: string;\n /** Unit for the property */\n unit?: string;\n}\n\nexport default function Info(\n props: HardwareWidgetProps<Hardware, InfoOptions>\n) {\n const { hardware, options = {} } = props;\n function getValue() {\n const propertyName = options.property;\n if (propertyName === undefined) {\n return `property is not set`;\n }\n if (propertyName === null) {\n return `property is null`;\n }\n let result: any = hardware;\n for (const segment of propertyName.split('/')) {\n result = result[segment];\n if (result === undefined) {\n return `property '${propertyName}' not found`;\n }\n }\n return `${result}`;\n }\n\n return <>{getValue()}</>;\n}\n","import type { ReactElement } from 'react';\nimport { Form, OverlayTrigger, Popover, Button } from 'react-bootstrap';\nimport type { Hardware } from './types';\n\ninterface Props {\n hardware: Hardware;\n headerMode?: string;\n widgetIcon: ReactElement;\n widgetState: ReactElement;\n widgetContent: ReactElement;\n}\n\n/**\n * Normalized way to compose hardware component in order to provide the same\n * kind of layout\n */\nexport default function HardwareTemplate(props: Props) {\n const { headerMode, hardware } = props;\n\n function getLabel() {\n if (hardware.alias) {\n return hardware.alias;\n }\n if (hardware.name) {\n return hardware.name;\n }\n return hardware.id;\n }\n\n const label = getLabel();\n\n switch (headerMode) {\n case 'front':\n return (\n <div className=\"hw-component\">\n <div className=\"hw-single\">\n {props.widgetIcon}\n <div className=\"name\">{label}</div>\n <div className=\"d-inline-block\">{props.widgetContent}</div>\n </div>\n </div>\n );\n case 'none':\n return (\n <div className=\"hw-component\">\n <div className=\"hw-single\">{props.widgetContent}</div>\n </div>\n );\n case 'state':\n return props.widgetState;\n // case 'top':\n default:\n return (\n <div className=\"hw-component\">\n <div className=\"hw-head\">\n {props.widgetIcon}\n <div className=\"name\">\n <Form.Label htmlFor={hardware.id}>{label}</Form.Label>\n </div>\n {props.widgetState}\n {props.hardware.errors && props.hardware.errors.length > 0 && (\n <OverlayTrigger\n trigger=\"click\"\n placement=\"bottom\"\n rootClose\n overlay={\n <Popover id={props.hardware.id} style={{ maxWidth: 500 }}>\n <Popover.Header>Device Errors</Popover.Header>\n <Popover.Body>\n There were errors with properties on this device:\n <ul>\n {props.hardware.errors.map((error) => (\n <li>\n {error.property}:\n <span className=\"stack-trace\">\n {error.traceback}\n <br />\n {error.exception}\n </span>\n </li>\n ))}\n </ul>\n </Popover.Body>\n </Popover>\n }\n >\n <Button variant=\"danger\" size=\"sm\">\n <i className=\"fa fa-exclamation-triangle\" />\n </Button>\n </OverlayTrigger>\n )}\n </div>\n <div className=\"hw-content\">{props.widgetContent}</div>\n </div>\n );\n }\n}\n","import { Badge } from 'react-bootstrap';\nimport type * as Schema from './schema';\n\n/**\n * Normalize the way to display an hardware state.\n *\n * If `minWidth` is pecified (in `em`) it ensure the widget width will stay the\n * same when the state change\n */\nexport function HardwareState(props: {\n state: string;\n variant: string;\n minWidth?: number;\n}) {\n const style = {\n display: 'inline-block',\n minWidth: '',\n };\n\n if (props.minWidth) style.minWidth = `${props.minWidth}em`;\n return (\n <div style={style}>\n <Badge bg={props.variant}>{props.state}</Badge>\n </div>\n );\n}\n\nexport function MotorState(props: { hardware: Schema.MotorSchema }) {\n const { hardware } = props;\n function getState() {\n if (!hardware.online) {\n return 'OFFLINE';\n }\n let s1 = 'UNKNOWN';\n if (props.hardware.properties.state) {\n [s1] = props.hardware.properties.state;\n }\n return s1;\n }\n const state = getState();\n return (\n <HardwareState\n state={state}\n minWidth={6}\n variant={state === 'READY' ? 'success' : 'warning'}\n />\n );\n}\n\nexport function ShutterState(props: {\n hardware: Schema.ShutterSchema;\n useReadyState?: boolean;\n}) {\n const { hardware } = props;\n function getState() {\n if (!hardware.online) {\n return 'OFFLINE';\n }\n const s = hardware.properties.state;\n if (props.useReadyState && (s === 'OPEN' || s === 'CLOSED')) {\n return 'READY';\n }\n return s;\n }\n\n const state = getState();\n\n function getVariant() {\n switch (state) {\n case 'READY':\n return 'success';\n case 'OPEN':\n return 'success';\n case 'CLOSED':\n return 'danger';\n case 'DISABLED':\n return 'secondary';\n case 'MOVING':\n case 'STANDBY':\n case 'OFFLINE':\n return 'warning';\n case 'FAULT':\n return 'fatal';\n default:\n return 'fatal';\n }\n }\n\n return <HardwareState state={state} minWidth={6} variant={getVariant()} />;\n}\n","import type {\n KeyboardEvent,\n ChangeEvent,\n MutableRefObject,\n ReactChild,\n} from 'react';\nimport { forwardRef, useRef, useState } from 'react';\nimport { map } from 'lodash';\n\nimport { Form, Button, InputGroup } from 'react-bootstrap';\nimport classNames from 'classnames';\n\ninterface Props {\n step?: number;\n steps?: number[];\n disabled: boolean;\n id?: string;\n unit?: string;\n overlay?: ReactChild | null;\n incIcon?: string;\n decIcon?: string;\n swapIncDec?: boolean;\n className?: string;\n type?: 'number' | 'text';\n precision?: number;\n horizontalArrows?: boolean;\n largeArrows?: boolean;\n onBlur: () => void;\n onChange: (e: ChangeEvent<HTMLInputElement>) => void;\n onStep: (params: { target: HTMLInputElement }) => void;\n onKeyDown?: (e: KeyboardEvent<HTMLInputElement>) => void;\n}\n\nconst NumericStep = forwardRef<HTMLInputElement, Props>((props, ref) => {\n const stepSizeRef = useRef<HTMLSelectElement>(null);\n const [currentStep, setCurrentStep] = useState(props.step);\n const onStep = (up: boolean) => {\n // FIXME: Would be good to remove that cast\n const ref2 = ref as MutableRefObject<HTMLInputElement>;\n if (stepSizeRef.current === null) {\n return;\n }\n let val = Number.parseFloat(ref2.current.value);\n const stepSize = Number.parseFloat(stepSizeRef.current.value);\n val += up ? stepSize : -stepSize;\n ref2.current.value = `${val}`;\n\n if (props.onStep) {\n props.onStep({\n target: ref2.current,\n });\n }\n };\n\n const {\n onStep: onStepProp,\n step,\n overlay,\n incIcon,\n decIcon,\n swapIncDec,\n onKeyDown,\n horizontalArrows,\n largeArrows,\n ...rest\n } = props;\n\n const onKeyDown2 = (e: KeyboardEvent<HTMLInputElement>) => {\n if (e.key === 'ArrowUp') {\n e.preventDefault();\n onStep(true);\n } else if (e.key === 'ArrowDown') {\n e.preventDefault();\n onStep(false);\n } else if (onKeyDown) {\n onKeyDown(e);\n }\n };\n\n if (!props.step) {\n return (\n <Form.Control\n ref={ref}\n type=\"number\"\n step=\"any\"\n onKeyDown={onKeyDown2}\n {...rest}\n />\n );\n }\n\n const steps = map(props.steps || [props.step], (s) => (\n <option value={s} key={s}>\n {s}\n </option>\n ));\n\n return (\n <div\n className={classNames('numeric-step', {\n 'numeric-step-large': largeArrows,\n 'numeric-step-horizontal': horizontalArrows,\n })}\n >\n <InputGroup>\n <Form.Control\n onKeyDown={onKeyDown2}\n ref={ref}\n type=\"number\"\n step=\"any\"\n {...rest}\n />\n <>\n {overlay}\n {!overlay && (\n <InputGroup.Text className=\"d-flex flex-column\">\n <Form.Control\n ref={stepSizeRef}\n as=\"select\"\n className=\"step-size\"\n defaultValue={currentStep}\n onChange={(e) =>\n setCurrentStep(Number.parseFloat(e.target.value))\n }\n >\n {steps}\n </Form.Control>\n {props.unit && <div>{props.unit}</div>}\n {!incIcon && !decIcon && (\n <>\n <Button\n className=\"step step-up\"\n disabled={props.disabled}\n onClick={(e) => onStep(true)}\n />\n <Button\n className=\"step step-down\"\n disabled={props.disabled}\n onClick={(e) => onStep(false)}\n />\n </>\n )}\n </InputGroup.Text>\n )}\n {decIcon && swapIncDec && (\n <Button disabled={props.disabled} onClick={(e) => onStep(false)}>\n <i className={`fa fa-fw fa-${decIcon}`} />\n </Button>\n )}\n {incIcon && (\n <Button disabled={props.disabled} onClick={(e) => onStep(true)}>\n <i className={`fa fa-fw fa-${incIcon}`} />\n </Button>\n )}\n {decIcon && !swapIncDec && (\n <Button disabled={props.disabled} onClick={(e) => onStep(false)}>\n <i className={`fa fa-fw fa-${decIcon}`} />\n </Button>\n )}\n </>\n </InputGroup>\n </div>\n );\n});\n\nexport default NumericStep;\n","import { useRef, useState, useEffect } from 'react';\nimport type { KeyboardEvent, ChangeEvent } from 'react';\nimport classNames from 'classnames';\nimport { Button, Form, OverlayTrigger, InputGroup } from 'react-bootstrap';\nimport NumericStep from '../../components/NumericStep';\n\n/**\n * NumericStep handled hardware properties.\n *\n * Input related to hardware have specificities because the hardware state can\n * change during the user interaction.\n */\nexport default function HardwareNumericStep(props: {\n hardwareValue: number | null;\n hardwareIsDisabled: boolean;\n hardwareIsMoving: boolean;\n hardwareIsReady: boolean;\n onMoveRequested: (value: number) => Promise<void> | null;\n onAbortRequested: () => void;\n /** Default step size to use for up / down arrows */\n step?: number;\n /** Array of selectable step sizes */\n steps?: number[];\n /** Number of decimals to show */\n precision?: number;\n /** Whether this widget is read only */\n readOnly?: boolean;\n /** Specify a fontawesome to inc the value */\n incIcon?: string;\n /** Specify a fontawesome to dec the value */\n decIcon?: string;\n /** If true inc and dec icon are swapped */\n swapIncDec?: boolean;\n /** Show the step arrows horizontally instead of vertically */\n horizontalArrows?: boolean;\n /** Show large step arrows */\n largeArrows?: boolean;\n /** Identifier passed to the input element */\n id?: string;\n}) {\n const valueRef = useRef<HTMLInputElement>(null);\n const [edited, setEdited] = useState(false);\n const [error, setError] = useState(false);\n useEffect(() => {\n if (valueRef.current) {\n if (props.hardwareValue === null) {\n valueRef.current.value = '';\n } else {\n valueRef.current.value = props.hardwareValue.toString();\n }\n setEdited(false);\n }\n }, [props.hardwareValue]);\n\n function updateRef(value: any) {\n let newValue = value;\n if (props.precision !== undefined) {\n newValue = Number.parseFloat(newValue).toFixed(props.precision);\n }\n if (valueRef?.current) {\n valueRef.current.value = newValue;\n }\n }\n\n function onBlur() {\n if (edited) {\n setTimeout(() => {\n updateRef(props.hardwareValue);\n setEdited(false);\n }, 3000);\n }\n }\n\n function onChange(e: ChangeEvent<HTMLInputElement>) {\n if (props.hardwareValue === null) {\n return;\n }\n setEdited(true);\n if (valueRef?.current) {\n valueRef.current.value = e.target.value;\n }\n if (e.target.value === props.hardwareValue.toString()) {\n setEdited(false);\n }\n }\n\n function onStep(e: any) {\n setEdited(false);\n void props.onMoveRequested(e.target.value);\n }\n\n function onKeyDown(e: KeyboardEvent<HTMLInputElement>) {\n switch (e.key) {\n case 'Enter':\n {\n setEdited(false);\n // @ts-expect-error\n const value: number = Number.parseFloat(e.target.value);\n const promise = props.onMoveRequested(value);\n if (promise) {\n promise.catch(() => {\n setError(true);\n setTimeout(() => {\n updateRef(props.hardwareValue);\n setError(false);\n }, 2000);\n });\n }\n }\n e.preventDefault();\n e.stopPropagation();\n break;\n case 'Esc': // IE/Edge specific value\n case 'Escape':\n if (edited) {\n setError(false);\n setEdited(false);\n updateRef(props.hardwareValue);\n }\n // @ts-expect-error\n e.target.blur();\n e.preventDefault();\n e.stopPropagation();\n break;\n }\n }\n\n return (\n <NumericStep\n id={props.id}\n className={classNames({\n 'form-control-edited': edited,\n 'form-control-error': error,\n 'hw-moving': props.hardwareIsMoving,\n })}\n type={props.readOnly ? 'text' : 'number'}\n ref={valueRef}\n precision={props.precision}\n onChange={onChange}\n onBlur={onBlur}\n onStep={onStep}\n onKeyDown={onKeyDown}\n disabled={\n props.hardwareIsDisabled || props.readOnly || !props.hardwareIsReady\n }\n step={props.step}\n steps={props.steps}\n incIcon={props.incIcon}\n decIcon={props.decIcon}\n swapIncDec={props.swapIncDec}\n horizontalArrows={props.horizontalArrows}\n largeArrows={props.largeArrows}\n overlay={\n props.hardwareIsMoving && !props.hardwareIsDisabled ? (\n <Button variant=\"danger\" onClick={props.onAbortRequested}>\n <i className=\"fa fa-times\" />\n </Button>\n ) : null\n }\n />\n );\n}\n","import { useEffect, useRef, useState } from 'react';\nimport type { KeyboardEvent, ChangeEvent } from 'react';\nimport { Form } from 'react-bootstrap';\nimport classNames from 'classnames';\n\n/**\n * Input number synchronized with a hardware.\n *\n * Input related to hardware have specificities because the hardware state can\n * change during the user interaction.\n *\n * TODO: Maybe normalize `precision` and `step` together\n */\nexport default function HardwareInputNumber(props: {\n hardwareValue: number;\n hardwareIsDisabled: boolean;\n hardwareIsMoving?: boolean;\n hardwareIsReady?: boolean;\n onMoveRequested: (value: number) => Promise<void> | null;\n onAbortRequested?: () => void;\n readOnly?: boolean;\n precision?: number;\n step?: number;\n}) {\n const valueRef = useRef<HTMLInputElement>(null);\n const [edited, setEdited] = useState(false);\n const [error, setError] = useState(false);\n\n function normalizeNumber(value: string): string {\n if (props.precision !== undefined) {\n return Number.parseFloat(value).toFixed(props.precision);\n }\n return value;\n }\n\n useEffect(() => {\n if (valueRef.current) {\n valueRef.current.value = normalizeNumber(props.hardwareValue?.toString());\n setEdited(false);\n }\n }, [props.hardwareValue, props.precision]);\n\n function updateRef(value: any) {\n const newValue = normalizeNumber(value);\n if (valueRef?.current) {\n valueRef.current.value = newValue;\n }\n }\n\n function onKeyDown(e: KeyboardEvent<HTMLInputElement>) {\n switch (e.key) {\n case 'Enter': {\n setEdited(false);\n // @ts-expect-error\n const value: number = Number.parseFloat(e.target.value);\n const promise = props.onMoveRequested(value);\n if (promise) {\n promise.catch(() => {\n setError(true);\n setTimeout(() => {\n updateRef(props.hardwareValue);\n setError(false);\n }, 2000);\n });\n }\n e.preventDefault();\n e.stopPropagation();\n break;\n }\n case 'Esc': // IE/Edge specific value\n case 'Escape':\n if (edited) {\n setError(false);\n setEdited(false);\n updateRef(props.hardwareValue);\n }\n // @ts-expect-error\n e.target.blur();\n e.preventDefault();\n e.stopPropagation();\n break;\n }\n }\n\n function onChange(e: ChangeEvent<HTMLInputElement>) {\n setEdited(true);\n const { name } = e.target;\n if (valueRef?.current) {\n valueRef.current.value = e.target.value;\n }\n if (e.target.value === props.hardwareValue.toString()) {\n setEdited(false);\n }\n }\n\n return (\n <Form.Control\n className={classNames({\n 'form-control-edited': edited,\n 'form-control-error': error,\n 'hw-moving': props.hardwareIsMoving,\n })}\n type=\"number\"\n ref={valueRef}\n onChange={onChange}\n onKeyDown={onKeyDown}\n disabled={\n props.readOnly || props.hardwareIsMoving || props.hardwareIsDisabled\n }\n step={props.step}\n />\n );\n}\n","import {\n Button,\n Form,\n OverlayTrigger,\n InputGroup,\n Popover,\n} from 'react-bootstrap';\n\nimport TypeIcon from './TypeIcon';\nimport HardwareTemplate from './utils/HardwareTemplate';\nimport { MotorState } from './utils/State';\nimport HardwareNumericStep from './utils/HardwareNumericStep';\nimport HardwareInputNumber from './utils/HardwareInputNumber';\nimport type { MotorSchema } from './utils/schema';\nimport type {\n HardwareWidgetProps,\n HardwareWidgetOptions,\n EditableHardware,\n} from './utils/types';\n\ninterface MotorOverlayProps {\n hardware: EditableHardware<MotorSchema>;\n disabled: boolean;\n readOnly?: boolean;\n}\n\nfunction MotorOverlay(props: MotorOverlayProps) {\n function onMoveVelocityRequested(target: number) {\n return props.hardware.requestChange({\n property: 'velocity',\n value: target,\n });\n }\n\n function onMoveAccelerationRequested(target: number) {\n return props.hardware.requestChange({\n property: 'acceleration',\n value: target,\n });\n }\n\n let s1 = 'UNKNOWN';\n if (props.hardware.properties.state) {\n [s1] = props.hardware.properties.state;\n }\n\n return (\n <OverlayTrigger\n trigger=\"click\"\n rootClose\n overlay={\n <Popover id=\"popid\">\n <Popover.Header>{props.hardware.name} details</Popover.Header>\n <Popover.Body>\n <Form.Group>\n <Form.Label>Velocity</Form.Label>\n <HardwareInputNumber\n hardwareValue={props.hardware.properties.velocity}\n onMoveRequested={onMoveVelocityRequested}\n hardwareIsDisabled={props.disabled}\n hardwareIsReady={s1 === 'READY'}\n hardwareIsMoving={s1 === 'MOVING'}\n readOnly={props.readOnly}\n />\n </Form.Group>\n <Form.Group>\n <Form.Label>Acceleration</Form.Label>\n <HardwareInputNumber\n hardwareValue={props.hardware.properties.acceleration}\n onMoveRequested={onMoveAccelerationRequested}\n hardwareIsDisabled={props.disabled}\n hardwareIsReady={s1 === 'READY'}\n hardwareIsMoving={s1 === 'MOVING'}\n readOnly={props.readOnly}\n />\n </Form.Group>\n </Popover.Body>\n </Popover>\n }\n >\n <Button>\n <i className=\"fa fa-ellipsis-h\" />\n </Button>\n </OverlayTrigger>\n );\n}\n\nexport interface MotorDefaultOptions extends HardwareWidgetOptions {\n /** Default step size to use for up / down arrows */\n step?: number;\n /** Array of selectable step sizes */\n steps?: number[];\n /** Number of decimals to show */\n precision?: number;\n /** Whether to show popup to configure extended parameters */\n extended?: boolean;\n /** Whether this widget is read only */\n readOnly?: boolean;\n /** Kind of header displayed */\n header?: string;\n /** Specify a fontawesome to inc the value */\n incicon?: string;\n /** Specify a fontawesome to dec the value */\n decicon?: string;\n /** If true inc and dec icon are swapped */\n swapincdec?: boolean;\n /** Show the step arrows horizontally instead of vertically */\n horizontalarrows?: boolean;\n /** Show large step arrows */\n largearrows?: boolean;\n}\n\n/**\n * The default motor widget\n */\nexport default function MotorDefault(\n props: HardwareWidgetProps<MotorSchema, MotorDefaultOptions>\n) {\n const { hardware, options = {} } = props;\n function onAbortRequested() {\n void hardware.requestChange({\n function: 'stop',\n });\n }\n\n function onMovePositionRequested(target: number) {\n return hardware.requestChange({\n property: 'position',\n value: target,\n function: 'move',\n });\n }\n\n let s1 = 'UNKNOWN';\n if (props.hardware.properties.state) {\n [s1] = props.hardware.properties.state;\n }\n\n const widgetIcon = (\n <TypeIcon name=\"Motor\" icon=\"fam-hardware-motor\" online={hardware.online} />\n );\n\n const widgetState = <MotorState hardware={hardware} />;\n\n const headerMode = props.options ? props.options.header : 'top';\n\n return (\n <HardwareTemplate\n hardware={hardware}\n widgetIcon={widgetIcon}\n widgetState={widgetState}\n widgetContent={\n <InputGroup>\n <HardwareNumericStep\n id={hardware.id}\n hardwareValue={hardware.properties.position}\n hardwareIsDisabled={props.disabled}\n hardwareIsReady={s1 === 'READY'}\n hardwareIsMoving={s1 === 'MOVING'}\n onMoveRequested={onMovePositionRequested}\n onAbortRequested={onAbortRequested}\n precision={options.precision}\n readOnly={options.readOnly}\n step={options.step}\n steps={options.steps}\n incIcon={options.incicon}\n decIcon={options.decicon}\n swapIncDec={options.swapincdec}\n horizontalArrows={options.horizontalarrows}\n largeArrows={options.largearrows}\n />\n {hardware.properties.unit && (\n <InputGroup.Text>{hardware.properties.unit}</InputGroup.Text>\n )}\n\n {s1 !== 'MOVING' && options.extended && (\n <MotorOverlay\n hardware={hardware}\n disabled={props.disabled}\n readOnly={options.readOnly}\n />\n )}\n\n {s1 === 'MOVING' && !props.disabled && !options.step && (\n <Button variant=\"danger\" onClick={onAbortRequested}>\n <i className=\"fa fa-times\" />\n </Button>\n )}\n </InputGroup>\n }\n headerMode={headerMode}\n />\n );\n}\n","import { useRef, useEffect } from 'react';\nimport { map } from 'lodash';\nimport { Badge, Button, InputGroup, Form } from 'react-bootstrap';\n\nimport TypeIcon from './TypeIcon';\nimport type { MultipositionSchema } from './utils/schema';\nimport type { HardwareWidgetProps } from './utils/types';\n\nexport default function Multiposition(\n props: HardwareWidgetProps<MultipositionSchema>\n) {\n const { hardware, options = {} } = props;\n const selectionRef = useRef<HTMLSelectElement>(null);\n\n useEffect(() => {\n if (!selectionRef.current) {\n console.error('selectionRef ref is unset');\n return;\n }\n selectionRef.current.value = hardware.properties.position;\n }, [hardware.properties.position]);\n\n function onMove(e: any) {\n console.debug('change', e);\n if (!selectionRef || !selectionRef.current) {\n console.error('selection ref is unset');\n return;\n }\n void hardware.requestChange({\n value: selectionRef.current.value,\n function: 'move',\n });\n }\n\n function stop(e: any) {\n void hardware.requestChange({\n function: 'stop',\n });\n }\n\n const opts = map(hardware.properties.positions, (p) => (\n <option key={p.position} title={p.description}>\n {p.position}\n </option>\n ));\n\n return (\n <div className=\"hw-component\">\n <div className=\"hw-head\">\n <TypeIcon\n name=\"Multiposition\"\n icon=\"fam-hardware-multiposition\"\n online={hardware.online}\n />\n <div className=\"name\">{hardware.name}</div>\n <Badge\n bg={hardware.properties.state === 'READY' ? 'success' : 'warning'}\n >\n {hardware.properties.state}\n </Badge>\n </div>\n <div className=\"hw-content\">\n <InputGroup>\n <Form.Control\n className=\"custom-select\"\n as=\"select\"\n ref={selectionRef}\n disabled={props.disabled}\n defaultValue={hardware.properties.position}\n >\n <option disabled>unknown</option>\n {opts}\n </Form.Control>\n {hardware.properties.state !== 'MOVING' && (\n <Button onClick={onMove} disabled={props.disabled}>\n Move\n </Button>\n )}\n\n {hardware.properties.state === 'MOVING' && !props.disabled && (\n <Button variant=\"danger\" onClick={stop}>\n <i className=\"fa fa-times\" />\n </Button>\n )}\n </InputGroup>\n </div>\n </div>\n );\n}\n","import debug from 'debug';\n\nimport TypeIcon from './TypeIcon';\nimport HardwareTemplate from './utils/HardwareTemplate';\nimport type { Hardware } from './utils/types';\n\nconst logger = debug('daiquiri.components.hardware.NoObject');\n\ninterface NoObjectProps {\n id: string;\n name?: string;\n options: {\n header?: string;\n emptyifnone?: boolean;\n };\n}\n\nexport default function NoObject(props: NoObjectProps) {\n if (props.options.emptyifnone) {\n logger(\n 'Component id:\"%s\" name:\"%s\" not displayed cause setup with emptyifnone.',\n props.id,\n props.name\n );\n return <></>;\n }\n\n const widgetIcon = (\n <TypeIcon name=\"NoObject\" icon=\"fam-hardware-any\" online={false} />\n );\n\n const widgetState = <></>;\n\n const widgetContent = <>Missing</>;\n\n const headerMode = props.options ? props.options.header : 'top';\n\n const hardware: Hardware = {\n id: props.id,\n name: props.name ?? '',\n alias: null,\n online: false,\n properties: {},\n type: '',\n };\n\n return (\n <HardwareTemplate\n hardware={hardware}\n widgetIcon={widgetIcon}\n widgetState={widgetState}\n widgetContent={widgetContent}\n headerMode={headerMode}\n />\n );\n}\n","import { InputGroup, Form, Badge } from 'react-bootstrap';\n\nimport TypeIcon from './TypeIcon';\nimport HardwareTemplate from './utils/HardwareTemplate';\nimport type { GenericSchema } from './utils/schema';\nimport type { HardwareWidgetProps, HardwareWidgetOptions } from './utils/types';\n\nfunction DeviceState(props: GenericSchema) {\n const state = props.online ? 'READY' : 'OFFLINE';\n return <Badge bg={state === 'READY' ? 'success' : 'warning'}>{state}</Badge>;\n}\n\ninterface PropertyWidgetOptions extends HardwareWidgetOptions {\n header?: string;\n property?: string;\n unit?: string;\n}\n\nexport default function Property(\n props: HardwareWidgetProps<GenericSchema, PropertyWidgetOptions>\n) {\n const { hardware, options = {} } = props;\n const widgetIcon = (\n <TypeIcon name=\"Optic\" icon=\"fa-cog\" online={hardware.online} />\n );\n\n const widgetState = <DeviceState {...hardware} />;\n\n function getValue() {\n const propertyName = options.property;\n if (propertyName === undefined) {\n return `property is not set`;\n }\n if (propertyName === null) {\n return `property is null`;\n }\n let result: any = hardware;\n for (const segment of propertyName.split('/')) {\n result = result[segment];\n if (result === undefined) {\n return `property '${propertyName}' not found`;\n }\n }\n return `${result}`;\n }\n\n function getUnit() {\n const unitName = options.unit;\n if (!unitName) {\n return null;\n }\n if (!unitName.includes('properties')) {\n // That's a fixed unit defined as an option\n return unitName;\n }\n\n let result: any = props;\n for (const segment of unitName.split('/')) {\n result = result[segment];\n if (result === undefined) {\n return null;\n }\n }\n return `${result}`;\n }\n\n const unit = getUnit();\n\n const widgetContent = (\n <InputGroup>\n <Form.Control value={getValue()} readOnly />\n {unit && <InputGroup.Text>{unit}</InputGroup.Text>}\n </InputGroup>\n );\n\n const headerMode = props.options.header || 'top';\n\n return (\n <HardwareTemplate\n hardware={hardware}\n widgetIcon={widgetIcon}\n widgetState={widgetState}\n widgetContent={widgetContent}\n headerMode={headerMode}\n />\n );\n}\n","import { Button, OverlayTrigger, Popover, ButtonGroup } from 'react-bootstrap';\n\nimport TypeIcon from './TypeIcon';\nimport HardwareTemplate from './utils/HardwareTemplate';\nimport { ShutterState } from './utils/State';\nimport type { ShutterSchema } from './utils/schema';\nimport type { HardwareWidgetProps, HardwareWidgetOptions } from './utils/types';\n\nfunction ShutterOverlay(\n props: HardwareWidgetProps<ShutterSchema, HardwareWidgetOptions>\n) {\n const { hardware } = props;\n const reset = () => {\n void hardware.requestChange({\n function: 'reset',\n });\n };\n\n return (\n <OverlayTrigger\n trigger=\"click\"\n rootClose\n overlay={\n <Popover id=\"popid\">\n <Popover.Header>{hardware.name} Details</Popover.Header>\n <Popover.Body>\n <h6>Status</h6>\n <pre>{hardware.properties.status}</pre>\n <div className=\"d-grid gap-2\">\n <Button onClick={reset} disabled={props.disabled}>\n Reset\n </Button>\n </div>\n </Popover.Body>\n </Popover>\n }\n >\n <Button className=\"flex-grow-0\" title=\"Shutter Details\">\n <i className=\"fa fa-ellipsis-h\" />\n </Button>\n </OverlayTrigger>\n );\n}\n\nexport default function ShutterDefault(\n props: HardwareWidgetProps<ShutterSchema, HardwareWidgetOptions>\n) {\n const { hardware, options = {} } = props;\n const widgetIcon = (\n <TypeIcon\n name=\"Shutter\"\n icon=\"fam-hardware-shutter\"\n online={hardware.online}\n />\n );\n\n const widgetState = <ShutterState hardware={hardware} />;\n\n function getState() {\n if (!hardware.properties) {\n return 'UNKNOWN';\n }\n return hardware.properties.state;\n }\n\n function getAction(s: string) {\n if (s === 'OPEN') {\n return ['Close', 'close'];\n }\n if (s === 'CLOSED') {\n return ['Open', 'open'];\n }\n if (s === 'DISABLED' || s === 'STANDBY' || s === 'FAULT') {\n return ['Closed', ''];\n }\n if (s === 'MOVING') {\n return ['...', ''];\n }\n return ['Unknown', ''];\n }\n\n const state = getState();\n // console.log(state);\n const [label, action] = getAction(state);\n const variants: { [name: string]: string } = {\n OPEN: 'danger',\n CLOSED: 'success',\n MOVING: 'warning',\n DISABLED: 'secondary',\n STANDBY: 'danger',\n FAULT: 'fatal',\n UNKNOWN: 'warning',\n };\n const variant = variants[state] || 'danger';\n\n function onClick() {\n void hardware.requestChange({\n function: action,\n });\n }\n\n const widgetContent = (\n <ButtonGroup className=\"d-flex flex-nowrap\">\n <Button\n variant={variant}\n onClick={onClick}\n disabled={props.disabled || action === ''}\n >\n {label}\n </Button>\n\n {options.extended && <ShutterOverlay {...props} />}\n </ButtonGroup>\n );\n\n const headerMode = props.options.header || 'top';\n\n return (\n <HardwareTemplate\n hardware={hardware}\n widgetIcon={widgetIcon}\n widgetState={widgetState}\n widgetContent={widgetContent}\n headerMode={headerMode}\n />\n );\n}\n","import type { PropsWithChildren } from 'react';\nimport { useEffect, useRef, useState } from 'react';\n\ninterface Props {\n className?: string;\n}\n\nexport default function FullSizer(props: PropsWithChildren<Props>) {\n const [state, setState] = useState<Record<string, number>>({});\n const containerRef = useRef<HTMLDivElement>(null);\n useEffect(() => {\n if (containerRef.current) {\n const view = containerRef.current;\n setState({\n width: view.clientWidth,\n height: view.clientHeight,\n });\n }\n }, []);\n\n return (\n <div\n ref={containerRef}\n style={{ width: '100%', height: '100%' }}\n className={props.className}\n >\n {state.width > 0 && (\n <div\n className=\"full-sizer\"\n style={{\n width: `${state.width}px`,\n height: `${state.height}px`,\n overflow: 'scroll',\n }}\n >\n {props.children}\n </div>\n )}\n </div>\n );\n}\n"],"names":["OnlineStatus","props","activeMessage","inactiveMessage","message","jsx","TypeIcon","name","icon","jsxs","formatEng","scalar","powerPrefix","q","subtrhnd","pow10","prefix","ucfirst","str","toHoursMins","seconds","min","mins","hours","toEnergy","wavelength","round","value","digits","FrontendOverlay","hardware","reset","e","itlks","ring","getPropertyState","key","state","OverlayTrigger","Popover","Container","map","Row","Col","Badge","prop","Button","Frontend","options","onClick","ButtonGroup","Info","getValue","propertyName","result","segment","Fragment","HardwareTemplate","headerMode","getLabel","label","Form","error","HardwareState","style","MotorState","getState","s1","ShutterState","s","getVariant","NumericStep","forwardRef","ref","stepSizeRef","useRef","currentStep","setCurrentStep","useState","onStep","up","ref2","val","stepSize","onStepProp","step","overlay","incIcon","decIcon","swapIncDec","onKeyDown","horizontalArrows","largeArrows","rest","onKeyDown2","steps","classNames","InputGroup","NumericStep$1","HardwareNumericStep","valueRef","edited","setEdited","setError","useEffect","updateRef","newValue","onBlur","onChange","promise","HardwareInputNumber","normalizeNumber","_a","MotorOverlay","onMoveVelocityRequested","target","onMoveAccelerationRequested","MotorDefault","onAbortRequested","onMovePositionRequested","widgetIcon","widgetState","Multiposition","selectionRef","onMove","stop","opts","p","logger","debug","NoObject","widgetContent","DeviceState","Property","getUnit","unitName","unit","ShutterOverlay","ShutterDefault","getAction","action","variant","FullSizer","setState","containerRef","view"],"mappings":"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"}
|
package/package.json
CHANGED
package/src/index.ts
CHANGED
|
@@ -17,6 +17,7 @@ export { default as HardwareTemplate } from './hardware/utils/HardwareTemplate';
|
|
|
17
17
|
export { default as HardwareInputNumber } from './hardware/utils/HardwareInputNumber';
|
|
18
18
|
export { default as HardwareNumericStep } from './hardware/utils/HardwareNumericStep';
|
|
19
19
|
export * as HardwareState from './hardware/utils/State';
|
|
20
|
+
export * as Formatting from './utils/formatting';
|
|
20
21
|
|
|
21
22
|
/* Components */
|
|
22
23
|
export { default as FullSizer } from './components/FullSizer';
|