create-weave-frontend-app 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 (272) hide show
  1. package/README.md +11 -0
  2. package/dist/chunk-HZJMO45D.js +437 -0
  3. package/dist/create-app.d.ts +14 -0
  4. package/dist/create-app.js +6 -0
  5. package/dist/index.d.ts +1 -0
  6. package/dist/index.js +106 -0
  7. package/package.json +65 -0
  8. package/template/+nextjs+azure-web-pubsub/README.md +36 -0
  9. package/template/+nextjs+azure-web-pubsub/api/del-image.ts +8 -0
  10. package/template/+nextjs+azure-web-pubsub/api/get-images.ts +15 -0
  11. package/template/+nextjs+azure-web-pubsub/api/post-image.ts +14 -0
  12. package/template/+nextjs+azure-web-pubsub/api/post-remove-background.ts +10 -0
  13. package/template/+nextjs+azure-web-pubsub/app/error/page.tsx +10 -0
  14. package/template/+nextjs+azure-web-pubsub/app/favicon.ico +0 -0
  15. package/template/+nextjs+azure-web-pubsub/app/globals.css +193 -0
  16. package/template/+nextjs+azure-web-pubsub/app/layout.tsx +46 -0
  17. package/template/+nextjs+azure-web-pubsub/app/page.tsx +7 -0
  18. package/template/+nextjs+azure-web-pubsub/app/providers.tsx +18 -0
  19. package/template/+nextjs+azure-web-pubsub/app/room/[roomId]/page.tsx +5 -0
  20. package/template/+nextjs+azure-web-pubsub/assets/images/home.png +0 -0
  21. package/template/+nextjs+azure-web-pubsub/assets/images/logo.png +0 -0
  22. package/template/+nextjs+azure-web-pubsub/components/actions/align-elements-tool/align-elements-tool.ts +94 -0
  23. package/template/+nextjs+azure-web-pubsub/components/actions/color-token-tool/color-token-tool.ts +164 -0
  24. package/template/+nextjs+azure-web-pubsub/components/actions/color-token-tool/constants.ts +5 -0
  25. package/template/+nextjs+azure-web-pubsub/components/actions/color-token-tool/types.ts +12 -0
  26. package/template/+nextjs+azure-web-pubsub/components/error/error.tsx +62 -0
  27. package/template/+nextjs+azure-web-pubsub/components/error/errors.ts +35 -0
  28. package/template/+nextjs+azure-web-pubsub/components/home/home.tsx +92 -0
  29. package/template/+nextjs+azure-web-pubsub/components/home-components/home-showcase-animation.tsx +119 -0
  30. package/template/+nextjs+azure-web-pubsub/components/home-components/login-form.tsx +117 -0
  31. package/template/+nextjs+azure-web-pubsub/components/nodes/color-token/color-token.ts +171 -0
  32. package/template/+nextjs+azure-web-pubsub/components/room/room.layout.tsx +115 -0
  33. package/template/+nextjs+azure-web-pubsub/components/room/room.tsx +125 -0
  34. package/template/+nextjs+azure-web-pubsub/components/room-components/color-tokens-library/color-token.tsx +31 -0
  35. package/template/+nextjs+azure-web-pubsub/components/room-components/color-tokens-library/color-tokens-library.tsx +64 -0
  36. package/template/+nextjs+azure-web-pubsub/components/room-components/connected-users.tsx +152 -0
  37. package/template/+nextjs+azure-web-pubsub/components/room-components/connection-status.tsx +52 -0
  38. package/template/+nextjs+azure-web-pubsub/components/room-components/context-menu.tsx +152 -0
  39. package/template/+nextjs+azure-web-pubsub/components/room-components/frames-library/frames-library.image.tsx +48 -0
  40. package/template/+nextjs+azure-web-pubsub/components/room-components/frames-library/frames-library.presentation-image.tsx +61 -0
  41. package/template/+nextjs+azure-web-pubsub/components/room-components/frames-library/frames-library.tsx +316 -0
  42. package/template/+nextjs+azure-web-pubsub/components/room-components/frames-library/utils.ts +27 -0
  43. package/template/+nextjs+azure-web-pubsub/components/room-components/help/help-arrange.tsx +69 -0
  44. package/template/+nextjs+azure-web-pubsub/components/room-components/help/help-drawer.tsx +140 -0
  45. package/template/+nextjs+azure-web-pubsub/components/room-components/help/help-edit.tsx +80 -0
  46. package/template/+nextjs+azure-web-pubsub/components/room-components/help/help-selection.tsx +30 -0
  47. package/template/+nextjs+azure-web-pubsub/components/room-components/help/help-shortcut-element.tsx +24 -0
  48. package/template/+nextjs+azure-web-pubsub/components/room-components/help/help-tools.tsx +89 -0
  49. package/template/+nextjs+azure-web-pubsub/components/room-components/help/help-view.tsx +30 -0
  50. package/template/+nextjs+azure-web-pubsub/components/room-components/help/help-zoom.tsx +46 -0
  51. package/template/+nextjs+azure-web-pubsub/components/room-components/help/shortcut-element.tsx +42 -0
  52. package/template/+nextjs+azure-web-pubsub/components/room-components/hooks/use-context-menu.tsx +514 -0
  53. package/template/+nextjs+azure-web-pubsub/components/room-components/hooks/use-get-azure-web-pubsub-provider.ts +78 -0
  54. package/template/+nextjs+azure-web-pubsub/components/room-components/hooks/use-get-os.ts +12 -0
  55. package/template/+nextjs+azure-web-pubsub/components/room-components/hooks/use-get-weave-js-props.tsx +120 -0
  56. package/template/+nextjs+azure-web-pubsub/components/room-components/hooks/use-handle-route-params.ts +30 -0
  57. package/template/+nextjs+azure-web-pubsub/components/room-components/hooks/use-key-down.ts +29 -0
  58. package/template/+nextjs+azure-web-pubsub/components/room-components/hooks/use-keyboard-handler.tsx +557 -0
  59. package/template/+nextjs+azure-web-pubsub/components/room-components/images-library/images-library.tsx +146 -0
  60. package/template/+nextjs+azure-web-pubsub/components/room-components/inputs/input-color.tsx +101 -0
  61. package/template/+nextjs+azure-web-pubsub/components/room-components/inputs/input-font-family.tsx +99 -0
  62. package/template/+nextjs+azure-web-pubsub/components/room-components/inputs/input-number.tsx +61 -0
  63. package/template/+nextjs+azure-web-pubsub/components/room-components/inputs/input-text.tsx +51 -0
  64. package/template/+nextjs+azure-web-pubsub/components/room-components/inputs/number-input.tsx +107 -0
  65. package/template/+nextjs+azure-web-pubsub/components/room-components/node-properties/appearance-properties.tsx +119 -0
  66. package/template/+nextjs+azure-web-pubsub/components/room-components/node-properties/color-token-properties.tsx +108 -0
  67. package/template/+nextjs+azure-web-pubsub/components/room-components/node-properties/crop-properties.tsx +156 -0
  68. package/template/+nextjs+azure-web-pubsub/components/room-components/node-properties/fill-properties.tsx +115 -0
  69. package/template/+nextjs+azure-web-pubsub/components/room-components/node-properties/frame-properties.tsx +100 -0
  70. package/template/+nextjs+azure-web-pubsub/components/room-components/node-properties/image-properties.tsx +57 -0
  71. package/template/+nextjs+azure-web-pubsub/components/room-components/node-properties/position-properties.tsx +156 -0
  72. package/template/+nextjs+azure-web-pubsub/components/room-components/node-properties/size-properties.tsx +131 -0
  73. package/template/+nextjs+azure-web-pubsub/components/room-components/node-properties/stroke-properties.tsx +327 -0
  74. package/template/+nextjs+azure-web-pubsub/components/room-components/node-properties/text-properties.tsx +467 -0
  75. package/template/+nextjs+azure-web-pubsub/components/room-components/overlay/multiuse-overlay.tsx +127 -0
  76. package/template/+nextjs+azure-web-pubsub/components/room-components/overlay/node-properties.tsx +98 -0
  77. package/template/+nextjs+azure-web-pubsub/components/room-components/overlay/overlay-animation-wrapper.tsx +31 -0
  78. package/template/+nextjs+azure-web-pubsub/components/room-components/overlay/room-information-overlay.tsx +247 -0
  79. package/template/+nextjs+azure-web-pubsub/components/room-components/overlay/room-users-overlay.tsx +31 -0
  80. package/template/+nextjs+azure-web-pubsub/components/room-components/overlay/tools-overlay.tsx +289 -0
  81. package/template/+nextjs+azure-web-pubsub/components/room-components/overlay/variants.ts +58 -0
  82. package/template/+nextjs+azure-web-pubsub/components/room-components/overlay/zoom-handler-overlay.tsx +447 -0
  83. package/template/+nextjs+azure-web-pubsub/components/room-components/room-error.tsx +37 -0
  84. package/template/+nextjs+azure-web-pubsub/components/room-components/room-loader/room-loader.tsx +98 -0
  85. package/template/+nextjs+azure-web-pubsub/components/room-components/selection-information.tsx +74 -0
  86. package/template/+nextjs+azure-web-pubsub/components/room-components/toggle-icon-button.tsx +60 -0
  87. package/template/+nextjs+azure-web-pubsub/components/room-components/toolbar/toolbar-button.tsx +60 -0
  88. package/template/+nextjs+azure-web-pubsub/components/room-components/toolbar/toolbar-toggle-button.tsx +40 -0
  89. package/template/+nextjs+azure-web-pubsub/components/room-components/toolbar/toolbar.tsx +28 -0
  90. package/template/+nextjs+azure-web-pubsub/components/room-components/upload-file.tsx +130 -0
  91. package/template/+nextjs+azure-web-pubsub/components/room-components/with-instance-node.tsx +53 -0
  92. package/template/+nextjs+azure-web-pubsub/components/ui/accordion.tsx +66 -0
  93. package/template/+nextjs+azure-web-pubsub/components/ui/avatar.tsx +53 -0
  94. package/template/+nextjs+azure-web-pubsub/components/ui/button.tsx +58 -0
  95. package/template/+nextjs+azure-web-pubsub/components/ui/card.tsx +68 -0
  96. package/template/+nextjs+azure-web-pubsub/components/ui/checkbox.tsx +32 -0
  97. package/template/+nextjs+azure-web-pubsub/components/ui/color-picker/color-picker-component.tsx +69 -0
  98. package/template/+nextjs+azure-web-pubsub/components/ui/color-picker/context/color-picker-context.tsx +28 -0
  99. package/template/+nextjs+azure-web-pubsub/components/ui/color-picker/editor/color-picker-format-editor.tsx +34 -0
  100. package/template/+nextjs+azure-web-pubsub/components/ui/color-picker/index.ts +7 -0
  101. package/template/+nextjs+azure-web-pubsub/components/ui/color-picker/selector/color-picker-alpha.tsx +79 -0
  102. package/template/+nextjs+azure-web-pubsub/components/ui/color-picker/selector/color-picker-eyedropper.tsx +95 -0
  103. package/template/+nextjs+azure-web-pubsub/components/ui/color-picker/selector/color-picker-format-selector.tsx +50 -0
  104. package/template/+nextjs+azure-web-pubsub/components/ui/color-picker/selector/color-picker-hue.tsx +67 -0
  105. package/template/+nextjs+azure-web-pubsub/components/ui/color-picker/selector/color-picker-saturation.tsx +145 -0
  106. package/template/+nextjs+azure-web-pubsub/components/ui/color-picker/text-inputs/color-picker-alpha-percentage.tsx +60 -0
  107. package/template/+nextjs+azure-web-pubsub/components/ui/color-picker/text-inputs/color-picker-hexa.tsx +65 -0
  108. package/template/+nextjs+azure-web-pubsub/components/ui/color-picker/text-inputs/color-picker-rgba.tsx +62 -0
  109. package/template/+nextjs+azure-web-pubsub/components/ui/command.tsx +177 -0
  110. package/template/+nextjs+azure-web-pubsub/components/ui/dialog.tsx +135 -0
  111. package/template/+nextjs+azure-web-pubsub/components/ui/drawer.tsx +132 -0
  112. package/template/+nextjs+azure-web-pubsub/components/ui/dropdown-menu.tsx +201 -0
  113. package/template/+nextjs+azure-web-pubsub/components/ui/form.tsx +167 -0
  114. package/template/+nextjs+azure-web-pubsub/components/ui/input.tsx +21 -0
  115. package/template/+nextjs+azure-web-pubsub/components/ui/label.tsx +24 -0
  116. package/template/+nextjs+azure-web-pubsub/components/ui/popover.tsx +48 -0
  117. package/template/+nextjs+azure-web-pubsub/components/ui/reactbits/Backgrounds/Dither/Dither.tsx +350 -0
  118. package/template/+nextjs+azure-web-pubsub/components/ui/reactbits/Backgrounds/Threads/Threads.tsx +239 -0
  119. package/template/+nextjs+azure-web-pubsub/components/ui/reactbits/TextAnimations/RotatingText/RotatingText.tsx +276 -0
  120. package/template/+nextjs+azure-web-pubsub/components/ui/scroll-area.tsx +58 -0
  121. package/template/+nextjs+azure-web-pubsub/components/ui/select.tsx +185 -0
  122. package/template/+nextjs+azure-web-pubsub/components/ui/sheet.tsx +139 -0
  123. package/template/+nextjs+azure-web-pubsub/components/ui/sonner.tsx +25 -0
  124. package/template/+nextjs+azure-web-pubsub/components/ui/tabs.tsx +66 -0
  125. package/template/+nextjs+azure-web-pubsub/components/ui/tooltip.tsx +61 -0
  126. package/template/+nextjs+azure-web-pubsub/components/utils/constants.ts +118 -0
  127. package/template/+nextjs+azure-web-pubsub/components/utils/logo.tsx +34 -0
  128. package/template/+nextjs+azure-web-pubsub/components.json +21 -0
  129. package/template/+nextjs+azure-web-pubsub/example.env +2 -0
  130. package/template/+nextjs+azure-web-pubsub/example.gitignore +44 -0
  131. package/template/+nextjs+azure-web-pubsub/jsrepo.json +11 -0
  132. package/template/+nextjs+azure-web-pubsub/lib/utils.ts +43 -0
  133. package/template/+nextjs+azure-web-pubsub/new-types.d.ts +8 -0
  134. package/template/+nextjs+azure-web-pubsub/next-env.d.ts +5 -0
  135. package/template/+nextjs+azure-web-pubsub/next.config.js +52 -0
  136. package/template/+nextjs+azure-web-pubsub/postcss.config.mjs +5 -0
  137. package/template/+nextjs+azure-web-pubsub/store/store.ts +241 -0
  138. package/template/+nextjs+azure-web-pubsub/tsconfig.json +37 -0
  139. package/template/+nextjs+azure-web-pubsub/vitest.config.mts +10 -0
  140. package/template/+nextjs+websockets/README.md +39 -0
  141. package/template/+nextjs+websockets/api/del-image.ts +8 -0
  142. package/template/+nextjs+websockets/api/get-images.ts +15 -0
  143. package/template/+nextjs+websockets/api/post-image.ts +14 -0
  144. package/template/+nextjs+websockets/api/post-remove-background.ts +10 -0
  145. package/template/+nextjs+websockets/app/error/page.tsx +10 -0
  146. package/template/+nextjs+websockets/app/favicon.ico +0 -0
  147. package/template/+nextjs+websockets/app/globals.css +193 -0
  148. package/template/+nextjs+websockets/app/layout.tsx +46 -0
  149. package/template/+nextjs+websockets/app/page.tsx +7 -0
  150. package/template/+nextjs+websockets/app/providers.tsx +18 -0
  151. package/template/+nextjs+websockets/app/room/[roomId]/page.tsx +5 -0
  152. package/template/+nextjs+websockets/assets/images/home.png +0 -0
  153. package/template/+nextjs+websockets/assets/images/logo.png +0 -0
  154. package/template/+nextjs+websockets/components/actions/align-elements-tool/align-elements-tool.ts +94 -0
  155. package/template/+nextjs+websockets/components/actions/color-token-tool/color-token-tool.ts +164 -0
  156. package/template/+nextjs+websockets/components/actions/color-token-tool/constants.ts +5 -0
  157. package/template/+nextjs+websockets/components/actions/color-token-tool/types.ts +12 -0
  158. package/template/+nextjs+websockets/components/error/error.tsx +62 -0
  159. package/template/+nextjs+websockets/components/error/errors.ts +35 -0
  160. package/template/+nextjs+websockets/components/home/home.tsx +92 -0
  161. package/template/+nextjs+websockets/components/home-components/home-showcase-animation.tsx +119 -0
  162. package/template/+nextjs+websockets/components/home-components/login-form.tsx +117 -0
  163. package/template/+nextjs+websockets/components/nodes/color-token/color-token.ts +171 -0
  164. package/template/+nextjs+websockets/components/room/room.layout.tsx +115 -0
  165. package/template/+nextjs+websockets/components/room/room.tsx +125 -0
  166. package/template/+nextjs+websockets/components/room-components/color-tokens-library/color-token.tsx +31 -0
  167. package/template/+nextjs+websockets/components/room-components/color-tokens-library/color-tokens-library.tsx +64 -0
  168. package/template/+nextjs+websockets/components/room-components/connected-users.tsx +152 -0
  169. package/template/+nextjs+websockets/components/room-components/connection-status.tsx +52 -0
  170. package/template/+nextjs+websockets/components/room-components/context-menu.tsx +152 -0
  171. package/template/+nextjs+websockets/components/room-components/frames-library/frames-library.image.tsx +48 -0
  172. package/template/+nextjs+websockets/components/room-components/frames-library/frames-library.presentation-image.tsx +61 -0
  173. package/template/+nextjs+websockets/components/room-components/frames-library/frames-library.tsx +316 -0
  174. package/template/+nextjs+websockets/components/room-components/frames-library/utils.ts +27 -0
  175. package/template/+nextjs+websockets/components/room-components/help/help-arrange.tsx +69 -0
  176. package/template/+nextjs+websockets/components/room-components/help/help-drawer.tsx +140 -0
  177. package/template/+nextjs+websockets/components/room-components/help/help-edit.tsx +80 -0
  178. package/template/+nextjs+websockets/components/room-components/help/help-selection.tsx +30 -0
  179. package/template/+nextjs+websockets/components/room-components/help/help-shortcut-element.tsx +24 -0
  180. package/template/+nextjs+websockets/components/room-components/help/help-tools.tsx +89 -0
  181. package/template/+nextjs+websockets/components/room-components/help/help-view.tsx +30 -0
  182. package/template/+nextjs+websockets/components/room-components/help/help-zoom.tsx +46 -0
  183. package/template/+nextjs+websockets/components/room-components/help/shortcut-element.tsx +42 -0
  184. package/template/+nextjs+websockets/components/room-components/hooks/use-context-menu.tsx +514 -0
  185. package/template/+nextjs+websockets/components/room-components/hooks/use-get-os.ts +12 -0
  186. package/template/+nextjs+websockets/components/room-components/hooks/use-get-weave-js-props.tsx +120 -0
  187. package/template/+nextjs+websockets/components/room-components/hooks/use-get-websockets-provider.ts +79 -0
  188. package/template/+nextjs+websockets/components/room-components/hooks/use-handle-route-params.ts +30 -0
  189. package/template/+nextjs+websockets/components/room-components/hooks/use-key-down.ts +29 -0
  190. package/template/+nextjs+websockets/components/room-components/hooks/use-keyboard-handler.tsx +557 -0
  191. package/template/+nextjs+websockets/components/room-components/images-library/images-library.tsx +146 -0
  192. package/template/+nextjs+websockets/components/room-components/inputs/input-color.tsx +101 -0
  193. package/template/+nextjs+websockets/components/room-components/inputs/input-font-family.tsx +99 -0
  194. package/template/+nextjs+websockets/components/room-components/inputs/input-number.tsx +61 -0
  195. package/template/+nextjs+websockets/components/room-components/inputs/input-text.tsx +51 -0
  196. package/template/+nextjs+websockets/components/room-components/inputs/number-input.tsx +107 -0
  197. package/template/+nextjs+websockets/components/room-components/node-properties/appearance-properties.tsx +119 -0
  198. package/template/+nextjs+websockets/components/room-components/node-properties/color-token-properties.tsx +108 -0
  199. package/template/+nextjs+websockets/components/room-components/node-properties/crop-properties.tsx +156 -0
  200. package/template/+nextjs+websockets/components/room-components/node-properties/fill-properties.tsx +115 -0
  201. package/template/+nextjs+websockets/components/room-components/node-properties/frame-properties.tsx +100 -0
  202. package/template/+nextjs+websockets/components/room-components/node-properties/image-properties.tsx +57 -0
  203. package/template/+nextjs+websockets/components/room-components/node-properties/position-properties.tsx +156 -0
  204. package/template/+nextjs+websockets/components/room-components/node-properties/size-properties.tsx +131 -0
  205. package/template/+nextjs+websockets/components/room-components/node-properties/stroke-properties.tsx +327 -0
  206. package/template/+nextjs+websockets/components/room-components/node-properties/text-properties.tsx +467 -0
  207. package/template/+nextjs+websockets/components/room-components/overlay/multiuse-overlay.tsx +127 -0
  208. package/template/+nextjs+websockets/components/room-components/overlay/node-properties.tsx +98 -0
  209. package/template/+nextjs+websockets/components/room-components/overlay/overlay-animation-wrapper.tsx +31 -0
  210. package/template/+nextjs+websockets/components/room-components/overlay/room-information-overlay.tsx +247 -0
  211. package/template/+nextjs+websockets/components/room-components/overlay/room-users-overlay.tsx +31 -0
  212. package/template/+nextjs+websockets/components/room-components/overlay/tools-overlay.tsx +289 -0
  213. package/template/+nextjs+websockets/components/room-components/overlay/variants.ts +58 -0
  214. package/template/+nextjs+websockets/components/room-components/overlay/zoom-handler-overlay.tsx +447 -0
  215. package/template/+nextjs+websockets/components/room-components/room-error.tsx +37 -0
  216. package/template/+nextjs+websockets/components/room-components/room-loader/room-loader.tsx +98 -0
  217. package/template/+nextjs+websockets/components/room-components/selection-information.tsx +74 -0
  218. package/template/+nextjs+websockets/components/room-components/toggle-icon-button.tsx +60 -0
  219. package/template/+nextjs+websockets/components/room-components/toolbar/toolbar-button.tsx +60 -0
  220. package/template/+nextjs+websockets/components/room-components/toolbar/toolbar-toggle-button.tsx +40 -0
  221. package/template/+nextjs+websockets/components/room-components/toolbar/toolbar.tsx +28 -0
  222. package/template/+nextjs+websockets/components/room-components/upload-file.tsx +130 -0
  223. package/template/+nextjs+websockets/components/room-components/with-instance-node.tsx +53 -0
  224. package/template/+nextjs+websockets/components/ui/accordion.tsx +66 -0
  225. package/template/+nextjs+websockets/components/ui/avatar.tsx +53 -0
  226. package/template/+nextjs+websockets/components/ui/button.tsx +58 -0
  227. package/template/+nextjs+websockets/components/ui/card.tsx +68 -0
  228. package/template/+nextjs+websockets/components/ui/checkbox.tsx +32 -0
  229. package/template/+nextjs+websockets/components/ui/color-picker/color-picker-component.tsx +69 -0
  230. package/template/+nextjs+websockets/components/ui/color-picker/context/color-picker-context.tsx +28 -0
  231. package/template/+nextjs+websockets/components/ui/color-picker/editor/color-picker-format-editor.tsx +34 -0
  232. package/template/+nextjs+websockets/components/ui/color-picker/index.ts +7 -0
  233. package/template/+nextjs+websockets/components/ui/color-picker/selector/color-picker-alpha.tsx +79 -0
  234. package/template/+nextjs+websockets/components/ui/color-picker/selector/color-picker-eyedropper.tsx +95 -0
  235. package/template/+nextjs+websockets/components/ui/color-picker/selector/color-picker-format-selector.tsx +50 -0
  236. package/template/+nextjs+websockets/components/ui/color-picker/selector/color-picker-hue.tsx +67 -0
  237. package/template/+nextjs+websockets/components/ui/color-picker/selector/color-picker-saturation.tsx +145 -0
  238. package/template/+nextjs+websockets/components/ui/color-picker/text-inputs/color-picker-alpha-percentage.tsx +60 -0
  239. package/template/+nextjs+websockets/components/ui/color-picker/text-inputs/color-picker-hexa.tsx +65 -0
  240. package/template/+nextjs+websockets/components/ui/color-picker/text-inputs/color-picker-rgba.tsx +62 -0
  241. package/template/+nextjs+websockets/components/ui/command.tsx +177 -0
  242. package/template/+nextjs+websockets/components/ui/dialog.tsx +135 -0
  243. package/template/+nextjs+websockets/components/ui/drawer.tsx +132 -0
  244. package/template/+nextjs+websockets/components/ui/dropdown-menu.tsx +201 -0
  245. package/template/+nextjs+websockets/components/ui/form.tsx +167 -0
  246. package/template/+nextjs+websockets/components/ui/input.tsx +21 -0
  247. package/template/+nextjs+websockets/components/ui/label.tsx +24 -0
  248. package/template/+nextjs+websockets/components/ui/popover.tsx +48 -0
  249. package/template/+nextjs+websockets/components/ui/reactbits/Backgrounds/Dither/Dither.tsx +350 -0
  250. package/template/+nextjs+websockets/components/ui/reactbits/Backgrounds/Threads/Threads.tsx +239 -0
  251. package/template/+nextjs+websockets/components/ui/reactbits/TextAnimations/RotatingText/RotatingText.tsx +276 -0
  252. package/template/+nextjs+websockets/components/ui/scroll-area.tsx +58 -0
  253. package/template/+nextjs+websockets/components/ui/select.tsx +185 -0
  254. package/template/+nextjs+websockets/components/ui/sheet.tsx +139 -0
  255. package/template/+nextjs+websockets/components/ui/sonner.tsx +25 -0
  256. package/template/+nextjs+websockets/components/ui/tabs.tsx +66 -0
  257. package/template/+nextjs+websockets/components/ui/tooltip.tsx +61 -0
  258. package/template/+nextjs+websockets/components/utils/constants.ts +118 -0
  259. package/template/+nextjs+websockets/components/utils/logo.tsx +34 -0
  260. package/template/+nextjs+websockets/components.json +21 -0
  261. package/template/+nextjs+websockets/example.env +2 -0
  262. package/template/+nextjs+websockets/example.gitignore +44 -0
  263. package/template/+nextjs+websockets/jsrepo.json +11 -0
  264. package/template/+nextjs+websockets/lib/utils.ts +43 -0
  265. package/template/+nextjs+websockets/new-types.d.ts +8 -0
  266. package/template/+nextjs+websockets/next-env.d.ts +5 -0
  267. package/template/+nextjs+websockets/next.config.js +52 -0
  268. package/template/+nextjs+websockets/postcss.config.mjs +5 -0
  269. package/template/+nextjs+websockets/store/store.ts +241 -0
  270. package/template/+nextjs+websockets/tsconfig.json +37 -0
  271. package/template/+nextjs+websockets/vitest.config.mts +10 -0
  272. package/template/package.json +81 -0
@@ -0,0 +1,156 @@
1
+ 'use client';
2
+
3
+ import React from 'react';
4
+ import { WeaveStateElement } from '@inditextech/weave-types';
5
+ import { Crop } from 'lucide-react';
6
+ import { InputNumber } from '../inputs/input-number';
7
+ import { useWeave } from '@inditextech/weave-react';
8
+ import { useCollaborationRoom } from '@/store/store';
9
+ import { ToggleIconButton } from '../toggle-icon-button';
10
+
11
+ export function CropProperties() {
12
+ const instance = useWeave((state) => state.instance);
13
+ const node = useWeave((state) => state.selection.node);
14
+ const actualAction = useWeave((state) => state.actions.actual);
15
+
16
+ const nodePropertiesAction = useCollaborationRoom(
17
+ (state) => state.nodeProperties.action
18
+ );
19
+
20
+ const nodeCreateProps = useCollaborationRoom(
21
+ (state) => state.nodeProperties.createProps
22
+ );
23
+
24
+ const [actualNode, setActualNode] = React.useState<
25
+ WeaveStateElement | undefined
26
+ >(node);
27
+
28
+ React.useEffect(() => {
29
+ if (!instance) return;
30
+ if (node && nodePropertiesAction === 'update') {
31
+ setActualNode(node);
32
+ }
33
+ }, [instance, actualAction, node, nodePropertiesAction, nodeCreateProps]);
34
+
35
+ const updateElement = React.useCallback(
36
+ (updatedNode: WeaveStateElement) => {
37
+ if (!instance) return;
38
+ if (nodePropertiesAction === 'update') {
39
+ instance.updateNode(updatedNode);
40
+ return;
41
+ }
42
+ },
43
+ [instance, nodePropertiesAction]
44
+ );
45
+
46
+ if (!instance || !actualNode) return null;
47
+
48
+ if (!['image'].includes(actualNode.type)) {
49
+ return null;
50
+ }
51
+
52
+ return (
53
+ <div className="border-b border-zinc-200">
54
+ <div className="w-full flex justify-between items-center gap-3 p-4 py-3">
55
+ <div className="cursor-pointer hover:no-underline items-center py-0">
56
+ <span className="text-xs font-noto-sans-mono font-light">Crop</span>
57
+ </div>
58
+ <div className="flex justify-end items-center">
59
+ <ToggleIconButton
60
+ kind="switch"
61
+ icon={<Crop size={16} />}
62
+ pressed={typeof actualNode.props.cropX !== 'undefined'}
63
+ onClick={() => {
64
+ const updatedNode: WeaveStateElement = {
65
+ ...actualNode,
66
+ props: {
67
+ ...actualNode.props,
68
+ ...(typeof actualNode.props.cropX !== 'undefined'
69
+ ? {
70
+ width: actualNode.props.imageInfo.width,
71
+ height: actualNode.props.imageInfo.height,
72
+ cropX: null,
73
+ cropY: null,
74
+ cropWidth: null,
75
+ cropHeight: null,
76
+ }
77
+ : {
78
+ width: actualNode.props.imageInfo.width,
79
+ height: actualNode.props.imageInfo.height,
80
+ cropX: 0,
81
+ cropY: 0,
82
+ cropWidth: actualNode.props.imageInfo.width,
83
+ cropHeight: actualNode.props.imageInfo.height,
84
+ }),
85
+ },
86
+ };
87
+ updateElement(updatedNode);
88
+ }}
89
+ />
90
+ </div>
91
+ </div>
92
+ <div className="px-4 pb-4">
93
+ <div className="grid grid-cols-2 gap-3 w-full">
94
+ <InputNumber
95
+ label="X"
96
+ value={actualNode.props.cropX ?? 0}
97
+ onChange={(value) => {
98
+ const updatedNode: WeaveStateElement = {
99
+ ...actualNode,
100
+ props: {
101
+ ...actualNode.props,
102
+ cropX: value,
103
+ },
104
+ };
105
+ updateElement(updatedNode);
106
+ }}
107
+ />
108
+ <InputNumber
109
+ label="Y"
110
+ value={actualNode.props.cropY ?? 0}
111
+ onChange={(value) => {
112
+ const updatedNode: WeaveStateElement = {
113
+ ...actualNode,
114
+ props: {
115
+ ...actualNode.props,
116
+ cropY: value,
117
+ },
118
+ };
119
+ updateElement(updatedNode);
120
+ }}
121
+ />
122
+ <InputNumber
123
+ label="W"
124
+ value={actualNode.props.cropWidth ?? actualNode.props.width}
125
+ onChange={(value) => {
126
+ const updatedNode: WeaveStateElement = {
127
+ ...actualNode,
128
+ props: {
129
+ ...actualNode.props,
130
+ cropWidth: value,
131
+ width: value,
132
+ },
133
+ };
134
+ updateElement(updatedNode);
135
+ }}
136
+ />
137
+ <InputNumber
138
+ label="H"
139
+ value={actualNode.props.cropHeight ?? actualNode.props.height}
140
+ onChange={(value) => {
141
+ const updatedNode: WeaveStateElement = {
142
+ ...actualNode,
143
+ props: {
144
+ ...actualNode.props,
145
+ cropHeight: value,
146
+ height: value,
147
+ },
148
+ };
149
+ updateElement(updatedNode);
150
+ }}
151
+ />
152
+ </div>
153
+ </div>
154
+ </div>
155
+ );
156
+ }
@@ -0,0 +1,115 @@
1
+ 'use client';
2
+
3
+ import React from 'react';
4
+ import { WeaveStateElement } from '@inditextech/weave-types';
5
+ import { Eye, EyeOff } from 'lucide-react';
6
+ import { InputColor } from './../inputs/input-color';
7
+ import { ToggleIconButton } from './../toggle-icon-button';
8
+ import { useWeave } from '@inditextech/weave-react';
9
+ import { useCollaborationRoom } from '@/store/store';
10
+
11
+ export function FillProperties() {
12
+ const instance = useWeave((state) => state.instance);
13
+ const node = useWeave((state) => state.selection.node);
14
+ const actualAction = useWeave((state) => state.actions.actual);
15
+
16
+ const nodePropertiesAction = useCollaborationRoom(
17
+ (state) => state.nodeProperties.action
18
+ );
19
+
20
+ const nodeCreateProps = useCollaborationRoom(
21
+ (state) => state.nodeProperties.createProps
22
+ );
23
+
24
+ const [actualNode, setActualNode] = React.useState<
25
+ WeaveStateElement | undefined
26
+ >(node);
27
+
28
+ React.useEffect(() => {
29
+ if (!instance) return;
30
+ if (actualAction && nodePropertiesAction === 'create') {
31
+ setActualNode({
32
+ key: 'creating',
33
+ type: 'undefined',
34
+ props: {
35
+ ...nodeCreateProps,
36
+ },
37
+ });
38
+ }
39
+ if (node && nodePropertiesAction === 'update') {
40
+ setActualNode(node);
41
+ }
42
+ if (!actualAction && !node) {
43
+ setActualNode(undefined);
44
+ }
45
+ }, [instance, actualAction, node, nodePropertiesAction, nodeCreateProps]);
46
+
47
+ const updateElement = React.useCallback(
48
+ (updatedNode: WeaveStateElement) => {
49
+ if (!instance) return;
50
+ if (actualAction && nodePropertiesAction === 'create') {
51
+ instance.updatePropsAction(actualAction, updatedNode.props);
52
+ }
53
+ if (nodePropertiesAction === 'update') {
54
+ instance.updateNode(updatedNode);
55
+ }
56
+ },
57
+ [instance, actualAction, nodePropertiesAction]
58
+ );
59
+
60
+ if (!instance || !actualAction || !actualNode) {
61
+ return null;
62
+ }
63
+
64
+ if (!actualAction && !actualNode) {
65
+ return null;
66
+ }
67
+
68
+ if (actualNode.type !== 'rectangle') {
69
+ return null;
70
+ }
71
+ return (
72
+ <div className="border-b border-zinc-200">
73
+ <div className="w-full flex justify-between items-center gap-3 p-4 py-3">
74
+ <div className="cursor-pointer hover:no-underline items-center py-0">
75
+ <span className="text-xs font-noto-sans-mono font-light">Fill</span>
76
+ </div>
77
+ <ToggleIconButton
78
+ kind="toggle"
79
+ icon={<Eye size={12} />}
80
+ pressedIcon={<EyeOff size={12} />}
81
+ pressed={actualNode.props.fillEnabled ?? true}
82
+ onClick={(e) => {
83
+ e.stopPropagation();
84
+ const updatedNode: WeaveStateElement = {
85
+ ...actualNode,
86
+ props: {
87
+ ...actualNode.props,
88
+ fillEnabled: !(actualNode.props.fillEnabled ?? true),
89
+ },
90
+ };
91
+ updateElement(updatedNode);
92
+ }}
93
+ />
94
+ </div>
95
+ <div className="px-4 pb-4">
96
+ <div className="grid grid-cols-1 gap-3 w-full">
97
+ <InputColor
98
+ label="Color (#RGBA)"
99
+ value={`${(actualNode.props.fill ?? '#000000FF').replace('#', '')}`}
100
+ onChange={(value) => {
101
+ const updatedNode: WeaveStateElement = {
102
+ ...actualNode,
103
+ props: {
104
+ ...actualNode.props,
105
+ fill: `#${value}`,
106
+ },
107
+ };
108
+ updateElement(updatedNode);
109
+ }}
110
+ />
111
+ </div>
112
+ </div>
113
+ </div>
114
+ );
115
+ }
@@ -0,0 +1,100 @@
1
+ 'use client';
2
+
3
+ import React from 'react';
4
+ import { WeaveStateElement } from '@inditextech/weave-types';
5
+ import { useWeave } from '@inditextech/weave-react';
6
+ import { useCollaborationRoom } from '@/store/store';
7
+ import { InputText } from '../inputs/input-text';
8
+
9
+ export function FrameProperties() {
10
+ const instance = useWeave((state) => state.instance);
11
+ const node = useWeave((state) => state.selection.node);
12
+ const actualAction = useWeave((state) => state.actions.actual);
13
+
14
+ const nodePropertiesAction = useCollaborationRoom(
15
+ (state) => state.nodeProperties.action
16
+ );
17
+
18
+ const nodeCreateProps = useCollaborationRoom(
19
+ (state) => state.nodeProperties.createProps
20
+ );
21
+
22
+ const [actualNode, setActualNode] = React.useState<
23
+ WeaveStateElement | undefined
24
+ >(node);
25
+
26
+ React.useEffect(() => {
27
+ if (!instance) return;
28
+ if (actualAction && nodePropertiesAction === 'create') {
29
+ setActualNode({
30
+ key: 'creating',
31
+ type: 'undefined',
32
+ props: {
33
+ ...nodeCreateProps,
34
+ },
35
+ });
36
+ }
37
+ if (node && nodePropertiesAction === 'update') {
38
+ setActualNode(node);
39
+ }
40
+ if (!actualAction && !node) {
41
+ setActualNode(undefined);
42
+ }
43
+ }, [instance, actualAction, node, nodePropertiesAction, nodeCreateProps]);
44
+
45
+ const updateElement = React.useCallback(
46
+ (updatedNode: WeaveStateElement) => {
47
+ if (!instance) return;
48
+ if (actualAction && nodePropertiesAction === 'create') {
49
+ instance.updatePropsAction(actualAction, updatedNode.props);
50
+ }
51
+ if (nodePropertiesAction === 'update') {
52
+ instance.updateNode(updatedNode);
53
+ }
54
+ },
55
+ [instance, actualAction, nodePropertiesAction]
56
+ );
57
+
58
+ if (!instance || !actualNode) return null;
59
+
60
+ if (!actualAction && !actualNode) return null;
61
+
62
+ if (
63
+ actualAction &&
64
+ ['selectionTool'].includes(actualAction) &&
65
+ !['frame'].includes(actualNode.type)
66
+ ) {
67
+ return null;
68
+ }
69
+
70
+ if (actualAction && !['selectionTool', 'frameTool'].includes(actualAction))
71
+ return null;
72
+
73
+ return (
74
+ <div className="border-b border-zinc-200">
75
+ <div className="w-full flex justify-between items-center gap-3 p-4 py-3">
76
+ <div className="cursor-pointer hover:no-underline items-center py-0">
77
+ <span className="text-xs font-noto-sans-mono font-light">Frame</span>
78
+ </div>
79
+ </div>
80
+ <div className="px-4 pb-4">
81
+ <div className="grid grid-cols-1 gap-3 w-full">
82
+ <InputText
83
+ label="Title"
84
+ value={`${actualNode.props.title ?? 'Frame XXX'}`}
85
+ onChange={(value) => {
86
+ const updatedNode: WeaveStateElement = {
87
+ ...actualNode,
88
+ props: {
89
+ ...actualNode.props,
90
+ title: value,
91
+ },
92
+ };
93
+ updateElement(updatedNode);
94
+ }}
95
+ />
96
+ </div>
97
+ </div>
98
+ </div>
99
+ );
100
+ }
@@ -0,0 +1,57 @@
1
+ 'use client';
2
+
3
+ import React from 'react';
4
+ import { WeaveStateElement } from '@inditextech/weave-types';
5
+ import { InputNumber } from '../inputs/input-number';
6
+ import { useWeave } from '@inditextech/weave-react';
7
+ import { useCollaborationRoom } from '@/store/store';
8
+
9
+ export function ImageProperties() {
10
+ const instance = useWeave((state) => state.instance);
11
+ const node = useWeave((state) => state.selection.node);
12
+ const actualAction = useWeave((state) => state.actions.actual);
13
+
14
+ const nodePropertiesAction = useCollaborationRoom(
15
+ (state) => state.nodeProperties.action
16
+ );
17
+
18
+ const nodeCreateProps = useCollaborationRoom(
19
+ (state) => state.nodeProperties.createProps
20
+ );
21
+
22
+ const [actualNode, setActualNode] = React.useState<
23
+ WeaveStateElement | undefined
24
+ >(node);
25
+
26
+ React.useEffect(() => {
27
+ if (!instance) return;
28
+ if (node && nodePropertiesAction === 'update') {
29
+ setActualNode(node);
30
+ }
31
+ }, [instance, actualAction, node, nodePropertiesAction, nodeCreateProps]);
32
+
33
+ if (!instance || !actualNode) return null;
34
+
35
+ if (!['image'].includes(actualNode.type)) {
36
+ return null;
37
+ }
38
+
39
+ return (
40
+ <div className="border-b border-zinc-200">
41
+ <div className="px-4 py-4">
42
+ <div className="grid grid-cols-2 gap-3 w-full">
43
+ <InputNumber
44
+ label="Width (px)"
45
+ value={actualNode.props.imageInfo.width}
46
+ disabled={true}
47
+ />
48
+ <InputNumber
49
+ label="Height (px)"
50
+ value={actualNode.props.imageInfo.height}
51
+ disabled={true}
52
+ />
53
+ </div>
54
+ </div>
55
+ </div>
56
+ );
57
+ }
@@ -0,0 +1,156 @@
1
+ 'use client';
2
+
3
+ import React from 'react';
4
+ // import { Pin, PinOff } from "lucide-react";
5
+ import { WeaveStateElement } from '@inditextech/weave-types';
6
+ import { InputNumber } from '../inputs/input-number';
7
+ // import { ToggleIconButton } from "../toggle-icon-button";
8
+ import { useWeave } from '@inditextech/weave-react';
9
+ import { useCollaborationRoom } from '@/store/store';
10
+
11
+ export function PositionProperties() {
12
+ const instance = useWeave((state) => state.instance);
13
+ const node = useWeave((state) => state.selection.node);
14
+
15
+ const nodePropertiesAction = useCollaborationRoom(
16
+ (state) => state.nodeProperties.action
17
+ );
18
+
19
+ const updateElement = React.useCallback(
20
+ (updatedNode: WeaveStateElement) => {
21
+ if (!instance) return;
22
+ if (nodePropertiesAction === 'update') {
23
+ instance.updateNode(updatedNode);
24
+ return;
25
+ }
26
+ },
27
+ [instance, nodePropertiesAction]
28
+ );
29
+
30
+ const onRotationChange = React.useCallback(
31
+ (value: number) => {
32
+ if (!instance || !node) return;
33
+
34
+ function degToRad(angle: number) {
35
+ return (angle / 180) * Math.PI;
36
+ }
37
+
38
+ function getCenter(shape: WeaveStateElement) {
39
+ const angleRad = degToRad(shape.props.rotation || 0);
40
+ return {
41
+ x:
42
+ (shape.props.x || 0) +
43
+ ((shape.props.width || 0) / 2) * Math.cos(angleRad) +
44
+ ((shape.props.height || 0) / 2) * Math.sin(-angleRad),
45
+ y:
46
+ (shape.props.y || 0) +
47
+ ((shape.props.height || 0) / 2) * Math.cos(angleRad) +
48
+ ((shape.props.width || 0) / 2) * Math.sin(angleRad),
49
+ };
50
+ }
51
+
52
+ function rotateAroundPoint(
53
+ shape: WeaveStateElement,
54
+ deltaDeg: number,
55
+ point: { x: number; y: number }
56
+ ) {
57
+ const angleRad = degToRad(deltaDeg);
58
+ const x = Math.round(
59
+ point.x +
60
+ ((shape.props.x || 0) - point.x) * Math.cos(angleRad) -
61
+ ((shape.props.y || 0) - point.y) * Math.sin(angleRad)
62
+ );
63
+ const y = Math.round(
64
+ point.y +
65
+ ((shape.props.x || 0) - point.x) * Math.sin(angleRad) +
66
+ ((shape.props.y || 0) - point.y) * Math.cos(angleRad)
67
+ );
68
+ return {
69
+ ...shape,
70
+ props: {
71
+ ...shape.props,
72
+ rotation: Math.round((shape.props.rotation || 0) + deltaDeg),
73
+ x,
74
+ y,
75
+ },
76
+ };
77
+ }
78
+
79
+ function rotateAroundCenter(shape: WeaveStateElement, deltaDeg: number) {
80
+ const center = getCenter(shape);
81
+ return rotateAroundPoint(shape, deltaDeg, center);
82
+ }
83
+
84
+ if (!node) return;
85
+
86
+ let updatedNode = {
87
+ ...node,
88
+ };
89
+ updatedNode = rotateAroundCenter(
90
+ updatedNode,
91
+ value - (updatedNode.props.rotation || 0)
92
+ );
93
+ updateElement(updatedNode);
94
+ },
95
+ [instance, node, updateElement]
96
+ );
97
+
98
+ if (nodePropertiesAction === 'create') {
99
+ return null;
100
+ }
101
+
102
+ if (!instance || !node) {
103
+ return null;
104
+ }
105
+
106
+ return (
107
+ <div className="border-b border-zinc-200">
108
+ <div className="w-full flex justify-between items-center gap-3 p-4 py-3">
109
+ <div className="cursor-pointer hover:no-underline items-center py-0">
110
+ <span className="text-xs font-noto-sans-mono font-light">
111
+ Position
112
+ </span>
113
+ </div>
114
+ </div>
115
+ <div className="px-4 pb-4">
116
+ <div className="grid grid-cols-1 gap-3 w-full">
117
+ <div className="grid grid-cols-2 gap-3 w-full">
118
+ <InputNumber
119
+ label="X (px)"
120
+ value={node.props.x ?? 0}
121
+ onChange={(value) => {
122
+ const updatedNode = {
123
+ ...node,
124
+ props: {
125
+ ...node.props,
126
+ x: value,
127
+ },
128
+ };
129
+ updateElement(updatedNode);
130
+ }}
131
+ />
132
+ <InputNumber
133
+ label="Y (px)"
134
+ value={node.props.y ?? 0}
135
+ onChange={(value) => {
136
+ const updatedNode = {
137
+ ...node,
138
+ props: {
139
+ ...node.props,
140
+ y: value,
141
+ },
142
+ };
143
+ updateElement(updatedNode);
144
+ }}
145
+ />
146
+ </div>
147
+ <InputNumber
148
+ label="Rotation (deg)"
149
+ value={node.props.rotation ?? 0}
150
+ onChange={onRotationChange}
151
+ />
152
+ </div>
153
+ </div>
154
+ </div>
155
+ );
156
+ }