@esrf/daiquiri-lib 0.1.0 → 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -1,7 +1,7 @@
1
1
  # @esrf/daiquiri-lib
2
2
 
3
- Shared UI components and associated machinary from the [daiquiri-ui](https://gitlab.esrf.fr/ui/daiquiri-ui) project for beamline control and data acqusition. These shared components allow for a consistent look and feel for projects outside of the daiquiri core.
3
+ Shared UI components and associated machinary from the [daiquiri-ui](https://gitlab.esrf.fr/ui/daiquiri-ui) project for beamline control and data acquisition. These shared components allow for a consistent look and feel for projects outside of the [daiquiri](https://ui.gitlab-pages.esrf.fr/daiquiri-landing/) core.
4
4
 
5
5
  The library currently exports the YAML layout language, validator, and renderer, and a selection of hardware components.
6
6
 
7
- See our [documentation](ui.gitlab-pages.esrf.fr/daiquiri-ui/daiquiri-lib) for more information.
7
+ See our [documentation](https://ui.gitlab-pages.esrf.fr/daiquiri-ui/daiquiri-lib) for more information.
package/dist/index.d.ts CHANGED
@@ -1,6 +1,6 @@
1
1
  /// <reference types="react" />
2
- import * as react from 'react';
3
- import { ReactElement, Component, ComponentType, PropsWithChildren, ReactChild, ChangeEvent, KeyboardEvent } from 'react';
2
+ import * as React$1 from 'react';
3
+ import React__default, { ReactElement, Component, ComponentType, PropsWithChildren, ReactChild, ChangeEvent, KeyboardEvent } from 'react';
4
4
 
5
5
  interface HardwareError {
6
6
  property: string;
@@ -229,7 +229,7 @@ declare function Property(props: HardwareWidgetProps<GenericSchema, PropertyWidg
229
229
 
230
230
  declare function ShutterDefault(props: HardwareWidgetProps<ShutterSchema, HardwareWidgetOptions>): JSX.Element;
231
231
 
232
- interface Props$b {
232
+ interface Props$c {
233
233
  online: boolean;
234
234
  activeMessage?: string;
235
235
  inactiveMessage?: string;
@@ -237,9 +237,9 @@ interface Props$b {
237
237
  icon: string;
238
238
  name: string;
239
239
  }
240
- declare function TypeIcon(props: Props$b): JSX.Element;
240
+ declare function TypeIcon(props: Props$c): JSX.Element;
241
241
 
242
- interface Props$a {
242
+ interface Props$b {
243
243
  hardware: Hardware;
244
244
  headerMode?: string;
245
245
  widgetIcon: ReactElement;
@@ -250,7 +250,7 @@ interface Props$a {
250
250
  * Normalized way to compose hardware component in order to provide the same
251
251
  * kind of layout
252
252
  */
253
- declare function HardwareTemplate(props: Props$a): JSX.Element;
253
+ declare function HardwareTemplate(props: Props$b): JSX.Element;
254
254
 
255
255
  /**
256
256
  * Input number synchronized with a hardware.
@@ -367,12 +367,12 @@ declare class HardwareVariant extends Component<HardwareVariantOptions, void> {
367
367
  render(): JSX.Element;
368
368
  }
369
369
 
370
- interface Props$9 {
370
+ interface Props$a {
371
371
  className?: string;
372
372
  }
373
- declare function FullSizer(props: PropsWithChildren<Props$9>): JSX.Element;
373
+ declare function FullSizer(props: PropsWithChildren<Props$a>): JSX.Element;
374
374
 
375
- interface Props$8 {
375
+ interface Props$9 {
376
376
  step?: number;
377
377
  steps?: number[];
378
378
  disabled: boolean;
@@ -394,7 +394,26 @@ interface Props$8 {
394
394
  }) => void;
395
395
  onKeyDown?: (e: KeyboardEvent<HTMLInputElement>) => void;
396
396
  }
397
- declare const NumericStep: react.ForwardRefExoticComponent<Props$8 & react.RefAttributes<HTMLInputElement>>;
397
+ declare const NumericStep: React$1.ForwardRefExoticComponent<Props$9 & React$1.RefAttributes<HTMLInputElement>>;
398
+
399
+ declare function PanelHeader(props: {
400
+ children?: ReactChild | ReactChild[];
401
+ style?: Record<string, any>;
402
+ }): JSX.Element;
403
+ declare function PanelContents(props: {
404
+ children?: ReactChild | ReactChild[];
405
+ style?: Record<string, any>;
406
+ }): JSX.Element;
407
+ interface Props$8 {
408
+ style?: Record<string, any>;
409
+ scroll?: boolean;
410
+ className?: string;
411
+ }
412
+ declare function Panel(props: PropsWithChildren<Props$8>): JSX.Element;
413
+ declare namespace Panel {
414
+ var Header: typeof PanelHeader;
415
+ var Contents: typeof PanelContents;
416
+ }
398
417
 
399
418
  interface YamlNode {
400
419
  type: string;
@@ -427,7 +446,8 @@ interface Props$6 {
427
446
  }
428
447
  declare function YamlCol({ yamlNode, panel }: Props$6): JSX.Element;
429
448
 
430
- declare function registerComponent(name: string, component: React.ComponentType<any>): void;
449
+ declare function registerComponent(name: string, component: React__default.ComponentType<any>): void;
450
+ declare function registerComponents(map: Record<string, React__default.ComponentType<any>>): void;
431
451
  interface YamlComponentNode extends YamlNode {
432
452
  type: string;
433
453
  [name: string]: any;
@@ -557,7 +577,7 @@ declare class ErrorBoundary extends Component<Props, State> {
557
577
  private readonly reload;
558
578
  componentDidCatch(error: Error): void;
559
579
  componentDidUpdate(prevProps: Props, prevState: State): void;
560
- render(): react.ReactNode;
580
+ render(): React$1.ReactNode;
561
581
  }
562
582
 
563
583
  /**
@@ -652,4 +672,31 @@ declare namespace HardwareObject_d {
652
672
  */
653
673
  declare function registerHardwareComponent(name: string, component: React.ComponentType<any>): void;
654
674
 
655
- export { formatting_d as Formatting, Frontend, FullSizer, HardwareObject_d as HWObject, HardwareInputNumber, HardwareNumericStep, schema_d as HardwareSchema, State_d as HardwareState, HardwareTemplate, types_d as HardwareTypes, HardwareVariant, Info, type InfoOptions, KeyError, MissingKeysError, MotorDefault, type MotorDefaultOptions, Multiposition, NoObject, NumericStep, Property, ShutterDefault, TypeIcon, type Props$b as TypeIconOptions, ErrorBoundary as YAMLErrorBoundary, Main as YAMLLayout, asserts_d as YamlAsserts, type YamlComponent$1 as YamlComponent, type YamlNode, registerHardwareComponent, registerComponent as registerYamlComponent, registerYamlType, renderYamlNode, yamlMap };
675
+ interface Monitor {
676
+ name: string;
677
+ type?: string;
678
+ value: string;
679
+ overlay?: string;
680
+ comparator?: string;
681
+ comparison?: any;
682
+ unit?: string;
683
+ }
684
+
685
+ declare function registerRuntimeHook(name: string, hook: (id: string | null) => Hardware | null): void;
686
+ declare const dynamicOp: (op: string, a1: any, b1: any) => boolean | undefined;
687
+ declare function MonitorHardware(props: {
688
+ monitor: Monitor;
689
+ }): JSX.Element;
690
+
691
+ declare function registerMonitorComponent(name: string, component: React.ComponentType<any>): void;
692
+ interface MonitorPanelProps {
693
+ monitors: Monitor[];
694
+ margin?: 'start' | null;
695
+ bg?: 'light' | null;
696
+ }
697
+ declare function MonitorPanel(props: MonitorPanelProps): JSX.Element;
698
+ interface MonitorPanelItemProps {
699
+ }
700
+ declare function MonitorPanelItem(props: PropsWithChildren<MonitorPanelItemProps>): JSX.Element;
701
+
702
+ export { formatting_d as Formatting, Frontend, FullSizer, HardwareObject_d as HWObject, HardwareInputNumber, HardwareNumericStep, schema_d as HardwareSchema, State_d as HardwareState, HardwareTemplate, types_d as HardwareTypes, HardwareVariant, Info, type InfoOptions, KeyError, MissingKeysError, type Monitor, MonitorHardware, MonitorPanel, MonitorPanelItem, type MonitorPanelProps, MotorDefault, type MotorDefaultOptions, Multiposition, NoObject, NumericStep, Panel, Property, ShutterDefault, TypeIcon, type Props$c as TypeIconOptions, ErrorBoundary as YAMLErrorBoundary, Main as YAMLLayout, asserts_d as YamlAsserts, type YamlComponent$1 as YamlComponent, type YamlNode, dynamicOp, registerHardwareComponent, registerMonitorComponent, registerRuntimeHook, registerComponent as registerYamlComponent, registerComponents as registerYamlComponents, registerYamlType, renderYamlNode, yamlMap };
package/dist/index.js CHANGED
@@ -1,3 +1,4 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const n=require("react/jsx-runtime"),j=require("lodash"),o=require("react-bootstrap"),m=require("react"),re=require("classnames"),se=require("debug"),L=e=>e&&typeof e=="object"&&"default"in e?e:{default:e},A=L(re),ie=L(se);function ae(e){const{activeMessage:t="Online",inactiveMessage:r="Offline",message:s="This device is"}=e;return n.jsx("div",{className:`dot-indicator small bg-${e.online?"success":"danger"}`,title:`${s} ${e.online?t:r}`})}function b(e){const{name:t,icon:r}=e;return n.jsxs("div",{className:"icon",title:t,children:[n.jsx("i",{className:`fa ${r}`}),n.jsx(ae,{...e})]})}function oe(e){const t={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"},r=Math.log(e)/Math.log(1e3),s=!Number.isInteger(r),i=3*Math.ceil(r-(s?1:0)),a=i===0?"":t[i];return{scalar:e*10**-i,prefix:a,multiplier:10**-i}}function le(e){return e.charAt(0).toUpperCase()+e.slice(1)}function Y(e){if(e<60)return`${Math.round(e)} sec`;const t=Math.round(e/60),r=t%60,s=Math.floor(t/60);return s?`${s} hr ${r} min`:`${r} min`}function ce(e){return e>0?(662607004e-42*299792458/(e*1e-10)/160218e-24*.001).toFixed(4):0}function de(e,t){return Number.parseFloat(e.toFixed(t))}const ue=Object.freeze(Object.defineProperty({__proto__:null,formatEng:oe,round:de,toEnergy:ce,toHoursMins:Y,ucfirst:le},Symbol.toStringTag,{value:"Module"}));function he(e){const{hardware:t}=e;function r(d){t.requestChange({function:"reset"})}const s={"Front End":"feitlk",Experimental:"expitlk",PSS:"pssitlk"},i={Current:`${t.properties.current.toFixed(1)} mA`,Mode:t.properties.mode,Refill:Y(t.properties.refill),Message:n.jsx("pre",{children:t.properties.message})};function a(d){if(!(d in t.properties))return"UNKNOWN";const l=t.properties[d];return!l||typeof l!="string"?"UNKNOWN":l}return n.jsx(o.OverlayTrigger,{trigger:"click",rootClose:!0,overlay:n.jsxs(o.Popover,{id:"popid",children:[n.jsxs(o.Popover.Header,{children:[t.name," Details"]}),n.jsxs(o.Popover.Body,{children:[n.jsx("h6",{children:"Status"}),n.jsx("pre",{children:t.properties.status}),n.jsx("h6",{children:"Interlocks"}),n.jsx(o.Container,{children:j.map(s,(d,l)=>n.jsxs(o.Row,{children:[n.jsxs(o.Col,{children:[l,":"]}),n.jsx(o.Col,{children:n.jsx(o.Badge,{bg:a(d)==="ON"?"success":"danger",children:a(d)})})]},l))}),n.jsx("h6",{children:"Ring Status"}),n.jsx(o.Container,{children:j.map(i,(d,l)=>n.jsxs(o.Row,{children:[n.jsxs(o.Col,{children:[l,":"]}),n.jsx(o.Col,{children:d})]},l))}),n.jsx("div",{className:"d-grid gap-2",children:n.jsx(o.Button,{disabled:e.disabled,onClick:r,children:"Reset"})})]})]}),children:n.jsx(o.Button,{className:"flex-grow-0",title:"Shutter Details",children:n.jsx("i",{className:"fa fa-ellipsis-h"})})})}function fe(e){const{hardware:t,options:r={}}=e;function s(i){t.requestChange({function:t.properties.frontend==="FE open"?"close":"open"})}return n.jsxs("div",{className:"hw-component",children:[n.jsxs("div",{className:"hw-head",children:[n.jsx(b,{name:"Frontend",icon:"fam-hardware-frontend",online:t.online}),n.jsx("div",{className:"name",children:t.name}),n.jsx(o.Badge,{bg:t.properties.state==="OPEN"||t.properties.state==="RUNNING"?"success":"danger",children:t.properties.state})]}),n.jsx("div",{className:"hw-content",children:n.jsxs(o.ButtonGroup,{className:"d-flex",children:[n.jsx(o.Button,{variant:t.properties.frontend==="FE open"?"danger":"success",onClick:s,disabled:e.disabled,children:t.properties.frontend==="FE open"?"Close":"Open"}),n.jsx(he,{...e})]})})]})}function me(e){const{hardware:t,options:r={}}=e;function s(){const i=r.property;if(i===void 0)return"property is not set";if(i===null)return"property is null";let a=t;for(const d of i.split("/"))if(a=a[d],a===void 0)return`property '${i}' not found`;return`${a}`}return n.jsx(n.Fragment,{children:s()})}function S(e){const{headerMode:t,hardware:r}=e;function s(){return r.alias?r.alias:r.name?r.name:r.id}const i=s();switch(t){case"front":return n.jsx("div",{className:"hw-component",children:n.jsxs("div",{className:"hw-single",children:[e.widgetIcon,n.jsx("div",{className:"name",children:i}),n.jsx("div",{className:"d-inline-block",children:e.widgetContent})]})});case"none":return n.jsx("div",{className:"hw-component",children:n.jsx("div",{className:"hw-single",children:e.widgetContent})});case"state":return e.widgetState;default:return n.jsxs("div",{className:"hw-component",children:[n.jsxs("div",{className:"hw-head",children:[e.widgetIcon,n.jsx("div",{className:"name",children:n.jsx(o.Form.Label,{htmlFor:r.id,children:i})}),e.widgetState,e.hardware.errors&&e.hardware.errors.length>0&&n.jsx(o.OverlayTrigger,{trigger:"click",placement:"bottom",rootClose:!0,overlay:n.jsxs(o.Popover,{id:e.hardware.id,style:{maxWidth:500},children:[n.jsx(o.Popover.Header,{children:"Device Errors"}),n.jsxs(o.Popover.Body,{children:["There were errors with properties on this device:",n.jsx("ul",{children:e.hardware.errors.map(a=>n.jsxs("li",{children:[a.property,":",n.jsxs("span",{className:"stack-trace",children:[a.traceback,n.jsx("br",{}),a.exception]})]}))})]})]}),children:n.jsx(o.Button,{variant:"danger",size:"sm",children:n.jsx("i",{className:"fa fa-exclamation-triangle"})})})]}),n.jsx("div",{className:"hw-content",children:e.widgetContent})]})}}function T(e){const t={display:"inline-block",minWidth:""};return e.minWidth&&(t.minWidth=`${e.minWidth}em`),n.jsx("div",{style:t,children:n.jsx(o.Badge,{bg:e.variant,children:e.state})})}function q(e){const{hardware:t}=e;function r(){if(!t.online)return"OFFLINE";let i="UNKNOWN";return e.hardware.properties.state&&([i]=e.hardware.properties.state),i}const s=r();return n.jsx(T,{state:s,minWidth:6,variant:s==="READY"?"success":"warning"})}function G(e){const{hardware:t}=e;function r(){if(!t.online)return"OFFLINE";const a=t.properties.state;return e.useReadyState&&(a==="OPEN"||a==="CLOSED")?"READY":a}const s=r();function i(){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 n.jsx(T,{state:s,minWidth:6,variant:i()})}const pe=Object.freeze(Object.defineProperty({__proto__:null,HardwareState:T,MotorState:q,ShutterState:G},Symbol.toStringTag,{value:"Module"})),xe=m.forwardRef((e,t)=>{const r=m.useRef(null),[s,i]=m.useState(e.step),a=w=>{const D=t;if(r.current===null)return;let B=Number.parseFloat(D.current.value);const H=Number.parseFloat(r.current.value);B+=w?H:-H,D.current.value=`${B}`,e.onStep&&e.onStep({target:D.current})},{onStep:d,step:l,overlay:h,incIcon:u,decIcon:c,swapIncDec:f,onKeyDown:x,horizontalArrows:N,largeArrows:F,...v}=e,_=w=>{w.key==="ArrowUp"?(w.preventDefault(),a(!0)):w.key==="ArrowDown"?(w.preventDefault(),a(!1)):x&&x(w)};if(!e.step)return n.jsx(o.Form.Control,{ref:t,type:"number",step:"any",onKeyDown:_,...v});const ne=j.map(e.steps||[e.step],w=>n.jsx("option",{value:w,children:w},w));return n.jsx("div",{className:A.default("numeric-step",{"numeric-step-large":F,"numeric-step-horizontal":N}),children:n.jsxs(o.InputGroup,{children:[n.jsx(o.Form.Control,{onKeyDown:_,ref:t,type:"number",step:"any",...v}),n.jsxs(n.Fragment,{children:[h,!h&&n.jsxs(o.InputGroup.Text,{className:"d-flex flex-column",children:[n.jsx(o.Form.Control,{ref:r,as:"select",className:"step-size",defaultValue:s,onChange:w=>i(Number.parseFloat(w.target.value)),children:ne}),e.unit&&n.jsx("div",{children:e.unit}),!u&&!c&&n.jsxs(n.Fragment,{children:[n.jsx(o.Button,{className:"step step-up",disabled:e.disabled,onClick:w=>a(!0)}),n.jsx(o.Button,{className:"step step-down",disabled:e.disabled,onClick:w=>a(!1)})]})]}),c&&f&&n.jsx(o.Button,{disabled:e.disabled,onClick:w=>a(!1),children:n.jsx("i",{className:`fa fa-fw fa-${c}`})}),u&&n.jsx(o.Button,{disabled:e.disabled,onClick:w=>a(!0),children:n.jsx("i",{className:`fa fa-fw fa-${u}`})}),c&&!f&&n.jsx(o.Button,{disabled:e.disabled,onClick:w=>a(!1),children:n.jsx("i",{className:`fa fa-fw fa-${c}`})})]})]})})}),K=xe;function z(e){const t=m.useRef(null),[r,s]=m.useState(!1),[i,a]=m.useState(!1);m.useEffect(()=>{t.current&&(e.hardwareValue===null?t.current.value="":t.current.value=e.hardwareValue.toString(),s(!1))},[e.hardwareValue]);function d(f){let x=f;e.precision!==void 0&&(x=Number.parseFloat(x).toFixed(e.precision)),t!=null&&t.current&&(t.current.value=x)}function l(){r&&setTimeout(()=>{d(e.hardwareValue),s(!1)},3e3)}function h(f){e.hardwareValue!==null&&(s(!0),t!=null&&t.current&&(t.current.value=f.target.value),f.target.value===e.hardwareValue.toString()&&s(!1))}function u(f){s(!1),e.onMoveRequested(f.target.value)}function c(f){switch(f.key){case"Enter":{s(!1);const x=Number.parseFloat(f.target.value),N=e.onMoveRequested(x);N&&N.catch(()=>{a(!0),setTimeout(()=>{d(e.hardwareValue),a(!1)},2e3)})}f.preventDefault(),f.stopPropagation();break;case"Esc":case"Escape":r&&(a(!1),s(!1),d(e.hardwareValue)),f.target.blur(),f.preventDefault(),f.stopPropagation();break}}return n.jsx(K,{id:e.id,className:A.default({"form-control-edited":r,"form-control-error":i,"hw-moving":e.hardwareIsMoving}),type:e.readOnly?"text":"number",ref:t,precision:e.precision,onChange:h,onBlur:l,onStep:u,onKeyDown:c,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?n.jsx(o.Button,{variant:"danger",onClick:e.onAbortRequested,children:n.jsx("i",{className:"fa fa-times"})}):null})}function k(e){const t=m.useRef(null),[r,s]=m.useState(!1),[i,a]=m.useState(!1);function d(c){return e.precision!==void 0?Number.parseFloat(c).toFixed(e.precision):c}m.useEffect(()=>{var c;t.current&&(t.current.value=d((c=e.hardwareValue)==null?void 0:c.toString()),s(!1))},[e.hardwareValue,e.precision]);function l(c){const f=d(c);t!=null&&t.current&&(t.current.value=f)}function h(c){switch(c.key){case"Enter":{s(!1);const f=Number.parseFloat(c.target.value),x=e.onMoveRequested(f);x&&x.catch(()=>{a(!0),setTimeout(()=>{l(e.hardwareValue),a(!1)},2e3)}),c.preventDefault(),c.stopPropagation();break}case"Esc":case"Escape":r&&(a(!1),s(!1),l(e.hardwareValue)),c.target.blur(),c.preventDefault(),c.stopPropagation();break}}function u(c){s(!0),c.target,t!=null&&t.current&&(t.current.value=c.target.value),c.target.value===e.hardwareValue.toString()&&s(!1)}return n.jsx(o.Form.Control,{className:A.default({"form-control-edited":r,"form-control-error":i,"hw-moving":e.hardwareIsMoving}),type:"number",ref:t,onChange:u,onKeyDown:h,disabled:e.readOnly||e.hardwareIsMoving||e.hardwareIsDisabled,step:e.step})}function ge(e){function t(i){return e.hardware.requestChange({property:"velocity",value:i})}function r(i){return e.hardware.requestChange({property:"acceleration",value:i})}let s="UNKNOWN";return e.hardware.properties.state&&([s]=e.hardware.properties.state),n.jsx(o.OverlayTrigger,{trigger:"click",rootClose:!0,overlay:n.jsxs(o.Popover,{id:"popid",children:[n.jsxs(o.Popover.Header,{children:[e.hardware.name," details"]}),n.jsxs(o.Popover.Body,{children:[n.jsxs(o.Form.Group,{children:[n.jsx(o.Form.Label,{children:"Velocity"}),n.jsx(k,{hardwareValue:e.hardware.properties.velocity,onMoveRequested:t,hardwareIsDisabled:e.disabled,hardwareIsReady:s==="READY",hardwareIsMoving:s==="MOVING",readOnly:e.readOnly})]}),n.jsxs(o.Form.Group,{children:[n.jsx(o.Form.Label,{children:"Acceleration"}),n.jsx(k,{hardwareValue:e.hardware.properties.acceleration,onMoveRequested:r,hardwareIsDisabled:e.disabled,hardwareIsReady:s==="READY",hardwareIsMoving:s==="MOVING",readOnly:e.readOnly})]})]})]}),children:n.jsx(o.Button,{children:n.jsx("i",{className:"fa fa-ellipsis-h"})})})}function we(e){const{hardware:t,options:r={}}=e;function s(){t.requestChange({function:"stop"})}function i(u){return t.requestChange({property:"position",value:u,function:"move"})}let a="UNKNOWN";e.hardware.properties.state&&([a]=e.hardware.properties.state);const d=n.jsx(b,{name:"Motor",icon:"fam-hardware-motor",online:t.online}),l=n.jsx(q,{hardware:t}),h=e.options?e.options.header:"top";return n.jsx(S,{hardware:t,widgetIcon:d,widgetState:l,widgetContent:n.jsxs(o.InputGroup,{children:[n.jsx(z,{id:t.id,hardwareValue:t.properties.position,hardwareIsDisabled:e.disabled,hardwareIsReady:a==="READY",hardwareIsMoving:a==="MOVING",onMoveRequested:i,onAbortRequested:s,precision:r.precision,readOnly:r.readOnly,step:r.step,steps:r.steps,incIcon:r.incicon,decIcon:r.decicon,swapIncDec:r.swapincdec,horizontalArrows:r.horizontalarrows,largeArrows:r.largearrows}),t.properties.unit&&n.jsx(o.InputGroup.Text,{children:t.properties.unit}),a!=="MOVING"&&r.extended&&n.jsx(ge,{hardware:t,disabled:e.disabled,readOnly:r.readOnly}),a==="MOVING"&&!e.disabled&&!r.step&&n.jsx(o.Button,{variant:"danger",onClick:s,children:n.jsx("i",{className:"fa fa-times"})})]}),headerMode:h})}function je(e){const{hardware:t,options:r={}}=e,s=m.useRef(null);m.useEffect(()=>{if(!s.current){console.error("selectionRef ref is unset");return}s.current.value=t.properties.position},[t.properties.position]);function i(l){if(console.debug("change",l),!s||!s.current){console.error("selection ref is unset");return}t.requestChange({value:s.current.value,function:"move"})}function a(l){t.requestChange({function:"stop"})}const d=j.map(t.properties.positions,l=>n.jsx("option",{title:l.description,children:l.position},l.position));return n.jsxs("div",{className:"hw-component",children:[n.jsxs("div",{className:"hw-head",children:[n.jsx(b,{name:"Multiposition",icon:"fam-hardware-multiposition",online:t.online}),n.jsx("div",{className:"name",children:t.name}),n.jsx(o.Badge,{bg:t.properties.state==="READY"?"success":"warning",children:t.properties.state})]}),n.jsx("div",{className:"hw-content",children:n.jsxs(o.InputGroup,{children:[n.jsxs(o.Form.Control,{className:"custom-select",as:"select",ref:s,disabled:e.disabled,defaultValue:t.properties.position,children:[n.jsx("option",{disabled:!0,children:"unknown"}),d]}),t.properties.state!=="MOVING"&&n.jsx(o.Button,{onClick:i,disabled:e.disabled,children:"Move"}),t.properties.state==="MOVING"&&!e.disabled&&n.jsx(o.Button,{variant:"danger",onClick:a,children:n.jsx("i",{className:"fa fa-times"})})]})})]})}const ye=ie.default("daiquiri.components.hardware.NoObject");function ve(e){if(e.options.emptyifnone)return ye('Component id:"%s" name:"%s" not displayed cause setup with emptyifnone.',e.id,e.name),n.jsx(n.Fragment,{});const t=n.jsx(b,{name:"NoObject",icon:"fam-hardware-any",online:!1}),r=n.jsx(n.Fragment,{}),s=n.jsx(n.Fragment,{children:"Missing"}),i=e.options?e.options.header:"top",a={id:e.id,name:e.name??"",alias:null,online:!1,properties:{},type:""};return n.jsx(S,{hardware:a,widgetIcon:t,widgetState:r,widgetContent:s,headerMode:i})}function be(e){const t=e.online?"READY":"OFFLINE";return n.jsx(o.Badge,{bg:t==="READY"?"success":"warning",children:t})}function Ne(e){const{hardware:t,options:r={}}=e,s=n.jsx(b,{name:"Optic",icon:"fa-cog",online:t.online}),i=n.jsx(be,{...t});function a(){const c=r.property;if(c===void 0)return"property is not set";if(c===null)return"property is null";let f=t;for(const x of c.split("/"))if(f=f[x],f===void 0)return`property '${c}' not found`;return`${f}`}function d(){const c=r.unit;if(!c)return null;if(!c.includes("properties"))return c;let f=e;for(const x of c.split("/"))if(f=f[x],f===void 0)return null;return`${f}`}const l=d(),h=n.jsxs(o.InputGroup,{children:[n.jsx(o.Form.Control,{value:a(),readOnly:!0}),l&&n.jsx(o.InputGroup.Text,{children:l})]}),u=e.options.header||"top";return n.jsx(S,{hardware:t,widgetIcon:s,widgetState:i,widgetContent:h,headerMode:u})}function Ce(e){const{hardware:t}=e,r=()=>{t.requestChange({function:"reset"})};return n.jsx(o.OverlayTrigger,{trigger:"click",rootClose:!0,overlay:n.jsxs(o.Popover,{id:"popid",children:[n.jsxs(o.Popover.Header,{children:[t.name," Details"]}),n.jsxs(o.Popover.Body,{children:[n.jsx("h6",{children:"Status"}),n.jsx("pre",{children:t.properties.status}),n.jsx("div",{className:"d-grid gap-2",children:n.jsx(o.Button,{onClick:r,disabled:e.disabled,children:"Reset"})})]})]}),children:n.jsx(o.Button,{className:"flex-grow-0",title:"Shutter Details",children:n.jsx("i",{className:"fa fa-ellipsis-h"})})})}function Se(e){const{hardware:t,options:r={}}=e,s=n.jsx(b,{name:"Shutter",icon:"fam-hardware-shutter",online:t.online}),i=n.jsx(G,{hardware:t});function a(){return t.properties?t.properties.state:"UNKNOWN"}function d(v){return v==="OPEN"?["Close","close"]:v==="CLOSED"?["Open","open"]:v==="DISABLED"||v==="STANDBY"||v==="FAULT"?["Closed",""]:v==="MOVING"?["...",""]:["Unknown",""]}const l=a(),[h,u]=d(l),f={OPEN:"danger",CLOSED:"success",MOVING:"warning",DISABLED:"secondary",STANDBY:"danger",FAULT:"fatal",UNKNOWN:"warning"}[l]||"danger";function x(){t.requestChange({function:u})}const N=n.jsxs(o.ButtonGroup,{className:"d-flex flex-nowrap",children:[n.jsx(o.Button,{variant:f,onClick:x,disabled:e.disabled||u==="",children:h}),r.extended&&n.jsx(Ce,{...e})]}),F=e.options.header||"top";return n.jsx(S,{hardware:t,widgetIcon:s,widgetState:i,widgetContent:N,headerMode:F})}class Oe extends m.Component{constructor(){super(...arguments),this.variants={}}render(){let t=this.variants.default;return this.props.options.variant in this.variants&&(t=this.variants[this.props.options.variant]),n.jsx(t,{...this.props})}}function U(e){const[t,r]=m.useState({}),s=m.useRef(null);return m.useEffect(()=>{if(s.current){const i=s.current;r({width:i.clientWidth,height:i.clientHeight})}},[]),n.jsx("div",{ref:s,style:{width:"100%",height:"100%"},className:e.className,children:t.width>0&&n.jsx("div",{className:"full-sizer",style:{width:`${t.width}px`,height:`${t.height}px`,overflow:"scroll"},children:e.children})})}const Ee=Object.freeze(Object.defineProperty({__proto__:null},Symbol.toStringTag,{value:"Module"})),Me=Object.freeze(Object.defineProperty({__proto__:null},Symbol.toStringTag,{value:"Module"}));function Ae(e){return n.jsx("div",{className:"panel-header",style:e.style,children:e.children})}function Ie(e){return n.jsx("div",{className:"panel-contents",style:e.style,children:e.children})}function g(e){const t=e.scroll?U:m.Fragment;return n.jsx("div",{className:`panel ${e.className??""}`,style:e.style,children:n.jsx(t,{children:e.children})})}g.Header=Ae;g.Contents=Ie;const E={};function W(e,t){E[e]=t}function y(e,t,r=!0){if(!e)return n.jsx(n.Fragment,{});const{type:s}=e,i=s&&s in E?E[s]:E.component;return n.jsx(i,{yamlNode:e,panel:r},t)}function Fe({children:e,key:t,panel:r,options:s}){return r?n.jsx(g,{style:s.style,scroll:s.scroll,children:n.jsx(g.Contents,{children:e})},t):n.jsx(n.Fragment,{children:m.Children.map(e,i=>m.isValidElement(i)?m.cloneElement(i,{key:t,...i.props}):void 0)})}function Z(e,t){const{_parentNode:r,_indexFromParent:s,...i}=t;if(e&&Object.keys(i).length>0)throw new M(e,Object.keys(i))}class O extends Error{constructor(t,r){super(t),this.yamlNode=r}}class M extends O{constructor(t,r){super(`Unexpected keys: ${r.join(", ")}`,t),this.keys=r}}class C extends O{constructor(t,r){super(`Keys ${r.join(", ")} are missing`,t),this.keys=r}}class p extends O{constructor(t,r,s){super(`Key ${r} error: ${s}`,t),this.key=r,this.keyMessage=s}}function De(e){let t=e;for(;t._parentNode;)t=t._parentNode;return t}function ke(e){const t=[];let r=e;for(;r;)t.push({node:r,indexFromParent:r._indexFromParent}),r=r._parentNode;return t.reverse(),t}function J(e,t=null,r=null){if(e._parentNode)throw new Error("Attribute _parentNode was already defined by the yml layout.");const s={...e,_parentNode:t,_indexFromParent:r};if(e.children){const i=[...e.children];Object.freeze(i),s.children=i.map((a,d)=>J(a,s,d))}return Object.freeze(s),s}function Pe(e){return n.jsx(o.Alert,{variant:"danger",children:e.message})}function Re(e){const{error:t}=e;if(!(t instanceof O))return n.jsx(n.Fragment,{});function r(a,d=3){const l=ke(a.yamlNode),h=[];let u="";for(let c=1;c<l.length;c++){const{node:f,indexFromParent:x}=l[c];h.push(`${u}children:`),u+=" ".repeat(d),x===1?h.push(`${u}- type: ...`):(x??0>1)&&h.push(`${u}...`,`${u}...`,`${u}# children number ${x??0+1}`),h.push(`${u}- type: ${f.type}`),u+=" ".repeat(2)}return a instanceof M?a.keys.forEach(c=>{h.push(`${u}${c}: ... ${" ".repeat(50-u.length-c.length)}<-- unexpected key`)}):a instanceof C?a.keys.forEach(c=>{h.push(`${u}???: ${" ".repeat(50-u.length-c.length)}<-- key **${c}** is expected`)}):a instanceof p&&h.push(`${u}${a.key}: ${" ".repeat(50-u.length-a.key.length)}<-- ${a.keyMessage}`),h.join(`
2
- `)}const i=De(t.yamlNode).name;if(t instanceof M){const a=t.keys.length===1?"key":"keys";return n.jsxs(o.Alert,{variant:"danger",children:["Unexpected ",a," ",t.keys.map((d,l)=>n.jsxs(n.Fragment,{children:[l!==0&&", ",n.jsx("b",{children:d})]}))," ","from the layout name ",n.jsx("b",{children:i}),".",n.jsx("br",{}),n.jsx("pre",{className:"mt-3",children:r(t)}),n.jsx("br",{})]})}if(t instanceof C){const a=t.keys.length===1?"Key":"Keys";return n.jsxs(o.Alert,{variant:"danger",children:["Expected ",a," ",t.keys.map((d,l)=>n.jsxs(n.Fragment,{children:[l!==0&&", ",n.jsx("b",{children:d})]}))," ","from the layout name ",n.jsx("b",{children:i}),".",n.jsx("br",{}),n.jsx("pre",{className:"mt-3",children:r(t)}),n.jsx("br",{})]})}return t instanceof p?n.jsxs(o.Alert,{variant:"danger",children:["Error on key ",n.jsx("b",{children:t.key})," from the layout name ",n.jsx("b",{children:i}),".",n.jsx("br",{}),n.jsx("pre",{className:"mt-3",children:r(t)}),n.jsx("br",{})]}):n.jsx(Pe,{...e})}const V={hasError:!1,message:"",error:void 0};class Q extends m.Component{constructor(t){super(t),this.reload=()=>{window.location.reload()},this.state=V}static getDerivedStateFromError(){return{hasError:!0}}componentDidCatch(t){t instanceof O&&this.setState({hasError:!0,message:t.message,error:t})}componentDidUpdate(t,r){this.state.hasError&&r.error!==void 0&&t.resetKey!==this.props.resetKey&&this.setState(V)}render(){return this.state.hasError?n.jsxs(o.Container,{className:"mt-2",children:[n.jsx("h4",{children:"Something went wrong"}),n.jsx(Re,{message:this.state.message,error:this.state.error}),n.jsxs("p",{children:["This error has been logged. Please"," ",n.jsxs(o.Button,{size:"sm",onClick:this.reload,children:[n.jsx("i",{className:"fa fa-refresh"})," Reload"]})," ","the application"]})]}):this.props.children}}function $e(e,t,r){if(e&&r===void 0)throw new C(e,[t])}function Te(e,t,r){if(typeof r!="string")throw new p(e,t,"A string is expected")}function _e(e,t,r){if(typeof r!="boolean")throw new p(e,t,"A boolean is expected")}function Be(e,t,r){if(typeof r!="number")throw new p(e,t,"A number is expected")}function P(e,t,r){if(r!==void 0&&typeof r!="boolean")throw new p(e,t,"An optional boolean is expected")}function X(e,t,r){if(r!==void 0&&typeof r!="string")throw new p(e,t,"An optional string is expected")}function He(e,t,r){if(!Array.isArray(r))throw new p(e,t,"A list of string is expected");r.forEach(s=>{if(typeof s!="string")throw new p(e,t,"A list of string is expected")})}function Ve(e,t,r){if(r!==void 0&&typeof r!="string"){if(!Array.isArray(r))throw new p(e,t,"An optional string or list of string is expected");r.forEach(s=>{if(typeof s!="string")throw new p(e,t,"An optional string or list of string is expected")})}}function Le(e,t,r){if(r!==void 0){if(!Array.isArray(r))throw new p(e,t,"An optional list of string is expected");r.forEach(s=>{if(typeof s!="string")throw new p(e,t,"A optional list of string is expected")})}}function ee(e,t,r){if(r!==void 0&&typeof r!="number")throw new p(e,t,"An optional number is expected")}function Ye(e,t,r){if(r!==void 0){if(!Array.isArray(r))throw new p(e,t,"An optional list of numbers is expected");r.forEach(s=>{if(typeof s!="number")throw new p(e,t,"An optional list of numbers is expected")})}}function I(e,t){const{_parentNode:r,_indexFromParent:s,...i}=t;if(e&&Object.keys(i).length>0)throw new M(e,Object.keys(i))}function qe(e,t,r){if(r!=="last"&&typeof r!="number")throw new p(e,t,'"last" or a number is expected')}function Ge(e,t,r){if(r!==void 0&&r!=="h5web"&&r!=="plotly")throw new p(e,t,'"h5web" or "plotly" string is expected')}const Ke=Object.freeze(Object.defineProperty({__proto__:null,assertBoolean:_e,assertDataCollectionId:qe,assertKeyExpected:$e,assertNoUnknownKeys:I,assertNumber:Be,assertOptionalBackend:Ge,assertOptionalBoolean:P,assertOptionalNumber:ee,assertOptionalNumberList:Ye,assertOptionalString:X,assertOptionalStringList:Le,assertOptionalStringOrStringList:Ve,assertString:Te,assertStringList:He},Symbol.toStringTag,{value:"Module"}));function ze({yamlNode:e,panel:t}){const{type:r,style:s,children:i,...a}=e;return I(e,a),n.jsx(o.Row,{className:"ymllayout-row gx-0",style:s,children:j.map(i,(d,l)=>y(d,l,t))})}function Ue({yamlNode:e,panel:t}){const{type:r,style:s,xs:i,children:a,...d}=e;return I(e,d),ee(e,"xs",i),n.jsx(o.Col,{className:A.default("yamymllayout-col",{col:!!i}),style:s,xs:i,children:j.map(e.children,(l,h)=>y(l,h,t))})}const R={};function We(e,t){R[e]=t}function Ze(e,t){if(t===void 0)throw new C(e,["id"]);if(typeof t.id!="string")throw new p(e,"id","A string is expected")}function Je(e,t,r){if(r!==void 0){if(!Array.isArray(r))throw new p(e,"ids","A option list is expected");r.forEach((s,i)=>{try{Ze(e,s)}catch{throw new p(e,"ids",`The hardware description ${i} is wrong`)}})}}function Qe(e){const{providers:t={},yamlNode:r,ids:s,groupid:i,even:a,nowrap:d,...l}=e;if(Je(r,"ids",s),X(r,"groupid",i),P(r,"even",a),P(r,"nowrap",d),I(r,l),!R.HardwareGroup)return n.jsx(o.Alert,{variant:"warning",children:"No `HardwareGroup` component registered"});const h=R.HardwareGroup;return n.jsx(h,{providers:t,ids:s,groupid:i,nowrap:d||!1,even:a||!1})}const $={hardwaregroup:Qe};function Xe(e,t){$[e]=t}function et(e){const{yamlNode:t,panel:r}=e,{type:s,style:i,scroll:a,title:d,...l}=t;if(!(s in $))return n.jsx(g,{children:n.jsx(g.Contents,{children:n.jsxs(o.Alert,{variant:"warning",children:['Unknown component "',s,'"']})})});const h=$[t.type];return r?n.jsx(g,{style:i,scroll:a,children:n.jsxs(m.Suspense,{fallback:n.jsx("p",{children:"Loading..."}),children:[d&&n.jsx(g.Header,{children:d}),n.jsx(g.Contents,{children:n.jsx(h,{...l,yamlNode:t})})]})}):n.jsx(m.Suspense,{fallback:n.jsx("p",{children:"Loading..."}),children:n.jsx(h,{...l,yamlNode:t})})}function tt({yamlNode:e,panel:t}){const r=e.options||{};return n.jsx(o.Container,{className:"ymllayout-container",...r,children:j.map(e.children,(s,i)=>y(s,i,t))})}function nt(e){const{yamlNode:t}=e,r=t.options||{},s={};return r.centerContent&&(s.margin="auto"),n.jsxs(g,{className:"ymllayout-panel",...r,children:[t.title&&n.jsx(g.Header,{children:t.title}),n.jsx(g.Contents,{style:s,children:j.map(t.children,(i,a)=>y(i,a,!1))})]})}const rt=()=>Math.random().toString(36).slice(2,15)+Math.random().toString(36).slice(2,15);function st({yamlNode:e,panel:t}){const r=[];return j.each(e.children,(s,i)=>{r.push(n.jsx(o.Tab,{eventKey:rt(),title:s.title,children:y(s,0,!1)},i))}),t?n.jsxs(g,{className:"ymllayout-tabs",children:[e.title&&n.jsx(g.Header,{children:e.title}),n.jsx(g.Contents,{children:n.jsx(o.Tabs,{mountOnEnter:!0,children:r})})]}):n.jsx(o.Tabs,{children:r})}function it(e){const{node:t}=e,{type:r,title:s,...i}=t;return Z(t,i),n.jsx("div",{style:{gridColumn:"1 / 3"},children:n.jsx("h3",{children:s})})}function at(e){const{node:t,state:r,row:s}=e,{title:i}=t;function a(){if(t.id)return t.id}function d(){if(i!==void 0)return i;if(t.type==="hardware"){const h=a(),u={_parentNode:t._parentNode,_indexFromParent:t._indexFromParent,type:"hardware",id:h,variant:"name",emptyifnone:!0};return y(u,"a",!1)}return""}const l=d();return n.jsxs("div",{style:{textAlign:"center"},children:[n.jsx("h5",{style:{margin:"0px",whiteSpace:"nowrap"},children:l}),r&&n.jsx("div",{style:{position:"relative",top:-5},children:r})]})}function ot(e){const{node:t,row:r}=e,{titlealign:s,title:i,stateinheader:a=!1,variant:d,id:l,...h}=t;let u,c;if(h.type==="hardware")if(u={...h,id:l,variant:d},a){const f={...h,id:l,variant:"state",emptyifnone:!0};c=y(f,"k",!1)}else c=null;else u=h,c=null;return n.jsxs(n.Fragment,{children:[n.jsx("div",{style:{gridColumn:1,alignSelf:s??"center"},children:n.jsx(at,{node:t,state:c,row:r})}),n.jsx("div",{style:{gridColumn:2},children:y(u,"k",!1)})]})}function lt(e){const{yamlNode:t,panel:r}=e,{type:s,children:i,options:a={},title:d,...l}=t;return Z(t,l),n.jsxs(g,{className:"ymllayout-form",...a,children:[t.title&&n.jsx(g.Header,{children:t.title}),n.jsx(g.Contents,{children:n.jsx("div",{style:{display:"grid",gridTemplateColumns:"min-content auto"},children:j.map(i,(h,u)=>h.type==="formheader"?n.jsx(it,{node:h,row:u},u):n.jsx(ot,{node:h,row:u},u))})})]})}function ct(e){const{yamlNode:t,panel:r}=e;return n.jsxs("div",{className:"ymllayout-grid",style:{gridTemplateColumns:t.columns,gridTemplateRows:t.rows},children:[j.map(t.children,(s,i)=>{const{columnSpan:a=1,rowSpan:d=1,...l}=s,h=a>1?`span ${a}`:void 0,u=d>1?`span ${d}`:void 0;return n.jsx("div",{className:"ymllayout-grid-cell",style:{gridColumn:h,gridRow:u},children:y(l,i,r)},i)})," "]})}function dt({yamlNode:e,panel:t}){const r=e.options||{};return n.jsx(Fe,{panel:t,options:r,children:n.jsx("div",{children:e.label})})}const te={row:ze,col:Ue,container:tt,component:et,panel:nt,tabs:st,form:lt,grid:ct,label:dt};Object.entries(te).forEach(([e,t])=>{W(e,t)});function ut(e){var r;const t=m.useMemo(()=>J(e.layout),[e.layout]);return t.error?n.jsx("div",{className:`${e.className??""} ymllayout-main`,id:e.id,children:n.jsxs(g,{children:[n.jsx(g.Header,{children:"Layout Error"}),n.jsxs(g.Contents,{children:[n.jsxs("p",{children:["File: ",t.name]}),n.jsx(o.Alert,{variant:"warning",children:n.jsx("pre",{className:"mb-0",children:t.error})})]})]})}):n.jsx("div",{className:`${e.className??""} ymllayout-main`,id:e.id,children:n.jsx(Q,{resetKey:t,children:(r=t.children)==null?void 0:r.map((s,i)=>y(s,i))})})}const ht=Object.freeze(Object.defineProperty({__proto__:null},Symbol.toStringTag,{value:"Module"}));exports.Formatting=ue;exports.Frontend=fe;exports.FullSizer=U;exports.HWObject=ht;exports.HardwareInputNumber=k;exports.HardwareNumericStep=z;exports.HardwareSchema=Me;exports.HardwareState=pe;exports.HardwareTemplate=S;exports.HardwareTypes=Ee;exports.HardwareVariant=Oe;exports.Info=me;exports.KeyError=p;exports.MissingKeysError=C;exports.MotorDefault=we;exports.Multiposition=je;exports.NoObject=ve;exports.NumericStep=K;exports.Property=Ne;exports.ShutterDefault=Se;exports.TypeIcon=b;exports.YAMLErrorBoundary=Q;exports.YAMLLayout=ut;exports.YamlAsserts=Ke;exports.registerHardwareComponent=We;exports.registerYamlComponent=Xe;exports.registerYamlType=W;exports.renderYamlNode=y;exports.yamlMap=te;
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const n=require("react/jsx-runtime"),w=require("lodash"),a=require("react-bootstrap"),m=require("react"),he=require("classnames"),fe=require("debug"),q=e=>e&&typeof e=="object"&&"default"in e?e:{default:e},S=q(he),me=q(fe);function pe(e){const{activeMessage:t="Online",inactiveMessage:r="Offline",message:s="This device is"}=e;return n.jsx("div",{className:`dot-indicator small bg-${e.online?"success":"danger"}`,title:`${s} ${e.online?t:r}`})}function b(e){const{name:t,icon:r}=e;return n.jsxs("div",{className:"icon",title:t,children:[n.jsx("i",{className:`fa ${r}`}),n.jsx(pe,{...e})]})}function xe(e){const t={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"},r=Math.log(e)/Math.log(1e3),s=!Number.isInteger(r),i=3*Math.ceil(r-(s?1:0)),o=i===0?"":t[i];return{scalar:e*10**-i,prefix:o,multiplier:10**-i}}function ge(e){return e.charAt(0).toUpperCase()+e.slice(1)}function G(e){if(e<60)return`${Math.round(e)} sec`;const t=Math.round(e/60),r=t%60,s=Math.floor(t/60);return s?`${s} hr ${r} min`:`${r} min`}function je(e){return e>0?(662607004e-42*299792458/(e*1e-10)/160218e-24*.001).toFixed(4):0}function we(e,t){return Number.parseFloat(e.toFixed(t))}const ye=Object.freeze(Object.defineProperty({__proto__:null,formatEng:xe,round:we,toEnergy:je,toHoursMins:G,ucfirst:ge},Symbol.toStringTag,{value:"Module"}));function ve(e){const{hardware:t}=e;function r(d){t.requestChange({function:"reset"})}const s={"Front End":"feitlk",Experimental:"expitlk",PSS:"pssitlk"},i={Current:`${t.properties.current.toFixed(1)} mA`,Mode:t.properties.mode,Refill:G(t.properties.refill),Message:n.jsx("pre",{children:t.properties.message})};function o(d){if(!(d in t.properties))return"UNKNOWN";const l=t.properties[d];return!l||typeof l!="string"?"UNKNOWN":l}return n.jsx(a.OverlayTrigger,{trigger:"click",rootClose:!0,overlay:n.jsxs(a.Popover,{id:"popid",children:[n.jsxs(a.Popover.Header,{children:[t.name," Details"]}),n.jsxs(a.Popover.Body,{children:[n.jsx("h6",{children:"Status"}),n.jsx("pre",{children:t.properties.status}),n.jsx("h6",{children:"Interlocks"}),n.jsx(a.Container,{children:w.map(s,(d,l)=>n.jsxs(a.Row,{children:[n.jsxs(a.Col,{children:[l,":"]}),n.jsx(a.Col,{children:n.jsx(a.Badge,{bg:o(d)==="ON"?"success":"danger",children:o(d)})})]},l))}),n.jsx("h6",{children:"Ring Status"}),n.jsx(a.Container,{children:w.map(i,(d,l)=>n.jsxs(a.Row,{children:[n.jsxs(a.Col,{children:[l,":"]}),n.jsx(a.Col,{children:d})]},l))}),n.jsx("div",{className:"d-grid gap-2",children:n.jsx(a.Button,{disabled:e.disabled,onClick:r,children:"Reset"})})]})]}),children:n.jsx(a.Button,{className:"flex-grow-0",title:"Shutter Details",children:n.jsx("i",{className:"fa fa-ellipsis-h"})})})}function be(e){const{hardware:t,options:r={}}=e;function s(i){t.requestChange({function:t.properties.frontend==="FE open"?"close":"open"})}return n.jsxs("div",{className:"hw-component",children:[n.jsxs("div",{className:"hw-head",children:[n.jsx(b,{name:"Frontend",icon:"fam-hardware-frontend",online:t.online}),n.jsx("div",{className:"name",children:t.name}),n.jsx(a.Badge,{bg:t.properties.state==="OPEN"||t.properties.state==="RUNNING"?"success":"danger",children:t.properties.state})]}),n.jsx("div",{className:"hw-content",children:n.jsxs(a.ButtonGroup,{className:"d-flex",children:[n.jsx(a.Button,{variant:t.properties.frontend==="FE open"?"danger":"success",onClick:s,disabled:e.disabled,children:t.properties.frontend==="FE open"?"Close":"Open"}),n.jsx(ve,{...e})]})})]})}function Ne(e){const{hardware:t,options:r={}}=e;function s(){const i=r.property;if(i===void 0)return"property is not set";if(i===null)return"property is null";let o=t;for(const d of i.split("/"))if(o=o[d],o===void 0)return`property '${i}' not found`;return`${o}`}return n.jsx(n.Fragment,{children:s()})}function O(e){const{headerMode:t,hardware:r}=e;function s(){return r.alias?r.alias:r.name?r.name:r.id}const i=s();switch(t){case"front":return n.jsx("div",{className:"hw-component",children:n.jsxs("div",{className:"hw-single",children:[e.widgetIcon,n.jsx("div",{className:"name",children:i}),n.jsx("div",{className:"d-inline-block",children:e.widgetContent})]})});case"none":return n.jsx("div",{className:"hw-component",children:n.jsx("div",{className:"hw-single",children:e.widgetContent})});case"state":return e.widgetState;default:return n.jsxs("div",{className:"hw-component",children:[n.jsxs("div",{className:"hw-head",children:[e.widgetIcon,n.jsx("div",{className:"name",children:n.jsx(a.Form.Label,{htmlFor:r.id,children:i})}),e.widgetState,e.hardware.errors&&e.hardware.errors.length>0&&n.jsx(a.OverlayTrigger,{trigger:"click",placement:"bottom",rootClose:!0,overlay:n.jsxs(a.Popover,{id:e.hardware.id,style:{maxWidth:500},children:[n.jsx(a.Popover.Header,{children:"Device Errors"}),n.jsxs(a.Popover.Body,{children:["There were errors with properties on this device:",n.jsx("ul",{children:e.hardware.errors.map(o=>n.jsxs("li",{children:[o.property,":",n.jsxs("span",{className:"stack-trace",children:[o.traceback,n.jsx("br",{}),o.exception]})]}))})]})]}),children:n.jsx(a.Button,{variant:"danger",size:"sm",children:n.jsx("i",{className:"fa fa-exclamation-triangle"})})})]}),n.jsx("div",{className:"hw-content",children:e.widgetContent})]})}}function H(e){const t={display:"inline-block",minWidth:""};return e.minWidth&&(t.minWidth=`${e.minWidth}em`),n.jsx("div",{style:t,children:n.jsx(a.Badge,{bg:e.variant,children:e.state})})}function K(e){const{hardware:t}=e;function r(){if(!t.online)return"OFFLINE";let i="UNKNOWN";return e.hardware.properties.state&&([i]=e.hardware.properties.state),i}const s=r();return n.jsx(H,{state:s,minWidth:6,variant:s==="READY"?"success":"warning"})}function z(e){const{hardware:t}=e;function r(){if(!t.online)return"OFFLINE";const o=t.properties.state;return e.useReadyState&&(o==="OPEN"||o==="CLOSED")?"READY":o}const s=r();function i(){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 n.jsx(H,{state:s,minWidth:6,variant:i()})}const Ce=Object.freeze(Object.defineProperty({__proto__:null,HardwareState:H,MotorState:K,ShutterState:z},Symbol.toStringTag,{value:"Module"})),Se=m.forwardRef((e,t)=>{const r=m.useRef(null),[s,i]=m.useState(e.step),o=j=>{const k=t;if(r.current===null)return;let B=Number.parseFloat(k.current.value);const V=Number.parseFloat(r.current.value);B+=j?V:-V,k.current.value=`${B}`,e.onStep&&e.onStep({target:k.current})},{onStep:d,step:l,overlay:h,incIcon:u,decIcon:c,swapIncDec:f,onKeyDown:g,horizontalArrows:N,largeArrows:F,...v}=e,_=j=>{j.key==="ArrowUp"?(j.preventDefault(),o(!0)):j.key==="ArrowDown"?(j.preventDefault(),o(!1)):g&&g(j)};if(!e.step)return n.jsx(a.Form.Control,{ref:t,type:"number",step:"any",onKeyDown:_,...v});const ue=w.map(e.steps||[e.step],j=>n.jsx("option",{value:j,children:j},j));return n.jsx("div",{className:S.default("numeric-step",{"numeric-step-large":F,"numeric-step-horizontal":N}),children:n.jsxs(a.InputGroup,{children:[n.jsx(a.Form.Control,{onKeyDown:_,ref:t,type:"number",step:"any",...v}),n.jsxs(n.Fragment,{children:[h,!h&&n.jsxs(a.InputGroup.Text,{className:"d-flex flex-column",children:[n.jsx(a.Form.Control,{ref:r,as:"select",className:"step-size",defaultValue:s,onChange:j=>i(Number.parseFloat(j.target.value)),children:ue}),e.unit&&n.jsx("div",{children:e.unit}),!u&&!c&&n.jsxs(n.Fragment,{children:[n.jsx(a.Button,{className:"step step-up",disabled:e.disabled,onClick:j=>o(!0)}),n.jsx(a.Button,{className:"step step-down",disabled:e.disabled,onClick:j=>o(!1)})]})]}),c&&f&&n.jsx(a.Button,{disabled:e.disabled,onClick:j=>o(!1),children:n.jsx("i",{className:`fa fa-fw fa-${c}`})}),u&&n.jsx(a.Button,{disabled:e.disabled,onClick:j=>o(!0),children:n.jsx("i",{className:`fa fa-fw fa-${u}`})}),c&&!f&&n.jsx(a.Button,{disabled:e.disabled,onClick:j=>o(!1),children:n.jsx("i",{className:`fa fa-fw fa-${c}`})})]})]})})}),U=Se;function W(e){const t=m.useRef(null),[r,s]=m.useState(!1),[i,o]=m.useState(!1);m.useEffect(()=>{t.current&&(e.hardwareValue===null?t.current.value="":t.current.value=e.hardwareValue.toString(),s(!1))},[e.hardwareValue]);function d(f){let g=f;e.precision!==void 0&&(g=Number.parseFloat(g).toFixed(e.precision)),t!=null&&t.current&&(t.current.value=g)}function l(){r&&setTimeout(()=>{d(e.hardwareValue),s(!1)},3e3)}function h(f){e.hardwareValue!==null&&(s(!0),t!=null&&t.current&&(t.current.value=f.target.value),f.target.value===e.hardwareValue.toString()&&s(!1))}function u(f){s(!1),e.onMoveRequested(f.target.value)}function c(f){switch(f.key){case"Enter":{s(!1);const g=Number.parseFloat(f.target.value),N=e.onMoveRequested(g);N&&N.catch(()=>{o(!0),setTimeout(()=>{d(e.hardwareValue),o(!1)},2e3)})}f.preventDefault(),f.stopPropagation();break;case"Esc":case"Escape":r&&(o(!1),s(!1),d(e.hardwareValue)),f.target.blur(),f.preventDefault(),f.stopPropagation();break}}return n.jsx(U,{id:e.id,className:S.default({"form-control-edited":r,"form-control-error":i,"hw-moving":e.hardwareIsMoving}),type:e.readOnly?"text":"number",ref:t,precision:e.precision,onChange:h,onBlur:l,onStep:u,onKeyDown:c,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?n.jsx(a.Button,{variant:"danger",onClick:e.onAbortRequested,children:n.jsx("i",{className:"fa fa-times"})}):null})}function D(e){const t=m.useRef(null),[r,s]=m.useState(!1),[i,o]=m.useState(!1);function d(c){return e.precision!==void 0?Number.parseFloat(c).toFixed(e.precision):c}m.useEffect(()=>{var c;t.current&&(t.current.value=d((c=e.hardwareValue)==null?void 0:c.toString()),s(!1))},[e.hardwareValue,e.precision]);function l(c){const f=d(c);t!=null&&t.current&&(t.current.value=f)}function h(c){switch(c.key){case"Enter":{s(!1);const f=Number.parseFloat(c.target.value),g=e.onMoveRequested(f);g&&g.catch(()=>{o(!0),setTimeout(()=>{l(e.hardwareValue),o(!1)},2e3)}),c.preventDefault(),c.stopPropagation();break}case"Esc":case"Escape":r&&(o(!1),s(!1),l(e.hardwareValue)),c.target.blur(),c.preventDefault(),c.stopPropagation();break}}function u(c){s(!0),c.target,t!=null&&t.current&&(t.current.value=c.target.value),c.target.value===e.hardwareValue.toString()&&s(!1)}return n.jsx(a.Form.Control,{className:S.default({"form-control-edited":r,"form-control-error":i,"hw-moving":e.hardwareIsMoving}),type:"number",ref:t,onChange:u,onKeyDown:h,disabled:e.readOnly||e.hardwareIsMoving||e.hardwareIsDisabled,step:e.step})}function Oe(e){function t(i){return e.hardware.requestChange({property:"velocity",value:i})}function r(i){return e.hardware.requestChange({property:"acceleration",value:i})}let s="UNKNOWN";return e.hardware.properties.state&&([s]=e.hardware.properties.state),n.jsx(a.OverlayTrigger,{trigger:"click",rootClose:!0,overlay:n.jsxs(a.Popover,{id:"popid",children:[n.jsxs(a.Popover.Header,{children:[e.hardware.name," details"]}),n.jsxs(a.Popover.Body,{children:[n.jsxs(a.Form.Group,{children:[n.jsx(a.Form.Label,{children:"Velocity"}),n.jsx(D,{hardwareValue:e.hardware.properties.velocity,onMoveRequested:t,hardwareIsDisabled:e.disabled,hardwareIsReady:s==="READY",hardwareIsMoving:s==="MOVING",readOnly:e.readOnly})]}),n.jsxs(a.Form.Group,{children:[n.jsx(a.Form.Label,{children:"Acceleration"}),n.jsx(D,{hardwareValue:e.hardware.properties.acceleration,onMoveRequested:r,hardwareIsDisabled:e.disabled,hardwareIsReady:s==="READY",hardwareIsMoving:s==="MOVING",readOnly:e.readOnly})]})]})]}),children:n.jsx(a.Button,{children:n.jsx("i",{className:"fa fa-ellipsis-h"})})})}function Ee(e){const{hardware:t,options:r={}}=e;function s(){t.requestChange({function:"stop"})}function i(u){return t.requestChange({property:"position",value:u,function:"move"})}let o="UNKNOWN";e.hardware.properties.state&&([o]=e.hardware.properties.state);const d=n.jsx(b,{name:"Motor",icon:"fam-hardware-motor",online:t.online}),l=n.jsx(K,{hardware:t}),h=e.options?e.options.header:"top";return n.jsx(O,{hardware:t,widgetIcon:d,widgetState:l,widgetContent:n.jsxs(a.InputGroup,{children:[n.jsx(W,{id:t.id,hardwareValue:t.properties.position,hardwareIsDisabled:e.disabled,hardwareIsReady:o==="READY",hardwareIsMoving:o==="MOVING",onMoveRequested:i,onAbortRequested:s,precision:r.precision,readOnly:r.readOnly,step:r.step,steps:r.steps,incIcon:r.incicon,decIcon:r.decicon,swapIncDec:r.swapincdec,horizontalArrows:r.horizontalarrows,largeArrows:r.largearrows}),t.properties.unit&&n.jsx(a.InputGroup.Text,{children:t.properties.unit}),o!=="MOVING"&&r.extended&&n.jsx(Oe,{hardware:t,disabled:e.disabled,readOnly:r.readOnly}),o==="MOVING"&&!e.disabled&&!r.step&&n.jsx(a.Button,{variant:"danger",onClick:s,children:n.jsx("i",{className:"fa fa-times"})})]}),headerMode:h})}function Me(e){const{hardware:t,options:r={}}=e,s=m.useRef(null);m.useEffect(()=>{if(!s.current){console.error("selectionRef ref is unset");return}s.current.value=t.properties.position},[t.properties.position]);function i(l){if(console.debug("change",l),!s||!s.current){console.error("selection ref is unset");return}t.requestChange({value:s.current.value,function:"move"})}function o(l){t.requestChange({function:"stop"})}const d=w.map(t.properties.positions,l=>n.jsx("option",{title:l.description,children:l.position},l.position));return n.jsxs("div",{className:"hw-component",children:[n.jsxs("div",{className:"hw-head",children:[n.jsx(b,{name:"Multiposition",icon:"fam-hardware-multiposition",online:t.online}),n.jsx("div",{className:"name",children:t.name}),n.jsx(a.Badge,{bg:t.properties.state==="READY"?"success":"warning",children:t.properties.state})]}),n.jsx("div",{className:"hw-content",children:n.jsxs(a.InputGroup,{children:[n.jsxs(a.Form.Control,{className:"custom-select",as:"select",ref:s,disabled:e.disabled,defaultValue:t.properties.position,children:[n.jsx("option",{disabled:!0,children:"unknown"}),d]}),t.properties.state!=="MOVING"&&n.jsx(a.Button,{onClick:i,disabled:e.disabled,children:"Move"}),t.properties.state==="MOVING"&&!e.disabled&&n.jsx(a.Button,{variant:"danger",onClick:o,children:n.jsx("i",{className:"fa fa-times"})})]})})]})}const Ae=me.default("daiquiri.components.hardware.NoObject");function Ie(e){if(e.options.emptyifnone)return Ae('Component id:"%s" name:"%s" not displayed cause setup with emptyifnone.',e.id,e.name),n.jsx(n.Fragment,{});const t=n.jsx(b,{name:"NoObject",icon:"fam-hardware-any",online:!1}),r=n.jsx(n.Fragment,{}),s=n.jsx(n.Fragment,{children:"Missing"}),i=e.options?e.options.header:"top",o={id:e.id,name:e.name??"",alias:null,online:!1,properties:{},type:""};return n.jsx(O,{hardware:o,widgetIcon:t,widgetState:r,widgetContent:s,headerMode:i})}function Fe(e){const t=e.online?"READY":"OFFLINE";return n.jsx(a.Badge,{bg:t==="READY"?"success":"warning",children:t})}function ke(e){const{hardware:t,options:r={}}=e,s=n.jsx(b,{name:"Optic",icon:"fa-cog",online:t.online}),i=n.jsx(Fe,{...t});function o(){const c=r.property;if(c===void 0)return"property is not set";if(c===null)return"property is null";let f=t;for(const g of c.split("/"))if(f=f[g],f===void 0)return`property '${c}' not found`;return`${f}`}function d(){const c=r.unit;if(!c)return null;if(!c.includes("properties"))return c;let f=e;for(const g of c.split("/"))if(f=f[g],f===void 0)return null;return`${f}`}const l=d(),h=n.jsxs(a.InputGroup,{children:[n.jsx(a.Form.Control,{value:o(),readOnly:!0}),l&&n.jsx(a.InputGroup.Text,{children:l})]}),u=e.options.header||"top";return n.jsx(O,{hardware:t,widgetIcon:s,widgetState:i,widgetContent:h,headerMode:u})}function De(e){const{hardware:t}=e,r=()=>{t.requestChange({function:"reset"})};return n.jsx(a.OverlayTrigger,{trigger:"click",rootClose:!0,overlay:n.jsxs(a.Popover,{id:"popid",children:[n.jsxs(a.Popover.Header,{children:[t.name," Details"]}),n.jsxs(a.Popover.Body,{children:[n.jsx("h6",{children:"Status"}),n.jsx("pre",{children:t.properties.status}),n.jsx("div",{className:"d-grid gap-2",children:n.jsx(a.Button,{onClick:r,disabled:e.disabled,children:"Reset"})})]})]}),children:n.jsx(a.Button,{className:"flex-grow-0",title:"Shutter Details",children:n.jsx("i",{className:"fa fa-ellipsis-h"})})})}function $e(e){const{hardware:t,options:r={}}=e,s=n.jsx(b,{name:"Shutter",icon:"fam-hardware-shutter",online:t.online}),i=n.jsx(z,{hardware:t});function o(){return t.properties?t.properties.state:"UNKNOWN"}function d(v){return v==="OPEN"?["Close","close"]:v==="CLOSED"?["Open","open"]:v==="DISABLED"||v==="STANDBY"||v==="FAULT"?["Closed",""]:v==="MOVING"?["...",""]:["Unknown",""]}const l=o(),[h,u]=d(l),f={OPEN:"danger",CLOSED:"success",MOVING:"warning",DISABLED:"secondary",STANDBY:"danger",FAULT:"fatal",UNKNOWN:"warning"}[l]||"danger";function g(){t.requestChange({function:u})}const N=n.jsxs(a.ButtonGroup,{className:"d-flex flex-nowrap",children:[n.jsx(a.Button,{variant:f,onClick:g,disabled:e.disabled||u==="",children:h}),r.extended&&n.jsx(De,{...e})]}),F=e.options.header||"top";return n.jsx(O,{hardware:t,widgetIcon:s,widgetState:i,widgetContent:N,headerMode:F})}class Pe extends m.Component{constructor(){super(...arguments),this.variants={}}render(){let t=this.variants.default;return this.props.options.variant in this.variants&&(t=this.variants[this.props.options.variant]),n.jsx(t,{...this.props})}}function Z(e){const[t,r]=m.useState({}),s=m.useRef(null);return m.useEffect(()=>{if(s.current){const i=s.current;r({width:i.clientWidth,height:i.clientHeight})}},[]),n.jsx("div",{ref:s,style:{width:"100%",height:"100%"},className:e.className,children:t.width>0&&n.jsx("div",{className:"full-sizer",style:{width:`${t.width}px`,height:`${t.height}px`,overflow:"scroll"},children:e.children})})}function Re(e){return n.jsx("div",{className:"panel-header",style:e.style,children:e.children})}function Te(e){return n.jsx("div",{className:"panel-contents",style:e.style,children:e.children})}function p(e){const t=e.scroll?Z:m.Fragment;return n.jsx("div",{className:`panel ${e.className??""}`,style:e.style,children:n.jsx(t,{children:e.children})})}p.Header=Re;p.Contents=Te;const He=Object.freeze(Object.defineProperty({__proto__:null},Symbol.toStringTag,{value:"Module"})),_e=Object.freeze(Object.defineProperty({__proto__:null},Symbol.toStringTag,{value:"Module"})),M={};function J(e,t){M[e]=t}function y(e,t,r=!0){if(!e)return n.jsx(n.Fragment,{});const{type:s}=e,i=s&&s in M?M[s]:M.component;return n.jsx(i,{yamlNode:e,panel:r},t)}function Be({children:e,key:t,panel:r,options:s}){return r?n.jsx(p,{style:s.style,scroll:s.scroll,children:n.jsx(p.Contents,{children:e})},t):n.jsx(n.Fragment,{children:m.Children.map(e,i=>m.isValidElement(i)?m.cloneElement(i,{key:t,...i.props}):void 0)})}function Q(e,t){const{_parentNode:r,_indexFromParent:s,...i}=t;if(e&&Object.keys(i).length>0)throw new A(e,Object.keys(i))}class E extends Error{constructor(t,r){super(t),this.yamlNode=r}}class A extends E{constructor(t,r){super(`Unexpected keys: ${r.join(", ")}`,t),this.keys=r}}class C extends E{constructor(t,r){super(`Keys ${r.join(", ")} are missing`,t),this.keys=r}}class x extends E{constructor(t,r,s){super(`Key ${r} error: ${s}`,t),this.key=r,this.keyMessage=s}}function Ve(e){let t=e;for(;t._parentNode;)t=t._parentNode;return t}function Ye(e){const t=[];let r=e;for(;r;)t.push({node:r,indexFromParent:r._indexFromParent}),r=r._parentNode;return t.reverse(),t}function X(e,t=null,r=null){if(e._parentNode)throw new Error("Attribute _parentNode was already defined by the yml layout.");const s={...e,_parentNode:t,_indexFromParent:r};if(e.children){const i=[...e.children];Object.freeze(i),s.children=i.map((o,d)=>X(o,s,d))}return Object.freeze(s),s}function Le(e){return n.jsx(a.Alert,{variant:"danger",children:e.message})}function qe(e){const{error:t}=e;if(!(t instanceof E))return n.jsx(n.Fragment,{});function r(o,d=3){const l=Ye(o.yamlNode),h=[];let u="";for(let c=1;c<l.length;c++){const{node:f,indexFromParent:g}=l[c];h.push(`${u}children:`),u+=" ".repeat(d),g===1?h.push(`${u}- type: ...`):(g??0>1)&&h.push(`${u}...`,`${u}...`,`${u}# children number ${g??0+1}`),h.push(`${u}- type: ${f.type}`),u+=" ".repeat(2)}return o instanceof A?o.keys.forEach(c=>{h.push(`${u}${c}: ... ${" ".repeat(50-u.length-c.length)}<-- unexpected key`)}):o instanceof C?o.keys.forEach(c=>{h.push(`${u}???: ${" ".repeat(50-u.length-c.length)}<-- key **${c}** is expected`)}):o instanceof x&&h.push(`${u}${o.key}: ${" ".repeat(50-u.length-o.key.length)}<-- ${o.keyMessage}`),h.join(`
2
+ `)}const i=Ve(t.yamlNode).name;if(t instanceof A){const o=t.keys.length===1?"key":"keys";return n.jsxs(a.Alert,{variant:"danger",children:["Unexpected ",o," ",t.keys.map((d,l)=>n.jsxs(n.Fragment,{children:[l!==0&&", ",n.jsx("b",{children:d})]}))," ","from the layout name ",n.jsx("b",{children:i}),".",n.jsx("br",{}),n.jsx("pre",{className:"mt-3",children:r(t)}),n.jsx("br",{})]})}if(t instanceof C){const o=t.keys.length===1?"Key":"Keys";return n.jsxs(a.Alert,{variant:"danger",children:["Expected ",o," ",t.keys.map((d,l)=>n.jsxs(n.Fragment,{children:[l!==0&&", ",n.jsx("b",{children:d})]}))," ","from the layout name ",n.jsx("b",{children:i}),".",n.jsx("br",{}),n.jsx("pre",{className:"mt-3",children:r(t)}),n.jsx("br",{})]})}return t instanceof x?n.jsxs(a.Alert,{variant:"danger",children:["Error on key ",n.jsx("b",{children:t.key})," from the layout name ",n.jsx("b",{children:i}),".",n.jsx("br",{}),n.jsx("pre",{className:"mt-3",children:r(t)}),n.jsx("br",{})]}):n.jsx(Le,{...e})}const Y={hasError:!1,message:"",error:void 0};class ee extends m.Component{constructor(t){super(t),this.reload=()=>{window.location.reload()},this.state=Y}static getDerivedStateFromError(){return{hasError:!0}}componentDidCatch(t){t instanceof E&&this.setState({hasError:!0,message:t.message,error:t})}componentDidUpdate(t,r){this.state.hasError&&r.error!==void 0&&t.resetKey!==this.props.resetKey&&this.setState(Y)}render(){return this.state.hasError?n.jsxs(a.Container,{className:"mt-2",children:[n.jsx("h4",{children:"Something went wrong"}),n.jsx(qe,{message:this.state.message,error:this.state.error}),n.jsxs("p",{children:["This error has been logged. Please"," ",n.jsxs(a.Button,{size:"sm",onClick:this.reload,children:[n.jsx("i",{className:"fa fa-refresh"})," Reload"]})," ","the application"]})]}):this.props.children}}function Ge(e,t,r){if(e&&r===void 0)throw new C(e,[t])}function Ke(e,t,r){if(typeof r!="string")throw new x(e,t,"A string is expected")}function ze(e,t,r){if(typeof r!="boolean")throw new x(e,t,"A boolean is expected")}function Ue(e,t,r){if(typeof r!="number")throw new x(e,t,"A number is expected")}function $(e,t,r){if(r!==void 0&&typeof r!="boolean")throw new x(e,t,"An optional boolean is expected")}function te(e,t,r){if(r!==void 0&&typeof r!="string")throw new x(e,t,"An optional string is expected")}function We(e,t,r){if(!Array.isArray(r))throw new x(e,t,"A list of string is expected");r.forEach(s=>{if(typeof s!="string")throw new x(e,t,"A list of string is expected")})}function Ze(e,t,r){if(r!==void 0&&typeof r!="string"){if(!Array.isArray(r))throw new x(e,t,"An optional string or list of string is expected");r.forEach(s=>{if(typeof s!="string")throw new x(e,t,"An optional string or list of string is expected")})}}function Je(e,t,r){if(r!==void 0){if(!Array.isArray(r))throw new x(e,t,"An optional list of string is expected");r.forEach(s=>{if(typeof s!="string")throw new x(e,t,"A optional list of string is expected")})}}function ne(e,t,r){if(r!==void 0&&typeof r!="number")throw new x(e,t,"An optional number is expected")}function Qe(e,t,r){if(r!==void 0){if(!Array.isArray(r))throw new x(e,t,"An optional list of numbers is expected");r.forEach(s=>{if(typeof s!="number")throw new x(e,t,"An optional list of numbers is expected")})}}function I(e,t){const{_parentNode:r,_indexFromParent:s,...i}=t;if(e&&Object.keys(i).length>0)throw new A(e,Object.keys(i))}function Xe(e,t,r){if(r!=="last"&&typeof r!="number")throw new x(e,t,'"last" or a number is expected')}function et(e,t,r){if(r!==void 0&&r!=="h5web"&&r!=="plotly")throw new x(e,t,'"h5web" or "plotly" string is expected')}const tt=Object.freeze(Object.defineProperty({__proto__:null,assertBoolean:ze,assertDataCollectionId:Xe,assertKeyExpected:Ge,assertNoUnknownKeys:I,assertNumber:Ue,assertOptionalBackend:et,assertOptionalBoolean:$,assertOptionalNumber:ne,assertOptionalNumberList:Qe,assertOptionalString:te,assertOptionalStringList:Je,assertOptionalStringOrStringList:Ze,assertString:Ke,assertStringList:We},Symbol.toStringTag,{value:"Module"}));function nt({yamlNode:e,panel:t}){const{type:r,style:s,children:i,...o}=e;return I(e,o),n.jsx(a.Row,{className:"ymllayout-row gx-0",style:s,children:w.map(i,(d,l)=>y(d,l,t))})}function rt({yamlNode:e,panel:t}){const{type:r,style:s,xs:i,children:o,...d}=e;return I(e,d),ne(e,"xs",i),n.jsx(a.Col,{className:S.default("yamymllayout-col",{col:!!i}),style:s,xs:i,children:w.map(e.children,(l,h)=>y(l,h,t))})}const P={};function st(e,t){P[e]=t}function it(e,t){if(t===void 0)throw new C(e,["id"]);if(typeof t.id!="string")throw new x(e,"id","A string is expected")}function ot(e,t,r){if(r!==void 0){if(!Array.isArray(r))throw new x(e,"ids","A option list is expected");r.forEach((s,i)=>{try{it(e,s)}catch{throw new x(e,"ids",`The hardware description ${i} is wrong`)}})}}function at(e){const{providers:t={},yamlNode:r,ids:s,groupid:i,even:o,nowrap:d,...l}=e;if(ot(r,"ids",s),te(r,"groupid",i),$(r,"even",o),$(r,"nowrap",d),I(r,l),!P.HardwareGroup)return n.jsx(a.Alert,{variant:"warning",children:"No `HardwareGroup` component registered"});const h=P.HardwareGroup;return n.jsx(h,{providers:t,ids:s,groupid:i,nowrap:d||!1,even:o||!1})}const R={hardwaregroup:at};function re(e,t){R[e]=t}function lt(e){Object.entries(e).forEach(([t,r])=>re(t,r))}function ct(e){const{yamlNode:t,panel:r}=e,{type:s,style:i,scroll:o,title:d,...l}=t;if(!(s in R))return n.jsx(p,{children:n.jsx(p.Contents,{children:n.jsxs(a.Alert,{variant:"warning",children:['Unknown component "',s,'"']})})});const h=R[t.type];return r?n.jsx(p,{style:i,scroll:o,children:n.jsxs(m.Suspense,{fallback:n.jsx("p",{children:"Loading..."}),children:[d&&n.jsx(p.Header,{children:d}),n.jsx(p.Contents,{children:n.jsx(h,{...l,yamlNode:t})})]})}):n.jsx(m.Suspense,{fallback:n.jsx("p",{children:"Loading..."}),children:n.jsx(h,{...l,yamlNode:t})})}function dt({yamlNode:e,panel:t}){const r=e.options||{};return n.jsx(a.Container,{className:"ymllayout-container",...r,children:w.map(e.children,(s,i)=>y(s,i,t))})}function ut(e){const{yamlNode:t}=e,r=t.options||{},s={};return r.centerContent&&(s.margin="auto"),n.jsxs(p,{className:"ymllayout-panel",...r,children:[t.title&&n.jsx(p.Header,{children:t.title}),n.jsx(p.Contents,{style:s,children:w.map(t.children,(i,o)=>y(i,o,!1))})]})}const ht=()=>Math.random().toString(36).slice(2,15)+Math.random().toString(36).slice(2,15);function ft({yamlNode:e,panel:t}){const r=[];return w.each(e.children,(s,i)=>{r.push(n.jsx(a.Tab,{eventKey:ht(),title:s.title,children:y(s,0,!1)},i))}),t?n.jsxs(p,{className:"ymllayout-tabs",children:[e.title&&n.jsx(p.Header,{children:e.title}),n.jsx(p.Contents,{children:n.jsx(a.Tabs,{mountOnEnter:!0,children:r})})]}):n.jsx(a.Tabs,{children:r})}function mt(e){const{node:t}=e,{type:r,title:s,...i}=t;return Q(t,i),n.jsx("div",{style:{gridColumn:"1 / 3"},children:n.jsx("h3",{children:s})})}function pt(e){const{node:t,state:r,row:s}=e,{title:i}=t;function o(){if(t.id)return t.id}function d(){if(i!==void 0)return i;if(t.type==="hardware"){const h=o(),u={_parentNode:t._parentNode,_indexFromParent:t._indexFromParent,type:"hardware",id:h,variant:"name",emptyifnone:!0};return y(u,"a",!1)}return""}const l=d();return n.jsxs("div",{style:{textAlign:"center"},children:[n.jsx("h5",{style:{margin:"0px",whiteSpace:"nowrap"},children:l}),r&&n.jsx("div",{style:{position:"relative",top:-5},children:r})]})}function xt(e){const{node:t,row:r}=e,{titlealign:s,title:i,stateinheader:o=!1,variant:d,id:l,...h}=t;let u,c;if(h.type==="hardware")if(u={...h,id:l,variant:d},o){const f={...h,id:l,variant:"state",emptyifnone:!0};c=y(f,"k",!1)}else c=null;else u=h,c=null;return n.jsxs(n.Fragment,{children:[n.jsx("div",{style:{gridColumn:1,alignSelf:s??"center"},children:n.jsx(pt,{node:t,state:c,row:r})}),n.jsx("div",{style:{gridColumn:2},children:y(u,"k",!1)})]})}function gt(e){const{yamlNode:t,panel:r}=e,{type:s,children:i,options:o={},title:d,...l}=t;return Q(t,l),n.jsxs(p,{className:"ymllayout-form",...o,children:[t.title&&n.jsx(p.Header,{children:t.title}),n.jsx(p.Contents,{children:n.jsx("div",{style:{display:"grid",gridTemplateColumns:"min-content auto"},children:w.map(i,(h,u)=>h.type==="formheader"?n.jsx(mt,{node:h,row:u},u):n.jsx(xt,{node:h,row:u},u))})})]})}function jt(e){const{yamlNode:t,panel:r}=e;return n.jsxs("div",{className:"ymllayout-grid",style:{gridTemplateColumns:t.columns,gridTemplateRows:t.rows},children:[w.map(t.children,(s,i)=>{const{columnSpan:o=1,rowSpan:d=1,...l}=s,h=o>1?`span ${o}`:void 0,u=d>1?`span ${d}`:void 0;return n.jsx("div",{className:"ymllayout-grid-cell",style:{gridColumn:h,gridRow:u},children:y(l,i,r)},i)})," "]})}function wt({yamlNode:e,panel:t}){const r=e.options||{};return n.jsx(Be,{panel:t,options:r,children:n.jsx("div",{children:e.label})})}const se={row:nt,col:rt,container:dt,component:ct,panel:ut,tabs:ft,form:gt,grid:jt,label:wt};Object.entries(se).forEach(([e,t])=>{J(e,t)});function yt(e){var r;const t=m.useMemo(()=>X(e.layout),[e.layout]);return t.error?n.jsx("div",{className:`${e.className??""} ymllayout-main`,id:e.id,children:n.jsxs(p,{children:[n.jsx(p.Header,{children:"Layout Error"}),n.jsxs(p.Contents,{children:[n.jsxs("p",{children:["File: ",t.name]}),n.jsx(a.Alert,{variant:"warning",children:n.jsx("pre",{className:"mb-0",children:t.error})})]})]})}):n.jsx("div",{className:`${e.className??""} ymllayout-main`,id:e.id,children:n.jsx(ee,{resetKey:t,children:(r=t.children)==null?void 0:r.map((s,i)=>y(s,i))})})}const vt=Object.freeze(Object.defineProperty({__proto__:null},Symbol.toStringTag,{value:"Module"})),ie={hardware:de};function bt(e,t){ie[e]=t}function Nt(e){return n.jsxs(a.Col,{className:"monitor-panel-item bg-fatal",title:`Error from yaml configuration: ${e.message}`,children:[n.jsx("h1",{children:e.monitor.name}),n.jsx("div",{children:"Parsing error"})]})}function Ct(e){const t=w.map(e.monitors,(r,s)=>{const i=r.type??"hardware",o=ie[i];return o===void 0?n.jsx(Nt,{monitor:r,message:`Type ${i} unsupported`},`m${s}`):n.jsx(o,{monitor:r},`m${s}`)});return n.jsx("div",{className:S.default({"ms-auto":e.margin==="start"},"me-auto","monitor-panel",{"monitor-panel-light":e.bg==="light"}),children:n.jsx(a.Container,{fluid:!0,children:n.jsx(a.Row,{className:"flex-nowrap",children:t})})})}function oe(e){return n.jsx(a.Col,{className:"monitor-panel-item",children:e.children})}const T={};function St(e,t){T[e]=t}function ae(e){if(!T.useHardware)throw new Error("No `useHardware` hook registered");return T.useHardware(e)}const le=(e,t,r)=>{const s={">":(i,o)=>i>o,"<":(i,o)=>i<o,">=":(i,o)=>i>=o,"<=":(i,o)=>i<=o,"==":(i,o)=>i===o,"!=":(i,o)=>i!==o,in:(i,o)=>o.indexOf(i)>-1};if(e in s)return s[e](t,r)};function ce(e,t,r){const s=e.split(t);return r?[s.slice(0,-r).join(t)].concat(s.slice(-r)):s}function L(e){const t=e!==void 0?ce(e,".",1):[null,""],r=ae(t[0]);if(r&&r.properties&&t[1]!==null)return Array.isArray(r.properties[t[1]])?r.properties[t[1]][0]:r.properties[t[1]]}function Ot(e){const t=e!==void 0&&!e.includes("."),r=e!==void 0?ce(e,".",1):[null,""],s=ae(r[0]);if(t)return e;if(s&&s.properties&&r[1]!==null)return`${s.properties[r[1]]}`}function de(e){const{monitor:t}=e;let r=L(t.value)??"-";const s=Ot(t.unit),i=L(t.overlay),o=Number.parseFloat(`${r}`);Number.isNaN(o)||String(o).length>5&&(r=o.toPrecision(5));let d;t.comparator&&t.comparison&&(d=le(t.comparator,r,t.comparison)?"valid":"invalid"),Number.isNaN(o)||s!==void 0&&(r=`${r} ${s}`);let l=m.Fragment;const h={};if(i){const u=`${i}`;let c=m.Fragment;u.includes(`
3
+ `)&&(c="pre"),l=a.OverlayTrigger,h.placement="bottom",h.overlay=n.jsx(a.Tooltip,{id:"tooltipid",className:"monitor-panel-tooltip",children:n.jsx(c,{children:u})})}return m.createElement(l,{...h,key:t.name},n.jsxs(oe,{children:[n.jsx("h1",{children:t.name}),n.jsx("div",{className:d,children:`${r}`})]}))}exports.Formatting=ye;exports.Frontend=be;exports.FullSizer=Z;exports.HWObject=vt;exports.HardwareInputNumber=D;exports.HardwareNumericStep=W;exports.HardwareSchema=_e;exports.HardwareState=Ce;exports.HardwareTemplate=O;exports.HardwareTypes=He;exports.HardwareVariant=Pe;exports.Info=Ne;exports.KeyError=x;exports.MissingKeysError=C;exports.MonitorHardware=de;exports.MonitorPanel=Ct;exports.MonitorPanelItem=oe;exports.MotorDefault=Ee;exports.Multiposition=Me;exports.NoObject=Ie;exports.NumericStep=U;exports.Panel=p;exports.Property=ke;exports.ShutterDefault=$e;exports.TypeIcon=b;exports.YAMLErrorBoundary=ee;exports.YAMLLayout=yt;exports.YamlAsserts=tt;exports.dynamicOp=le;exports.registerHardwareComponent=st;exports.registerMonitorComponent=bt;exports.registerRuntimeHook=St;exports.registerYamlComponent=re;exports.registerYamlComponents=lt;exports.registerYamlType=J;exports.renderYamlNode=y;exports.yamlMap=se;
3
4
  //# sourceMappingURL=index.js.map