@solidxai/core-ui 0.1.7-beta.4 → 0.1.7-beta.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 (268) hide show
  1. package/dist/components/auth/AuthLayout.d.ts.map +1 -1
  2. package/dist/components/auth/AuthLayout.js +1 -1
  3. package/dist/components/auth/AuthLayout.js.map +1 -1
  4. package/dist/components/auth/AuthLayout.tsx +5 -3
  5. package/dist/components/auth/SolidLogin.js +3 -3
  6. package/dist/components/auth/SolidLogin.js.map +1 -1
  7. package/dist/components/auth/SolidLogin.tsx +2 -2
  8. package/dist/components/common/AuthBanner.js.map +1 -1
  9. package/dist/components/common/DropzonePlaceholder.d.ts.map +1 -1
  10. package/dist/components/common/DropzonePlaceholder.js +1 -1
  11. package/dist/components/common/DropzonePlaceholder.js.map +1 -1
  12. package/dist/components/common/DropzonePlaceholder.tsx +8 -6
  13. package/dist/components/core/chatter/SolidChatter.d.ts +2 -1
  14. package/dist/components/core/chatter/SolidChatter.d.ts.map +1 -1
  15. package/dist/components/core/chatter/SolidChatter.js +2 -4
  16. package/dist/components/core/chatter/SolidChatter.js.map +1 -1
  17. package/dist/components/core/chatter/SolidChatter.tsx +3 -4
  18. package/dist/components/core/chatter/SolidChatterHeader.d.ts +1 -0
  19. package/dist/components/core/chatter/SolidChatterHeader.d.ts.map +1 -1
  20. package/dist/components/core/chatter/SolidChatterHeader.js +2 -2
  21. package/dist/components/core/chatter/SolidChatterHeader.js.map +1 -1
  22. package/dist/components/core/chatter/SolidChatterHeader.tsx +4 -3
  23. package/dist/components/core/chatter/chatter.module.css +42 -32
  24. package/dist/components/core/common/SolidGenericImport/SolidGenericImport.js +1 -1
  25. package/dist/components/core/common/SolidGenericImport/SolidGenericImport.js.map +1 -1
  26. package/dist/components/core/common/SolidGenericImport/SolidGenericImport.tsx +2 -2
  27. package/dist/components/core/common/SolidGenericImport/SolidImport.module.css +153 -30
  28. package/dist/components/core/common/SolidGenericImport/SolidImportInstructions.d.ts.map +1 -1
  29. package/dist/components/core/common/SolidGenericImport/SolidImportInstructions.js +7 -7
  30. package/dist/components/core/common/SolidGenericImport/SolidImportInstructions.js.map +1 -1
  31. package/dist/components/core/common/SolidGenericImport/SolidImportInstructions.tsx +9 -10
  32. package/dist/components/core/extension/solid-core/media/card/MediaCardWidget.d.ts.map +1 -1
  33. package/dist/components/core/extension/solid-core/media/card/MediaCardWidget.js +1 -1
  34. package/dist/components/core/extension/solid-core/media/card/MediaCardWidget.js.map +1 -1
  35. package/dist/components/core/extension/solid-core/media/card/MediaCardWidget.tsx +6 -4
  36. package/dist/components/core/extension/solid-core/mqMessage/kanban/MqMessageKanbanCardWidget.d.ts.map +1 -1
  37. package/dist/components/core/extension/solid-core/mqMessage/kanban/MqMessageKanbanCardWidget.js +1 -1
  38. package/dist/components/core/extension/solid-core/mqMessage/kanban/MqMessageKanbanCardWidget.js.map +1 -1
  39. package/dist/components/core/extension/solid-core/mqMessage/kanban/MqMessageKanbanCardWidget.tsx +3 -1
  40. package/dist/components/core/form/SolidFormActionHeader.d.ts.map +1 -1
  41. package/dist/components/core/form/SolidFormActionHeader.js +13 -13
  42. package/dist/components/core/form/SolidFormActionHeader.js.map +1 -1
  43. package/dist/components/core/form/SolidFormActionHeader.tsx +21 -24
  44. package/dist/components/core/form/SolidFormFooter.d.ts.map +1 -1
  45. package/dist/components/core/form/SolidFormFooter.js +1 -1
  46. package/dist/components/core/form/SolidFormFooter.js.map +1 -1
  47. package/dist/components/core/form/SolidFormFooter.tsx +0 -1
  48. package/dist/components/core/form/SolidFormUserViewLayout.js +1 -1
  49. package/dist/components/core/form/SolidFormUserViewLayout.js.map +1 -1
  50. package/dist/components/core/form/SolidFormUserViewLayout.tsx +1 -1
  51. package/dist/components/core/form/SolidFormView.d.ts.map +1 -1
  52. package/dist/components/core/form/SolidFormView.js +22 -33
  53. package/dist/components/core/form/SolidFormView.js.map +1 -1
  54. package/dist/components/core/form/SolidFormView.tsx +38 -59
  55. package/dist/components/core/form/SolidFormViewNormalHeaderButton.d.ts.map +1 -1
  56. package/dist/components/core/form/SolidFormViewNormalHeaderButton.js +12 -1
  57. package/dist/components/core/form/SolidFormViewNormalHeaderButton.js.map +1 -1
  58. package/dist/components/core/form/SolidFormViewNormalHeaderButton.tsx +1 -0
  59. package/dist/components/core/form/fields/SolidLongTextField.js +4 -4
  60. package/dist/components/core/form/fields/SolidLongTextField.js.map +1 -1
  61. package/dist/components/core/form/fields/SolidLongTextField.tsx +4 -4
  62. package/dist/components/core/form/fields/SolidMediaMultipleField.d.ts.map +1 -1
  63. package/dist/components/core/form/fields/SolidMediaMultipleField.js +14 -14
  64. package/dist/components/core/form/fields/SolidMediaMultipleField.js.map +1 -1
  65. package/dist/components/core/form/fields/SolidMediaMultipleField.tsx +35 -21
  66. package/dist/components/core/form/fields/SolidMediaSingleField.d.ts.map +1 -1
  67. package/dist/components/core/form/fields/SolidMediaSingleField.js +2 -2
  68. package/dist/components/core/form/fields/SolidMediaSingleField.js.map +1 -1
  69. package/dist/components/core/form/fields/SolidMediaSingleField.tsx +48 -34
  70. package/dist/components/core/form/fields/SolidPasswordField.d.ts.map +1 -1
  71. package/dist/components/core/form/fields/SolidPasswordField.js +2 -2
  72. package/dist/components/core/form/fields/SolidPasswordField.js.map +1 -1
  73. package/dist/components/core/form/fields/SolidPasswordField.tsx +46 -42
  74. package/dist/components/core/form/fields/relations/SolidRelationManyToManyField.d.ts.map +1 -1
  75. package/dist/components/core/form/fields/relations/SolidRelationManyToManyField.js +23 -27
  76. package/dist/components/core/form/fields/relations/SolidRelationManyToManyField.js.map +1 -1
  77. package/dist/components/core/form/fields/relations/SolidRelationManyToManyField.tsx +64 -66
  78. package/dist/components/core/form/fields/relations/SolidRelationManyToOneField.d.ts.map +1 -1
  79. package/dist/components/core/form/fields/relations/SolidRelationManyToOneField.js +2 -6
  80. package/dist/components/core/form/fields/relations/SolidRelationManyToOneField.js.map +1 -1
  81. package/dist/components/core/form/fields/relations/SolidRelationManyToOneField.tsx +4 -7
  82. package/dist/components/core/form/fields/relations/SolidRelationOneToManyField.d.ts.map +1 -1
  83. package/dist/components/core/form/fields/relations/SolidRelationOneToManyField.js +12 -15
  84. package/dist/components/core/form/fields/relations/SolidRelationOneToManyField.js.map +1 -1
  85. package/dist/components/core/form/fields/relations/SolidRelationOneToManyField.tsx +30 -16
  86. package/dist/components/core/form/fields/solidFields.module.css +86 -15
  87. package/dist/components/core/form/fields/widgets/SolidChatterMessageCoModelEntityIdFormViewWidget.d.ts +3 -0
  88. package/dist/components/core/form/fields/widgets/SolidChatterMessageCoModelEntityIdFormViewWidget.d.ts.map +1 -0
  89. package/dist/components/core/form/fields/widgets/SolidChatterMessageCoModelEntityIdFormViewWidget.js +92 -0
  90. package/dist/components/core/form/fields/widgets/SolidChatterMessageCoModelEntityIdFormViewWidget.js.map +1 -0
  91. package/dist/components/core/form/fields/widgets/SolidChatterMessageCoModelEntityIdFormViewWidget.tsx +68 -0
  92. package/dist/components/core/form/fields/widgets/SolidIconEditWidget.d.ts.map +1 -1
  93. package/dist/components/core/form/fields/widgets/SolidIconEditWidget.js +18 -28
  94. package/dist/components/core/form/fields/widgets/SolidIconEditWidget.js.map +1 -1
  95. package/dist/components/core/form/fields/widgets/SolidIconEditWidget.tsx +52 -48
  96. package/dist/components/core/form/fields/widgets/SolidLovTypeChangeFormEditWidget.d.ts +3 -0
  97. package/dist/components/core/form/fields/widgets/SolidLovTypeChangeFormEditWidget.d.ts.map +1 -0
  98. package/dist/components/core/form/fields/widgets/SolidLovTypeChangeFormEditWidget.js +111 -0
  99. package/dist/components/core/form/fields/widgets/SolidLovTypeChangeFormEditWidget.js.map +1 -0
  100. package/dist/components/core/form/fields/widgets/SolidLovTypeChangeFormEditWidget.tsx +122 -0
  101. package/dist/components/core/form/fields/widgets/SolidS3FileViewerWidget.d.ts.map +1 -1
  102. package/dist/components/core/form/fields/widgets/SolidS3FileViewerWidget.js +1 -1
  103. package/dist/components/core/form/fields/widgets/SolidS3FileViewerWidget.js.map +1 -1
  104. package/dist/components/core/form/fields/widgets/SolidS3FileViewerWidget.tsx +5 -4
  105. package/dist/components/core/kanban/KanbanBoard.d.ts.map +1 -1
  106. package/dist/components/core/kanban/KanbanBoard.js +11 -5
  107. package/dist/components/core/kanban/KanbanBoard.js.map +1 -1
  108. package/dist/components/core/kanban/KanbanBoard.tsx +8 -0
  109. package/dist/components/core/kanban/KanbanCard.d.ts +1 -0
  110. package/dist/components/core/kanban/KanbanCard.d.ts.map +1 -1
  111. package/dist/components/core/kanban/KanbanCard.js +4 -4
  112. package/dist/components/core/kanban/KanbanCard.js.map +1 -1
  113. package/dist/components/core/kanban/KanbanCard.tsx +5 -4
  114. package/dist/components/core/kanban/KanbanColumn.d.ts +2 -1
  115. package/dist/components/core/kanban/KanbanColumn.d.ts.map +1 -1
  116. package/dist/components/core/kanban/KanbanColumn.js +3 -3
  117. package/dist/components/core/kanban/KanbanColumn.js.map +1 -1
  118. package/dist/components/core/kanban/KanbanColumn.tsx +4 -3
  119. package/dist/components/core/kanban/SolidManyToOneFilterElement.d.ts.map +1 -1
  120. package/dist/components/core/kanban/SolidManyToOneFilterElement.js.map +1 -1
  121. package/dist/components/core/kanban/SolidManyToOneFilterElement.tsx +1 -2
  122. package/dist/components/core/kanban/kanban-fields/SolidMediaMultipleKanbanField.d.ts.map +1 -1
  123. package/dist/components/core/kanban/kanban-fields/SolidMediaMultipleKanbanField.js +2 -2
  124. package/dist/components/core/kanban/kanban-fields/SolidMediaMultipleKanbanField.js.map +1 -1
  125. package/dist/components/core/kanban/kanban-fields/SolidMediaMultipleKanbanField.tsx +21 -10
  126. package/dist/components/core/kanban/kanban-fields/SolidMediaSingleKanbanField.d.ts.map +1 -1
  127. package/dist/components/core/kanban/kanban-fields/SolidMediaSingleKanbanField.js +2 -2
  128. package/dist/components/core/kanban/kanban-fields/SolidMediaSingleKanbanField.js.map +1 -1
  129. package/dist/components/core/kanban/kanban-fields/SolidMediaSingleKanbanField.tsx +18 -10
  130. package/dist/components/core/kanban/kanban-fields/SolidShortTextKanbanField.d.ts.map +1 -1
  131. package/dist/components/core/kanban/kanban-fields/SolidShortTextKanbanField.js +3 -6
  132. package/dist/components/core/kanban/kanban-fields/SolidShortTextKanbanField.js.map +1 -1
  133. package/dist/components/core/kanban/kanban-fields/SolidShortTextKanbanField.tsx +30 -24
  134. package/dist/components/core/kanban/kanban-fields/relations/SolidRelationManyToOneKanbanField.js.map +1 -1
  135. package/dist/components/core/kanban/kanban-fields/relations/SolidRelationManyToOneKanbanField.tsx +2 -2
  136. package/dist/components/core/list/SolidDataTable.d.ts +1 -0
  137. package/dist/components/core/list/SolidDataTable.d.ts.map +1 -1
  138. package/dist/components/core/list/SolidDataTable.js +19 -2
  139. package/dist/components/core/list/SolidDataTable.js.map +1 -1
  140. package/dist/components/core/list/SolidDataTable.tsx +30 -2
  141. package/dist/components/core/list/SolidDataTablePagination.d.ts +15 -0
  142. package/dist/components/core/list/SolidDataTablePagination.d.ts.map +1 -0
  143. package/dist/components/core/list/SolidDataTablePagination.js +22 -0
  144. package/dist/components/core/list/SolidDataTablePagination.js.map +1 -0
  145. package/dist/components/core/list/SolidDataTablePagination.tsx +71 -0
  146. package/dist/components/core/list/SolidListView.d.ts.map +1 -1
  147. package/dist/components/core/list/SolidListView.js +1 -1
  148. package/dist/components/core/list/SolidListView.js.map +1 -1
  149. package/dist/components/core/list/SolidListView.tsx +1 -0
  150. package/dist/components/core/list/SolidListViewConfigure.js.map +1 -1
  151. package/dist/components/core/list/SolidListViewConfigure.tsx +1 -1
  152. package/dist/components/core/list/SolidListViewRowButtonContextMenu.d.ts +1 -1
  153. package/dist/components/core/list/SolidListViewRowButtonContextMenu.d.ts.map +1 -1
  154. package/dist/components/core/list/SolidListViewRowButtonContextMenu.js +6 -7
  155. package/dist/components/core/list/SolidListViewRowButtonContextMenu.js.map +1 -1
  156. package/dist/components/core/list/SolidListViewRowButtonContextMenu.tsx +9 -10
  157. package/dist/components/core/list/widgets/SolidChatterMessageCoModelEntityIdListViewWidget.d.ts +3 -0
  158. package/dist/components/core/list/widgets/SolidChatterMessageCoModelEntityIdListViewWidget.d.ts.map +1 -0
  159. package/dist/components/core/list/widgets/SolidChatterMessageCoModelEntityIdListViewWidget.js +87 -0
  160. package/dist/components/core/list/widgets/SolidChatterMessageCoModelEntityIdListViewWidget.js.map +1 -0
  161. package/dist/components/core/list/widgets/SolidChatterMessageCoModelEntityIdListViewWidget.tsx +70 -0
  162. package/dist/components/core/list/widgets/SolidMqMessageStageListViewWidget.d.ts +3 -0
  163. package/dist/components/core/list/widgets/SolidMqMessageStageListViewWidget.d.ts.map +1 -0
  164. package/dist/components/core/list/widgets/SolidMqMessageStageListViewWidget.js +33 -0
  165. package/dist/components/core/list/widgets/SolidMqMessageStageListViewWidget.js.map +1 -0
  166. package/dist/components/core/list/widgets/SolidMqMessageStageListViewWidget.tsx +50 -0
  167. package/dist/components/core/list/widgets/SolidSummarizeListHeaderActionMqMessages.d.ts +3 -0
  168. package/dist/components/core/list/widgets/SolidSummarizeListHeaderActionMqMessages.d.ts.map +1 -0
  169. package/dist/components/core/list/widgets/SolidSummarizeListHeaderActionMqMessages.js +158 -0
  170. package/dist/components/core/list/widgets/SolidSummarizeListHeaderActionMqMessages.js.map +1 -0
  171. package/dist/components/core/list/widgets/SolidSummarizeListHeaderActionMqMessages.tsx +185 -0
  172. package/dist/components/core/locales/SolidChatterLocaleTabView.d.ts.map +1 -1
  173. package/dist/components/core/locales/SolidChatterLocaleTabView.js +7 -4
  174. package/dist/components/core/locales/SolidChatterLocaleTabView.js.map +1 -1
  175. package/dist/components/core/locales/SolidChatterLocaleTabView.tsx +28 -11
  176. package/dist/components/core/locales/SolidLocale.js +4 -4
  177. package/dist/components/core/locales/SolidLocale.js.map +1 -1
  178. package/dist/components/core/locales/SolidLocale.tsx +18 -18
  179. package/dist/components/core/locales/solid-locale.css +105 -7
  180. package/dist/components/core/model/CreateModel.js +2 -2
  181. package/dist/components/core/model/CreateModel.js.map +1 -1
  182. package/dist/components/core/model/CreateModel.tsx +2 -2
  183. package/dist/components/core/model/FieldMetaData.d.ts.map +1 -1
  184. package/dist/components/core/model/FieldMetaData.js +3 -3
  185. package/dist/components/core/model/FieldMetaData.js.map +1 -1
  186. package/dist/components/core/model/FieldMetaData.tsx +45 -22
  187. package/dist/components/layout/AppSidebar.d.ts.map +1 -1
  188. package/dist/components/layout/AppSidebar.js +75 -7
  189. package/dist/components/layout/AppSidebar.js.map +1 -1
  190. package/dist/components/layout/AppSidebar.tsx +84 -7
  191. package/dist/components/shad-cn-ui/SolidCodeEditor.d.ts.map +1 -1
  192. package/dist/components/shad-cn-ui/SolidCodeEditor.js +13 -7
  193. package/dist/components/shad-cn-ui/SolidCodeEditor.js.map +1 -1
  194. package/dist/components/shad-cn-ui/SolidCodeEditor.tsx +22 -12
  195. package/dist/components/shad-cn-ui/SolidDialog.d.ts +2 -1
  196. package/dist/components/shad-cn-ui/SolidDialog.d.ts.map +1 -1
  197. package/dist/components/shad-cn-ui/SolidDialog.js +2 -2
  198. package/dist/components/shad-cn-ui/SolidDialog.js.map +1 -1
  199. package/dist/components/shad-cn-ui/SolidDialog.tsx +6 -3
  200. package/dist/components/shad-cn-ui/SolidSelect.d.ts +2 -1
  201. package/dist/components/shad-cn-ui/SolidSelect.d.ts.map +1 -1
  202. package/dist/components/shad-cn-ui/SolidSelect.js +2 -2
  203. package/dist/components/shad-cn-ui/SolidSelect.js.map +1 -1
  204. package/dist/components/shad-cn-ui/SolidSelect.tsx +3 -0
  205. package/dist/components/shad-cn-ui/SolidTextarea.d.ts +1 -1
  206. package/dist/components/shad-cn-ui/SolidTextarea.d.ts.map +1 -1
  207. package/dist/components/shad-cn-ui/SolidTextarea.js +3 -2
  208. package/dist/components/shad-cn-ui/SolidTextarea.js.map +1 -1
  209. package/dist/components/shad-cn-ui/SolidTextarea.tsx +17 -2
  210. package/dist/components/solid-ui/SolidButton.d.ts +14 -0
  211. package/dist/components/solid-ui/SolidButton.d.ts.map +1 -0
  212. package/dist/components/solid-ui/SolidButton.js +36 -0
  213. package/dist/components/solid-ui/SolidButton.js.map +1 -0
  214. package/dist/components/solid-ui/SolidButton.tsx +54 -0
  215. package/dist/components/solid-ui/SolidTabs.d.ts +18 -0
  216. package/dist/components/solid-ui/SolidTabs.d.ts.map +1 -0
  217. package/dist/components/solid-ui/SolidTabs.js +22 -0
  218. package/dist/components/solid-ui/SolidTabs.js.map +1 -0
  219. package/dist/components/solid-ui/SolidTabs.tsx +73 -0
  220. package/dist/components/solid-ui/index.d.ts +3 -0
  221. package/dist/components/solid-ui/index.d.ts.map +1 -0
  222. package/dist/components/solid-ui/index.js +3 -0
  223. package/dist/components/solid-ui/index.js.map +1 -0
  224. package/dist/components/solid-ui/index.ts +2 -0
  225. package/dist/helpers/registry.d.ts.map +1 -1
  226. package/dist/helpers/registry.js +10 -0
  227. package/dist/helpers/registry.js.map +1 -1
  228. package/dist/helpers/registry.ts +16 -0
  229. package/dist/index.d.ts +3 -2
  230. package/dist/index.d.ts.map +1 -1
  231. package/dist/index.js +3 -2
  232. package/dist/index.js.map +1 -1
  233. package/dist/index.ts +71 -2
  234. package/dist/resources/globals.css +628 -67
  235. package/dist/resources/shadcn-base.css +333 -7
  236. package/dist/resources/solid-responsive.css +6 -6
  237. package/dist/resources/themes/solid-dark-purple/theme.css +1 -1
  238. package/package.json +1 -1
  239. package/dist/components/auth/SolidOTPVerify.d.ts +0 -3
  240. package/dist/components/auth/SolidOTPVerify.d.ts.map +0 -1
  241. package/dist/components/auth/SolidOTPVerify.js +0 -67
  242. package/dist/components/auth/SolidOTPVerify.js.map +0 -1
  243. package/dist/components/auth/SolidOTPVerify.tsx +0 -133
  244. package/dist/components/core/common/LoadDynamicJsxComponent.d.ts +0 -2
  245. package/dist/components/core/common/LoadDynamicJsxComponent.d.ts.map +0 -1
  246. package/dist/components/core/common/LoadDynamicJsxComponent.js +0 -50
  247. package/dist/components/core/common/LoadDynamicJsxComponent.js.map +0 -1
  248. package/dist/components/core/common/LoadDynamicJsxComponent.tsx +0 -70
  249. package/dist/nextAuth/authProviders.d.ts +0 -4
  250. package/dist/nextAuth/authProviders.d.ts.map +0 -1
  251. package/dist/nextAuth/authProviders.js +0 -198
  252. package/dist/nextAuth/authProviders.js.map +0 -1
  253. package/dist/nextAuth/authProviders.tsx +0 -232
  254. package/dist/nextAuth/handleLogout.d.ts +0 -2
  255. package/dist/nextAuth/handleLogout.d.ts.map +0 -1
  256. package/dist/nextAuth/handleLogout.js +0 -36
  257. package/dist/nextAuth/handleLogout.js.map +0 -1
  258. package/dist/nextAuth/handleLogout.tsx +0 -39
  259. package/dist/nextAuth/refreshAccessToken.d.ts +0 -2
  260. package/dist/nextAuth/refreshAccessToken.d.ts.map +0 -1
  261. package/dist/nextAuth/refreshAccessToken.js +0 -24
  262. package/dist/nextAuth/refreshAccessToken.js.map +0 -1
  263. package/dist/nextAuth/refreshAccessToken.tsx +0 -28
  264. package/dist/redux/features/settingsSlice.d.ts +0 -20
  265. package/dist/redux/features/settingsSlice.d.ts.map +0 -1
  266. package/dist/redux/features/settingsSlice.js +0 -39
  267. package/dist/redux/features/settingsSlice.js.map +0 -1
  268. package/dist/redux/features/settingsSlice.ts +0 -60
@@ -10,7 +10,11 @@ import {
10
10
  SolidButton,
11
11
  SolidDialog,
12
12
  SolidDialogBody,
13
+ SolidDialogClose,
13
14
  SolidDialogFooter,
15
+ SolidDialogHeader,
16
+ SolidDialogSeparator,
17
+ SolidDialogTitle,
14
18
  } from "../../shad-cn-ui";
15
19
 
16
20
 
@@ -194,19 +198,22 @@ const FieldMetaData = ({ setIsDirty, modelMetaData, fieldMetaData, setFieldMetaD
194
198
  setIsRequiredPopUp(false);
195
199
  }
196
200
  }}
197
- className="solid-dialog solid-confirm-dialog"
198
- style={{ width: "20vw" }}
199
- header={
200
- <div className="flex align-items-center gap-2">
201
- <AlertTriangle size={18} className="text-yellow-500" />
202
- <span>Warning</span>
203
- </div>
204
- }
201
+ className="solid-dialog solid-confirm-dialog solid-field-confirm-dialog"
202
+ style={{ width: "min(420px, calc(100vw - 2rem))" }}
205
203
  >
206
- <SolidDialogBody>
207
- <p className="mb-0">If there is data against this model this operation might not work and manual intervention will be required.</p>
204
+ <SolidDialogHeader className="solid-field-confirm-header">
205
+ <SolidDialogTitle>
206
+ <span className="flex align-items-center gap-2">
207
+ <AlertTriangle size={18} className="text-yellow-500" />
208
+ <span>Warning</span>
209
+ </span>
210
+ </SolidDialogTitle>
211
+ <SolidDialogClose />
212
+ </SolidDialogHeader>
213
+ <SolidDialogBody className="solid-field-confirm-dialog-body">
214
+ <p className="solid-field-confirm-message">If there is data against this model this operation might not work and manual intervention will be required.</p>
208
215
  </SolidDialogBody>
209
- <SolidDialogFooter className="justify-content-start">
216
+ <SolidDialogFooter className="solid-field-confirm-actions">
210
217
  <SolidButton size="sm" onClick={() => setIsRequiredPopUp(false)}>
211
218
  Ok
212
219
  </SolidButton>
@@ -220,19 +227,35 @@ const FieldMetaData = ({ setIsDirty, modelMetaData, fieldMetaData, setFieldMetaD
220
227
  setRowToDelete(null);
221
228
  }
222
229
  }}
223
- className="solid-dialog solid-confirm-dialog"
224
- style={{ width: "20vw" }}
225
- header={
226
- <div className="flex align-items-center justify-content-center gap-2">
227
- <AlertTriangle size={18} className="text-yellow-500" />
228
- <span>Warning</span>
229
- </div>
230
- }
230
+ className="solid-shadcn-confirm-dialog solid-field-delete-flow-dialog"
231
+ style={{ width: "min(560px, calc(100vw - 2rem))" }}
231
232
  >
232
- <SolidDialogBody>
233
- <p className="mb-0 text-center">Are you sure you want to delete this field?</p>
233
+ <SolidDialogHeader className="solid-shadcn-dialog-head solid-field-delete-flow-head">
234
+ <SolidDialogTitle>
235
+ <span className="flex align-items-center gap-2 justify-content-center">
236
+ <AlertTriangle size={18} className="text-yellow-500" />
237
+ <span>Remove Field</span>
238
+ </span>
239
+ </SolidDialogTitle>
240
+ <SolidDialogClose />
241
+ </SolidDialogHeader>
242
+ <SolidDialogSeparator className="solid-shadcn-dialog-sep" />
243
+ <SolidDialogBody className="solid-shadcn-dialog-body solid-field-delete-flow-body">
244
+ <p className="solid-shadcn-dialog-text solid-field-delete-flow-intro">
245
+ Removing a field is a 2 step process.
246
+ </p>
247
+ <ol className="solid-field-delete-flow-list">
248
+ <li>
249
+ Delete the field and save the model form.
250
+ <span>This marks the field for removal.</span>
251
+ </li>
252
+ <li>
253
+ Generate code for this model.
254
+ <span>This removes the field from generated code, metadata tables, and JSON.</span>
255
+ </li>
256
+ </ol>
234
257
  </SolidDialogBody>
235
- <SolidDialogFooter className="flex justify-content-center gap-2">
258
+ <SolidDialogFooter className="solid-shadcn-dialog-actions solid-field-delete-flow-actions">
236
259
  <SolidButton
237
260
  size="sm"
238
261
  onClick={() => {
@@ -1 +1 @@
1
- {"version":3,"file":"AppSidebar.d.ts","sourceRoot":"","sources":["../../../src/components/layout/AppSidebar.tsx"],"names":[],"mappings":"AAoIA,QAAA,MAAM,UAAU,+CAoMf,CAAC;AAEF,eAAe,UAAU,CAAC"}
1
+ {"version":3,"file":"AppSidebar.d.ts","sourceRoot":"","sources":["../../../src/components/layout/AppSidebar.tsx"],"names":[],"mappings":"AA+LA,QAAA,MAAM,UAAU,+CAsNf,CAAC;AAEF,eAAe,UAAU,CAAC"}
@@ -19,11 +19,55 @@ import { useDispatch, useSelector } from "react-redux";
19
19
  import UserProfileMenu from "./user-profile-menu";
20
20
  import SolidLink from "../common/Link";
21
21
  import { usePathname } from "../../hooks/usePathname";
22
+ import { useSearchParams } from "../../hooks/useSearchParams";
22
23
  import { env } from "../../adapters/env";
23
24
  var defaultMenuKey = env("NEXT_PUBLIC_DEFAULT_MENU_KEY");
24
25
  var SIDEBAR_STORAGE_KEY = "solidx.sidebar.collapsed";
26
+ var SELECTED_WORKSPACE_STORAGE_KEY = "solidx.sidebar.selected-workspace";
25
27
  var SIDEBAR_TOGGLE_EVENT = "solidx:sidebar-toggle";
26
28
  var DESKTOP_SIDEBAR_WIDTH = "272px";
29
+ var DEFAULT_WORKSPACE_TITLE = "Solid Core";
30
+ var DEFAULT_WORKSPACE_KEY = "solid-core";
31
+ function normalizePath(path) {
32
+ if (!path || path === "/")
33
+ return "/";
34
+ return path.endsWith("/") ? path.slice(0, -1) : path;
35
+ }
36
+ function getPathAndParams(targetPath) {
37
+ var parsed = new URL(targetPath, "http://localhost");
38
+ return {
39
+ pathname: normalizePath(parsed.pathname),
40
+ searchParams: new URLSearchParams(parsed.search),
41
+ };
42
+ }
43
+ function doesSearchParamsMatchSubset(requiredParams, currentParams) {
44
+ var currentValueCounts = new Map();
45
+ currentParams.forEach(function (value, key) {
46
+ var token = "".concat(key, "=").concat(value);
47
+ currentValueCounts.set(token, (currentValueCounts.get(token) || 0) + 1);
48
+ });
49
+ var isSubset = true;
50
+ requiredParams.forEach(function (value, key) {
51
+ if (!isSubset)
52
+ return;
53
+ var token = "".concat(key, "=").concat(value);
54
+ var count = currentValueCounts.get(token) || 0;
55
+ if (count <= 0) {
56
+ isSubset = false;
57
+ return;
58
+ }
59
+ currentValueCounts.set(token, count - 1);
60
+ });
61
+ return isSubset;
62
+ }
63
+ function isMenuPathActive(itemPath, currentPathname, currentSearchParams) {
64
+ if (!itemPath)
65
+ return false;
66
+ var _a = getPathAndParams(itemPath), itemPathname = _a.pathname, itemSearchParams = _a.searchParams;
67
+ if (itemPathname !== normalizePath(currentPathname))
68
+ return false;
69
+ return doesSearchParamsMatchSubset(itemSearchParams, currentSearchParams);
70
+ }
27
71
  function filterMenuItems(items, query) {
28
72
  var normalizedQuery = query.trim().toLowerCase();
29
73
  if (!normalizedQuery)
@@ -38,8 +82,14 @@ function filterMenuItems(items, query) {
38
82
  });
39
83
  return next;
40
84
  }
85
+ function resolveDefaultWorkspace(items) {
86
+ return (items.find(function (item) { return item.key === DEFAULT_WORKSPACE_KEY; }) ||
87
+ items.find(function (item) { return item.title.trim().toLowerCase() === DEFAULT_WORKSPACE_TITLE.toLowerCase(); }) ||
88
+ items.find(function (item) { return item.key === defaultMenuKey; }) ||
89
+ items[0]);
90
+ }
41
91
  var SidebarMenuTree = function (_a) {
42
- var items = _a.items, pathname = _a.pathname, forceExpand = _a.forceExpand;
92
+ var items = _a.items, pathname = _a.pathname, searchParams = _a.searchParams, forceExpand = _a.forceExpand;
43
93
  var _b = useState({}), expandedKeys = _b[0], setExpandedKeys = _b[1];
44
94
  var buildNodeId = function (node, parentId, index) {
45
95
  var base = node.key || node.path || node.title || "node-".concat(index);
@@ -79,7 +129,7 @@ var SidebarMenuTree = function (_a) {
79
129
  var nodeId = buildNodeId(node, parentId, index);
80
130
  var hasChildren = !!(node.children && node.children.length > 0);
81
131
  var isExpanded = expandedKeys[nodeId] === true;
82
- var isActive = !!node.path && pathname === node.path;
132
+ var isActive = isMenuPathActive(node.path, pathname, searchParams);
83
133
  var paddingLeft = 12 + depth * 14;
84
134
  return (_jsxs("li", { className: "solid-sidebar-tree-item", children: [_jsxs("div", { className: "solid-sidebar-tree-row ".concat(isActive ? "is-active" : ""), style: { paddingLeft: paddingLeft }, children: [hasChildren ? (_jsx("button", { type: "button", className: "solid-sidebar-tree-parent", onClick: function () { return toggleExpanded(nodeId); }, "aria-expanded": isExpanded, "aria-label": "Toggle ".concat(node.title), children: _jsx("span", { className: "solid-sidebar-tree-label", children: node.title }) })) : node.path ? (_jsx(SolidLink, { href: node.path, className: "solid-sidebar-tree-link", children: _jsx("span", { className: "solid-sidebar-tree-label", children: node.title }) })) : (_jsx("span", { className: "solid-sidebar-tree-label", children: node.title })), hasChildren && (_jsx("button", { type: "button", className: "solid-sidebar-tree-toggle", onClick: function () { return toggleExpanded(nodeId); }, "aria-label": "Toggle ".concat(node.title), children: _jsx("span", { className: "solid-tree-plusminus", children: isExpanded ? "−" : "+" }) }))] }), hasChildren && isExpanded && (_jsx("ul", { className: "solid-sidebar-tree-list solid-sidebar-tree-children", children: node.children.map(function (child, childIndex) { return renderNode(child, depth + 1, nodeId, childIndex); }) }))] }, nodeId));
85
135
  };
@@ -88,11 +138,16 @@ var SidebarMenuTree = function (_a) {
88
138
  var AppSidebar = function () {
89
139
  var dispatch = useDispatch();
90
140
  var pathname = usePathname();
141
+ var searchParams = useSearchParams();
91
142
  var visibleNavbar = useSelector(function (state) { return state.navbarState.visibleNavbar; });
92
143
  var menu = useGetSolidMenuBasedOnRoleQuery("").data;
93
144
  var _a = useState(""), searchTerm = _a[0], setSearchTerm = _a[1];
94
145
  var _b = useState(false), workspaceOpen = _b[0], setWorkspaceOpen = _b[1];
95
- var _c = useState(""), selectedWorkspaceKey = _c[0], setSelectedWorkspaceKey = _c[1];
146
+ var _c = useState(function () {
147
+ if (typeof window === "undefined")
148
+ return "";
149
+ return window.localStorage.getItem(SELECTED_WORKSPACE_STORAGE_KEY) || "";
150
+ }), selectedWorkspaceKey = _c[0], setSelectedWorkspaceKey = _c[1];
96
151
  var _d = useState(typeof window === "undefined" ? true : window.innerWidth > 1199), isDesktop = _d[0], setIsDesktop = _d[1];
97
152
  var _e = useState(function () {
98
153
  if (typeof window === "undefined")
@@ -126,6 +181,15 @@ var AppSidebar = function () {
126
181
  return;
127
182
  window.localStorage.setItem(SIDEBAR_STORAGE_KEY, String(isCollapsed));
128
183
  }, [isCollapsed]);
184
+ useEffect(function () {
185
+ if (typeof window === "undefined")
186
+ return;
187
+ if (!selectedWorkspaceKey) {
188
+ window.localStorage.removeItem(SELECTED_WORKSPACE_STORAGE_KEY);
189
+ return;
190
+ }
191
+ window.localStorage.setItem(SELECTED_WORKSPACE_STORAGE_KEY, selectedWorkspaceKey);
192
+ }, [selectedWorkspaceKey]);
129
193
  useEffect(function () {
130
194
  var width = isDesktop ? (isCollapsed ? "0px" : DESKTOP_SIDEBAR_WIDTH) : "0px";
131
195
  document.documentElement.style.setProperty("--solid-sidebar-width", width);
@@ -134,9 +198,13 @@ var AppSidebar = function () {
134
198
  var _a;
135
199
  if (!((_a = menu === null || menu === void 0 ? void 0 : menu.data) === null || _a === void 0 ? void 0 : _a.length))
136
200
  return;
137
- var defaultWorkspace = menu.data.find(function (m) { return m.key === defaultMenuKey; }) || menu.data[0];
138
- setSelectedWorkspaceKey(function (prev) { return prev || (defaultWorkspace === null || defaultWorkspace === void 0 ? void 0 : defaultWorkspace.key) || ""; });
139
- }, [menu]);
201
+ var defaultWorkspace = resolveDefaultWorkspace(menu.data);
202
+ var hasSelectedWorkspace = menu.data.some(function (workspace) { return workspace.key === selectedWorkspaceKey; });
203
+ var nextWorkspaceKey = hasSelectedWorkspace ? selectedWorkspaceKey : (defaultWorkspace === null || defaultWorkspace === void 0 ? void 0 : defaultWorkspace.key) || "";
204
+ if (nextWorkspaceKey !== selectedWorkspaceKey) {
205
+ setSelectedWorkspaceKey(nextWorkspaceKey);
206
+ }
207
+ }, [menu, selectedWorkspaceKey]);
140
208
  useEffect(function () {
141
209
  if (!isDesktop) {
142
210
  dispatch(hideNavbar());
@@ -169,7 +237,7 @@ var AppSidebar = function () {
169
237
  setSearchTerm("");
170
238
  setWorkspaceOpen(false);
171
239
  };
172
- return (_jsxs(_Fragment, { children: [!isDesktop && visibleNavbar && _jsx("div", { className: "solid-sidebar-backdrop", onClick: function () { return dispatch(toggleNavbar()); } }), _jsxs("aside", { className: shellClasses, children: [_jsx("div", { className: "solid-sidebar-header", children: _jsxs("div", { className: "solid-workspace-switcher", children: [_jsxs("button", { type: "button", className: "solid-workspace-trigger", onClick: function () { return setWorkspaceOpen(function (prev) { return !prev; }); }, "aria-label": "Select workspace", children: [_jsx("span", { className: "solid-workspace-avatar", children: ((selectedWorkspace === null || selectedWorkspace === void 0 ? void 0 : selectedWorkspace.title) || "W").slice(0, 1).toUpperCase() }), !isCollapsed && (_jsxs(_Fragment, { children: [_jsxs("span", { className: "solid-workspace-label-wrap", children: [_jsx("span", { className: "solid-workspace-label-top", children: "Workspace" }), _jsx("span", { className: "solid-workspace-label", children: (selectedWorkspace === null || selectedWorkspace === void 0 ? void 0 : selectedWorkspace.title) || "Workspace" })] }), _jsx("span", { className: "solid-workspace-chevron-dual ".concat(workspaceOpen ? "is-open" : ""), "aria-hidden": "true", children: _jsxs("svg", { xmlns: "http://www.w3.org/2000/svg", width: "14", height: "14", viewBox: "0 0 14 14", fill: "none", children: [_jsx("path", { d: "M4 6L7 3L10 6", stroke: "currentColor", strokeWidth: "1.25", strokeLinecap: "round", strokeLinejoin: "round" }), _jsx("path", { d: "M4 8L7 11L10 8", stroke: "currentColor", strokeWidth: "1.25", strokeLinecap: "round", strokeLinejoin: "round" })] }) })] }))] }), workspaceOpen && !isCollapsed && (_jsx("div", { className: "solid-workspace-menu", children: workspaces.map(function (workspace) { return (_jsxs("button", { type: "button", className: "solid-workspace-item ".concat(workspace.key === (selectedWorkspace === null || selectedWorkspace === void 0 ? void 0 : selectedWorkspace.key) ? "is-active" : ""), onClick: function () { return selectWorkspace(workspace); }, children: [_jsx("span", { className: "solid-workspace-item-avatar", children: workspace.title.slice(0, 1).toUpperCase() }), _jsx("span", { className: "solid-workspace-item-label", children: workspace.title })] }, workspace.key || workspace.title)); }) }))] }) }), !isCollapsed ? (_jsxs(_Fragment, { children: [_jsx("div", { className: "solid-sidebar-search-wrap", children: _jsx("input", { type: "text", value: searchTerm, onChange: function (e) { return setSearchTerm(e.target.value); }, placeholder: "Search in menu...", className: "solid-sidebar-search" }) }), _jsx("div", { className: "solid-sidebar-tree-wrap", children: _jsx(SidebarMenuTree, { items: filteredMenu, pathname: pathname, forceExpand: !!searchTerm.trim() }) })] })) : (_jsx("div", { className: "solid-sidebar-collapsed-nav", children: filteredMenu.slice(0, 10).map(function (item) { return (_jsx(SolidLink, { href: item.path || "#", className: "solid-collapsed-item ".concat(pathname === item.path ? "is-active" : ""), title: item.title, children: item.title.slice(0, 1).toUpperCase() }, item.key || item.title)); }) })), _jsx("div", { className: "solid-sidebar-footer", children: _jsx(UserProfileMenu, {}) })] }), isDesktop && isCollapsed && (_jsx("button", { type: "button", className: "solid-sidebar-hotspot", onClick: function () { return setIsCollapsed(false); }, "aria-label": "Expand sidebar", title: "Expand sidebar" }))] }));
240
+ return (_jsxs(_Fragment, { children: [!isDesktop && visibleNavbar && _jsx("div", { className: "solid-sidebar-backdrop", onClick: function () { return dispatch(toggleNavbar()); } }), _jsxs("aside", { className: shellClasses, children: [_jsx("div", { className: "solid-sidebar-header", children: _jsxs("div", { className: "solid-workspace-switcher", children: [_jsxs("button", { type: "button", className: "solid-workspace-trigger", onClick: function () { return setWorkspaceOpen(function (prev) { return !prev; }); }, "aria-label": "Select workspace", children: [_jsx("span", { className: "solid-workspace-avatar", children: ((selectedWorkspace === null || selectedWorkspace === void 0 ? void 0 : selectedWorkspace.title) || "W").slice(0, 1).toUpperCase() }), !isCollapsed && (_jsxs(_Fragment, { children: [_jsxs("span", { className: "solid-workspace-label-wrap", children: [_jsx("span", { className: "solid-workspace-label-top", children: "Workspace" }), _jsx("span", { className: "solid-workspace-label", children: (selectedWorkspace === null || selectedWorkspace === void 0 ? void 0 : selectedWorkspace.title) || "Workspace" })] }), _jsx("span", { className: "solid-workspace-chevron-dual ".concat(workspaceOpen ? "is-open" : ""), "aria-hidden": "true", children: _jsxs("svg", { xmlns: "http://www.w3.org/2000/svg", width: "14", height: "14", viewBox: "0 0 14 14", fill: "none", children: [_jsx("path", { d: "M4 6L7 3L10 6", stroke: "currentColor", strokeWidth: "1.25", strokeLinecap: "round", strokeLinejoin: "round" }), _jsx("path", { d: "M4 8L7 11L10 8", stroke: "currentColor", strokeWidth: "1.25", strokeLinecap: "round", strokeLinejoin: "round" })] }) })] }))] }), workspaceOpen && !isCollapsed && (_jsx("div", { className: "solid-workspace-menu", children: workspaces.map(function (workspace) { return (_jsxs("button", { type: "button", className: "solid-workspace-item ".concat(workspace.key === (selectedWorkspace === null || selectedWorkspace === void 0 ? void 0 : selectedWorkspace.key) ? "is-active" : ""), onClick: function () { return selectWorkspace(workspace); }, children: [_jsx("span", { className: "solid-workspace-item-avatar", children: workspace.title.slice(0, 1).toUpperCase() }), _jsx("span", { className: "solid-workspace-item-label", children: workspace.title })] }, workspace.key || workspace.title)); }) }))] }) }), !isCollapsed ? (_jsxs(_Fragment, { children: [_jsx("div", { className: "solid-sidebar-search-wrap", children: _jsx("input", { type: "text", value: searchTerm, onChange: function (e) { return setSearchTerm(e.target.value); }, placeholder: "Search in menu...", className: "solid-sidebar-search" }) }), _jsx("div", { className: "solid-sidebar-tree-wrap", children: _jsx(SidebarMenuTree, { items: filteredMenu, pathname: pathname, searchParams: searchParams, forceExpand: !!searchTerm.trim() }) })] })) : (_jsx("div", { className: "solid-sidebar-collapsed-nav", children: filteredMenu.slice(0, 10).map(function (item) { return (_jsx(SolidLink, { href: item.path || "#", className: "solid-collapsed-item ".concat(isMenuPathActive(item.path, pathname, searchParams) ? "is-active" : ""), title: item.title, children: item.title.slice(0, 1).toUpperCase() }, item.key || item.title)); }) })), _jsx("div", { className: "solid-sidebar-footer", children: _jsx(UserProfileMenu, {}) })] }), isDesktop && isCollapsed && (_jsx("button", { type: "button", className: "solid-sidebar-hotspot", onClick: function () { return setIsCollapsed(false); }, "aria-label": "Expand sidebar", title: "Expand sidebar" }))] }));
173
241
  };
174
242
  export default AppSidebar;
175
243
  //# sourceMappingURL=AppSidebar.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"AppSidebar.js","sourceRoot":"","sources":["../../../src/components/layout/AppSidebar.tsx"],"names":[],"mappings":"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","sourcesContent":["import { useGetSolidMenuBasedOnRoleQuery } from \"../../redux/api/solidMenuApi\";\nimport { hideNavbar, toggleNavbar } from \"../../redux/features/navbarSlice\";\nimport { setIsAuthenticated, setUser } from \"../../redux/features/userSlice\";\nimport { useSession } from \"../../hooks/useSession\";\nimport { useEffect, useMemo, useState } from \"react\";\nimport { useDispatch, useSelector } from \"react-redux\";\nimport UserProfileMenu from \"./user-profile-menu\";\nimport SolidLink from \"../common/Link\";\nimport { usePathname } from \"../../hooks/usePathname\";\nimport { env } from \"../../adapters/env\";\n\ntype SolidMenuItem = {\n key?: string;\n title: string;\n path?: string;\n icon?: string | { src?: string };\n children?: SolidMenuItem[];\n};\n\nconst defaultMenuKey = env(\"NEXT_PUBLIC_DEFAULT_MENU_KEY\");\nconst SIDEBAR_STORAGE_KEY = \"solidx.sidebar.collapsed\";\nconst SIDEBAR_TOGGLE_EVENT = \"solidx:sidebar-toggle\";\nconst DESKTOP_SIDEBAR_WIDTH = \"272px\";\n\nfunction filterMenuItems(items: SolidMenuItem[], query: string): SolidMenuItem[] {\n const normalizedQuery = query.trim().toLowerCase();\n if (!normalizedQuery) return items;\n\n const next: SolidMenuItem[] = [];\n items.forEach((item) => {\n const children = item.children ? filterMenuItems(item.children, normalizedQuery) : [];\n const matchesSelf = item.title.toLowerCase().includes(normalizedQuery);\n if (matchesSelf || children.length > 0) {\n next.push({ ...item, children });\n }\n });\n return next;\n}\n\nconst SidebarMenuTree = ({\n items,\n pathname,\n forceExpand,\n}: {\n items: SolidMenuItem[];\n pathname: string;\n forceExpand?: boolean;\n}) => {\n const [expandedKeys, setExpandedKeys] = useState<Record<string, boolean>>({});\n\n const buildNodeId = (node: SolidMenuItem, parentId: string, index: number) => {\n const base = node.key || node.path || node.title || `node-${index}`;\n return `${parentId}/${base}`;\n };\n\n useEffect(() => {\n const initialExpanded: Record<string, boolean> = {};\n if (forceExpand) {\n const walk = (nodes: SolidMenuItem[], parentId = \"root\") => {\n nodes.forEach((node, index) => {\n const nodeId = buildNodeId(node, parentId, index);\n if (node.children && node.children.length > 0 && node.key) {\n initialExpanded[nodeId] = true;\n walk(node.children, nodeId);\n } else if (node.children && node.children.length > 0) {\n initialExpanded[nodeId] = true;\n walk(node.children, nodeId);\n }\n });\n };\n walk(items);\n }\n setExpandedKeys(initialExpanded);\n }, [items, forceExpand]);\n\n const toggleExpanded = (nodeId: string) => {\n setExpandedKeys((prev) => ({ ...prev, [nodeId]: !prev[nodeId] }));\n };\n\n const renderNode = (node: SolidMenuItem, depth = 0, parentId = \"root\", index = 0) => {\n const nodeId = buildNodeId(node, parentId, index);\n const hasChildren = !!(node.children && node.children.length > 0);\n const isExpanded = expandedKeys[nodeId] === true;\n const isActive = !!node.path && pathname === node.path;\n const paddingLeft = 12 + depth * 14;\n\n return (\n <li key={nodeId} className=\"solid-sidebar-tree-item\">\n <div\n className={`solid-sidebar-tree-row ${isActive ? \"is-active\" : \"\"}`}\n style={{ paddingLeft }}\n >\n {hasChildren ? (\n <button\n type=\"button\"\n className=\"solid-sidebar-tree-parent\"\n onClick={() => toggleExpanded(nodeId)}\n aria-expanded={isExpanded}\n aria-label={`Toggle ${node.title}`}\n >\n <span className=\"solid-sidebar-tree-label\">{node.title}</span>\n </button>\n ) : node.path ? (\n <SolidLink href={node.path} className=\"solid-sidebar-tree-link\">\n <span className=\"solid-sidebar-tree-label\">{node.title}</span>\n </SolidLink>\n ) : (\n <span className=\"solid-sidebar-tree-label\">{node.title}</span>\n )}\n {hasChildren && (\n <button\n type=\"button\"\n className=\"solid-sidebar-tree-toggle\"\n onClick={() => toggleExpanded(nodeId)}\n aria-label={`Toggle ${node.title}`}\n >\n <span className=\"solid-tree-plusminus\">{isExpanded ? \"−\" : \"+\"}</span>\n </button>\n )}\n </div>\n {hasChildren && isExpanded && (\n <ul className=\"solid-sidebar-tree-list solid-sidebar-tree-children\">\n {node.children!.map((child, childIndex) => renderNode(child, depth + 1, nodeId, childIndex))}\n </ul>\n )}\n </li>\n );\n };\n\n return <ul className=\"solid-sidebar-tree-list\">{items.map((item, index) => renderNode(item, 0, \"root\", index))}</ul>;\n};\n\nconst AppSidebar = () => {\n const dispatch = useDispatch();\n const pathname = usePathname();\n const visibleNavbar = useSelector((state: any) => state.navbarState.visibleNavbar);\n const { data: menu } = useGetSolidMenuBasedOnRoleQuery(\"\");\n\n const [searchTerm, setSearchTerm] = useState(\"\");\n const [workspaceOpen, setWorkspaceOpen] = useState(false);\n const [selectedWorkspaceKey, setSelectedWorkspaceKey] = useState(\"\");\n const [isDesktop, setIsDesktop] = useState<boolean>(typeof window === \"undefined\" ? true : window.innerWidth > 1199);\n const [isCollapsed, setIsCollapsed] = useState<boolean>(() => {\n if (typeof window === \"undefined\") return false;\n const stored = window.localStorage.getItem(SIDEBAR_STORAGE_KEY);\n if (stored === null) return true;\n return stored === \"true\";\n });\n\n const { data } = useSession();\n\n useEffect(() => {\n if (data) {\n dispatch(setUser(data?.user));\n dispatch(setIsAuthenticated(true));\n }\n }, [data, dispatch]);\n\n useEffect(() => {\n const onResize = () => {\n const desktop = window.innerWidth > 1199;\n setIsDesktop(desktop);\n if (desktop) {\n dispatch(hideNavbar());\n }\n };\n\n onResize();\n window.addEventListener(\"resize\", onResize);\n return () => window.removeEventListener(\"resize\", onResize);\n }, [dispatch]);\n\n useEffect(() => {\n if (typeof window === \"undefined\") return;\n window.localStorage.setItem(SIDEBAR_STORAGE_KEY, String(isCollapsed));\n }, [isCollapsed]);\n\n useEffect(() => {\n const width = isDesktop ? (isCollapsed ? \"0px\" : DESKTOP_SIDEBAR_WIDTH) : \"0px\";\n document.documentElement.style.setProperty(\"--solid-sidebar-width\", width);\n }, [isDesktop, isCollapsed]);\n\n useEffect(() => {\n if (!menu?.data?.length) return;\n const defaultWorkspace = menu.data.find((m: any) => m.key === defaultMenuKey) || menu.data[0];\n setSelectedWorkspaceKey((prev) => prev || defaultWorkspace?.key || \"\");\n }, [menu]);\n\n useEffect(() => {\n if (!isDesktop) {\n dispatch(hideNavbar());\n }\n }, [pathname, dispatch, isDesktop]);\n\n useEffect(() => {\n const onToggleRequest = () => {\n if (window.innerWidth > 1199) {\n setIsCollapsed((prev) => !prev);\n return;\n }\n dispatch(toggleNavbar());\n };\n\n window.addEventListener(SIDEBAR_TOGGLE_EVENT, onToggleRequest);\n return () => window.removeEventListener(SIDEBAR_TOGGLE_EVENT, onToggleRequest);\n }, [dispatch]);\n\n const workspaces: SolidMenuItem[] = menu?.data || [];\n const selectedWorkspace = workspaces.find((m) => m.key === selectedWorkspaceKey) || workspaces[0];\n const selectedWorkspaceChildren = selectedWorkspace?.children || [];\n\n const filteredMenu = useMemo(\n () => filterMenuItems(selectedWorkspaceChildren, searchTerm),\n [selectedWorkspaceChildren, searchTerm]\n );\n\n const shellClasses = [\n \"solid-sidebar\",\n isDesktop && isCollapsed ? \"is-collapsed\" : \"\",\n !isDesktop && visibleNavbar ? \"is-open\" : \"\",\n ]\n .filter(Boolean)\n .join(\" \");\n\n const selectWorkspace = (workspace: SolidMenuItem) => {\n setSelectedWorkspaceKey(workspace.key || \"\");\n setSearchTerm(\"\");\n setWorkspaceOpen(false);\n };\n\n return (\n <>\n {!isDesktop && visibleNavbar && <div className=\"solid-sidebar-backdrop\" onClick={() => dispatch(toggleNavbar())} />}\n\n <aside className={shellClasses}>\n <div className=\"solid-sidebar-header\">\n <div className=\"solid-workspace-switcher\">\n <button\n type=\"button\"\n className=\"solid-workspace-trigger\"\n onClick={() => setWorkspaceOpen((prev) => !prev)}\n aria-label=\"Select workspace\"\n >\n <span className=\"solid-workspace-avatar\">\n {(selectedWorkspace?.title || \"W\").slice(0, 1).toUpperCase()}\n </span>\n {!isCollapsed && (\n <>\n <span className=\"solid-workspace-label-wrap\">\n <span className=\"solid-workspace-label-top\">Workspace</span>\n <span className=\"solid-workspace-label\">{selectedWorkspace?.title || \"Workspace\"}</span>\n </span>\n <span className={`solid-workspace-chevron-dual ${workspaceOpen ? \"is-open\" : \"\"}`} aria-hidden=\"true\">\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"none\">\n <path d=\"M4 6L7 3L10 6\" stroke=\"currentColor\" strokeWidth=\"1.25\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n <path d=\"M4 8L7 11L10 8\" stroke=\"currentColor\" strokeWidth=\"1.25\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n </svg>\n </span>\n </>\n )}\n </button>\n\n {workspaceOpen && !isCollapsed && (\n <div className=\"solid-workspace-menu\">\n {workspaces.map((workspace) => (\n <button\n type=\"button\"\n key={workspace.key || workspace.title}\n className={`solid-workspace-item ${workspace.key === selectedWorkspace?.key ? \"is-active\" : \"\"}`}\n onClick={() => selectWorkspace(workspace)}\n >\n <span className=\"solid-workspace-item-avatar\">{workspace.title.slice(0, 1).toUpperCase()}</span>\n <span className=\"solid-workspace-item-label\">{workspace.title}</span>\n </button>\n ))}\n </div>\n )}\n </div>\n\n </div>\n\n {!isCollapsed ? (\n <>\n <div className=\"solid-sidebar-search-wrap\">\n <input\n type=\"text\"\n value={searchTerm}\n onChange={(e) => setSearchTerm(e.target.value)}\n placeholder=\"Search in menu...\"\n className=\"solid-sidebar-search\"\n />\n </div>\n\n <div className=\"solid-sidebar-tree-wrap\">\n <SidebarMenuTree items={filteredMenu} pathname={pathname} forceExpand={!!searchTerm.trim()} />\n </div>\n </>\n ) : (\n <div className=\"solid-sidebar-collapsed-nav\">\n {filteredMenu.slice(0, 10).map((item) => (\n <SolidLink\n key={item.key || item.title}\n href={item.path || \"#\"}\n className={`solid-collapsed-item ${pathname === item.path ? \"is-active\" : \"\"}`}\n title={item.title}\n >\n {item.title.slice(0, 1).toUpperCase()}\n </SolidLink>\n ))}\n </div>\n )}\n\n <div className=\"solid-sidebar-footer\">\n <UserProfileMenu />\n </div>\n </aside>\n\n {isDesktop && isCollapsed && (\n <button\n type=\"button\"\n className=\"solid-sidebar-hotspot\"\n onClick={() => setIsCollapsed(false)}\n aria-label=\"Expand sidebar\"\n title=\"Expand sidebar\"\n />\n )}\n </>\n );\n};\n\nexport default AppSidebar;\n"]}
1
+ {"version":3,"file":"AppSidebar.js","sourceRoot":"","sources":["../../../src/components/layout/AppSidebar.tsx"],"names":[],"mappings":"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","sourcesContent":["import { useGetSolidMenuBasedOnRoleQuery } from \"../../redux/api/solidMenuApi\";\nimport { hideNavbar, toggleNavbar } from \"../../redux/features/navbarSlice\";\nimport { setIsAuthenticated, setUser } from \"../../redux/features/userSlice\";\nimport { useSession } from \"../../hooks/useSession\";\nimport { useEffect, useMemo, useState } from \"react\";\nimport { useDispatch, useSelector } from \"react-redux\";\nimport UserProfileMenu from \"./user-profile-menu\";\nimport SolidLink from \"../common/Link\";\nimport { usePathname } from \"../../hooks/usePathname\";\nimport { useSearchParams } from \"../../hooks/useSearchParams\";\nimport { env } from \"../../adapters/env\";\n\ntype SolidMenuItem = {\n key?: string;\n title: string;\n path?: string;\n icon?: string | { src?: string };\n children?: SolidMenuItem[];\n};\n\nconst defaultMenuKey = env(\"NEXT_PUBLIC_DEFAULT_MENU_KEY\");\nconst SIDEBAR_STORAGE_KEY = \"solidx.sidebar.collapsed\";\nconst SELECTED_WORKSPACE_STORAGE_KEY = \"solidx.sidebar.selected-workspace\";\nconst SIDEBAR_TOGGLE_EVENT = \"solidx:sidebar-toggle\";\nconst DESKTOP_SIDEBAR_WIDTH = \"272px\";\nconst DEFAULT_WORKSPACE_TITLE = \"Solid Core\";\nconst DEFAULT_WORKSPACE_KEY = \"solid-core\";\n\nfunction normalizePath(path: string): string {\n if (!path || path === \"/\") return \"/\";\n return path.endsWith(\"/\") ? path.slice(0, -1) : path;\n}\n\nfunction getPathAndParams(targetPath: string): { pathname: string; searchParams: URLSearchParams } {\n const parsed = new URL(targetPath, \"http://localhost\");\n return {\n pathname: normalizePath(parsed.pathname),\n searchParams: new URLSearchParams(parsed.search),\n };\n}\n\nfunction doesSearchParamsMatchSubset(requiredParams: URLSearchParams, currentParams: URLSearchParams): boolean {\n const currentValueCounts = new Map<string, number>();\n currentParams.forEach((value, key) => {\n const token = `${key}=${value}`;\n currentValueCounts.set(token, (currentValueCounts.get(token) || 0) + 1);\n });\n\n let isSubset = true;\n requiredParams.forEach((value, key) => {\n if (!isSubset) return;\n const token = `${key}=${value}`;\n const count = currentValueCounts.get(token) || 0;\n if (count <= 0) {\n isSubset = false;\n return;\n }\n currentValueCounts.set(token, count - 1);\n });\n\n return isSubset;\n}\n\nfunction isMenuPathActive(itemPath: string | undefined, currentPathname: string, currentSearchParams: URLSearchParams): boolean {\n if (!itemPath) return false;\n\n const { pathname: itemPathname, searchParams: itemSearchParams } = getPathAndParams(itemPath);\n if (itemPathname !== normalizePath(currentPathname)) return false;\n\n return doesSearchParamsMatchSubset(itemSearchParams, currentSearchParams);\n}\n\nfunction filterMenuItems(items: SolidMenuItem[], query: string): SolidMenuItem[] {\n const normalizedQuery = query.trim().toLowerCase();\n if (!normalizedQuery) return items;\n\n const next: SolidMenuItem[] = [];\n items.forEach((item) => {\n const children = item.children ? filterMenuItems(item.children, normalizedQuery) : [];\n const matchesSelf = item.title.toLowerCase().includes(normalizedQuery);\n if (matchesSelf || children.length > 0) {\n next.push({ ...item, children });\n }\n });\n return next;\n}\n\nfunction resolveDefaultWorkspace(items: SolidMenuItem[]) {\n return (\n items.find((item) => item.key === DEFAULT_WORKSPACE_KEY) ||\n items.find((item) => item.title.trim().toLowerCase() === DEFAULT_WORKSPACE_TITLE.toLowerCase()) ||\n items.find((item) => item.key === defaultMenuKey) ||\n items[0]\n );\n}\n\nconst SidebarMenuTree = ({\n items,\n pathname,\n searchParams,\n forceExpand,\n}: {\n items: SolidMenuItem[];\n pathname: string;\n searchParams: URLSearchParams;\n forceExpand?: boolean;\n}) => {\n const [expandedKeys, setExpandedKeys] = useState<Record<string, boolean>>({});\n\n const buildNodeId = (node: SolidMenuItem, parentId: string, index: number) => {\n const base = node.key || node.path || node.title || `node-${index}`;\n return `${parentId}/${base}`;\n };\n\n useEffect(() => {\n const initialExpanded: Record<string, boolean> = {};\n if (forceExpand) {\n const walk = (nodes: SolidMenuItem[], parentId = \"root\") => {\n nodes.forEach((node, index) => {\n const nodeId = buildNodeId(node, parentId, index);\n if (node.children && node.children.length > 0 && node.key) {\n initialExpanded[nodeId] = true;\n walk(node.children, nodeId);\n } else if (node.children && node.children.length > 0) {\n initialExpanded[nodeId] = true;\n walk(node.children, nodeId);\n }\n });\n };\n walk(items);\n }\n setExpandedKeys(initialExpanded);\n }, [items, forceExpand]);\n\n const toggleExpanded = (nodeId: string) => {\n setExpandedKeys((prev) => ({ ...prev, [nodeId]: !prev[nodeId] }));\n };\n\n const renderNode = (node: SolidMenuItem, depth = 0, parentId = \"root\", index = 0) => {\n const nodeId = buildNodeId(node, parentId, index);\n const hasChildren = !!(node.children && node.children.length > 0);\n const isExpanded = expandedKeys[nodeId] === true;\n const isActive = isMenuPathActive(node.path, pathname, searchParams);\n const paddingLeft = 12 + depth * 14;\n\n return (\n <li key={nodeId} className=\"solid-sidebar-tree-item\">\n <div\n className={`solid-sidebar-tree-row ${isActive ? \"is-active\" : \"\"}`}\n style={{ paddingLeft }}\n >\n {hasChildren ? (\n <button\n type=\"button\"\n className=\"solid-sidebar-tree-parent\"\n onClick={() => toggleExpanded(nodeId)}\n aria-expanded={isExpanded}\n aria-label={`Toggle ${node.title}`}\n >\n <span className=\"solid-sidebar-tree-label\">{node.title}</span>\n </button>\n ) : node.path ? (\n <SolidLink href={node.path} className=\"solid-sidebar-tree-link\">\n <span className=\"solid-sidebar-tree-label\">{node.title}</span>\n </SolidLink>\n ) : (\n <span className=\"solid-sidebar-tree-label\">{node.title}</span>\n )}\n {hasChildren && (\n <button\n type=\"button\"\n className=\"solid-sidebar-tree-toggle\"\n onClick={() => toggleExpanded(nodeId)}\n aria-label={`Toggle ${node.title}`}\n >\n <span className=\"solid-tree-plusminus\">{isExpanded ? \"−\" : \"+\"}</span>\n </button>\n )}\n </div>\n {hasChildren && isExpanded && (\n <ul className=\"solid-sidebar-tree-list solid-sidebar-tree-children\">\n {node.children!.map((child, childIndex) => renderNode(child, depth + 1, nodeId, childIndex))}\n </ul>\n )}\n </li>\n );\n };\n\n return <ul className=\"solid-sidebar-tree-list\">{items.map((item, index) => renderNode(item, 0, \"root\", index))}</ul>;\n};\n\nconst AppSidebar = () => {\n const dispatch = useDispatch();\n const pathname = usePathname();\n const searchParams = useSearchParams();\n const visibleNavbar = useSelector((state: any) => state.navbarState.visibleNavbar);\n const { data: menu } = useGetSolidMenuBasedOnRoleQuery(\"\");\n\n const [searchTerm, setSearchTerm] = useState(\"\");\n const [workspaceOpen, setWorkspaceOpen] = useState(false);\n const [selectedWorkspaceKey, setSelectedWorkspaceKey] = useState<string>(() => {\n if (typeof window === \"undefined\") return \"\";\n return window.localStorage.getItem(SELECTED_WORKSPACE_STORAGE_KEY) || \"\";\n });\n const [isDesktop, setIsDesktop] = useState<boolean>(typeof window === \"undefined\" ? true : window.innerWidth > 1199);\n const [isCollapsed, setIsCollapsed] = useState<boolean>(() => {\n if (typeof window === \"undefined\") return false;\n const stored = window.localStorage.getItem(SIDEBAR_STORAGE_KEY);\n if (stored === null) return true;\n return stored === \"true\";\n });\n\n const { data } = useSession();\n\n useEffect(() => {\n if (data) {\n dispatch(setUser(data?.user));\n dispatch(setIsAuthenticated(true));\n }\n }, [data, dispatch]);\n\n useEffect(() => {\n const onResize = () => {\n const desktop = window.innerWidth > 1199;\n setIsDesktop(desktop);\n if (desktop) {\n dispatch(hideNavbar());\n }\n };\n\n onResize();\n window.addEventListener(\"resize\", onResize);\n return () => window.removeEventListener(\"resize\", onResize);\n }, [dispatch]);\n\n useEffect(() => {\n if (typeof window === \"undefined\") return;\n window.localStorage.setItem(SIDEBAR_STORAGE_KEY, String(isCollapsed));\n }, [isCollapsed]);\n\n useEffect(() => {\n if (typeof window === \"undefined\") return;\n if (!selectedWorkspaceKey) {\n window.localStorage.removeItem(SELECTED_WORKSPACE_STORAGE_KEY);\n return;\n }\n window.localStorage.setItem(SELECTED_WORKSPACE_STORAGE_KEY, selectedWorkspaceKey);\n }, [selectedWorkspaceKey]);\n\n useEffect(() => {\n const width = isDesktop ? (isCollapsed ? \"0px\" : DESKTOP_SIDEBAR_WIDTH) : \"0px\";\n document.documentElement.style.setProperty(\"--solid-sidebar-width\", width);\n }, [isDesktop, isCollapsed]);\n\n useEffect(() => {\n if (!menu?.data?.length) return;\n const defaultWorkspace = resolveDefaultWorkspace(menu.data);\n const hasSelectedWorkspace = menu.data.some((workspace: SolidMenuItem) => workspace.key === selectedWorkspaceKey);\n const nextWorkspaceKey = hasSelectedWorkspace ? selectedWorkspaceKey : defaultWorkspace?.key || \"\";\n\n if (nextWorkspaceKey !== selectedWorkspaceKey) {\n setSelectedWorkspaceKey(nextWorkspaceKey);\n }\n }, [menu, selectedWorkspaceKey]);\n\n useEffect(() => {\n if (!isDesktop) {\n dispatch(hideNavbar());\n }\n }, [pathname, dispatch, isDesktop]);\n\n useEffect(() => {\n const onToggleRequest = () => {\n if (window.innerWidth > 1199) {\n setIsCollapsed((prev) => !prev);\n return;\n }\n dispatch(toggleNavbar());\n };\n\n window.addEventListener(SIDEBAR_TOGGLE_EVENT, onToggleRequest);\n return () => window.removeEventListener(SIDEBAR_TOGGLE_EVENT, onToggleRequest);\n }, [dispatch]);\n\n const workspaces: SolidMenuItem[] = menu?.data || [];\n const selectedWorkspace = workspaces.find((m) => m.key === selectedWorkspaceKey) || workspaces[0];\n const selectedWorkspaceChildren = selectedWorkspace?.children || [];\n\n const filteredMenu = useMemo(\n () => filterMenuItems(selectedWorkspaceChildren, searchTerm),\n [selectedWorkspaceChildren, searchTerm]\n );\n\n const shellClasses = [\n \"solid-sidebar\",\n isDesktop && isCollapsed ? \"is-collapsed\" : \"\",\n !isDesktop && visibleNavbar ? \"is-open\" : \"\",\n ]\n .filter(Boolean)\n .join(\" \");\n\n const selectWorkspace = (workspace: SolidMenuItem) => {\n setSelectedWorkspaceKey(workspace.key || \"\");\n setSearchTerm(\"\");\n setWorkspaceOpen(false);\n };\n\n return (\n <>\n {!isDesktop && visibleNavbar && <div className=\"solid-sidebar-backdrop\" onClick={() => dispatch(toggleNavbar())} />}\n\n <aside className={shellClasses}>\n <div className=\"solid-sidebar-header\">\n <div className=\"solid-workspace-switcher\">\n <button\n type=\"button\"\n className=\"solid-workspace-trigger\"\n onClick={() => setWorkspaceOpen((prev) => !prev)}\n aria-label=\"Select workspace\"\n >\n <span className=\"solid-workspace-avatar\">\n {(selectedWorkspace?.title || \"W\").slice(0, 1).toUpperCase()}\n </span>\n {!isCollapsed && (\n <>\n <span className=\"solid-workspace-label-wrap\">\n <span className=\"solid-workspace-label-top\">Workspace</span>\n <span className=\"solid-workspace-label\">{selectedWorkspace?.title || \"Workspace\"}</span>\n </span>\n <span className={`solid-workspace-chevron-dual ${workspaceOpen ? \"is-open\" : \"\"}`} aria-hidden=\"true\">\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"none\">\n <path d=\"M4 6L7 3L10 6\" stroke=\"currentColor\" strokeWidth=\"1.25\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n <path d=\"M4 8L7 11L10 8\" stroke=\"currentColor\" strokeWidth=\"1.25\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n </svg>\n </span>\n </>\n )}\n </button>\n\n {workspaceOpen && !isCollapsed && (\n <div className=\"solid-workspace-menu\">\n {workspaces.map((workspace) => (\n <button\n type=\"button\"\n key={workspace.key || workspace.title}\n className={`solid-workspace-item ${workspace.key === selectedWorkspace?.key ? \"is-active\" : \"\"}`}\n onClick={() => selectWorkspace(workspace)}\n >\n <span className=\"solid-workspace-item-avatar\">{workspace.title.slice(0, 1).toUpperCase()}</span>\n <span className=\"solid-workspace-item-label\">{workspace.title}</span>\n </button>\n ))}\n </div>\n )}\n </div>\n\n </div>\n\n {!isCollapsed ? (\n <>\n <div className=\"solid-sidebar-search-wrap\">\n <input\n type=\"text\"\n value={searchTerm}\n onChange={(e) => setSearchTerm(e.target.value)}\n placeholder=\"Search in menu...\"\n className=\"solid-sidebar-search\"\n />\n </div>\n\n <div className=\"solid-sidebar-tree-wrap\">\n <SidebarMenuTree items={filteredMenu} pathname={pathname} searchParams={searchParams} forceExpand={!!searchTerm.trim()} />\n </div>\n </>\n ) : (\n <div className=\"solid-sidebar-collapsed-nav\">\n {filteredMenu.slice(0, 10).map((item) => (\n <SolidLink\n key={item.key || item.title}\n href={item.path || \"#\"}\n className={`solid-collapsed-item ${isMenuPathActive(item.path, pathname, searchParams) ? \"is-active\" : \"\"}`}\n title={item.title}\n >\n {item.title.slice(0, 1).toUpperCase()}\n </SolidLink>\n ))}\n </div>\n )}\n\n <div className=\"solid-sidebar-footer\">\n <UserProfileMenu />\n </div>\n </aside>\n\n {isDesktop && isCollapsed && (\n <button\n type=\"button\"\n className=\"solid-sidebar-hotspot\"\n onClick={() => setIsCollapsed(false)}\n aria-label=\"Expand sidebar\"\n title=\"Expand sidebar\"\n />\n )}\n </>\n );\n};\n\nexport default AppSidebar;\n"]}
@@ -7,6 +7,7 @@ import { useDispatch, useSelector } from "react-redux";
7
7
  import UserProfileMenu from "./user-profile-menu";
8
8
  import SolidLink from "../common/Link";
9
9
  import { usePathname } from "../../hooks/usePathname";
10
+ import { useSearchParams } from "../../hooks/useSearchParams";
10
11
  import { env } from "../../adapters/env";
11
12
 
12
13
  type SolidMenuItem = {
@@ -19,8 +20,55 @@ type SolidMenuItem = {
19
20
 
20
21
  const defaultMenuKey = env("NEXT_PUBLIC_DEFAULT_MENU_KEY");
21
22
  const SIDEBAR_STORAGE_KEY = "solidx.sidebar.collapsed";
23
+ const SELECTED_WORKSPACE_STORAGE_KEY = "solidx.sidebar.selected-workspace";
22
24
  const SIDEBAR_TOGGLE_EVENT = "solidx:sidebar-toggle";
23
25
  const DESKTOP_SIDEBAR_WIDTH = "272px";
26
+ const DEFAULT_WORKSPACE_TITLE = "Solid Core";
27
+ const DEFAULT_WORKSPACE_KEY = "solid-core";
28
+
29
+ function normalizePath(path: string): string {
30
+ if (!path || path === "/") return "/";
31
+ return path.endsWith("/") ? path.slice(0, -1) : path;
32
+ }
33
+
34
+ function getPathAndParams(targetPath: string): { pathname: string; searchParams: URLSearchParams } {
35
+ const parsed = new URL(targetPath, "http://localhost");
36
+ return {
37
+ pathname: normalizePath(parsed.pathname),
38
+ searchParams: new URLSearchParams(parsed.search),
39
+ };
40
+ }
41
+
42
+ function doesSearchParamsMatchSubset(requiredParams: URLSearchParams, currentParams: URLSearchParams): boolean {
43
+ const currentValueCounts = new Map<string, number>();
44
+ currentParams.forEach((value, key) => {
45
+ const token = `${key}=${value}`;
46
+ currentValueCounts.set(token, (currentValueCounts.get(token) || 0) + 1);
47
+ });
48
+
49
+ let isSubset = true;
50
+ requiredParams.forEach((value, key) => {
51
+ if (!isSubset) return;
52
+ const token = `${key}=${value}`;
53
+ const count = currentValueCounts.get(token) || 0;
54
+ if (count <= 0) {
55
+ isSubset = false;
56
+ return;
57
+ }
58
+ currentValueCounts.set(token, count - 1);
59
+ });
60
+
61
+ return isSubset;
62
+ }
63
+
64
+ function isMenuPathActive(itemPath: string | undefined, currentPathname: string, currentSearchParams: URLSearchParams): boolean {
65
+ if (!itemPath) return false;
66
+
67
+ const { pathname: itemPathname, searchParams: itemSearchParams } = getPathAndParams(itemPath);
68
+ if (itemPathname !== normalizePath(currentPathname)) return false;
69
+
70
+ return doesSearchParamsMatchSubset(itemSearchParams, currentSearchParams);
71
+ }
24
72
 
25
73
  function filterMenuItems(items: SolidMenuItem[], query: string): SolidMenuItem[] {
26
74
  const normalizedQuery = query.trim().toLowerCase();
@@ -37,13 +85,24 @@ function filterMenuItems(items: SolidMenuItem[], query: string): SolidMenuItem[]
37
85
  return next;
38
86
  }
39
87
 
88
+ function resolveDefaultWorkspace(items: SolidMenuItem[]) {
89
+ return (
90
+ items.find((item) => item.key === DEFAULT_WORKSPACE_KEY) ||
91
+ items.find((item) => item.title.trim().toLowerCase() === DEFAULT_WORKSPACE_TITLE.toLowerCase()) ||
92
+ items.find((item) => item.key === defaultMenuKey) ||
93
+ items[0]
94
+ );
95
+ }
96
+
40
97
  const SidebarMenuTree = ({
41
98
  items,
42
99
  pathname,
100
+ searchParams,
43
101
  forceExpand,
44
102
  }: {
45
103
  items: SolidMenuItem[];
46
104
  pathname: string;
105
+ searchParams: URLSearchParams;
47
106
  forceExpand?: boolean;
48
107
  }) => {
49
108
  const [expandedKeys, setExpandedKeys] = useState<Record<string, boolean>>({});
@@ -81,7 +140,7 @@ const SidebarMenuTree = ({
81
140
  const nodeId = buildNodeId(node, parentId, index);
82
141
  const hasChildren = !!(node.children && node.children.length > 0);
83
142
  const isExpanded = expandedKeys[nodeId] === true;
84
- const isActive = !!node.path && pathname === node.path;
143
+ const isActive = isMenuPathActive(node.path, pathname, searchParams);
85
144
  const paddingLeft = 12 + depth * 14;
86
145
 
87
146
  return (
@@ -133,12 +192,16 @@ const SidebarMenuTree = ({
133
192
  const AppSidebar = () => {
134
193
  const dispatch = useDispatch();
135
194
  const pathname = usePathname();
195
+ const searchParams = useSearchParams();
136
196
  const visibleNavbar = useSelector((state: any) => state.navbarState.visibleNavbar);
137
197
  const { data: menu } = useGetSolidMenuBasedOnRoleQuery("");
138
198
 
139
199
  const [searchTerm, setSearchTerm] = useState("");
140
200
  const [workspaceOpen, setWorkspaceOpen] = useState(false);
141
- const [selectedWorkspaceKey, setSelectedWorkspaceKey] = useState("");
201
+ const [selectedWorkspaceKey, setSelectedWorkspaceKey] = useState<string>(() => {
202
+ if (typeof window === "undefined") return "";
203
+ return window.localStorage.getItem(SELECTED_WORKSPACE_STORAGE_KEY) || "";
204
+ });
142
205
  const [isDesktop, setIsDesktop] = useState<boolean>(typeof window === "undefined" ? true : window.innerWidth > 1199);
143
206
  const [isCollapsed, setIsCollapsed] = useState<boolean>(() => {
144
207
  if (typeof window === "undefined") return false;
@@ -175,6 +238,15 @@ const AppSidebar = () => {
175
238
  window.localStorage.setItem(SIDEBAR_STORAGE_KEY, String(isCollapsed));
176
239
  }, [isCollapsed]);
177
240
 
241
+ useEffect(() => {
242
+ if (typeof window === "undefined") return;
243
+ if (!selectedWorkspaceKey) {
244
+ window.localStorage.removeItem(SELECTED_WORKSPACE_STORAGE_KEY);
245
+ return;
246
+ }
247
+ window.localStorage.setItem(SELECTED_WORKSPACE_STORAGE_KEY, selectedWorkspaceKey);
248
+ }, [selectedWorkspaceKey]);
249
+
178
250
  useEffect(() => {
179
251
  const width = isDesktop ? (isCollapsed ? "0px" : DESKTOP_SIDEBAR_WIDTH) : "0px";
180
252
  document.documentElement.style.setProperty("--solid-sidebar-width", width);
@@ -182,9 +254,14 @@ const AppSidebar = () => {
182
254
 
183
255
  useEffect(() => {
184
256
  if (!menu?.data?.length) return;
185
- const defaultWorkspace = menu.data.find((m: any) => m.key === defaultMenuKey) || menu.data[0];
186
- setSelectedWorkspaceKey((prev) => prev || defaultWorkspace?.key || "");
187
- }, [menu]);
257
+ const defaultWorkspace = resolveDefaultWorkspace(menu.data);
258
+ const hasSelectedWorkspace = menu.data.some((workspace: SolidMenuItem) => workspace.key === selectedWorkspaceKey);
259
+ const nextWorkspaceKey = hasSelectedWorkspace ? selectedWorkspaceKey : defaultWorkspace?.key || "";
260
+
261
+ if (nextWorkspaceKey !== selectedWorkspaceKey) {
262
+ setSelectedWorkspaceKey(nextWorkspaceKey);
263
+ }
264
+ }, [menu, selectedWorkspaceKey]);
188
265
 
189
266
  useEffect(() => {
190
267
  if (!isDesktop) {
@@ -292,7 +369,7 @@ const AppSidebar = () => {
292
369
  </div>
293
370
 
294
371
  <div className="solid-sidebar-tree-wrap">
295
- <SidebarMenuTree items={filteredMenu} pathname={pathname} forceExpand={!!searchTerm.trim()} />
372
+ <SidebarMenuTree items={filteredMenu} pathname={pathname} searchParams={searchParams} forceExpand={!!searchTerm.trim()} />
296
373
  </div>
297
374
  </>
298
375
  ) : (
@@ -301,7 +378,7 @@ const AppSidebar = () => {
301
378
  <SolidLink
302
379
  key={item.key || item.title}
303
380
  href={item.path || "#"}
304
- className={`solid-collapsed-item ${pathname === item.path ? "is-active" : ""}`}
381
+ className={`solid-collapsed-item ${isMenuPathActive(item.path, pathname, searchParams) ? "is-active" : ""}`}
305
382
  title={item.title}
306
383
  >
307
384
  {item.title.slice(0, 1).toUpperCase()}
@@ -1 +1 @@
1
- {"version":3,"file":"SolidCodeEditor.d.ts","sourceRoot":"","sources":["../../../src/components/shad-cn-ui/SolidCodeEditor.tsx"],"names":[],"mappings":"AAEA,KAAK,oBAAoB,GAAG;IAC1B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,KAAK,IAAI,CAAC;IAC/C,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IAC3B,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB,CAAC;AAEF,wBAAgB,eAAe,CAAC,EAC9B,KAAU,EACV,QAAQ,EACR,MAAgB,EAChB,QAAiB,EACjB,QAAgB,EAChB,SAAS,EACT,QAAuB,GACxB,EAAE,oBAAoB,2CAiBtB"}
1
+ {"version":3,"file":"SolidCodeEditor.d.ts","sourceRoot":"","sources":["../../../src/components/shad-cn-ui/SolidCodeEditor.tsx"],"names":[],"mappings":"AAEA,KAAK,oBAAoB,GAAG;IAC1B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,KAAK,IAAI,CAAC;IAC/C,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IAC3B,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB,CAAC;AAEF,wBAAgB,eAAe,CAAC,EAC9B,KAAU,EACV,QAAQ,EACR,MAAgB,EAChB,QAAiB,EACjB,QAAgB,EAChB,SAAS,EACT,QAAuB,GACxB,EAAE,oBAAoB,2CA2BtB"}
@@ -2,12 +2,18 @@ import { jsx as _jsx } from "react/jsx-runtime";
2
2
  import Editor from "@monaco-editor/react";
3
3
  export function SolidCodeEditor(_a) {
4
4
  var _b = _a.value, value = _b === void 0 ? "" : _b, onChange = _a.onChange, _c = _a.height, height = _c === void 0 ? "300px" : _c, _d = _a.fontSize, fontSize = _d === void 0 ? "14px" : _d, _e = _a.readOnly, readOnly = _e === void 0 ? false : _e, className = _a.className, _f = _a.language, language = _f === void 0 ? "javascript" : _f;
5
- return (_jsx(Editor, { className: className, height: height, language: language, value: value, onChange: function (val) { return onChange === null || onChange === void 0 ? void 0 : onChange(val !== null && val !== void 0 ? val : ""); }, options: {
6
- readOnly: readOnly,
7
- minimap: { enabled: false },
8
- lineNumbers: "on",
9
- fontSize: typeof fontSize === "number" ? fontSize : parseInt(String(fontSize), 10) || 14,
10
- scrollBeyondLastLine: false,
11
- } }));
5
+ return (_jsx("div", { className: className, style: {
6
+ border: "1px solid var(--surface-border, #d0d7de)",
7
+ borderRadius: "0.5rem",
8
+ overflow: "hidden",
9
+ background: "var(--surface-card, #fff)",
10
+ }, children: _jsx(Editor, { height: height, language: language, value: value, onChange: function (val) { return onChange === null || onChange === void 0 ? void 0 : onChange(val !== null && val !== void 0 ? val : ""); }, options: {
11
+ readOnly: readOnly,
12
+ minimap: { enabled: false },
13
+ lineNumbers: "on",
14
+ fontSize: typeof fontSize === "number" ? fontSize : parseInt(String(fontSize), 10) || 14,
15
+ scrollBeyondLastLine: false,
16
+ overviewRulerBorder: false,
17
+ } }) }));
12
18
  }
13
19
  //# sourceMappingURL=SolidCodeEditor.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"SolidCodeEditor.js","sourceRoot":"","sources":["../../../src/components/shad-cn-ui/SolidCodeEditor.tsx"],"names":[],"mappings":";AAAA,OAAO,MAAM,MAAM,sBAAsB,CAAC;AAY1C,MAAM,UAAU,eAAe,CAAC,EAQT;QAPrB,aAAU,EAAV,KAAK,mBAAG,EAAE,KAAA,EACV,QAAQ,cAAA,EACR,cAAgB,EAAhB,MAAM,mBAAG,OAAO,KAAA,EAChB,gBAAiB,EAAjB,QAAQ,mBAAG,MAAM,KAAA,EACjB,gBAAgB,EAAhB,QAAQ,mBAAG,KAAK,KAAA,EAChB,SAAS,eAAA,EACT,gBAAuB,EAAvB,QAAQ,mBAAG,YAAY,KAAA;IAEvB,OAAO,CACL,KAAC,MAAM,IACL,SAAS,EAAE,SAAS,EACpB,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,QAAQ,EAClB,KAAK,EAAE,KAAK,EACZ,QAAQ,EAAE,UAAC,GAAG,IAAK,OAAA,QAAQ,aAAR,QAAQ,uBAAR,QAAQ,CAAG,GAAG,aAAH,GAAG,cAAH,GAAG,GAAI,EAAE,CAAC,EAArB,CAAqB,EACxC,OAAO,EAAE;YACP,QAAQ,UAAA;YACR,OAAO,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE;YAC3B,WAAW,EAAE,IAAI;YACjB,QAAQ,EAAE,OAAO,QAAQ,KAAK,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC,IAAI,EAAE;YACxF,oBAAoB,EAAE,KAAK;SAC5B,GACD,CACH,CAAC;AACJ,CAAC","sourcesContent":["import Editor from \"@monaco-editor/react\";\n\ntype SolidCodeEditorProps = {\n value?: string;\n onChange?: (value: string | undefined) => void;\n height?: string;\n fontSize?: string | number;\n readOnly?: boolean;\n className?: string;\n language?: string;\n};\n\nexport function SolidCodeEditor({\n value = \"\",\n onChange,\n height = \"300px\",\n fontSize = \"14px\",\n readOnly = false,\n className,\n language = \"javascript\",\n}: SolidCodeEditorProps) {\n return (\n <Editor\n className={className}\n height={height}\n language={language}\n value={value}\n onChange={(val) => onChange?.(val ?? \"\")}\n options={{\n readOnly,\n minimap: { enabled: false },\n lineNumbers: \"on\",\n fontSize: typeof fontSize === \"number\" ? fontSize : parseInt(String(fontSize), 10) || 14,\n scrollBeyondLastLine: false,\n }}\n />\n );\n}\n"]}
1
+ {"version":3,"file":"SolidCodeEditor.js","sourceRoot":"","sources":["../../../src/components/shad-cn-ui/SolidCodeEditor.tsx"],"names":[],"mappings":";AAAA,OAAO,MAAM,MAAM,sBAAsB,CAAC;AAY1C,MAAM,UAAU,eAAe,CAAC,EAQT;QAPrB,aAAU,EAAV,KAAK,mBAAG,EAAE,KAAA,EACV,QAAQ,cAAA,EACR,cAAgB,EAAhB,MAAM,mBAAG,OAAO,KAAA,EAChB,gBAAiB,EAAjB,QAAQ,mBAAG,MAAM,KAAA,EACjB,gBAAgB,EAAhB,QAAQ,mBAAG,KAAK,KAAA,EAChB,SAAS,eAAA,EACT,gBAAuB,EAAvB,QAAQ,mBAAG,YAAY,KAAA;IAEvB,OAAO,CACL,cACE,SAAS,EAAE,SAAS,EACpB,KAAK,EAAE;YACL,MAAM,EAAE,0CAA0C;YAClD,YAAY,EAAE,QAAQ;YACtB,QAAQ,EAAE,QAAQ;YAClB,UAAU,EAAE,2BAA2B;SACxC,YAED,KAAC,MAAM,IACL,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,QAAQ,EAClB,KAAK,EAAE,KAAK,EACZ,QAAQ,EAAE,UAAC,GAAG,IAAK,OAAA,QAAQ,aAAR,QAAQ,uBAAR,QAAQ,CAAG,GAAG,aAAH,GAAG,cAAH,GAAG,GAAI,EAAE,CAAC,EAArB,CAAqB,EACxC,OAAO,EAAE;gBACP,QAAQ,UAAA;gBACR,OAAO,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE;gBAC3B,WAAW,EAAE,IAAI;gBACjB,QAAQ,EAAE,OAAO,QAAQ,KAAK,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC,IAAI,EAAE;gBACxF,oBAAoB,EAAE,KAAK;gBAC3B,mBAAmB,EAAE,KAAK;aAC3B,GACD,GACE,CACP,CAAC;AACJ,CAAC","sourcesContent":["import Editor from \"@monaco-editor/react\";\n\ntype SolidCodeEditorProps = {\n value?: string;\n onChange?: (value: string | undefined) => void;\n height?: string;\n fontSize?: string | number;\n readOnly?: boolean;\n className?: string;\n language?: string;\n};\n\nexport function SolidCodeEditor({\n value = \"\",\n onChange,\n height = \"300px\",\n fontSize = \"14px\",\n readOnly = false,\n className,\n language = \"javascript\",\n}: SolidCodeEditorProps) {\n return (\n <div\n className={className}\n style={{\n border: \"1px solid var(--surface-border, #d0d7de)\",\n borderRadius: \"0.5rem\",\n overflow: \"hidden\",\n background: \"var(--surface-card, #fff)\",\n }}\n >\n <Editor\n height={height}\n language={language}\n value={value}\n onChange={(val) => onChange?.(val ?? \"\")}\n options={{\n readOnly,\n minimap: { enabled: false },\n lineNumbers: \"on\",\n fontSize: typeof fontSize === \"number\" ? fontSize : parseInt(String(fontSize), 10) || 14,\n scrollBeyondLastLine: false,\n overviewRulerBorder: false,\n }}\n />\n </div>\n );\n}\n"]}