@solidxai/core-ui 0.1.5-beta.8 → 0.1.6

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 (300) hide show
  1. package/dist/components/auth/AuthTabs.d.ts +14 -0
  2. package/dist/components/auth/AuthTabs.d.ts.map +1 -0
  3. package/dist/components/auth/AuthTabs.js +19 -0
  4. package/dist/components/auth/AuthTabs.js.map +1 -0
  5. package/dist/components/auth/AuthTabs.tsx +38 -0
  6. package/dist/components/auth/GoogleAuthChecking.d.ts.map +1 -1
  7. package/dist/components/auth/GoogleAuthChecking.js +10 -10
  8. package/dist/components/auth/GoogleAuthChecking.js.map +1 -1
  9. package/dist/components/auth/GoogleAuthChecking.tsx +8 -9
  10. package/dist/components/auth/SolidChangeForcePassword.d.ts.map +1 -1
  11. package/dist/components/auth/SolidChangeForcePassword.js +9 -10
  12. package/dist/components/auth/SolidChangeForcePassword.js.map +1 -1
  13. package/dist/components/auth/SolidChangeForcePassword.tsx +6 -9
  14. package/dist/components/auth/SolidForgotPassword.d.ts.map +1 -1
  15. package/dist/components/auth/SolidForgotPassword.js +8 -8
  16. package/dist/components/auth/SolidForgotPassword.js.map +1 -1
  17. package/dist/components/auth/SolidForgotPassword.tsx +6 -8
  18. package/dist/components/auth/SolidInitialLoginOtp.d.ts.map +1 -1
  19. package/dist/components/auth/SolidInitialLoginOtp.js +57 -57
  20. package/dist/components/auth/SolidInitialLoginOtp.js.map +1 -1
  21. package/dist/components/auth/SolidInitialLoginOtp.tsx +10 -11
  22. package/dist/components/auth/SolidInitiateRegisterOtp.d.ts.map +1 -1
  23. package/dist/components/auth/SolidInitiateRegisterOtp.js +57 -57
  24. package/dist/components/auth/SolidInitiateRegisterOtp.js.map +1 -1
  25. package/dist/components/auth/SolidInitiateRegisterOtp.tsx +10 -11
  26. package/dist/components/auth/SolidLogin.d.ts.map +1 -1
  27. package/dist/components/auth/SolidLogin.js +12 -12
  28. package/dist/components/auth/SolidLogin.js.map +1 -1
  29. package/dist/components/auth/SolidLogin.tsx +11 -16
  30. package/dist/components/auth/SolidRegister.d.ts.map +1 -1
  31. package/dist/components/auth/SolidRegister.js +19 -19
  32. package/dist/components/auth/SolidRegister.js.map +1 -1
  33. package/dist/components/auth/SolidRegister.tsx +18 -23
  34. package/dist/components/auth/SolidResetPassword.d.ts.map +1 -1
  35. package/dist/components/auth/SolidResetPassword.js +15 -15
  36. package/dist/components/auth/SolidResetPassword.js.map +1 -1
  37. package/dist/components/auth/SolidResetPassword.tsx +7 -8
  38. package/dist/components/common/GeneralSettings.d.ts.map +1 -1
  39. package/dist/components/common/GeneralSettings.js +87 -120
  40. package/dist/components/common/GeneralSettings.js.map +1 -1
  41. package/dist/components/common/GeneralSettings.tsx +12 -42
  42. package/dist/components/common/GlobalToast.d.ts +2 -0
  43. package/dist/components/common/GlobalToast.d.ts.map +1 -0
  44. package/dist/components/common/GlobalToast.js +25 -0
  45. package/dist/components/common/GlobalToast.js.map +1 -0
  46. package/dist/components/common/GlobalToast.tsx +25 -0
  47. package/dist/components/common/SolidErrorStatePage.d.ts +12 -0
  48. package/dist/components/common/SolidErrorStatePage.d.ts.map +1 -0
  49. package/dist/components/common/SolidErrorStatePage.js +16 -0
  50. package/dist/components/common/SolidErrorStatePage.js.map +1 -0
  51. package/dist/components/common/SolidErrorStatePage.tsx +55 -0
  52. package/dist/components/common/SolidExport.d.ts.map +1 -1
  53. package/dist/components/common/SolidExport.js +19 -31
  54. package/dist/components/common/SolidExport.js.map +1 -1
  55. package/dist/components/common/SolidExport.tsx +7 -19
  56. package/dist/components/common/SolidFormStepper.d.ts.map +1 -1
  57. package/dist/components/common/SolidFormStepper.js +41 -41
  58. package/dist/components/common/SolidFormStepper.js.map +1 -1
  59. package/dist/components/common/SolidFormStepper.tsx +5 -6
  60. package/dist/components/core/chatter/SolidChatterDateDivider.d.ts.map +1 -1
  61. package/dist/components/core/chatter/SolidChatterDateDivider.js +4 -1
  62. package/dist/components/core/chatter/SolidChatterDateDivider.js.map +1 -1
  63. package/dist/components/core/chatter/SolidChatterDateDivider.tsx +5 -1
  64. package/dist/components/core/common/SolidAccountSettings/SolidChangePassword.d.ts.map +1 -1
  65. package/dist/components/core/common/SolidAccountSettings/SolidChangePassword.js +9 -9
  66. package/dist/components/core/common/SolidAccountSettings/SolidChangePassword.js.map +1 -1
  67. package/dist/components/core/common/SolidAccountSettings/SolidChangePassword.tsx +8 -9
  68. package/dist/components/core/common/SolidAccountSettings/SolidNotifications.d.ts.map +1 -1
  69. package/dist/components/core/common/SolidAccountSettings/SolidNotifications.js +8 -8
  70. package/dist/components/core/common/SolidAccountSettings/SolidNotifications.js.map +1 -1
  71. package/dist/components/core/common/SolidAccountSettings/SolidNotifications.tsx +7 -9
  72. package/dist/components/core/common/SolidAccountSettings/SolidPersonalInfo.d.ts.map +1 -1
  73. package/dist/components/core/common/SolidAccountSettings/SolidPersonalInfo.js +11 -11
  74. package/dist/components/core/common/SolidAccountSettings/SolidPersonalInfo.js.map +1 -1
  75. package/dist/components/core/common/SolidAccountSettings/SolidPersonalInfo.tsx +10 -11
  76. package/dist/components/core/common/SolidGenericImport/SolidImportDropzone.d.ts.map +1 -1
  77. package/dist/components/core/common/SolidGenericImport/SolidImportDropzone.js +9 -9
  78. package/dist/components/core/common/SolidGenericImport/SolidImportDropzone.js.map +1 -1
  79. package/dist/components/core/common/SolidGenericImport/SolidImportDropzone.tsx +8 -9
  80. package/dist/components/core/common/SolidGenericImport/SolidImportTransaction.d.ts.map +1 -1
  81. package/dist/components/core/common/SolidGenericImport/SolidImportTransaction.js +7 -7
  82. package/dist/components/core/common/SolidGenericImport/SolidImportTransaction.js.map +1 -1
  83. package/dist/components/core/common/SolidGenericImport/SolidImportTransaction.tsx +6 -7
  84. package/dist/components/core/common/SolidGlobalSearchElement.d.ts.map +1 -1
  85. package/dist/components/core/common/SolidGlobalSearchElement.js +78 -21
  86. package/dist/components/core/common/SolidGlobalSearchElement.js.map +1 -1
  87. package/dist/components/core/common/SolidGlobalSearchElement.tsx +65 -10
  88. package/dist/components/core/extension/solid-core/modelMetadata/list/DeleteModelRowAction.d.ts.map +1 -1
  89. package/dist/components/core/extension/solid-core/modelMetadata/list/DeleteModelRowAction.js +6 -8
  90. package/dist/components/core/extension/solid-core/modelMetadata/list/DeleteModelRowAction.js.map +1 -1
  91. package/dist/components/core/extension/solid-core/modelMetadata/list/DeleteModelRowAction.tsx +5 -9
  92. package/dist/components/core/extension/solid-core/modelMetadata/list/GenerateModelCodeRowAction.d.ts.map +1 -1
  93. package/dist/components/core/extension/solid-core/modelMetadata/list/GenerateModelCodeRowAction.js +9 -11
  94. package/dist/components/core/extension/solid-core/modelMetadata/list/GenerateModelCodeRowAction.js.map +1 -1
  95. package/dist/components/core/extension/solid-core/modelMetadata/list/GenerateModelCodeRowAction.tsx +5 -10
  96. package/dist/components/core/extension/solid-core/moduleMetadata/list/DeleteModuleRowAction.d.ts.map +1 -1
  97. package/dist/components/core/extension/solid-core/moduleMetadata/list/DeleteModuleRowAction.js +5 -6
  98. package/dist/components/core/extension/solid-core/moduleMetadata/list/DeleteModuleRowAction.js.map +1 -1
  99. package/dist/components/core/extension/solid-core/moduleMetadata/list/DeleteModuleRowAction.tsx +5 -8
  100. package/dist/components/core/extension/solid-core/moduleMetadata/list/GenerateModuleCodeRowAction.d.ts.map +1 -1
  101. package/dist/components/core/extension/solid-core/moduleMetadata/list/GenerateModuleCodeRowAction.js +10 -12
  102. package/dist/components/core/extension/solid-core/moduleMetadata/list/GenerateModuleCodeRowAction.js.map +1 -1
  103. package/dist/components/core/extension/solid-core/moduleMetadata/list/GenerateModuleCodeRowAction.tsx +6 -11
  104. package/dist/components/core/extension/solid-core/roleMetadata/RolePermissionsManyToManyFieldWidget.d.ts.map +1 -1
  105. package/dist/components/core/extension/solid-core/roleMetadata/RolePermissionsManyToManyFieldWidget.js +11 -6
  106. package/dist/components/core/extension/solid-core/roleMetadata/RolePermissionsManyToManyFieldWidget.js.map +1 -1
  107. package/dist/components/core/extension/solid-core/roleMetadata/RolePermissionsManyToManyFieldWidget.tsx +13 -1
  108. package/dist/components/core/form/SolidFormUserViewLayout.d.ts.map +1 -1
  109. package/dist/components/core/form/SolidFormUserViewLayout.js +7 -8
  110. package/dist/components/core/form/SolidFormUserViewLayout.js.map +1 -1
  111. package/dist/components/core/form/SolidFormUserViewLayout.tsx +5 -7
  112. package/dist/components/core/form/SolidFormView.d.ts.map +1 -1
  113. package/dist/components/core/form/SolidFormView.js +12 -21
  114. package/dist/components/core/form/SolidFormView.js.map +1 -1
  115. package/dist/components/core/form/SolidFormView.tsx +11 -33
  116. package/dist/components/core/form/fields/SolidMediaSingleField.d.ts.map +1 -1
  117. package/dist/components/core/form/fields/SolidMediaSingleField.js +22 -15
  118. package/dist/components/core/form/fields/SolidMediaSingleField.js.map +1 -1
  119. package/dist/components/core/form/fields/SolidMediaSingleField.tsx +14 -2
  120. package/dist/components/core/form/fields/relations/SolidRelationManyToManyField.d.ts.map +1 -1
  121. package/dist/components/core/form/fields/relations/SolidRelationManyToManyField.js +37 -26
  122. package/dist/components/core/form/fields/relations/SolidRelationManyToManyField.js.map +1 -1
  123. package/dist/components/core/form/fields/relations/SolidRelationManyToManyField.tsx +38 -5
  124. package/dist/components/core/form/fields/relations/SolidRelationManyToOneField.d.ts.map +1 -1
  125. package/dist/components/core/form/fields/relations/SolidRelationManyToOneField.js +11 -11
  126. package/dist/components/core/form/fields/relations/SolidRelationManyToOneField.js.map +1 -1
  127. package/dist/components/core/form/fields/relations/SolidRelationManyToOneField.tsx +9 -11
  128. package/dist/components/core/kanban/KanbanUserViewLayout.d.ts.map +1 -1
  129. package/dist/components/core/kanban/KanbanUserViewLayout.js +7 -8
  130. package/dist/components/core/kanban/KanbanUserViewLayout.js.map +1 -1
  131. package/dist/components/core/kanban/KanbanUserViewLayout.tsx +4 -6
  132. package/dist/components/core/kanban/SolidKanbanView.d.ts.map +1 -1
  133. package/dist/components/core/kanban/SolidKanbanView.js +5 -7
  134. package/dist/components/core/kanban/SolidKanbanView.js.map +1 -1
  135. package/dist/components/core/kanban/SolidKanbanView.tsx +4 -9
  136. package/dist/components/core/list/PLAN.md +92 -0
  137. package/dist/components/core/list/SolidColumnSelector/SolidListColumnSelector.d.ts.map +1 -1
  138. package/dist/components/core/list/SolidColumnSelector/SolidListColumnSelector.js +13 -13
  139. package/dist/components/core/list/SolidColumnSelector/SolidListColumnSelector.js.map +1 -1
  140. package/dist/components/core/list/SolidColumnSelector/SolidListColumnSelector.tsx +5 -6
  141. package/dist/components/core/list/SolidDataTable.d.ts +58 -0
  142. package/dist/components/core/list/SolidDataTable.d.ts.map +1 -0
  143. package/dist/components/core/list/SolidDataTable.js +141 -0
  144. package/dist/components/core/list/SolidDataTable.js.map +1 -0
  145. package/dist/components/core/list/SolidDataTable.tsx +314 -0
  146. package/dist/components/core/list/SolidListView.d.ts.map +1 -1
  147. package/dist/components/core/list/SolidListView.js +20 -67
  148. package/dist/components/core/list/SolidListView.js.map +1 -1
  149. package/dist/components/core/list/SolidListView.tsx +9 -76
  150. package/dist/components/core/model/CreateModel.d.ts.map +1 -1
  151. package/dist/components/core/model/CreateModel.js +15 -25
  152. package/dist/components/core/model/CreateModel.js.map +1 -1
  153. package/dist/components/core/model/CreateModel.tsx +12 -32
  154. package/dist/components/core/model/FieldMetaData.d.ts.map +1 -1
  155. package/dist/components/core/model/FieldMetaData.js +6 -17
  156. package/dist/components/core/model/FieldMetaData.js.map +1 -1
  157. package/dist/components/core/model/FieldMetaData.tsx +5 -26
  158. package/dist/components/core/model/ModelMetaData.d.ts.map +1 -1
  159. package/dist/components/core/model/ModelMetaData.js +48 -55
  160. package/dist/components/core/model/ModelMetaData.js.map +1 -1
  161. package/dist/components/core/model/ModelMetaData.tsx +4 -22
  162. package/dist/components/core/module/CreateModule.d.ts.map +1 -1
  163. package/dist/components/core/module/CreateModule.js +42 -44
  164. package/dist/components/core/module/CreateModule.js.map +1 -1
  165. package/dist/components/core/module/CreateModule.tsx +13 -27
  166. package/dist/components/core/module/ModuleListViewData.d.ts.map +1 -1
  167. package/dist/components/core/module/ModuleListViewData.js +11 -7
  168. package/dist/components/core/module/ModuleListViewData.js.map +1 -1
  169. package/dist/components/core/module/ModuleListViewData.tsx +10 -8
  170. package/dist/components/core/solid-ai/SolidAiChat.d.ts +3 -0
  171. package/dist/components/core/solid-ai/SolidAiChat.d.ts.map +1 -0
  172. package/dist/components/core/solid-ai/SolidAiChat.js +1043 -0
  173. package/dist/components/core/solid-ai/SolidAiChat.js.map +1 -0
  174. package/dist/components/core/solid-ai/SolidAiChat.module.css +1339 -0
  175. package/dist/components/core/solid-ai/SolidAiChat.tsx +1237 -0
  176. package/dist/components/core/tree/SolidTreeView.d.ts.map +1 -1
  177. package/dist/components/core/tree/SolidTreeView.js +32 -69
  178. package/dist/components/core/tree/SolidTreeView.js.map +1 -1
  179. package/dist/components/core/tree/SolidTreeView.tsx +8 -47
  180. package/dist/components/core/users/CreateUser.d.ts.map +1 -1
  181. package/dist/components/core/users/CreateUser.js +24 -37
  182. package/dist/components/core/users/CreateUser.js.map +1 -1
  183. package/dist/components/core/users/CreateUser.tsx +8 -46
  184. package/dist/components/core/users/UserListView.d.ts.map +1 -1
  185. package/dist/components/core/users/UserListView.js +9 -16
  186. package/dist/components/core/users/UserListView.js.map +1 -1
  187. package/dist/components/core/users/UserListView.tsx +5 -21
  188. package/dist/components/layout/AdminLayout.d.ts.map +1 -1
  189. package/dist/components/layout/AdminLayout.js +4 -2
  190. package/dist/components/layout/AdminLayout.js.map +1 -1
  191. package/dist/components/layout/AdminLayout.tsx +4 -2
  192. package/dist/components/layout/AdminTopHeader.d.ts +2 -0
  193. package/dist/components/layout/AdminTopHeader.d.ts.map +1 -0
  194. package/dist/components/layout/AdminTopHeader.js +80 -0
  195. package/dist/components/layout/AdminTopHeader.js.map +1 -0
  196. package/dist/components/layout/AdminTopHeader.tsx +165 -0
  197. package/dist/components/layout/AppSidebar.d.ts.map +1 -1
  198. package/dist/components/layout/AppSidebar.js +1 -2
  199. package/dist/components/layout/AppSidebar.js.map +1 -1
  200. package/dist/components/layout/AppSidebar.tsx +0 -2
  201. package/dist/components/layout/Layout.d.ts.map +1 -1
  202. package/dist/components/layout/Layout.js +2 -1
  203. package/dist/components/layout/Layout.js.map +1 -1
  204. package/dist/components/layout/Layout.tsx +2 -0
  205. package/dist/components/layout/SolidAiStudioLayout.d.ts +10 -0
  206. package/dist/components/layout/SolidAiStudioLayout.d.ts.map +1 -0
  207. package/dist/components/layout/SolidAiStudioLayout.js +159 -0
  208. package/dist/components/layout/SolidAiStudioLayout.js.map +1 -0
  209. package/dist/components/layout/SolidAiStudioLayout.tsx +333 -0
  210. package/dist/components/layout/navbar-one.d.ts.map +1 -1
  211. package/dist/components/layout/navbar-one.js +1 -2
  212. package/dist/components/layout/navbar-one.js.map +1 -1
  213. package/dist/components/layout/navbar-one.tsx +0 -2
  214. package/dist/components/layout/navbar-two-menu.d.ts.map +1 -1
  215. package/dist/components/layout/navbar-two-menu.js +50 -24
  216. package/dist/components/layout/navbar-two-menu.js.map +1 -1
  217. package/dist/components/layout/navbar-two-menu.tsx +48 -30
  218. package/dist/components/shad-cn-ui/SolidAutocomplete.d.ts +24 -0
  219. package/dist/components/shad-cn-ui/SolidAutocomplete.d.ts.map +1 -0
  220. package/dist/components/shad-cn-ui/SolidAutocomplete.js +224 -0
  221. package/dist/components/shad-cn-ui/SolidAutocomplete.js.map +1 -0
  222. package/dist/components/shad-cn-ui/SolidAutocomplete.tsx +339 -0
  223. package/dist/components/shad-cn-ui/SolidButton.d.ts +14 -0
  224. package/dist/components/shad-cn-ui/SolidButton.d.ts.map +1 -0
  225. package/dist/components/shad-cn-ui/SolidButton.js +36 -0
  226. package/dist/components/shad-cn-ui/SolidButton.js.map +1 -0
  227. package/dist/components/shad-cn-ui/SolidButton.tsx +54 -0
  228. package/dist/components/shad-cn-ui/SolidInput.d.ts +5 -0
  229. package/dist/components/shad-cn-ui/SolidInput.d.ts.map +1 -0
  230. package/dist/components/shad-cn-ui/SolidInput.js +35 -0
  231. package/dist/components/shad-cn-ui/SolidInput.js.map +1 -0
  232. package/dist/components/shad-cn-ui/SolidInput.tsx +12 -0
  233. package/dist/components/shad-cn-ui/SolidNumberInput.d.ts +10 -0
  234. package/dist/components/shad-cn-ui/SolidNumberInput.d.ts.map +1 -0
  235. package/dist/components/shad-cn-ui/SolidNumberInput.js +33 -0
  236. package/dist/components/shad-cn-ui/SolidNumberInput.js.map +1 -0
  237. package/dist/components/shad-cn-ui/SolidNumberInput.tsx +24 -0
  238. package/dist/components/shad-cn-ui/SolidSelect.d.ts +16 -0
  239. package/dist/components/shad-cn-ui/SolidSelect.d.ts.map +1 -0
  240. package/dist/components/shad-cn-ui/SolidSelect.js +26 -0
  241. package/dist/components/shad-cn-ui/SolidSelect.js.map +1 -0
  242. package/dist/components/shad-cn-ui/SolidSelect.tsx +65 -0
  243. package/dist/components/shad-cn-ui/SolidTabs.d.ts +18 -0
  244. package/dist/components/shad-cn-ui/SolidTabs.d.ts.map +1 -0
  245. package/dist/components/shad-cn-ui/SolidTabs.js +22 -0
  246. package/dist/components/shad-cn-ui/SolidTabs.js.map +1 -0
  247. package/dist/components/shad-cn-ui/SolidTabs.tsx +73 -0
  248. package/dist/components/shad-cn-ui/index.d.ts +7 -0
  249. package/dist/components/shad-cn-ui/index.d.ts.map +1 -0
  250. package/dist/components/shad-cn-ui/index.js +7 -0
  251. package/dist/components/shad-cn-ui/index.js.map +1 -0
  252. package/dist/components/shad-cn-ui/index.ts +6 -0
  253. package/dist/helpers/studioSandbox.d.ts +31 -0
  254. package/dist/helpers/studioSandbox.d.ts.map +1 -0
  255. package/dist/helpers/studioSandbox.js +104 -0
  256. package/dist/helpers/studioSandbox.js.map +1 -0
  257. package/dist/helpers/studioSandbox.ts +117 -0
  258. package/dist/index.d.ts +4 -0
  259. package/dist/index.d.ts.map +1 -1
  260. package/dist/index.js +3 -0
  261. package/dist/index.js.map +1 -1
  262. package/dist/index.ts +4 -0
  263. package/dist/redux/features/solidStudioSlice.d.ts +9 -0
  264. package/dist/redux/features/solidStudioSlice.d.ts.map +1 -0
  265. package/dist/redux/features/solidStudioSlice.js +72 -0
  266. package/dist/redux/features/solidStudioSlice.js.map +1 -0
  267. package/dist/redux/features/solidStudioSlice.ts +78 -0
  268. package/dist/redux/features/toastSlice.d.ts +15 -0
  269. package/dist/redux/features/toastSlice.d.ts.map +1 -0
  270. package/dist/redux/features/toastSlice.js +20 -0
  271. package/dist/redux/features/toastSlice.js.map +1 -0
  272. package/dist/redux/features/toastSlice.ts +35 -0
  273. package/dist/redux/store/defaultStoreConfig.d.ts +1 -0
  274. package/dist/redux/store/defaultStoreConfig.d.ts.map +1 -1
  275. package/dist/redux/store/defaultStoreConfig.js +2 -1
  276. package/dist/redux/store/defaultStoreConfig.js.map +1 -1
  277. package/dist/redux/store/defaultStoreConfig.ts +2 -0
  278. package/dist/resources/images/errors/error-astronaut-404.png +0 -0
  279. package/dist/resources/shadcn-base.css +4171 -0
  280. package/dist/routes/SolidLayoutRegistry.d.ts +51 -0
  281. package/dist/routes/SolidLayoutRegistry.d.ts.map +1 -0
  282. package/dist/routes/SolidLayoutRegistry.js +108 -0
  283. package/dist/routes/SolidLayoutRegistry.js.map +1 -0
  284. package/dist/routes/SolidLayoutRegistry.tsx +157 -0
  285. package/dist/routes/guards/AdminGuard.d.ts +2 -0
  286. package/dist/routes/guards/AdminGuard.d.ts.map +1 -0
  287. package/dist/routes/guards/AdminGuard.js +16 -0
  288. package/dist/routes/guards/AdminGuard.js.map +1 -0
  289. package/dist/routes/guards/AdminGuard.tsx +17 -0
  290. package/dist/routes/pages/studio/StudioHomePage.d.ts +2 -0
  291. package/dist/routes/pages/studio/StudioHomePage.d.ts.map +1 -0
  292. package/dist/routes/pages/studio/StudioHomePage.js +22 -0
  293. package/dist/routes/pages/studio/StudioHomePage.js.map +1 -0
  294. package/dist/routes/pages/studio/StudioHomePage.tsx +106 -0
  295. package/dist/routes/pages/studio/StudioLandingPage.d.ts +2 -0
  296. package/dist/routes/pages/studio/StudioLandingPage.d.ts.map +1 -0
  297. package/dist/routes/pages/studio/StudioLandingPage.js +78 -0
  298. package/dist/routes/pages/studio/StudioLandingPage.js.map +1 -0
  299. package/dist/routes/pages/studio/StudioLandingPage.tsx +320 -0
  300. package/package.json +1 -1
@@ -0,0 +1,78 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { useState } from "react";
3
+ import { useNavigate } from "react-router-dom";
4
+ import { useSolidLayoutRegistry } from "../../SolidLayoutRegistry";
5
+ import { ChatIcon } from "../../../components/layout/SolidAiStudioLayout";
6
+ import { env } from "../../../adapters/env";
7
+ // ── Icons ──────────────────────────────────────────────────────────────────────
8
+ var ArrowIcon = function () { return (_jsx("svg", { width: "14", height: "14", viewBox: "0 0 14 14", fill: "none", "aria-hidden": "true", children: _jsx("path", { d: "M2.5 7h9M8 3.5l3.5 3.5L8 10.5", stroke: "currentColor", strokeWidth: "1.4", strokeLinecap: "round", strokeLinejoin: "round" }) })); };
9
+ var LayoutPlaceholderIcon = function () { return (_jsxs("svg", { width: "18", height: "18", viewBox: "0 0 18 18", fill: "none", "aria-hidden": "true", children: [_jsx("rect", { x: "1", y: "1", width: "16", height: "16", rx: "2.5", stroke: "currentColor", strokeWidth: "1.3" }), _jsx("path", { d: "M1 6h16", stroke: "currentColor", strokeWidth: "1.1" }), _jsx("path", { d: "M6 6v11", stroke: "currentColor", strokeWidth: "1.1" })] })); };
10
+ var NoLayoutIcon = function () { return (_jsxs("svg", { width: "32", height: "32", viewBox: "0 0 32 32", fill: "none", "aria-hidden": "true", children: [_jsx("rect", { x: "2", y: "2", width: "28", height: "28", rx: "4", stroke: "currentColor", strokeWidth: "1.5", opacity: "0.4", strokeDasharray: "4 3" }), _jsx("path", { d: "M11 16h10M16 11v10", stroke: "currentColor", strokeWidth: "1.5", strokeLinecap: "round", opacity: "0.5" })] })); };
11
+ var GridViewIcon = function () { return (_jsxs("svg", { width: "15", height: "15", viewBox: "0 0 15 15", fill: "none", "aria-hidden": "true", children: [_jsx("rect", { x: "1", y: "1", width: "5.5", height: "5.5", rx: "1.2", stroke: "currentColor", strokeWidth: "1.3" }), _jsx("rect", { x: "8.5", y: "1", width: "5.5", height: "5.5", rx: "1.2", stroke: "currentColor", strokeWidth: "1.3" }), _jsx("rect", { x: "1", y: "8.5", width: "5.5", height: "5.5", rx: "1.2", stroke: "currentColor", strokeWidth: "1.3" }), _jsx("rect", { x: "8.5", y: "8.5", width: "5.5", height: "5.5", rx: "1.2", stroke: "currentColor", strokeWidth: "1.3" })] })); };
12
+ var ListViewIcon = function () { return (_jsxs("svg", { width: "15", height: "15", viewBox: "0 0 15 15", fill: "none", "aria-hidden": "true", children: [_jsx("rect", { x: "1", y: "2.5", width: "13", height: "2.5", rx: "1.2", stroke: "currentColor", strokeWidth: "1.3" }), _jsx("rect", { x: "1", y: "6.25", width: "13", height: "2.5", rx: "1.2", stroke: "currentColor", strokeWidth: "1.3" }), _jsx("rect", { x: "1", y: "10", width: "13", height: "2.5", rx: "1.2", stroke: "currentColor", strokeWidth: "1.3" })] })); };
13
+ // ── Per-card accent colours (cycles by index) ──────────────────────────────────
14
+ var CARD_ACCENTS = [
15
+ { bg: "hsl(224 70% 54%)", cls: "solid-studio-home-card-icon--backend" },
16
+ { bg: "hsl(158 64% 42%)", cls: "solid-studio-home-card-icon--list" },
17
+ { bg: "hsl(32 95% 48%)", cls: "solid-studio-home-card-icon--kanban" },
18
+ { bg: "hsl(270 65% 58%)", cls: "solid-studio-home-card-icon--form" },
19
+ { bg: "hsl(199 89% 48%)", cls: "solid-studio-home-card-icon--tree" },
20
+ { bg: "hsl(215 25% 52%)", cls: "solid-studio-home-card-icon--settings" },
21
+ ];
22
+ // ── Generic layout wireframe thumbnail ────────────────────────────────────────
23
+ function LayoutThumb(_a) {
24
+ var accentColor = _a.accentColor, title = _a.title;
25
+ var initials = title
26
+ .split(/\s+/)
27
+ .slice(0, 2)
28
+ .map(function (w) { var _a, _b; return (_b = (_a = w[0]) === null || _a === void 0 ? void 0 : _a.toUpperCase()) !== null && _b !== void 0 ? _b : ""; })
29
+ .join("");
30
+ return (_jsxs("svg", { className: "solid-studio-home-card-thumb", viewBox: "0 0 280 122", fill: "none", "aria-hidden": "true", children: [_jsx("rect", { width: "280", height: "122", fill: "var(--sidebar-background)" }), _jsx("rect", { width: "40", height: "122", fill: "var(--border)", opacity: "0.7" }), _jsx("rect", { x: "7", y: "14", width: "26", height: "4", rx: "2", fill: "var(--muted)", opacity: "0.45" }), _jsx("rect", { x: "7", y: "26", width: "26", height: "4", rx: "2", fill: "var(--muted)", opacity: "0.28" }), _jsx("rect", { x: "7", y: "38", width: "26", height: "4", rx: "2", fill: "var(--muted)", opacity: "0.28" }), _jsx("rect", { x: "7", y: "50", width: "26", height: "4", rx: "2", fill: "var(--muted)", opacity: "0.28" }), _jsx("rect", { x: "40", y: "0", width: "240", height: "18", fill: "var(--border)", opacity: "0.5" }), _jsx("rect", { x: "48", y: "22", width: "224", height: "28", rx: "3", fill: accentColor, opacity: "0.12" }), _jsx("rect", { x: "56", y: "30", width: "80", height: "7", rx: "2", fill: accentColor, opacity: "0.45" }), _jsx("rect", { x: "56", y: "40", width: "50", height: "4", rx: "2", fill: "var(--muted)", opacity: "0.3" }), _jsx("rect", { x: "48", y: "58", width: "70", height: "58", rx: "3", fill: "var(--card)", stroke: "var(--border)", strokeWidth: "0.8" }), _jsx("rect", { x: "126", y: "58", width: "70", height: "58", rx: "3", fill: "var(--card)", stroke: "var(--border)", strokeWidth: "0.8" }), _jsx("rect", { x: "204", y: "58", width: "68", height: "26", rx: "3", fill: "var(--card)", stroke: "var(--border)", strokeWidth: "0.8" }), _jsx("rect", { x: "204", y: "90", width: "68", height: "26", rx: "3", fill: "var(--card)", stroke: "var(--border)", strokeWidth: "0.8" }), _jsx("rect", { x: "54", y: "65", width: "48", height: "4", rx: "2", fill: "var(--muted)", opacity: "0.28" }), _jsx("rect", { x: "54", y: "73", width: "36", height: "3", rx: "2", fill: "var(--muted)", opacity: "0.2" }), _jsx("rect", { x: "132", y: "65", width: "48", height: "4", rx: "2", fill: "var(--muted)", opacity: "0.28" }), _jsx("rect", { x: "132", y: "73", width: "36", height: "3", rx: "2", fill: "var(--muted)", opacity: "0.2" }), _jsx("circle", { cx: "60", cy: "98", r: "9", fill: accentColor, opacity: "0.18" }), _jsx("text", { x: "60", y: "102", textAnchor: "middle", fontSize: "7", fontWeight: "700", fill: accentColor, opacity: "0.8", fontFamily: "system-ui, sans-serif", children: initials })] }));
31
+ }
32
+ // ── Card Components (shadcn-inspired) ────────────────────────────────────────
33
+ function Card(_a) {
34
+ var children = _a.children, _b = _a.className, className = _b === void 0 ? "" : _b;
35
+ return (_jsx("div", { className: "solid-studio-card ".concat(className), children: children }));
36
+ }
37
+ function CardHeader(_a) {
38
+ var children = _a.children, _b = _a.className, className = _b === void 0 ? "" : _b;
39
+ return _jsx("div", { className: "solid-studio-card-header ".concat(className), children: children });
40
+ }
41
+ function CardTitle(_a) {
42
+ var children = _a.children, _b = _a.className, className = _b === void 0 ? "" : _b;
43
+ return _jsx("h3", { className: "solid-studio-card-title ".concat(className), children: children });
44
+ }
45
+ function CardDescription(_a) {
46
+ var children = _a.children, _b = _a.className, className = _b === void 0 ? "" : _b;
47
+ return _jsx("p", { className: "solid-studio-card-description ".concat(className), children: children });
48
+ }
49
+ function CardContent(_a) {
50
+ var children = _a.children, _b = _a.className, className = _b === void 0 ? "" : _b;
51
+ return _jsx("div", { className: "solid-studio-card-content ".concat(className), children: children });
52
+ }
53
+ function CardFooter(_a) {
54
+ var children = _a.children, _b = _a.className, className = _b === void 0 ? "" : _b;
55
+ return _jsx("div", { className: "solid-studio-card-footer ".concat(className), children: children });
56
+ }
57
+ // ── Empty state ───────────────────────────────────────────────────────────────
58
+ function EmptyState() {
59
+ return (_jsx("div", { className: "solid-studio-landing-empty-container", children: _jsxs(Card, { className: "solid-studio-landing-empty-card", children: [_jsxs(CardHeader, { className: "solid-studio-landing-empty-header", children: [_jsx("div", { className: "solid-studio-home-badge", style: { marginBottom: '12px' }, children: "Frontend Studio" }), _jsx(CardTitle, { children: "Frontend layout will appear here" }), _jsx(CardDescription, { children: "Register your app layouts to explore and customize them in the Studio." })] }), _jsxs(CardContent, { className: "solid-studio-landing-empty-body", children: [_jsxs("div", { className: "solid-studio-landing-empty-primary-action", children: [_jsxs("p", { children: ["To get started, use the ", _jsx("strong", { children: "SolidX AI Agent" }), " to add a new custom layout."] }), _jsxs("button", { type: "button", className: "solid-studio-empty-cta-button", onClick: function () {
60
+ var aiUrl = env("VITE_SOLIDX_AI_URL");
61
+ if (aiUrl)
62
+ window.open(aiUrl, "_blank");
63
+ }, children: [_jsx(ChatIcon, {}), _jsx("span", { children: "Open AI Chat" }), _jsx(ArrowIcon, {})] })] }), _jsx("div", { className: "solid-studio-landing-empty-divider" }), _jsxs("div", { className: "solid-studio-landing-empty-details", children: [_jsxs("p", { className: "solid-studio-landing-empty-instruction", children: ["Any route with a ", _jsx("code", { children: "path" }), " and ", _jsx("code", { children: "children" }), " passed to", " ", _jsx("code", { children: "getSolidRoutes()" }), " will automatically appear as a card."] }), _jsx("div", { className: "solid-studio-landing-snippet", children: _jsx("pre", { children: _jsx("code", { children: "// AppRoutes.tsx\nconst extraRoutes = [\n {\n path: \"/my-layout\",\n element: <MyLayout />,\n children: [{ index: true, element: <MyPage /> }],\n },\n];\n\ngetSolidRoutes({ extraRoutes });" }) }) }), _jsxs("p", { className: "solid-studio-landing-hint", children: [_jsx("strong", { children: "Pro Tip:" }), " Add ", _jsxs("code", { children: ["handle: ", "{ title, description }"] }), " to a route to customize its appearance."] })] })] })] }) }));
64
+ }
65
+ // ── Card ──────────────────────────────────────────────────────────────────────
66
+ function LayoutCard(_a) {
67
+ var entry = _a.entry, index = _a.index, listView = _a.listView;
68
+ var navigate = useNavigate();
69
+ var accent = CARD_ACCENTS[index % CARD_ACCENTS.length];
70
+ return (_jsxs("button", { type: "button", className: "solid-studio-home-card".concat(listView ? " solid-studio-home-card--list" : ""), onClick: function () { return navigate(entry.to); }, "aria-label": "Open ".concat(entry.title), children: [!listView && (_jsxs("div", { className: "solid-studio-home-card-image-wrap", children: [_jsx(LayoutThumb, { accentColor: accent.bg, title: entry.title }), _jsx("div", { className: "solid-studio-home-card-image-overlay" })] })), _jsxs("div", { className: "solid-studio-home-card-body", children: [_jsx("div", { className: "solid-studio-home-card-icon ".concat(accent.cls), children: _jsx(LayoutPlaceholderIcon, {}) }), _jsxs("div", { className: "solid-studio-home-card-content", children: [_jsx("span", { className: "solid-studio-home-card-title", children: entry.title }), entry.description && (_jsx("span", { className: "solid-studio-home-card-desc", children: entry.description })), _jsx("span", { className: "solid-studio-home-card-desc", style: { opacity: 0.6, fontSize: 11 }, children: entry.to })] }), _jsxs("div", { className: "solid-studio-home-card-cta", children: [_jsx("span", { children: "Open" }), _jsx(ArrowIcon, {})] })] })] }));
71
+ }
72
+ // ── Page ──────────────────────────────────────────────────────────────────────
73
+ export function StudioLandingPage() {
74
+ var layouts = useSolidLayoutRegistry();
75
+ var _a = useState(false), listView = _a[0], setListView = _a[1];
76
+ return (_jsx("div", { className: "solid-studio-home solid-studio-home--top", children: _jsxs("div", { className: "solid-studio-home-inner solid-studio-home-inner--fluid", children: [_jsx("div", { className: "solid-studio-home-toolbar", children: layouts.length > 0 && (_jsxs("div", { className: "solid-studio-home-toolbar-right", children: [_jsx("button", { type: "button", className: "solid-studio-home-view-btn".concat(!listView ? " solid-studio-home-view-btn--active" : ""), onClick: function () { return setListView(false); }, "aria-label": "Grid view", title: "Grid view", children: _jsx(GridViewIcon, {}) }), _jsx("button", { type: "button", className: "solid-studio-home-view-btn".concat(listView ? " solid-studio-home-view-btn--active" : ""), onClick: function () { return setListView(true); }, "aria-label": "List view", title: "List view", children: _jsx(ListViewIcon, {}) })] })) }), layouts.length === 0 ? (_jsx(EmptyState, {})) : listView ? (_jsx("div", { className: "solid-studio-home-cards--list", children: layouts.map(function (entry, i) { return (_jsx(LayoutCard, { entry: entry, index: i, listView: true }, entry.path)); }) })) : (_jsx("div", { className: "solid-studio-home-cards solid-studio-home-cards--fluid", children: layouts.map(function (entry, i) { return (_jsx(LayoutCard, { entry: entry, index: i, listView: false }, entry.path)); }) }))] }) }));
77
+ }
78
+ //# sourceMappingURL=StudioLandingPage.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"StudioLandingPage.js","sourceRoot":"","sources":["../../../../src/routes/pages/studio/StudioLandingPage.tsx"],"names":[],"mappings":"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","sourcesContent":["import { useState } from \"react\";\nimport { useNavigate } from \"react-router-dom\";\nimport { useSolidLayoutRegistry } from \"../../SolidLayoutRegistry\";\nimport type { SolidLayoutEntry } from \"../../SolidLayoutRegistry\";\nimport { ChatIcon } from \"@/components/layout/SolidAiStudioLayout\";\nimport { env } from \"../../../adapters/env\";\n\n// ── Icons ──────────────────────────────────────────────────────────────────────\n\nconst ArrowIcon = () => (\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"none\" aria-hidden=\"true\">\n <path d=\"M2.5 7h9M8 3.5l3.5 3.5L8 10.5\" stroke=\"currentColor\" strokeWidth=\"1.4\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n </svg>\n);\n\nconst LayoutPlaceholderIcon = () => (\n <svg width=\"18\" height=\"18\" viewBox=\"0 0 18 18\" fill=\"none\" aria-hidden=\"true\">\n <rect x=\"1\" y=\"1\" width=\"16\" height=\"16\" rx=\"2.5\" stroke=\"currentColor\" strokeWidth=\"1.3\" />\n <path d=\"M1 6h16\" stroke=\"currentColor\" strokeWidth=\"1.1\" />\n <path d=\"M6 6v11\" stroke=\"currentColor\" strokeWidth=\"1.1\" />\n </svg>\n);\n\nconst NoLayoutIcon = () => (\n <svg width=\"32\" height=\"32\" viewBox=\"0 0 32 32\" fill=\"none\" aria-hidden=\"true\">\n <rect x=\"2\" y=\"2\" width=\"28\" height=\"28\" rx=\"4\" stroke=\"currentColor\" strokeWidth=\"1.5\" opacity=\"0.4\" strokeDasharray=\"4 3\" />\n <path d=\"M11 16h10M16 11v10\" stroke=\"currentColor\" strokeWidth=\"1.5\" strokeLinecap=\"round\" opacity=\"0.5\" />\n </svg>\n);\n\nconst GridViewIcon = () => (\n <svg width=\"15\" height=\"15\" viewBox=\"0 0 15 15\" fill=\"none\" aria-hidden=\"true\">\n <rect x=\"1\" y=\"1\" width=\"5.5\" height=\"5.5\" rx=\"1.2\" stroke=\"currentColor\" strokeWidth=\"1.3\" />\n <rect x=\"8.5\" y=\"1\" width=\"5.5\" height=\"5.5\" rx=\"1.2\" stroke=\"currentColor\" strokeWidth=\"1.3\" />\n <rect x=\"1\" y=\"8.5\" width=\"5.5\" height=\"5.5\" rx=\"1.2\" stroke=\"currentColor\" strokeWidth=\"1.3\" />\n <rect x=\"8.5\" y=\"8.5\" width=\"5.5\" height=\"5.5\" rx=\"1.2\" stroke=\"currentColor\" strokeWidth=\"1.3\" />\n </svg>\n);\n\nconst ListViewIcon = () => (\n <svg width=\"15\" height=\"15\" viewBox=\"0 0 15 15\" fill=\"none\" aria-hidden=\"true\">\n <rect x=\"1\" y=\"2.5\" width=\"13\" height=\"2.5\" rx=\"1.2\" stroke=\"currentColor\" strokeWidth=\"1.3\" />\n <rect x=\"1\" y=\"6.25\" width=\"13\" height=\"2.5\" rx=\"1.2\" stroke=\"currentColor\" strokeWidth=\"1.3\" />\n <rect x=\"1\" y=\"10\" width=\"13\" height=\"2.5\" rx=\"1.2\" stroke=\"currentColor\" strokeWidth=\"1.3\" />\n </svg>\n);\n\n// ── Per-card accent colours (cycles by index) ──────────────────────────────────\n\nconst CARD_ACCENTS = [\n { bg: \"hsl(224 70% 54%)\", cls: \"solid-studio-home-card-icon--backend\" },\n { bg: \"hsl(158 64% 42%)\", cls: \"solid-studio-home-card-icon--list\" },\n { bg: \"hsl(32 95% 48%)\", cls: \"solid-studio-home-card-icon--kanban\" },\n { bg: \"hsl(270 65% 58%)\", cls: \"solid-studio-home-card-icon--form\" },\n { bg: \"hsl(199 89% 48%)\", cls: \"solid-studio-home-card-icon--tree\" },\n { bg: \"hsl(215 25% 52%)\", cls: \"solid-studio-home-card-icon--settings\" },\n];\n\n// ── Generic layout wireframe thumbnail ────────────────────────────────────────\n\nfunction LayoutThumb({ accentColor, title }: { accentColor: string; title: string }) {\n const initials = title\n .split(/\\s+/)\n .slice(0, 2)\n .map((w) => w[0]?.toUpperCase() ?? \"\")\n .join(\"\");\n\n return (\n <svg\n className=\"solid-studio-home-card-thumb\"\n viewBox=\"0 0 280 122\"\n fill=\"none\"\n aria-hidden=\"true\"\n >\n {/* background */}\n <rect width=\"280\" height=\"122\" fill=\"var(--sidebar-background)\" />\n\n {/* sidebar */}\n <rect width=\"40\" height=\"122\" fill=\"var(--border)\" opacity=\"0.7\" />\n <rect x=\"7\" y=\"14\" width=\"26\" height=\"4\" rx=\"2\" fill=\"var(--muted)\" opacity=\"0.45\" />\n <rect x=\"7\" y=\"26\" width=\"26\" height=\"4\" rx=\"2\" fill=\"var(--muted)\" opacity=\"0.28\" />\n <rect x=\"7\" y=\"38\" width=\"26\" height=\"4\" rx=\"2\" fill=\"var(--muted)\" opacity=\"0.28\" />\n <rect x=\"7\" y=\"50\" width=\"26\" height=\"4\" rx=\"2\" fill=\"var(--muted)\" opacity=\"0.28\" />\n\n {/* top bar */}\n <rect x=\"40\" y=\"0\" width=\"240\" height=\"18\" fill=\"var(--border)\" opacity=\"0.5\" />\n\n {/* accent header band */}\n <rect x=\"48\" y=\"22\" width=\"224\" height=\"28\" rx=\"3\" fill={accentColor} opacity=\"0.12\" />\n <rect x=\"56\" y=\"30\" width=\"80\" height=\"7\" rx=\"2\" fill={accentColor} opacity=\"0.45\" />\n <rect x=\"56\" y=\"40\" width=\"50\" height=\"4\" rx=\"2\" fill=\"var(--muted)\" opacity=\"0.3\" />\n\n {/* content blocks */}\n <rect x=\"48\" y=\"58\" width=\"70\" height=\"58\" rx=\"3\" fill=\"var(--card)\" stroke=\"var(--border)\" strokeWidth=\"0.8\" />\n <rect x=\"126\" y=\"58\" width=\"70\" height=\"58\" rx=\"3\" fill=\"var(--card)\" stroke=\"var(--border)\" strokeWidth=\"0.8\" />\n <rect x=\"204\" y=\"58\" width=\"68\" height=\"26\" rx=\"3\" fill=\"var(--card)\" stroke=\"var(--border)\" strokeWidth=\"0.8\" />\n <rect x=\"204\" y=\"90\" width=\"68\" height=\"26\" rx=\"3\" fill=\"var(--card)\" stroke=\"var(--border)\" strokeWidth=\"0.8\" />\n\n {/* inner muted lines */}\n <rect x=\"54\" y=\"65\" width=\"48\" height=\"4\" rx=\"2\" fill=\"var(--muted)\" opacity=\"0.28\" />\n <rect x=\"54\" y=\"73\" width=\"36\" height=\"3\" rx=\"2\" fill=\"var(--muted)\" opacity=\"0.2\" />\n <rect x=\"132\" y=\"65\" width=\"48\" height=\"4\" rx=\"2\" fill=\"var(--muted)\" opacity=\"0.28\" />\n <rect x=\"132\" y=\"73\" width=\"36\" height=\"3\" rx=\"2\" fill=\"var(--muted)\" opacity=\"0.2\" />\n\n {/* initials badge */}\n <circle cx=\"60\" cy=\"98\" r=\"9\" fill={accentColor} opacity=\"0.18\" />\n <text\n x=\"60\"\n y=\"102\"\n textAnchor=\"middle\"\n fontSize=\"7\"\n fontWeight=\"700\"\n fill={accentColor}\n opacity=\"0.8\"\n fontFamily=\"system-ui, sans-serif\"\n >\n {initials}\n </text>\n </svg>\n );\n}\n\n// ── Card Components (shadcn-inspired) ────────────────────────────────────────\n\nfunction Card({ children, className = \"\" }: { children: React.ReactNode; className?: string }) {\n return (\n <div className={`solid-studio-card ${className}`}>\n {children}\n </div>\n );\n}\n\nfunction CardHeader({ children, className = \"\" }: { children: React.ReactNode; className?: string }) {\n return <div className={`solid-studio-card-header ${className}`}>{children}</div>;\n}\n\nfunction CardTitle({ children, className = \"\" }: { children: React.ReactNode; className?: string }) {\n return <h3 className={`solid-studio-card-title ${className}`}>{children}</h3>;\n}\n\nfunction CardDescription({ children, className = \"\" }: { children: React.ReactNode; className?: string }) {\n return <p className={`solid-studio-card-description ${className}`}>{children}</p>;\n}\n\nfunction CardContent({ children, className = \"\" }: { children: React.ReactNode; className?: string }) {\n return <div className={`solid-studio-card-content ${className}`}>{children}</div>;\n}\n\nfunction CardFooter({ children, className = \"\" }: { children: React.ReactNode; className?: string }) {\n return <div className={`solid-studio-card-footer ${className}`}>{children}</div>;\n}\n\n// ── Empty state ───────────────────────────────────────────────────────────────\n\nfunction EmptyState() {\n return (\n <div className=\"solid-studio-landing-empty-container\">\n <Card className=\"solid-studio-landing-empty-card\">\n <CardHeader className=\"solid-studio-landing-empty-header\">\n <div className=\"solid-studio-home-badge\" style={{ marginBottom: '12px' }}>Frontend Studio</div>\n <CardTitle>Frontend layout will appear here</CardTitle>\n <CardDescription>\n Register your app layouts to explore and customize them in the Studio.\n </CardDescription>\n </CardHeader>\n\n <CardContent className=\"solid-studio-landing-empty-body\">\n <div className=\"solid-studio-landing-empty-primary-action\">\n <p>To get started, use the <strong>SolidX AI Agent</strong> to add a new custom layout.</p>\n <button\n type=\"button\"\n className=\"solid-studio-empty-cta-button\"\n onClick={() => {\n const aiUrl = env(\"VITE_SOLIDX_AI_URL\");\n if (aiUrl) window.open(aiUrl, \"_blank\");\n }}\n >\n <ChatIcon />\n <span>Open AI Chat</span>\n <ArrowIcon />\n </button>\n </div>\n\n <div className=\"solid-studio-landing-empty-divider\" />\n\n <div className=\"solid-studio-landing-empty-details\">\n <p className=\"solid-studio-landing-empty-instruction\">\n Any route with a <code>path</code> and <code>children</code> passed to{\" \"}\n <code>getSolidRoutes()</code> will automatically appear as a card.\n </p>\n <div className=\"solid-studio-landing-snippet\">\n <pre>\n <code>{`// AppRoutes.tsx\\nconst extraRoutes = [\\n {\\n path: \"/my-layout\",\\n element: <MyLayout />,\\n children: [{ index: true, element: <MyPage /> }],\\n },\\n];\\n\\ngetSolidRoutes({ extraRoutes });`}</code>\n </pre>\n </div>\n <p className=\"solid-studio-landing-hint\">\n <strong>Pro Tip:</strong> Add <code>handle: {`{ title, description }`}</code> to a route to customize its appearance.\n </p>\n </div>\n </CardContent>\n </Card>\n </div>\n );\n}\n\n// ── Card ──────────────────────────────────────────────────────────────────────\n\nfunction LayoutCard({\n entry,\n index,\n listView,\n}: {\n entry: SolidLayoutEntry;\n index: number;\n listView: boolean;\n}) {\n const navigate = useNavigate();\n const accent = CARD_ACCENTS[index % CARD_ACCENTS.length];\n\n return (\n <button\n type=\"button\"\n className={`solid-studio-home-card${listView ? \" solid-studio-home-card--list\" : \"\"}`}\n onClick={() => navigate(entry.to)}\n aria-label={`Open ${entry.title}`}\n >\n {!listView && (\n <div className=\"solid-studio-home-card-image-wrap\">\n <LayoutThumb accentColor={accent.bg} title={entry.title} />\n <div className=\"solid-studio-home-card-image-overlay\" />\n </div>\n )}\n <div className=\"solid-studio-home-card-body\">\n <div className={`solid-studio-home-card-icon ${accent.cls}`}>\n <LayoutPlaceholderIcon />\n </div>\n <div className=\"solid-studio-home-card-content\">\n <span className=\"solid-studio-home-card-title\">{entry.title}</span>\n {entry.description && (\n <span className=\"solid-studio-home-card-desc\">{entry.description}</span>\n )}\n <span className=\"solid-studio-home-card-desc\" style={{ opacity: 0.6, fontSize: 11 }}>\n {entry.to}\n </span>\n </div>\n <div className=\"solid-studio-home-card-cta\">\n <span>Open</span>\n <ArrowIcon />\n </div>\n </div>\n </button>\n );\n}\n\n// ── Page ──────────────────────────────────────────────────────────────────────\n\nexport function StudioLandingPage() {\n const layouts = useSolidLayoutRegistry();\n const [listView, setListView] = useState(false);\n\n return (\n <div className=\"solid-studio-home solid-studio-home--top\">\n <div className=\"solid-studio-home-inner solid-studio-home-inner--fluid\">\n\n {/* Toolbar: title left, view toggle right */}\n <div className=\"solid-studio-home-toolbar\">\n {/* <div className=\"solid-studio-home-toolbar-left\">\n <div className=\"solid-studio-home-heading\">\n <div className=\"solid-studio-home-badge\">Frontend Studio</div>\n <h1>Frontend Layouts</h1>\n <p>\n {layouts.length > 0\n ? `${layouts.length} layout${layouts.length === 1 ? \"\" : \"s\"} registered in your app.`\n : \"Register your app layouts to explore them here.\"}\n </p>\n </div>\n </div> */}\n {layouts.length > 0 && (\n <div className=\"solid-studio-home-toolbar-right\">\n <button\n type=\"button\"\n className={`solid-studio-home-view-btn${!listView ? \" solid-studio-home-view-btn--active\" : \"\"}`}\n onClick={() => setListView(false)}\n aria-label=\"Grid view\"\n title=\"Grid view\"\n >\n <GridViewIcon />\n </button>\n <button\n type=\"button\"\n className={`solid-studio-home-view-btn${listView ? \" solid-studio-home-view-btn--active\" : \"\"}`}\n onClick={() => setListView(true)}\n aria-label=\"List view\"\n title=\"List view\"\n >\n <ListViewIcon />\n </button>\n </div>\n )}\n </div>\n\n {layouts.length === 0 ? (\n <EmptyState />\n ) : listView ? (\n <div className=\"solid-studio-home-cards--list\">\n {layouts.map((entry, i) => (\n <LayoutCard key={entry.path} entry={entry} index={i} listView />\n ))}\n </div>\n ) : (\n <div className=\"solid-studio-home-cards solid-studio-home-cards--fluid\">\n {layouts.map((entry, i) => (\n <LayoutCard key={entry.path} entry={entry} index={i} listView={false} />\n ))}\n </div>\n )}\n </div>\n </div>\n );\n}\n"]}
@@ -0,0 +1,320 @@
1
+ import { useState } from "react";
2
+ import { useNavigate } from "react-router-dom";
3
+ import { useSolidLayoutRegistry } from "../../SolidLayoutRegistry";
4
+ import type { SolidLayoutEntry } from "../../SolidLayoutRegistry";
5
+ import { ChatIcon } from "@/components/layout/SolidAiStudioLayout";
6
+ import { env } from "../../../adapters/env";
7
+
8
+ // ── Icons ──────────────────────────────────────────────────────────────────────
9
+
10
+ const ArrowIcon = () => (
11
+ <svg width="14" height="14" viewBox="0 0 14 14" fill="none" aria-hidden="true">
12
+ <path d="M2.5 7h9M8 3.5l3.5 3.5L8 10.5" stroke="currentColor" strokeWidth="1.4" strokeLinecap="round" strokeLinejoin="round" />
13
+ </svg>
14
+ );
15
+
16
+ const LayoutPlaceholderIcon = () => (
17
+ <svg width="18" height="18" viewBox="0 0 18 18" fill="none" aria-hidden="true">
18
+ <rect x="1" y="1" width="16" height="16" rx="2.5" stroke="currentColor" strokeWidth="1.3" />
19
+ <path d="M1 6h16" stroke="currentColor" strokeWidth="1.1" />
20
+ <path d="M6 6v11" stroke="currentColor" strokeWidth="1.1" />
21
+ </svg>
22
+ );
23
+
24
+ const NoLayoutIcon = () => (
25
+ <svg width="32" height="32" viewBox="0 0 32 32" fill="none" aria-hidden="true">
26
+ <rect x="2" y="2" width="28" height="28" rx="4" stroke="currentColor" strokeWidth="1.5" opacity="0.4" strokeDasharray="4 3" />
27
+ <path d="M11 16h10M16 11v10" stroke="currentColor" strokeWidth="1.5" strokeLinecap="round" opacity="0.5" />
28
+ </svg>
29
+ );
30
+
31
+ const GridViewIcon = () => (
32
+ <svg width="15" height="15" viewBox="0 0 15 15" fill="none" aria-hidden="true">
33
+ <rect x="1" y="1" width="5.5" height="5.5" rx="1.2" stroke="currentColor" strokeWidth="1.3" />
34
+ <rect x="8.5" y="1" width="5.5" height="5.5" rx="1.2" stroke="currentColor" strokeWidth="1.3" />
35
+ <rect x="1" y="8.5" width="5.5" height="5.5" rx="1.2" stroke="currentColor" strokeWidth="1.3" />
36
+ <rect x="8.5" y="8.5" width="5.5" height="5.5" rx="1.2" stroke="currentColor" strokeWidth="1.3" />
37
+ </svg>
38
+ );
39
+
40
+ const ListViewIcon = () => (
41
+ <svg width="15" height="15" viewBox="0 0 15 15" fill="none" aria-hidden="true">
42
+ <rect x="1" y="2.5" width="13" height="2.5" rx="1.2" stroke="currentColor" strokeWidth="1.3" />
43
+ <rect x="1" y="6.25" width="13" height="2.5" rx="1.2" stroke="currentColor" strokeWidth="1.3" />
44
+ <rect x="1" y="10" width="13" height="2.5" rx="1.2" stroke="currentColor" strokeWidth="1.3" />
45
+ </svg>
46
+ );
47
+
48
+ // ── Per-card accent colours (cycles by index) ──────────────────────────────────
49
+
50
+ const CARD_ACCENTS = [
51
+ { bg: "hsl(224 70% 54%)", cls: "solid-studio-home-card-icon--backend" },
52
+ { bg: "hsl(158 64% 42%)", cls: "solid-studio-home-card-icon--list" },
53
+ { bg: "hsl(32 95% 48%)", cls: "solid-studio-home-card-icon--kanban" },
54
+ { bg: "hsl(270 65% 58%)", cls: "solid-studio-home-card-icon--form" },
55
+ { bg: "hsl(199 89% 48%)", cls: "solid-studio-home-card-icon--tree" },
56
+ { bg: "hsl(215 25% 52%)", cls: "solid-studio-home-card-icon--settings" },
57
+ ];
58
+
59
+ // ── Generic layout wireframe thumbnail ────────────────────────────────────────
60
+
61
+ function LayoutThumb({ accentColor, title }: { accentColor: string; title: string }) {
62
+ const initials = title
63
+ .split(/\s+/)
64
+ .slice(0, 2)
65
+ .map((w) => w[0]?.toUpperCase() ?? "")
66
+ .join("");
67
+
68
+ return (
69
+ <svg
70
+ className="solid-studio-home-card-thumb"
71
+ viewBox="0 0 280 122"
72
+ fill="none"
73
+ aria-hidden="true"
74
+ >
75
+ {/* background */}
76
+ <rect width="280" height="122" fill="var(--sidebar-background)" />
77
+
78
+ {/* sidebar */}
79
+ <rect width="40" height="122" fill="var(--border)" opacity="0.7" />
80
+ <rect x="7" y="14" width="26" height="4" rx="2" fill="var(--muted)" opacity="0.45" />
81
+ <rect x="7" y="26" width="26" height="4" rx="2" fill="var(--muted)" opacity="0.28" />
82
+ <rect x="7" y="38" width="26" height="4" rx="2" fill="var(--muted)" opacity="0.28" />
83
+ <rect x="7" y="50" width="26" height="4" rx="2" fill="var(--muted)" opacity="0.28" />
84
+
85
+ {/* top bar */}
86
+ <rect x="40" y="0" width="240" height="18" fill="var(--border)" opacity="0.5" />
87
+
88
+ {/* accent header band */}
89
+ <rect x="48" y="22" width="224" height="28" rx="3" fill={accentColor} opacity="0.12" />
90
+ <rect x="56" y="30" width="80" height="7" rx="2" fill={accentColor} opacity="0.45" />
91
+ <rect x="56" y="40" width="50" height="4" rx="2" fill="var(--muted)" opacity="0.3" />
92
+
93
+ {/* content blocks */}
94
+ <rect x="48" y="58" width="70" height="58" rx="3" fill="var(--card)" stroke="var(--border)" strokeWidth="0.8" />
95
+ <rect x="126" y="58" width="70" height="58" rx="3" fill="var(--card)" stroke="var(--border)" strokeWidth="0.8" />
96
+ <rect x="204" y="58" width="68" height="26" rx="3" fill="var(--card)" stroke="var(--border)" strokeWidth="0.8" />
97
+ <rect x="204" y="90" width="68" height="26" rx="3" fill="var(--card)" stroke="var(--border)" strokeWidth="0.8" />
98
+
99
+ {/* inner muted lines */}
100
+ <rect x="54" y="65" width="48" height="4" rx="2" fill="var(--muted)" opacity="0.28" />
101
+ <rect x="54" y="73" width="36" height="3" rx="2" fill="var(--muted)" opacity="0.2" />
102
+ <rect x="132" y="65" width="48" height="4" rx="2" fill="var(--muted)" opacity="0.28" />
103
+ <rect x="132" y="73" width="36" height="3" rx="2" fill="var(--muted)" opacity="0.2" />
104
+
105
+ {/* initials badge */}
106
+ <circle cx="60" cy="98" r="9" fill={accentColor} opacity="0.18" />
107
+ <text
108
+ x="60"
109
+ y="102"
110
+ textAnchor="middle"
111
+ fontSize="7"
112
+ fontWeight="700"
113
+ fill={accentColor}
114
+ opacity="0.8"
115
+ fontFamily="system-ui, sans-serif"
116
+ >
117
+ {initials}
118
+ </text>
119
+ </svg>
120
+ );
121
+ }
122
+
123
+ // ── Card Components (shadcn-inspired) ────────────────────────────────────────
124
+
125
+ function Card({ children, className = "" }: { children: React.ReactNode; className?: string }) {
126
+ return (
127
+ <div className={`solid-studio-card ${className}`}>
128
+ {children}
129
+ </div>
130
+ );
131
+ }
132
+
133
+ function CardHeader({ children, className = "" }: { children: React.ReactNode; className?: string }) {
134
+ return <div className={`solid-studio-card-header ${className}`}>{children}</div>;
135
+ }
136
+
137
+ function CardTitle({ children, className = "" }: { children: React.ReactNode; className?: string }) {
138
+ return <h3 className={`solid-studio-card-title ${className}`}>{children}</h3>;
139
+ }
140
+
141
+ function CardDescription({ children, className = "" }: { children: React.ReactNode; className?: string }) {
142
+ return <p className={`solid-studio-card-description ${className}`}>{children}</p>;
143
+ }
144
+
145
+ function CardContent({ children, className = "" }: { children: React.ReactNode; className?: string }) {
146
+ return <div className={`solid-studio-card-content ${className}`}>{children}</div>;
147
+ }
148
+
149
+ function CardFooter({ children, className = "" }: { children: React.ReactNode; className?: string }) {
150
+ return <div className={`solid-studio-card-footer ${className}`}>{children}</div>;
151
+ }
152
+
153
+ // ── Empty state ───────────────────────────────────────────────────────────────
154
+
155
+ function EmptyState() {
156
+ return (
157
+ <div className="solid-studio-landing-empty-container">
158
+ <Card className="solid-studio-landing-empty-card">
159
+ <CardHeader className="solid-studio-landing-empty-header">
160
+ <div className="solid-studio-home-badge" style={{ marginBottom: '12px' }}>Frontend Studio</div>
161
+ <CardTitle>Frontend layout will appear here</CardTitle>
162
+ <CardDescription>
163
+ Register your app layouts to explore and customize them in the Studio.
164
+ </CardDescription>
165
+ </CardHeader>
166
+
167
+ <CardContent className="solid-studio-landing-empty-body">
168
+ <div className="solid-studio-landing-empty-primary-action">
169
+ <p>To get started, use the <strong>SolidX AI Agent</strong> to add a new custom layout.</p>
170
+ <button
171
+ type="button"
172
+ className="solid-studio-empty-cta-button"
173
+ onClick={() => {
174
+ const aiUrl = env("VITE_SOLIDX_AI_URL");
175
+ if (aiUrl) window.open(aiUrl, "_blank");
176
+ }}
177
+ >
178
+ <ChatIcon />
179
+ <span>Open AI Chat</span>
180
+ <ArrowIcon />
181
+ </button>
182
+ </div>
183
+
184
+ <div className="solid-studio-landing-empty-divider" />
185
+
186
+ <div className="solid-studio-landing-empty-details">
187
+ <p className="solid-studio-landing-empty-instruction">
188
+ Any route with a <code>path</code> and <code>children</code> passed to{" "}
189
+ <code>getSolidRoutes()</code> will automatically appear as a card.
190
+ </p>
191
+ <div className="solid-studio-landing-snippet">
192
+ <pre>
193
+ <code>{`// AppRoutes.tsx\nconst extraRoutes = [\n {\n path: "/my-layout",\n element: <MyLayout />,\n children: [{ index: true, element: <MyPage /> }],\n },\n];\n\ngetSolidRoutes({ extraRoutes });`}</code>
194
+ </pre>
195
+ </div>
196
+ <p className="solid-studio-landing-hint">
197
+ <strong>Pro Tip:</strong> Add <code>handle: {`{ title, description }`}</code> to a route to customize its appearance.
198
+ </p>
199
+ </div>
200
+ </CardContent>
201
+ </Card>
202
+ </div>
203
+ );
204
+ }
205
+
206
+ // ── Card ──────────────────────────────────────────────────────────────────────
207
+
208
+ function LayoutCard({
209
+ entry,
210
+ index,
211
+ listView,
212
+ }: {
213
+ entry: SolidLayoutEntry;
214
+ index: number;
215
+ listView: boolean;
216
+ }) {
217
+ const navigate = useNavigate();
218
+ const accent = CARD_ACCENTS[index % CARD_ACCENTS.length];
219
+
220
+ return (
221
+ <button
222
+ type="button"
223
+ className={`solid-studio-home-card${listView ? " solid-studio-home-card--list" : ""}`}
224
+ onClick={() => navigate(entry.to)}
225
+ aria-label={`Open ${entry.title}`}
226
+ >
227
+ {!listView && (
228
+ <div className="solid-studio-home-card-image-wrap">
229
+ <LayoutThumb accentColor={accent.bg} title={entry.title} />
230
+ <div className="solid-studio-home-card-image-overlay" />
231
+ </div>
232
+ )}
233
+ <div className="solid-studio-home-card-body">
234
+ <div className={`solid-studio-home-card-icon ${accent.cls}`}>
235
+ <LayoutPlaceholderIcon />
236
+ </div>
237
+ <div className="solid-studio-home-card-content">
238
+ <span className="solid-studio-home-card-title">{entry.title}</span>
239
+ {entry.description && (
240
+ <span className="solid-studio-home-card-desc">{entry.description}</span>
241
+ )}
242
+ <span className="solid-studio-home-card-desc" style={{ opacity: 0.6, fontSize: 11 }}>
243
+ {entry.to}
244
+ </span>
245
+ </div>
246
+ <div className="solid-studio-home-card-cta">
247
+ <span>Open</span>
248
+ <ArrowIcon />
249
+ </div>
250
+ </div>
251
+ </button>
252
+ );
253
+ }
254
+
255
+ // ── Page ──────────────────────────────────────────────────────────────────────
256
+
257
+ export function StudioLandingPage() {
258
+ const layouts = useSolidLayoutRegistry();
259
+ const [listView, setListView] = useState(false);
260
+
261
+ return (
262
+ <div className="solid-studio-home solid-studio-home--top">
263
+ <div className="solid-studio-home-inner solid-studio-home-inner--fluid">
264
+
265
+ {/* Toolbar: title left, view toggle right */}
266
+ <div className="solid-studio-home-toolbar">
267
+ {/* <div className="solid-studio-home-toolbar-left">
268
+ <div className="solid-studio-home-heading">
269
+ <div className="solid-studio-home-badge">Frontend Studio</div>
270
+ <h1>Frontend Layouts</h1>
271
+ <p>
272
+ {layouts.length > 0
273
+ ? `${layouts.length} layout${layouts.length === 1 ? "" : "s"} registered in your app.`
274
+ : "Register your app layouts to explore them here."}
275
+ </p>
276
+ </div>
277
+ </div> */}
278
+ {layouts.length > 0 && (
279
+ <div className="solid-studio-home-toolbar-right">
280
+ <button
281
+ type="button"
282
+ className={`solid-studio-home-view-btn${!listView ? " solid-studio-home-view-btn--active" : ""}`}
283
+ onClick={() => setListView(false)}
284
+ aria-label="Grid view"
285
+ title="Grid view"
286
+ >
287
+ <GridViewIcon />
288
+ </button>
289
+ <button
290
+ type="button"
291
+ className={`solid-studio-home-view-btn${listView ? " solid-studio-home-view-btn--active" : ""}`}
292
+ onClick={() => setListView(true)}
293
+ aria-label="List view"
294
+ title="List view"
295
+ >
296
+ <ListViewIcon />
297
+ </button>
298
+ </div>
299
+ )}
300
+ </div>
301
+
302
+ {layouts.length === 0 ? (
303
+ <EmptyState />
304
+ ) : listView ? (
305
+ <div className="solid-studio-home-cards--list">
306
+ {layouts.map((entry, i) => (
307
+ <LayoutCard key={entry.path} entry={entry} index={i} listView />
308
+ ))}
309
+ </div>
310
+ ) : (
311
+ <div className="solid-studio-home-cards solid-studio-home-cards--fluid">
312
+ {layouts.map((entry, i) => (
313
+ <LayoutCard key={entry.path} entry={entry} index={i} listView={false} />
314
+ ))}
315
+ </div>
316
+ )}
317
+ </div>
318
+ </div>
319
+ );
320
+ }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@solidxai/core-ui",
3
- "version": "0.1.5-beta.8",
3
+ "version": "0.1.6",
4
4
  "scripts": {
5
5
  "prebuild": "npm run copy-resources && npm run copy-styles",
6
6
  "build": "tsc -p tsconfig.json && tsc-alias -p tsconfig.json",