@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,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
|
+
.okToggle {
|
|
9
|
+
/* Layout */
|
|
10
|
+
display: inline-flex;
|
|
11
|
+
padding: var(--toggle-padding, 6px 12px);
|
|
12
|
+
justify-content: center;
|
|
13
|
+
align-items: center;
|
|
14
|
+
gap: 4px;
|
|
15
|
+
|
|
16
|
+
color: var(--base-white, #fff);
|
|
17
|
+
|
|
18
|
+
/* Style */
|
|
19
|
+
border-width: 0px;
|
|
20
|
+
border-radius: 4px;
|
|
21
|
+
background: var(--brand-12, #44bd84);
|
|
22
|
+
|
|
23
|
+
/* Typography */
|
|
24
|
+
color: var(--Base-White, #fff);
|
|
25
|
+
text-align: center;
|
|
26
|
+
font-family: Inter, "Nunito Sans", sans-serif, ui-sans-serif;
|
|
27
|
+
font-size: var(--toggle-font-size, 12px);
|
|
28
|
+
font-style: normal;
|
|
29
|
+
font-weight: 600;
|
|
30
|
+
line-height: 12px; /* 100% */
|
|
31
|
+
|
|
32
|
+
/* Size 1 */
|
|
33
|
+
&:where(.ok-r-size-1) {
|
|
34
|
+
--toggle-padding: 6px 12px;
|
|
35
|
+
--toggle-font-size: 12px;
|
|
36
|
+
--toggle-line-height: 12px;
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
/* Size 2 */
|
|
40
|
+
&:where(.ok-r-size-2) {
|
|
41
|
+
--toggle-padding: 10px 18px;
|
|
42
|
+
--toggle-font-size: 14px;
|
|
43
|
+
--toggle-line-height: 14px;
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
/* Size 3 */
|
|
47
|
+
&:where(.ok-r-size-3) {
|
|
48
|
+
--toggle-padding: 18px 22px;
|
|
49
|
+
--toggle-font-size: 20px;
|
|
50
|
+
--toggle-line-height: 20px;
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
/* State Disabled */
|
|
55
|
+
.okToggle[data-disabled="true"] {
|
|
56
|
+
background: var(--Gray-2, #d0d7df);
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
/* State On */
|
|
60
|
+
.okToggle[data-state="on"]:not([data-disabled="true"]) {
|
|
61
|
+
background: #329466;
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
/* State Off */
|
|
65
|
+
.okToggle[data-state="off"]:not([data-disabled="true"]) {
|
|
66
|
+
background: var(--brand-12, #44bd84);
|
|
67
|
+
}
|
|
@@ -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 { ToggleState } from "../../core";
|
|
9
|
+
|
|
10
|
+
export type ToggleSize = 1 | 2 | 3;
|
|
11
|
+
export type ToggleStateChangeEventHandler = (state: ToggleState) => void;
|
|
12
|
+
|
|
13
|
+
/**
|
|
14
|
+
* Interface for the properties of the `Toggle` component.
|
|
15
|
+
*/
|
|
16
|
+
interface ToggleProps extends React.PropsWithChildren<NonNullable<unknown>> {
|
|
17
|
+
/**
|
|
18
|
+
* Current state of the toggle, defined in ToggleState
|
|
19
|
+
*/
|
|
20
|
+
state: ToggleState;
|
|
21
|
+
|
|
22
|
+
/**
|
|
23
|
+
* Optional CSS class to apply to the toggle
|
|
24
|
+
*/
|
|
25
|
+
className?: string;
|
|
26
|
+
|
|
27
|
+
/**
|
|
28
|
+
* Optional size of the toggle
|
|
29
|
+
* @default 1
|
|
30
|
+
*/
|
|
31
|
+
size?: ToggleSize;
|
|
32
|
+
|
|
33
|
+
/**
|
|
34
|
+
* Optional tooltip text to be displayed on hover
|
|
35
|
+
*/
|
|
36
|
+
tooltip?: string;
|
|
37
|
+
|
|
38
|
+
/**
|
|
39
|
+
* Optional event handler for the toggle state change event
|
|
40
|
+
*/
|
|
41
|
+
onToggleStateChanged?: ToggleStateChangeEventHandler;
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
export default ToggleProps;
|
|
@@ -0,0 +1,61 @@
|
|
|
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 Toggle from "./Toggle";
|
|
13
|
+
|
|
14
|
+
import { ToggleState } from "../../core";
|
|
15
|
+
|
|
16
|
+
// Configure Story metadata
|
|
17
|
+
const meta = {
|
|
18
|
+
title: "Components/Toggle",
|
|
19
|
+
component: Toggle,
|
|
20
|
+
parameters: {
|
|
21
|
+
layout: "centered" // Center the component in the Canvas
|
|
22
|
+
},
|
|
23
|
+
tags: ["autodocs"], // Automatically generate documentation
|
|
24
|
+
argTypes: {
|
|
25
|
+
size: {
|
|
26
|
+
control: { type: "range", min: 1, max: 3, step: 1 }
|
|
27
|
+
},
|
|
28
|
+
state: {
|
|
29
|
+
control: "radio",
|
|
30
|
+
options: ["On", "Off"],
|
|
31
|
+
mapping: {
|
|
32
|
+
On: ToggleState.On,
|
|
33
|
+
Off: ToggleState.Off
|
|
34
|
+
}
|
|
35
|
+
},
|
|
36
|
+
disabled: { control: "boolean" },
|
|
37
|
+
// Disable event callback arguments
|
|
38
|
+
onToggleStateChanged: {
|
|
39
|
+
control: { disable: true }
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
} satisfies Meta<typeof Toggle>;
|
|
43
|
+
|
|
44
|
+
export default meta;
|
|
45
|
+
|
|
46
|
+
type Story = StoryObj<typeof meta>;
|
|
47
|
+
|
|
48
|
+
// Primary Story
|
|
49
|
+
export const Primary: Story = {
|
|
50
|
+
render: (args) => (
|
|
51
|
+
<Toggle {...args}>
|
|
52
|
+
<span>Toggle</span>
|
|
53
|
+
</Toggle>
|
|
54
|
+
),
|
|
55
|
+
args: {
|
|
56
|
+
state: ToggleState.Off,
|
|
57
|
+
// Optional Properties
|
|
58
|
+
disabled: false,
|
|
59
|
+
size: 1
|
|
60
|
+
}
|
|
61
|
+
};
|
|
@@ -0,0 +1,90 @@
|
|
|
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 ToggleProps from "./Toggle.props";
|
|
13
|
+
|
|
14
|
+
import "../../index.css";
|
|
15
|
+
|
|
16
|
+
import "./Toggle.css";
|
|
17
|
+
|
|
18
|
+
import { ToggleState } from "../../core";
|
|
19
|
+
|
|
20
|
+
type ToggleElement = React.ElementRef<"button">;
|
|
21
|
+
|
|
22
|
+
interface ToggleCombinedProps extends React.ComponentPropsWithoutRef<"button">, ToggleProps {}
|
|
23
|
+
|
|
24
|
+
export type { ToggleCombinedProps };
|
|
25
|
+
|
|
26
|
+
/**
|
|
27
|
+
* `Toggle` is a React component that renders a toggle button to toggle between an "on" and "off"
|
|
28
|
+
* state when the button is clicked. Notification of the state transtion is provided through the
|
|
29
|
+
* `onToggleStateChanged` event handler.
|
|
30
|
+
*
|
|
31
|
+
* @component
|
|
32
|
+
* @param {Object} props - The properties that define the `Toggle` component.
|
|
33
|
+
* @param {React.Ref<ToggleElement>} forwardedRef - A ref that is forwarded to the `Toggle` component.
|
|
34
|
+
*
|
|
35
|
+
* @returns {React.ReactElement} The `Toggle` component.
|
|
36
|
+
*
|
|
37
|
+
* @example
|
|
38
|
+
* ```jsx
|
|
39
|
+
* <Toggle
|
|
40
|
+
* state={ToggleState.On}
|
|
41
|
+
* onToggleStateChanged={(newState) => console.log(newState)}>
|
|
42
|
+
* <span>Toggle<span>
|
|
43
|
+
* </Toggle>
|
|
44
|
+
* ```
|
|
45
|
+
*/
|
|
46
|
+
const Toggle = React.forwardRef<ToggleElement, ToggleCombinedProps>((props, forwardedRef) => {
|
|
47
|
+
const {
|
|
48
|
+
className,
|
|
49
|
+
size = 1,
|
|
50
|
+
disabled = false,
|
|
51
|
+
tooltip,
|
|
52
|
+
state,
|
|
53
|
+
children,
|
|
54
|
+
onToggleStateChanged,
|
|
55
|
+
...toggleProps
|
|
56
|
+
} = props;
|
|
57
|
+
|
|
58
|
+
const dataState: string = React.useMemo(() => {
|
|
59
|
+
switch (state) {
|
|
60
|
+
case ToggleState.On:
|
|
61
|
+
return "on";
|
|
62
|
+
case ToggleState.Off:
|
|
63
|
+
return "off";
|
|
64
|
+
default:
|
|
65
|
+
return "indeterminate";
|
|
66
|
+
}
|
|
67
|
+
}, [state]);
|
|
68
|
+
|
|
69
|
+
const OnButtonClick = React.useCallback((): void => {
|
|
70
|
+
const newState: ToggleState = state === ToggleState.On ? ToggleState.Off : ToggleState.On;
|
|
71
|
+
|
|
72
|
+
onToggleStateChanged?.(newState);
|
|
73
|
+
}, [state]);
|
|
74
|
+
|
|
75
|
+
return (
|
|
76
|
+
<button
|
|
77
|
+
data-disabled={disabled || undefined}
|
|
78
|
+
ref={forwardedRef}
|
|
79
|
+
{...toggleProps}
|
|
80
|
+
className={classNames("okToggle", className, "ok-r-size-" + size)}
|
|
81
|
+
data-state={dataState}
|
|
82
|
+
onClick={OnButtonClick}>
|
|
83
|
+
{children}
|
|
84
|
+
</button>
|
|
85
|
+
);
|
|
86
|
+
});
|
|
87
|
+
|
|
88
|
+
Toggle.displayName = "Toggle";
|
|
89
|
+
|
|
90
|
+
export default Toggle;
|
|
@@ -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 "./Toggle";
|
|
9
|
+
|
|
10
|
+
export { default as ToggleProps } from "./Toggle.props";
|
|
11
|
+
export { ToggleSize, ToggleStateChangeEventHandler } from "./Toggle.props";
|
|
@@ -0,0 +1,118 @@
|
|
|
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
|
+
.okToggleSwitchRoot {
|
|
9
|
+
/* Layout */
|
|
10
|
+
display: inline-flex;
|
|
11
|
+
justify-content: center;
|
|
12
|
+
align-items: center;
|
|
13
|
+
gap: 4px;
|
|
14
|
+
|
|
15
|
+
/* Style */
|
|
16
|
+
border-radius: 4px;
|
|
17
|
+
|
|
18
|
+
/* Switch Style */
|
|
19
|
+
.okToggleSwitch {
|
|
20
|
+
/* Layout */
|
|
21
|
+
display: flex;
|
|
22
|
+
width: var(--toggle-switch-width, 16.5px);
|
|
23
|
+
height: var(--toggle-switch-height, 9px);
|
|
24
|
+
padding: var(--toggle-switch-padding, 0.75px);
|
|
25
|
+
align-items: center;
|
|
26
|
+
|
|
27
|
+
/* Style */
|
|
28
|
+
border-width: 0px;
|
|
29
|
+
border-radius: var(--toggle-switch-border-radius, 4.5px);
|
|
30
|
+
background: var(--Gray-2, #d0d7df);
|
|
31
|
+
|
|
32
|
+
/* Switch Icon Style */
|
|
33
|
+
.okIndicatorIcon {
|
|
34
|
+
width: var(--toggle-switch-icon-width, 9px);
|
|
35
|
+
height: var(--toggle-switch-icon-height, 9px);
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
/* Label Style */
|
|
40
|
+
.okToggleSwitchLabel {
|
|
41
|
+
/* Typography */
|
|
42
|
+
color: var(--Dark, #343434);
|
|
43
|
+
text-align: center;
|
|
44
|
+
font-family: Inter, "Nunito Sans", sans-serif, ui-sans-serif;
|
|
45
|
+
font-size: var(--toggle-switch-font-size, 12px);
|
|
46
|
+
font-style: normal;
|
|
47
|
+
font-weight: 500;
|
|
48
|
+
line-height: var(--toggle-switch-line-height, 12px); /* 100% */
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
/* Size 1 */
|
|
52
|
+
&:where(.ok-r-size-1) {
|
|
53
|
+
--toggle-switch-width: 16.5px;
|
|
54
|
+
--toggle-switch-height: 9px;
|
|
55
|
+
|
|
56
|
+
--toggle-switch-padding: 0.75px;
|
|
57
|
+
--toggle-switch-border-radius: 4.5px;
|
|
58
|
+
|
|
59
|
+
--toggle-switch-font-size: 12px;
|
|
60
|
+
--toggle-switch-line-height: 12px;
|
|
61
|
+
|
|
62
|
+
--toggle-switch-icon-width: 7.5px;
|
|
63
|
+
--toggle-switch-icon-height: 7.5px;
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
/* Sizes 2*/
|
|
67
|
+
&:where(.ok-r-size-2) {
|
|
68
|
+
--toggle-switch-width: 18.333px;
|
|
69
|
+
--toggle-switch-height: 10px;
|
|
70
|
+
|
|
71
|
+
--toggle-switch-padding: 0.883px;
|
|
72
|
+
--toggle-switch-border-radius: 5px;
|
|
73
|
+
|
|
74
|
+
--toggle-switch-font-size: 14px;
|
|
75
|
+
--toggle-switch-line-height: 14px;
|
|
76
|
+
|
|
77
|
+
--toggle-switch-icon-width: 8.33px;
|
|
78
|
+
--toggle-switch-icon-height: 8.33px;
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
/* Sizes 3*/
|
|
82
|
+
&:where(.ok-r-size-3) {
|
|
83
|
+
--toggle-switch-width: 27.5px;
|
|
84
|
+
--toggle-switch-height: 15px;
|
|
85
|
+
|
|
86
|
+
--toggle-switch-padding: 1.25px;
|
|
87
|
+
--toggle-switch-border-radius: 7.5px;
|
|
88
|
+
|
|
89
|
+
--toggle-switch-font-size: 20px;
|
|
90
|
+
--toggle-switch-line-height: 20px;
|
|
91
|
+
|
|
92
|
+
--toggle-switch-icon-width: 12.5px;
|
|
93
|
+
--toggle-switch-icon-height: 12.5px;
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
/* State Disabled */
|
|
98
|
+
.okToggleSwitchRoot[data-disabled="true"] {
|
|
99
|
+
opacity: 0.5;
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
/* State On */
|
|
103
|
+
.okToggleSwitch[data-state="on"] {
|
|
104
|
+
justify-content: flex-end;
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
.okToggleSwitch[data-state="on"]:not([data-disabled="true"]) {
|
|
108
|
+
background: var(--brand-12, #44bd84);
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
/* State Off */
|
|
112
|
+
.okToggleSwitch[data-state="off"] {
|
|
113
|
+
justify-content: flex-start;
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
.okToggleSwitch[data-state="off"]:not([data-disabled="true"]) {
|
|
117
|
+
background: var(--Gray-2, #d0d7df);
|
|
118
|
+
}
|
|
@@ -0,0 +1,26 @@
|
|
|
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 ToggleProps from "../Toggle/Toggle.props";
|
|
9
|
+
|
|
10
|
+
/**
|
|
11
|
+
* Interface for the properties of the `ToggleSwitch` component.
|
|
12
|
+
*/
|
|
13
|
+
interface ToggleSwitchProps extends ToggleProps {
|
|
14
|
+
/**
|
|
15
|
+
* Label to be displayed on the toggle switch
|
|
16
|
+
*/
|
|
17
|
+
label: string;
|
|
18
|
+
|
|
19
|
+
/**
|
|
20
|
+
* Optional disable the toggle switch
|
|
21
|
+
* @default false
|
|
22
|
+
*/
|
|
23
|
+
disabled?: boolean;
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
export default ToggleSwitchProps;
|
|
@@ -0,0 +1,85 @@
|
|
|
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 withApplication from "../../stories/decorators/Application.decorator";
|
|
15
|
+
|
|
16
|
+
import ToggleSwitch from "./ToggleSwitch";
|
|
17
|
+
|
|
18
|
+
import { ToggleState } from "../../core";
|
|
19
|
+
|
|
20
|
+
// Configure Story metadata
|
|
21
|
+
const meta = {
|
|
22
|
+
title: "Components/ToggleSwitch",
|
|
23
|
+
component: ToggleSwitch,
|
|
24
|
+
parameters: {
|
|
25
|
+
layout: "centered" // Center the component in the Canvas
|
|
26
|
+
},
|
|
27
|
+
tags: ["autodocs"], // Automatically generate documentation
|
|
28
|
+
argTypes: {
|
|
29
|
+
size: {
|
|
30
|
+
control: { type: "range", min: 1, max: 3, step: 1 }
|
|
31
|
+
},
|
|
32
|
+
state: {
|
|
33
|
+
control: "radio",
|
|
34
|
+
options: ["On", "Off"],
|
|
35
|
+
mapping: {
|
|
36
|
+
On: ToggleState.On,
|
|
37
|
+
Off: ToggleState.Off
|
|
38
|
+
}
|
|
39
|
+
},
|
|
40
|
+
disabled: { control: "boolean" },
|
|
41
|
+
// Disable event callback arguments
|
|
42
|
+
onToggleStateChanged: {
|
|
43
|
+
control: { disable: true }
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
} satisfies Meta<typeof ToggleSwitch>;
|
|
47
|
+
|
|
48
|
+
export default meta;
|
|
49
|
+
|
|
50
|
+
type Story = StoryObj<typeof meta>;
|
|
51
|
+
|
|
52
|
+
// Template for Stories
|
|
53
|
+
const ComponentTemplate: Story = {
|
|
54
|
+
render: (args) => {
|
|
55
|
+
const [{ state }, updateArgs] = useArgs();
|
|
56
|
+
|
|
57
|
+
function onToggleStateChange(state: ToggleState): void {
|
|
58
|
+
updateArgs({ state: state });
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
return <ToggleSwitch {...args} state={state} onToggleStateChanged={onToggleStateChange} />;
|
|
62
|
+
},
|
|
63
|
+
decorators: [withApplication],
|
|
64
|
+
args: {
|
|
65
|
+
label: "Toggle",
|
|
66
|
+
state: ToggleState.On,
|
|
67
|
+
// Optional Properties
|
|
68
|
+
disabled: false,
|
|
69
|
+
size: 1,
|
|
70
|
+
tooltip: "Toggle switch tooltip"
|
|
71
|
+
}
|
|
72
|
+
};
|
|
73
|
+
|
|
74
|
+
// Primary Story
|
|
75
|
+
export const Primary: Story = {
|
|
76
|
+
...ComponentTemplate,
|
|
77
|
+
args: {
|
|
78
|
+
label: "Toggle",
|
|
79
|
+
state: ToggleState.On,
|
|
80
|
+
// Optional Properties
|
|
81
|
+
disabled: false,
|
|
82
|
+
size: 1,
|
|
83
|
+
tooltip: "Toggle switch tooltip"
|
|
84
|
+
}
|
|
85
|
+
};
|
|
@@ -0,0 +1,73 @@
|
|
|
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 Toggle from "../Toggle/Toggle";
|
|
13
|
+
|
|
14
|
+
import ToggleSwitchProps from "./ToggleSwitch.props";
|
|
15
|
+
|
|
16
|
+
import "../../index.css";
|
|
17
|
+
|
|
18
|
+
import "./ToggleSwitch.css";
|
|
19
|
+
|
|
20
|
+
import { withTooltip } from "../TooltipUtility";
|
|
21
|
+
|
|
22
|
+
import { SwitchToggleStateIcon } from "../../components/Icons";
|
|
23
|
+
|
|
24
|
+
type ToggleSwitchElement = React.ElementRef<typeof Toggle>;
|
|
25
|
+
|
|
26
|
+
/**
|
|
27
|
+
* `ToggleSwitch` is a React component that renders a toggle switch with a label and a switch button
|
|
28
|
+
* that represents the current toggle state. When the switch is clicked, the toggle
|
|
29
|
+
* state will transition to the next state. Notification of the state transtion is provided through the
|
|
30
|
+
* `onToggleStateChanged` event handler.
|
|
31
|
+
*
|
|
32
|
+
* @component
|
|
33
|
+
* @param {Object} props - Properties passed to component
|
|
34
|
+
* @param {React.Ref<ToggleSwitchElement>} forwardedRef - Forwarded ref for the button
|
|
35
|
+
*
|
|
36
|
+
* @returns {React.ReactElement} The rendered ToggleSwitch component
|
|
37
|
+
*
|
|
38
|
+
* @example
|
|
39
|
+
* ```jsx
|
|
40
|
+
* <ToggleSwitch
|
|
41
|
+
* label="Toggle"
|
|
42
|
+
* state={ToggleState.On}
|
|
43
|
+
* onToggleStateChanged={(newState) => console.log(newState)} />
|
|
44
|
+
* ```
|
|
45
|
+
*/
|
|
46
|
+
const ToggleSwitch = React.forwardRef<ToggleSwitchElement, ToggleSwitchProps>(
|
|
47
|
+
(props, forwardedRef) => {
|
|
48
|
+
const { className, size = 1, label, disabled = false, state, ...toggleSwitchProps } = props;
|
|
49
|
+
|
|
50
|
+
const ToggleButtonWithTooltip = withTooltip(
|
|
51
|
+
<span
|
|
52
|
+
className={classnames("okToggleSwitchRoot", className, "ok-r-size-" + size)}
|
|
53
|
+
data-disabled={disabled || undefined}>
|
|
54
|
+
<Toggle
|
|
55
|
+
className={classnames("okToggleSwitch")}
|
|
56
|
+
ref={forwardedRef}
|
|
57
|
+
{...toggleSwitchProps}
|
|
58
|
+
size={size}
|
|
59
|
+
disabled={disabled}
|
|
60
|
+
state={state}>
|
|
61
|
+
<SwitchToggleStateIcon className="okIndicatorIcon" state={state} />
|
|
62
|
+
</Toggle>
|
|
63
|
+
<span className={classnames("okToggleSwitchLabel")}>{label}</span>
|
|
64
|
+
</span>
|
|
65
|
+
);
|
|
66
|
+
|
|
67
|
+
return <ToggleButtonWithTooltip {...props} />;
|
|
68
|
+
}
|
|
69
|
+
);
|
|
70
|
+
|
|
71
|
+
ToggleSwitch.displayName = "ToggleSwitch";
|
|
72
|
+
|
|
73
|
+
export default ToggleSwitch;
|
|
@@ -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 "./ToggleSwitch";
|
|
9
|
+
|
|
10
|
+
export { default as ToggleSwitchProps } from "./ToggleSwitch.props";
|
|
@@ -0,0 +1,93 @@
|
|
|
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
|
+
.okTooltipContent {
|
|
9
|
+
/* Layout */
|
|
10
|
+
display: flex;
|
|
11
|
+
padding: 10px;
|
|
12
|
+
align-items: flex-end;
|
|
13
|
+
|
|
14
|
+
/* Style */
|
|
15
|
+
border-radius: 4px;
|
|
16
|
+
background: var(--Dark, #343434);
|
|
17
|
+
|
|
18
|
+
/* Drop shadow - tiny */
|
|
19
|
+
box-shadow: 0px 1px 4px 0px rgba(0, 0, 0, 0.24);
|
|
20
|
+
|
|
21
|
+
user-select: none;
|
|
22
|
+
animation-duration: 200ms;
|
|
23
|
+
animation-timing-function: cubic-bezier(0.16, 1, 0.3, 1);
|
|
24
|
+
will-change: transform, opacity;
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
.okTooltipContent[data-state="delayed-open"][data-side="top"] {
|
|
28
|
+
animation-name: slideDownAndFade;
|
|
29
|
+
}
|
|
30
|
+
.okTooltipContent[data-state="delayed-open"][data-side="right"] {
|
|
31
|
+
animation-name: slideLeftAndFade;
|
|
32
|
+
}
|
|
33
|
+
.okTooltipContent[data-state="delayed-open"][data-side="bottom"] {
|
|
34
|
+
animation-name: slideUpAndFade;
|
|
35
|
+
}
|
|
36
|
+
.okTooltipContent[data-state="delayed-open"][data-side="left"] {
|
|
37
|
+
animation-name: slideRightAndFade;
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
.okTooltipText {
|
|
41
|
+
/* Typography */
|
|
42
|
+
color: var(--Light, #fff);
|
|
43
|
+
text-align: center;
|
|
44
|
+
font-family: Inter, "Nunito Sans", sans-serif, ui-sans-serif;
|
|
45
|
+
font-size: 12px;
|
|
46
|
+
font-style: normal;
|
|
47
|
+
font-weight: 400;
|
|
48
|
+
line-height: 12px; /* 100% */
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
@keyframes slideUpAndFade {
|
|
52
|
+
from {
|
|
53
|
+
opacity: 0;
|
|
54
|
+
transform: translateY(2px);
|
|
55
|
+
}
|
|
56
|
+
to {
|
|
57
|
+
opacity: 1;
|
|
58
|
+
transform: translateY(0);
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
@keyframes slideRightAndFade {
|
|
63
|
+
from {
|
|
64
|
+
opacity: 0;
|
|
65
|
+
transform: translateX(-2px);
|
|
66
|
+
}
|
|
67
|
+
to {
|
|
68
|
+
opacity: 1;
|
|
69
|
+
transform: translateX(0);
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
@keyframes slideDownAndFade {
|
|
74
|
+
from {
|
|
75
|
+
opacity: 0;
|
|
76
|
+
transform: translateY(-2px);
|
|
77
|
+
}
|
|
78
|
+
to {
|
|
79
|
+
opacity: 1;
|
|
80
|
+
transform: translateY(0);
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
@keyframes slideLeftAndFade {
|
|
85
|
+
from {
|
|
86
|
+
opacity: 0;
|
|
87
|
+
transform: translateX(2px);
|
|
88
|
+
}
|
|
89
|
+
to {
|
|
90
|
+
opacity: 1;
|
|
91
|
+
transform: translateX(0);
|
|
92
|
+
}
|
|
93
|
+
}
|
|
@@ -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 { ReactNode } from "react";
|
|
9
|
+
|
|
10
|
+
/**
|
|
11
|
+
* Interface for the properties of the `Tooltip` component.
|
|
12
|
+
*/
|
|
13
|
+
interface TooltipProps extends React.PropsWithChildren<NonNullable<unknown>> {
|
|
14
|
+
/**
|
|
15
|
+
* Content to be displayed within the tooltip
|
|
16
|
+
*/
|
|
17
|
+
content: ReactNode;
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
export default TooltipProps;
|