@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.
Files changed (334) hide show
  1. package/LICENSE +45 -0
  2. package/README.md +26 -0
  3. package/dist/cjs/index.js +2 -0
  4. package/dist/cjs/index.js.map +1 -0
  5. package/dist/cjs/types/components/FrontPanel/FrontPanel.d.ts +10 -0
  6. package/dist/cjs/types/components/FrontPanel/FrontPanel.props.d.ts +23 -0
  7. package/dist/cjs/types/components/FrontPanel/index.d.ts +7 -0
  8. package/dist/cjs/types/components/FrontPanelIndicator/FrontPanelIndicator.d.ts +30 -0
  9. package/dist/cjs/types/components/FrontPanelIndicator/FrontPanelIndicator.props.d.ts +17 -0
  10. package/dist/cjs/types/components/FrontPanelIndicator/index.d.ts +8 -0
  11. package/dist/cjs/types/components/FrontPanelNumberDisplay/FrontPanelNumberDisplay.d.ts +33 -0
  12. package/dist/cjs/types/components/FrontPanelNumberDisplay/FrontPanelNumberDisplay.props.d.ts +23 -0
  13. package/dist/cjs/types/components/FrontPanelNumberDisplay/index.d.ts +8 -0
  14. package/dist/cjs/types/components/FrontPanelNumberEntry/FrontPanelNumberEntry.d.ts +33 -0
  15. package/dist/cjs/types/components/FrontPanelNumberEntry/FrontPanelNumberEntry.props.d.ts +27 -0
  16. package/dist/cjs/types/components/FrontPanelNumberEntry/index.d.ts +8 -0
  17. package/dist/cjs/types/components/FrontPanelPushButton/FrontPanelPushButton.d.ts +31 -0
  18. package/dist/cjs/types/components/FrontPanelPushButton/FrontPanelPushButton.props.d.ts +17 -0
  19. package/dist/cjs/types/components/FrontPanelPushButton/index.d.ts +8 -0
  20. package/dist/cjs/types/components/FrontPanelRangeSlider/FrontPanelRangeSlider.d.ts +31 -0
  21. package/dist/cjs/types/components/FrontPanelRangeSlider/FrontPanelRangeSlider.props.d.ts +21 -0
  22. package/dist/cjs/types/components/FrontPanelRangeSlider/index.d.ts +8 -0
  23. package/dist/cjs/types/components/FrontPanelSelectEntry/FrontPanelSelectEntry.d.ts +17 -0
  24. package/dist/cjs/types/components/FrontPanelSelectEntry/FrontPanelSelectEntryRoot.d.ts +43 -0
  25. package/dist/cjs/types/components/FrontPanelSelectEntry/FrontPanelSelectEntryRoot.props.d.ts +21 -0
  26. package/dist/cjs/types/components/FrontPanelSelectEntry/index.d.ts +15 -0
  27. package/dist/cjs/types/components/FrontPanelToggleSwitch/FrontPanelToggleSwitch.d.ts +31 -0
  28. package/dist/cjs/types/components/FrontPanelToggleSwitch/FrontPanelToggleSwitch.props.d.ts +17 -0
  29. package/dist/cjs/types/components/FrontPanelToggleSwitch/index.d.ts +8 -0
  30. package/dist/cjs/types/components/FrontPanelTriggerButton/FrontPanelTriggerButton.d.ts +32 -0
  31. package/dist/cjs/types/components/FrontPanelTriggerButton/FrontPanelTriggerButton.props.d.ts +18 -0
  32. package/dist/cjs/types/components/FrontPanelTriggerButton/index.d.ts +8 -0
  33. package/dist/cjs/types/components/Icons/ChevronIcon.d.ts +17 -0
  34. package/dist/cjs/types/components/Icons/IndicatorArrowIcon.d.ts +17 -0
  35. package/dist/cjs/types/components/Icons/IndicatorBarIcon.d.ts +10 -0
  36. package/dist/cjs/types/components/Icons/IndicatorStateIcon.d.ts +14 -0
  37. package/dist/cjs/types/components/Icons/RadioToggleStateIcon.d.ts +14 -0
  38. package/dist/cjs/types/components/Icons/SwitchToggleStateIcon.d.ts +14 -0
  39. package/dist/cjs/types/components/Icons/index.d.ts +12 -0
  40. package/dist/cjs/types/components/Icons/types.d.ts +17 -0
  41. package/dist/cjs/types/components/index.d.ts +16 -0
  42. package/dist/cjs/types/components/types.d.ts +11 -0
  43. package/dist/cjs/types/contexts/FrontPanelContext.d.ts +15 -0
  44. package/dist/cjs/types/contexts/index.d.ts +8 -0
  45. package/dist/cjs/types/core/Binary.d.ts +7 -0
  46. package/dist/cjs/types/core/Numeric.d.ts +80 -0
  47. package/dist/cjs/types/core/Types.d.ts +34 -0
  48. package/dist/cjs/types/core/index.d.ts +9 -0
  49. package/dist/cjs/types/index.d.ts +10 -0
  50. package/dist/cjs/types/primitives/Application/Application.d.ts +10 -0
  51. package/dist/cjs/types/primitives/Application/Application.props.d.ts +10 -0
  52. package/dist/cjs/types/primitives/Application/index.d.ts +1 -0
  53. package/dist/cjs/types/primitives/Button/Button.d.ts +33 -0
  54. package/dist/cjs/types/primitives/Button/Button.props.d.ts +44 -0
  55. package/dist/cjs/types/primitives/Button/index.d.ts +3 -0
  56. package/dist/cjs/types/primitives/DigitEntry/DigitEntry.d.ts +33 -0
  57. package/dist/cjs/types/primitives/DigitEntry/DigitEntry.props.d.ts +51 -0
  58. package/dist/cjs/types/primitives/DigitEntry/index.d.ts +9 -0
  59. package/dist/cjs/types/primitives/Indicator/Indicator.d.ts +29 -0
  60. package/dist/cjs/types/primitives/Indicator/Indicator.props.d.ts +35 -0
  61. package/dist/cjs/types/primitives/Indicator/index.d.ts +9 -0
  62. package/dist/cjs/types/primitives/Label/Label.d.ts +31 -0
  63. package/dist/cjs/types/primitives/Label/Label.props.d.ts +33 -0
  64. package/dist/cjs/types/primitives/Label/index.d.ts +9 -0
  65. package/dist/cjs/types/primitives/NumberDisplay/NumberDisplay.d.ts +31 -0
  66. package/dist/cjs/types/primitives/NumberDisplay/NumberDisplay.props.d.ts +52 -0
  67. package/dist/cjs/types/primitives/NumberDisplay/index.d.ts +9 -0
  68. package/dist/cjs/types/primitives/NumberEntry/NumberEntry.d.ts +34 -0
  69. package/dist/cjs/types/primitives/NumberEntry/NumberEntry.props.d.ts +69 -0
  70. package/dist/cjs/types/primitives/NumberEntry/NumberEntryDigits.d.ts +27 -0
  71. package/dist/cjs/types/primitives/NumberEntry/NumberEntryDigits.props.d.ts +43 -0
  72. package/dist/cjs/types/primitives/NumberEntry/index.d.ts +9 -0
  73. package/dist/cjs/types/primitives/RangeSlider/RangeSlider.d.ts +33 -0
  74. package/dist/cjs/types/primitives/RangeSlider/RangeSlider.props.d.ts +77 -0
  75. package/dist/cjs/types/primitives/RangeSlider/index.d.ts +9 -0
  76. package/dist/cjs/types/primitives/SelectEntry/SelectEntry.d.ts +17 -0
  77. package/dist/cjs/types/primitives/SelectEntry/SelectEntryContent.d.ts +16 -0
  78. package/dist/cjs/types/primitives/SelectEntry/SelectEntryGroup.d.ts +15 -0
  79. package/dist/cjs/types/primitives/SelectEntry/SelectEntryItem.d.ts +15 -0
  80. package/dist/cjs/types/primitives/SelectEntry/SelectEntryLabel.d.ts +15 -0
  81. package/dist/cjs/types/primitives/SelectEntry/SelectEntryRoot.d.ts +39 -0
  82. package/dist/cjs/types/primitives/SelectEntry/SelectEntryRoot.props.d.ts +31 -0
  83. package/dist/cjs/types/primitives/SelectEntry/SelectEntrySeparator.d.ts +15 -0
  84. package/dist/cjs/types/primitives/SelectEntry/SelectEntryTrigger.d.ts +16 -0
  85. package/dist/cjs/types/primitives/SelectEntry/SelectEntryTrigger.props.d.ts +16 -0
  86. package/dist/cjs/types/primitives/SelectEntry/index.d.ts +17 -0
  87. package/dist/cjs/types/primitives/Toggle/Toggle.d.ts +35 -0
  88. package/dist/cjs/types/primitives/Toggle/Toggle.props.d.ts +37 -0
  89. package/dist/cjs/types/primitives/Toggle/index.d.ts +9 -0
  90. package/dist/cjs/types/primitives/ToggleSwitch/ToggleSwitch.d.ts +32 -0
  91. package/dist/cjs/types/primitives/ToggleSwitch/ToggleSwitch.props.d.ts +22 -0
  92. package/dist/cjs/types/primitives/ToggleSwitch/index.d.ts +8 -0
  93. package/dist/cjs/types/primitives/Tooltip/Tooltip.d.ts +35 -0
  94. package/dist/cjs/types/primitives/Tooltip/Tooltip.props.d.ts +17 -0
  95. package/dist/cjs/types/primitives/Tooltip/index.d.ts +8 -0
  96. package/dist/cjs/types/primitives/TooltipUtility.d.ts +12 -0
  97. package/dist/cjs/types/primitives/index.d.ts +24 -0
  98. package/dist/esm/index.js +2 -0
  99. package/dist/esm/index.js.map +1 -0
  100. package/dist/esm/types/components/FrontPanel/FrontPanel.d.ts +10 -0
  101. package/dist/esm/types/components/FrontPanel/FrontPanel.props.d.ts +23 -0
  102. package/dist/esm/types/components/FrontPanel/index.d.ts +7 -0
  103. package/dist/esm/types/components/FrontPanelIndicator/FrontPanelIndicator.d.ts +30 -0
  104. package/dist/esm/types/components/FrontPanelIndicator/FrontPanelIndicator.props.d.ts +17 -0
  105. package/dist/esm/types/components/FrontPanelIndicator/index.d.ts +8 -0
  106. package/dist/esm/types/components/FrontPanelNumberDisplay/FrontPanelNumberDisplay.d.ts +33 -0
  107. package/dist/esm/types/components/FrontPanelNumberDisplay/FrontPanelNumberDisplay.props.d.ts +23 -0
  108. package/dist/esm/types/components/FrontPanelNumberDisplay/index.d.ts +8 -0
  109. package/dist/esm/types/components/FrontPanelNumberEntry/FrontPanelNumberEntry.d.ts +33 -0
  110. package/dist/esm/types/components/FrontPanelNumberEntry/FrontPanelNumberEntry.props.d.ts +27 -0
  111. package/dist/esm/types/components/FrontPanelNumberEntry/index.d.ts +8 -0
  112. package/dist/esm/types/components/FrontPanelPushButton/FrontPanelPushButton.d.ts +31 -0
  113. package/dist/esm/types/components/FrontPanelPushButton/FrontPanelPushButton.props.d.ts +17 -0
  114. package/dist/esm/types/components/FrontPanelPushButton/index.d.ts +8 -0
  115. package/dist/esm/types/components/FrontPanelRangeSlider/FrontPanelRangeSlider.d.ts +31 -0
  116. package/dist/esm/types/components/FrontPanelRangeSlider/FrontPanelRangeSlider.props.d.ts +21 -0
  117. package/dist/esm/types/components/FrontPanelRangeSlider/index.d.ts +8 -0
  118. package/dist/esm/types/components/FrontPanelSelectEntry/FrontPanelSelectEntry.d.ts +17 -0
  119. package/dist/esm/types/components/FrontPanelSelectEntry/FrontPanelSelectEntryRoot.d.ts +43 -0
  120. package/dist/esm/types/components/FrontPanelSelectEntry/FrontPanelSelectEntryRoot.props.d.ts +21 -0
  121. package/dist/esm/types/components/FrontPanelSelectEntry/index.d.ts +15 -0
  122. package/dist/esm/types/components/FrontPanelToggleSwitch/FrontPanelToggleSwitch.d.ts +31 -0
  123. package/dist/esm/types/components/FrontPanelToggleSwitch/FrontPanelToggleSwitch.props.d.ts +17 -0
  124. package/dist/esm/types/components/FrontPanelToggleSwitch/index.d.ts +8 -0
  125. package/dist/esm/types/components/FrontPanelTriggerButton/FrontPanelTriggerButton.d.ts +32 -0
  126. package/dist/esm/types/components/FrontPanelTriggerButton/FrontPanelTriggerButton.props.d.ts +18 -0
  127. package/dist/esm/types/components/FrontPanelTriggerButton/index.d.ts +8 -0
  128. package/dist/esm/types/components/Icons/ChevronIcon.d.ts +17 -0
  129. package/dist/esm/types/components/Icons/IndicatorArrowIcon.d.ts +17 -0
  130. package/dist/esm/types/components/Icons/IndicatorBarIcon.d.ts +10 -0
  131. package/dist/esm/types/components/Icons/IndicatorStateIcon.d.ts +14 -0
  132. package/dist/esm/types/components/Icons/RadioToggleStateIcon.d.ts +14 -0
  133. package/dist/esm/types/components/Icons/SwitchToggleStateIcon.d.ts +14 -0
  134. package/dist/esm/types/components/Icons/index.d.ts +12 -0
  135. package/dist/esm/types/components/Icons/types.d.ts +17 -0
  136. package/dist/esm/types/components/index.d.ts +16 -0
  137. package/dist/esm/types/components/types.d.ts +11 -0
  138. package/dist/esm/types/contexts/FrontPanelContext.d.ts +15 -0
  139. package/dist/esm/types/contexts/index.d.ts +8 -0
  140. package/dist/esm/types/core/Binary.d.ts +7 -0
  141. package/dist/esm/types/core/Numeric.d.ts +80 -0
  142. package/dist/esm/types/core/Types.d.ts +34 -0
  143. package/dist/esm/types/core/index.d.ts +9 -0
  144. package/dist/esm/types/index.d.ts +10 -0
  145. package/dist/esm/types/primitives/Application/Application.d.ts +10 -0
  146. package/dist/esm/types/primitives/Application/Application.props.d.ts +10 -0
  147. package/dist/esm/types/primitives/Application/index.d.ts +1 -0
  148. package/dist/esm/types/primitives/Button/Button.d.ts +33 -0
  149. package/dist/esm/types/primitives/Button/Button.props.d.ts +44 -0
  150. package/dist/esm/types/primitives/Button/index.d.ts +3 -0
  151. package/dist/esm/types/primitives/DigitEntry/DigitEntry.d.ts +33 -0
  152. package/dist/esm/types/primitives/DigitEntry/DigitEntry.props.d.ts +51 -0
  153. package/dist/esm/types/primitives/DigitEntry/index.d.ts +9 -0
  154. package/dist/esm/types/primitives/Indicator/Indicator.d.ts +29 -0
  155. package/dist/esm/types/primitives/Indicator/Indicator.props.d.ts +35 -0
  156. package/dist/esm/types/primitives/Indicator/index.d.ts +9 -0
  157. package/dist/esm/types/primitives/Label/Label.d.ts +31 -0
  158. package/dist/esm/types/primitives/Label/Label.props.d.ts +33 -0
  159. package/dist/esm/types/primitives/Label/index.d.ts +9 -0
  160. package/dist/esm/types/primitives/NumberDisplay/NumberDisplay.d.ts +31 -0
  161. package/dist/esm/types/primitives/NumberDisplay/NumberDisplay.props.d.ts +52 -0
  162. package/dist/esm/types/primitives/NumberDisplay/index.d.ts +9 -0
  163. package/dist/esm/types/primitives/NumberEntry/NumberEntry.d.ts +34 -0
  164. package/dist/esm/types/primitives/NumberEntry/NumberEntry.props.d.ts +69 -0
  165. package/dist/esm/types/primitives/NumberEntry/NumberEntryDigits.d.ts +27 -0
  166. package/dist/esm/types/primitives/NumberEntry/NumberEntryDigits.props.d.ts +43 -0
  167. package/dist/esm/types/primitives/NumberEntry/index.d.ts +9 -0
  168. package/dist/esm/types/primitives/RangeSlider/RangeSlider.d.ts +33 -0
  169. package/dist/esm/types/primitives/RangeSlider/RangeSlider.props.d.ts +77 -0
  170. package/dist/esm/types/primitives/RangeSlider/index.d.ts +9 -0
  171. package/dist/esm/types/primitives/SelectEntry/SelectEntry.d.ts +17 -0
  172. package/dist/esm/types/primitives/SelectEntry/SelectEntryContent.d.ts +16 -0
  173. package/dist/esm/types/primitives/SelectEntry/SelectEntryGroup.d.ts +15 -0
  174. package/dist/esm/types/primitives/SelectEntry/SelectEntryItem.d.ts +15 -0
  175. package/dist/esm/types/primitives/SelectEntry/SelectEntryLabel.d.ts +15 -0
  176. package/dist/esm/types/primitives/SelectEntry/SelectEntryRoot.d.ts +39 -0
  177. package/dist/esm/types/primitives/SelectEntry/SelectEntryRoot.props.d.ts +31 -0
  178. package/dist/esm/types/primitives/SelectEntry/SelectEntrySeparator.d.ts +15 -0
  179. package/dist/esm/types/primitives/SelectEntry/SelectEntryTrigger.d.ts +16 -0
  180. package/dist/esm/types/primitives/SelectEntry/SelectEntryTrigger.props.d.ts +16 -0
  181. package/dist/esm/types/primitives/SelectEntry/index.d.ts +17 -0
  182. package/dist/esm/types/primitives/Toggle/Toggle.d.ts +35 -0
  183. package/dist/esm/types/primitives/Toggle/Toggle.props.d.ts +37 -0
  184. package/dist/esm/types/primitives/Toggle/index.d.ts +9 -0
  185. package/dist/esm/types/primitives/ToggleSwitch/ToggleSwitch.d.ts +32 -0
  186. package/dist/esm/types/primitives/ToggleSwitch/ToggleSwitch.props.d.ts +22 -0
  187. package/dist/esm/types/primitives/ToggleSwitch/index.d.ts +8 -0
  188. package/dist/esm/types/primitives/Tooltip/Tooltip.d.ts +35 -0
  189. package/dist/esm/types/primitives/Tooltip/Tooltip.props.d.ts +17 -0
  190. package/dist/esm/types/primitives/Tooltip/index.d.ts +8 -0
  191. package/dist/esm/types/primitives/TooltipUtility.d.ts +12 -0
  192. package/dist/esm/types/primitives/index.d.ts +24 -0
  193. package/dist/index.d.ts +1456 -0
  194. package/package.json +81 -0
  195. package/src/components/FrontPanel/FrontPanel.props.ts +25 -0
  196. package/src/components/FrontPanel/FrontPanel.tsx +33 -0
  197. package/src/components/FrontPanel/index.ts +8 -0
  198. package/src/components/FrontPanelIndicator/FrontPanelIndicator.css +0 -0
  199. package/src/components/FrontPanelIndicator/FrontPanelIndicator.props.ts +20 -0
  200. package/src/components/FrontPanelIndicator/FrontPanelIndicator.stories.tsx +44 -0
  201. package/src/components/FrontPanelIndicator/FrontPanelIndicator.tsx +81 -0
  202. package/src/components/FrontPanelIndicator/index.ts +10 -0
  203. package/src/components/FrontPanelNumberDisplay/FrontPanelNumberDisplay.css +0 -0
  204. package/src/components/FrontPanelNumberDisplay/FrontPanelNumberDisplay.props.ts +27 -0
  205. package/src/components/FrontPanelNumberDisplay/FrontPanelNumberDisplay.stories.tsx +67 -0
  206. package/src/components/FrontPanelNumberDisplay/FrontPanelNumberDisplay.tsx +130 -0
  207. package/src/components/FrontPanelNumberDisplay/index.ts +10 -0
  208. package/src/components/FrontPanelNumberEntry/FrontPanelNumberEntry.css +0 -0
  209. package/src/components/FrontPanelNumberEntry/FrontPanelNumberEntry.props.ts +32 -0
  210. package/src/components/FrontPanelNumberEntry/FrontPanelNumberEntry.stories.tsx +104 -0
  211. package/src/components/FrontPanelNumberEntry/FrontPanelNumberEntry.tsx +195 -0
  212. package/src/components/FrontPanelNumberEntry/index.ts +10 -0
  213. package/src/components/FrontPanelPushButton/FrontPanelPushButton.css +0 -0
  214. package/src/components/FrontPanelPushButton/FrontPanelPushButton.props.ts +20 -0
  215. package/src/components/FrontPanelPushButton/FrontPanelPushButton.stories.tsx +46 -0
  216. package/src/components/FrontPanelPushButton/FrontPanelPushButton.tsx +80 -0
  217. package/src/components/FrontPanelPushButton/index.ts +10 -0
  218. package/src/components/FrontPanelRangeSlider/FrontPanelRangeSlider.css +0 -0
  219. package/src/components/FrontPanelRangeSlider/FrontPanelRangeSlider.props.ts +25 -0
  220. package/src/components/FrontPanelRangeSlider/FrontPanelRangeSlider.stories.tsx +92 -0
  221. package/src/components/FrontPanelRangeSlider/FrontPanelRangeSlider.tsx +108 -0
  222. package/src/components/FrontPanelRangeSlider/index.ts +10 -0
  223. package/src/components/FrontPanelSelectEntry/FrontPanelSelectEntry.css +0 -0
  224. package/src/components/FrontPanelSelectEntry/FrontPanelSelectEntry.stories.tsx +107 -0
  225. package/src/components/FrontPanelSelectEntry/FrontPanelSelectEntry.tsx +30 -0
  226. package/src/components/FrontPanelSelectEntry/FrontPanelSelectEntryRoot.props.ts +25 -0
  227. package/src/components/FrontPanelSelectEntry/FrontPanelSelectEntryRoot.tsx +175 -0
  228. package/src/components/FrontPanelSelectEntry/index.ts +17 -0
  229. package/src/components/FrontPanelToggleSwitch/FrontPanelToggleSwitch.css +0 -0
  230. package/src/components/FrontPanelToggleSwitch/FrontPanelToggleSwitch.props.ts +20 -0
  231. package/src/components/FrontPanelToggleSwitch/FrontPanelToggleSwitch.stories.tsx +46 -0
  232. package/src/components/FrontPanelToggleSwitch/FrontPanelToggleSwitch.tsx +108 -0
  233. package/src/components/FrontPanelToggleSwitch/index.ts +10 -0
  234. package/src/components/FrontPanelTriggerButton/FrontPanelTriggerButton.css +0 -0
  235. package/src/components/FrontPanelTriggerButton/FrontPanelTriggerButton.props.ts +21 -0
  236. package/src/components/FrontPanelTriggerButton/FrontPanelTriggerButton.stories.tsx +46 -0
  237. package/src/components/FrontPanelTriggerButton/FrontPanelTriggerButton.tsx +65 -0
  238. package/src/components/FrontPanelTriggerButton/index.ts +10 -0
  239. package/src/components/Icons/ChevronIcon.tsx +69 -0
  240. package/src/components/Icons/IndicatorArrowIcon.tsx +59 -0
  241. package/src/components/Icons/IndicatorBarIcon.tsx +34 -0
  242. package/src/components/Icons/IndicatorStateIcon.tsx +82 -0
  243. package/src/components/Icons/RadioToggleStateIcon.tsx +62 -0
  244. package/src/components/Icons/SwitchToggleStateIcon.tsx +68 -0
  245. package/src/components/Icons/index.ts +15 -0
  246. package/src/components/Icons/types.ts +20 -0
  247. package/src/components/index.ts +31 -0
  248. package/src/components/types.ts +13 -0
  249. package/src/contexts/FrontPanelContext.ts +23 -0
  250. package/src/contexts/index.ts +10 -0
  251. package/src/core/Binary.ts +23 -0
  252. package/src/core/Numeric.ts +168 -0
  253. package/src/core/Types.ts +39 -0
  254. package/src/core/index.ts +11 -0
  255. package/src/fonts/Inter-VariableFont_slnt,wght.ttf +0 -0
  256. package/src/index.css +11 -0
  257. package/src/index.ts +11 -0
  258. package/src/primitives/Application/Application.props.ts +10 -0
  259. package/src/primitives/Application/Application.tsx +24 -0
  260. package/src/primitives/Application/index.ts +1 -0
  261. package/src/primitives/Button/Button.css +60 -0
  262. package/src/primitives/Button/Button.props.ts +53 -0
  263. package/src/primitives/Button/Button.stories.tsx +54 -0
  264. package/src/primitives/Button/Button.tsx +75 -0
  265. package/src/primitives/Button/index.ts +4 -0
  266. package/src/primitives/DigitEntry/DigitEntry.css +120 -0
  267. package/src/primitives/DigitEntry/DigitEntry.props.ts +62 -0
  268. package/src/primitives/DigitEntry/DigitEntry.stories.tsx +84 -0
  269. package/src/primitives/DigitEntry/DigitEntry.tsx +226 -0
  270. package/src/primitives/DigitEntry/index.ts +15 -0
  271. package/src/primitives/Indicator/Indicator.css +66 -0
  272. package/src/primitives/Indicator/Indicator.props.ts +42 -0
  273. package/src/primitives/Indicator/Indicator.stories.tsx +44 -0
  274. package/src/primitives/Indicator/Indicator.tsx +64 -0
  275. package/src/primitives/Indicator/index.ts +11 -0
  276. package/src/primitives/Label/Label.css +49 -0
  277. package/src/primitives/Label/Label.props.ts +38 -0
  278. package/src/primitives/Label/Label.stories.tsx +53 -0
  279. package/src/primitives/Label/Label.tsx +66 -0
  280. package/src/primitives/Label/index.ts +11 -0
  281. package/src/primitives/NumberDisplay/NumberDisplay.css +63 -0
  282. package/src/primitives/NumberDisplay/NumberDisplay.props.ts +65 -0
  283. package/src/primitives/NumberDisplay/NumberDisplay.stories.tsx +83 -0
  284. package/src/primitives/NumberDisplay/NumberDisplay.tsx +155 -0
  285. package/src/primitives/NumberDisplay/index.ts +11 -0
  286. package/src/primitives/NumberEntry/NumberEntry.css +71 -0
  287. package/src/primitives/NumberEntry/NumberEntry.props.ts +86 -0
  288. package/src/primitives/NumberEntry/NumberEntry.stories.tsx +129 -0
  289. package/src/primitives/NumberEntry/NumberEntry.tsx +249 -0
  290. package/src/primitives/NumberEntry/NumberEntryDigits.props.ts +57 -0
  291. package/src/primitives/NumberEntry/NumberEntryDigits.tsx +117 -0
  292. package/src/primitives/NumberEntry/index.ts +11 -0
  293. package/src/primitives/RangeSlider/RangeSlider.css +110 -0
  294. package/src/primitives/RangeSlider/RangeSlider.props.ts +93 -0
  295. package/src/primitives/RangeSlider/RangeSlider.stories.tsx +76 -0
  296. package/src/primitives/RangeSlider/RangeSlider.tsx +168 -0
  297. package/src/primitives/RangeSlider/index.ts +14 -0
  298. package/src/primitives/SelectEntry/SelectEntry.stories.tsx +86 -0
  299. package/src/primitives/SelectEntry/SelectEntry.tsx +29 -0
  300. package/src/primitives/SelectEntry/SelectEntryContent.css +94 -0
  301. package/src/primitives/SelectEntry/SelectEntryContent.tsx +63 -0
  302. package/src/primitives/SelectEntry/SelectEntryGroup.css +17 -0
  303. package/src/primitives/SelectEntry/SelectEntryGroup.tsx +37 -0
  304. package/src/primitives/SelectEntry/SelectEntryItem.css +35 -0
  305. package/src/primitives/SelectEntry/SelectEntryItem.tsx +51 -0
  306. package/src/primitives/SelectEntry/SelectEntryLabel.css +16 -0
  307. package/src/primitives/SelectEntry/SelectEntryLabel.tsx +43 -0
  308. package/src/primitives/SelectEntry/SelectEntryRoot.css +10 -0
  309. package/src/primitives/SelectEntry/SelectEntryRoot.props.ts +38 -0
  310. package/src/primitives/SelectEntry/SelectEntryRoot.tsx +69 -0
  311. package/src/primitives/SelectEntry/SelectEntrySeparator.css +12 -0
  312. package/src/primitives/SelectEntry/SelectEntrySeparator.tsx +38 -0
  313. package/src/primitives/SelectEntry/SelectEntryTrigger.css +49 -0
  314. package/src/primitives/SelectEntry/SelectEntryTrigger.props.ts +18 -0
  315. package/src/primitives/SelectEntry/SelectEntryTrigger.tsx +111 -0
  316. package/src/primitives/SelectEntry/index.ts +20 -0
  317. package/src/primitives/Toggle/Toggle.css +67 -0
  318. package/src/primitives/Toggle/Toggle.props.ts +44 -0
  319. package/src/primitives/Toggle/Toggle.stories.tsx +61 -0
  320. package/src/primitives/Toggle/Toggle.tsx +90 -0
  321. package/src/primitives/Toggle/index.ts +11 -0
  322. package/src/primitives/ToggleSwitch/ToggleSwitch.css +118 -0
  323. package/src/primitives/ToggleSwitch/ToggleSwitch.props.ts +26 -0
  324. package/src/primitives/ToggleSwitch/ToggleSwitch.stories.tsx +85 -0
  325. package/src/primitives/ToggleSwitch/ToggleSwitch.tsx +73 -0
  326. package/src/primitives/ToggleSwitch/index.ts +10 -0
  327. package/src/primitives/Tooltip/Tooltip.css +93 -0
  328. package/src/primitives/Tooltip/Tooltip.props.ts +20 -0
  329. package/src/primitives/Tooltip/Tooltip.tsx +91 -0
  330. package/src/primitives/Tooltip/index.ts +10 -0
  331. package/src/primitives/TooltipUtility.tsx +24 -0
  332. package/src/primitives/index.ts +44 -0
  333. package/src/stories/decorators/Application.decorator.tsx +20 -0
  334. package/src/stories/decorators/FrontPanel.decorator.tsx +47 -0
@@ -0,0 +1,104 @@
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, { useContext } from "react";
9
+
10
+ import type { Meta, StoryObj } from "@storybook/react";
11
+
12
+ import withApplication from "../../stories/decorators/Application.decorator";
13
+ import withFrontPanel from "../../stories/decorators/FrontPanel.decorator";
14
+
15
+ import FrontPanelNumberEntry from "./FrontPanelNumberEntry";
16
+
17
+ import { FrontPanelContext } from "../../contexts";
18
+
19
+ import { NumeralSystem } from "../../core";
20
+
21
+ import { WireValue } from "@opalkelly/frontpanel-alloy-core";
22
+
23
+ // Configure Story metadata
24
+ const meta = {
25
+ title: "Components/FrontPanel/FrontPanelNumberEntry",
26
+ component: FrontPanelNumberEntry,
27
+ parameters: {
28
+ layout: "centered" // Center the component in the Canvas
29
+ },
30
+ tags: ["autodocs"], // Automatically generate documentation
31
+ argTypes: {
32
+ variant: {
33
+ control: "radio",
34
+ options: ["standard", "compact"]
35
+ },
36
+ disabled: { control: "boolean" },
37
+ size: {
38
+ control: { type: "range", min: 1, max: 3, step: 1 }
39
+ },
40
+ decimalScale: {
41
+ control: { type: "range", min: 0, max: 20, step: 1 }
42
+ },
43
+ numeralSystem: {
44
+ control: "radio",
45
+ options: ["Decimal", "Hexadecimal", "Binary", "Octal"],
46
+ mapping: {
47
+ Decimal: NumeralSystem.Decimal,
48
+ Hexadecimal: NumeralSystem.Hexadecimal,
49
+ Binary: NumeralSystem.Binary,
50
+ Octal: NumeralSystem.Octal
51
+ }
52
+ },
53
+ maximumValue: { control: "text" },
54
+ minimumValue: { control: "text" }
55
+ }
56
+ } satisfies Meta<typeof FrontPanelNumberEntry>;
57
+
58
+ export default meta;
59
+
60
+ type Story = StoryObj<typeof meta>;
61
+
62
+ // Primary Story
63
+ export const Primary: Story = {
64
+ render: (props) => {
65
+ const { device, workQueue } = useContext(FrontPanelContext);
66
+
67
+ const setWireInPromises: Promise<void>[] = [];
68
+
69
+ // Initialize the WireIns with unique values.
70
+ workQueue.Post(async (): Promise<void> => {
71
+ let byteId = 0;
72
+
73
+ for (let address = 0x0; address < 0x20; address++) {
74
+ let wireValue: WireValue = byteId++;
75
+ for (let byteIndex = 1; byteIndex < 4; byteIndex++) {
76
+ wireValue |= byteId++ << (8 * byteIndex);
77
+ }
78
+ setWireInPromises.push(device.setWireInValue(address, wireValue, 0xffffffff));
79
+ }
80
+
81
+ await Promise.all(setWireInPromises);
82
+ await device.updateWireIns();
83
+ });
84
+
85
+ return <FrontPanelNumberEntry {...props} />;
86
+ },
87
+ decorators: [withApplication, withFrontPanel],
88
+ args: {
89
+ fpEndpoint: { epAddress: 0x00, bitOffset: 1 },
90
+ maximumValue: 0xffffffffn,
91
+ // Optional Properties
92
+ disabled: false,
93
+ variant: "standard",
94
+ numeralSystem: NumeralSystem.Decimal,
95
+ decimalScale: 0,
96
+ label: {
97
+ text: "Wire Value",
98
+ verticalPosition: "top",
99
+ horizontalPosition: "left"
100
+ },
101
+ size: 1,
102
+ tooltip: "Set the wire endpoint value"
103
+ }
104
+ };
@@ -0,0 +1,195 @@
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 "./FrontPanelNumberEntry.css";
11
+
12
+ import { NumberEntry } from "../../primitives";
13
+
14
+ import FrontPanelNumberEntryProps from "./FrontPanelNumberEntry.props";
15
+
16
+ import { FrontPanelContext } from "../../contexts";
17
+
18
+ import { CalculateBitLength } from "../../core";
19
+
20
+ import { IFrontPanel, WIREIN_ADDRESS_RANGE } from "@opalkelly/frontpanel-alloy-core";
21
+
22
+ type FrontPanelNumberEntryElement = React.ElementRef<typeof NumberEntry>;
23
+
24
+ interface FrontPanelNumberEntryCombinedProps
25
+ extends Omit<
26
+ React.ComponentPropsWithoutRef<typeof NumberEntry>,
27
+ "value" | "maximumValue" | "minimumValue" | "onValueChange"
28
+ >,
29
+ FrontPanelNumberEntryProps {}
30
+
31
+ export type { FrontPanelNumberEntryCombinedProps };
32
+
33
+ /**
34
+ * `FrontPanelNumberEntry` is a React component that renders a number entry field to allow setting the value of a WireIn endpoint
35
+ * represented in binary, octal, decimal, or hexadecimal numeral systems. The values of the individual digits of the number can
36
+ * be entered by key or they can be incremented and decremented using the up and down arrow keys and or the mouse wheel.
37
+ *
38
+ * @component
39
+ * @param {Object} props - Properties passed to component
40
+ * @param {React.Ref} forwardedRef - Forwarded ref for the number display
41
+ *
42
+ * @returns {React.Node} The rendered FrontPanelNumberDisplay component
43
+ *
44
+ * @example
45
+ * ```jsx
46
+ * <FrontPanelNumberEntry
47
+ * fpEndpoint={{epAddress: 0x00, bitOffset: 1}}
48
+ * maximumValue=0xffffffff />
49
+ * ```
50
+ */
51
+ const FrontPanelNumberEntry = React.forwardRef<
52
+ FrontPanelNumberEntryElement,
53
+ FrontPanelNumberEntryCombinedProps
54
+ >((props, forwardedRef) => {
55
+ const [value, setValue] = React.useState<bigint>(props.minimumValue ?? 0n);
56
+
57
+ const { device, workQueue } = React.useContext(FrontPanelContext);
58
+
59
+ const { maximumValue, minimumValue, fpEndpoint, ...rootProps } = props;
60
+
61
+ const clampedMinimumValue = React.useMemo(() => {
62
+ return typeof minimumValue !== "undefined"
63
+ ? ClampValue(minimumValue, maximumValue, 0n)
64
+ : 0n;
65
+ }, [minimumValue, maximumValue]);
66
+
67
+ const targetBitLength: number = React.useMemo(() => {
68
+ return CalculateBitLength(maximumValue);
69
+ }, [maximumValue]);
70
+
71
+ const targetWireSpanBitMask =
72
+ ((1n << BigInt(targetBitLength)) - 1n) << BigInt(fpEndpoint.bitOffset);
73
+
74
+ const onUpdateWireValue = React.useCallback(
75
+ async (sender: IFrontPanel): Promise<void> => {
76
+ await workQueue.Post(async () => {
77
+ // Get the wire value for the endpoint
78
+ let sourceWireValue = await sender.getWireInValue(fpEndpoint.epAddress);
79
+ let targetWireBitMask = targetWireSpanBitMask & 0xffffffffn;
80
+ let sourceSpanValue =
81
+ (BigInt(sourceWireValue) & targetWireBitMask) >> BigInt(fpEndpoint.bitOffset);
82
+
83
+ if (targetWireSpanBitMask > 0xffffffffn) {
84
+ // The operations spans multiple endpoints
85
+ let currentWireSpanBitOffset = 32n - BigInt(fpEndpoint.bitOffset);
86
+ let currentWireSpanBitMask = targetWireSpanBitMask >> 32n;
87
+
88
+ for (
89
+ let sourceWireAddress = fpEndpoint.epAddress + 1;
90
+ sourceWireAddress <= WIREIN_ADDRESS_RANGE.Maximum &&
91
+ currentWireSpanBitMask > 0n;
92
+ sourceWireAddress++
93
+ ) {
94
+ // Get the wire value for the next endpoint
95
+ sourceWireValue = await sender.getWireInValue(sourceWireAddress);
96
+ targetWireBitMask = currentWireSpanBitMask & 0xffffffffn;
97
+ sourceSpanValue |=
98
+ (BigInt(sourceWireValue) & targetWireBitMask) <<
99
+ currentWireSpanBitOffset;
100
+
101
+ currentWireSpanBitOffset += 32n;
102
+ currentWireSpanBitMask >>= 32n;
103
+ }
104
+ }
105
+
106
+ setValue(sourceSpanValue);
107
+ });
108
+ },
109
+ [fpEndpoint, targetWireSpanBitMask]
110
+ );
111
+
112
+ React.useEffect(() => {
113
+ onUpdateWireValue(device);
114
+ }, [device, onUpdateWireValue]);
115
+
116
+ const onNumberEntryValueChange = React.useCallback(
117
+ async (value: bigint): Promise<void> => {
118
+ await workQueue.Post(async () => {
119
+ let targetWireBitMask = targetWireSpanBitMask & 0xffffffffn;
120
+ let targetWireValue = Number(
121
+ (value << BigInt(fpEndpoint.bitOffset)) & targetWireBitMask
122
+ );
123
+
124
+ // Set the wire value for the endpoint
125
+ await device.setWireInValue(
126
+ fpEndpoint.epAddress,
127
+ targetWireValue,
128
+ Number(targetWireBitMask)
129
+ );
130
+
131
+ if (targetWireSpanBitMask > 0xffffffffn) {
132
+ // The operations spans multiple endpoints
133
+ let currentWireSpanBitOffset = 32n - BigInt(fpEndpoint.bitOffset);
134
+ let currentWireSpanBitMask = targetWireSpanBitMask >> 32n;
135
+
136
+ for (
137
+ let targetWireAddress = fpEndpoint.epAddress + 1;
138
+ targetWireAddress <= WIREIN_ADDRESS_RANGE.Maximum &&
139
+ currentWireSpanBitMask > 0n;
140
+ targetWireAddress++
141
+ ) {
142
+ targetWireBitMask = currentWireSpanBitMask & 0xffffffffn;
143
+ targetWireValue = Number(
144
+ (value >> currentWireSpanBitOffset) & targetWireBitMask
145
+ );
146
+
147
+ // Set the wire value for the next endpoint
148
+ await device.setWireInValue(
149
+ targetWireAddress,
150
+ targetWireValue,
151
+ Number(targetWireBitMask)
152
+ );
153
+
154
+ currentWireSpanBitOffset += 32n;
155
+ currentWireSpanBitMask >>= 32n;
156
+ }
157
+ }
158
+
159
+ await device.updateWireIns();
160
+ });
161
+
162
+ onUpdateWireValue(device);
163
+ },
164
+ [device, workQueue, fpEndpoint, targetWireSpanBitMask, onUpdateWireValue]
165
+ );
166
+
167
+ return (
168
+ <NumberEntry
169
+ {...rootProps}
170
+ ref={forwardedRef}
171
+ maximumValue={maximumValue}
172
+ minimumValue={clampedMinimumValue}
173
+ value={value}
174
+ onValueChange={onNumberEntryValueChange}
175
+ />
176
+ );
177
+ });
178
+
179
+ FrontPanelNumberEntry.displayName = "FrontPanelNumberEntry";
180
+
181
+ export default FrontPanelNumberEntry;
182
+
183
+ function ClampValue(value: bigint, maximumLimit: bigint, minimumLimit: bigint): bigint {
184
+ let retval: bigint;
185
+
186
+ if (value < minimumLimit) {
187
+ retval = minimumLimit;
188
+ } else if (value > maximumLimit) {
189
+ retval = maximumLimit;
190
+ } else {
191
+ retval = value;
192
+ }
193
+
194
+ return retval;
195
+ }
@@ -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 "./FrontPanelNumberEntry";
9
+
10
+ export { default as FrontPanelNumberEntryProps } from "./FrontPanelNumberEntry.props";
@@ -0,0 +1,20 @@
1
+ /**
2
+ * Copyright (c) 2024 Opal Kelly Incorporated
3
+ *
4
+ * This source code is licensed under the FrontPanel license.
5
+ * See the LICENSE file found in the root directory of this project.
6
+ */
7
+
8
+ import { EndpointAddressProps } from "../types";
9
+
10
+ /**
11
+ * Interface for the properties of the `FrontPanelToggleButton` component.
12
+ */
13
+ interface FrontPanelPushButtonProps {
14
+ /**
15
+ * Address of the frontpanel endpoint
16
+ */
17
+ fpEndpoint: EndpointAddressProps;
18
+ }
19
+
20
+ export default FrontPanelPushButtonProps;
@@ -0,0 +1,46 @@
1
+ /**
2
+ * Copyright (c) 2024 Opal Kelly Incorporated
3
+ *
4
+ * This source code is licensed under the FrontPanel license.
5
+ * See the LICENSE file found in the root directory of this project.
6
+ */
7
+
8
+ import type { Meta, StoryObj } from "@storybook/react";
9
+
10
+ import withApplication from "../../stories/decorators/Application.decorator";
11
+ import withFrontPanel from "../../stories/decorators/FrontPanel.decorator";
12
+
13
+ import FrontPanelPushButton from "./FrontPanelPushButton";
14
+
15
+ // Configure Story metadata
16
+ const meta = {
17
+ title: "Components/FrontPanel/FrontPanelPushButton",
18
+ component: FrontPanelPushButton,
19
+ parameters: {
20
+ layout: "centered" // Center the component in the Canvas
21
+ },
22
+ tags: ["autodocs"], // Automatically generate documentation
23
+ argTypes: {
24
+ size: {
25
+ control: { type: "range", min: 1, max: 3, step: 1 }
26
+ },
27
+ disabled: { control: "boolean" }
28
+ }
29
+ } satisfies Meta<typeof FrontPanelPushButton>;
30
+
31
+ export default meta;
32
+
33
+ type Story = StoryObj<typeof meta>;
34
+
35
+ // Primary Story
36
+ export const Primary: Story = {
37
+ decorators: [withApplication, withFrontPanel],
38
+ args: {
39
+ label: "Pushbutton",
40
+ fpEndpoint: { epAddress: 0x00, bitOffset: 1 },
41
+ // Optional Properties
42
+ disabled: false,
43
+ size: 1,
44
+ tooltip: "Wire endpoint assert button"
45
+ }
46
+ };
@@ -0,0 +1,80 @@
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 { Button } from "../../primitives";
11
+
12
+ import FrontPanelPushButtonProps from "./FrontPanelPushButton.props";
13
+
14
+ import { FrontPanelContext } from "../../contexts";
15
+
16
+ type FrontPanelPushButtonElement = React.ElementRef<typeof Button>;
17
+
18
+ interface FrontPanelPushButtonCombinedProps
19
+ extends Omit<
20
+ React.ComponentPropsWithoutRef<typeof Button>,
21
+ "asChild" | "onButtonClick" | "onButtonDown" | "onButtonUp"
22
+ >,
23
+ FrontPanelPushButtonProps {}
24
+
25
+ export type { FrontPanelPushButtonCombinedProps };
26
+
27
+ /**
28
+ * `FrontPanelPushButton` is a React component that renders a push button that asserts a WireIn endpoint
29
+ * when pressed and deasserts it when released.
30
+ *
31
+ * @component
32
+ * @param {object} props - Properties passed to component
33
+ * @param {React.Ref} forwardedRef - Forwarded ref for the button
34
+ *
35
+ * @returns {React.Node} The rendered FrontPanelPushButton component
36
+ *
37
+ * @example
38
+ * ```jsx
39
+ * <FrontPanelPushButton
40
+ * label="Pushbutton"
41
+ * fpEndpoint={{epAddress: 0x00, bitOffset: 1}} />
42
+ * ```
43
+ */
44
+ const FrontPanelPushButton = React.forwardRef<
45
+ FrontPanelPushButtonElement,
46
+ FrontPanelPushButtonCombinedProps
47
+ >((props, forwardedRef) => {
48
+ const { device, workQueue } = React.useContext(FrontPanelContext);
49
+
50
+ const { fpEndpoint, ...buttonProps } = props;
51
+
52
+ const targetWireBitMask = 1 << fpEndpoint.bitOffset;
53
+
54
+ const onButtonUp = React.useCallback(async (): Promise<void> => {
55
+ await workQueue.Post(async () => {
56
+ await device.setWireInValue(fpEndpoint.epAddress, 0, targetWireBitMask);
57
+ await device.updateWireIns();
58
+ });
59
+ }, [device, fpEndpoint, targetWireBitMask, workQueue]);
60
+
61
+ const onButtonDown = React.useCallback(async (): Promise<void> => {
62
+ await workQueue.Post(async () => {
63
+ await device.setWireInValue(fpEndpoint.epAddress, 0xffffffff, targetWireBitMask);
64
+ await device.updateWireIns();
65
+ });
66
+ }, [device, fpEndpoint, targetWireBitMask, workQueue]);
67
+
68
+ return (
69
+ <Button
70
+ {...buttonProps}
71
+ ref={forwardedRef}
72
+ onButtonUp={onButtonUp}
73
+ onButtonDown={onButtonDown}
74
+ />
75
+ );
76
+ });
77
+
78
+ FrontPanelPushButton.displayName = "FrontPanelPushButton";
79
+
80
+ export default FrontPanelPushButton;
@@ -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 "./FrontPanelPushButton";
9
+
10
+ export { default as FrontPanelPushButtonProps } from "./FrontPanelPushButton.props";
@@ -0,0 +1,25 @@
1
+ /**
2
+ * Copyright (c) 2024 Opal Kelly Incorporated
3
+ *
4
+ * This source code is licensed under the FrontPanel license.
5
+ * See the LICENSE file found in the root directory of this project.
6
+ */
7
+
8
+ import { EndpointAddressProps } from "../types";
9
+
10
+ /**
11
+ * Interface for the properties of the `FrontPanelRangeSlider` component.
12
+ */
13
+ interface FrontPanelRangeSliderProps {
14
+ /**
15
+ * Address of the frontpanel endpoint
16
+ */
17
+ fpEndpoint: EndpointAddressProps;
18
+
19
+ /**
20
+ * Maximum value that the range slider will allow
21
+ */
22
+ maximumValue: number;
23
+ }
24
+
25
+ export default FrontPanelRangeSliderProps;
@@ -0,0 +1,92 @@
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, { useContext } from "react";
9
+
10
+ import type { Meta, StoryObj, Decorator } from "@storybook/react";
11
+
12
+ import withApplication from "../../stories/decorators/Application.decorator";
13
+ import withFrontPanel from "../../stories/decorators/FrontPanel.decorator";
14
+
15
+ import FrontPanelRangeSlider from "./FrontPanelRangeSlider";
16
+
17
+ import { FrontPanelContext } from "../../contexts";
18
+
19
+ import { WireValue } from "@opalkelly/frontpanel-alloy-core";
20
+
21
+ // Configure Story metadata
22
+ const meta = {
23
+ title: "Components/FrontPanel/FrontPanelRangeSlider",
24
+ component: FrontPanelRangeSlider,
25
+ parameters: {
26
+ layout: "centered" // Center the component in the Canvas
27
+ },
28
+ tags: ["autodocs"], // Automatically generate documentation
29
+ argTypes: {
30
+ maximumValue: {
31
+ control: { type: "number", step: 1 }
32
+ },
33
+ minimumValue: {
34
+ control: { type: "number", step: 1 }
35
+ },
36
+ valueStep: {
37
+ control: { type: "number", step: 1 }
38
+ },
39
+ disabled: { control: "boolean" },
40
+ showThumbLabel: { type: "boolean" },
41
+ showTrackLabels: { type: "boolean" }
42
+ }
43
+ } satisfies Meta<typeof FrontPanelRangeSlider>;
44
+
45
+ export default meta;
46
+
47
+ type Story = StoryObj<typeof meta>;
48
+
49
+ const withContainer: Decorator = (Story) => (
50
+ <div style={{ width: "200px" }}>
51
+ <Story />
52
+ </div>
53
+ );
54
+
55
+ // Primary Story
56
+ export const Primary: Story = {
57
+ render: (props) => {
58
+ const { device, workQueue } = useContext(FrontPanelContext);
59
+
60
+ const setWireInPromises: Promise<void>[] = [];
61
+
62
+ workQueue.Post(async (): Promise<void> => {
63
+ let byteId = 0;
64
+
65
+ for (let address = 0x0; address < 0x20; address++) {
66
+ let wireValue: WireValue = byteId++;
67
+ for (let byteIndex = 1; byteIndex < 4; byteIndex++) {
68
+ wireValue |= byteId++ << (8 * byteIndex);
69
+ }
70
+ setWireInPromises.push(device.setWireInValue(address, wireValue, 0xffffffff));
71
+ }
72
+
73
+ await Promise.all(setWireInPromises);
74
+ await device.updateWireIns();
75
+ });
76
+
77
+ return <FrontPanelRangeSlider {...props} />;
78
+ },
79
+ decorators: [withApplication, withFrontPanel, withContainer],
80
+ args: {
81
+ fpEndpoint: { epAddress: 0x00, bitOffset: 1 },
82
+ // Optional Properties
83
+ maximumValue: 100,
84
+ minimumValue: 0,
85
+ valueStep: 1,
86
+ showTrackLabels: true,
87
+ showThumbLabel: true,
88
+ disabled: false,
89
+ label: { text: "RangeSlider" },
90
+ tooltip: "Wire endpoint Range slider tooltip"
91
+ }
92
+ };