@opalkelly/frontpanel-react-components 0.1.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/LICENSE +45 -0
- package/README.md +26 -0
- package/dist/cjs/index.js +2 -0
- package/dist/cjs/index.js.map +1 -0
- package/dist/cjs/types/components/FrontPanel/FrontPanel.d.ts +10 -0
- package/dist/cjs/types/components/FrontPanel/FrontPanel.props.d.ts +23 -0
- package/dist/cjs/types/components/FrontPanel/index.d.ts +7 -0
- package/dist/cjs/types/components/FrontPanelIndicator/FrontPanelIndicator.d.ts +30 -0
- package/dist/cjs/types/components/FrontPanelIndicator/FrontPanelIndicator.props.d.ts +17 -0
- package/dist/cjs/types/components/FrontPanelIndicator/index.d.ts +8 -0
- package/dist/cjs/types/components/FrontPanelNumberDisplay/FrontPanelNumberDisplay.d.ts +33 -0
- package/dist/cjs/types/components/FrontPanelNumberDisplay/FrontPanelNumberDisplay.props.d.ts +23 -0
- package/dist/cjs/types/components/FrontPanelNumberDisplay/index.d.ts +8 -0
- package/dist/cjs/types/components/FrontPanelNumberEntry/FrontPanelNumberEntry.d.ts +33 -0
- package/dist/cjs/types/components/FrontPanelNumberEntry/FrontPanelNumberEntry.props.d.ts +27 -0
- package/dist/cjs/types/components/FrontPanelNumberEntry/index.d.ts +8 -0
- package/dist/cjs/types/components/FrontPanelPushButton/FrontPanelPushButton.d.ts +31 -0
- package/dist/cjs/types/components/FrontPanelPushButton/FrontPanelPushButton.props.d.ts +17 -0
- package/dist/cjs/types/components/FrontPanelPushButton/index.d.ts +8 -0
- package/dist/cjs/types/components/FrontPanelRangeSlider/FrontPanelRangeSlider.d.ts +31 -0
- package/dist/cjs/types/components/FrontPanelRangeSlider/FrontPanelRangeSlider.props.d.ts +21 -0
- package/dist/cjs/types/components/FrontPanelRangeSlider/index.d.ts +8 -0
- package/dist/cjs/types/components/FrontPanelSelectEntry/FrontPanelSelectEntry.d.ts +17 -0
- package/dist/cjs/types/components/FrontPanelSelectEntry/FrontPanelSelectEntryRoot.d.ts +43 -0
- package/dist/cjs/types/components/FrontPanelSelectEntry/FrontPanelSelectEntryRoot.props.d.ts +21 -0
- package/dist/cjs/types/components/FrontPanelSelectEntry/index.d.ts +15 -0
- package/dist/cjs/types/components/FrontPanelToggleSwitch/FrontPanelToggleSwitch.d.ts +31 -0
- package/dist/cjs/types/components/FrontPanelToggleSwitch/FrontPanelToggleSwitch.props.d.ts +17 -0
- package/dist/cjs/types/components/FrontPanelToggleSwitch/index.d.ts +8 -0
- package/dist/cjs/types/components/FrontPanelTriggerButton/FrontPanelTriggerButton.d.ts +32 -0
- package/dist/cjs/types/components/FrontPanelTriggerButton/FrontPanelTriggerButton.props.d.ts +18 -0
- package/dist/cjs/types/components/FrontPanelTriggerButton/index.d.ts +8 -0
- package/dist/cjs/types/components/Icons/ChevronIcon.d.ts +17 -0
- package/dist/cjs/types/components/Icons/IndicatorArrowIcon.d.ts +17 -0
- package/dist/cjs/types/components/Icons/IndicatorBarIcon.d.ts +10 -0
- package/dist/cjs/types/components/Icons/IndicatorStateIcon.d.ts +14 -0
- package/dist/cjs/types/components/Icons/RadioToggleStateIcon.d.ts +14 -0
- package/dist/cjs/types/components/Icons/SwitchToggleStateIcon.d.ts +14 -0
- package/dist/cjs/types/components/Icons/index.d.ts +12 -0
- package/dist/cjs/types/components/Icons/types.d.ts +17 -0
- package/dist/cjs/types/components/index.d.ts +16 -0
- package/dist/cjs/types/components/types.d.ts +11 -0
- package/dist/cjs/types/contexts/FrontPanelContext.d.ts +15 -0
- package/dist/cjs/types/contexts/index.d.ts +8 -0
- package/dist/cjs/types/core/Binary.d.ts +7 -0
- package/dist/cjs/types/core/Numeric.d.ts +80 -0
- package/dist/cjs/types/core/Types.d.ts +34 -0
- package/dist/cjs/types/core/index.d.ts +9 -0
- package/dist/cjs/types/index.d.ts +10 -0
- package/dist/cjs/types/primitives/Application/Application.d.ts +10 -0
- package/dist/cjs/types/primitives/Application/Application.props.d.ts +10 -0
- package/dist/cjs/types/primitives/Application/index.d.ts +1 -0
- package/dist/cjs/types/primitives/Button/Button.d.ts +33 -0
- package/dist/cjs/types/primitives/Button/Button.props.d.ts +44 -0
- package/dist/cjs/types/primitives/Button/index.d.ts +3 -0
- package/dist/cjs/types/primitives/DigitEntry/DigitEntry.d.ts +33 -0
- package/dist/cjs/types/primitives/DigitEntry/DigitEntry.props.d.ts +51 -0
- package/dist/cjs/types/primitives/DigitEntry/index.d.ts +9 -0
- package/dist/cjs/types/primitives/Indicator/Indicator.d.ts +29 -0
- package/dist/cjs/types/primitives/Indicator/Indicator.props.d.ts +35 -0
- package/dist/cjs/types/primitives/Indicator/index.d.ts +9 -0
- package/dist/cjs/types/primitives/Label/Label.d.ts +31 -0
- package/dist/cjs/types/primitives/Label/Label.props.d.ts +33 -0
- package/dist/cjs/types/primitives/Label/index.d.ts +9 -0
- package/dist/cjs/types/primitives/NumberDisplay/NumberDisplay.d.ts +31 -0
- package/dist/cjs/types/primitives/NumberDisplay/NumberDisplay.props.d.ts +52 -0
- package/dist/cjs/types/primitives/NumberDisplay/index.d.ts +9 -0
- package/dist/cjs/types/primitives/NumberEntry/NumberEntry.d.ts +34 -0
- package/dist/cjs/types/primitives/NumberEntry/NumberEntry.props.d.ts +69 -0
- package/dist/cjs/types/primitives/NumberEntry/NumberEntryDigits.d.ts +27 -0
- package/dist/cjs/types/primitives/NumberEntry/NumberEntryDigits.props.d.ts +43 -0
- package/dist/cjs/types/primitives/NumberEntry/index.d.ts +9 -0
- package/dist/cjs/types/primitives/RangeSlider/RangeSlider.d.ts +33 -0
- package/dist/cjs/types/primitives/RangeSlider/RangeSlider.props.d.ts +77 -0
- package/dist/cjs/types/primitives/RangeSlider/index.d.ts +9 -0
- package/dist/cjs/types/primitives/SelectEntry/SelectEntry.d.ts +17 -0
- package/dist/cjs/types/primitives/SelectEntry/SelectEntryContent.d.ts +16 -0
- package/dist/cjs/types/primitives/SelectEntry/SelectEntryGroup.d.ts +15 -0
- package/dist/cjs/types/primitives/SelectEntry/SelectEntryItem.d.ts +15 -0
- package/dist/cjs/types/primitives/SelectEntry/SelectEntryLabel.d.ts +15 -0
- package/dist/cjs/types/primitives/SelectEntry/SelectEntryRoot.d.ts +39 -0
- package/dist/cjs/types/primitives/SelectEntry/SelectEntryRoot.props.d.ts +31 -0
- package/dist/cjs/types/primitives/SelectEntry/SelectEntrySeparator.d.ts +15 -0
- package/dist/cjs/types/primitives/SelectEntry/SelectEntryTrigger.d.ts +16 -0
- package/dist/cjs/types/primitives/SelectEntry/SelectEntryTrigger.props.d.ts +16 -0
- package/dist/cjs/types/primitives/SelectEntry/index.d.ts +17 -0
- package/dist/cjs/types/primitives/Toggle/Toggle.d.ts +35 -0
- package/dist/cjs/types/primitives/Toggle/Toggle.props.d.ts +37 -0
- package/dist/cjs/types/primitives/Toggle/index.d.ts +9 -0
- package/dist/cjs/types/primitives/ToggleSwitch/ToggleSwitch.d.ts +32 -0
- package/dist/cjs/types/primitives/ToggleSwitch/ToggleSwitch.props.d.ts +22 -0
- package/dist/cjs/types/primitives/ToggleSwitch/index.d.ts +8 -0
- package/dist/cjs/types/primitives/Tooltip/Tooltip.d.ts +35 -0
- package/dist/cjs/types/primitives/Tooltip/Tooltip.props.d.ts +17 -0
- package/dist/cjs/types/primitives/Tooltip/index.d.ts +8 -0
- package/dist/cjs/types/primitives/TooltipUtility.d.ts +12 -0
- package/dist/cjs/types/primitives/index.d.ts +24 -0
- package/dist/esm/index.js +2 -0
- package/dist/esm/index.js.map +1 -0
- package/dist/esm/types/components/FrontPanel/FrontPanel.d.ts +10 -0
- package/dist/esm/types/components/FrontPanel/FrontPanel.props.d.ts +23 -0
- package/dist/esm/types/components/FrontPanel/index.d.ts +7 -0
- package/dist/esm/types/components/FrontPanelIndicator/FrontPanelIndicator.d.ts +30 -0
- package/dist/esm/types/components/FrontPanelIndicator/FrontPanelIndicator.props.d.ts +17 -0
- package/dist/esm/types/components/FrontPanelIndicator/index.d.ts +8 -0
- package/dist/esm/types/components/FrontPanelNumberDisplay/FrontPanelNumberDisplay.d.ts +33 -0
- package/dist/esm/types/components/FrontPanelNumberDisplay/FrontPanelNumberDisplay.props.d.ts +23 -0
- package/dist/esm/types/components/FrontPanelNumberDisplay/index.d.ts +8 -0
- package/dist/esm/types/components/FrontPanelNumberEntry/FrontPanelNumberEntry.d.ts +33 -0
- package/dist/esm/types/components/FrontPanelNumberEntry/FrontPanelNumberEntry.props.d.ts +27 -0
- package/dist/esm/types/components/FrontPanelNumberEntry/index.d.ts +8 -0
- package/dist/esm/types/components/FrontPanelPushButton/FrontPanelPushButton.d.ts +31 -0
- package/dist/esm/types/components/FrontPanelPushButton/FrontPanelPushButton.props.d.ts +17 -0
- package/dist/esm/types/components/FrontPanelPushButton/index.d.ts +8 -0
- package/dist/esm/types/components/FrontPanelRangeSlider/FrontPanelRangeSlider.d.ts +31 -0
- package/dist/esm/types/components/FrontPanelRangeSlider/FrontPanelRangeSlider.props.d.ts +21 -0
- package/dist/esm/types/components/FrontPanelRangeSlider/index.d.ts +8 -0
- package/dist/esm/types/components/FrontPanelSelectEntry/FrontPanelSelectEntry.d.ts +17 -0
- package/dist/esm/types/components/FrontPanelSelectEntry/FrontPanelSelectEntryRoot.d.ts +43 -0
- package/dist/esm/types/components/FrontPanelSelectEntry/FrontPanelSelectEntryRoot.props.d.ts +21 -0
- package/dist/esm/types/components/FrontPanelSelectEntry/index.d.ts +15 -0
- package/dist/esm/types/components/FrontPanelToggleSwitch/FrontPanelToggleSwitch.d.ts +31 -0
- package/dist/esm/types/components/FrontPanelToggleSwitch/FrontPanelToggleSwitch.props.d.ts +17 -0
- package/dist/esm/types/components/FrontPanelToggleSwitch/index.d.ts +8 -0
- package/dist/esm/types/components/FrontPanelTriggerButton/FrontPanelTriggerButton.d.ts +32 -0
- package/dist/esm/types/components/FrontPanelTriggerButton/FrontPanelTriggerButton.props.d.ts +18 -0
- package/dist/esm/types/components/FrontPanelTriggerButton/index.d.ts +8 -0
- package/dist/esm/types/components/Icons/ChevronIcon.d.ts +17 -0
- package/dist/esm/types/components/Icons/IndicatorArrowIcon.d.ts +17 -0
- package/dist/esm/types/components/Icons/IndicatorBarIcon.d.ts +10 -0
- package/dist/esm/types/components/Icons/IndicatorStateIcon.d.ts +14 -0
- package/dist/esm/types/components/Icons/RadioToggleStateIcon.d.ts +14 -0
- package/dist/esm/types/components/Icons/SwitchToggleStateIcon.d.ts +14 -0
- package/dist/esm/types/components/Icons/index.d.ts +12 -0
- package/dist/esm/types/components/Icons/types.d.ts +17 -0
- package/dist/esm/types/components/index.d.ts +16 -0
- package/dist/esm/types/components/types.d.ts +11 -0
- package/dist/esm/types/contexts/FrontPanelContext.d.ts +15 -0
- package/dist/esm/types/contexts/index.d.ts +8 -0
- package/dist/esm/types/core/Binary.d.ts +7 -0
- package/dist/esm/types/core/Numeric.d.ts +80 -0
- package/dist/esm/types/core/Types.d.ts +34 -0
- package/dist/esm/types/core/index.d.ts +9 -0
- package/dist/esm/types/index.d.ts +10 -0
- package/dist/esm/types/primitives/Application/Application.d.ts +10 -0
- package/dist/esm/types/primitives/Application/Application.props.d.ts +10 -0
- package/dist/esm/types/primitives/Application/index.d.ts +1 -0
- package/dist/esm/types/primitives/Button/Button.d.ts +33 -0
- package/dist/esm/types/primitives/Button/Button.props.d.ts +44 -0
- package/dist/esm/types/primitives/Button/index.d.ts +3 -0
- package/dist/esm/types/primitives/DigitEntry/DigitEntry.d.ts +33 -0
- package/dist/esm/types/primitives/DigitEntry/DigitEntry.props.d.ts +51 -0
- package/dist/esm/types/primitives/DigitEntry/index.d.ts +9 -0
- package/dist/esm/types/primitives/Indicator/Indicator.d.ts +29 -0
- package/dist/esm/types/primitives/Indicator/Indicator.props.d.ts +35 -0
- package/dist/esm/types/primitives/Indicator/index.d.ts +9 -0
- package/dist/esm/types/primitives/Label/Label.d.ts +31 -0
- package/dist/esm/types/primitives/Label/Label.props.d.ts +33 -0
- package/dist/esm/types/primitives/Label/index.d.ts +9 -0
- package/dist/esm/types/primitives/NumberDisplay/NumberDisplay.d.ts +31 -0
- package/dist/esm/types/primitives/NumberDisplay/NumberDisplay.props.d.ts +52 -0
- package/dist/esm/types/primitives/NumberDisplay/index.d.ts +9 -0
- package/dist/esm/types/primitives/NumberEntry/NumberEntry.d.ts +34 -0
- package/dist/esm/types/primitives/NumberEntry/NumberEntry.props.d.ts +69 -0
- package/dist/esm/types/primitives/NumberEntry/NumberEntryDigits.d.ts +27 -0
- package/dist/esm/types/primitives/NumberEntry/NumberEntryDigits.props.d.ts +43 -0
- package/dist/esm/types/primitives/NumberEntry/index.d.ts +9 -0
- package/dist/esm/types/primitives/RangeSlider/RangeSlider.d.ts +33 -0
- package/dist/esm/types/primitives/RangeSlider/RangeSlider.props.d.ts +77 -0
- package/dist/esm/types/primitives/RangeSlider/index.d.ts +9 -0
- package/dist/esm/types/primitives/SelectEntry/SelectEntry.d.ts +17 -0
- package/dist/esm/types/primitives/SelectEntry/SelectEntryContent.d.ts +16 -0
- package/dist/esm/types/primitives/SelectEntry/SelectEntryGroup.d.ts +15 -0
- package/dist/esm/types/primitives/SelectEntry/SelectEntryItem.d.ts +15 -0
- package/dist/esm/types/primitives/SelectEntry/SelectEntryLabel.d.ts +15 -0
- package/dist/esm/types/primitives/SelectEntry/SelectEntryRoot.d.ts +39 -0
- package/dist/esm/types/primitives/SelectEntry/SelectEntryRoot.props.d.ts +31 -0
- package/dist/esm/types/primitives/SelectEntry/SelectEntrySeparator.d.ts +15 -0
- package/dist/esm/types/primitives/SelectEntry/SelectEntryTrigger.d.ts +16 -0
- package/dist/esm/types/primitives/SelectEntry/SelectEntryTrigger.props.d.ts +16 -0
- package/dist/esm/types/primitives/SelectEntry/index.d.ts +17 -0
- package/dist/esm/types/primitives/Toggle/Toggle.d.ts +35 -0
- package/dist/esm/types/primitives/Toggle/Toggle.props.d.ts +37 -0
- package/dist/esm/types/primitives/Toggle/index.d.ts +9 -0
- package/dist/esm/types/primitives/ToggleSwitch/ToggleSwitch.d.ts +32 -0
- package/dist/esm/types/primitives/ToggleSwitch/ToggleSwitch.props.d.ts +22 -0
- package/dist/esm/types/primitives/ToggleSwitch/index.d.ts +8 -0
- package/dist/esm/types/primitives/Tooltip/Tooltip.d.ts +35 -0
- package/dist/esm/types/primitives/Tooltip/Tooltip.props.d.ts +17 -0
- package/dist/esm/types/primitives/Tooltip/index.d.ts +8 -0
- package/dist/esm/types/primitives/TooltipUtility.d.ts +12 -0
- package/dist/esm/types/primitives/index.d.ts +24 -0
- package/dist/index.d.ts +1456 -0
- package/package.json +81 -0
- package/src/components/FrontPanel/FrontPanel.props.ts +25 -0
- package/src/components/FrontPanel/FrontPanel.tsx +33 -0
- package/src/components/FrontPanel/index.ts +8 -0
- package/src/components/FrontPanelIndicator/FrontPanelIndicator.css +0 -0
- package/src/components/FrontPanelIndicator/FrontPanelIndicator.props.ts +20 -0
- package/src/components/FrontPanelIndicator/FrontPanelIndicator.stories.tsx +44 -0
- package/src/components/FrontPanelIndicator/FrontPanelIndicator.tsx +81 -0
- package/src/components/FrontPanelIndicator/index.ts +10 -0
- package/src/components/FrontPanelNumberDisplay/FrontPanelNumberDisplay.css +0 -0
- package/src/components/FrontPanelNumberDisplay/FrontPanelNumberDisplay.props.ts +27 -0
- package/src/components/FrontPanelNumberDisplay/FrontPanelNumberDisplay.stories.tsx +67 -0
- package/src/components/FrontPanelNumberDisplay/FrontPanelNumberDisplay.tsx +130 -0
- package/src/components/FrontPanelNumberDisplay/index.ts +10 -0
- package/src/components/FrontPanelNumberEntry/FrontPanelNumberEntry.css +0 -0
- package/src/components/FrontPanelNumberEntry/FrontPanelNumberEntry.props.ts +32 -0
- package/src/components/FrontPanelNumberEntry/FrontPanelNumberEntry.stories.tsx +104 -0
- package/src/components/FrontPanelNumberEntry/FrontPanelNumberEntry.tsx +195 -0
- package/src/components/FrontPanelNumberEntry/index.ts +10 -0
- package/src/components/FrontPanelPushButton/FrontPanelPushButton.css +0 -0
- package/src/components/FrontPanelPushButton/FrontPanelPushButton.props.ts +20 -0
- package/src/components/FrontPanelPushButton/FrontPanelPushButton.stories.tsx +46 -0
- package/src/components/FrontPanelPushButton/FrontPanelPushButton.tsx +80 -0
- package/src/components/FrontPanelPushButton/index.ts +10 -0
- package/src/components/FrontPanelRangeSlider/FrontPanelRangeSlider.css +0 -0
- package/src/components/FrontPanelRangeSlider/FrontPanelRangeSlider.props.ts +25 -0
- package/src/components/FrontPanelRangeSlider/FrontPanelRangeSlider.stories.tsx +92 -0
- package/src/components/FrontPanelRangeSlider/FrontPanelRangeSlider.tsx +108 -0
- package/src/components/FrontPanelRangeSlider/index.ts +10 -0
- package/src/components/FrontPanelSelectEntry/FrontPanelSelectEntry.css +0 -0
- package/src/components/FrontPanelSelectEntry/FrontPanelSelectEntry.stories.tsx +107 -0
- package/src/components/FrontPanelSelectEntry/FrontPanelSelectEntry.tsx +30 -0
- package/src/components/FrontPanelSelectEntry/FrontPanelSelectEntryRoot.props.ts +25 -0
- package/src/components/FrontPanelSelectEntry/FrontPanelSelectEntryRoot.tsx +175 -0
- package/src/components/FrontPanelSelectEntry/index.ts +17 -0
- package/src/components/FrontPanelToggleSwitch/FrontPanelToggleSwitch.css +0 -0
- package/src/components/FrontPanelToggleSwitch/FrontPanelToggleSwitch.props.ts +20 -0
- package/src/components/FrontPanelToggleSwitch/FrontPanelToggleSwitch.stories.tsx +46 -0
- package/src/components/FrontPanelToggleSwitch/FrontPanelToggleSwitch.tsx +108 -0
- package/src/components/FrontPanelToggleSwitch/index.ts +10 -0
- package/src/components/FrontPanelTriggerButton/FrontPanelTriggerButton.css +0 -0
- package/src/components/FrontPanelTriggerButton/FrontPanelTriggerButton.props.ts +21 -0
- package/src/components/FrontPanelTriggerButton/FrontPanelTriggerButton.stories.tsx +46 -0
- package/src/components/FrontPanelTriggerButton/FrontPanelTriggerButton.tsx +65 -0
- package/src/components/FrontPanelTriggerButton/index.ts +10 -0
- package/src/components/Icons/ChevronIcon.tsx +69 -0
- package/src/components/Icons/IndicatorArrowIcon.tsx +59 -0
- package/src/components/Icons/IndicatorBarIcon.tsx +34 -0
- package/src/components/Icons/IndicatorStateIcon.tsx +82 -0
- package/src/components/Icons/RadioToggleStateIcon.tsx +62 -0
- package/src/components/Icons/SwitchToggleStateIcon.tsx +68 -0
- package/src/components/Icons/index.ts +15 -0
- package/src/components/Icons/types.ts +20 -0
- package/src/components/index.ts +31 -0
- package/src/components/types.ts +13 -0
- package/src/contexts/FrontPanelContext.ts +23 -0
- package/src/contexts/index.ts +10 -0
- package/src/core/Binary.ts +23 -0
- package/src/core/Numeric.ts +168 -0
- package/src/core/Types.ts +39 -0
- package/src/core/index.ts +11 -0
- package/src/fonts/Inter-VariableFont_slnt,wght.ttf +0 -0
- package/src/index.css +11 -0
- package/src/index.ts +11 -0
- package/src/primitives/Application/Application.props.ts +10 -0
- package/src/primitives/Application/Application.tsx +24 -0
- package/src/primitives/Application/index.ts +1 -0
- package/src/primitives/Button/Button.css +60 -0
- package/src/primitives/Button/Button.props.ts +53 -0
- package/src/primitives/Button/Button.stories.tsx +54 -0
- package/src/primitives/Button/Button.tsx +75 -0
- package/src/primitives/Button/index.ts +4 -0
- package/src/primitives/DigitEntry/DigitEntry.css +120 -0
- package/src/primitives/DigitEntry/DigitEntry.props.ts +62 -0
- package/src/primitives/DigitEntry/DigitEntry.stories.tsx +84 -0
- package/src/primitives/DigitEntry/DigitEntry.tsx +226 -0
- package/src/primitives/DigitEntry/index.ts +15 -0
- package/src/primitives/Indicator/Indicator.css +66 -0
- package/src/primitives/Indicator/Indicator.props.ts +42 -0
- package/src/primitives/Indicator/Indicator.stories.tsx +44 -0
- package/src/primitives/Indicator/Indicator.tsx +64 -0
- package/src/primitives/Indicator/index.ts +11 -0
- package/src/primitives/Label/Label.css +49 -0
- package/src/primitives/Label/Label.props.ts +38 -0
- package/src/primitives/Label/Label.stories.tsx +53 -0
- package/src/primitives/Label/Label.tsx +66 -0
- package/src/primitives/Label/index.ts +11 -0
- package/src/primitives/NumberDisplay/NumberDisplay.css +63 -0
- package/src/primitives/NumberDisplay/NumberDisplay.props.ts +65 -0
- package/src/primitives/NumberDisplay/NumberDisplay.stories.tsx +83 -0
- package/src/primitives/NumberDisplay/NumberDisplay.tsx +155 -0
- package/src/primitives/NumberDisplay/index.ts +11 -0
- package/src/primitives/NumberEntry/NumberEntry.css +71 -0
- package/src/primitives/NumberEntry/NumberEntry.props.ts +86 -0
- package/src/primitives/NumberEntry/NumberEntry.stories.tsx +129 -0
- package/src/primitives/NumberEntry/NumberEntry.tsx +249 -0
- package/src/primitives/NumberEntry/NumberEntryDigits.props.ts +57 -0
- package/src/primitives/NumberEntry/NumberEntryDigits.tsx +117 -0
- package/src/primitives/NumberEntry/index.ts +11 -0
- package/src/primitives/RangeSlider/RangeSlider.css +110 -0
- package/src/primitives/RangeSlider/RangeSlider.props.ts +93 -0
- package/src/primitives/RangeSlider/RangeSlider.stories.tsx +76 -0
- package/src/primitives/RangeSlider/RangeSlider.tsx +168 -0
- package/src/primitives/RangeSlider/index.ts +14 -0
- package/src/primitives/SelectEntry/SelectEntry.stories.tsx +86 -0
- package/src/primitives/SelectEntry/SelectEntry.tsx +29 -0
- package/src/primitives/SelectEntry/SelectEntryContent.css +94 -0
- package/src/primitives/SelectEntry/SelectEntryContent.tsx +63 -0
- package/src/primitives/SelectEntry/SelectEntryGroup.css +17 -0
- package/src/primitives/SelectEntry/SelectEntryGroup.tsx +37 -0
- package/src/primitives/SelectEntry/SelectEntryItem.css +35 -0
- package/src/primitives/SelectEntry/SelectEntryItem.tsx +51 -0
- package/src/primitives/SelectEntry/SelectEntryLabel.css +16 -0
- package/src/primitives/SelectEntry/SelectEntryLabel.tsx +43 -0
- package/src/primitives/SelectEntry/SelectEntryRoot.css +10 -0
- package/src/primitives/SelectEntry/SelectEntryRoot.props.ts +38 -0
- package/src/primitives/SelectEntry/SelectEntryRoot.tsx +69 -0
- package/src/primitives/SelectEntry/SelectEntrySeparator.css +12 -0
- package/src/primitives/SelectEntry/SelectEntrySeparator.tsx +38 -0
- package/src/primitives/SelectEntry/SelectEntryTrigger.css +49 -0
- package/src/primitives/SelectEntry/SelectEntryTrigger.props.ts +18 -0
- package/src/primitives/SelectEntry/SelectEntryTrigger.tsx +111 -0
- package/src/primitives/SelectEntry/index.ts +20 -0
- package/src/primitives/Toggle/Toggle.css +67 -0
- package/src/primitives/Toggle/Toggle.props.ts +44 -0
- package/src/primitives/Toggle/Toggle.stories.tsx +61 -0
- package/src/primitives/Toggle/Toggle.tsx +90 -0
- package/src/primitives/Toggle/index.ts +11 -0
- package/src/primitives/ToggleSwitch/ToggleSwitch.css +118 -0
- package/src/primitives/ToggleSwitch/ToggleSwitch.props.ts +26 -0
- package/src/primitives/ToggleSwitch/ToggleSwitch.stories.tsx +85 -0
- package/src/primitives/ToggleSwitch/ToggleSwitch.tsx +73 -0
- package/src/primitives/ToggleSwitch/index.ts +10 -0
- package/src/primitives/Tooltip/Tooltip.css +93 -0
- package/src/primitives/Tooltip/Tooltip.props.ts +20 -0
- package/src/primitives/Tooltip/Tooltip.tsx +91 -0
- package/src/primitives/Tooltip/index.ts +10 -0
- package/src/primitives/TooltipUtility.tsx +24 -0
- package/src/primitives/index.ts +44 -0
- package/src/stories/decorators/Application.decorator.tsx +20 -0
- package/src/stories/decorators/FrontPanel.decorator.tsx +47 -0
package/package.json
ADDED
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@opalkelly/frontpanel-react-components",
|
|
3
|
+
"version": "0.1.0",
|
|
4
|
+
"description": "React Component Library for OpalKelly FrontPanel Alloy",
|
|
5
|
+
"keywords": [
|
|
6
|
+
"FPGA",
|
|
7
|
+
"FrontPanel",
|
|
8
|
+
"OpalKelly",
|
|
9
|
+
"Alloy",
|
|
10
|
+
"React",
|
|
11
|
+
"Component",
|
|
12
|
+
"Library"
|
|
13
|
+
],
|
|
14
|
+
"author": "Opal Kelly <support@opalkelly.com>",
|
|
15
|
+
"license": "SEE LICENSE IN LICENSE",
|
|
16
|
+
"repository": {
|
|
17
|
+
"type": "git",
|
|
18
|
+
"url": "git+https://github.com/opalkelly-opensource/design-resources.git"
|
|
19
|
+
},
|
|
20
|
+
"homepage": "https://opalkelly.com/",
|
|
21
|
+
"bugs": {
|
|
22
|
+
"url": "https://forums.opalkelly.com/"
|
|
23
|
+
},
|
|
24
|
+
"devDependencies": {
|
|
25
|
+
"@rollup/plugin-commonjs": "^25.0.7",
|
|
26
|
+
"@rollup/plugin-eslint": "^9.0.5",
|
|
27
|
+
"@rollup/plugin-node-resolve": "^15.2.3",
|
|
28
|
+
"@rollup/plugin-terser": "^0.4.4",
|
|
29
|
+
"@rollup/plugin-typescript": "^11.1.5",
|
|
30
|
+
"@storybook/addon-essentials": "^7.6.6",
|
|
31
|
+
"@storybook/addon-interactions": "^7.6.6",
|
|
32
|
+
"@storybook/addon-links": "^7.6.6",
|
|
33
|
+
"@storybook/blocks": "^7.6.6",
|
|
34
|
+
"@storybook/manager-api": "^8.0.8",
|
|
35
|
+
"@storybook/react": "^7.6.6",
|
|
36
|
+
"@storybook/react-webpack5": "^7.6.6",
|
|
37
|
+
"@storybook/test": "^7.6.6",
|
|
38
|
+
"@storybook/theming": "^8.0.8",
|
|
39
|
+
"@types/react": "^18.2.45",
|
|
40
|
+
"@typescript-eslint/eslint-plugin": "^7.1.1",
|
|
41
|
+
"@typescript-eslint/parser": "^7.1.1",
|
|
42
|
+
"eslint": "^8.57.0",
|
|
43
|
+
"eslint-plugin-react": "^7.34.0",
|
|
44
|
+
"prettier": "^3.2.5",
|
|
45
|
+
"react": "^18.2.0",
|
|
46
|
+
"react-dom": "^18.2.0",
|
|
47
|
+
"rollup": "^4.9.1",
|
|
48
|
+
"rollup-plugin-dts": "^6.1.0",
|
|
49
|
+
"rollup-plugin-peer-deps-external": "^2.2.4",
|
|
50
|
+
"rollup-plugin-postcss": "^4.0.2",
|
|
51
|
+
"storybook": "^7.6.6",
|
|
52
|
+
"tslib": "^2.6.2",
|
|
53
|
+
"typescript": "^5.3.3"
|
|
54
|
+
},
|
|
55
|
+
"peerDependencies": {
|
|
56
|
+
"@opalkelly/frontpanel-alloy-core": "^0.1.0",
|
|
57
|
+
"@radix-ui/react-scroll-area": "^1.0.5",
|
|
58
|
+
"@radix-ui/react-select": "^2.0.0",
|
|
59
|
+
"@radix-ui/react-slider": "^1.1.2",
|
|
60
|
+
"@radix-ui/react-tooltip": "^1.0.7",
|
|
61
|
+
"classnames": "^2.3.2",
|
|
62
|
+
"react": "^18.2.0"
|
|
63
|
+
},
|
|
64
|
+
"scripts": {
|
|
65
|
+
"rollup": "rollup -c",
|
|
66
|
+
"format-check": "prettier --check ./src/**",
|
|
67
|
+
"lint": "eslint ./src/**/*.{ts,tsx}",
|
|
68
|
+
"test": "echo \"Error: no test specified\" && exit 1",
|
|
69
|
+
"storybook": "storybook dev -p 6006",
|
|
70
|
+
"build-storybook": "storybook build",
|
|
71
|
+
"storybook-docs": "storybook dev --docs",
|
|
72
|
+
"build-storybook-docs": "storybook build --docs"
|
|
73
|
+
},
|
|
74
|
+
"main": "dist/cjs/index.js",
|
|
75
|
+
"module": "dist/esm/index.js",
|
|
76
|
+
"files": [
|
|
77
|
+
"dist",
|
|
78
|
+
"src"
|
|
79
|
+
],
|
|
80
|
+
"types": "dist/index.d.ts"
|
|
81
|
+
}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Copyright (c) 2024 Opal Kelly Incorporated
|
|
3
|
+
*
|
|
4
|
+
* This source code is licensed under the FrontPanel license.
|
|
5
|
+
* See the LICENSE file found in the root directory of this project.
|
|
6
|
+
*/
|
|
7
|
+
|
|
8
|
+
import { IFrontPanel, IFrontPanelEventSource, WorkQueue } from "@opalkelly/frontpanel-alloy-core";
|
|
9
|
+
|
|
10
|
+
interface FrontPanelProps extends React.PropsWithChildren<NonNullable<unknown>> {
|
|
11
|
+
/**
|
|
12
|
+
* The front panel device to be used
|
|
13
|
+
*/
|
|
14
|
+
device?: IFrontPanel;
|
|
15
|
+
/**
|
|
16
|
+
* Optional work queue to be used
|
|
17
|
+
*/
|
|
18
|
+
workQueue?: WorkQueue;
|
|
19
|
+
/**
|
|
20
|
+
* Optional event source to be used
|
|
21
|
+
*/
|
|
22
|
+
eventSource?: IFrontPanelEventSource;
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
export { FrontPanelProps };
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Copyright (c) 2024 Opal Kelly Incorporated
|
|
3
|
+
*
|
|
4
|
+
* This source code is licensed under the FrontPanel license.
|
|
5
|
+
* See the LICENSE file found in the root directory of this project.
|
|
6
|
+
*/
|
|
7
|
+
|
|
8
|
+
import React from "react";
|
|
9
|
+
|
|
10
|
+
import { FrontPanelPeriodicUpdateTimer, WorkQueue } from "@opalkelly/frontpanel-alloy-core";
|
|
11
|
+
|
|
12
|
+
import { FrontPanelProps } from "./FrontPanel.props";
|
|
13
|
+
|
|
14
|
+
import { FrontPanelContext } from "../../contexts";
|
|
15
|
+
|
|
16
|
+
const FrontPanel: React.FC<FrontPanelProps> = (props) => {
|
|
17
|
+
const {
|
|
18
|
+
device = window.FrontPanel,
|
|
19
|
+
workQueue = new WorkQueue(),
|
|
20
|
+
eventSource = new FrontPanelPeriodicUpdateTimer(device, 10)
|
|
21
|
+
} = props;
|
|
22
|
+
|
|
23
|
+
return (
|
|
24
|
+
<FrontPanelContext.Provider
|
|
25
|
+
value={{ device: device, workQueue: workQueue, eventSource: eventSource }}>
|
|
26
|
+
{props.children}
|
|
27
|
+
</FrontPanelContext.Provider>
|
|
28
|
+
);
|
|
29
|
+
};
|
|
30
|
+
|
|
31
|
+
FrontPanel.displayName = "FrontPanel";
|
|
32
|
+
|
|
33
|
+
export default FrontPanel;
|
|
File without changes
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Copyright (c) 2024 Opal Kelly Incorporated
|
|
3
|
+
*
|
|
4
|
+
* This source code is licensed under the FrontPanel license.
|
|
5
|
+
* See the LICENSE file found in the root directory of this project.
|
|
6
|
+
*/
|
|
7
|
+
|
|
8
|
+
import { EndpointAddressProps } from "../types";
|
|
9
|
+
|
|
10
|
+
/**
|
|
11
|
+
* Interface for the properties of the `FrontPanelIndicator` component.
|
|
12
|
+
*/
|
|
13
|
+
interface FrontPanelIndicatorProps {
|
|
14
|
+
/**
|
|
15
|
+
* Address of the frontpanel endpoint
|
|
16
|
+
*/
|
|
17
|
+
fpEndpoint: EndpointAddressProps;
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
export default FrontPanelIndicatorProps;
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Copyright (c) 2024 Opal Kelly Incorporated
|
|
3
|
+
*
|
|
4
|
+
* This source code is licensed under the FrontPanel license.
|
|
5
|
+
* See the LICENSE file found in the root directory of this project.
|
|
6
|
+
*/
|
|
7
|
+
|
|
8
|
+
import type { Meta, StoryObj } from "@storybook/react";
|
|
9
|
+
|
|
10
|
+
import withApplication from "../../stories/decorators/Application.decorator";
|
|
11
|
+
import withFrontPanel from "../../stories/decorators/FrontPanel.decorator";
|
|
12
|
+
|
|
13
|
+
import FrontPanelIndicator from "./FrontPanelIndicator";
|
|
14
|
+
|
|
15
|
+
// Configure Story metadata
|
|
16
|
+
const meta = {
|
|
17
|
+
title: "Components/FrontPanel/FrontPanelIndicator",
|
|
18
|
+
component: FrontPanelIndicator,
|
|
19
|
+
parameters: {
|
|
20
|
+
layout: "centered" // Center the component in the Canvas
|
|
21
|
+
},
|
|
22
|
+
tags: ["autodocs"], // Automatically generate documentation
|
|
23
|
+
argTypes: {
|
|
24
|
+
size: {
|
|
25
|
+
control: { type: "range", min: 1, max: 3, step: 1 }
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
} satisfies Meta<typeof FrontPanelIndicator>;
|
|
29
|
+
|
|
30
|
+
export default meta;
|
|
31
|
+
|
|
32
|
+
type Story = StoryObj<typeof meta>;
|
|
33
|
+
|
|
34
|
+
// Primary Story
|
|
35
|
+
export const Primary: Story = {
|
|
36
|
+
decorators: [withApplication, withFrontPanel],
|
|
37
|
+
args: {
|
|
38
|
+
label: "Wire Indicator",
|
|
39
|
+
fpEndpoint: { epAddress: 0x20, bitOffset: 1 },
|
|
40
|
+
// Optional Properties
|
|
41
|
+
size: 1,
|
|
42
|
+
tooltip: "Indicator for wire endpoint"
|
|
43
|
+
}
|
|
44
|
+
};
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Copyright (c) 2024 Opal Kelly Incorporated
|
|
3
|
+
*
|
|
4
|
+
* This source code is licensed under the FrontPanel license.
|
|
5
|
+
* See the LICENSE file found in the root directory of this project.
|
|
6
|
+
*/
|
|
7
|
+
|
|
8
|
+
import React from "react";
|
|
9
|
+
|
|
10
|
+
import { Indicator } from "../../primitives";
|
|
11
|
+
|
|
12
|
+
import FrontPanelIndicatorProps from "./FrontPanelIndicator.props";
|
|
13
|
+
|
|
14
|
+
import { FrontPanelContext } from "../../contexts";
|
|
15
|
+
|
|
16
|
+
import { IFrontPanel } from "@opalkelly/frontpanel-alloy-core";
|
|
17
|
+
|
|
18
|
+
type FrontPanelIndicatorElement = React.ElementRef<typeof Indicator>;
|
|
19
|
+
|
|
20
|
+
interface FrontPanelIndicatorCombinedProps
|
|
21
|
+
extends Omit<React.ComponentPropsWithoutRef<typeof Indicator>, "state">,
|
|
22
|
+
FrontPanelIndicatorProps {}
|
|
23
|
+
|
|
24
|
+
export type { FrontPanelIndicatorCombinedProps };
|
|
25
|
+
|
|
26
|
+
/**
|
|
27
|
+
* `FrontPanelIndicator` is a React component that renders an indicator that represents the state of a WireOut endpoint.
|
|
28
|
+
*
|
|
29
|
+
* @component
|
|
30
|
+
* @param {object} props - Properties passed to component
|
|
31
|
+
* @param {React.Ref} forwardedRef - Forwarded ref for the indicator
|
|
32
|
+
*
|
|
33
|
+
* @returns {React.Node} The rendered FrontPanelIndicator component
|
|
34
|
+
*
|
|
35
|
+
* @example
|
|
36
|
+
* ```jsx
|
|
37
|
+
* <FrontPanelIndicator
|
|
38
|
+
* label="Indicator"
|
|
39
|
+
* fpEndpoint={{epAddress: 0x20, bitOffset: 1}} />
|
|
40
|
+
* ```
|
|
41
|
+
*/
|
|
42
|
+
const FrontPanelIndicator = React.forwardRef<
|
|
43
|
+
FrontPanelIndicatorElement,
|
|
44
|
+
FrontPanelIndicatorCombinedProps
|
|
45
|
+
>((props, forwardedRef) => {
|
|
46
|
+
const [bitValue, setBitValue] = React.useState<boolean>(false);
|
|
47
|
+
|
|
48
|
+
const { device, workQueue, eventSource } = React.useContext(FrontPanelContext);
|
|
49
|
+
|
|
50
|
+
const { fpEndpoint, ...rootProps } = props;
|
|
51
|
+
|
|
52
|
+
const targetWireBitMask = 1 << fpEndpoint.bitOffset;
|
|
53
|
+
|
|
54
|
+
const onUpdateWireValue = React.useCallback(
|
|
55
|
+
async (sender: IFrontPanel): Promise<void> => {
|
|
56
|
+
await workQueue.Post(async () => {
|
|
57
|
+
const sourceWireValue = await sender.getWireOutValue(fpEndpoint.epAddress);
|
|
58
|
+
const sourceBitValue = (sourceWireValue & targetWireBitMask) === targetWireBitMask;
|
|
59
|
+
setBitValue(sourceBitValue);
|
|
60
|
+
});
|
|
61
|
+
},
|
|
62
|
+
[fpEndpoint, targetWireBitMask]
|
|
63
|
+
);
|
|
64
|
+
|
|
65
|
+
React.useEffect(() => {
|
|
66
|
+
onUpdateWireValue(device);
|
|
67
|
+
|
|
68
|
+
const subscription =
|
|
69
|
+
eventSource?.WireOutValuesChangedEvent.SubscribeAsync(onUpdateWireValue);
|
|
70
|
+
|
|
71
|
+
return () => {
|
|
72
|
+
subscription?.Cancel();
|
|
73
|
+
};
|
|
74
|
+
}, [device, eventSource, onUpdateWireValue]);
|
|
75
|
+
|
|
76
|
+
return <Indicator {...rootProps} ref={forwardedRef} state={bitValue} />;
|
|
77
|
+
});
|
|
78
|
+
|
|
79
|
+
FrontPanelIndicator.displayName = "FrontPanelIndicator";
|
|
80
|
+
|
|
81
|
+
export default FrontPanelIndicator;
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Copyright (c) 2024 Opal Kelly Incorporated
|
|
3
|
+
*
|
|
4
|
+
* This source code is licensed under the FrontPanel license.
|
|
5
|
+
* See the LICENSE file found in the root directory of this project.
|
|
6
|
+
*/
|
|
7
|
+
|
|
8
|
+
export { default } from "./FrontPanelIndicator";
|
|
9
|
+
|
|
10
|
+
export { default as FrontPanelIndicatorProps } from "./FrontPanelIndicator.props";
|
|
File without changes
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Copyright (c) 2024 Opal Kelly Incorporated
|
|
3
|
+
*
|
|
4
|
+
* This source code is licensed under the FrontPanel license.
|
|
5
|
+
* See the LICENSE file found in the root directory of this project.
|
|
6
|
+
*/
|
|
7
|
+
|
|
8
|
+
import { EndpointAddressProps } from "../types";
|
|
9
|
+
|
|
10
|
+
/**
|
|
11
|
+
* Interface for the properties of the `FrontPanelNumberDisplay` component.
|
|
12
|
+
*
|
|
13
|
+
* @interface
|
|
14
|
+
*/
|
|
15
|
+
interface FrontPanelNumberDisplayProps {
|
|
16
|
+
/**
|
|
17
|
+
* Address of the frontpanel endpoint
|
|
18
|
+
*/
|
|
19
|
+
fpEndpoint: EndpointAddressProps;
|
|
20
|
+
|
|
21
|
+
/**
|
|
22
|
+
* Maximum value that the number display will allow
|
|
23
|
+
*/
|
|
24
|
+
maximumValue: bigint;
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
export default FrontPanelNumberDisplayProps;
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Copyright (c) 2024 Opal Kelly Incorporated
|
|
3
|
+
*
|
|
4
|
+
* This source code is licensed under the FrontPanel license.
|
|
5
|
+
* See the LICENSE file found in the root directory of this project.
|
|
6
|
+
*/
|
|
7
|
+
|
|
8
|
+
import type { Meta, StoryObj } from "@storybook/react";
|
|
9
|
+
|
|
10
|
+
import withApplication from "../../stories/decorators/Application.decorator";
|
|
11
|
+
import withFrontPanel from "../../stories/decorators/FrontPanel.decorator";
|
|
12
|
+
|
|
13
|
+
import FrontPanelNumberDisplay from "./FrontPanelNumberDisplay";
|
|
14
|
+
|
|
15
|
+
import { NumeralSystem } from "../../core";
|
|
16
|
+
|
|
17
|
+
// Configure Story metadata
|
|
18
|
+
const meta = {
|
|
19
|
+
title: "Components/FrontPanel/FrontPanelNumberDisplay",
|
|
20
|
+
component: FrontPanelNumberDisplay,
|
|
21
|
+
parameters: {
|
|
22
|
+
layout: "centered" // Center the component in the Canvas
|
|
23
|
+
},
|
|
24
|
+
tags: ["autodocs"], // Automatically generate documentation
|
|
25
|
+
argTypes: {
|
|
26
|
+
size: {
|
|
27
|
+
control: { type: "range", min: 1, max: 3, step: 1 }
|
|
28
|
+
},
|
|
29
|
+
decimalScale: {
|
|
30
|
+
control: { type: "range", min: 0, max: 20, step: 1 }
|
|
31
|
+
},
|
|
32
|
+
numeralSystem: {
|
|
33
|
+
control: "radio",
|
|
34
|
+
options: ["Decimal", "Hexadecimal", "Binary", "Octal"],
|
|
35
|
+
mapping: {
|
|
36
|
+
Decimal: NumeralSystem.Decimal,
|
|
37
|
+
Hexadecimal: NumeralSystem.Hexadecimal,
|
|
38
|
+
Binary: NumeralSystem.Binary,
|
|
39
|
+
Octal: NumeralSystem.Octal
|
|
40
|
+
}
|
|
41
|
+
},
|
|
42
|
+
maximumValue: { control: "text" }
|
|
43
|
+
}
|
|
44
|
+
} satisfies Meta<typeof FrontPanelNumberDisplay>;
|
|
45
|
+
|
|
46
|
+
export default meta;
|
|
47
|
+
|
|
48
|
+
type Story = StoryObj<typeof meta>;
|
|
49
|
+
|
|
50
|
+
// Primary Story
|
|
51
|
+
export const Primary: Story = {
|
|
52
|
+
decorators: [withApplication, withFrontPanel],
|
|
53
|
+
args: {
|
|
54
|
+
fpEndpoint: { epAddress: 0x20, bitOffset: 1 },
|
|
55
|
+
maximumValue: 0xffffffffn,
|
|
56
|
+
// Optional Properties
|
|
57
|
+
numeralSystem: NumeralSystem.Decimal,
|
|
58
|
+
decimalScale: 0,
|
|
59
|
+
label: {
|
|
60
|
+
text: "Wire Value",
|
|
61
|
+
verticalPosition: "top",
|
|
62
|
+
horizontalPosition: "left"
|
|
63
|
+
},
|
|
64
|
+
size: 1,
|
|
65
|
+
tooltip: "The wire endpoint value"
|
|
66
|
+
}
|
|
67
|
+
};
|
|
@@ -0,0 +1,130 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Copyright (c) 2024 Opal Kelly Incorporated
|
|
3
|
+
*
|
|
4
|
+
* This source code is licensed under the FrontPanel license.
|
|
5
|
+
* See the LICENSE file found in the root directory of this project.
|
|
6
|
+
*/
|
|
7
|
+
|
|
8
|
+
import React from "react";
|
|
9
|
+
|
|
10
|
+
import "./FrontPanelNumberDisplay.css";
|
|
11
|
+
|
|
12
|
+
import { NumberDisplay } from "../../primitives";
|
|
13
|
+
|
|
14
|
+
import FrontPanelNumberDisplayProps from "./FrontPanelNumberDisplay.props";
|
|
15
|
+
|
|
16
|
+
import { FrontPanelContext } from "../../contexts";
|
|
17
|
+
|
|
18
|
+
import { CalculateBitLength } from "../../core";
|
|
19
|
+
|
|
20
|
+
import { IFrontPanel, WIREOUT_ADDRESS_RANGE } from "@opalkelly/frontpanel-alloy-core";
|
|
21
|
+
|
|
22
|
+
type FrontPanelNumberDisplayElement = React.ElementRef<typeof NumberDisplay>;
|
|
23
|
+
|
|
24
|
+
interface FrontPanelNumberDisplayCombinedProps
|
|
25
|
+
extends Omit<
|
|
26
|
+
React.ComponentPropsWithoutRef<typeof NumberDisplay>,
|
|
27
|
+
"value" | "maximumValue" | "minimumValue"
|
|
28
|
+
>,
|
|
29
|
+
FrontPanelNumberDisplayProps {}
|
|
30
|
+
|
|
31
|
+
export type { FrontPanelNumberDisplayCombinedProps };
|
|
32
|
+
|
|
33
|
+
/**
|
|
34
|
+
* `FrontPanelNumberDisplay` is a React component that renders a number display to represent the value of a WireOut endpoint using
|
|
35
|
+
* binary, octal, decimal, or hexadecimal numeral systems. It also allows to optionally set the decimal scale of the number when
|
|
36
|
+
* using the decimal numeral system.
|
|
37
|
+
*
|
|
38
|
+
* @component
|
|
39
|
+
* @param {object} props - Properties passed to component
|
|
40
|
+
* @param {React.Ref} forwardedRef - Forwarded ref for the number display
|
|
41
|
+
*
|
|
42
|
+
* @returns {React.Node} The rendered FrontPanelNumberDisplay component
|
|
43
|
+
*
|
|
44
|
+
* @example
|
|
45
|
+
* ```jsx
|
|
46
|
+
* <FrontPanelNumberDisplay
|
|
47
|
+
* fpEndpoint={{epAddress: 0x20, bitOffset: 1}}
|
|
48
|
+
* maximumValue=0xffffffff />
|
|
49
|
+
* ```
|
|
50
|
+
*/
|
|
51
|
+
const FrontPanelNumberDisplay = React.forwardRef<
|
|
52
|
+
FrontPanelNumberDisplayElement,
|
|
53
|
+
FrontPanelNumberDisplayCombinedProps
|
|
54
|
+
>((props, forwardedRef) => {
|
|
55
|
+
const [value, setValue] = React.useState<bigint>(0n);
|
|
56
|
+
|
|
57
|
+
const { device, workQueue, eventSource } = React.useContext(FrontPanelContext);
|
|
58
|
+
|
|
59
|
+
const { maximumValue, fpEndpoint, ...rootProps } = props;
|
|
60
|
+
|
|
61
|
+
const targetBitLength: number = React.useMemo(() => {
|
|
62
|
+
return CalculateBitLength(maximumValue);
|
|
63
|
+
}, [maximumValue]);
|
|
64
|
+
|
|
65
|
+
const targetWireSpanBitMask =
|
|
66
|
+
((1n << BigInt(targetBitLength)) - 1n) << BigInt(fpEndpoint.bitOffset);
|
|
67
|
+
|
|
68
|
+
const onUpdateWireValue = React.useCallback(
|
|
69
|
+
async (sender: IFrontPanel): Promise<void> => {
|
|
70
|
+
await workQueue.Post(async () => {
|
|
71
|
+
// Get the wire value for the endpoint
|
|
72
|
+
let sourceWireValue = await sender.getWireOutValue(fpEndpoint.epAddress);
|
|
73
|
+
let targetWireBitMask = targetWireSpanBitMask & 0xffffffffn;
|
|
74
|
+
let sourceSpanValue =
|
|
75
|
+
(BigInt(sourceWireValue) & targetWireBitMask) >> BigInt(fpEndpoint.bitOffset);
|
|
76
|
+
|
|
77
|
+
if (targetWireSpanBitMask > 0xffffffffn) {
|
|
78
|
+
// The operations spans multiple endpoints
|
|
79
|
+
let currentWireSpanBitOffset = 32n - BigInt(fpEndpoint.bitOffset);
|
|
80
|
+
let currentWireSpanBitMask = targetWireSpanBitMask >> 32n;
|
|
81
|
+
|
|
82
|
+
for (
|
|
83
|
+
let sourceWireAddress = fpEndpoint.epAddress + 1;
|
|
84
|
+
sourceWireAddress <= WIREOUT_ADDRESS_RANGE.Maximum &&
|
|
85
|
+
currentWireSpanBitMask > 0n;
|
|
86
|
+
sourceWireAddress++
|
|
87
|
+
) {
|
|
88
|
+
// Get the wire value for the next endpoint
|
|
89
|
+
sourceWireValue = await sender.getWireOutValue(sourceWireAddress);
|
|
90
|
+
targetWireBitMask = currentWireSpanBitMask & 0xffffffffn;
|
|
91
|
+
sourceSpanValue |=
|
|
92
|
+
(BigInt(sourceWireValue) & targetWireBitMask) <<
|
|
93
|
+
currentWireSpanBitOffset;
|
|
94
|
+
|
|
95
|
+
currentWireSpanBitOffset += 32n;
|
|
96
|
+
currentWireSpanBitMask >>= 32n;
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
setValue(sourceSpanValue);
|
|
101
|
+
});
|
|
102
|
+
},
|
|
103
|
+
[fpEndpoint, targetWireSpanBitMask]
|
|
104
|
+
);
|
|
105
|
+
|
|
106
|
+
React.useEffect(() => {
|
|
107
|
+
onUpdateWireValue(device);
|
|
108
|
+
|
|
109
|
+
const subscription =
|
|
110
|
+
eventSource?.WireOutValuesChangedEvent.SubscribeAsync(onUpdateWireValue);
|
|
111
|
+
|
|
112
|
+
return () => {
|
|
113
|
+
subscription?.Cancel();
|
|
114
|
+
};
|
|
115
|
+
}, [device, eventSource, onUpdateWireValue]);
|
|
116
|
+
|
|
117
|
+
return (
|
|
118
|
+
<NumberDisplay
|
|
119
|
+
{...rootProps}
|
|
120
|
+
ref={forwardedRef}
|
|
121
|
+
maximumValue={maximumValue}
|
|
122
|
+
minimumValue={0n}
|
|
123
|
+
value={value}
|
|
124
|
+
/>
|
|
125
|
+
);
|
|
126
|
+
});
|
|
127
|
+
|
|
128
|
+
FrontPanelNumberDisplay.displayName = "FrontPanelNumberDisplay";
|
|
129
|
+
|
|
130
|
+
export default FrontPanelNumberDisplay;
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Copyright (c) 2024 Opal Kelly Incorporated
|
|
3
|
+
*
|
|
4
|
+
* This source code is licensed under the FrontPanel license.
|
|
5
|
+
* See the LICENSE file found in the root directory of this project.
|
|
6
|
+
*/
|
|
7
|
+
|
|
8
|
+
export { default } from "./FrontPanelNumberDisplay";
|
|
9
|
+
|
|
10
|
+
export { default as FrontPanelNumberDisplayProps } from "./FrontPanelNumberDisplay.props";
|
|
File without changes
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Copyright (c) 2024 Opal Kelly Incorporated
|
|
3
|
+
*
|
|
4
|
+
* This source code is licensed under the FrontPanel license.
|
|
5
|
+
* See the LICENSE file found in the root directory of this project.
|
|
6
|
+
*/
|
|
7
|
+
|
|
8
|
+
import { EndpointAddressProps } from "../types";
|
|
9
|
+
|
|
10
|
+
/**
|
|
11
|
+
* Interface for the properties of the `FrontPanelNumberEntry` component.
|
|
12
|
+
*
|
|
13
|
+
* @interface
|
|
14
|
+
*/
|
|
15
|
+
interface FrontPanelNumberEntryProps {
|
|
16
|
+
/**
|
|
17
|
+
* Address of the frontpanel endpoint
|
|
18
|
+
*/
|
|
19
|
+
fpEndpoint: EndpointAddressProps;
|
|
20
|
+
|
|
21
|
+
/**
|
|
22
|
+
* Maximum value that the number entry will allow.
|
|
23
|
+
*/
|
|
24
|
+
maximumValue: bigint;
|
|
25
|
+
|
|
26
|
+
/**
|
|
27
|
+
* Optional minimum value that the number entry will allow.
|
|
28
|
+
*/
|
|
29
|
+
minimumValue?: bigint;
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
export default FrontPanelNumberEntryProps;
|