@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,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 { NumeralSystem } from "../../core";
9
+
10
+ import { LabelProps } from "../Label";
11
+
12
+ import { DigitEntryVariant } from "../DigitEntry";
13
+
14
+ export type NumberEntrySize = 1 | 2 | 3;
15
+ export type NumberEntryValueChangeEventHandler = (value: bigint) => void;
16
+
17
+ /**
18
+ * Interface for the properties of the `NumberEntry` component.
19
+ */
20
+ interface NumberEntryProps {
21
+ /**
22
+ * Current value of the number entry
23
+ */
24
+ value: bigint;
25
+
26
+ /**
27
+ * Maximum value that can be entered
28
+ */
29
+ maximumValue: bigint;
30
+
31
+ /**
32
+ * Minimum value that can be entered
33
+ */
34
+ minimumValue: bigint;
35
+
36
+ /**
37
+ * Optional CSS class to apply to the number entry
38
+ */
39
+ className?: string;
40
+
41
+ /**
42
+ * Optional decimal scale for the number entry (Only used when numeral system is NumeralSystem.Decimal)
43
+ */
44
+ decimalScale?: number;
45
+
46
+ /**
47
+ * Optional disable the number entry
48
+ * @default false
49
+ */
50
+ disabled?: boolean;
51
+
52
+ /**
53
+ * Optional label properties for the number entry
54
+ */
55
+ label?: LabelProps;
56
+
57
+ /**
58
+ * Optional numeral system to be used for the number entry, defined in NumeralSystem
59
+ * @default Decimal
60
+ */
61
+ numeralSystem?: NumeralSystem;
62
+
63
+ /**
64
+ * Optional Size of the number entry
65
+ * @default 1
66
+ */
67
+ size?: NumberEntrySize;
68
+
69
+ /**
70
+ * Optional tooltip text to be displayed on hover
71
+ */
72
+ tooltip?: string;
73
+
74
+ /**
75
+ * Optional variant of the digit entry
76
+ * @default standard
77
+ */
78
+ variant?: DigitEntryVariant;
79
+
80
+ /**
81
+ * Optional event handler for the value changed event
82
+ */
83
+ onValueChange?: NumberEntryValueChangeEventHandler;
84
+ }
85
+
86
+ export default NumberEntryProps;
@@ -0,0 +1,129 @@
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 NumberEntry from "./NumberEntry";
17
+
18
+ import { NumeralSystem } from "../../core";
19
+
20
+ // Configure Story metadata
21
+ const meta = {
22
+ title: "Components/NumberEntry",
23
+ component: NumberEntry,
24
+ parameters: {
25
+ layout: "centered" // Center the component in the Canvas
26
+ },
27
+ tags: ["autodocs"], // Automatically generate documentation
28
+ argTypes: {
29
+ variant: {
30
+ control: "radio",
31
+ options: ["standard", "compact"]
32
+ },
33
+ disabled: { control: "boolean" },
34
+ size: {
35
+ control: { type: "range", min: 1, max: 3, step: 1 }
36
+ },
37
+ numeralSystem: {
38
+ control: "radio",
39
+ options: ["Decimal", "Hexadecimal", "Binary", "Octal"],
40
+ mapping: {
41
+ Decimal: NumeralSystem.Decimal,
42
+ Hexadecimal: NumeralSystem.Hexadecimal,
43
+ Binary: NumeralSystem.Binary,
44
+ Octal: NumeralSystem.Octal
45
+ }
46
+ },
47
+ valueString: { control: "text" },
48
+ maximumValueString: { control: "text" },
49
+ minimumValueString: { control: "text" },
50
+ // Disable event callback arguments
51
+ onValueChange: {
52
+ control: { disable: true }
53
+ }
54
+ }
55
+ } satisfies Meta<typeof NumberEntry>;
56
+
57
+ export default meta;
58
+
59
+ type Story = StoryObj<typeof meta>;
60
+
61
+ const convertToBigInt = (value: string) => {
62
+ return BigInt(value);
63
+ };
64
+
65
+ // Template for Stories
66
+ const ComponentTemplate: Story = {
67
+ render: (args) => {
68
+ const [{ valueString }, updateArgs] = useArgs();
69
+
70
+ const { maximumValueString, minimumValueString } = args;
71
+
72
+ const value = convertToBigInt(valueString);
73
+ const maximum = convertToBigInt(maximumValueString);
74
+ const minimum = convertToBigInt(minimumValueString);
75
+
76
+ function onValueChange(value: bigint): void {
77
+ updateArgs({ valueString: value.toString() });
78
+ }
79
+
80
+ return (
81
+ <NumberEntry
82
+ {...args}
83
+ value={value}
84
+ maximumValue={maximum}
85
+ minimumValue={minimum}
86
+ onValueChange={onValueChange}
87
+ />
88
+ );
89
+ },
90
+ decorators: [withApplication],
91
+ args: {
92
+ variant: "standard",
93
+ disabled: false,
94
+ label: {
95
+ text: "Value",
96
+ verticalPosition: "top",
97
+ horizontalPosition: "left"
98
+ },
99
+ size: 1,
100
+ tooltip: "Set the value",
101
+ numeralSystem: NumeralSystem.Decimal,
102
+ decimalScale: 3,
103
+ valueString: "8000",
104
+ maximumValueString: "1000000",
105
+ minimumValueString: "-1000000"
106
+ }
107
+ };
108
+
109
+ // Primary Story
110
+ export const Decimal: Story = {
111
+ ...ComponentTemplate,
112
+ args: {
113
+ valueString: "8000",
114
+ maximumValueString: "1000000",
115
+ minimumValueString: "-1000000",
116
+ // Optional Properties
117
+ disabled: false,
118
+ variant: "standard",
119
+ numeralSystem: NumeralSystem.Decimal,
120
+ decimalScale: 3,
121
+ size: 1,
122
+ label: {
123
+ text: "Decimal Value",
124
+ verticalPosition: "top",
125
+ horizontalPosition: "left"
126
+ },
127
+ tooltip: "Set the decimal value"
128
+ }
129
+ };
@@ -0,0 +1,249 @@
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 NumberEntryProps, { NumberEntrySize } from "./NumberEntry.props";
13
+
14
+ import "../../index.css";
15
+
16
+ import "./NumberEntry.css";
17
+
18
+ import NumberEntryDigits from "./NumberEntryDigits";
19
+
20
+ import { DigitEntryState } from "./NumberEntryDigits.props";
21
+
22
+ import { NumeralSystem, NumericDigits } from "../../core";
23
+
24
+ import Label from "../Label";
25
+ import Tooltip from "../Tooltip";
26
+
27
+ type NumberEntryElement = React.ElementRef<"div">;
28
+
29
+ /**
30
+ * `NumberEntry` is a React component that renders a number entry field to allow setting the value of a number
31
+ * represented in binary, octal, decimal, or hexadecimal numeral systems. The values of the individual digits of
32
+ * the number can be entered by key or they can incremented and decremented using the up and down arrow keys and or
33
+ * the mouse wheel. The maximum and minimum values of the number can be specified to limit the range of values that
34
+ * that can be set. Each individual digit shows an indicator to show if the value of that digit can be incremented
35
+ * or decremented based on the maximum and minimum values.
36
+ *
37
+ * @component
38
+ * @param {Object} props - Properties passed to component
39
+ * @param {React.Ref} forwardedRef - Forwarded ref for the number display
40
+ *
41
+ * @returns {React.Node} The rendered NumberEntry component.
42
+ *
43
+ * @example
44
+ * ```jsx
45
+ * <NumberEntry
46
+ * value={0}
47
+ * maximumValue={65535}
48
+ * minimumValue={0} />
49
+ * ```
50
+ */
51
+ const NumberEntry = React.forwardRef<NumberEntryElement, NumberEntryProps>(
52
+ (props, forwardedRef) => {
53
+ const { label, tooltip, ...sliderProps } = props;
54
+
55
+ const showLabel = label != null;
56
+ const showTooltip = tooltip != null;
57
+
58
+ if (showLabel && showTooltip) {
59
+ return (
60
+ <Label {...label}>
61
+ <Tooltip content={tooltip}>
62
+ <div style={{ width: "100%" }}>
63
+ <NumberEntryImpl ref={forwardedRef} {...sliderProps} />
64
+ </div>
65
+ </Tooltip>
66
+ </Label>
67
+ );
68
+ } else if (showLabel) {
69
+ return (
70
+ <Label {...label}>
71
+ <div style={{ width: "100%" }}>
72
+ <NumberEntryImpl ref={forwardedRef} {...sliderProps} />
73
+ </div>
74
+ </Label>
75
+ );
76
+ } else if (showTooltip) {
77
+ return (
78
+ <Tooltip content={tooltip}>
79
+ <div>
80
+ <NumberEntryImpl ref={forwardedRef} {...sliderProps} />
81
+ </div>
82
+ </Tooltip>
83
+ );
84
+ } else {
85
+ return <NumberEntryImpl ref={forwardedRef} {...sliderProps} />;
86
+ }
87
+ }
88
+ );
89
+
90
+ NumberEntry.displayName = "NumberEntry";
91
+
92
+ export default NumberEntry;
93
+
94
+ interface NumberEntryImplProps
95
+ extends Omit<React.ComponentPropsWithoutRef<typeof NumberEntry>, "label" | "tooltip"> {}
96
+
97
+ const NumberEntryImpl = React.forwardRef<NumberEntryElement, NumberEntryImplProps>(
98
+ (props, forwardedRef) => {
99
+ const {
100
+ className,
101
+ variant = "standard",
102
+ size = 1,
103
+ disabled = false,
104
+ numeralSystem = NumeralSystem.Decimal,
105
+ decimalScale = 0,
106
+ maximumValue,
107
+ minimumValue,
108
+ value,
109
+ onValueChange
110
+ } = props;
111
+
112
+ const digitCount: number = React.useMemo(() => {
113
+ const maximumValueDigitCount: bigint = NumericDigits.ComputeDigitCountFromValue(
114
+ maximumValue,
115
+ numeralSystem
116
+ );
117
+ const minimumValueDigitCount: bigint = NumericDigits.ComputeDigitCountFromValue(
118
+ minimumValue,
119
+ numeralSystem
120
+ );
121
+
122
+ const maximumDigitCount: bigint =
123
+ maximumValueDigitCount > minimumValueDigitCount
124
+ ? maximumValueDigitCount
125
+ : minimumValueDigitCount;
126
+
127
+ return Number(maximumDigitCount);
128
+ }, [maximumValue, minimumValue, numeralSystem]);
129
+
130
+ const radix: bigint = BigInt(numeralSystem);
131
+
132
+ const digitStates: DigitEntryState[] = ComputeDigitStatesFromValue(
133
+ value,
134
+ maximumValue,
135
+ minimumValue,
136
+ radix,
137
+ digitCount
138
+ );
139
+
140
+ const onDigitStatesChange = (
141
+ newDigitStates: readonly DigitEntryState[],
142
+ _isKeyDown: boolean
143
+ ) => {
144
+ let newValue: bigint = ComputeValueFromDigitStates(newDigitStates, radix);
145
+
146
+ const crossedZero: boolean = newValue >= 0n !== value >= 0n && newValue !== 0n;
147
+
148
+ if (crossedZero) {
149
+ newValue += 2n * -value;
150
+ }
151
+
152
+ //console.log("onDigitStatesChange: Value:" + value + "=>" + newValue);
153
+
154
+ if (newValue <= maximumValue && newValue >= minimumValue) {
155
+ onValueChange?.(newValue);
156
+ }
157
+ };
158
+
159
+ const NegativeSign = (size: NumberEntrySize): JSX.Element => (
160
+ <span className={classnames("okNumberEntryText", "ok-r-size-" + size)}>-</span>
161
+ );
162
+
163
+ return (
164
+ <div
165
+ ref={forwardedRef}
166
+ className={classnames("okNumberEntry", className, "ok-r-size-" + size)}
167
+ data-disabled={disabled || undefined}>
168
+ <div className="okNumberEntryContent">
169
+ {value < 0n && NegativeSign(size)}
170
+ <NumberEntryDigits
171
+ variant={variant}
172
+ size={size}
173
+ numeralSystem={numeralSystem}
174
+ decimalScale={decimalScale}
175
+ digitStates={digitStates}
176
+ onDigitStatesChange={onDigitStatesChange}
177
+ />
178
+ </div>
179
+ </div>
180
+ );
181
+ }
182
+ );
183
+
184
+ NumberEntryImpl.displayName = "NumberEntryImpl";
185
+
186
+ const ComputeValueFromDigitStates = (
187
+ digitStates: readonly DigitEntryState[],
188
+ radix: bigint
189
+ ): bigint => {
190
+ const digitCount: number = digitStates.length;
191
+
192
+ const startDigitIndex: number = digitCount - 1;
193
+
194
+ let numericValue: bigint = BigInt(digitStates[startDigitIndex].value);
195
+
196
+ for (let digitIndex: number = startDigitIndex - 1; digitIndex >= 0; digitIndex--) {
197
+ numericValue = numericValue * radix + BigInt(digitStates[digitIndex].value);
198
+ }
199
+
200
+ return numericValue;
201
+ };
202
+
203
+ const ComputeDigitStatesFromValue = (
204
+ value: bigint,
205
+ maximum: bigint,
206
+ minimum: bigint,
207
+ radix: bigint,
208
+ digitCount: number
209
+ ): DigitEntryState[] => {
210
+ const retval: DigitEntryState[] = [];
211
+
212
+ let currentValue: bigint = value;
213
+ let currentMaxDifference: bigint = maximum - value;
214
+ let currentMinDifference: bigint = minimum - value;
215
+
216
+ for (let digitIndex: number = 0; digitIndex < digitCount; digitIndex++) {
217
+ const digitValue: number = Number(currentValue % radix);
218
+ const digitMaximum: number = Math.floor(Number(currentMaxDifference + BigInt(digitValue)));
219
+ const digitMinimum: number = Math.ceil(Number(currentMinDifference + BigInt(digitValue)));
220
+
221
+ retval[digitIndex] = {
222
+ id: digitIndex,
223
+ value: digitValue,
224
+ maximum: ComputeDigitLimitValue(digitMaximum, Number(radix)),
225
+ minimum: ComputeDigitLimitValue(digitMinimum, Number(radix))
226
+ };
227
+
228
+ currentValue = currentValue / radix;
229
+ currentMaxDifference = currentMaxDifference / radix;
230
+ currentMinDifference = currentMinDifference / radix;
231
+ }
232
+
233
+ return retval;
234
+ };
235
+
236
+ const ComputeDigitLimitValue = (
237
+ digitValueDifference: number,
238
+ radix: number
239
+ ): number | undefined => {
240
+ let retval: number | undefined;
241
+
242
+ if (digitValueDifference >= 0) {
243
+ retval = digitValueDifference < radix ? digitValueDifference : undefined;
244
+ } else {
245
+ retval = digitValueDifference > -radix ? digitValueDifference : undefined;
246
+ }
247
+
248
+ return retval;
249
+ };
@@ -0,0 +1,57 @@
1
+ /**
2
+ * Copyright (c) 2024 Opal Kelly Incorporated
3
+ *
4
+ * This source code is licensed under the FrontPanel license.
5
+ * See the LICENSE file found in the root directory of this project.
6
+ */
7
+
8
+ import { NumeralSystem } from "../../core";
9
+
10
+ import { DigitEntryVariant } from "../DigitEntry";
11
+
12
+ export type DigitEntrySize = 1 | 2 | 3;
13
+ export type DigitEntryStatesChangeEventHandler = (
14
+ digitStates: readonly DigitEntryState[],
15
+ isKeyDown: boolean
16
+ ) => void;
17
+
18
+ export type DigitEntryState = {
19
+ id: number;
20
+ value: number;
21
+ maximum?: number;
22
+ minimum?: number;
23
+ };
24
+
25
+ interface NumberEntryDigitsProps {
26
+ /**
27
+ * Variant of the digit entry
28
+ */
29
+ variant?: DigitEntryVariant;
30
+
31
+ /**
32
+ * Size of the digit entry
33
+ */
34
+ size: DigitEntrySize;
35
+
36
+ /**
37
+ * Numeral system to be used for the number entry, defined in NumeralSystem enum
38
+ */
39
+ numeralSystem: NumeralSystem;
40
+
41
+ /**
42
+ * Current value of the number entry
43
+ */
44
+ digitStates: DigitEntryState[];
45
+
46
+ /**
47
+ * Optional decimal scale for the number entry (Only used when numeral system is NumeralSystem.Decimal)
48
+ */
49
+ decimalScale?: number;
50
+
51
+ /**
52
+ * Event handler for the number entries state change event
53
+ */
54
+ onDigitStatesChange?: DigitEntryStatesChangeEventHandler;
55
+ }
56
+
57
+ export default NumberEntryDigitsProps;
@@ -0,0 +1,117 @@
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 NumberEntryDigitsProps from "./NumberEntryDigits.props";
13
+
14
+ import "../../index.css";
15
+
16
+ import "./NumberEntry.css";
17
+
18
+ import DigitEntry from "../DigitEntry";
19
+
20
+ import { NumeralSystem } from "../../core";
21
+
22
+ /**
23
+ * `NumberEntryDigits` is a React component that renders a list of `DigitEntry` components.
24
+ * Each `DigitEntry` represents a digit in a number entry field.
25
+ * The digits are displayed in the specified numeral system and can be incremented and decremented.
26
+ *
27
+ * @component
28
+ * @param {Object} props - The properties that define the `NumberEntryDigits` component.
29
+ * @param {number} props.size - The size of the digits in the number entry field. Default is 1.
30
+ * @param {number} props.numeralSystem - The numeral system to use for displaying the digits.
31
+ * @param {number} props.decimalScale - The scale of the decimal part of the number entry field. Default is 0.
32
+ * @param {Array} props.digitStates - An array of objects that represent the state of each digit in the number entry field.
33
+ * @param {function} props.onDigitStatesChange - Function to be called when the state of any digit in the number entry field changes.
34
+ *
35
+ * @returns {React.ReactElement} The `NumberEntryDigits` component.
36
+ */
37
+ const NumberEntryDigits: React.FC<NumberEntryDigitsProps> = (props) => {
38
+ const {
39
+ variant = "standard",
40
+ size = 1,
41
+ numeralSystem,
42
+ decimalScale = 0,
43
+ digitStates,
44
+ onDigitStatesChange
45
+ } = props;
46
+
47
+ const digitListItems = (): JSX.Element[] => {
48
+ const digitEntries = digitStates.map((digitState, digitIndex) => {
49
+ const onDigitValueChanged = (value: number, isKeyDown: boolean) => {
50
+ //console.log("onDigitValueChanged: " + "[" + digitIndex + "], " + value + ", isKeyDown: " + isKeyDown);
51
+
52
+ //console.log("oldDigitStates: " + JSON.stringify(digitStates));
53
+
54
+ const newDigitStates = [...digitStates];
55
+ newDigitStates[digitIndex] = {
56
+ ...digitStates[digitIndex],
57
+ value: value
58
+ };
59
+
60
+ //console.log("newDigitStates: " + JSON.stringify(newDigitStates));
61
+
62
+ onDigitStatesChange?.(newDigitStates, isKeyDown);
63
+ };
64
+
65
+ return (
66
+ <DigitEntry
67
+ key={"digit-" + digitState.id}
68
+ variant={variant}
69
+ size={size}
70
+ numeralSystem={numeralSystem}
71
+ value={digitState.value}
72
+ maximum={digitState.maximum}
73
+ minimum={digitState.minimum}
74
+ onValueChanged={onDigitValueChanged}
75
+ />
76
+ );
77
+ });
78
+
79
+ if (numeralSystem === NumeralSystem.Decimal && decimalScale > 0) {
80
+ const excessDecimalScale: number = decimalScale - digitEntries.length;
81
+
82
+ if (excessDecimalScale < 0) {
83
+ digitEntries.splice(
84
+ decimalScale,
85
+ 0,
86
+ <span
87
+ key={"digit-decimal-point"}
88
+ className={classnames("okNumberEntryText", "ok-r-size-" + size)}>
89
+ .
90
+ </span>
91
+ );
92
+ } else {
93
+ const prefixString: string = "0.";
94
+ const paddedPrefixString = prefixString.padEnd(
95
+ prefixString.length + excessDecimalScale,
96
+ "0"
97
+ );
98
+
99
+ digitEntries.push(
100
+ <span
101
+ key={"digit-decimal-prefix"}
102
+ className={classnames("okNumberEntryText", "ok-r-size-" + size)}>
103
+ {paddedPrefixString}
104
+ </span>
105
+ );
106
+ }
107
+ }
108
+
109
+ return digitEntries.reverse();
110
+ };
111
+
112
+ return <>{digitListItems()}</>;
113
+ };
114
+
115
+ NumberEntryDigits.displayName = "NumberEntryDigits";
116
+
117
+ export default NumberEntryDigits;
@@ -0,0 +1,11 @@
1
+ /**
2
+ * Copyright (c) 2024 Opal Kelly Incorporated
3
+ *
4
+ * This source code is licensed under the FrontPanel license.
5
+ * See the LICENSE file found in the root directory of this project.
6
+ */
7
+
8
+ export { default } from "./NumberEntry";
9
+
10
+ export { default as NumberEntryProps } from "./NumberEntry.props";
11
+ export { NumberEntrySize, NumberEntryValueChangeEventHandler } from "./NumberEntry.props";