@solidxai/core-ui 0.1.12-beta.7 → 0.1.12-beta.9

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 (233) hide show
  1. package/dist/components/auth/AuthLayout.d.ts.map +1 -1
  2. package/dist/components/auth/AuthLayout.js +19 -17
  3. package/dist/components/auth/AuthLayout.js.map +1 -1
  4. package/dist/components/auth/AuthLayout.tsx +59 -34
  5. package/dist/components/common/BackendReconnectIndicator.d.ts +6 -0
  6. package/dist/components/common/BackendReconnectIndicator.d.ts.map +1 -0
  7. package/dist/components/common/BackendReconnectIndicator.js +25 -0
  8. package/dist/components/common/BackendReconnectIndicator.js.map +1 -0
  9. package/dist/components/common/BackendReconnectIndicator.tsx +45 -0
  10. package/dist/components/common/SettingsComponent.d.ts.map +1 -1
  11. package/dist/components/common/SettingsComponent.js +7 -3
  12. package/dist/components/common/SettingsComponent.js.map +1 -1
  13. package/dist/components/common/SettingsComponent.module.css +144 -12
  14. package/dist/components/common/SettingsComponent.tsx +22 -3
  15. package/dist/components/common/SolidAdmin.d.ts.map +1 -1
  16. package/dist/components/common/SolidAdmin.js +7 -2
  17. package/dist/components/common/SolidAdmin.js.map +1 -1
  18. package/dist/components/common/SolidAdmin.tsx +7 -2
  19. package/dist/components/common/SolidBreadcrumb.d.ts.map +1 -1
  20. package/dist/components/common/SolidBreadcrumb.js +1 -6
  21. package/dist/components/common/SolidBreadcrumb.js.map +1 -1
  22. package/dist/components/common/SolidBreadcrumb.tsx +1 -8
  23. package/dist/components/common/SolidMaterialSymbol.d.ts +10 -0
  24. package/dist/components/common/SolidMaterialSymbol.d.ts.map +1 -0
  25. package/dist/components/common/SolidMaterialSymbol.js +69 -0
  26. package/dist/components/common/SolidMaterialSymbol.js.map +1 -0
  27. package/dist/components/common/SolidMaterialSymbol.tsx +96 -0
  28. package/dist/components/common/SolidToastProvider.d.ts.map +1 -1
  29. package/dist/components/common/SolidToastProvider.js +14 -1
  30. package/dist/components/common/SolidToastProvider.js.map +1 -1
  31. package/dist/components/common/SolidToastProvider.tsx +19 -1
  32. package/dist/components/core/common/SolidAccountSettings/SolidAccountSettings.module.css +3 -1
  33. package/dist/components/core/common/SolidGlobalSearchElement.d.ts.map +1 -1
  34. package/dist/components/core/common/SolidGlobalSearchElement.js +3 -2
  35. package/dist/components/core/common/SolidGlobalSearchElement.js.map +1 -1
  36. package/dist/components/core/common/SolidGlobalSearchElement.tsx +14 -18
  37. package/dist/components/core/extension/solid-core/modelMetadata/list/DeleteModelRowAction.d.ts.map +1 -1
  38. package/dist/components/core/extension/solid-core/modelMetadata/list/DeleteModelRowAction.js +43 -16
  39. package/dist/components/core/extension/solid-core/modelMetadata/list/DeleteModelRowAction.js.map +1 -1
  40. package/dist/components/core/extension/solid-core/modelMetadata/list/DeleteModelRowAction.tsx +24 -2
  41. package/dist/components/core/form/SolidFormFooter.js +1 -1
  42. package/dist/components/core/form/SolidFormFooter.js.map +1 -1
  43. package/dist/components/core/form/SolidFormFooter.tsx +1 -1
  44. package/dist/components/core/form/SolidFormLayouts.js +1 -1
  45. package/dist/components/core/form/SolidFormLayouts.js.map +1 -1
  46. package/dist/components/core/form/SolidFormLayouts.tsx +2 -2
  47. package/dist/components/core/form/fields/SolidMediaMultipleField.d.ts.map +1 -1
  48. package/dist/components/core/form/fields/SolidMediaMultipleField.js +120 -56
  49. package/dist/components/core/form/fields/SolidMediaMultipleField.js.map +1 -1
  50. package/dist/components/core/form/fields/SolidMediaMultipleField.tsx +63 -50
  51. package/dist/components/core/form/fields/SolidMediaSingleField.d.ts.map +1 -1
  52. package/dist/components/core/form/fields/SolidMediaSingleField.js +115 -37
  53. package/dist/components/core/form/fields/SolidMediaSingleField.js.map +1 -1
  54. package/dist/components/core/form/fields/SolidMediaSingleField.tsx +36 -35
  55. package/dist/components/core/form/fields/SolidRichTextField.d.ts.map +1 -1
  56. package/dist/components/core/form/fields/SolidRichTextField.js +54 -5
  57. package/dist/components/core/form/fields/SolidRichTextField.js.map +1 -1
  58. package/dist/components/core/form/fields/SolidRichTextField.tsx +71 -7
  59. package/dist/components/core/form/fields/mediaFieldUtils.d.ts +3 -0
  60. package/dist/components/core/form/fields/mediaFieldUtils.d.ts.map +1 -0
  61. package/dist/components/core/form/fields/mediaFieldUtils.js +30 -0
  62. package/dist/components/core/form/fields/mediaFieldUtils.js.map +1 -0
  63. package/dist/components/core/form/fields/mediaFieldUtils.ts +45 -0
  64. package/dist/components/core/form/fields/relations/RolesGroupedByModuleWidget.d.ts.map +1 -1
  65. package/dist/components/core/form/fields/relations/RolesGroupedByModuleWidget.js +1 -1
  66. package/dist/components/core/form/fields/relations/RolesGroupedByModuleWidget.js.map +1 -1
  67. package/dist/components/core/form/fields/relations/RolesGroupedByModuleWidget.tsx +3 -1
  68. package/dist/components/core/form/fields/relations/SolidRelationManyToOneField.d.ts.map +1 -1
  69. package/dist/components/core/form/fields/relations/SolidRelationManyToOneField.js +22 -23
  70. package/dist/components/core/form/fields/relations/SolidRelationManyToOneField.js.map +1 -1
  71. package/dist/components/core/form/fields/relations/SolidRelationManyToOneField.tsx +13 -7
  72. package/dist/components/core/form/fields/widgets/SolidIconEditWidget.d.ts.map +1 -1
  73. package/dist/components/core/form/fields/widgets/SolidIconEditWidget.js +16 -11
  74. package/dist/components/core/form/fields/widgets/SolidIconEditWidget.js.map +1 -1
  75. package/dist/components/core/form/fields/widgets/SolidIconEditWidget.tsx +32 -18
  76. package/dist/components/core/form/fields/widgets/SolidIconViewWidget.d.ts.map +1 -1
  77. package/dist/components/core/form/fields/widgets/SolidIconViewWidget.js +3 -1
  78. package/dist/components/core/form/fields/widgets/SolidIconViewWidget.js.map +1 -1
  79. package/dist/components/core/form/fields/widgets/SolidIconViewWidget.tsx +11 -5
  80. package/dist/components/core/list/SolidDataTable.d.ts.map +1 -1
  81. package/dist/components/core/list/SolidDataTable.js +3 -2
  82. package/dist/components/core/list/SolidDataTable.js.map +1 -1
  83. package/dist/components/core/list/SolidDataTable.tsx +3 -2
  84. package/dist/components/core/list/SolidListView.d.ts.map +1 -1
  85. package/dist/components/core/list/SolidListView.js +11 -5
  86. package/dist/components/core/list/SolidListView.js.map +1 -1
  87. package/dist/components/core/list/SolidListView.tsx +15 -8
  88. package/dist/components/core/list/SolidListViewColumn.d.ts.map +1 -1
  89. package/dist/components/core/list/SolidListViewColumn.js +1 -0
  90. package/dist/components/core/list/SolidListViewColumn.js.map +1 -1
  91. package/dist/components/core/list/SolidListViewColumn.tsx +1 -0
  92. package/dist/components/core/list/columns/SolidShortTextColumn.d.ts.map +1 -1
  93. package/dist/components/core/list/columns/SolidShortTextColumn.js +7 -2
  94. package/dist/components/core/list/columns/SolidShortTextColumn.js.map +1 -1
  95. package/dist/components/core/list/columns/SolidShortTextColumn.tsx +7 -2
  96. package/dist/components/core/list/columns/relations/SolidRelationManyToManyColumn.d.ts.map +1 -1
  97. package/dist/components/core/list/columns/relations/SolidRelationManyToManyColumn.js +4 -1
  98. package/dist/components/core/list/columns/relations/SolidRelationManyToManyColumn.js.map +1 -1
  99. package/dist/components/core/list/columns/relations/SolidRelationManyToManyColumn.tsx +5 -2
  100. package/dist/components/core/list/columns/relations/SolidRelationManyToOneColumn.d.ts.map +1 -1
  101. package/dist/components/core/list/columns/relations/SolidRelationManyToOneColumn.js +2 -1
  102. package/dist/components/core/list/columns/relations/SolidRelationManyToOneColumn.js.map +1 -1
  103. package/dist/components/core/list/columns/relations/SolidRelationManyToOneColumn.tsx +2 -1
  104. package/dist/components/core/list/columns/relations/SolidRelationOneToManyColumn.d.ts.map +1 -1
  105. package/dist/components/core/list/columns/relations/SolidRelationOneToManyColumn.js +4 -1
  106. package/dist/components/core/list/columns/relations/SolidRelationOneToManyColumn.js.map +1 -1
  107. package/dist/components/core/list/columns/relations/SolidRelationOneToManyColumn.tsx +5 -2
  108. package/dist/components/core/locales/SolidLocale.d.ts.map +1 -1
  109. package/dist/components/core/locales/SolidLocale.js +1 -1
  110. package/dist/components/core/locales/SolidLocale.js.map +1 -1
  111. package/dist/components/core/locales/SolidLocale.tsx +1 -0
  112. package/dist/components/core/model/CreateModel.css +26 -0
  113. package/dist/components/core/model/FieldMetaData.d.ts.map +1 -1
  114. package/dist/components/core/model/FieldMetaData.js +21 -3
  115. package/dist/components/core/model/FieldMetaData.js.map +1 -1
  116. package/dist/components/core/model/FieldMetaData.tsx +45 -4
  117. package/dist/components/core/model/FieldMetaDataForm.css +82 -0
  118. package/dist/components/core/model/FieldMetaDataForm.d.ts +1 -0
  119. package/dist/components/core/model/FieldMetaDataForm.d.ts.map +1 -1
  120. package/dist/components/core/model/FieldMetaDataForm.js +246 -235
  121. package/dist/components/core/model/FieldMetaDataForm.js.map +1 -1
  122. package/dist/components/core/model/FieldMetaDataForm.tsx +46 -34
  123. package/dist/components/core/model/FieldSelector.js +1 -1
  124. package/dist/components/core/model/FieldSelector.js.map +1 -1
  125. package/dist/components/core/model/FieldSelector.tsx +1 -1
  126. package/dist/components/core/model/ModelMetaData.js +1 -1
  127. package/dist/components/core/model/ModelMetaData.js.map +1 -1
  128. package/dist/components/core/model/ModelMetaData.tsx +1 -1
  129. package/dist/components/core/module/CreateModule.css +55 -2
  130. package/dist/components/core/module/CreateModule.d.ts.map +1 -1
  131. package/dist/components/core/module/CreateModule.js +2 -2
  132. package/dist/components/core/module/CreateModule.js.map +1 -1
  133. package/dist/components/core/module/CreateModule.tsx +3 -2
  134. package/dist/components/core/module/ModuleMetadataExplorer.css +27 -0
  135. package/dist/components/core/module/ModuleMetadataExplorer.d.ts.map +1 -1
  136. package/dist/components/core/module/ModuleMetadataExplorer.js +1 -1
  137. package/dist/components/core/module/ModuleMetadataExplorer.js.map +1 -1
  138. package/dist/components/core/module/ModuleMetadataExplorer.tsx +1 -0
  139. package/dist/components/core/tree/SolidTreeView.d.ts.map +1 -1
  140. package/dist/components/core/tree/SolidTreeView.js +6 -1
  141. package/dist/components/core/tree/SolidTreeView.js.map +1 -1
  142. package/dist/components/core/tree/SolidTreeView.tsx +7 -1
  143. package/dist/components/layout/AdminHeaderActions.d.ts.map +1 -1
  144. package/dist/components/layout/AdminHeaderActions.js +10 -9
  145. package/dist/components/layout/AdminHeaderActions.js.map +1 -1
  146. package/dist/components/layout/AdminHeaderActions.tsx +2 -0
  147. package/dist/components/layout/AppSidebar.d.ts.map +1 -1
  148. package/dist/components/layout/AppSidebar.js +2 -1
  149. package/dist/components/layout/AppSidebar.js.map +1 -1
  150. package/dist/components/layout/AppSidebar.tsx +12 -5
  151. package/dist/components/layout/SolidMenuItemIcon.d.ts +9 -0
  152. package/dist/components/layout/SolidMenuItemIcon.d.ts.map +1 -0
  153. package/dist/components/layout/SolidMenuItemIcon.js +20 -0
  154. package/dist/components/layout/SolidMenuItemIcon.js.map +1 -0
  155. package/dist/components/layout/SolidMenuItemIcon.tsx +45 -0
  156. package/dist/components/layout/navbar-two-menu.d.ts.map +1 -1
  157. package/dist/components/layout/navbar-two-menu.js +6 -7
  158. package/dist/components/layout/navbar-two-menu.js.map +1 -1
  159. package/dist/components/layout/navbar-two-menu.tsx +4 -12
  160. package/dist/components/shad-cn-ui/SolidCodeEditor.d.ts.map +1 -1
  161. package/dist/components/shad-cn-ui/SolidCodeEditor.js +30 -2
  162. package/dist/components/shad-cn-ui/SolidCodeEditor.js.map +1 -1
  163. package/dist/components/shad-cn-ui/SolidCodeEditor.tsx +38 -1
  164. package/dist/helpers/backendHealthMonitor.d.ts +39 -0
  165. package/dist/helpers/backendHealthMonitor.d.ts.map +1 -0
  166. package/dist/helpers/backendHealthMonitor.js +255 -0
  167. package/dist/helpers/backendHealthMonitor.js.map +1 -0
  168. package/dist/helpers/backendHealthMonitor.ts +177 -0
  169. package/dist/helpers/helpers.d.ts +1 -0
  170. package/dist/helpers/helpers.d.ts.map +1 -1
  171. package/dist/helpers/helpers.js +9 -0
  172. package/dist/helpers/helpers.js.map +1 -1
  173. package/dist/helpers/helpers.ts +11 -1
  174. package/dist/helpers/menuItemIcons.d.ts +34 -0
  175. package/dist/helpers/menuItemIcons.d.ts.map +1 -0
  176. package/dist/helpers/menuItemIcons.js +144 -0
  177. package/dist/helpers/menuItemIcons.js.map +1 -0
  178. package/dist/helpers/menuItemIcons.ts +191 -0
  179. package/dist/helpers/relationDisplay.d.ts +3 -0
  180. package/dist/helpers/relationDisplay.d.ts.map +1 -0
  181. package/dist/helpers/relationDisplay.js +92 -0
  182. package/dist/helpers/relationDisplay.js.map +1 -0
  183. package/dist/helpers/relationDisplay.ts +101 -0
  184. package/dist/helpers/settingsPayload.d.ts +1 -0
  185. package/dist/helpers/settingsPayload.d.ts.map +1 -1
  186. package/dist/helpers/settingsPayload.js.map +1 -1
  187. package/dist/helpers/settingsPayload.ts +1 -0
  188. package/dist/helpers/solidIcons.d.ts +2 -0
  189. package/dist/helpers/solidIcons.d.ts.map +1 -1
  190. package/dist/helpers/solidIcons.js +8 -0
  191. package/dist/helpers/solidIcons.js.map +1 -1
  192. package/dist/helpers/solidIcons.tsx +10 -1
  193. package/dist/helpers/waitForBackendAvailability.d.ts +1 -0
  194. package/dist/helpers/waitForBackendAvailability.d.ts.map +1 -1
  195. package/dist/helpers/waitForBackendAvailability.js +35 -22
  196. package/dist/helpers/waitForBackendAvailability.js.map +1 -1
  197. package/dist/helpers/waitForBackendAvailability.ts +18 -12
  198. package/dist/http/solidHttp.d.ts.map +1 -1
  199. package/dist/http/solidHttp.js +10 -4
  200. package/dist/http/solidHttp.js.map +1 -1
  201. package/dist/http/solidHttp.ts +9 -4
  202. package/dist/redux/api/datasourceIntrospectionApi.d.ts +4 -0
  203. package/dist/redux/api/datasourceIntrospectionApi.d.ts.map +1 -1
  204. package/dist/redux/api/datasourceIntrospectionApi.js.map +1 -1
  205. package/dist/redux/api/datasourceIntrospectionApi.ts +4 -0
  206. package/dist/redux/api/fetchBaseQuery.d.ts.map +1 -1
  207. package/dist/redux/api/fetchBaseQuery.js +9 -3
  208. package/dist/redux/api/fetchBaseQuery.js.map +1 -1
  209. package/dist/redux/api/fetchBaseQuery.tsx +9 -3
  210. package/dist/redux/store/StoreProvider.d.ts.map +1 -1
  211. package/dist/redux/store/StoreProvider.js +4 -3
  212. package/dist/redux/store/StoreProvider.js.map +1 -1
  213. package/dist/redux/store/StoreProvider.tsx +4 -3
  214. package/dist/resources/globals.css +341 -49
  215. package/dist/resources/solid-custom.css +410 -12
  216. package/dist/resources/solid-responsive.css +27 -16
  217. package/dist/resources/solid-tailwind-generated.css +1 -1
  218. package/dist/routes/AppEventListener.d.ts.map +1 -1
  219. package/dist/routes/AppEventListener.js +23 -0
  220. package/dist/routes/AppEventListener.js.map +1 -1
  221. package/dist/routes/AppEventListener.tsx +29 -0
  222. package/dist/routes/pages/admin/core/DashboardPage.module.css +12 -0
  223. package/dist/routes/pages/admin/core/DatasourceIntrospectionPage.css +306 -3
  224. package/dist/routes/pages/admin/core/DatasourceIntrospectionPage.d.ts.map +1 -1
  225. package/dist/routes/pages/admin/core/DatasourceIntrospectionPage.js +745 -393
  226. package/dist/routes/pages/admin/core/DatasourceIntrospectionPage.js.map +1 -1
  227. package/dist/routes/pages/admin/core/DatasourceIntrospectionPage.tsx +1074 -420
  228. package/dist/routes/pages/admin/core/DatasourcesPage.css +15 -0
  229. package/dist/routes/pages/admin/core/DatasourcesPage.d.ts.map +1 -1
  230. package/dist/routes/pages/admin/core/DatasourcesPage.js +7 -188
  231. package/dist/routes/pages/admin/core/DatasourcesPage.js.map +1 -1
  232. package/dist/routes/pages/admin/core/DatasourcesPage.tsx +3 -393
  233. package/package.json +3 -2
@@ -1,12 +1,17 @@
1
1
  import { env } from "../../adapters/env";
2
- import SolidLogo from '../../resources/images/SolidXLogo-dark.svg'
2
+ import { useContext } from "react";
3
+ import SolidLogoDark from '../../resources/images/SolidXLogo-dark.svg'
4
+ import SolidLogoLight from '../../resources/images/SolidXLogo-light.svg'
3
5
  import { ChatIcon } from "../layout/SolidAiStudioLayout";
6
+ import { LayoutContext } from "../layout/context/layoutcontext";
4
7
 
5
8
  export const SolidAdmin = () => {
9
+ const layoutContext = useContext(LayoutContext);
6
10
  const redirectUrl = env("NEXT_PUBLIC_LOGIN_REDIRECT_URL");
7
11
  const hasRedirect = Boolean(redirectUrl);
8
12
  const aiChatUrl = env("VITE_SOLIDX_AI_URL");
9
13
  const canOpenChat = Boolean(aiChatUrl);
14
+ const solidLogo = layoutContext?.themeMode === "dark" ? SolidLogoLight : SolidLogoDark;
10
15
 
11
16
  const handleChatLaunch = () => {
12
17
  if (!aiChatUrl) return;
@@ -129,7 +134,7 @@ export const SolidAdmin = () => {
129
134
  <div className="welcome-card-header">
130
135
  <img
131
136
  alt="solid logo"
132
- src={SolidLogo}
137
+ src={solidLogo}
133
138
  className="mb-2 w-4rem flex-shrink-0"
134
139
  style={{ opacity: 0.9 }}
135
140
  />
@@ -1 +1 @@
1
- {"version":3,"file":"SolidBreadcrumb.d.ts","sourceRoot":"","sources":["../../../src/components/common/SolidBreadcrumb.tsx"],"names":[],"mappings":"AAaA,UAAU,KAAK;IACb,qBAAqB,CAAC,EAAE,GAAG,CAAC;IAC5B,iBAAiB,CAAC,EAAE,GAAG,CAAC;CACzB;AAcD,eAAO,MAAM,eAAe,UAAW,KAAK,4CAyG3C,CAAC"}
1
+ {"version":3,"file":"SolidBreadcrumb.d.ts","sourceRoot":"","sources":["../../../src/components/common/SolidBreadcrumb.tsx"],"names":[],"mappings":"AAaA,UAAU,KAAK;IACb,qBAAqB,CAAC,EAAE,GAAG,CAAC;IAC5B,iBAAiB,CAAC,EAAE,GAAG,CAAC;CACzB;AAOD,eAAO,MAAM,eAAe,UAAW,KAAK,4CAyG3C,CAAC"}
@@ -1,15 +1,10 @@
1
1
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { toTitleCase } from "../../helpers/helpers";
2
3
  import { usePathname } from "../../hooks/usePathname";
3
4
  import { useRouter } from "../../hooks/useRouter";
4
5
  import { useSearchParams } from "../../hooks/useSearchParams";
5
6
  import { useEffect, useState } from "react";
6
7
  import { ChevronRight } from "lucide-react";
7
- var toTitleCase = function (str) {
8
- return str
9
- .replace(/[-_]/g, " ")
10
- .replace(/([a-z])([A-Z])/g, "$1 $2")
11
- .replace(/\b\w/g, function (char) { return char.toUpperCase(); });
12
- };
13
8
  var truncateText = function (text, maxLength) {
14
9
  if (maxLength === void 0) { maxLength = 15; }
15
10
  if (text.length <= maxLength)
@@ -1 +1 @@
1
- {"version":3,"file":"SolidBreadcrumb.js","sourceRoot":"","sources":["../../../src/components/common/SolidBreadcrumb.tsx"],"names":[],"mappings":"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","sourcesContent":["\n\nimport { usePathname } from \"../../hooks/usePathname\";\nimport { useRouter } from \"../../hooks/useRouter\";\nimport { useSearchParams } from \"../../hooks/useSearchParams\";\nimport { useEffect, useState } from \"react\";\nimport { ChevronRight } from \"lucide-react\";\n\ninterface BreadcrumbItem {\n label: string;\n link?: string;\n}\n\ninterface Props {\n solidFormViewMetaData?: any;\n initialEntityData?: any;\n}\n\nconst toTitleCase = (str: string) => {\n return str\n .replace(/[-_]/g, \" \")\n .replace(/([a-z])([A-Z])/g, \"$1 $2\")\n .replace(/\\b\\w/g, (char) => char.toUpperCase());\n};\n\nconst truncateText = (text: string, maxLength: number = 15) => {\n if (text.length <= maxLength) return text;\n return `${text.substring(0, maxLength)}...`;\n};\n\nexport const SolidBreadcrumb = (props: Props) => {\n const { solidFormViewMetaData, initialEntityData } = props;\n\n const modelMetadata = solidFormViewMetaData?.data?.solidView?.model;\n const pathname = usePathname();\n const router = useRouter();\n const searchParams = useSearchParams();\n const segments = pathname.split(\"/\").filter(Boolean);\n\n let userKeyFieldValue: string | null = null;\n\n if (modelMetadata?.userKeyField) {\n const userKeyFieldName = modelMetadata.userKeyField.name;\n if (userKeyFieldName && initialEntityData?.[userKeyFieldName] !== undefined) {\n userKeyFieldValue = initialEntityData[userKeyFieldName];\n }\n }\n\n const queryUserKeyField = searchParams.get(\"userKeyField\");\n const isNewForm = pathname.endsWith(\"/new\");\n\n useEffect(() => {\n if (!isNewForm && userKeyFieldValue && !queryUserKeyField) {\n const params = new URLSearchParams(searchParams.toString());\n params.set(\"userKeyField\", userKeyFieldValue);\n const newUrl = `${pathname}?${params.toString()}`;\n router.push(newUrl);\n }\n }, [pathname, userKeyFieldValue, queryUserKeyField, isNewForm, router]);\n\n const [fromView, setFromView] = useState<\"list\" | \"kanban\" | \"card\" | \"tree\" | null>(null);\n\n useEffect(() => {\n if (typeof window !== \"undefined\") {\n const storedView = sessionStorage.getItem(\"fromView\");\n if (storedView === \"list\" || storedView === \"kanban\" || storedView === \"card\" || storedView === \"tree\") {\n setFromView(storedView);\n }\n }\n }, []);\n\n const breadcrumbItems: BreadcrumbItem[] = [];\n\n if (segments.length >= 4 && segments[0] === \"admin\" && segments[1] === \"core\") {\n const moduleName = segments[2];\n const modelName = segments[3];\n const modelDisplayName = modelMetadata?.displayName || toTitleCase(modelName);\n\n // Link to model list or kanban view based on stored view\n breadcrumbItems.push({\n label: modelDisplayName,\n link: `/admin/core/${moduleName}/${modelName}/${fromView || \"list\"}`,\n });\n\n breadcrumbItems.push({\n label: isNewForm\n ? `Add ${modelDisplayName} Details`\n : decodeURIComponent(queryUserKeyField || userKeyFieldValue || segments[segments.length - 1] || \"\"),\n });\n }\n\n return (\n <nav className=\"solid-breadcrumb\" aria-label=\"Breadcrumb\">\n <ol className=\"solid-breadcrumb-list\">\n {breadcrumbItems.map((item, index) => {\n const fullLabel = item.label;\n const truncatedLabel = truncateText(fullLabel, 10);\n const shouldTruncate = fullLabel.length > 10;\n const isLast = index === breadcrumbItems.length - 1;\n\n const handleClick = () => {\n if (!item.link) return;\n if (typeof window !== \"undefined\") {\n const storedFullUrl = sessionStorage.getItem(\"fromViewUrl\");\n if (storedFullUrl) {\n router.push(storedFullUrl);\n return;\n }\n }\n router.push(item.link);\n };\n\n return (\n <li key={`${item.label}-${index}`} className=\"solid-breadcrumb-item\">\n {item.link ? (\n <button\n type=\"button\"\n className=\"solid-breadcrumb-link\"\n onClick={handleClick}\n title={shouldTruncate ? fullLabel : undefined}\n >\n <span className={isLast ? \"font-bold\" : \"font-normal\"}>{truncatedLabel}</span>\n </button>\n ) : (\n <span className=\"solid-breadcrumb-current\" title={shouldTruncate ? fullLabel : undefined}>\n {truncatedLabel}\n </span>\n )}\n {!isLast ? <ChevronRight size={14} className=\"solid-breadcrumb-separator\" /> : null}\n </li>\n );\n })}\n </ol>\n </nav>\n );\n};\n"]}
1
+ {"version":3,"file":"SolidBreadcrumb.js","sourceRoot":"","sources":["../../../src/components/common/SolidBreadcrumb.tsx"],"names":[],"mappings":"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","sourcesContent":["\nimport { toTitleCase } from \"../../helpers/helpers\";\nimport { usePathname } from \"../../hooks/usePathname\";\nimport { useRouter } from \"../../hooks/useRouter\";\nimport { useSearchParams } from \"../../hooks/useSearchParams\";\nimport { useEffect, useState } from \"react\";\nimport { ChevronRight } from \"lucide-react\";\n\ninterface BreadcrumbItem {\n label: string;\n link?: string;\n}\n\ninterface Props {\n solidFormViewMetaData?: any;\n initialEntityData?: any;\n}\n\nconst truncateText = (text: string, maxLength: number = 15) => {\n if (text.length <= maxLength) return text;\n return `${text.substring(0, maxLength)}...`;\n};\n\nexport const SolidBreadcrumb = (props: Props) => {\n const { solidFormViewMetaData, initialEntityData } = props;\n\n const modelMetadata = solidFormViewMetaData?.data?.solidView?.model;\n const pathname = usePathname();\n const router = useRouter();\n const searchParams = useSearchParams();\n const segments = pathname.split(\"/\").filter(Boolean);\n\n let userKeyFieldValue: string | null = null;\n\n if (modelMetadata?.userKeyField) {\n const userKeyFieldName = modelMetadata.userKeyField.name;\n if (userKeyFieldName && initialEntityData?.[userKeyFieldName] !== undefined) {\n userKeyFieldValue = initialEntityData[userKeyFieldName];\n }\n }\n\n const queryUserKeyField = searchParams.get(\"userKeyField\");\n const isNewForm = pathname.endsWith(\"/new\");\n\n useEffect(() => {\n if (!isNewForm && userKeyFieldValue && !queryUserKeyField) {\n const params = new URLSearchParams(searchParams.toString());\n params.set(\"userKeyField\", userKeyFieldValue);\n const newUrl = `${pathname}?${params.toString()}`;\n router.push(newUrl);\n }\n }, [pathname, userKeyFieldValue, queryUserKeyField, isNewForm, router]);\n\n const [fromView, setFromView] = useState<\"list\" | \"kanban\" | \"card\" | \"tree\" | null>(null);\n\n useEffect(() => {\n if (typeof window !== \"undefined\") {\n const storedView = sessionStorage.getItem(\"fromView\");\n if (storedView === \"list\" || storedView === \"kanban\" || storedView === \"card\" || storedView === \"tree\") {\n setFromView(storedView);\n }\n }\n }, []);\n\n const breadcrumbItems: BreadcrumbItem[] = [];\n\n if (segments.length >= 4 && segments[0] === \"admin\" && segments[1] === \"core\") {\n const moduleName = segments[2];\n const modelName = segments[3];\n const modelDisplayName = modelMetadata?.displayName || toTitleCase(modelName);\n\n // Link to model list or kanban view based on stored view\n breadcrumbItems.push({\n label: modelDisplayName,\n link: `/admin/core/${moduleName}/${modelName}/${fromView || \"list\"}`,\n });\n\n breadcrumbItems.push({\n label: isNewForm\n ? `Add ${modelDisplayName} Details`\n : decodeURIComponent(queryUserKeyField || userKeyFieldValue || segments[segments.length - 1] || \"\"),\n });\n }\n\n return (\n <nav className=\"solid-breadcrumb\" aria-label=\"Breadcrumb\">\n <ol className=\"solid-breadcrumb-list\">\n {breadcrumbItems.map((item, index) => {\n const fullLabel = item.label;\n const truncatedLabel = truncateText(fullLabel, 10);\n const shouldTruncate = fullLabel.length > 10;\n const isLast = index === breadcrumbItems.length - 1;\n\n const handleClick = () => {\n if (!item.link) return;\n if (typeof window !== \"undefined\") {\n const storedFullUrl = sessionStorage.getItem(\"fromViewUrl\");\n if (storedFullUrl) {\n router.push(storedFullUrl);\n return;\n }\n }\n router.push(item.link);\n };\n\n return (\n <li key={`${item.label}-${index}`} className=\"solid-breadcrumb-item\">\n {item.link ? (\n <button\n type=\"button\"\n className=\"solid-breadcrumb-link\"\n onClick={handleClick}\n title={shouldTruncate ? fullLabel : undefined}\n >\n <span className={isLast ? \"font-bold\" : \"font-normal\"}>{truncatedLabel}</span>\n </button>\n ) : (\n <span className=\"solid-breadcrumb-current\" title={shouldTruncate ? fullLabel : undefined}>\n {truncatedLabel}\n </span>\n )}\n {!isLast ? <ChevronRight size={14} className=\"solid-breadcrumb-separator\" /> : null}\n </li>\n );\n })}\n </ol>\n </nav>\n );\n};\n"]}
@@ -1,5 +1,5 @@
1
1
 
2
-
2
+ import { toTitleCase } from "../../helpers/helpers";
3
3
  import { usePathname } from "../../hooks/usePathname";
4
4
  import { useRouter } from "../../hooks/useRouter";
5
5
  import { useSearchParams } from "../../hooks/useSearchParams";
@@ -16,13 +16,6 @@ interface Props {
16
16
  initialEntityData?: any;
17
17
  }
18
18
 
19
- const toTitleCase = (str: string) => {
20
- return str
21
- .replace(/[-_]/g, " ")
22
- .replace(/([a-z])([A-Z])/g, "$1 $2")
23
- .replace(/\b\w/g, (char) => char.toUpperCase());
24
- };
25
-
26
19
  const truncateText = (text: string, maxLength: number = 15) => {
27
20
  if (text.length <= maxLength) return text;
28
21
  return `${text.substring(0, maxLength)}...`;
@@ -0,0 +1,10 @@
1
+ import React from "react";
2
+ type SolidMaterialSymbolProps = React.HTMLAttributes<HTMLSpanElement> & {
3
+ name: string;
4
+ size?: number | string;
5
+ fallback?: React.ReactNode;
6
+ onSupportChange?: (supported: boolean) => void;
7
+ };
8
+ export declare const SolidMaterialSymbol: ({ name, size, className, style, fallback, onSupportChange, ...rest }: SolidMaterialSymbolProps) => import("react/jsx-runtime").JSX.Element;
9
+ export {};
10
+ //# sourceMappingURL=SolidMaterialSymbol.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SolidMaterialSymbol.d.ts","sourceRoot":"","sources":["../../../src/components/common/SolidMaterialSymbol.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAsC,MAAM,OAAO,CAAC;AAE3D,KAAK,wBAAwB,GAAG,KAAK,CAAC,cAAc,CAAC,eAAe,CAAC,GAAG;IACtE,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IACvB,QAAQ,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAC3B,eAAe,CAAC,EAAE,CAAC,SAAS,EAAE,OAAO,KAAK,IAAI,CAAC;CAChD,CAAC;AAsBF,eAAO,MAAM,mBAAmB,yEAQ7B,wBAAwB,4CA0D1B,CAAC"}
@@ -0,0 +1,69 @@
1
+ var __assign = (this && this.__assign) || function () {
2
+ __assign = Object.assign || function(t) {
3
+ for (var s, i = 1, n = arguments.length; i < n; i++) {
4
+ s = arguments[i];
5
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
6
+ t[p] = s[p];
7
+ }
8
+ return t;
9
+ };
10
+ return __assign.apply(this, arguments);
11
+ };
12
+ var __rest = (this && this.__rest) || function (s, e) {
13
+ var t = {};
14
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
15
+ t[p] = s[p];
16
+ if (s != null && typeof Object.getOwnPropertySymbols === "function")
17
+ for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
18
+ if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
19
+ t[p[i]] = s[p[i]];
20
+ }
21
+ return t;
22
+ };
23
+ import { Fragment as _Fragment, jsx as _jsx } from "react/jsx-runtime";
24
+ import { useEffect, useRef, useState } from "react";
25
+ var MATERIAL_SYMBOL_WIDTH_MULTIPLIER = 2.25;
26
+ function cx() {
27
+ var parts = [];
28
+ for (var _i = 0; _i < arguments.length; _i++) {
29
+ parts[_i] = arguments[_i];
30
+ }
31
+ return parts.filter(Boolean).join(" ");
32
+ }
33
+ function getSizeInPixels(size, computedFontSize) {
34
+ if (typeof size === "number") {
35
+ return size;
36
+ }
37
+ var explicitSize = Number.parseFloat(size);
38
+ if (Number.isFinite(explicitSize)) {
39
+ return explicitSize;
40
+ }
41
+ var computedSize = Number.parseFloat(computedFontSize);
42
+ return Number.isFinite(computedSize) ? computedSize : 24;
43
+ }
44
+ export var SolidMaterialSymbol = function (_a) {
45
+ var name = _a.name, _b = _a.size, size = _b === void 0 ? 24 : _b, className = _a.className, style = _a.style, _c = _a.fallback, fallback = _c === void 0 ? null : _c, onSupportChange = _a.onSupportChange, rest = __rest(_a, ["name", "size", "className", "style", "fallback", "onSupportChange"]);
46
+ var symbolRef = useRef(null);
47
+ var _d = useState(null), isSupported = _d[0], setIsSupported = _d[1];
48
+ useEffect(function () {
49
+ var frameId = 0;
50
+ var measureSupport = function () {
51
+ var node = symbolRef.current;
52
+ if (!node)
53
+ return;
54
+ var computedStyle = window.getComputedStyle(node);
55
+ var sizePx = getSizeInPixels(size, computedStyle.fontSize);
56
+ var renderedWidth = Math.max(node.scrollWidth, node.getBoundingClientRect().width);
57
+ var supported = renderedWidth <= sizePx * MATERIAL_SYMBOL_WIDTH_MULTIPLIER;
58
+ setIsSupported(function (previousValue) { return previousValue === supported ? previousValue : supported; });
59
+ onSupportChange === null || onSupportChange === void 0 ? void 0 : onSupportChange(supported);
60
+ };
61
+ frameId = window.requestAnimationFrame(measureSupport);
62
+ return function () { return window.cancelAnimationFrame(frameId); };
63
+ }, [className, name, onSupportChange, size]);
64
+ if (isSupported === false) {
65
+ return _jsx(_Fragment, { children: fallback });
66
+ }
67
+ return (_jsx("span", __assign({}, rest, { ref: symbolRef, className: cx("material-symbols-outlined", className), style: __assign({ fontFamily: "\"Material Symbols Outlined\"", fontWeight: 400, fontStyle: "normal", fontSize: size, lineHeight: 1, letterSpacing: "normal", textTransform: "none", whiteSpace: "nowrap", wordWrap: "normal", direction: "ltr", display: "inline-flex", alignItems: "center", justifyContent: "center", overflow: "hidden", WebkitFontSmoothing: "antialiased", fontFeatureSettings: "\"liga\"", WebkitFontFeatureSettings: "\"liga\"", visibility: isSupported === null ? "hidden" : undefined }, style), children: name })));
68
+ };
69
+ //# sourceMappingURL=SolidMaterialSymbol.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SolidMaterialSymbol.js","sourceRoot":"","sources":["../../../src/components/common/SolidMaterialSymbol.tsx"],"names":[],"mappings":"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","sourcesContent":["import React, { useEffect, useRef, useState } from \"react\";\n\ntype SolidMaterialSymbolProps = React.HTMLAttributes<HTMLSpanElement> & {\n name: string;\n size?: number | string;\n fallback?: React.ReactNode;\n onSupportChange?: (supported: boolean) => void;\n};\n\nconst MATERIAL_SYMBOL_WIDTH_MULTIPLIER = 2.25;\n\nfunction cx(...parts: Array<string | undefined | false>) {\n return parts.filter(Boolean).join(\" \");\n}\n\nfunction getSizeInPixels(size: number | string, computedFontSize: string): number {\n if (typeof size === \"number\") {\n return size;\n }\n\n const explicitSize = Number.parseFloat(size);\n if (Number.isFinite(explicitSize)) {\n return explicitSize;\n }\n\n const computedSize = Number.parseFloat(computedFontSize);\n return Number.isFinite(computedSize) ? computedSize : 24;\n}\n\nexport const SolidMaterialSymbol = ({\n name,\n size = 24,\n className,\n style,\n fallback = null,\n onSupportChange,\n ...rest\n}: SolidMaterialSymbolProps) => {\n const symbolRef = useRef<HTMLSpanElement | null>(null);\n const [isSupported, setIsSupported] = useState<boolean | null>(null);\n\n useEffect(() => {\n let frameId = 0;\n\n const measureSupport = () => {\n const node = symbolRef.current;\n if (!node) return;\n\n const computedStyle = window.getComputedStyle(node);\n const sizePx = getSizeInPixels(size, computedStyle.fontSize);\n const renderedWidth = Math.max(node.scrollWidth, node.getBoundingClientRect().width);\n const supported = renderedWidth <= sizePx * MATERIAL_SYMBOL_WIDTH_MULTIPLIER;\n\n setIsSupported((previousValue) => previousValue === supported ? previousValue : supported);\n onSupportChange?.(supported);\n };\n\n frameId = window.requestAnimationFrame(measureSupport);\n return () => window.cancelAnimationFrame(frameId);\n }, [className, name, onSupportChange, size]);\n\n if (isSupported === false) {\n return <>{fallback}</>;\n }\n\n return (\n <span\n {...rest}\n ref={symbolRef}\n className={cx(\"material-symbols-outlined\", className)}\n style={{\n fontFamily: \"\\\"Material Symbols Outlined\\\"\",\n fontWeight: 400,\n fontStyle: \"normal\",\n fontSize: size,\n lineHeight: 1,\n letterSpacing: \"normal\",\n textTransform: \"none\",\n whiteSpace: \"nowrap\",\n wordWrap: \"normal\",\n direction: \"ltr\",\n display: \"inline-flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n overflow: \"hidden\",\n WebkitFontSmoothing: \"antialiased\",\n fontFeatureSettings: \"\\\"liga\\\"\",\n WebkitFontFeatureSettings: \"\\\"liga\\\"\",\n visibility: isSupported === null ? \"hidden\" : undefined,\n ...style,\n }}\n >\n {name}\n </span>\n );\n};\n"]}
@@ -0,0 +1,96 @@
1
+ import React, { useEffect, useRef, useState } from "react";
2
+
3
+ type SolidMaterialSymbolProps = React.HTMLAttributes<HTMLSpanElement> & {
4
+ name: string;
5
+ size?: number | string;
6
+ fallback?: React.ReactNode;
7
+ onSupportChange?: (supported: boolean) => void;
8
+ };
9
+
10
+ const MATERIAL_SYMBOL_WIDTH_MULTIPLIER = 2.25;
11
+
12
+ function cx(...parts: Array<string | undefined | false>) {
13
+ return parts.filter(Boolean).join(" ");
14
+ }
15
+
16
+ function getSizeInPixels(size: number | string, computedFontSize: string): number {
17
+ if (typeof size === "number") {
18
+ return size;
19
+ }
20
+
21
+ const explicitSize = Number.parseFloat(size);
22
+ if (Number.isFinite(explicitSize)) {
23
+ return explicitSize;
24
+ }
25
+
26
+ const computedSize = Number.parseFloat(computedFontSize);
27
+ return Number.isFinite(computedSize) ? computedSize : 24;
28
+ }
29
+
30
+ export const SolidMaterialSymbol = ({
31
+ name,
32
+ size = 24,
33
+ className,
34
+ style,
35
+ fallback = null,
36
+ onSupportChange,
37
+ ...rest
38
+ }: SolidMaterialSymbolProps) => {
39
+ const symbolRef = useRef<HTMLSpanElement | null>(null);
40
+ const [isSupported, setIsSupported] = useState<boolean | null>(null);
41
+
42
+ useEffect(() => {
43
+ let frameId = 0;
44
+
45
+ const measureSupport = () => {
46
+ const node = symbolRef.current;
47
+ if (!node) return;
48
+
49
+ const computedStyle = window.getComputedStyle(node);
50
+ const sizePx = getSizeInPixels(size, computedStyle.fontSize);
51
+ const renderedWidth = Math.max(node.scrollWidth, node.getBoundingClientRect().width);
52
+ const supported = renderedWidth <= sizePx * MATERIAL_SYMBOL_WIDTH_MULTIPLIER;
53
+
54
+ setIsSupported((previousValue) => previousValue === supported ? previousValue : supported);
55
+ onSupportChange?.(supported);
56
+ };
57
+
58
+ frameId = window.requestAnimationFrame(measureSupport);
59
+ return () => window.cancelAnimationFrame(frameId);
60
+ }, [className, name, onSupportChange, size]);
61
+
62
+ if (isSupported === false) {
63
+ return <>{fallback}</>;
64
+ }
65
+
66
+ return (
67
+ <span
68
+ {...rest}
69
+ ref={symbolRef}
70
+ className={cx("material-symbols-outlined", className)}
71
+ style={{
72
+ fontFamily: "\"Material Symbols Outlined\"",
73
+ fontWeight: 400,
74
+ fontStyle: "normal",
75
+ fontSize: size,
76
+ lineHeight: 1,
77
+ letterSpacing: "normal",
78
+ textTransform: "none",
79
+ whiteSpace: "nowrap",
80
+ wordWrap: "normal",
81
+ direction: "ltr",
82
+ display: "inline-flex",
83
+ alignItems: "center",
84
+ justifyContent: "center",
85
+ overflow: "hidden",
86
+ WebkitFontSmoothing: "antialiased",
87
+ fontFeatureSettings: "\"liga\"",
88
+ WebkitFontFeatureSettings: "\"liga\"",
89
+ visibility: isSupported === null ? "hidden" : undefined,
90
+ ...style,
91
+ }}
92
+ >
93
+ {name}
94
+ </span>
95
+ );
96
+ };
@@ -1 +1 @@
1
- {"version":3,"file":"SolidToastProvider.d.ts","sourceRoot":"","sources":["../../../src/components/common/SolidToastProvider.tsx"],"names":[],"mappings":"AAYA,eAAO,MAAM,kBAAkB,sDA0B9B,CAAC"}
1
+ {"version":3,"file":"SolidToastProvider.d.ts","sourceRoot":"","sources":["../../../src/components/common/SolidToastProvider.tsx"],"names":[],"mappings":"AAqBA,eAAO,MAAM,kBAAkB,sDAmC9B,CAAC"}
@@ -24,6 +24,12 @@ import { useDispatch, useSelector } from "react-redux";
24
24
  import { clearToast } from "../../redux/features/toastSlice";
25
25
  import { SolidToast } from "../shad-cn-ui";
26
26
  var toastId = 0;
27
+ function isSameToastMessage(current, next) {
28
+ return (current.severity === next.severity &&
29
+ current.summary === next.summary &&
30
+ current.detail === next.detail &&
31
+ current.sticky === next.sticky);
32
+ }
27
33
  export var SolidToastProvider = function () {
28
34
  var dispatch = useDispatch();
29
35
  var message = useSelector(function (state) { return state.toast.message; });
@@ -32,7 +38,14 @@ export var SolidToastProvider = function () {
32
38
  if (!message)
33
39
  return;
34
40
  toastId += 1;
35
- setQueue(function (current) { return __spreadArray(__spreadArray([], current, true), [__assign({ id: toastId }, message)], false); });
41
+ setQueue(function (current) {
42
+ var lastToast = current[current.length - 1];
43
+ var nextToast = __assign({ id: toastId }, message);
44
+ if (lastToast && isSameToastMessage(lastToast, message)) {
45
+ return __spreadArray(__spreadArray([], current.slice(0, -1), true), [nextToast], false);
46
+ }
47
+ return __spreadArray(__spreadArray([], current, true), [nextToast], false);
48
+ });
36
49
  dispatch(clearToast());
37
50
  }, [dispatch, message]);
38
51
  var handleClose = function (id) {
@@ -1 +1 @@
1
- {"version":3,"file":"SolidToastProvider.js","sourceRoot":"","sources":["../../../src/components/common/SolidToastProvider.tsx"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;AAAA,OAAc,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AACnD,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAEvD,OAAO,EAAE,UAAU,EAAgB,MAAM,iCAAiC,CAAC;AAC3E,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAM3C,IAAI,OAAO,GAAG,CAAC,CAAC;AAEhB,MAAM,CAAC,IAAM,kBAAkB,GAAG;IAChC,IAAM,QAAQ,GAAG,WAAW,EAAE,CAAC;IAC/B,IAAM,OAAO,GAAG,WAAW,CAAC,UAAC,KAAgB,IAAK,OAAA,KAAK,CAAC,KAAK,CAAC,OAAO,EAAnB,CAAmB,CAAC,CAAC;IACjE,IAAA,KAAoB,QAAQ,CAAe,EAAE,CAAC,EAA7C,KAAK,QAAA,EAAE,QAAQ,QAA8B,CAAC;IAErD,SAAS,CAAC;QACR,IAAI,CAAC,OAAO;YAAE,OAAO;QAErB,OAAO,IAAI,CAAC,CAAC;QACb,QAAQ,CAAC,UAAC,OAAO,IAAK,uCAAI,OAAO,qBAAI,EAAE,EAAE,OAAO,IAAK,OAAO,YAAtC,CAAyC,CAAC,CAAC;QACjE,QAAQ,CAAC,UAAU,EAAE,CAAC,CAAC;IACzB,CAAC,EAAE,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC,CAAC;IAExB,IAAM,WAAW,GAAG,UAAC,EAAU;QAC7B,QAAQ,CAAC,UAAC,OAAO,IAAK,OAAA,OAAO,CAAC,MAAM,CAAC,UAAC,KAAK,IAAK,OAAA,KAAK,CAAC,EAAE,KAAK,EAAE,EAAf,CAAe,CAAC,EAA1C,CAA0C,CAAC,CAAC;IACpE,CAAC,CAAC;IAEF,IAAI,CAAC,KAAK,CAAC,MAAM;QAAE,OAAO,IAAI,CAAC;IAE/B,OAAO,CACL,cAAK,SAAS,EAAC,sBAAsB,eAAW,QAAQ,iBAAa,MAAM,YACxE,KAAK,CAAC,GAAG,CAAC,UAAC,KAAK,IAAK,OAAA,CACpB,KAAC,UAAU,eAAoB,KAAK,IAAE,OAAO,EAAE,WAAW,KAAzC,KAAK,CAAC,EAAE,CAAqC,CAC/D,EAFqB,CAErB,CAAC,GACE,CACP,CAAC;AACJ,CAAC,CAAC","sourcesContent":["import React, { useEffect, useState } from \"react\";\nimport { useDispatch, useSelector } from \"react-redux\";\nimport { RootState } from \"../../types/solid-core\";\nimport { clearToast, ToastMessage } from \"../../redux/features/toastSlice\";\nimport { SolidToast } from \"../shad-cn-ui\";\n\ntype QueueToast = ToastMessage & {\n id: number;\n};\n\nlet toastId = 0;\n\nexport const SolidToastProvider = () => {\n const dispatch = useDispatch();\n const message = useSelector((state: RootState) => state.toast.message);\n const [queue, setQueue] = useState<QueueToast[]>([]);\n\n useEffect(() => {\n if (!message) return;\n\n toastId += 1;\n setQueue((current) => [...current, { id: toastId, ...message }]);\n dispatch(clearToast());\n }, [dispatch, message]);\n\n const handleClose = (id: number) => {\n setQueue((current) => current.filter((toast) => toast.id !== id));\n };\n\n if (!queue.length) return null;\n\n return (\n <div className=\"solid-toast-viewport\" aria-live=\"polite\" aria-atomic=\"true\">\n {queue.map((toast) => (\n <SolidToast key={toast.id} {...toast} onClose={handleClose} />\n ))}\n </div>\n );\n};\n"]}
1
+ {"version":3,"file":"SolidToastProvider.js","sourceRoot":"","sources":["../../../src/components/common/SolidToastProvider.tsx"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;AAAA,OAAc,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AACnD,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAEvD,OAAO,EAAE,UAAU,EAAgB,MAAM,iCAAiC,CAAC;AAC3E,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAM3C,IAAI,OAAO,GAAG,CAAC,CAAC;AAEhB,SAAS,kBAAkB,CAAC,OAAqB,EAAE,IAAkB;IACnE,OAAO,CACL,OAAO,CAAC,QAAQ,KAAK,IAAI,CAAC,QAAQ;QAClC,OAAO,CAAC,OAAO,KAAK,IAAI,CAAC,OAAO;QAChC,OAAO,CAAC,MAAM,KAAK,IAAI,CAAC,MAAM;QAC9B,OAAO,CAAC,MAAM,KAAK,IAAI,CAAC,MAAM,CAC/B,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,IAAM,kBAAkB,GAAG;IAChC,IAAM,QAAQ,GAAG,WAAW,EAAE,CAAC;IAC/B,IAAM,OAAO,GAAG,WAAW,CAAC,UAAC,KAAgB,IAAK,OAAA,KAAK,CAAC,KAAK,CAAC,OAAO,EAAnB,CAAmB,CAAC,CAAC;IACjE,IAAA,KAAoB,QAAQ,CAAe,EAAE,CAAC,EAA7C,KAAK,QAAA,EAAE,QAAQ,QAA8B,CAAC;IAErD,SAAS,CAAC;QACR,IAAI,CAAC,OAAO;YAAE,OAAO;QAErB,OAAO,IAAI,CAAC,CAAC;QACb,QAAQ,CAAC,UAAC,OAAO;YACf,IAAM,SAAS,GAAG,OAAO,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;YAC9C,IAAM,SAAS,cAAK,EAAE,EAAE,OAAO,IAAK,OAAO,CAAE,CAAC;YAE9C,IAAI,SAAS,IAAI,kBAAkB,CAAC,SAAS,EAAE,OAAO,CAAC,EAAE;gBACvD,uCAAW,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,UAAE,SAAS,UAAE;aAC7C;YAED,uCAAW,OAAO,UAAE,SAAS,UAAE;QACjC,CAAC,CAAC,CAAC;QACH,QAAQ,CAAC,UAAU,EAAE,CAAC,CAAC;IACzB,CAAC,EAAE,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC,CAAC;IAExB,IAAM,WAAW,GAAG,UAAC,EAAU;QAC7B,QAAQ,CAAC,UAAC,OAAO,IAAK,OAAA,OAAO,CAAC,MAAM,CAAC,UAAC,KAAK,IAAK,OAAA,KAAK,CAAC,EAAE,KAAK,EAAE,EAAf,CAAe,CAAC,EAA1C,CAA0C,CAAC,CAAC;IACpE,CAAC,CAAC;IAEF,IAAI,CAAC,KAAK,CAAC,MAAM;QAAE,OAAO,IAAI,CAAC;IAE/B,OAAO,CACL,cAAK,SAAS,EAAC,sBAAsB,eAAW,QAAQ,iBAAa,MAAM,YACxE,KAAK,CAAC,GAAG,CAAC,UAAC,KAAK,IAAK,OAAA,CACpB,KAAC,UAAU,eAAoB,KAAK,IAAE,OAAO,EAAE,WAAW,KAAzC,KAAK,CAAC,EAAE,CAAqC,CAC/D,EAFqB,CAErB,CAAC,GACE,CACP,CAAC;AACJ,CAAC,CAAC","sourcesContent":["import React, { useEffect, useState } from \"react\";\nimport { useDispatch, useSelector } from \"react-redux\";\nimport { RootState } from \"../../types/solid-core\";\nimport { clearToast, ToastMessage } from \"../../redux/features/toastSlice\";\nimport { SolidToast } from \"../shad-cn-ui\";\n\ntype QueueToast = ToastMessage & {\n id: number;\n};\n\nlet toastId = 0;\n\nfunction isSameToastMessage(current: ToastMessage, next: ToastMessage) {\n return (\n current.severity === next.severity &&\n current.summary === next.summary &&\n current.detail === next.detail &&\n current.sticky === next.sticky\n );\n}\n\nexport const SolidToastProvider = () => {\n const dispatch = useDispatch();\n const message = useSelector((state: RootState) => state.toast.message);\n const [queue, setQueue] = useState<QueueToast[]>([]);\n\n useEffect(() => {\n if (!message) return;\n\n toastId += 1;\n setQueue((current) => {\n const lastToast = current[current.length - 1];\n const nextToast = { id: toastId, ...message };\n\n if (lastToast && isSameToastMessage(lastToast, message)) {\n return [...current.slice(0, -1), nextToast];\n }\n\n return [...current, nextToast];\n });\n dispatch(clearToast());\n }, [dispatch, message]);\n\n const handleClose = (id: number) => {\n setQueue((current) => current.filter((toast) => toast.id !== id));\n };\n\n if (!queue.length) return null;\n\n return (\n <div className=\"solid-toast-viewport\" aria-live=\"polite\" aria-atomic=\"true\">\n {queue.map((toast) => (\n <SolidToast key={toast.id} {...toast} onClose={handleClose} />\n ))}\n </div>\n );\n};\n"]}
@@ -10,6 +10,15 @@ type QueueToast = ToastMessage & {
10
10
 
11
11
  let toastId = 0;
12
12
 
13
+ function isSameToastMessage(current: ToastMessage, next: ToastMessage) {
14
+ return (
15
+ current.severity === next.severity &&
16
+ current.summary === next.summary &&
17
+ current.detail === next.detail &&
18
+ current.sticky === next.sticky
19
+ );
20
+ }
21
+
13
22
  export const SolidToastProvider = () => {
14
23
  const dispatch = useDispatch();
15
24
  const message = useSelector((state: RootState) => state.toast.message);
@@ -19,7 +28,16 @@ export const SolidToastProvider = () => {
19
28
  if (!message) return;
20
29
 
21
30
  toastId += 1;
22
- setQueue((current) => [...current, { id: toastId, ...message }]);
31
+ setQueue((current) => {
32
+ const lastToast = current[current.length - 1];
33
+ const nextToast = { id: toastId, ...message };
34
+
35
+ if (lastToast && isSameToastMessage(lastToast, message)) {
36
+ return [...current.slice(0, -1), nextToast];
37
+ }
38
+
39
+ return [...current, nextToast];
40
+ });
23
41
  dispatch(clearToast());
24
42
  }, [dispatch, message]);
25
43
 
@@ -237,7 +237,7 @@
237
237
  width: 72px;
238
238
  height: 72px;
239
239
  border-radius: 999px;
240
- overflow: hidden;
240
+ overflow: visible;
241
241
  border: 1px solid var(--border);
242
242
  background: var(--muted);
243
243
  }
@@ -246,6 +246,7 @@
246
246
  width: 100%;
247
247
  height: 100%;
248
248
  object-fit: cover;
249
+ border-radius: inherit;
249
250
  }
250
251
 
251
252
  .avatarFallback {
@@ -256,6 +257,7 @@
256
257
  color: #fff;
257
258
  font-size: 30px;
258
259
  font-weight: 700;
260
+ border-radius: inherit;
259
261
  }
260
262
 
261
263
  .avatarRemove {
@@ -1 +1 @@
1
- {"version":3,"file":"SolidGlobalSearchElement.d.ts","sourceRoot":"","sources":["../../../../src/components/core/common/SolidGlobalSearchElement.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAgF,MAAM,OAAO,CAAC;AAYrG,OAA0B,EAAE,eAAe,EAAE,YAAY,EAAsB,MAAM,qBAAqB,CAAC;AA0B3G,MAAM,MAAM,eAAe,GAAG;IAC1B,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;CACrB,CAAA;AAED,MAAM,MAAM,cAAc,GAAG;IACzB,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,YAAY,EAAE,MAAM,CAAC;IACrB,sBAAsB,EAAE,MAAM,CAAC;CAClC,CAAA;AAoUD,eAAO,MAAM,2BAA2B,sBAAuB,GAAG,aAAa,GAAG,yBAAyB,MAAM,iBAAiB,MAAM,QAavI,CAAA;AAGD,eAAO,MAAM,mBAAmB,iBAAkB,GAAG,gBAAgB,GAAG,eAAe,GAAG,qBAAqB,GAAG,kBAAkB,YAAY,EAAE,qBAAqB,eAAe,EAAE,QAwBvL,CAAA;AAiID,eAAO,MAAM,wBAAwB,kFAiuDnC,CAAC"}
1
+ {"version":3,"file":"SolidGlobalSearchElement.d.ts","sourceRoot":"","sources":["../../../../src/components/core/common/SolidGlobalSearchElement.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAgF,MAAM,OAAO,CAAC;AAarG,OAA0B,EAAE,eAAe,EAAE,YAAY,EAAsB,MAAM,qBAAqB,CAAC;AA0B3G,MAAM,MAAM,eAAe,GAAG;IAC1B,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;CACrB,CAAA;AAED,MAAM,MAAM,cAAc,GAAG;IACzB,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,YAAY,EAAE,MAAM,CAAC;IACrB,sBAAsB,EAAE,MAAM,CAAC;CAClC,CAAA;AAoUD,eAAO,MAAM,2BAA2B,sBAAuB,GAAG,aAAa,GAAG,yBAAyB,MAAM,iBAAiB,MAAM,QAavI,CAAA;AAGD,eAAO,MAAM,mBAAmB,iBAAkB,GAAG,gBAAgB,GAAG,eAAe,GAAG,qBAAqB,GAAG,kBAAkB,YAAY,EAAE,qBAAqB,eAAe,EAAE,QAwBvL,CAAA;AAiID,eAAO,MAAM,wBAAwB,kFA4tDnC,CAAC"}
@@ -57,6 +57,7 @@ var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {
57
57
  import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
58
58
  import React, { forwardRef, useEffect, useImperativeHandle, useMemo, useRef, useState } from "react";
59
59
  import FilterComponent, { FilterOperator, FilterRuleType } from "../../../components/core/common/FilterComponent";
60
+ import { toTitleCase } from "../../../helpers/helpers";
60
61
  import { usePathname } from "../../../hooks/usePathname";
61
62
  import { useRouter } from "../../../hooks/useRouter";
62
63
  import { useSearchParams } from "../../../hooks/useSearchParams";
@@ -1582,7 +1583,7 @@ export var SolidGlobalSearchElement = forwardRef(function (_a, ref) {
1582
1583
  };
1583
1584
  var PredefinedSearchChip = function () { return (_jsx("li", { children: _jsxs("div", { className: "search-filter-chip-type", children: [_jsxs("div", { className: "flex items-center gap-2", children: [_jsxs("strong", { children: [predefinedSearchChip === null || predefinedSearchChip === void 0 ? void 0 : predefinedSearchChip.name, ":"] }), _jsx("span", { className: "custom-chip-value", children: predefinedSearchChip === null || predefinedSearchChip === void 0 ? void 0 : predefinedSearchChip.value })] }), _jsx("button", { type: "button", className: "ml-1", style: { cursor: "pointer" }, onClick: removePredefinedSearchChip, children: _jsx(X, { size: 14 }) })] }) })); };
1584
1585
  // predefinedfilter related code end
1585
- return (_jsx(_Fragment, { children: _jsxs("div", { className: "relative flex justify-center solid-custom-filter-wrapper", children: [_jsx("div", { className: "solid-global-search-element", children: _jsxs("ul", { className: "solid-global-search-chip-list", children: [visibleChipItems.map(function (chip) { return (_jsx("li", { children: _jsxs("div", { className: "search-filter-chip-type solid-chip-pill solid-chip-tone-".concat(chip.type), children: [chip.onOpen ? (_jsxs(_Fragment, { children: [_jsx("button", { type: "button", className: "solid-chip-open-button", title: chip.label, "aria-label": "Open ".concat(chip.label), onMouseDown: function (e) { return e.preventDefault(); }, onClick: function () { return handleManagedChipOpen(chip); }, children: _jsx("span", { className: "solid-chip-open-icon", "aria-hidden": "true", children: _jsx(Filter, { size: 12 }) }) }), _jsx("span", { className: "custom-chip-value solid-chip-pill-label solid-chip-open-label", title: chip.label, children: chip.label })] })) : (_jsx("span", { className: "custom-chip-value solid-chip-pill-label", title: chip.label, children: chip.label })), _jsx("button", { type: "button", className: "solid-chip-pill-remove", onMouseDown: function (e) { return e.preventDefault(); }, onClick: chip.onRemove, "aria-label": "Remove ".concat(chip.label), children: _jsx(X, { size: 14 }) })] }) }, chip.id)); }), hiddenChipCount > 0 && (_jsx("li", { children: _jsxs("button", { type: "button", ref: chipManagerTriggerRef, className: "solid-chip-manage-trigger", onMouseDown: function (e) { return e.preventDefault(); }, onClick: function () { return setShowChipManager(function (prev) { return !prev; }); }, children: ["+", hiddenChipCount, " more"] }) })), _jsx("li", { ref: chipsRef, className: "solid-global-search-input-item", children: _jsxs("div", { className: "relative solid-global-search-element-wrapper", children: [_jsx(SolidInput, { ref: searchInputRef, className: "solid-global-search-input", value: inputValue || "", placeholder: "Search.", onChange: function (e) {
1586
+ return (_jsx(_Fragment, { children: _jsxs("div", { className: "relative flex justify-center solid-custom-filter-wrapper", children: [_jsx("div", { className: "solid-global-search-element", children: _jsxs("ul", { className: "solid-global-search-chip-list", children: [visibleChipItems.map(function (chip) { return (_jsx("li", { children: _jsxs("div", { className: "search-filter-chip-type solid-chip-pill solid-chip-tone-".concat(chip.type), children: [chip.onOpen ? (_jsx("button", { type: "button", className: "solid-chip-label-button", title: chip.label, "aria-label": "Open ".concat(chip.label), onMouseDown: function (e) { return e.preventDefault(); }, onClick: function () { return handleManagedChipOpen(chip); }, children: _jsx("span", { className: "custom-chip-value solid-chip-pill-label", title: chip.label, children: chip.label }) })) : (_jsx("span", { className: "custom-chip-value solid-chip-pill-label", title: chip.label, children: chip.label })), _jsx("button", { type: "button", className: "solid-chip-pill-remove", onMouseDown: function (e) { return e.preventDefault(); }, onClick: chip.onRemove, "aria-label": "Remove ".concat(chip.label), children: _jsx(X, { size: 14 }) })] }) }, chip.id)); }), hiddenChipCount > 0 && (_jsx("li", { children: _jsxs("button", { type: "button", ref: chipManagerTriggerRef, className: "solid-chip-manage-trigger", onMouseDown: function (e) { return e.preventDefault(); }, onClick: function () { return setShowChipManager(function (prev) { return !prev; }); }, children: ["+", hiddenChipCount, " more"] }) })), _jsx("li", { ref: chipsRef, className: "solid-global-search-input-item", children: _jsxs("div", { className: "relative solid-global-search-element-wrapper", children: [_jsx(SolidInput, { ref: searchInputRef, className: "solid-global-search-input", value: inputValue || "", placeholder: "Search.", onChange: function (e) {
1586
1587
  setInputValue(e.target.value);
1587
1588
  setShowChipManager(false);
1588
1589
  setShowOverlay(true);
@@ -1620,7 +1621,7 @@ export var SolidGlobalSearchElement = forwardRef(function (_a, ref) {
1620
1621
  setRefreshKey(function (prev) { return prev + 1; });
1621
1622
  setShowOverlay(false);
1622
1623
  }
1623
- }, onMouseEnter: function () { return setFocusedIndex(index); }, children: ["Search ", _jsx("strong", { style: { paddingLeft: "2px" }, children: value.displayName.trim() }), "\u00A0for:\u00A0 ", _jsx("span", { className: "font-bold text-color", children: inputValue })] }, index));
1624
+ }, onMouseEnter: function () { return setFocusedIndex(index); }, children: ["Search ", _jsx("strong", { style: { paddingLeft: "2px" }, children: toTitleCase(value.displayName.trim()) }), "\u00A0for:\u00A0 ", _jsx("span", { className: "font-bold text-color", children: inputValue })] }, index));
1624
1625
  })) : (_jsxs("div", { className: "solid-search-overlay-no-fields", children: [_jsx("div", { className: "solid-search-overlay-no-fields-icon", children: _jsx(SearchX, { size: 14 }) }), _jsx("div", { className: "solid-search-overlay-no-fields-text", children: "No fields configured for search." })] }))] }), predefinedSearches && predefinedSearches.length > 0 && (_jsxs(_Fragment, { children: [_jsx("div", { className: "solid-filter-dialog-sep" }), _jsxs("div", { className: "custom-filter-search-options solid-search-overlay-section flex flex-col px-3 py-1", children: [_jsx("h6", { className: "my-1 solid-search-overlay-heading solid-search-overlay-section-title", children: "Predefined searches" }), predefinedSearches.map(function (predefinedSearch, index) { return (_jsxs(SolidButton, { variant: "ghost", size: "sm", className: "flex flex-col items-start gap-1 text-color solid-search-overlay-option solid-search-overlay-option-stacked ".concat(focusedIndex === searchableFields.length + index ? "solid-search-overlay-option-active" : ""), onMouseDown: function (e) {
1625
1626
  e.preventDefault();
1626
1627
  handlePredefinedSearch(predefinedSearch);