@rainbow-robotics/muscat-plugin-kit 1.10.1-dev.1 → 1.10.1

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 (205) hide show
  1. package/README.md +282 -282
  2. package/cli/README.md +274 -274
  3. package/cli/bin/create-muscat-plugin.mjs +8 -8
  4. package/cli/bin/muscat-pk.mjs +155 -155
  5. package/cli/bundle-templates.mjs +31 -31
  6. package/cli/docker/Dockerfile.cpp +28 -28
  7. package/cli/docker/Dockerfile.dev +30 -30
  8. package/cli/docker/Dockerfile.python +21 -21
  9. package/cli/m5-e2e.mjs +69 -69
  10. package/cli/prepack.mjs +10 -10
  11. package/cli/src/ai-rules.mjs +70 -70
  12. package/cli/src/build.mjs +447 -447
  13. package/cli/src/check-package.mjs +13 -13
  14. package/cli/src/completion.mjs +166 -166
  15. package/cli/src/cpp.mjs +78 -78
  16. package/cli/src/cppIde.mjs +75 -75
  17. package/cli/src/dev.mjs +165 -165
  18. package/cli/src/devBack.mjs +734 -727
  19. package/cli/src/devUi.mjs +247 -243
  20. package/cli/src/esbuild.mjs +56 -56
  21. package/cli/src/host_agent.py +223 -223
  22. package/cli/src/manifest.mjs +287 -287
  23. package/cli/src/mcp.mjs +1071 -1071
  24. package/cli/src/muscatLocal.mjs +209 -209
  25. package/cli/src/new.mjs +343 -343
  26. package/cli/src/pluginDevServer.mjs +111 -111
  27. package/cli/src/ports.mjs +193 -193
  28. package/cli/src/python.mjs +112 -112
  29. package/cli/src/ros2.mjs +109 -109
  30. package/cli/src/sdk.mjs +117 -117
  31. package/cli/src/storybook.mjs +168 -168
  32. package/cli/src/type.mjs +141 -141
  33. package/cli/src/uninstall.mjs +81 -81
  34. package/cli/src/update.mjs +295 -295
  35. package/cli/src/util.mjs +441 -441
  36. package/cli/src/zenohDev.mjs +83 -81
  37. package/cli/storybook-dist/_design-tokens.css +4957 -4957
  38. package/cli/storybook-dist/_stories-src/NxAvatar.stories.tsx +27 -27
  39. package/cli/storybook-dist/_stories-src/NxPagination.stories.tsx +28 -28
  40. package/cli/storybook-dist/_stories-src/RBAccordion/RBAccordion.stories.tsx +46 -46
  41. package/cli/storybook-dist/_stories-src/RBAccordion/RBAccordionGroup.stories.tsx +73 -73
  42. package/cli/storybook-dist/_stories-src/RBBadge/RBBadge.stories.tsx +93 -93
  43. package/cli/storybook-dist/_stories-src/RBBattery/RBBattery.stories.tsx +74 -74
  44. package/cli/storybook-dist/_stories-src/RBButton/RBCheckIconButton.stories.tsx +28 -28
  45. package/cli/storybook-dist/_stories-src/RBButton/RBCheckLabelButton.stories.tsx +84 -84
  46. package/cli/storybook-dist/_stories-src/RBButton/RBIconButton.stories.tsx +57 -57
  47. package/cli/storybook-dist/_stories-src/RBButton/RBInlineLabelButton.stories.tsx +41 -41
  48. package/cli/storybook-dist/_stories-src/RBButton/RBLabelButton.stories.tsx +60 -60
  49. package/cli/storybook-dist/_stories-src/RBDatePicker/RBDateInput.stories.tsx +44 -44
  50. package/cli/storybook-dist/_stories-src/RBDatePicker/RBRangeDateInput.stories.tsx +56 -56
  51. package/cli/storybook-dist/_stories-src/RBDialog/RBAlert.stories.tsx +51 -51
  52. package/cli/storybook-dist/_stories-src/RBDialog/RBConfirm.stories.tsx +55 -55
  53. package/cli/storybook-dist/_stories-src/RBDialog/RBPrompt.stories.tsx +52 -52
  54. package/cli/storybook-dist/_stories-src/RBDivider/RBDivider.stories.tsx +93 -93
  55. package/cli/storybook-dist/_stories-src/RBEmptyView/RBEmptyView.stories.tsx +49 -49
  56. package/cli/storybook-dist/_stories-src/RBIcons/RBColorIcons.stories.tsx +108 -108
  57. package/cli/storybook-dist/_stories-src/RBIcons/RBIcons.stories.tsx +106 -106
  58. package/cli/storybook-dist/_stories-src/RBInput/RBCheckBox.stories.tsx +89 -89
  59. package/cli/storybook-dist/_stories-src/RBInput/RBMultiRangeInput.stories.tsx +64 -64
  60. package/cli/storybook-dist/_stories-src/RBInput/RBRadioBox.stories.tsx +65 -65
  61. package/cli/storybook-dist/_stories-src/RBInput/RBRadioButton.stories.tsx +68 -68
  62. package/cli/storybook-dist/_stories-src/RBInput/RBSelectBox.stories.tsx +216 -216
  63. package/cli/storybook-dist/_stories-src/RBInput/RBSideNumberInput.stories.tsx +90 -90
  64. package/cli/storybook-dist/_stories-src/RBInput/RBText/RBTextArea.stories.tsx +45 -45
  65. package/cli/storybook-dist/_stories-src/RBInput/RBText/RBTextInput.stories.tsx +50 -50
  66. package/cli/storybook-dist/_stories-src/RBInput/RBTextField.stories.tsx +102 -102
  67. package/cli/storybook-dist/_stories-src/RBJoyStick/RBJoyStick.stories.tsx +31 -31
  68. package/cli/storybook-dist/_stories-src/RBLight/RBLight.stories.tsx +36 -36
  69. package/cli/storybook-dist/_stories-src/RBPagination/RBPagination.stories.tsx +49 -49
  70. package/cli/storybook-dist/_stories-src/RBShadcn/RBCard/RBCard.stories.tsx +89 -89
  71. package/cli/storybook-dist/_stories-src/RBShadcn/RBCommand/RBCommand.stories.tsx +116 -116
  72. package/cli/storybook-dist/_stories-src/RBShadcn/RBDialog/RBDialog.stories.tsx +74 -74
  73. package/cli/storybook-dist/_stories-src/RBShadcn/RBDrawer/RBDrawer.stories.tsx +99 -99
  74. package/cli/storybook-dist/_stories-src/RBShadcn/RBDropdownMenu/RBDropdownMenu.stories.tsx +123 -123
  75. package/cli/storybook-dist/_stories-src/RBShadcn/RBMenubar/RBMenubar.stories.tsx +135 -135
  76. package/cli/storybook-dist/_stories-src/RBShadcn/RBPopover/RBPopover.stories.tsx +69 -69
  77. package/cli/storybook-dist/_stories-src/RBShadcn/RBResizable/RBResizable.stories.tsx +49 -49
  78. package/cli/storybook-dist/_stories-src/RBShadcn/RBSheet/RBSheet.stories.tsx +91 -91
  79. package/cli/storybook-dist/_stories-src/RBShadcn/RBSlider/RBSlider.stories.tsx +38 -38
  80. package/cli/storybook-dist/_stories-src/RBShadcn/RBSwitch/RBSwitch.stories.tsx +112 -112
  81. package/cli/storybook-dist/_stories-src/RBShadcn/RBTabs/RBTabs.stories.tsx +75 -75
  82. package/cli/storybook-dist/_stories-src/RBShadcn/RBToggle/RBToggle.stories.tsx +51 -51
  83. package/cli/storybook-dist/_stories-src/RBShadcn/RBToggleGroup/RBToggleGroup.stories.tsx +84 -84
  84. package/cli/storybook-dist/_stories-src/RBTab/RBChipTab.stories.tsx +102 -102
  85. package/cli/storybook-dist/_stories-src/RBTab/RBChipsBoxTab.stories.tsx +78 -78
  86. package/cli/storybook-dist/_stories-src/RBTab/RBTab.stories.tsx +57 -57
  87. package/cli/storybook-dist/_stories-src/RBTable/RBTable.stories.tsx +177 -177
  88. package/cli/storybook-dist/_stories-src/RBTable/RBTableRow.stories.tsx +64 -64
  89. package/cli/storybook-dist/_stories-src/RBToast/RBToast.stories.tsx +117 -117
  90. package/cli/storybook-dist/_stories-src/RBTooltip/RBTooltip.stories.tsx +50 -50
  91. package/cli/storybook-dist/_stories-src/loading/RBSpinner.stories.tsx +30 -30
  92. package/cli/storybook-dist/_stories-src/nx-button/NxButton.stories.tsx +54 -54
  93. package/cli/storybook-dist/_stories-src/nx-button/NxPointerHoldButton.stories.tsx +57 -57
  94. package/cli/storybook-dist/_stories-src/nx-icons/NxIcons.stories.tsx +48 -48
  95. package/cli/storybook-dist/_stories-src/nx-inputs/NxNumberInput.stories.tsx +103 -103
  96. package/cli/storybook-dist/_stories-src/nx-inputs/NxRangeInput.stories.tsx +27 -27
  97. package/cli/storybook-dist/_stories-src/nx-inputs/NxSelectBox.stories.tsx +67 -67
  98. package/cli/storybook-dist/_stories-src/nx-inputs/NxSlideRange.stories.tsx +45 -45
  99. package/cli/storybook-dist/_stories-src/nx-inputs/NxSwitch.stories.tsx +27 -27
  100. package/cli/storybook-dist/_stories-src/nx-inputs/NxTextArea.stories.tsx +48 -48
  101. package/cli/storybook-dist/_stories-src/nx-inputs/NxTextInput.stories.tsx +46 -46
  102. package/cli/storybook-dist/assets/{Color-YHDXOIA2-D6JqZzDJ.js → Color-YHDXOIA2-B4IER17l.js} +1 -1
  103. package/cli/storybook-dist/assets/{Docs-ESb7JAHg.js → Docs-C8GCHFtK.js} +3 -3
  104. package/cli/storybook-dist/assets/{Docs-6gD2kUo1.js → Docs-CgdEMPQP.js} +2 -2
  105. package/cli/storybook-dist/assets/{Docs-B9wd8Ok7.js → Docs-Ck3WHvk6.js} +3 -3
  106. package/cli/storybook-dist/assets/{Docs-CgFbWWXM.js → Docs-D9NHsoeZ.js} +2 -2
  107. package/cli/storybook-dist/assets/{Docs-DBQup8Bu.js → Docs-DNYQC7nl.js} +3 -3
  108. package/cli/storybook-dist/assets/{Docs-CMjovnSY.js → Docs-DUfeiM4I.js} +4 -4
  109. package/cli/storybook-dist/assets/{DocsRenderer-CFRXHY34-BOUI1AHi.js → DocsRenderer-CFRXHY34-C0WhyDoR.js} +1 -1
  110. package/cli/storybook-dist/assets/{NxAvatar.stories-DsYFMUh3.js → NxAvatar.stories-CwnK8AUF.js} +1 -1
  111. package/cli/storybook-dist/assets/{NxButton.stories-CHfNcqsc.js → NxButton.stories-ueYdosfQ.js} +8 -8
  112. package/cli/storybook-dist/assets/{NxNumberInput.stories-BFw_4vFE.js → NxNumberInput.stories-M5ZCLbrK.js} +1 -1
  113. package/cli/storybook-dist/assets/{NxPagination.stories-DVfxyw4M.js → NxPagination.stories-bxxUnHEL.js} +1 -1
  114. package/cli/storybook-dist/assets/{NxPointerHoldButton.stories-BzyxUWoZ.js → NxPointerHoldButton.stories-BHxB2kr5.js} +1 -1
  115. package/cli/storybook-dist/assets/{NxRangeInput.stories-DmRdzBc1.js → NxRangeInput.stories-BKfr-fp4.js} +6 -6
  116. package/cli/storybook-dist/assets/{NxSelectBox.stories-B1KkNUOf.js → NxSelectBox.stories-CG8FuTBq.js} +1 -1
  117. package/cli/storybook-dist/assets/{NxSlideRange.stories-CyOdvfQ6.js → NxSlideRange.stories-BRTFtMTL.js} +1 -1
  118. package/cli/storybook-dist/assets/{NxSwitch.stories-DrDBw0qp.js → NxSwitch.stories-Bwuyzn-R.js} +1 -1
  119. package/cli/storybook-dist/assets/{NxTextArea.stories-DTB2aqNS.js → NxTextArea.stories-COq2sGqu.js} +1 -1
  120. package/cli/storybook-dist/assets/{NxTextInput.stories-DU0rucmM.js → NxTextInput.stories-CjsBLz05.js} +1 -1
  121. package/cli/storybook-dist/assets/{RBAccordion.stories-DTfOtXtp.js → RBAccordion.stories-BARwuZ0Q.js} +3 -3
  122. package/cli/storybook-dist/assets/{RBAccordionGroup.stories-9y9BjrUe.js → RBAccordionGroup.stories-COrPxETW.js} +10 -10
  123. package/cli/storybook-dist/assets/{RBAlert.stories-DLTAv9fT.js → RBAlert.stories-BQrkjZPt.js} +3 -3
  124. package/cli/storybook-dist/assets/{RBBadge.stories-BNMACewA.js → RBBadge.stories-BTsLL-lK.js} +1 -1
  125. package/cli/storybook-dist/assets/{RBBattery.stories-B3kXMAt5.js → RBBattery.stories-DAeQdJbc.js} +1 -1
  126. package/cli/storybook-dist/assets/{RBCard.stories-Y-s8R2n7.js → RBCard.stories-HyhOE80R.js} +39 -39
  127. package/cli/storybook-dist/assets/{RBCheckBox.stories-DBuT9tL4.js → RBCheckBox.stories-KFk0WqX_.js} +1 -1
  128. package/cli/storybook-dist/assets/{RBCheckIconButton.stories-CWu1TL56.js → RBCheckIconButton.stories-CXbbktF5.js} +1 -1
  129. package/cli/storybook-dist/assets/{RBCheckLabelButton.stories-sCu2MGCX.js → RBCheckLabelButton.stories-DWfYz_9Z.js} +17 -17
  130. package/cli/storybook-dist/assets/{RBChipTab.stories-BX9qLJkR.js → RBChipTab.stories-JPEgVFAS.js} +5 -5
  131. package/cli/storybook-dist/assets/{RBChipsBoxTab.stories-35u1aJ-P.js → RBChipsBoxTab.stories-CTPuWXrQ.js} +1 -1
  132. package/cli/storybook-dist/assets/{RBColorIcons.stories-DAOZ5Ies.js → RBColorIcons.stories-DiFRZ5jk.js} +1 -1
  133. package/cli/storybook-dist/assets/RBCommand.stories-Pf1HAVIR.js +73 -0
  134. package/cli/storybook-dist/assets/{RBConfirm.stories-iMXcUh7Z.js → RBConfirm.stories-D1cEPUXk.js} +3 -3
  135. package/cli/storybook-dist/assets/{RBDateInput.stories-hK5rXECf.js → RBDateInput.stories-RPYpCjig.js} +1 -1
  136. package/cli/storybook-dist/assets/RBDialog.stories-DJH-0XSR.js +38 -0
  137. package/cli/storybook-dist/assets/{RBDivider.stories-BAK-iZ1Z.js → RBDivider.stories-uEj1vOgK.js} +1 -1
  138. package/cli/storybook-dist/assets/{RBDrawer.stories-B2nqf2Nh.js → RBDrawer.stories-BiMzElb2.js} +12 -12
  139. package/cli/storybook-dist/assets/RBDropdownMenu.stories-Da_TBkla.js +86 -0
  140. package/cli/storybook-dist/assets/{RBEmptyView.stories-nCenrgBh.js → RBEmptyView.stories-BHeKGfPS.js} +1 -1
  141. package/cli/storybook-dist/assets/{RBIconButton.stories-DRH7O3sp.js → RBIconButton.stories-NEsRFoYp.js} +1 -1
  142. package/cli/storybook-dist/assets/{RBIcons.stories-D3PyJXG8.js → RBIcons.stories-CcZ-TTLS.js} +1 -1
  143. package/cli/storybook-dist/assets/{RBInlineLabelButton.stories-modQbt10.js → RBInlineLabelButton.stories-B0wpdQyR.js} +1 -1
  144. package/cli/storybook-dist/assets/{RBJoyStick.stories-BY14qVgR.js → RBJoyStick.stories-DEgBou3K.js} +1 -1
  145. package/cli/storybook-dist/assets/{RBLabelButton.stories-DzF7vGwm.js → RBLabelButton.stories-DT8drIsF.js} +1 -1
  146. package/cli/storybook-dist/assets/{RBLight.stories-lF4FRmVh.js → RBLight.stories-Dh-aoeyG.js} +1 -1
  147. package/cli/storybook-dist/assets/{RBMenubar.stories-XhrI7bsV.js → RBMenubar.stories-D-H7UqVh.js} +1 -1
  148. package/cli/storybook-dist/assets/{RBMultiRangeInput.stories-DprllQDl.js → RBMultiRangeInput.stories-hlclv6jI.js} +1 -1
  149. package/cli/storybook-dist/assets/{RBPagination.stories-2v2gBJfC.js → RBPagination.stories-DWCeoZ_S.js} +1 -1
  150. package/cli/storybook-dist/assets/{RBPopover.stories-C8iLIZpv.js → RBPopover.stories-C514M09_.js} +1 -1
  151. package/cli/storybook-dist/assets/{RBPrompt.stories-Th_HrWHI.js → RBPrompt.stories-BSItvfiT.js} +1 -1
  152. package/cli/storybook-dist/assets/{RBRadioBox.stories-CoHuLaN3.js → RBRadioBox.stories-BBb4YbFU.js} +1 -1
  153. package/cli/storybook-dist/assets/{RBRadioButton.stories-DULxE_ff.js → RBRadioButton.stories-CXyOGJCv.js} +1 -1
  154. package/cli/storybook-dist/assets/{RBRangeDateInput.stories-D8A9KBSS.js → RBRangeDateInput.stories-qvhubu0e.js} +1 -1
  155. package/cli/storybook-dist/assets/{RBResizable.stories-C41QfrQ3.js → RBResizable.stories-CZKeyGjH.js} +14 -14
  156. package/cli/storybook-dist/assets/{RBSelectBox.stories-C1gNmwzw.js → RBSelectBox.stories-CRKP3ybf.js} +1 -1
  157. package/cli/storybook-dist/assets/RBSheet.stories-sCM3ZJUa.js +39 -0
  158. package/cli/storybook-dist/assets/{RBSideNumberInput.stories-9LlgQ8nh.js → RBSideNumberInput.stories-Bb7gw8RF.js} +3 -3
  159. package/cli/storybook-dist/assets/{RBSlider.stories-oUgo5K9d.js → RBSlider.stories-23OAQU5z.js} +3 -3
  160. package/cli/storybook-dist/assets/{RBSpinner.stories-DDpohbY2.js → RBSpinner.stories-2xcQdcmt.js} +1 -1
  161. package/cli/storybook-dist/assets/{RBSwitch.stories-gW-GN7QO.js → RBSwitch.stories-BACUaJm_.js} +7 -7
  162. package/cli/storybook-dist/assets/{RBTab.stories-CN-PV3HH.js → RBTab.stories-CDHE3sVs.js} +1 -1
  163. package/cli/storybook-dist/assets/{RBTable.stories-BAZLpxtM.js → RBTable.stories-C0Cfhfl7.js} +29 -29
  164. package/cli/storybook-dist/assets/{RBTableRow.stories-CwjVrszB.js → RBTableRow.stories-BF8kIkpp.js} +1 -1
  165. package/cli/storybook-dist/assets/{RBTabs.stories-JuEo2sUL.js → RBTabs.stories-BdJWRq1o.js} +7 -7
  166. package/cli/storybook-dist/assets/{RBTextArea.stories-D0_Pv4qZ.js → RBTextArea.stories-CGy2xeYH.js} +3 -3
  167. package/cli/storybook-dist/assets/{RBTextField.stories-CCsOvZqV.js → RBTextField.stories-IfUOzxCM.js} +15 -15
  168. package/cli/storybook-dist/assets/{RBTextInput.stories-Cccn3VNm.js → RBTextInput.stories-VjXNFo4R.js} +3 -3
  169. package/cli/storybook-dist/assets/{RBToast.stories-I5617t0K.js → RBToast.stories-BzcobblV.js} +1 -1
  170. package/cli/storybook-dist/assets/{RBToggle.stories-DsgKjGsJ.js → RBToggle.stories-DuLE5mKv.js} +4 -4
  171. package/cli/storybook-dist/assets/{RBToggleGroup.stories-BZEzSDuz.js → RBToggleGroup.stories-CuR0N0GJ.js} +5 -5
  172. package/cli/storybook-dist/assets/{RBTooltip.stories-4oSyAWsA.js → RBTooltip.stories--aAgNC8_.js} +1 -1
  173. package/cli/storybook-dist/assets/{SideNumberInput-DSKbd0bG.js → SideNumberInput-DyWQxYUj.js} +743 -743
  174. package/cli/storybook-dist/assets/{entry-preview-B35XREGs.js → entry-preview-D7IHsza_.js} +1 -1
  175. package/cli/storybook-dist/assets/{iframe-BB797lmL.js → iframe-CbaIp5I-.js} +2 -2
  176. package/cli/storybook-dist/assets/{index-BU2567EP.js → index-C6CBgMuG.js} +3 -3
  177. package/cli/storybook-dist/assets/{preview-C7DaSWyc.js → preview-B-iYLDuW.js} +2 -2
  178. package/cli/storybook-dist/assets/{preview-CbuRHit4.js → preview-CRWqc9DH.js} +1 -1
  179. package/cli/storybook-dist/assets/{react-resizable-panels.browser-ChIvlwo7.js → react-resizable-panels.browser-8hC8dr-6.js} +8 -8
  180. package/cli/storybook-dist/iframe.html +2 -2
  181. package/cli/storybook-dist/index.html +1 -1
  182. package/cli/storybook-dist/project.json +1 -1
  183. package/cli/templates/common/.mcp.json +8 -8
  184. package/cli/templates/common/README.md +1231 -1231
  185. package/cli/templates/common/assets/icon.svg +45 -45
  186. package/cli/templates/common/manifest.json +26 -26
  187. package/cli/templates/common/package.json +22 -22
  188. package/cli/templates/common/py/main.py +125 -125
  189. package/cli/templates/common/tsconfig.json +13 -13
  190. package/cli/templates/common/ui/content.tsx +216 -216
  191. package/cli/templates/common/ui/style.css +6 -6
  192. package/cli/templates/common/vite.config.ts +10 -10
  193. package/cli/templates/cpp/cpp/main.cpp +73 -73
  194. package/cli/templates/ros2/ros2_ws/src/__PLUGIN_SLUG__/__PLUGIN_SLUG__/node.py +25 -25
  195. package/cli/templates/ros2/ros2_ws/src/__PLUGIN_SLUG__/package.xml +10 -10
  196. package/cli/templates/ros2/ros2_ws/src/__PLUGIN_SLUG__/setup.py +18 -18
  197. package/cli/templates/ros2-cpp/ros2_ws/src/__PLUGIN_SLUG__/package.xml +11 -11
  198. package/cli/templates/ros2-cpp/ros2_ws/src/__PLUGIN_SLUG__/src/node.cpp +23 -23
  199. package/cli/vite.d.mts +25 -25
  200. package/cli/vite.mjs +292 -292
  201. package/package.json +3 -3
  202. package/cli/storybook-dist/assets/RBCommand.stories-BSqXDkKw.js +0 -73
  203. package/cli/storybook-dist/assets/RBDialog.stories-BAktz-ku.js +0 -38
  204. package/cli/storybook-dist/assets/RBDropdownMenu.stories-DbW2fWAj.js +0 -86
  205. package/cli/storybook-dist/assets/RBSheet.stories-_6VH-RUm.js +0 -39
@@ -1,106 +1,106 @@
1
- import type React from "react";
2
- import type { Meta, StoryObj } from "@storybook/react";
3
- import { useMemo, useState } from "react";
4
-
5
- import { RBTextInput } from "@repo/rb-components/new_components";
6
- import * as RBIcons from "@repo/rb-components/new_components/assets/icons";
7
- import { copyClipboard } from "@repo/rb-utils/browserUtils";
8
-
9
- type IconExport =
10
- | string
11
- | ((props: React.SVGAttributes<SVGSVGElement>) => React.ReactElement);
12
-
13
- const allIcons = Object.entries(RBIcons)
14
- .filter(
15
- ([, value]) => typeof value === "function" || typeof value === "string",
16
- )
17
- .sort(([left], [right]) => left.localeCompare(right)) as Array<
18
- [string, IconExport]
19
- >;
20
-
21
- const toIconUsage = (name: string) => `<${name} className="size-5" />`;
22
-
23
- const handleCopy = (name: string) => {
24
- void copyClipboard({ text: toIconUsage(name) });
25
- };
26
-
27
- const ProgramIconGallery = () => {
28
- const [query, setQuery] = useState("");
29
-
30
- const filteredIcons = useMemo(() => {
31
- const keyword = query.trim().toLowerCase();
32
-
33
- if (!keyword) {
34
- return allIcons;
35
- }
36
-
37
- return allIcons.filter(([name]) => name.toLowerCase().includes(keyword));
38
- }, [query]);
39
-
40
- return (
41
- <div className="flex flex-col gap-4">
42
- <div className="flex flex-col gap-3 md:flex-row md:items-center md:justify-between">
43
- <div>
44
- <h3 className="text-fg-default text-lg font-semibold">RBIcons</h3>
45
- <p className="text-fg-subtle text-sm">
46
- 현재 export된 아이콘 {filteredIcons.length} / {allIcons.length}
47
- </p>
48
- </div>
49
- <RBTextInput
50
- value={query}
51
- handleChange={(value) => setQuery(String(value ?? ""))}
52
- placeholder="Search program icons"
53
- className="w-full md:w-72"
54
- />
55
- </div>
56
-
57
- <div className="grid grid-cols-2 gap-3 md:grid-cols-4 xl:grid-cols-6">
58
- {filteredIcons.map(([name, Icon]) => (
59
- <button
60
- key={name}
61
- type="button"
62
- onClick={() => handleCopy(name)}
63
- title={`Copy ${toIconUsage(name)}`}
64
- className="border-default bg-default flex min-h-32 cursor-copy flex-col items-center justify-center gap-3 rounded-xl border p-4 text-center transition-colors"
65
- >
66
- {typeof Icon === "function" ? (
67
- <Icon className="text-fg-default size-6 shrink-0" />
68
- ) : (
69
- <img src={Icon} alt={name} className="shrink-0" />
70
- )}
71
- <div className="flex flex-col gap-1">
72
- <span className="text-default text-xs font-medium break-all">
73
- {name}
74
- </span>
75
- <span className="text-fg-subtle text-[11px] break-all">
76
- {toIconUsage(name)}
77
- </span>
78
- </div>
79
- </button>
80
- ))}
81
- </div>
82
- </div>
83
- );
84
- };
85
-
86
- const meta = {
87
- component: ProgramIconGallery,
88
- tags: ["autodocs"],
89
- parameters: {
90
- layout: "padded",
91
- docs: {
92
- description: {
93
- component:
94
- "`@repo/rb-components/new_components/assets/icons` 에서 export되는 프로그램 아이콘을 한 번에 확인하는 스토리입니다. 아이콘 카드를 클릭하면 사용 코드가 복사됩니다.",
95
- },
96
- },
97
- },
98
- } satisfies Meta<typeof ProgramIconGallery>;
99
-
100
- export default meta;
101
-
102
- type Story = StoryObj<typeof meta>;
103
-
104
- export const Default: Story = {
105
- render: () => <ProgramIconGallery />,
106
- };
1
+ import type React from "react";
2
+ import type { Meta, StoryObj } from "@storybook/react";
3
+ import { useMemo, useState } from "react";
4
+
5
+ import { RBTextInput } from "@repo/rb-components/new_components";
6
+ import * as RBIcons from "@repo/rb-components/new_components/assets/icons";
7
+ import { copyClipboard } from "@repo/rb-utils/browserUtils";
8
+
9
+ type IconExport =
10
+ | string
11
+ | ((props: React.SVGAttributes<SVGSVGElement>) => React.ReactElement);
12
+
13
+ const allIcons = Object.entries(RBIcons)
14
+ .filter(
15
+ ([, value]) => typeof value === "function" || typeof value === "string",
16
+ )
17
+ .sort(([left], [right]) => left.localeCompare(right)) as Array<
18
+ [string, IconExport]
19
+ >;
20
+
21
+ const toIconUsage = (name: string) => `<${name} className="size-5" />`;
22
+
23
+ const handleCopy = (name: string) => {
24
+ void copyClipboard({ text: toIconUsage(name) });
25
+ };
26
+
27
+ const ProgramIconGallery = () => {
28
+ const [query, setQuery] = useState("");
29
+
30
+ const filteredIcons = useMemo(() => {
31
+ const keyword = query.trim().toLowerCase();
32
+
33
+ if (!keyword) {
34
+ return allIcons;
35
+ }
36
+
37
+ return allIcons.filter(([name]) => name.toLowerCase().includes(keyword));
38
+ }, [query]);
39
+
40
+ return (
41
+ <div className="flex flex-col gap-4">
42
+ <div className="flex flex-col gap-3 md:flex-row md:items-center md:justify-between">
43
+ <div>
44
+ <h3 className="text-fg-default text-lg font-semibold">RBIcons</h3>
45
+ <p className="text-fg-subtle text-sm">
46
+ 현재 export된 아이콘 {filteredIcons.length} / {allIcons.length}
47
+ </p>
48
+ </div>
49
+ <RBTextInput
50
+ value={query}
51
+ handleChange={(value) => setQuery(String(value ?? ""))}
52
+ placeholder="Search program icons"
53
+ className="w-full md:w-72"
54
+ />
55
+ </div>
56
+
57
+ <div className="grid grid-cols-2 gap-3 md:grid-cols-4 xl:grid-cols-6">
58
+ {filteredIcons.map(([name, Icon]) => (
59
+ <button
60
+ key={name}
61
+ type="button"
62
+ onClick={() => handleCopy(name)}
63
+ title={`Copy ${toIconUsage(name)}`}
64
+ className="border-default bg-default flex min-h-32 cursor-copy flex-col items-center justify-center gap-3 rounded-xl border p-4 text-center transition-colors"
65
+ >
66
+ {typeof Icon === "function" ? (
67
+ <Icon className="text-fg-default size-6 shrink-0" />
68
+ ) : (
69
+ <img src={Icon} alt={name} className="shrink-0" />
70
+ )}
71
+ <div className="flex flex-col gap-1">
72
+ <span className="text-default text-xs font-medium break-all">
73
+ {name}
74
+ </span>
75
+ <span className="text-fg-subtle text-[11px] break-all">
76
+ {toIconUsage(name)}
77
+ </span>
78
+ </div>
79
+ </button>
80
+ ))}
81
+ </div>
82
+ </div>
83
+ );
84
+ };
85
+
86
+ const meta = {
87
+ component: ProgramIconGallery,
88
+ tags: ["autodocs"],
89
+ parameters: {
90
+ layout: "padded",
91
+ docs: {
92
+ description: {
93
+ component:
94
+ "`@repo/rb-components/new_components/assets/icons` 에서 export되는 프로그램 아이콘을 한 번에 확인하는 스토리입니다. 아이콘 카드를 클릭하면 사용 코드가 복사됩니다.",
95
+ },
96
+ },
97
+ },
98
+ } satisfies Meta<typeof ProgramIconGallery>;
99
+
100
+ export default meta;
101
+
102
+ type Story = StoryObj<typeof meta>;
103
+
104
+ export const Default: Story = {
105
+ render: () => <ProgramIconGallery />,
106
+ };
@@ -1,89 +1,89 @@
1
- import type { Meta, StoryFn, StoryObj } from "@storybook/react";
2
- import { RBCheckBox } from "@repo/rb-components/new_components";
3
- import { useState } from "react";
4
- import type { CheckBoxProps } from "@repo/rb-components/new_components";
5
-
6
- type StoryComponent = StoryObj<typeof RBCheckBox>;
7
- type StoryTemplate = StoryFn<typeof RBCheckBox>;
8
-
9
- const Template: StoryTemplate = (args) => {
10
- const list = [1, 2, 3, 4];
11
- const [value, setValue] = useState<(string | number)[]>([1, 2]);
12
-
13
- const handleChange = (
14
- nextValue: CheckBoxProps["value"] | undefined,
15
- name?: string,
16
- ) => {
17
- if (Array.isArray(nextValue)) {
18
- setValue(nextValue as (string | number)[]);
19
- }
20
-
21
- args.handleChange?.(nextValue, name);
22
- };
23
-
24
- return (
25
- <div className="space-y-3">
26
- <div className="flex flex-col gap-4">
27
- <RBCheckBox
28
- {...args}
29
- name="rb-checkbox-demo-all"
30
- checkValue={list}
31
- value={value}
32
- handleChange={handleChange}
33
- >
34
- 전체 선택
35
- </RBCheckBox>
36
-
37
- {list.map((num) => (
38
- <RBCheckBox
39
- key={num}
40
- {...args}
41
- name="rb-checkbox-demo"
42
- checkValue={num}
43
- value={value}
44
- handleChange={handleChange}
45
- >
46
- <>
47
- <span>{args.children ?? "CheckBox Dummy Text"}</span>
48
- <span>{num}</span>
49
- </>
50
- </RBCheckBox>
51
- ))}
52
- </div>
53
-
54
- <div className="text-fg-default text-xs">
55
- DATA: [{value.map(String).join(", ")}]
56
- </div>
57
- </div>
58
- );
59
- };
60
-
61
- export default {
62
- component: RBCheckBox,
63
- tags: ["autodocs"],
64
- argTypes: {
65
- size: {
66
- control: { type: "select" },
67
- options: ["sm", "md"],
68
- table: { type: { summary: '"sm" | "md"' } },
69
- },
70
- disabled: { control: { type: "boolean" } },
71
- readOnly: { control: { type: "boolean" } },
72
- children: { control: { type: "text" } },
73
- selected: { control: { type: "boolean" } },
74
- partial: { control: { type: "boolean" } },
75
- checkValue: { control: false },
76
- value: { control: false },
77
- handleChange: { control: false },
78
- },
79
- args: {
80
- size: "sm",
81
- disabled: false,
82
- readOnly: false,
83
- selected: false,
84
- partial: false,
85
- },
86
- render: Template,
87
- } as Meta<typeof RBCheckBox>;
88
-
89
- export const Default: StoryComponent = {};
1
+ import type { Meta, StoryFn, StoryObj } from "@storybook/react";
2
+ import { RBCheckBox } from "@repo/rb-components/new_components";
3
+ import { useState } from "react";
4
+ import type { CheckBoxProps } from "@repo/rb-components/new_components";
5
+
6
+ type StoryComponent = StoryObj<typeof RBCheckBox>;
7
+ type StoryTemplate = StoryFn<typeof RBCheckBox>;
8
+
9
+ const Template: StoryTemplate = (args) => {
10
+ const list = [1, 2, 3, 4];
11
+ const [value, setValue] = useState<(string | number)[]>([1, 2]);
12
+
13
+ const handleChange = (
14
+ nextValue: CheckBoxProps["value"] | undefined,
15
+ name?: string,
16
+ ) => {
17
+ if (Array.isArray(nextValue)) {
18
+ setValue(nextValue as (string | number)[]);
19
+ }
20
+
21
+ args.handleChange?.(nextValue, name);
22
+ };
23
+
24
+ return (
25
+ <div className="space-y-3">
26
+ <div className="flex flex-col gap-4">
27
+ <RBCheckBox
28
+ {...args}
29
+ name="rb-checkbox-demo-all"
30
+ checkValue={list}
31
+ value={value}
32
+ handleChange={handleChange}
33
+ >
34
+ 전체 선택
35
+ </RBCheckBox>
36
+
37
+ {list.map((num) => (
38
+ <RBCheckBox
39
+ key={num}
40
+ {...args}
41
+ name="rb-checkbox-demo"
42
+ checkValue={num}
43
+ value={value}
44
+ handleChange={handleChange}
45
+ >
46
+ <>
47
+ <span>{args.children ?? "CheckBox Dummy Text"}</span>
48
+ <span>{num}</span>
49
+ </>
50
+ </RBCheckBox>
51
+ ))}
52
+ </div>
53
+
54
+ <div className="text-fg-default text-xs">
55
+ DATA: [{value.map(String).join(", ")}]
56
+ </div>
57
+ </div>
58
+ );
59
+ };
60
+
61
+ export default {
62
+ component: RBCheckBox,
63
+ tags: ["autodocs"],
64
+ argTypes: {
65
+ size: {
66
+ control: { type: "select" },
67
+ options: ["sm", "md"],
68
+ table: { type: { summary: '"sm" | "md"' } },
69
+ },
70
+ disabled: { control: { type: "boolean" } },
71
+ readOnly: { control: { type: "boolean" } },
72
+ children: { control: { type: "text" } },
73
+ selected: { control: { type: "boolean" } },
74
+ partial: { control: { type: "boolean" } },
75
+ checkValue: { control: false },
76
+ value: { control: false },
77
+ handleChange: { control: false },
78
+ },
79
+ args: {
80
+ size: "sm",
81
+ disabled: false,
82
+ readOnly: false,
83
+ selected: false,
84
+ partial: false,
85
+ },
86
+ render: Template,
87
+ } as Meta<typeof RBCheckBox>;
88
+
89
+ export const Default: StoryComponent = {};
@@ -1,64 +1,64 @@
1
- import type { Meta, StoryObj, StoryFn } from "@storybook/react";
2
- import { RBMultiRangeInput } from "@repo/rb-components/new_components";
3
-
4
- type StoryComponent = StoryObj<typeof RBMultiRangeInput>;
5
- type StoryTemplate = StoryFn<typeof RBMultiRangeInput>;
6
-
7
- // More on how to set up stories at: https://storybook.js.org/docs/react/writing-stories/introduction
8
- export default {
9
- component: RBMultiRangeInput,
10
- tags: ["autodocs"],
11
- argTypes: {
12
- min: {
13
- control: { type: "number" },
14
- defaultValue: 0,
15
- },
16
- max: {
17
- control: { type: "number" },
18
- defaultValue: 100,
19
- },
20
- step: {
21
- control: { type: "number" },
22
- defaultValue: 1,
23
- },
24
- thumbSize: {
25
- control: { type: "number" },
26
- defaultValue: 20,
27
- },
28
- sliderHeight: {
29
- control: { type: "number" },
30
- defaultValue: 4,
31
- },
32
- thumbBorderColor: {
33
- control: { type: "color" },
34
- },
35
- thumbColor: {
36
- control: { type: "color" },
37
- },
38
- trackColor: {
39
- control: { type: "color" },
40
- },
41
- rangeColor: {
42
- control: { type: "color" },
43
- },
44
- },
45
- } as Meta<typeof RBMultiRangeInput>;
46
-
47
- const Template: StoryTemplate = (args) => {
48
- return <RBMultiRangeInput {...args} />;
49
- };
50
-
51
- export const Default: StoryComponent = {
52
- parameters: {
53
- docs: {
54
- description: {
55
- story: "",
56
- },
57
- },
58
- },
59
- args: {
60
- min: 0,
61
- max: 100,
62
- },
63
- render: Template,
64
- };
1
+ import type { Meta, StoryObj, StoryFn } from "@storybook/react";
2
+ import { RBMultiRangeInput } from "@repo/rb-components/new_components";
3
+
4
+ type StoryComponent = StoryObj<typeof RBMultiRangeInput>;
5
+ type StoryTemplate = StoryFn<typeof RBMultiRangeInput>;
6
+
7
+ // More on how to set up stories at: https://storybook.js.org/docs/react/writing-stories/introduction
8
+ export default {
9
+ component: RBMultiRangeInput,
10
+ tags: ["autodocs"],
11
+ argTypes: {
12
+ min: {
13
+ control: { type: "number" },
14
+ defaultValue: 0,
15
+ },
16
+ max: {
17
+ control: { type: "number" },
18
+ defaultValue: 100,
19
+ },
20
+ step: {
21
+ control: { type: "number" },
22
+ defaultValue: 1,
23
+ },
24
+ thumbSize: {
25
+ control: { type: "number" },
26
+ defaultValue: 20,
27
+ },
28
+ sliderHeight: {
29
+ control: { type: "number" },
30
+ defaultValue: 4,
31
+ },
32
+ thumbBorderColor: {
33
+ control: { type: "color" },
34
+ },
35
+ thumbColor: {
36
+ control: { type: "color" },
37
+ },
38
+ trackColor: {
39
+ control: { type: "color" },
40
+ },
41
+ rangeColor: {
42
+ control: { type: "color" },
43
+ },
44
+ },
45
+ } as Meta<typeof RBMultiRangeInput>;
46
+
47
+ const Template: StoryTemplate = (args) => {
48
+ return <RBMultiRangeInput {...args} />;
49
+ };
50
+
51
+ export const Default: StoryComponent = {
52
+ parameters: {
53
+ docs: {
54
+ description: {
55
+ story: "",
56
+ },
57
+ },
58
+ },
59
+ args: {
60
+ min: 0,
61
+ max: 100,
62
+ },
63
+ render: Template,
64
+ };
@@ -1,65 +1,65 @@
1
- import { useState } from "react";
2
- import type { Meta, StoryFn, StoryObj } from "@storybook/react";
3
-
4
- import { RBRadioBox } from "@repo/rb-components/new_components";
5
- import type { RadioBoxProps } from "@repo/rb-components/new_components";
6
-
7
- type StoryComponent = StoryObj<typeof RBRadioBox>;
8
- type StoryTemplate = StoryFn<typeof RBRadioBox>;
9
-
10
- const Template: StoryTemplate = (args) => {
11
- const list = [1, 2, 3, 4];
12
- const [value, setValue] = useState<RadioBoxProps["value"]>();
13
-
14
- const handleChange = (nextValue: string | number, name?: string) => {
15
- setValue(nextValue);
16
- args.handleChange?.(nextValue, name);
17
- };
18
-
19
- return (
20
- <div className="space-y-3">
21
- <div className="flex flex-col gap-4">
22
- {list.map((num) => (
23
- <RBRadioBox
24
- key={num}
25
- {...args}
26
- name={args.name ?? "rb-radio-demo"}
27
- checkValue={num}
28
- value={value}
29
- handleChange={handleChange}
30
- >
31
- {`${args.children ?? "Radio Button Dummy Text"} ${num}`}
32
- </RBRadioBox>
33
- ))}
34
- </div>
35
- <div className="text-fg-default text-xs">DATA: {String(value ?? "")}</div>
36
- </div>
37
- );
38
- };
39
-
40
- export default {
41
- component: RBRadioBox,
42
- tags: ["autodocs"],
43
- argTypes: {
44
- size: {
45
- control: { type: "select" },
46
- options: ["sm", "md"],
47
- table: { type: { summary: '"sm" | "md"' } },
48
- },
49
- disabled: { control: { type: "boolean" } },
50
- children: { control: { type: "text" } },
51
- checkValue: { control: false },
52
- value: { control: false },
53
- handleChange: { control: false },
54
- },
55
- args: {
56
- size: "sm",
57
- disabled: false,
58
- children: "Radio Button Dummy Text",
59
- name: "rb-radio-demo",
60
- checkValue: "option-1",
61
- },
62
- render: Template,
63
- } as Meta<typeof RBRadioBox>;
64
-
65
- export const Default: StoryComponent = {};
1
+ import { useState } from "react";
2
+ import type { Meta, StoryFn, StoryObj } from "@storybook/react";
3
+
4
+ import { RBRadioBox } from "@repo/rb-components/new_components";
5
+ import type { RadioBoxProps } from "@repo/rb-components/new_components";
6
+
7
+ type StoryComponent = StoryObj<typeof RBRadioBox>;
8
+ type StoryTemplate = StoryFn<typeof RBRadioBox>;
9
+
10
+ const Template: StoryTemplate = (args) => {
11
+ const list = [1, 2, 3, 4];
12
+ const [value, setValue] = useState<RadioBoxProps["value"]>();
13
+
14
+ const handleChange = (nextValue: string | number, name?: string) => {
15
+ setValue(nextValue);
16
+ args.handleChange?.(nextValue, name);
17
+ };
18
+
19
+ return (
20
+ <div className="space-y-3">
21
+ <div className="flex flex-col gap-4">
22
+ {list.map((num) => (
23
+ <RBRadioBox
24
+ key={num}
25
+ {...args}
26
+ name={args.name ?? "rb-radio-demo"}
27
+ checkValue={num}
28
+ value={value}
29
+ handleChange={handleChange}
30
+ >
31
+ {`${args.children ?? "Radio Button Dummy Text"} ${num}`}
32
+ </RBRadioBox>
33
+ ))}
34
+ </div>
35
+ <div className="text-fg-default text-xs">DATA: {String(value ?? "")}</div>
36
+ </div>
37
+ );
38
+ };
39
+
40
+ export default {
41
+ component: RBRadioBox,
42
+ tags: ["autodocs"],
43
+ argTypes: {
44
+ size: {
45
+ control: { type: "select" },
46
+ options: ["sm", "md"],
47
+ table: { type: { summary: '"sm" | "md"' } },
48
+ },
49
+ disabled: { control: { type: "boolean" } },
50
+ children: { control: { type: "text" } },
51
+ checkValue: { control: false },
52
+ value: { control: false },
53
+ handleChange: { control: false },
54
+ },
55
+ args: {
56
+ size: "sm",
57
+ disabled: false,
58
+ children: "Radio Button Dummy Text",
59
+ name: "rb-radio-demo",
60
+ checkValue: "option-1",
61
+ },
62
+ render: Template,
63
+ } as Meta<typeof RBRadioBox>;
64
+
65
+ export const Default: StoryComponent = {};