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