@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,110 @@
|
|
|
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
|
+
.okRangeSlider {
|
|
9
|
+
--range-slider-thumb-outline-size: 2px;
|
|
10
|
+
--range-slider-thumb-border-size: 2px;
|
|
11
|
+
--range-slider-thumb-size: 22px;
|
|
12
|
+
--range-slider-track-size: 8px;
|
|
13
|
+
|
|
14
|
+
/* Layout */
|
|
15
|
+
display: flex;
|
|
16
|
+
flex-direction: row;
|
|
17
|
+
align-items: center;
|
|
18
|
+
gap: 4px;
|
|
19
|
+
align-self: stretch;
|
|
20
|
+
width: 100%;
|
|
21
|
+
height: fit-content;
|
|
22
|
+
|
|
23
|
+
/* Typography */
|
|
24
|
+
color: var(--Dark, #343434);
|
|
25
|
+
text-align: right;
|
|
26
|
+
font-family: Inter, "Nunito Sans", sans-serif, ui-sans-serif;
|
|
27
|
+
font-size: 12px;
|
|
28
|
+
font-style: normal;
|
|
29
|
+
font-weight: 400;
|
|
30
|
+
line-height: 12px; /* 100% */
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
/* State Disabled */
|
|
34
|
+
.okRangeSlider[data-disabled="true"] {
|
|
35
|
+
opacity: 0.5;
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
.okRangeSliderLabel {
|
|
39
|
+
width: 100%;
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
.okRangeSliderRoot {
|
|
43
|
+
/* Layout */
|
|
44
|
+
position: relative;
|
|
45
|
+
display: flex;
|
|
46
|
+
align-items: center;
|
|
47
|
+
width: 100%;
|
|
48
|
+
height: var(--range-slider-thumb-size);
|
|
49
|
+
min-width: 100px;
|
|
50
|
+
|
|
51
|
+
/* Style */
|
|
52
|
+
user-select: none;
|
|
53
|
+
touch-action: none;
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
.okRangeSliderTrack {
|
|
57
|
+
/* Layout */
|
|
58
|
+
position: relative;
|
|
59
|
+
flex-grow: 1;
|
|
60
|
+
height: var(--range-slider-track-size);
|
|
61
|
+
|
|
62
|
+
/* Style */
|
|
63
|
+
background: var(--Gray-2, #d0d7df);
|
|
64
|
+
border-radius: 9999px;
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
.okRangeSliderRange {
|
|
68
|
+
/* Layout */
|
|
69
|
+
position: absolute;
|
|
70
|
+
height: 100%;
|
|
71
|
+
|
|
72
|
+
/* Style */
|
|
73
|
+
background-color: #44bd84;
|
|
74
|
+
border-radius: inherit;
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
.okRangeSliderThumb {
|
|
78
|
+
/* Layout */
|
|
79
|
+
display: flex;
|
|
80
|
+
flex-direction: column;
|
|
81
|
+
align-items: center;
|
|
82
|
+
width: calc(
|
|
83
|
+
var(--range-slider-thumb-size) -
|
|
84
|
+
(2 * (var(--range-slider-thumb-border-size) + var(--range-slider-thumb-outline-size)))
|
|
85
|
+
);
|
|
86
|
+
height: calc(
|
|
87
|
+
var(--range-slider-thumb-size) -
|
|
88
|
+
(2 * (var(--range-slider-thumb-border-size) + var(--range-slider-thumb-outline-size)))
|
|
89
|
+
);
|
|
90
|
+
|
|
91
|
+
/* Style */
|
|
92
|
+
background: var(--Base-White, #fff);
|
|
93
|
+
border: var(--range-slider-thumb-border-size) solid var(--brand-12, #44bd84);
|
|
94
|
+
border-radius: var(--range-slider-thumb-size);
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
.okRangeSliderThumb:hover {
|
|
98
|
+
background-color: #44bd84;
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
.okRangeSliderThumb:focus {
|
|
102
|
+
outline: none;
|
|
103
|
+
box-shadow: 0 0 0 var(--range-slider-thumb-outline-size) #d0d7df;
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
.okRangeSliderThumbLabel {
|
|
107
|
+
/* Layout */
|
|
108
|
+
position: absolute;
|
|
109
|
+
bottom: -14px;
|
|
110
|
+
}
|
|
@@ -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
|
+
import LabelProps from "../Label/Label.props";
|
|
9
|
+
|
|
10
|
+
export type RangeSliderValueChangeEventHandler = (value: number) => void;
|
|
11
|
+
export type RangeSliderValueCommitEventHandler = (value: number) => void;
|
|
12
|
+
|
|
13
|
+
/**
|
|
14
|
+
* Interface for the properties of the `RangeSlider` component.
|
|
15
|
+
*
|
|
16
|
+
* @interface
|
|
17
|
+
*/
|
|
18
|
+
interface RangeSliderProps {
|
|
19
|
+
/**
|
|
20
|
+
* Optional CSS class to apply to the range
|
|
21
|
+
*/
|
|
22
|
+
className?: string;
|
|
23
|
+
|
|
24
|
+
/**
|
|
25
|
+
* Optional label properties for the range slider
|
|
26
|
+
*/
|
|
27
|
+
label?: LabelProps;
|
|
28
|
+
|
|
29
|
+
/**
|
|
30
|
+
* Optional tooltip text to be displayed on hover
|
|
31
|
+
*/
|
|
32
|
+
tooltip?: string;
|
|
33
|
+
|
|
34
|
+
/**
|
|
35
|
+
* Optional default value of the range slider
|
|
36
|
+
*/
|
|
37
|
+
defaultValue?: number;
|
|
38
|
+
|
|
39
|
+
/**
|
|
40
|
+
* Optional current value of the range slider
|
|
41
|
+
*/
|
|
42
|
+
value?: number;
|
|
43
|
+
|
|
44
|
+
/**
|
|
45
|
+
* Optional step value for the range slider. This determines the increments in value for each step
|
|
46
|
+
* @default 1
|
|
47
|
+
*/
|
|
48
|
+
valueStep?: number;
|
|
49
|
+
|
|
50
|
+
/**
|
|
51
|
+
* Optional minimum value that the range slider can have
|
|
52
|
+
* @default 0
|
|
53
|
+
*/
|
|
54
|
+
minimumValue?: number;
|
|
55
|
+
|
|
56
|
+
/**
|
|
57
|
+
* Optional maximum value that the range slider can have
|
|
58
|
+
* @default 100
|
|
59
|
+
*/
|
|
60
|
+
maximumValue?: number;
|
|
61
|
+
|
|
62
|
+
/**
|
|
63
|
+
* Optional disable the range slider
|
|
64
|
+
* @default false
|
|
65
|
+
*/
|
|
66
|
+
disabled?: boolean;
|
|
67
|
+
|
|
68
|
+
/**
|
|
69
|
+
* Optional show the label for the thumb (handle) of the range slider
|
|
70
|
+
* @default true
|
|
71
|
+
*/
|
|
72
|
+
showThumbLabel?: boolean;
|
|
73
|
+
|
|
74
|
+
/**
|
|
75
|
+
* Optional show the labels for the track of the range slider
|
|
76
|
+
* @default true
|
|
77
|
+
*/
|
|
78
|
+
showTrackLabels?: boolean;
|
|
79
|
+
|
|
80
|
+
/**
|
|
81
|
+
* Optional event handler for the range slider value change event
|
|
82
|
+
* @type {RangeSliderValueChangeEventHandler}
|
|
83
|
+
*/
|
|
84
|
+
onValueChange?: RangeSliderValueChangeEventHandler;
|
|
85
|
+
|
|
86
|
+
/**
|
|
87
|
+
* Optional event handler for the range slider value committed event
|
|
88
|
+
* @type {RangeSliderValueCommitEventHandler}
|
|
89
|
+
*/
|
|
90
|
+
onValueCommit?: RangeSliderValueCommitEventHandler;
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
export default RangeSliderProps;
|
|
@@ -0,0 +1,76 @@
|
|
|
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 withApplication from "../../stories/decorators/Application.decorator";
|
|
13
|
+
|
|
14
|
+
import RangeSlider from "./RangeSlider";
|
|
15
|
+
|
|
16
|
+
// Configure Story metadata
|
|
17
|
+
const meta = {
|
|
18
|
+
title: "Components/RangeSlider",
|
|
19
|
+
component: RangeSlider,
|
|
20
|
+
parameters: {
|
|
21
|
+
layout: "centered" // Center the component in the Canvas
|
|
22
|
+
},
|
|
23
|
+
tags: ["autodocs"], // Automatically generate documentation
|
|
24
|
+
argTypes: {
|
|
25
|
+
defaultValue: {
|
|
26
|
+
control: { type: "number", step: 1 }
|
|
27
|
+
},
|
|
28
|
+
valueStep: {
|
|
29
|
+
control: { type: "number", step: 1 }
|
|
30
|
+
},
|
|
31
|
+
maximumValue: {
|
|
32
|
+
control: { type: "number", step: 1 }
|
|
33
|
+
},
|
|
34
|
+
minimumValue: {
|
|
35
|
+
control: { type: "number", step: 1 }
|
|
36
|
+
},
|
|
37
|
+
showThumbLabel: { type: "boolean" },
|
|
38
|
+
showTrackLabels: { type: "boolean" },
|
|
39
|
+
disabled: { type: "boolean" },
|
|
40
|
+
// Disable event callback arguments
|
|
41
|
+
onValueChange: {
|
|
42
|
+
control: { disable: true }
|
|
43
|
+
},
|
|
44
|
+
onValueCommit: {
|
|
45
|
+
control: { disable: true }
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
} satisfies Meta<typeof RangeSlider>;
|
|
49
|
+
|
|
50
|
+
export default meta;
|
|
51
|
+
|
|
52
|
+
type Story = StoryObj<typeof meta>;
|
|
53
|
+
|
|
54
|
+
// Primary Story
|
|
55
|
+
export const Primary: Story = {
|
|
56
|
+
render: (args) => {
|
|
57
|
+
return (
|
|
58
|
+
<div style={{ minWidth: "200px" }}>
|
|
59
|
+
<RangeSlider {...args} />
|
|
60
|
+
</div>
|
|
61
|
+
);
|
|
62
|
+
},
|
|
63
|
+
decorators: [withApplication],
|
|
64
|
+
args: {
|
|
65
|
+
defaultValue: 50,
|
|
66
|
+
value: undefined,
|
|
67
|
+
maximumValue: 100,
|
|
68
|
+
minimumValue: 0,
|
|
69
|
+
valueStep: 1,
|
|
70
|
+
showTrackLabels: true,
|
|
71
|
+
showThumbLabel: true,
|
|
72
|
+
disabled: false,
|
|
73
|
+
label: { text: "RangeSlider" },
|
|
74
|
+
tooltip: "Set value within range"
|
|
75
|
+
}
|
|
76
|
+
};
|
|
@@ -0,0 +1,168 @@
|
|
|
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 * as SliderPrimitive from "@radix-ui/react-slider";
|
|
13
|
+
|
|
14
|
+
import RangeSliderProps from "./RangeSlider.props";
|
|
15
|
+
|
|
16
|
+
import "../../index.css";
|
|
17
|
+
|
|
18
|
+
import "./RangeSlider.css";
|
|
19
|
+
|
|
20
|
+
import Label from "../Label";
|
|
21
|
+
import Tooltip from "../Tooltip";
|
|
22
|
+
|
|
23
|
+
type RangeSliderElement = React.ElementRef<typeof SliderPrimitive.Root>;
|
|
24
|
+
|
|
25
|
+
/**
|
|
26
|
+
* `RangeSlider` is a React component that renders a range slider to allow setting a value within a specified
|
|
27
|
+
* range by clicking and dragging the slider thumb or by using the arrow keys. The slider can optionally show
|
|
28
|
+
* a label and/or a tooltip.
|
|
29
|
+
*
|
|
30
|
+
* @component
|
|
31
|
+
* @param {object} props - Properties passed to component
|
|
32
|
+
* @param {React.Ref} forwardedRef - Forwarded ref for the range slider
|
|
33
|
+
*
|
|
34
|
+
* @returns {React.Node} The rendered RangeSlider component
|
|
35
|
+
*
|
|
36
|
+
* @example
|
|
37
|
+
* ```jsx
|
|
38
|
+
* <RangeSlider
|
|
39
|
+
* defaultValue={50}
|
|
40
|
+
* maximumValue={100}
|
|
41
|
+
* minimumValue={0}
|
|
42
|
+
* valueStep={1}
|
|
43
|
+
* onValueChange={(value) => console.log(value)} />
|
|
44
|
+
* ```
|
|
45
|
+
*/
|
|
46
|
+
const RangeSlider = React.forwardRef<RangeSliderElement, RangeSliderProps>(
|
|
47
|
+
(props, forwardedRef) => {
|
|
48
|
+
const { label, tooltip, ...sliderProps } = props;
|
|
49
|
+
|
|
50
|
+
const showLabel = label != null;
|
|
51
|
+
const showTooltip = tooltip != null;
|
|
52
|
+
|
|
53
|
+
if (showLabel && showTooltip) {
|
|
54
|
+
return (
|
|
55
|
+
<Label className="okRangeSliderLabel" {...label}>
|
|
56
|
+
<Tooltip content={tooltip}>
|
|
57
|
+
<div style={{ width: "100%" }}>
|
|
58
|
+
<RangeSliderImpl ref={forwardedRef} {...sliderProps} />
|
|
59
|
+
</div>
|
|
60
|
+
</Tooltip>
|
|
61
|
+
</Label>
|
|
62
|
+
);
|
|
63
|
+
} else if (showLabel) {
|
|
64
|
+
return (
|
|
65
|
+
<Label className="okRangeSliderLabel" {...label}>
|
|
66
|
+
<div style={{ width: "100%" }}>
|
|
67
|
+
<RangeSliderImpl ref={forwardedRef} {...sliderProps} />
|
|
68
|
+
</div>
|
|
69
|
+
</Label>
|
|
70
|
+
);
|
|
71
|
+
} else if (showTooltip) {
|
|
72
|
+
return (
|
|
73
|
+
<Tooltip content={tooltip}>
|
|
74
|
+
<div style={{ width: "100%" }}>
|
|
75
|
+
<RangeSliderImpl ref={forwardedRef} {...sliderProps} />
|
|
76
|
+
</div>
|
|
77
|
+
</Tooltip>
|
|
78
|
+
);
|
|
79
|
+
} else {
|
|
80
|
+
return <RangeSliderImpl ref={forwardedRef} {...sliderProps} />;
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
);
|
|
84
|
+
|
|
85
|
+
RangeSlider.displayName = "RangeSlider";
|
|
86
|
+
|
|
87
|
+
export default RangeSlider;
|
|
88
|
+
|
|
89
|
+
interface RangeSliderImplProps
|
|
90
|
+
extends Omit<React.ComponentPropsWithoutRef<typeof RangeSlider>, "label"> {}
|
|
91
|
+
|
|
92
|
+
const RangeSliderImpl = React.forwardRef<RangeSliderElement, RangeSliderImplProps>(
|
|
93
|
+
(props, forwardedRef) => {
|
|
94
|
+
const {
|
|
95
|
+
className,
|
|
96
|
+
tooltip,
|
|
97
|
+
minimumValue = 0,
|
|
98
|
+
maximumValue = 100,
|
|
99
|
+
onValueChange,
|
|
100
|
+
defaultValue = minimumValue,
|
|
101
|
+
value,
|
|
102
|
+
valueStep = 1,
|
|
103
|
+
showThumbLabel = true,
|
|
104
|
+
showTrackLabels = true,
|
|
105
|
+
disabled = false
|
|
106
|
+
} = props;
|
|
107
|
+
|
|
108
|
+
const initialValue = value ?? defaultValue;
|
|
109
|
+
|
|
110
|
+
const [controlValue, setControlValue] = React.useState<[number]>([initialValue]);
|
|
111
|
+
|
|
112
|
+
React.useEffect(() => {
|
|
113
|
+
setControlValue([initialValue]);
|
|
114
|
+
}, [initialValue]);
|
|
115
|
+
|
|
116
|
+
const updateControlValue = React.useCallback(
|
|
117
|
+
(value: number): void => {
|
|
118
|
+
setControlValue([value]);
|
|
119
|
+
onValueChange?.(value);
|
|
120
|
+
},
|
|
121
|
+
[onValueChange]
|
|
122
|
+
);
|
|
123
|
+
|
|
124
|
+
const RangeSliderTrack = () => {
|
|
125
|
+
return (
|
|
126
|
+
<SliderPrimitive.Track className="okRangeSliderTrack">
|
|
127
|
+
<SliderPrimitive.Range className="okRangeSliderRange" />
|
|
128
|
+
</SliderPrimitive.Track>
|
|
129
|
+
);
|
|
130
|
+
};
|
|
131
|
+
|
|
132
|
+
const showTooltip = tooltip != null;
|
|
133
|
+
|
|
134
|
+
return (
|
|
135
|
+
<div
|
|
136
|
+
className={classNames("okRangeSlider", className)}
|
|
137
|
+
data-disabled={disabled || undefined}>
|
|
138
|
+
{showTrackLabels ? <span>{minimumValue}</span> : null}
|
|
139
|
+
<SliderPrimitive.Root
|
|
140
|
+
ref={forwardedRef}
|
|
141
|
+
min={minimumValue}
|
|
142
|
+
max={maximumValue}
|
|
143
|
+
step={valueStep}
|
|
144
|
+
value={controlValue}
|
|
145
|
+
onValueChange={(value) => updateControlValue(value[0])}
|
|
146
|
+
orientation="horizontal"
|
|
147
|
+
className="okRangeSliderRoot"
|
|
148
|
+
disabled={disabled}>
|
|
149
|
+
{showTooltip ? (
|
|
150
|
+
<Tooltip content={tooltip}>
|
|
151
|
+
<RangeSliderTrack />
|
|
152
|
+
</Tooltip>
|
|
153
|
+
) : (
|
|
154
|
+
<RangeSliderTrack />
|
|
155
|
+
)}
|
|
156
|
+
<SliderPrimitive.Thumb className="okRangeSliderThumb">
|
|
157
|
+
{showThumbLabel ? (
|
|
158
|
+
<div className="okRangeSliderThumbLabel">{controlValue}</div>
|
|
159
|
+
) : null}
|
|
160
|
+
</SliderPrimitive.Thumb>
|
|
161
|
+
</SliderPrimitive.Root>
|
|
162
|
+
{showTrackLabels ? <span>{maximumValue}</span> : null}
|
|
163
|
+
</div>
|
|
164
|
+
);
|
|
165
|
+
}
|
|
166
|
+
);
|
|
167
|
+
|
|
168
|
+
RangeSliderImpl.displayName = "RangeSliderImpl";
|
|
@@ -0,0 +1,14 @@
|
|
|
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 "./RangeSlider";
|
|
9
|
+
|
|
10
|
+
export { default as RangeSliderProps } from "./RangeSlider.props";
|
|
11
|
+
export {
|
|
12
|
+
RangeSliderValueChangeEventHandler,
|
|
13
|
+
RangeSliderValueCommitEventHandler
|
|
14
|
+
} from "./RangeSlider.props";
|
|
@@ -0,0 +1,86 @@
|
|
|
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 SelectEntry from "./SelectEntry";
|
|
17
|
+
|
|
18
|
+
// Configure Story metadata
|
|
19
|
+
const meta = {
|
|
20
|
+
title: "Components/SelectEntry",
|
|
21
|
+
component: SelectEntry.Root,
|
|
22
|
+
parameters: {
|
|
23
|
+
layout: "centered" // Center the component in the Canvas
|
|
24
|
+
},
|
|
25
|
+
tags: ["autodocs"], // Automatically generate documentation
|
|
26
|
+
argTypes: {
|
|
27
|
+
size: {
|
|
28
|
+
control: { type: "range", min: 1, max: 3, step: 1 }
|
|
29
|
+
},
|
|
30
|
+
disabled: { control: "boolean" },
|
|
31
|
+
// Disable event callback arguments
|
|
32
|
+
onValueChange: { action: "onValueChange" },
|
|
33
|
+
onOpenChange: { action: "onOpenChange" }
|
|
34
|
+
}
|
|
35
|
+
} satisfies Meta<typeof SelectEntry.Root>;
|
|
36
|
+
|
|
37
|
+
export default meta;
|
|
38
|
+
|
|
39
|
+
type Story = StoryObj<typeof meta>;
|
|
40
|
+
|
|
41
|
+
// Primary Story
|
|
42
|
+
export const Primary: Story = {
|
|
43
|
+
render: ({ ...args }) => {
|
|
44
|
+
const [{ value }, updateArgs] = useArgs();
|
|
45
|
+
|
|
46
|
+
function onValueChange(value: string): void {
|
|
47
|
+
updateArgs({ value: value });
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
return (
|
|
51
|
+
<div style={{ width: "150px" }}>
|
|
52
|
+
<SelectEntry.Root {...args} value={value} onValueChange={onValueChange}>
|
|
53
|
+
<SelectEntry.Trigger />
|
|
54
|
+
<SelectEntry.Content>
|
|
55
|
+
<SelectEntry.Group>
|
|
56
|
+
<SelectEntry.Label>Fruit Group</SelectEntry.Label>
|
|
57
|
+
<SelectEntry.Item value="apple">Apple</SelectEntry.Item>
|
|
58
|
+
<SelectEntry.Item value="orange">Orange</SelectEntry.Item>
|
|
59
|
+
<SelectEntry.Item value="grape" disabled>
|
|
60
|
+
Grape
|
|
61
|
+
</SelectEntry.Item>
|
|
62
|
+
</SelectEntry.Group>
|
|
63
|
+
<SelectEntry.Separator />
|
|
64
|
+
<SelectEntry.Group>
|
|
65
|
+
<SelectEntry.Label>Vegetable Group</SelectEntry.Label>
|
|
66
|
+
<SelectEntry.Item value="carrot">Carrot</SelectEntry.Item>
|
|
67
|
+
<SelectEntry.Item value="potato">Potato</SelectEntry.Item>
|
|
68
|
+
</SelectEntry.Group>
|
|
69
|
+
</SelectEntry.Content>
|
|
70
|
+
</SelectEntry.Root>
|
|
71
|
+
</div>
|
|
72
|
+
);
|
|
73
|
+
},
|
|
74
|
+
decorators: [withApplication],
|
|
75
|
+
args: {
|
|
76
|
+
value: "carrot",
|
|
77
|
+
disabled: false,
|
|
78
|
+
label: {
|
|
79
|
+
text: "Select Item",
|
|
80
|
+
verticalPosition: "top",
|
|
81
|
+
horizontalPosition: "left"
|
|
82
|
+
},
|
|
83
|
+
size: 1,
|
|
84
|
+
tooltip: "Select an item from the list"
|
|
85
|
+
}
|
|
86
|
+
};
|
|
@@ -0,0 +1,29 @@
|
|
|
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 SelectEntryContent from "./SelectEntryContent";
|
|
9
|
+
import SelectEntryGroup from "./SelectEntryGroup";
|
|
10
|
+
import SelectEntryItem from "./SelectEntryItem";
|
|
11
|
+
import SelectEntryLabel from "./SelectEntryLabel";
|
|
12
|
+
import SelectEntryRoot from "./SelectEntryRoot";
|
|
13
|
+
import SelectEntrySeparator from "./SelectEntrySeparator";
|
|
14
|
+
import SelectEntryTrigger from "./SelectEntryTrigger";
|
|
15
|
+
|
|
16
|
+
const SelectEntry = Object.assign(
|
|
17
|
+
{},
|
|
18
|
+
{
|
|
19
|
+
Root: SelectEntryRoot,
|
|
20
|
+
Trigger: SelectEntryTrigger,
|
|
21
|
+
Content: SelectEntryContent,
|
|
22
|
+
Item: SelectEntryItem,
|
|
23
|
+
Group: SelectEntryGroup,
|
|
24
|
+
Label: SelectEntryLabel,
|
|
25
|
+
Separator: SelectEntrySeparator
|
|
26
|
+
}
|
|
27
|
+
);
|
|
28
|
+
|
|
29
|
+
export default SelectEntry;
|
|
@@ -0,0 +1,94 @@
|
|
|
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
|
+
.okSelectEntryContent {
|
|
9
|
+
/* Layout */
|
|
10
|
+
width: var(--radix-select-trigger-width);
|
|
11
|
+
max-height: var(--radix-select-content-available-height);
|
|
12
|
+
display: flex;
|
|
13
|
+
padding: 10px 18px;
|
|
14
|
+
flex-direction: column;
|
|
15
|
+
overflow: hidden;
|
|
16
|
+
justify-content: center;
|
|
17
|
+
align-items: stretch;
|
|
18
|
+
|
|
19
|
+
/* Style */
|
|
20
|
+
border-radius: 4px;
|
|
21
|
+
border: 1px solid var(--Gray-2, #d0d7df);
|
|
22
|
+
background: var(--Light, #fff);
|
|
23
|
+
box-shadow: 0px 1px 4px 0px rgba(0, 0, 0, 0.24);
|
|
24
|
+
|
|
25
|
+
.okSelectEntryContentInner {
|
|
26
|
+
display: flex;
|
|
27
|
+
flex-direction: column;
|
|
28
|
+
gap: 10px;
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
/* ScrollArea Root Style */
|
|
32
|
+
.okScrollArea {
|
|
33
|
+
display: flex;
|
|
34
|
+
flex-direction: column;
|
|
35
|
+
overflow: hidden;
|
|
36
|
+
width: 100%;
|
|
37
|
+
height: 100%;
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
/* ScrollArea Viewport Style */
|
|
41
|
+
.okScrollAreaViewport {
|
|
42
|
+
display: flex;
|
|
43
|
+
flex-direction: column;
|
|
44
|
+
width: 100%;
|
|
45
|
+
height: 100%;
|
|
46
|
+
gap: 10px;
|
|
47
|
+
|
|
48
|
+
/* Stop Chrome back/forward two-finger swipe */
|
|
49
|
+
overscroll-behavior-x: contain;
|
|
50
|
+
|
|
51
|
+
&:where(:focus-visible) + :where(.rt-ScrollAreaViewportFocusRing) {
|
|
52
|
+
position: absolute;
|
|
53
|
+
inset: 0;
|
|
54
|
+
pointer-events: none;
|
|
55
|
+
outline: 2px solid var(--focus-8);
|
|
56
|
+
outline-offset: -2px;
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
/* ScrollArea Scrollbar Style */
|
|
61
|
+
.okScrollAreaScrollbar {
|
|
62
|
+
display: flex;
|
|
63
|
+
/* Ensures no selection */
|
|
64
|
+
user-select: none;
|
|
65
|
+
/* Disable browser handling of all panning and zooming gestures on touch devices */
|
|
66
|
+
touch-action: none;
|
|
67
|
+
|
|
68
|
+
&:where([data-orientation="vertical"]) {
|
|
69
|
+
flex-direction: column;
|
|
70
|
+
width: 4px;
|
|
71
|
+
}
|
|
72
|
+
&:where([data-orientation="horizontal"]) {
|
|
73
|
+
flex-direction: row;
|
|
74
|
+
height: 4px;
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
/* ScrollArea Thumb Style */
|
|
79
|
+
.okScrollAreaThumb {
|
|
80
|
+
position: relative;
|
|
81
|
+
|
|
82
|
+
&::before {
|
|
83
|
+
content: "";
|
|
84
|
+
position: absolute;
|
|
85
|
+
top: 50%;
|
|
86
|
+
left: 50%;
|
|
87
|
+
transform: translate(-50%, -50%);
|
|
88
|
+
width: 100%;
|
|
89
|
+
height: 100%;
|
|
90
|
+
min-width: var(--space-4);
|
|
91
|
+
min-height: var(--space-4);
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
}
|