@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
|
@@ -0,0 +1,62 @@
|
|
|
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 { NumeralSystem } from "../../core";
|
|
9
|
+
|
|
10
|
+
export type DigitEntryVariant = "standard" | "compact";
|
|
11
|
+
export type DigitEntrySize = 1 | 2 | 3;
|
|
12
|
+
export type DigitEntryValueChangeEventHandler = (value: number, isKeyDown: boolean) => void;
|
|
13
|
+
|
|
14
|
+
/**
|
|
15
|
+
* Interface for the properties of the `DigitEntry` component.
|
|
16
|
+
*/
|
|
17
|
+
interface DigitEntryProps {
|
|
18
|
+
/**
|
|
19
|
+
* The current value of the digit entry
|
|
20
|
+
*/
|
|
21
|
+
value: number;
|
|
22
|
+
|
|
23
|
+
/**
|
|
24
|
+
* Optional CSS class to apply to the digit entry
|
|
25
|
+
*/
|
|
26
|
+
className?: string;
|
|
27
|
+
|
|
28
|
+
/**
|
|
29
|
+
* The maximum value that the digit entry can have
|
|
30
|
+
*/
|
|
31
|
+
maximum?: number;
|
|
32
|
+
|
|
33
|
+
/**
|
|
34
|
+
* The minimum value that the digit entry can have
|
|
35
|
+
*/
|
|
36
|
+
minimum?: number;
|
|
37
|
+
|
|
38
|
+
/**
|
|
39
|
+
* The numeral system for the digit entry
|
|
40
|
+
* @default Decimal
|
|
41
|
+
*/
|
|
42
|
+
numeralSystem?: NumeralSystem;
|
|
43
|
+
|
|
44
|
+
/**
|
|
45
|
+
* Size of the digit entry
|
|
46
|
+
* @default 1
|
|
47
|
+
*/
|
|
48
|
+
size?: DigitEntrySize;
|
|
49
|
+
|
|
50
|
+
/**
|
|
51
|
+
* Variant of the digit entry
|
|
52
|
+
* @default standard
|
|
53
|
+
*/
|
|
54
|
+
variant?: DigitEntryVariant;
|
|
55
|
+
|
|
56
|
+
/**
|
|
57
|
+
* Optional event handler for the value changed event
|
|
58
|
+
*/
|
|
59
|
+
onValueChanged?: DigitEntryValueChangeEventHandler;
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
export default DigitEntryProps;
|
|
@@ -0,0 +1,84 @@
|
|
|
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 type { Meta, StoryObj } from "@storybook/react";
|
|
11
|
+
|
|
12
|
+
import { useArgs } from "@storybook/preview-api";
|
|
13
|
+
|
|
14
|
+
import DigitEntry from "./DigitEntry";
|
|
15
|
+
|
|
16
|
+
import { NumeralSystem } from "../../core";
|
|
17
|
+
|
|
18
|
+
// Configure Story metadata
|
|
19
|
+
const meta = {
|
|
20
|
+
title: "Components/DigitEntry",
|
|
21
|
+
component: DigitEntry,
|
|
22
|
+
parameters: {
|
|
23
|
+
layout: "centered" // Center the component in the Canvas
|
|
24
|
+
},
|
|
25
|
+
tags: ["autodocs"], // Automatically generate documentation
|
|
26
|
+
argTypes: {
|
|
27
|
+
variant: {
|
|
28
|
+
control: "radio",
|
|
29
|
+
options: ["standard", "compact"]
|
|
30
|
+
},
|
|
31
|
+
size: {
|
|
32
|
+
control: { type: "range", min: 1, max: 3, step: 1 }
|
|
33
|
+
},
|
|
34
|
+
numeralSystem: {
|
|
35
|
+
control: "radio",
|
|
36
|
+
options: ["Decimal", "Hexadecimal", "Binary", "Octal"],
|
|
37
|
+
mapping: {
|
|
38
|
+
Decimal: NumeralSystem.Decimal,
|
|
39
|
+
Hexadecimal: NumeralSystem.Hexadecimal,
|
|
40
|
+
Binary: NumeralSystem.Binary,
|
|
41
|
+
Octal: NumeralSystem.Octal
|
|
42
|
+
}
|
|
43
|
+
},
|
|
44
|
+
value: {
|
|
45
|
+
control: { type: "number", step: 1 }
|
|
46
|
+
},
|
|
47
|
+
maximum: {
|
|
48
|
+
control: { type: "number", step: 1 }
|
|
49
|
+
},
|
|
50
|
+
minimum: {
|
|
51
|
+
control: { type: "number", step: 1 }
|
|
52
|
+
},
|
|
53
|
+
// Disable event callback arguments
|
|
54
|
+
onValueChanged: {
|
|
55
|
+
control: { disable: true }
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
} satisfies Meta<typeof DigitEntry>;
|
|
59
|
+
|
|
60
|
+
export default meta;
|
|
61
|
+
|
|
62
|
+
type Story = StoryObj<typeof meta>;
|
|
63
|
+
|
|
64
|
+
// Primary Story
|
|
65
|
+
export const Primary: Story = {
|
|
66
|
+
render: (args) => {
|
|
67
|
+
const [{ value }, updateArgs] = useArgs();
|
|
68
|
+
|
|
69
|
+
function onValueChanged(value: number, _isKeyDown: boolean): void {
|
|
70
|
+
updateArgs({ value: value });
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
return <DigitEntry {...args} value={value} onValueChanged={onValueChanged} />;
|
|
74
|
+
},
|
|
75
|
+
args: {
|
|
76
|
+
value: 8,
|
|
77
|
+
// Optional Properties
|
|
78
|
+
size: 1,
|
|
79
|
+
numeralSystem: NumeralSystem.Decimal,
|
|
80
|
+
variant: "standard",
|
|
81
|
+
maximum: undefined,
|
|
82
|
+
minimum: undefined
|
|
83
|
+
}
|
|
84
|
+
};
|
|
@@ -0,0 +1,226 @@
|
|
|
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 classNames from "classnames";
|
|
11
|
+
|
|
12
|
+
import { IndicatorArrowIcon, IndicatorArrowDirection } from "../../components/Icons";
|
|
13
|
+
import { IndicatorBarIcon } from "../../components/Icons";
|
|
14
|
+
|
|
15
|
+
import DigitEntryProps from "./DigitEntry.props";
|
|
16
|
+
|
|
17
|
+
import "../../index.css";
|
|
18
|
+
|
|
19
|
+
import "./DigitEntry.css";
|
|
20
|
+
|
|
21
|
+
import { NumeralSystem } from "../../core";
|
|
22
|
+
|
|
23
|
+
type DigitEntryElement = React.ElementRef<"div">;
|
|
24
|
+
|
|
25
|
+
/**
|
|
26
|
+
* `DigitEntry` is a React component that renders a digit entry field to allow setting the value of the digit represented
|
|
27
|
+
* in binary, octal, decimal, or hexadecimal number systems. The value of the digit can be entered by key or the current
|
|
28
|
+
* value can be incremented or decremented using the up and down arrow keys and or the mouse wheel. A maximum and minimum
|
|
29
|
+
* value can be specified to limit the range of values that the digit entry field can have. Indicators are displayed to
|
|
30
|
+
* show when the value can be incremented or decremented based on the maximum and minimum values.
|
|
31
|
+
*
|
|
32
|
+
* @component
|
|
33
|
+
* @param {Object} props - Properties passed to component
|
|
34
|
+
* @param {React.Ref<DigitEntryElement>} forwardedRef - Forwarded ref for the number display
|
|
35
|
+
*
|
|
36
|
+
* @returns {React.ReactElement} The rendered DigitEntry component
|
|
37
|
+
*
|
|
38
|
+
* @example
|
|
39
|
+
* ```jsx
|
|
40
|
+
* <DigitEntry
|
|
41
|
+
* value={0}
|
|
42
|
+
* maximum={5}
|
|
43
|
+
* minimum={2} />
|
|
44
|
+
* ```
|
|
45
|
+
*/
|
|
46
|
+
const DigitEntry: React.FC<DigitEntryProps> = (props) => {
|
|
47
|
+
const digitEntryRef = React.useRef<DigitEntryElement>(null);
|
|
48
|
+
|
|
49
|
+
const {
|
|
50
|
+
className,
|
|
51
|
+
variant = "standard",
|
|
52
|
+
size = 1,
|
|
53
|
+
value,
|
|
54
|
+
maximum,
|
|
55
|
+
minimum,
|
|
56
|
+
numeralSystem = NumeralSystem.Decimal,
|
|
57
|
+
onValueChanged
|
|
58
|
+
} = props;
|
|
59
|
+
|
|
60
|
+
const valueRef = React.useRef(value);
|
|
61
|
+
|
|
62
|
+
valueRef.current = props.value;
|
|
63
|
+
|
|
64
|
+
const valueChangedRef = React.useRef(onValueChanged);
|
|
65
|
+
|
|
66
|
+
valueChangedRef.current = onValueChanged;
|
|
67
|
+
|
|
68
|
+
const onDigitKeyboardEventHandler = (event: React.KeyboardEvent<HTMLDivElement>) => {
|
|
69
|
+
let isHandled: boolean = false;
|
|
70
|
+
|
|
71
|
+
switch (event.key) {
|
|
72
|
+
case "ArrowUp":
|
|
73
|
+
onValueChanged?.(value + 1, false);
|
|
74
|
+
isHandled = true;
|
|
75
|
+
break;
|
|
76
|
+
case "ArrowDown":
|
|
77
|
+
onValueChanged?.(value - 1, false);
|
|
78
|
+
isHandled = true;
|
|
79
|
+
break;
|
|
80
|
+
case "ArrowRight":
|
|
81
|
+
{
|
|
82
|
+
const nextElement: HTMLDivElement | null = event.currentTarget
|
|
83
|
+
.nextElementSibling as HTMLDivElement;
|
|
84
|
+
nextElement?.focus();
|
|
85
|
+
isHandled = true;
|
|
86
|
+
}
|
|
87
|
+
break;
|
|
88
|
+
case "ArrowLeft":
|
|
89
|
+
{
|
|
90
|
+
const previousElement: HTMLDivElement | null = event.currentTarget
|
|
91
|
+
.previousElementSibling as HTMLDivElement;
|
|
92
|
+
previousElement?.focus();
|
|
93
|
+
isHandled = true;
|
|
94
|
+
}
|
|
95
|
+
break;
|
|
96
|
+
default:
|
|
97
|
+
isHandled = false;
|
|
98
|
+
break;
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
if (isHandled) {
|
|
102
|
+
event.stopPropagation();
|
|
103
|
+
event.preventDefault();
|
|
104
|
+
} else {
|
|
105
|
+
const numericValue: number = parseInt(event.key, numeralSystem);
|
|
106
|
+
|
|
107
|
+
if (!Number.isNaN(numericValue)) {
|
|
108
|
+
onValueChanged?.(numericValue, true);
|
|
109
|
+
|
|
110
|
+
const nextElement: HTMLDivElement | null = event.currentTarget
|
|
111
|
+
.nextElementSibling as HTMLDivElement;
|
|
112
|
+
|
|
113
|
+
nextElement?.focus();
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
};
|
|
117
|
+
|
|
118
|
+
React.useEffect(() => {
|
|
119
|
+
const onDigitMouseWheelEventHandler = (event: WheelEvent) => {
|
|
120
|
+
if (event.deltaY < 0) {
|
|
121
|
+
valueChangedRef.current?.(valueRef.current + 1, false);
|
|
122
|
+
|
|
123
|
+
event.stopPropagation();
|
|
124
|
+
event.preventDefault();
|
|
125
|
+
} else if (event.deltaY > 0) {
|
|
126
|
+
valueChangedRef.current?.(valueRef.current - 1, false);
|
|
127
|
+
|
|
128
|
+
event.stopPropagation();
|
|
129
|
+
event.preventDefault();
|
|
130
|
+
}
|
|
131
|
+
};
|
|
132
|
+
|
|
133
|
+
digitEntryRef.current?.addEventListener("wheel", onDigitMouseWheelEventHandler, {
|
|
134
|
+
passive: false
|
|
135
|
+
});
|
|
136
|
+
|
|
137
|
+
return () => {
|
|
138
|
+
digitEntryRef.current?.removeEventListener("wheel", onDigitMouseWheelEventHandler);
|
|
139
|
+
};
|
|
140
|
+
}, [digitEntryRef]);
|
|
141
|
+
|
|
142
|
+
const canIncrement = maximum != null ? value < maximum : true;
|
|
143
|
+
const canDecrement = minimum != null ? value > minimum : true;
|
|
144
|
+
|
|
145
|
+
const DigitEntryIncrementIndicator = (): React.ReactNode => {
|
|
146
|
+
let indicator: React.ReactNode;
|
|
147
|
+
|
|
148
|
+
switch (variant) {
|
|
149
|
+
case "standard":
|
|
150
|
+
indicator = (
|
|
151
|
+
<IndicatorArrowIcon
|
|
152
|
+
className={classNames("okDigitEntryIncrementIndicator")}
|
|
153
|
+
direction={IndicatorArrowDirection.Up}
|
|
154
|
+
color="#343434"
|
|
155
|
+
data-enabled={canIncrement}
|
|
156
|
+
/>
|
|
157
|
+
);
|
|
158
|
+
break;
|
|
159
|
+
case "compact":
|
|
160
|
+
indicator = (
|
|
161
|
+
<IndicatorBarIcon
|
|
162
|
+
className={classNames("okDigitEntryIncrementIndicator")}
|
|
163
|
+
color="#343434"
|
|
164
|
+
data-enabled={canIncrement}
|
|
165
|
+
/>
|
|
166
|
+
);
|
|
167
|
+
break;
|
|
168
|
+
default:
|
|
169
|
+
indicator = null;
|
|
170
|
+
break;
|
|
171
|
+
}
|
|
172
|
+
|
|
173
|
+
return indicator;
|
|
174
|
+
};
|
|
175
|
+
|
|
176
|
+
const DigitEntryDecrementIndicator = (): React.ReactNode => {
|
|
177
|
+
let indicator: React.ReactNode;
|
|
178
|
+
|
|
179
|
+
switch (variant) {
|
|
180
|
+
case "standard":
|
|
181
|
+
indicator = (
|
|
182
|
+
<IndicatorArrowIcon
|
|
183
|
+
className={classNames("okDigitEntryDecrementIndicator")}
|
|
184
|
+
direction={IndicatorArrowDirection.Down}
|
|
185
|
+
color="#343434"
|
|
186
|
+
data-enabled={canDecrement}
|
|
187
|
+
/>
|
|
188
|
+
);
|
|
189
|
+
break;
|
|
190
|
+
case "compact":
|
|
191
|
+
indicator = (
|
|
192
|
+
<IndicatorBarIcon
|
|
193
|
+
className={classNames("okDigitEntryDecrementIndicator")}
|
|
194
|
+
color="#343434"
|
|
195
|
+
data-enabled={canDecrement}
|
|
196
|
+
/>
|
|
197
|
+
);
|
|
198
|
+
break;
|
|
199
|
+
default:
|
|
200
|
+
indicator = null;
|
|
201
|
+
break;
|
|
202
|
+
}
|
|
203
|
+
|
|
204
|
+
return indicator;
|
|
205
|
+
};
|
|
206
|
+
|
|
207
|
+
return (
|
|
208
|
+
<div
|
|
209
|
+
className={classNames("okDigitEntry", className, "ok-r-size-" + size)}
|
|
210
|
+
ref={digitEntryRef}
|
|
211
|
+
tabIndex={-1}
|
|
212
|
+
onMouseEnter={(e) => e.currentTarget.focus()}
|
|
213
|
+
onMouseLeave={(e) => e.currentTarget.blur()}
|
|
214
|
+
onKeyDown={onDigitKeyboardEventHandler}>
|
|
215
|
+
<DigitEntryIncrementIndicator />
|
|
216
|
+
<div className={classNames("okDigitEntryContent", "ok-r-size-" + size)}>
|
|
217
|
+
{Math.abs(value).toString(Number(numeralSystem))}
|
|
218
|
+
</div>
|
|
219
|
+
<DigitEntryDecrementIndicator />
|
|
220
|
+
</div>
|
|
221
|
+
);
|
|
222
|
+
};
|
|
223
|
+
|
|
224
|
+
DigitEntry.displayName = "DigitEntry";
|
|
225
|
+
|
|
226
|
+
export default DigitEntry;
|
|
@@ -0,0 +1,15 @@
|
|
|
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 "./DigitEntry";
|
|
9
|
+
|
|
10
|
+
export { default as DigitEntryProps } from "./DigitEntry.props";
|
|
11
|
+
export {
|
|
12
|
+
DigitEntryVariant,
|
|
13
|
+
DigitEntrySize,
|
|
14
|
+
DigitEntryValueChangeEventHandler
|
|
15
|
+
} from "./DigitEntry.props";
|
|
@@ -0,0 +1,66 @@
|
|
|
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
|
+
.okIndicator {
|
|
9
|
+
/* Layout */
|
|
10
|
+
display: inline-flex;
|
|
11
|
+
padding: var(--indicator-padding, 6px 12px);
|
|
12
|
+
justify-content: flex-start;
|
|
13
|
+
align-items: baseline;
|
|
14
|
+
gap: 4px;
|
|
15
|
+
|
|
16
|
+
/* Style */
|
|
17
|
+
border-radius: 4px;
|
|
18
|
+
border: 1px solid var(--Gray-2, #d0d7df);
|
|
19
|
+
background: var(--Light, #fff);
|
|
20
|
+
|
|
21
|
+
/* Indicator Icon Style */
|
|
22
|
+
svg.okIndicatorIcon {
|
|
23
|
+
width: var(--indicator-icon-width, 9px);
|
|
24
|
+
height: var(--indicator-icon-height, 9px);
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
/* Label Style */
|
|
28
|
+
.okIndicatorLabel {
|
|
29
|
+
/* Typography */
|
|
30
|
+
color: var(--Dark, #343434);
|
|
31
|
+
text-align: center;
|
|
32
|
+
/* TODO: Determine how to get Inter font */
|
|
33
|
+
font-family: Inter, "Nunito Sans", sans-serif, ui-sans-serif;
|
|
34
|
+
font-size: var(--indicator-font-size, 12px);
|
|
35
|
+
font-style: normal;
|
|
36
|
+
font-weight: 500;
|
|
37
|
+
line-height: var(--indicator-line-height, 12px); /* 100% */
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
/* Size 1 */
|
|
41
|
+
&:where(.ok-r-size-1) {
|
|
42
|
+
--indicator-padding: 6px 12px;
|
|
43
|
+
--indicator-font-size: 12px;
|
|
44
|
+
--indicator-line-height: 12px;
|
|
45
|
+
--indicator-icon-width: 9px;
|
|
46
|
+
--indicator-icon-height: 9px;
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
/* Sizes 2 */
|
|
50
|
+
&:where(.ok-r-size-2) {
|
|
51
|
+
--indicator-padding: 10px 18px;
|
|
52
|
+
--indicator-font-size: 14px;
|
|
53
|
+
--indicator-line-height: 14px;
|
|
54
|
+
--indicator-icon-width: 10px;
|
|
55
|
+
--indicator-icon-height: 10px;
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
/* Sizes 3 */
|
|
59
|
+
&:where(.ok-r-size-3) {
|
|
60
|
+
--indicator-padding: 18px 22px;
|
|
61
|
+
--indicator-font-size: 20px;
|
|
62
|
+
--indicator-line-height: 20px;
|
|
63
|
+
--indicator-icon-width: 15px;
|
|
64
|
+
--indicator-icon-height: 15px;
|
|
65
|
+
}
|
|
66
|
+
}
|
|
@@ -0,0 +1,42 @@
|
|
|
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 type IndicatorSize = 1 | 2 | 3;
|
|
9
|
+
export type IndicatorState = boolean;
|
|
10
|
+
|
|
11
|
+
/**
|
|
12
|
+
* Interface for the properties of the `Indicator` component.
|
|
13
|
+
*/
|
|
14
|
+
interface IndicatorProps {
|
|
15
|
+
/**
|
|
16
|
+
* Label to be displayed on the indicator
|
|
17
|
+
*/
|
|
18
|
+
label: string;
|
|
19
|
+
|
|
20
|
+
/**
|
|
21
|
+
* Current state of the indicator
|
|
22
|
+
*/
|
|
23
|
+
state: IndicatorState;
|
|
24
|
+
|
|
25
|
+
/**
|
|
26
|
+
* Optional CSS class to apply to the indicator
|
|
27
|
+
*/
|
|
28
|
+
className?: string;
|
|
29
|
+
|
|
30
|
+
/**
|
|
31
|
+
* Optional size of the indicator
|
|
32
|
+
* @default 1
|
|
33
|
+
*/
|
|
34
|
+
size?: IndicatorSize;
|
|
35
|
+
|
|
36
|
+
/**
|
|
37
|
+
* Optional tooltip text to be displayed on hover
|
|
38
|
+
*/
|
|
39
|
+
tooltip?: string;
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
export default IndicatorProps;
|
|
@@ -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
|
+
|
|
12
|
+
import Indicator from "./Indicator";
|
|
13
|
+
|
|
14
|
+
// Configure Story metadata
|
|
15
|
+
const meta = {
|
|
16
|
+
title: "Components/Indicator",
|
|
17
|
+
component: Indicator,
|
|
18
|
+
parameters: {
|
|
19
|
+
layout: "centered" // Center the component in the Canvas
|
|
20
|
+
},
|
|
21
|
+
tags: ["autodocs"], // Automatically generate documentation
|
|
22
|
+
argTypes: {
|
|
23
|
+
size: {
|
|
24
|
+
control: { type: "range", min: 1, max: 3, step: 1 }
|
|
25
|
+
},
|
|
26
|
+
state: { control: { type: "boolean" } }
|
|
27
|
+
}
|
|
28
|
+
} satisfies Meta<typeof Indicator>;
|
|
29
|
+
|
|
30
|
+
export default meta;
|
|
31
|
+
|
|
32
|
+
type Story = StoryObj<typeof meta>;
|
|
33
|
+
|
|
34
|
+
// Primary Story
|
|
35
|
+
export const Primary: Story = {
|
|
36
|
+
decorators: [withApplication],
|
|
37
|
+
args: {
|
|
38
|
+
label: "Indicator",
|
|
39
|
+
state: true,
|
|
40
|
+
// Optional Properties
|
|
41
|
+
size: 1,
|
|
42
|
+
tooltip: "Indicator tooltip"
|
|
43
|
+
}
|
|
44
|
+
};
|
|
@@ -0,0 +1,64 @@
|
|
|
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 classnames from "classnames";
|
|
11
|
+
|
|
12
|
+
import IndicatorProps from "./Indicator.props";
|
|
13
|
+
|
|
14
|
+
import "../../index.css";
|
|
15
|
+
|
|
16
|
+
import "./Indicator.css";
|
|
17
|
+
|
|
18
|
+
import { withTooltip } from "../TooltipUtility";
|
|
19
|
+
|
|
20
|
+
import { ToggleState } from "../../core";
|
|
21
|
+
|
|
22
|
+
import { IndicatorStateIcon } from "../../components/Icons";
|
|
23
|
+
|
|
24
|
+
type IndicatorElement = React.ElementRef<"span">;
|
|
25
|
+
|
|
26
|
+
/**
|
|
27
|
+
* `Indicator` is a React component that renders an indicator that represents the state of a boolean value with an
|
|
28
|
+
* optional tooltip.
|
|
29
|
+
*
|
|
30
|
+
* @component
|
|
31
|
+
* @param {object} props - Properties passed to component
|
|
32
|
+
* @param {React.Ref} forwardedRef - Forwarded ref for the indicator
|
|
33
|
+
*
|
|
34
|
+
* @returns {React.Node} The rendered Indicator component
|
|
35
|
+
*
|
|
36
|
+
* @example
|
|
37
|
+
* ```jsx
|
|
38
|
+
* <Indicator
|
|
39
|
+
* label="Indicator"
|
|
40
|
+
* state={true} />
|
|
41
|
+
* ```
|
|
42
|
+
*/
|
|
43
|
+
const Indicator = React.forwardRef<IndicatorElement, IndicatorProps>((props, forwardedRef) => {
|
|
44
|
+
const { className, label, size = 1, state, ...indicatorProps } = props;
|
|
45
|
+
|
|
46
|
+
const IndicatorWithTooltip = withTooltip(
|
|
47
|
+
<span
|
|
48
|
+
{...indicatorProps}
|
|
49
|
+
ref={forwardedRef}
|
|
50
|
+
className={classnames("okIndicator", className, "ok-r-size-" + size)}>
|
|
51
|
+
<IndicatorStateIcon
|
|
52
|
+
className="okIndicatorIcon"
|
|
53
|
+
state={state ? ToggleState.On : ToggleState.Off}
|
|
54
|
+
/>
|
|
55
|
+
<span className={classnames("okIndicatorLabel")}>{label}</span>
|
|
56
|
+
</span>
|
|
57
|
+
);
|
|
58
|
+
|
|
59
|
+
return <IndicatorWithTooltip {...props} />;
|
|
60
|
+
});
|
|
61
|
+
|
|
62
|
+
Indicator.displayName = "Indicator";
|
|
63
|
+
|
|
64
|
+
export default Indicator;
|
|
@@ -0,0 +1,11 @@
|
|
|
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 "./Indicator";
|
|
9
|
+
|
|
10
|
+
export { default as IndicatorProps } from "./Indicator.props";
|
|
11
|
+
export { IndicatorSize, IndicatorState } from "./Indicator.props";
|
|
@@ -0,0 +1,49 @@
|
|
|
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
|
+
.okLabel {
|
|
9
|
+
/* Layout */
|
|
10
|
+
display: inline-flex;
|
|
11
|
+
flex-direction: column;
|
|
12
|
+
align-items: flex-start;
|
|
13
|
+
gap: 4px;
|
|
14
|
+
|
|
15
|
+
/* Text Style */
|
|
16
|
+
.okLabelText {
|
|
17
|
+
/* Typography */
|
|
18
|
+
color: var(--Dark, #343434);
|
|
19
|
+
font-family: Inter, "Nunito Sans", sans-serif, ui-sans-serif;
|
|
20
|
+
font-size: 12px;
|
|
21
|
+
font-style: normal;
|
|
22
|
+
font-weight: 400;
|
|
23
|
+
line-height: 12px; /* 100% */
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
/* Label Position Left Top*/
|
|
27
|
+
&:where(.ok-pos-left-top) {
|
|
28
|
+
flex-direction: column;
|
|
29
|
+
align-items: flex-start;
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
/* Label Position Left Bottom*/
|
|
33
|
+
&:where(.ok-pos-left-bottom) {
|
|
34
|
+
flex-direction: column-reverse;
|
|
35
|
+
align-items: flex-start;
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
/* Label Position Right Top*/
|
|
39
|
+
&:where(.ok-pos-right-top) {
|
|
40
|
+
flex-direction: column;
|
|
41
|
+
align-items: flex-end;
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
/* Label Position Right Bottom*/
|
|
45
|
+
&:where(.ok-pos-right-bottom) {
|
|
46
|
+
flex-direction: column-reverse;
|
|
47
|
+
align-items: flex-end;
|
|
48
|
+
}
|
|
49
|
+
}
|