@solidxai/core-ui 0.1.13-beta.4 → 0.1.13-beta.5

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 (145) hide show
  1. package/dist/components/auth/AuthTabs.d.ts.map +1 -1
  2. package/dist/components/auth/AuthTabs.js +1 -1
  3. package/dist/components/auth/AuthTabs.js.map +1 -1
  4. package/dist/components/auth/AuthTabs.tsx +1 -0
  5. package/dist/components/auth/SolidChangeForcePassword.d.ts.map +1 -1
  6. package/dist/components/auth/SolidChangeForcePassword.js +2 -2
  7. package/dist/components/auth/SolidChangeForcePassword.js.map +1 -1
  8. package/dist/components/auth/SolidChangeForcePassword.tsx +9 -8
  9. package/dist/components/common/SettingsComponent.d.ts.map +1 -1
  10. package/dist/components/common/SettingsComponent.js +1 -1
  11. package/dist/components/common/SettingsComponent.js.map +1 -1
  12. package/dist/components/common/SettingsComponent.tsx +1 -0
  13. package/dist/components/common/SolidFieldTooltip.d.ts.map +1 -1
  14. package/dist/components/common/SolidFieldTooltip.js +1 -33
  15. package/dist/components/common/SolidFieldTooltip.js.map +1 -1
  16. package/dist/components/common/SolidFieldTooltip.tsx +8 -64
  17. package/dist/components/common/SolidMaterialSymbol.d.ts +1 -1
  18. package/dist/components/common/SolidMaterialSymbol.d.ts.map +1 -1
  19. package/dist/components/common/SolidMaterialSymbol.js +6 -37
  20. package/dist/components/common/SolidMaterialSymbol.js.map +1 -1
  21. package/dist/components/common/SolidMaterialSymbol.tsx +6 -54
  22. package/dist/components/common/SolidSettings/LlmSettings/AiModelConfigTab.d.ts.map +1 -1
  23. package/dist/components/common/SolidSettings/LlmSettings/AiModelConfigTab.js +2 -2
  24. package/dist/components/common/SolidSettings/LlmSettings/AiModelConfigTab.js.map +1 -1
  25. package/dist/components/common/SolidSettings/LlmSettings/AiModelConfigTab.tsx +2 -0
  26. package/dist/components/core/card/CardItem.d.ts.map +1 -1
  27. package/dist/components/core/card/CardItem.js +1 -1
  28. package/dist/components/core/card/CardItem.js.map +1 -1
  29. package/dist/components/core/card/CardItem.tsx +16 -14
  30. package/dist/components/core/card/SolidCardView.d.ts.map +1 -1
  31. package/dist/components/core/card/SolidCardView.js +69 -40
  32. package/dist/components/core/card/SolidCardView.js.map +1 -1
  33. package/dist/components/core/card/SolidCardView.tsx +55 -24
  34. package/dist/components/core/common/SolidAccountSettings/SolidAccountSettings.module.css +99 -0
  35. package/dist/components/core/common/SolidAccountSettings/SolidVersionInfo.d.ts.map +1 -1
  36. package/dist/components/core/common/SolidAccountSettings/SolidVersionInfo.js +76 -5
  37. package/dist/components/core/common/SolidAccountSettings/SolidVersionInfo.js.map +1 -1
  38. package/dist/components/core/common/SolidAccountSettings/SolidVersionInfo.tsx +39 -4
  39. package/dist/components/core/common/SolidGlobalSearchElement.d.ts.map +1 -1
  40. package/dist/components/core/common/SolidGlobalSearchElement.js +172 -124
  41. package/dist/components/core/common/SolidGlobalSearchElement.js.map +1 -1
  42. package/dist/components/core/common/SolidGlobalSearchElement.tsx +73 -84
  43. package/dist/components/core/common/globalSearchPersistence.d.ts +3 -0
  44. package/dist/components/core/common/globalSearchPersistence.d.ts.map +1 -1
  45. package/dist/components/core/common/globalSearchPersistence.js +33 -24
  46. package/dist/components/core/common/globalSearchPersistence.js.map +1 -1
  47. package/dist/components/core/common/globalSearchPersistence.ts +34 -27
  48. package/dist/components/core/filter/fields/SolidMediaMultipleField.js +2 -2
  49. package/dist/components/core/filter/fields/SolidMediaMultipleField.js.map +1 -1
  50. package/dist/components/core/filter/fields/SolidMediaMultipleField.tsx +2 -2
  51. package/dist/components/core/filter/fields/SolidMediaSingleField.js +2 -2
  52. package/dist/components/core/filter/fields/SolidMediaSingleField.js.map +1 -1
  53. package/dist/components/core/filter/fields/SolidMediaSingleField.tsx +2 -2
  54. package/dist/components/core/filter/fields/SolidShortTextField.js +2 -2
  55. package/dist/components/core/filter/fields/SolidShortTextField.js.map +1 -1
  56. package/dist/components/core/filter/fields/SolidShortTextField.tsx +2 -2
  57. package/dist/components/core/kanban/KanbanCard.d.ts.map +1 -1
  58. package/dist/components/core/kanban/KanbanCard.js +1 -1
  59. package/dist/components/core/kanban/KanbanCard.js.map +1 -1
  60. package/dist/components/core/kanban/KanbanCard.tsx +18 -16
  61. package/dist/components/core/kanban/SolidKanbanView.d.ts.map +1 -1
  62. package/dist/components/core/kanban/SolidKanbanView.js +67 -48
  63. package/dist/components/core/kanban/SolidKanbanView.js.map +1 -1
  64. package/dist/components/core/kanban/SolidKanbanView.tsx +51 -11
  65. package/dist/components/core/kanban/SolidKanbanViewConfigure.d.ts +1 -1
  66. package/dist/components/core/kanban/SolidKanbanViewConfigure.d.ts.map +1 -1
  67. package/dist/components/core/kanban/SolidKanbanViewConfigure.js +11 -2
  68. package/dist/components/core/kanban/SolidKanbanViewConfigure.js.map +1 -1
  69. package/dist/components/core/kanban/SolidKanbanViewConfigure.tsx +35 -0
  70. package/dist/components/core/list/SolidListView.d.ts.map +1 -1
  71. package/dist/components/core/list/SolidListView.js +6 -2
  72. package/dist/components/core/list/SolidListView.js.map +1 -1
  73. package/dist/components/core/list/SolidListView.tsx +7 -1
  74. package/dist/components/core/list/SolidListViewConfigure.d.ts.map +1 -1
  75. package/dist/components/core/list/SolidListViewConfigure.js +15 -11
  76. package/dist/components/core/list/SolidListViewConfigure.js.map +1 -1
  77. package/dist/components/core/list/SolidListViewConfigure.tsx +25 -6
  78. package/dist/components/core/list/SolidListViewHeaderContextMenuButton.d.ts +1 -1
  79. package/dist/components/core/list/SolidListViewHeaderContextMenuButton.d.ts.map +1 -1
  80. package/dist/components/core/list/SolidListViewHeaderContextMenuButton.js +3 -1
  81. package/dist/components/core/list/SolidListViewHeaderContextMenuButton.js.map +1 -1
  82. package/dist/components/core/list/SolidListViewHeaderContextMenuButton.tsx +3 -1
  83. package/dist/components/core/list/columns/SolidMediaMultipleColumn.d.ts.map +1 -1
  84. package/dist/components/core/list/columns/SolidMediaMultipleColumn.js +7 -0
  85. package/dist/components/core/list/columns/SolidMediaMultipleColumn.js.map +1 -1
  86. package/dist/components/core/list/columns/SolidMediaMultipleColumn.tsx +5 -0
  87. package/dist/components/core/list/columns/SolidMediaSingleColumn.d.ts.map +1 -1
  88. package/dist/components/core/list/columns/SolidMediaSingleColumn.js +3 -0
  89. package/dist/components/core/list/columns/SolidMediaSingleColumn.js.map +1 -1
  90. package/dist/components/core/list/columns/SolidMediaSingleColumn.tsx +2 -0
  91. package/dist/components/core/list/widgets/SolidShortTextFieldImageRenderModeWidget.d.ts.map +1 -1
  92. package/dist/components/core/list/widgets/SolidShortTextFieldImageRenderModeWidget.js +3 -0
  93. package/dist/components/core/list/widgets/SolidShortTextFieldImageRenderModeWidget.js.map +1 -1
  94. package/dist/components/core/list/widgets/SolidShortTextFieldImageRenderModeWidget.tsx +2 -0
  95. package/dist/components/core/model/CreateModel.css +10 -0
  96. package/dist/components/core/model/FieldMetaDataForm.css +10 -0
  97. package/dist/components/core/model/FieldMetaDataForm.js +8 -8
  98. package/dist/components/core/model/FieldMetaDataForm.js.map +1 -1
  99. package/dist/components/core/model/FieldMetaDataForm.tsx +13 -13
  100. package/dist/components/core/module/ModuleMetadataExplorer.css +23 -0
  101. package/dist/components/core/module/ModuleMetadataExplorer.d.ts.map +1 -1
  102. package/dist/components/core/module/ModuleMetadataExplorer.js +1 -1
  103. package/dist/components/core/module/ModuleMetadataExplorer.js.map +1 -1
  104. package/dist/components/core/module/ModuleMetadataExplorer.tsx +9 -0
  105. package/dist/components/core/tree/SolidTreeView.d.ts.map +1 -1
  106. package/dist/components/core/tree/SolidTreeView.js +249 -138
  107. package/dist/components/core/tree/SolidTreeView.js.map +1 -1
  108. package/dist/components/core/tree/SolidTreeView.tsx +220 -92
  109. package/dist/components/core/users/ApiKeysTab/GenerateApiKeyModal.d.ts.map +1 -1
  110. package/dist/components/core/users/ApiKeysTab/GenerateApiKeyModal.js +1 -1
  111. package/dist/components/core/users/ApiKeysTab/GenerateApiKeyModal.js.map +1 -1
  112. package/dist/components/core/users/ApiKeysTab/GenerateApiKeyModal.tsx +1 -0
  113. package/dist/components/layout/AdminHeaderActions.js +6 -13
  114. package/dist/components/layout/AdminHeaderActions.js.map +1 -1
  115. package/dist/components/layout/AdminHeaderActions.tsx +11 -11
  116. package/dist/components/layout/AdminLayout.d.ts.map +1 -1
  117. package/dist/components/layout/AdminLayout.js +2 -2
  118. package/dist/components/layout/AdminLayout.js.map +1 -1
  119. package/dist/components/layout/AdminLayout.tsx +5 -4
  120. package/dist/components/layout/AppSidebar.d.ts.map +1 -1
  121. package/dist/components/layout/AppSidebar.js +17 -2
  122. package/dist/components/layout/AppSidebar.js.map +1 -1
  123. package/dist/components/layout/AppSidebar.tsx +21 -2
  124. package/dist/components/shad-cn-ui/SolidDatePicker.d.ts +1 -1
  125. package/dist/components/shad-cn-ui/SolidDatePicker.d.ts.map +1 -1
  126. package/dist/components/shad-cn-ui/SolidDatePicker.js +35 -3
  127. package/dist/components/shad-cn-ui/SolidDatePicker.js.map +1 -1
  128. package/dist/components/shad-cn-ui/SolidDatePicker.tsx +84 -0
  129. package/dist/components/shad-cn-ui/SolidTooltip.d.ts.map +1 -1
  130. package/dist/components/shad-cn-ui/SolidTooltip.js +55 -2
  131. package/dist/components/shad-cn-ui/SolidTooltip.js.map +1 -1
  132. package/dist/components/shad-cn-ui/SolidTooltip.tsx +95 -1
  133. package/dist/resources/globals.css +109 -1
  134. package/dist/resources/solid-custom.css +53 -3
  135. package/dist/resources/solid-tailwind-generated.css +1 -1
  136. package/dist/routes/pages/admin/core/DashboardPage.d.ts.map +1 -1
  137. package/dist/routes/pages/admin/core/DashboardPage.js +2 -2
  138. package/dist/routes/pages/admin/core/DashboardPage.js.map +1 -1
  139. package/dist/routes/pages/admin/core/DashboardPage.tsx +2 -0
  140. package/dist/routes/pages/admin/core/DatasourceIntrospectionPage.d.ts.map +1 -1
  141. package/dist/routes/pages/admin/core/DatasourceIntrospectionPage.js +1 -1
  142. package/dist/routes/pages/admin/core/DatasourceIntrospectionPage.js.map +1 -1
  143. package/dist/routes/pages/admin/core/DatasourceIntrospectionPage.tsx +1 -0
  144. package/dist/types/css-modules.d.ts +2 -0
  145. package/package.json +1 -1
@@ -10,7 +10,7 @@ var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {
10
10
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
11
11
  import { useContext } from "react";
12
12
  import { useDispatch, useSelector } from "react-redux";
13
- import { usePathname } from "../../hooks/usePathname";
13
+ // import { usePathname } from "../../hooks/usePathname";
14
14
  import { useRouter } from "../../hooks/useRouter";
15
15
  import { useSession } from "../../hooks/useSession";
16
16
  import { env } from "../../adapters/env";
@@ -22,7 +22,7 @@ export var StudioSparkleIcon = function () { return (_jsxs("svg", { width: "14",
22
22
  var ThemeToggleIcon = function () { return (_jsxs("svg", { xmlns: "http://www.w3.org/2000/svg", width: "18", height: "18", viewBox: "0 0 24 24", fill: "none", "aria-hidden": "true", children: [_jsx("path", { d: "M12 12m-9 0a9 9 0 1 0 18 0a9 9 0 1 0 -18 0", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round" }), _jsx("path", { d: "M12 3l0 18", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round" }), _jsx("path", { d: "M12 9l4.65 -4.65", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round" }), _jsx("path", { d: "M12 14.3l7.37 -7.37", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round" }), _jsx("path", { d: "M12 19.6l8.85 -8.85", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round" })] })); };
23
23
  export var AdminHeaderActions = function (_a) {
24
24
  var variant = _a.variant, _b = _a.className, className = _b === void 0 ? "" : _b;
25
- var pathname = usePathname();
25
+ // const pathname = usePathname();
26
26
  var router = useRouter();
27
27
  var dispatch = useDispatch();
28
28
  var session = useSession().data;
@@ -31,8 +31,8 @@ export var AdminHeaderActions = function (_a) {
31
31
  var isAdmin = hasAnyRole(user === null || user === void 0 ? void 0 : user.roles, ["Admin"]);
32
32
  var isStudioMode = useSelector(function (state) { var _a, _b; return (_b = (_a = state.solidStudio) === null || _a === void 0 ? void 0 : _a.isStudioMode) !== null && _b !== void 0 ? _b : false; });
33
33
  var isDev = env("VITE_SOLIDX_ENV") === "dev";
34
- var showBack = /\/admin\/core\/[^/]+\/[^/]+\/form\/[^/]+/.test(pathname);
35
- var actions = __spreadArray(__spreadArray(__spreadArray([], (isAdmin && isDev && !isStudioMode
34
+ // const showBack = /\/admin\/core\/[^/]+\/[^/]+\/form\/[^/]+/.test(pathname);
35
+ var actions = __spreadArray(__spreadArray([], (isAdmin && isDev && !isStudioMode
36
36
  ? [{
37
37
  key: "studio",
38
38
  label: "Studio",
@@ -50,15 +50,8 @@ export var AdminHeaderActions = function (_a) {
50
50
  onClick: toggleThemeMode,
51
51
  title: "Toggle theme",
52
52
  icon: _jsx(ThemeToggleIcon, {}),
53
- }
54
- ], false), (showBack
55
- ? [{
56
- key: "back",
57
- label: "Back",
58
- onClick: function () { return router.back(); },
59
- title: "Go back",
60
- }]
61
- : []), true);
53
+ },
54
+ ], false);
62
55
  if (!actions.length) {
63
56
  return null;
64
57
  }
@@ -1 +1 @@
1
- {"version":3,"file":"AdminHeaderActions.js","sourceRoot":"","sources":["../../../src/components/layout/AdminHeaderActions.tsx"],"names":[],"mappings":"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","sourcesContent":["import { ReactNode, useContext } from \"react\";\nimport { useDispatch, useSelector } from \"react-redux\";\nimport { usePathname } from \"../../hooks/usePathname\";\nimport { useRouter } from \"../../hooks/useRouter\";\nimport { useSession } from \"../../hooks/useSession\";\nimport { env } from \"../../adapters/env\";\nimport { hasAnyRole } from \"../../helpers/rolesHelper\";\nimport { enterStudioMode } from \"../../redux/features/solidStudioSlice\";\nimport { LayoutContext } from \"./context/layoutcontext\";\nimport { BackendReconnectIndicator } from \"../common/BackendReconnectIndicator\";\n\ntype AdminHeaderActionsProps = {\n variant: \"header\" | \"sidebar\";\n className?: string;\n};\n\ntype AdminAction = {\n key: string;\n label: string;\n onClick: () => void;\n title: string;\n icon?: ReactNode;\n};\n\nexport const StudioSparkleIcon = () => (\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"none\" aria-hidden=\"true\">\n <path d=\"M7 1v2M7 11v2M1 7h2M11 7h2M2.93 2.93l1.41 1.41M9.66 9.66l1.41 1.41M2.93 11.07l1.41-1.41M9.66 4.34l1.41-1.41\" stroke=\"currentColor\" strokeWidth=\"1.4\" strokeLinecap=\"round\" />\n <circle cx=\"7\" cy=\"7\" r=\"2\" stroke=\"currentColor\" strokeWidth=\"1.4\" />\n </svg>\n);\n\nconst ThemeToggleIcon = () => (\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"18\" height=\"18\" viewBox=\"0 0 24 24\" fill=\"none\" aria-hidden=\"true\">\n <path d=\"M12 12m-9 0a9 9 0 1 0 18 0a9 9 0 1 0 -18 0\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n <path d=\"M12 3l0 18\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n <path d=\"M12 9l4.65 -4.65\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n <path d=\"M12 14.3l7.37 -7.37\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n <path d=\"M12 19.6l8.85 -8.85\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n </svg>\n);\n\nexport const AdminHeaderActions = ({ variant, className = \"\" }: AdminHeaderActionsProps) => {\n const pathname = usePathname();\n const router = useRouter();\n const dispatch = useDispatch();\n const { data: session } = useSession();\n const { toggleThemeMode, themeMode } = useContext(LayoutContext);\n const user = session?.user;\n const isAdmin = hasAnyRole(user?.roles, [\"Admin\"]);\n const isStudioMode = useSelector((state: any) => state.solidStudio?.isStudioMode ?? false);\n const isDev = env(\"VITE_SOLIDX_ENV\") === \"dev\";\n const showBack = /\\/admin\\/core\\/[^/]+\\/[^/]+\\/form\\/[^/]+/.test(pathname);\n\n const actions: AdminAction[] = [\n ...(isAdmin && isDev && !isStudioMode\n ? [{\n key: \"studio\",\n label: \"Studio\",\n onClick: () => {\n dispatch(enterStudioMode());\n router.push(\"/studio\");\n },\n title: \"Enter SolidX Studio\",\n icon: <StudioSparkleIcon />,\n }]\n : []),\n {\n key: \"theme\",\n label: themeMode === \"dark\" ? \"Light Mode\" : \"Dark Mode\",\n onClick: toggleThemeMode,\n title: \"Toggle theme\",\n icon: <ThemeToggleIcon />,\n },\n ...(showBack\n ? [{\n key: \"back\",\n label: \"Back\",\n onClick: () => router.back(),\n title: \"Go back\",\n }]\n : []),\n ];\n\n if (!actions.length) {\n return null;\n }\n\n if (variant === \"sidebar\") {\n return (\n <div className={`solid-sidebar-mobile-actions md:hidden ${className}`.trim()}>\n {actions.map((action) => (\n <button\n key={action.key}\n type=\"button\"\n className=\"solid-sidebar-mobile-action\"\n onClick={action.onClick}\n title={action.title}\n aria-label={action.title}\n >\n {action.label}\n </button>\n ))}\n </div>\n );\n }\n\n return (\n <div className={`solid-admin-header-actions hidden md:flex ${className}`.trim()}>\n <BackendReconnectIndicator />\n {actions.map((action) => {\n if (action.key === \"studio\") {\n return (\n <button\n key={action.key}\n type=\"button\"\n className=\"solid-studio-trigger-btn\"\n onClick={action.onClick}\n title={action.title}\n aria-label={action.title}\n >\n {action.icon}\n <span className=\"solid-studio-trigger-label\">{action.label}</span>\n </button>\n );\n }\n\n if (action.key === \"theme\") {\n return (\n <button\n key={action.key}\n type=\"button\"\n className=\"solid-admin-theme-toggle\"\n onClick={action.onClick}\n aria-label={action.title}\n title={action.title}\n >\n {action.icon}\n <span className=\"solid-sr-only\">{action.label}</span>\n </button>\n );\n }\n\n return (\n <button\n key={action.key}\n type=\"button\"\n className=\"solid-admin-back-btn\"\n onClick={action.onClick}\n aria-label={action.title}\n >\n {action.label}\n </button>\n );\n })}\n </div>\n );\n};\n"]}
1
+ {"version":3,"file":"AdminHeaderActions.js","sourceRoot":"","sources":["../../../src/components/layout/AdminHeaderActions.tsx"],"names":[],"mappings":"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","sourcesContent":["import { ReactNode, useContext } from \"react\";\nimport { useDispatch, useSelector } from \"react-redux\";\n// import { usePathname } from \"../../hooks/usePathname\";\nimport { useRouter } from \"../../hooks/useRouter\";\nimport { useSession } from \"../../hooks/useSession\";\nimport { env } from \"../../adapters/env\";\nimport { hasAnyRole } from \"../../helpers/rolesHelper\";\nimport { enterStudioMode } from \"../../redux/features/solidStudioSlice\";\nimport { LayoutContext } from \"./context/layoutcontext\";\nimport { BackendReconnectIndicator } from \"../common/BackendReconnectIndicator\";\n\ntype AdminHeaderActionsProps = {\n variant: \"header\" | \"sidebar\";\n className?: string;\n};\n\ntype AdminAction = {\n key: string;\n label: string;\n onClick: () => void;\n title: string;\n icon?: ReactNode;\n};\n\nexport const StudioSparkleIcon = () => (\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"none\" aria-hidden=\"true\">\n <path d=\"M7 1v2M7 11v2M1 7h2M11 7h2M2.93 2.93l1.41 1.41M9.66 9.66l1.41 1.41M2.93 11.07l1.41-1.41M9.66 4.34l1.41-1.41\" stroke=\"currentColor\" strokeWidth=\"1.4\" strokeLinecap=\"round\" />\n <circle cx=\"7\" cy=\"7\" r=\"2\" stroke=\"currentColor\" strokeWidth=\"1.4\" />\n </svg>\n);\n\nconst ThemeToggleIcon = () => (\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"18\" height=\"18\" viewBox=\"0 0 24 24\" fill=\"none\" aria-hidden=\"true\">\n <path d=\"M12 12m-9 0a9 9 0 1 0 18 0a9 9 0 1 0 -18 0\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n <path d=\"M12 3l0 18\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n <path d=\"M12 9l4.65 -4.65\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n <path d=\"M12 14.3l7.37 -7.37\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n <path d=\"M12 19.6l8.85 -8.85\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n </svg>\n);\n\nexport const AdminHeaderActions = ({ variant, className = \"\" }: AdminHeaderActionsProps) => {\n // const pathname = usePathname();\n const router = useRouter();\n const dispatch = useDispatch();\n const { data: session } = useSession();\n const { toggleThemeMode, themeMode } = useContext(LayoutContext);\n const user = session?.user;\n const isAdmin = hasAnyRole(user?.roles, [\"Admin\"]);\n const isStudioMode = useSelector((state: any) => state.solidStudio?.isStudioMode ?? false);\n const isDev = env(\"VITE_SOLIDX_ENV\") === \"dev\";\n // const showBack = /\\/admin\\/core\\/[^/]+\\/[^/]+\\/form\\/[^/]+/.test(pathname);\n\n const actions: AdminAction[] = [\n ...(isAdmin && isDev && !isStudioMode\n ? [{\n key: \"studio\",\n label: \"Studio\",\n onClick: () => {\n dispatch(enterStudioMode());\n router.push(\"/studio\");\n },\n title: \"Enter SolidX Studio\",\n icon: <StudioSparkleIcon />,\n }]\n : []),\n {\n key: \"theme\",\n label: themeMode === \"dark\" ? \"Light Mode\" : \"Dark Mode\",\n onClick: toggleThemeMode,\n title: \"Toggle theme\",\n icon: <ThemeToggleIcon />,\n },\n // ...(showBack\n // ? [{\n // key: \"back\",\n // label: \"Back\",\n // onClick: () => router.back(),\n // title: \"Go back\",\n // }]\n // : []),\n ];\n\n if (!actions.length) {\n return null;\n }\n\n if (variant === \"sidebar\") {\n return (\n <div className={`solid-sidebar-mobile-actions md:hidden ${className}`.trim()}>\n {actions.map((action) => (\n <button\n key={action.key}\n type=\"button\"\n className=\"solid-sidebar-mobile-action\"\n onClick={action.onClick}\n title={action.title}\n aria-label={action.title}\n >\n {action.label}\n </button>\n ))}\n </div>\n );\n }\n\n return (\n <div className={`solid-admin-header-actions hidden md:flex ${className}`.trim()}>\n <BackendReconnectIndicator />\n {actions.map((action) => {\n if (action.key === \"studio\") {\n return (\n <button\n key={action.key}\n type=\"button\"\n className=\"solid-studio-trigger-btn\"\n onClick={action.onClick}\n title={action.title}\n aria-label={action.title}\n >\n {action.icon}\n <span className=\"solid-studio-trigger-label\">{action.label}</span>\n </button>\n );\n }\n\n if (action.key === \"theme\") {\n return (\n <button\n key={action.key}\n type=\"button\"\n className=\"solid-admin-theme-toggle\"\n onClick={action.onClick}\n aria-label={action.title}\n title={action.title}\n >\n {action.icon}\n <span className=\"solid-sr-only\">{action.label}</span>\n </button>\n );\n }\n\n return (\n <button\n key={action.key}\n type=\"button\"\n className=\"solid-admin-back-btn\"\n onClick={action.onClick}\n aria-label={action.title}\n >\n {action.label}\n </button>\n );\n })}\n </div>\n );\n};\n"]}
@@ -1,6 +1,6 @@
1
1
  import { ReactNode, useContext } from "react";
2
2
  import { useDispatch, useSelector } from "react-redux";
3
- import { usePathname } from "../../hooks/usePathname";
3
+ // import { usePathname } from "../../hooks/usePathname";
4
4
  import { useRouter } from "../../hooks/useRouter";
5
5
  import { useSession } from "../../hooks/useSession";
6
6
  import { env } from "../../adapters/env";
@@ -40,7 +40,7 @@ const ThemeToggleIcon = () => (
40
40
  );
41
41
 
42
42
  export const AdminHeaderActions = ({ variant, className = "" }: AdminHeaderActionsProps) => {
43
- const pathname = usePathname();
43
+ // const pathname = usePathname();
44
44
  const router = useRouter();
45
45
  const dispatch = useDispatch();
46
46
  const { data: session } = useSession();
@@ -49,7 +49,7 @@ export const AdminHeaderActions = ({ variant, className = "" }: AdminHeaderActio
49
49
  const isAdmin = hasAnyRole(user?.roles, ["Admin"]);
50
50
  const isStudioMode = useSelector((state: any) => state.solidStudio?.isStudioMode ?? false);
51
51
  const isDev = env("VITE_SOLIDX_ENV") === "dev";
52
- const showBack = /\/admin\/core\/[^/]+\/[^/]+\/form\/[^/]+/.test(pathname);
52
+ // const showBack = /\/admin\/core\/[^/]+\/[^/]+\/form\/[^/]+/.test(pathname);
53
53
 
54
54
  const actions: AdminAction[] = [
55
55
  ...(isAdmin && isDev && !isStudioMode
@@ -71,14 +71,14 @@ export const AdminHeaderActions = ({ variant, className = "" }: AdminHeaderActio
71
71
  title: "Toggle theme",
72
72
  icon: <ThemeToggleIcon />,
73
73
  },
74
- ...(showBack
75
- ? [{
76
- key: "back",
77
- label: "Back",
78
- onClick: () => router.back(),
79
- title: "Go back",
80
- }]
81
- : []),
74
+ // ...(showBack
75
+ // ? [{
76
+ // key: "back",
77
+ // label: "Back",
78
+ // onClick: () => router.back(),
79
+ // title: "Go back",
80
+ // }]
81
+ // : []),
82
82
  ];
83
83
 
84
84
  if (!actions.length) {
@@ -1 +1 @@
1
- {"version":3,"file":"AdminLayout.d.ts","sourceRoot":"","sources":["../../../src/components/layout/AdminLayout.tsx"],"names":[],"mappings":"AAWA,eAAO,MAAM,WAAW;cAA8B,MAAM,SAAS;6CAoCpE,CAAA"}
1
+ {"version":3,"file":"AdminLayout.d.ts","sourceRoot":"","sources":["../../../src/components/layout/AdminLayout.tsx"],"names":[],"mappings":"AAWA,eAAO,MAAM,WAAW;cAA8B,MAAM,SAAS;6CAqCpE,CAAA"}
@@ -8,7 +8,7 @@ import { showToast } from '../../redux/features/toastSlice';
8
8
  import { Layout } from "./Layout";
9
9
  import SolidChangeForcePassword from "../auth/SolidChangeForcePassword";
10
10
  import { ERROR_MESSAGES } from "../../constants/error-messages";
11
- import { SolidDialog, SolidDivider } from "../shad-cn-ui";
11
+ import { SolidDialog, SolidDialogBody, SolidDialogSeparator } from "../shad-cn-ui";
12
12
  export var AdminLayout = function (_a) {
13
13
  var children = _a.children;
14
14
  // const theme = useSelector((state: any) => state.theme.mode);
@@ -28,6 +28,6 @@ export var AdminLayout = function (_a) {
28
28
  signOut({ callbackUrl: "/auth/login" });
29
29
  }
30
30
  }, [session, status]);
31
- return (_jsxs(_Fragment, { children: [_jsx(Layout, { children: children }), isForcePasswordChange && (_jsxs(SolidDialog, { header: "Change Default Password", className: "solid-change-dialog", visible: isForcePasswordChange, style: { width: "25vw" }, onHide: function () { return setIsForcePasswordChange(false); }, children: [_jsx(SolidDivider, { className: "mt-0" }), _jsx(SolidChangeForcePassword, {})] }))] }));
31
+ return (_jsxs(_Fragment, { children: [_jsx(Layout, { children: children }), isForcePasswordChange && (_jsxs(SolidDialog, { header: "Change Default Password", className: "solid-change-dialog", visible: isForcePasswordChange, onHide: function () { return setIsForcePasswordChange(false); }, children: [_jsx(SolidDialogSeparator, {}), _jsx(SolidDialogBody, { children: _jsx(SolidChangeForcePassword, {}) })] }))] }));
32
32
  };
33
33
  //# sourceMappingURL=AdminLayout.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"AdminLayout.js","sourceRoot":"","sources":["../../../src/components/layout/AdminLayout.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,2BAA2B,CAAC;AACpD,OAAO,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AACpD,OAAO,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAClD,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AAC5C,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC1C,OAAO,EAAE,SAAS,EAAE,MAAM,iCAAiC,CAAC;AAC5D,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAClC,OAAO,wBAAwB,MAAM,kCAAkC,CAAC;AACxE,OAAO,EAAE,cAAc,EAAE,MAAM,gCAAgC,CAAC;AAChE,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAE1D,MAAM,CAAC,IAAM,WAAW,GAAG,UAAC,EAA2C;QAAzC,QAAQ,cAAA;IAClC,+DAA+D;IAC/D,IAAM,QAAQ,GAAG,WAAW,EAAE,CAAC;IACzB,IAAA,KAA4B,UAAU,EAAE,EAAhC,OAAO,UAAA,EAAE,MAAM,YAAiB,CAAC;IACzC,IAAA,KAAoD,QAAQ,CAAC,KAAK,CAAC,EAAlE,qBAAqB,QAAA,EAAE,wBAAwB,QAAmB,CAAC;IAE1E,SAAS,CAAC;;QACN,wBAAwB,CAAC,CAAA,MAAA,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,IAAI,0CAAE,mBAAmB,MAAK,IAAI,CAAC,CAAC;IAC1E,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC;IAEd,IAAM,MAAM,GAAG,SAAS,EAAE,CAAC;IAC3B,SAAS,CAAC;QACN,IAAI,MAAM,KAAK,SAAS;YAAE,OAAO;QACjC,IAAI,CAAC,OAAO,IAAI,CAAA,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,KAAK,MAAK,yBAAyB,EAAE;YAC1D,QAAQ,CAAC,SAAS,CAAC,EAAE,QAAQ,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,cAAc,CAAC,eAAe,EAAE,CAAC,CAAC,CAAA;YACpG,OAAO,CAAC,EAAE,WAAW,EAAE,aAAa,EAAE,CAAC,CAAC;SAC3C;IACL,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC,CAAC;IAEtB,OAAO,CACH,8BACI,KAAC,MAAM,cAAE,QAAQ,GAAU,EAC1B,qBAAqB,IAAI,CACtB,MAAC,WAAW,IACR,MAAM,EAAC,yBAAyB,EAChC,SAAS,EAAC,qBAAqB,EAC/B,OAAO,EAAE,qBAAqB,EAC9B,KAAK,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,EACxB,MAAM,EAAE,cAAM,OAAA,wBAAwB,CAAC,KAAK,CAAC,EAA/B,CAA+B,aAE7C,KAAC,YAAY,IAAC,SAAS,EAAC,MAAM,GAAG,EACjC,KAAC,wBAAwB,KAAG,IAClB,CACjB,IACF,CACN,CAAC;AACN,CAAC,CAAA","sourcesContent":["import { signOut } from \"../../adapters/auth/index\";\nimport { useSession } from \"../../hooks/useSession\";\nimport { useRouter } from \"../../hooks/useRouter\";\nimport { useEffect, useState } from \"react\";\nimport { useDispatch } from 'react-redux';\nimport { showToast } from '../../redux/features/toastSlice';\nimport { Layout } from \"./Layout\";\nimport SolidChangeForcePassword from \"../auth/SolidChangeForcePassword\";\nimport { ERROR_MESSAGES } from \"../../constants/error-messages\";\nimport { SolidDialog, SolidDivider } from \"../shad-cn-ui\";\n\nexport const AdminLayout = ({ children }: { children: React.ReactNode }) => {\n // const theme = useSelector((state: any) => state.theme.mode);\n const dispatch = useDispatch();\n const { data: session, status } = useSession();\n const [isForcePasswordChange, setIsForcePasswordChange] = useState(false);\n\n useEffect(() => {\n setIsForcePasswordChange(session?.user?.forcePasswordChange === true);\n }, [session]);\n\n const router = useRouter();\n useEffect(() => {\n if (status === \"loading\") return;\n if (!session || session?.error === \"RefreshAccessTokenError\") {\n dispatch(showToast({ severity: 'error', summary: 'Error', detail: ERROR_MESSAGES.SESSION_EXPIRED }))\n signOut({ callbackUrl: \"/auth/login\" });\n }\n }, [session, status]);\n\n return (\n <>\n <Layout>{children}</Layout>\n {isForcePasswordChange && (\n <SolidDialog\n header=\"Change Default Password\"\n className=\"solid-change-dialog\"\n visible={isForcePasswordChange}\n style={{ width: \"25vw\" }}\n onHide={() => setIsForcePasswordChange(false)}\n >\n <SolidDivider className=\"mt-0\" />\n <SolidChangeForcePassword />\n </SolidDialog>\n )}\n </>\n );\n}\n"]}
1
+ {"version":3,"file":"AdminLayout.js","sourceRoot":"","sources":["../../../src/components/layout/AdminLayout.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,2BAA2B,CAAC;AACpD,OAAO,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AACpD,OAAO,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAClD,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AAC5C,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC1C,OAAO,EAAE,SAAS,EAAE,MAAM,iCAAiC,CAAC;AAC5D,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAClC,OAAO,wBAAwB,MAAM,kCAAkC,CAAC;AACxE,OAAO,EAAE,cAAc,EAAE,MAAM,gCAAgC,CAAC;AAChE,OAAO,EAAE,WAAW,EAAE,eAAe,EAAE,oBAAoB,EAAE,MAAM,eAAe,CAAC;AAEnF,MAAM,CAAC,IAAM,WAAW,GAAG,UAAC,EAA2C;QAAzC,QAAQ,cAAA;IAClC,+DAA+D;IAC/D,IAAM,QAAQ,GAAG,WAAW,EAAE,CAAC;IACzB,IAAA,KAA4B,UAAU,EAAE,EAAhC,OAAO,UAAA,EAAE,MAAM,YAAiB,CAAC;IACzC,IAAA,KAAoD,QAAQ,CAAC,KAAK,CAAC,EAAlE,qBAAqB,QAAA,EAAE,wBAAwB,QAAmB,CAAC;IAE1E,SAAS,CAAC;;QACN,wBAAwB,CAAC,CAAA,MAAA,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,IAAI,0CAAE,mBAAmB,MAAK,IAAI,CAAC,CAAC;IAC1E,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC;IAEd,IAAM,MAAM,GAAG,SAAS,EAAE,CAAC;IAC3B,SAAS,CAAC;QACN,IAAI,MAAM,KAAK,SAAS;YAAE,OAAO;QACjC,IAAI,CAAC,OAAO,IAAI,CAAA,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,KAAK,MAAK,yBAAyB,EAAE;YAC1D,QAAQ,CAAC,SAAS,CAAC,EAAE,QAAQ,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,cAAc,CAAC,eAAe,EAAE,CAAC,CAAC,CAAA;YACpG,OAAO,CAAC,EAAE,WAAW,EAAE,aAAa,EAAE,CAAC,CAAC;SAC3C;IACL,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC,CAAC;IAEtB,OAAO,CACH,8BACI,KAAC,MAAM,cAAE,QAAQ,GAAU,EAC1B,qBAAqB,IAAI,CACtB,MAAC,WAAW,IACR,MAAM,EAAC,yBAAyB,EAChC,SAAS,EAAC,qBAAqB,EAC/B,OAAO,EAAE,qBAAqB,EAC9B,MAAM,EAAE,cAAM,OAAA,wBAAwB,CAAC,KAAK,CAAC,EAA/B,CAA+B,aAE7C,KAAC,oBAAoB,KAAG,EACxB,KAAC,eAAe,cACZ,KAAC,wBAAwB,KAAG,GACd,IACR,CACjB,IACF,CACN,CAAC;AACN,CAAC,CAAA","sourcesContent":["import { signOut } from \"../../adapters/auth/index\";\nimport { useSession } from \"../../hooks/useSession\";\nimport { useRouter } from \"../../hooks/useRouter\";\nimport { useEffect, useState } from \"react\";\nimport { useDispatch } from 'react-redux';\nimport { showToast } from '../../redux/features/toastSlice';\nimport { Layout } from \"./Layout\";\nimport SolidChangeForcePassword from \"../auth/SolidChangeForcePassword\";\nimport { ERROR_MESSAGES } from \"../../constants/error-messages\";\nimport { SolidDialog, SolidDialogBody, SolidDialogSeparator } from \"../shad-cn-ui\";\n\nexport const AdminLayout = ({ children }: { children: React.ReactNode }) => {\n // const theme = useSelector((state: any) => state.theme.mode);\n const dispatch = useDispatch();\n const { data: session, status } = useSession();\n const [isForcePasswordChange, setIsForcePasswordChange] = useState(false);\n\n useEffect(() => {\n setIsForcePasswordChange(session?.user?.forcePasswordChange === true);\n }, [session]);\n\n const router = useRouter();\n useEffect(() => {\n if (status === \"loading\") return;\n if (!session || session?.error === \"RefreshAccessTokenError\") {\n dispatch(showToast({ severity: 'error', summary: 'Error', detail: ERROR_MESSAGES.SESSION_EXPIRED }))\n signOut({ callbackUrl: \"/auth/login\" });\n }\n }, [session, status]);\n\n return (\n <>\n <Layout>{children}</Layout>\n {isForcePasswordChange && (\n <SolidDialog\n header=\"Change Default Password\"\n className=\"solid-change-dialog\"\n visible={isForcePasswordChange}\n onHide={() => setIsForcePasswordChange(false)}\n >\n <SolidDialogSeparator />\n <SolidDialogBody>\n <SolidChangeForcePassword />\n </SolidDialogBody>\n </SolidDialog>\n )}\n </>\n );\n}\n"]}
@@ -7,7 +7,7 @@ import { showToast } from '../../redux/features/toastSlice';
7
7
  import { Layout } from "./Layout";
8
8
  import SolidChangeForcePassword from "../auth/SolidChangeForcePassword";
9
9
  import { ERROR_MESSAGES } from "../../constants/error-messages";
10
- import { SolidDialog, SolidDivider } from "../shad-cn-ui";
10
+ import { SolidDialog, SolidDialogBody, SolidDialogSeparator } from "../shad-cn-ui";
11
11
 
12
12
  export const AdminLayout = ({ children }: { children: React.ReactNode }) => {
13
13
  // const theme = useSelector((state: any) => state.theme.mode);
@@ -36,11 +36,12 @@ export const AdminLayout = ({ children }: { children: React.ReactNode }) => {
36
36
  header="Change Default Password"
37
37
  className="solid-change-dialog"
38
38
  visible={isForcePasswordChange}
39
- style={{ width: "25vw" }}
40
39
  onHide={() => setIsForcePasswordChange(false)}
41
40
  >
42
- <SolidDivider className="mt-0" />
43
- <SolidChangeForcePassword />
41
+ <SolidDialogSeparator />
42
+ <SolidDialogBody>
43
+ <SolidChangeForcePassword />
44
+ </SolidDialogBody>
44
45
  </SolidDialog>
45
46
  )}
46
47
  </>
@@ -1 +1 @@
1
- {"version":3,"file":"AppSidebar.d.ts","sourceRoot":"","sources":["../../../src/components/layout/AppSidebar.tsx"],"names":[],"mappings":"AA0MA,QAAA,MAAM,UAAU,+CAuNf,CAAC;AAEF,eAAe,UAAU,CAAC"}
1
+ {"version":3,"file":"AppSidebar.d.ts","sourceRoot":"","sources":["../../../src/components/layout/AppSidebar.tsx"],"names":[],"mappings":"AA0MA,QAAA,MAAM,UAAU,+CA0Of,CAAC;AAEF,eAAe,UAAU,CAAC"}
@@ -14,7 +14,7 @@ import { useGetSolidMenuBasedOnRoleQuery } from "../../redux/api/solidMenuApi";
14
14
  import { hideNavbar, toggleNavbar } from "../../redux/features/navbarSlice";
15
15
  import { setIsAuthenticated, setUser } from "../../redux/features/userSlice";
16
16
  import { useSession } from "../../hooks/useSession";
17
- import { useEffect, useMemo, useState } from "react";
17
+ import { useEffect, useMemo, useRef, useState } from "react";
18
18
  import { useDispatch, useSelector } from "react-redux";
19
19
  import { AdminHeaderActions } from "./AdminHeaderActions";
20
20
  import UserProfileMenu from "./user-profile-menu";
@@ -146,6 +146,7 @@ var AppSidebar = function () {
146
146
  var searchParams = useSearchParams();
147
147
  var visibleNavbar = useSelector(function (state) { return state.navbarState.visibleNavbar; });
148
148
  var menu = useGetSolidMenuBasedOnRoleQuery("").data;
149
+ var workspaceSwitcherRef = useRef(null);
149
150
  var _a = useState(""), searchTerm = _a[0], setSearchTerm = _a[1];
150
151
  var _b = useState(false), workspaceOpen = _b[0], setWorkspaceOpen = _b[1];
151
152
  var _c = useState(function () {
@@ -226,6 +227,20 @@ var AppSidebar = function () {
226
227
  window.addEventListener(SIDEBAR_TOGGLE_EVENT, onToggleRequest);
227
228
  return function () { return window.removeEventListener(SIDEBAR_TOGGLE_EVENT, onToggleRequest); };
228
229
  }, [dispatch]);
230
+ useEffect(function () {
231
+ if (!workspaceOpen)
232
+ return;
233
+ var handlePointerDown = function (event) {
234
+ var switcher = workspaceSwitcherRef.current;
235
+ var target = event.target;
236
+ if (!switcher || switcher.contains(target)) {
237
+ return;
238
+ }
239
+ setWorkspaceOpen(false);
240
+ };
241
+ document.addEventListener("pointerdown", handlePointerDown);
242
+ return function () { return document.removeEventListener("pointerdown", handlePointerDown); };
243
+ }, [workspaceOpen]);
229
244
  var workspaces = (menu === null || menu === void 0 ? void 0 : menu.data) || [];
230
245
  var selectedWorkspace = workspaces.find(function (m) { return m.key === selectedWorkspaceKey; }) || workspaces[0];
231
246
  var selectedWorkspaceChildren = (selectedWorkspace === null || selectedWorkspace === void 0 ? void 0 : selectedWorkspace.children) || [];
@@ -242,7 +257,7 @@ var AppSidebar = function () {
242
257
  setSearchTerm("");
243
258
  setWorkspaceOpen(false);
244
259
  };
245
- 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)); }) })), _jsxs("div", { className: "solid-sidebar-footer", children: [_jsx(AdminHeaderActions, { variant: "sidebar" }), _jsx(UserProfileMenu, {})] })] }), isDesktop && isCollapsed && (_jsx("button", { type: "button", className: "solid-sidebar-hotspot", onClick: function () { return setIsCollapsed(false); }, "aria-label": "Expand sidebar", title: "Expand sidebar" }))] }));
260
+ 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", ref: workspaceSwitcherRef, 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)); }) })), _jsxs("div", { className: "solid-sidebar-footer", children: [_jsx(AdminHeaderActions, { variant: "sidebar" }), _jsx(UserProfileMenu, {})] })] }), isDesktop && isCollapsed && (_jsx("button", { type: "button", className: "solid-sidebar-hotspot", onClick: function () { return setIsCollapsed(false); }, "aria-label": "Expand sidebar", title: "Expand sidebar" }))] }));
246
261
  };
247
262
  export default AppSidebar;
248
263
  //# 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 { AdminHeaderActions } from \"./AdminHeaderActions\";\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\";\nimport { resolveRetainedModelViewRoute } from \"../../helpers/modelViewPersistence\";\nimport type { MenuItemIconSource } from \"../../helpers/menuItemIcons\";\nimport { SolidMenuItemIcon } from \"./SolidMenuItemIcon\";\n\ntype SolidMenuItem = MenuItemIconSource & {\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 resolvedItemPath = resolveRetainedModelViewRoute(itemPath);\n const { pathname: itemPathname, searchParams: itemSearchParams } = getPathAndParams(resolvedItemPath);\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 resolvedPath = node.path ? resolveRetainedModelViewRoute(node.path) : undefined;\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 flex items-center gap-2\"\n onClick={() => toggleExpanded(nodeId)}\n aria-expanded={isExpanded}\n aria-label={`Toggle ${node.title}`}\n >\n <SolidMenuItemIcon item={node} />\n <span className=\"solid-sidebar-tree-label\">{node.title}</span>\n </button>\n ) : node.path ? (\n <SolidLink href={resolvedPath} className=\"solid-sidebar-tree-link flex items-center gap-2\">\n <SolidMenuItemIcon item={node} />\n <span className=\"solid-sidebar-tree-label\">{node.title}</span>\n </SolidLink>\n ) : (\n <span className=\"solid-sidebar-tree-link flex items-center gap-2\">\n <SolidMenuItemIcon item={node} />\n <span className=\"solid-sidebar-tree-label\">{node.title}</span>\n </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 as SolidMenuItem, 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 <AdminHeaderActions variant=\"sidebar\" />\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, useRef, useState } from \"react\";\nimport { useDispatch, useSelector } from \"react-redux\";\nimport { AdminHeaderActions } from \"./AdminHeaderActions\";\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\";\nimport { resolveRetainedModelViewRoute } from \"../../helpers/modelViewPersistence\";\nimport type { MenuItemIconSource } from \"../../helpers/menuItemIcons\";\nimport { SolidMenuItemIcon } from \"./SolidMenuItemIcon\";\n\ntype SolidMenuItem = MenuItemIconSource & {\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 resolvedItemPath = resolveRetainedModelViewRoute(itemPath);\n const { pathname: itemPathname, searchParams: itemSearchParams } = getPathAndParams(resolvedItemPath);\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 resolvedPath = node.path ? resolveRetainedModelViewRoute(node.path) : undefined;\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 flex items-center gap-2\"\n onClick={() => toggleExpanded(nodeId)}\n aria-expanded={isExpanded}\n aria-label={`Toggle ${node.title}`}\n >\n <SolidMenuItemIcon item={node} />\n <span className=\"solid-sidebar-tree-label\">{node.title}</span>\n </button>\n ) : node.path ? (\n <SolidLink href={resolvedPath} className=\"solid-sidebar-tree-link flex items-center gap-2\">\n <SolidMenuItemIcon item={node} />\n <span className=\"solid-sidebar-tree-label\">{node.title}</span>\n </SolidLink>\n ) : (\n <span className=\"solid-sidebar-tree-link flex items-center gap-2\">\n <SolidMenuItemIcon item={node} />\n <span className=\"solid-sidebar-tree-label\">{node.title}</span>\n </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 as SolidMenuItem, 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 const workspaceSwitcherRef = useRef<HTMLDivElement | null>(null);\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 useEffect(() => {\n if (!workspaceOpen) return;\n\n const handlePointerDown = (event: MouseEvent) => {\n const switcher = workspaceSwitcherRef.current;\n const target = event.target as Node;\n\n if (!switcher || switcher.contains(target)) {\n return;\n }\n\n setWorkspaceOpen(false);\n };\n\n document.addEventListener(\"pointerdown\", handlePointerDown);\n return () => document.removeEventListener(\"pointerdown\", handlePointerDown);\n }, [workspaceOpen]);\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\" ref={workspaceSwitcherRef}>\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 <AdminHeaderActions variant=\"sidebar\" />\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"]}
@@ -2,7 +2,7 @@ import { useGetSolidMenuBasedOnRoleQuery } from "../../redux/api/solidMenuApi";
2
2
  import { hideNavbar, toggleNavbar } from "../../redux/features/navbarSlice";
3
3
  import { setIsAuthenticated, setUser } from "../../redux/features/userSlice";
4
4
  import { useSession } from "../../hooks/useSession";
5
- import { useEffect, useMemo, useState } from "react";
5
+ import { useEffect, useMemo, useRef, useState } from "react";
6
6
  import { useDispatch, useSelector } from "react-redux";
7
7
  import { AdminHeaderActions } from "./AdminHeaderActions";
8
8
  import UserProfileMenu from "./user-profile-menu";
@@ -206,6 +206,7 @@ const AppSidebar = () => {
206
206
  const searchParams = useSearchParams();
207
207
  const visibleNavbar = useSelector((state: any) => state.navbarState.visibleNavbar);
208
208
  const { data: menu } = useGetSolidMenuBasedOnRoleQuery("");
209
+ const workspaceSwitcherRef = useRef<HTMLDivElement | null>(null);
209
210
 
210
211
  const [searchTerm, setSearchTerm] = useState("");
211
212
  const [workspaceOpen, setWorkspaceOpen] = useState(false);
@@ -293,6 +294,24 @@ const AppSidebar = () => {
293
294
  return () => window.removeEventListener(SIDEBAR_TOGGLE_EVENT, onToggleRequest);
294
295
  }, [dispatch]);
295
296
 
297
+ useEffect(() => {
298
+ if (!workspaceOpen) return;
299
+
300
+ const handlePointerDown = (event: MouseEvent) => {
301
+ const switcher = workspaceSwitcherRef.current;
302
+ const target = event.target as Node;
303
+
304
+ if (!switcher || switcher.contains(target)) {
305
+ return;
306
+ }
307
+
308
+ setWorkspaceOpen(false);
309
+ };
310
+
311
+ document.addEventListener("pointerdown", handlePointerDown);
312
+ return () => document.removeEventListener("pointerdown", handlePointerDown);
313
+ }, [workspaceOpen]);
314
+
296
315
  const workspaces: SolidMenuItem[] = menu?.data || [];
297
316
  const selectedWorkspace = workspaces.find((m) => m.key === selectedWorkspaceKey) || workspaces[0];
298
317
  const selectedWorkspaceChildren = selectedWorkspace?.children || [];
@@ -322,7 +341,7 @@ const AppSidebar = () => {
322
341
 
323
342
  <aside className={shellClasses}>
324
343
  <div className="solid-sidebar-header">
325
- <div className="solid-workspace-switcher">
344
+ <div className="solid-workspace-switcher" ref={workspaceSwitcherRef}>
326
345
  <button
327
346
  type="button"
328
347
  className="solid-workspace-trigger"
@@ -5,6 +5,6 @@ type SolidDatePickerProps = React.ComponentProps<typeof ReactDatePicker> & {
5
5
  timeOnly?: boolean;
6
6
  inputClassName?: string;
7
7
  };
8
- export declare function SolidDatePicker({ timeOnly, showTimeSelect, inputClassName, selected, dateFormat, calendarClassName, popperClassName, className, ...props }: SolidDatePickerProps): import("react/jsx-runtime").JSX.Element;
8
+ export declare function SolidDatePicker({ timeOnly, showTimeSelect, inputClassName, selected, dateFormat, calendarClassName, popperClassName, className, minDate, maxDate, renderCustomHeader, showMonthDropdown, showYearDropdown, ...props }: SolidDatePickerProps): import("react/jsx-runtime").JSX.Element;
9
9
  export {};
10
10
  //# sourceMappingURL=SolidDatePicker.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"SolidDatePicker.d.ts","sourceRoot":"","sources":["../../../src/components/shad-cn-ui/SolidDatePicker.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,eAAe,MAAM,kBAAkB,CAAC;AAC/C,OAAO,4CAA4C,CAAC;AAGpD,KAAK,oBAAoB,GAAG,KAAK,CAAC,cAAc,CAAC,OAAO,eAAe,CAAC,GAAG;IACzE,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB,CAAC;AAmDF,wBAAgB,eAAe,CAAC,EAC9B,QAAQ,EACR,cAAc,EACd,cAAc,EACd,QAAQ,EACR,UAAU,EACV,iBAAiB,EACjB,eAAe,EACf,SAAS,EACT,GAAG,KAAK,EACT,EAAE,oBAAoB,2CAmBtB"}
1
+ {"version":3,"file":"SolidDatePicker.d.ts","sourceRoot":"","sources":["../../../src/components/shad-cn-ui/SolidDatePicker.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,eAAe,MAAM,kBAAkB,CAAC;AAC/C,OAAO,4CAA4C,CAAC;AAKpD,KAAK,oBAAoB,GAAG,KAAK,CAAC,cAAc,CAAC,OAAO,eAAe,CAAC,GAAG;IACzE,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB,CAAC;AAqEF,wBAAgB,eAAe,CAAC,EAC9B,QAAQ,EACR,cAAc,EACd,cAAc,EACd,QAAQ,EACR,UAAU,EACV,iBAAiB,EACjB,eAAe,EACf,SAAS,EACT,OAAO,EACP,OAAO,EACP,kBAAkB,EAClB,iBAAiB,EACjB,gBAAgB,EAChB,GAAG,KAAK,EACT,EAAE,oBAAoB,2CA8EtB"}
@@ -20,11 +20,13 @@ var __rest = (this && this.__rest) || function (s, e) {
20
20
  }
21
21
  return t;
22
22
  };
23
- import { jsx as _jsx } from "react/jsx-runtime";
23
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
24
24
  import React from "react";
25
25
  import ReactDatePicker from "react-datepicker";
26
26
  import "react-datepicker/dist/react-datepicker.css";
27
+ import { ChevronLeft, ChevronRight } from "lucide-react";
27
28
  import { SolidInput } from "./SolidInput";
29
+ import { SolidSelect } from "./SolidSelect";
28
30
  function formatDateValue(value, pattern) {
29
31
  if (!value || !(value instanceof Date) || Number.isNaN(value.getTime())) {
30
32
  return "";
@@ -65,12 +67,42 @@ function cx() {
65
67
  }
66
68
  return parts.filter(Boolean).join(" ");
67
69
  }
70
+ var MONTH_OPTIONS = Array.from({ length: 12 }, function (_, monthIndex) { return ({
71
+ value: monthIndex,
72
+ label: new Intl.DateTimeFormat(undefined, { month: "long" }).format(new Date(2026, monthIndex, 1)),
73
+ }); });
74
+ function buildYearOptions(selected, minDate, maxDate) {
75
+ var _a, _b, _c;
76
+ var selectedYear = (_a = selected === null || selected === void 0 ? void 0 : selected.getFullYear()) !== null && _a !== void 0 ? _a : new Date().getFullYear();
77
+ var minYear = (_b = minDate === null || minDate === void 0 ? void 0 : minDate.getFullYear()) !== null && _b !== void 0 ? _b : 1900;
78
+ var maxYear = (_c = maxDate === null || maxDate === void 0 ? void 0 : maxDate.getFullYear()) !== null && _c !== void 0 ? _c : Math.max(2100, selectedYear + 25);
79
+ var years = [];
80
+ for (var year = minYear; year <= maxYear; year += 1) {
81
+ years.push(year);
82
+ }
83
+ return years;
84
+ }
68
85
  export function SolidDatePicker(_a) {
69
86
  var _b;
70
- var timeOnly = _a.timeOnly, showTimeSelect = _a.showTimeSelect, inputClassName = _a.inputClassName, selected = _a.selected, dateFormat = _a.dateFormat, calendarClassName = _a.calendarClassName, popperClassName = _a.popperClassName, className = _a.className, props = __rest(_a, ["timeOnly", "showTimeSelect", "inputClassName", "selected", "dateFormat", "calendarClassName", "popperClassName", "className"]);
87
+ var timeOnly = _a.timeOnly, showTimeSelect = _a.showTimeSelect, inputClassName = _a.inputClassName, selected = _a.selected, dateFormat = _a.dateFormat, calendarClassName = _a.calendarClassName, popperClassName = _a.popperClassName, className = _a.className, minDate = _a.minDate, maxDate = _a.maxDate, renderCustomHeader = _a.renderCustomHeader, showMonthDropdown = _a.showMonthDropdown, showYearDropdown = _a.showYearDropdown, props = __rest(_a, ["timeOnly", "showTimeSelect", "inputClassName", "selected", "dateFormat", "calendarClassName", "popperClassName", "className", "minDate", "maxDate", "renderCustomHeader", "showMonthDropdown", "showYearDropdown"]);
71
88
  var resolvedShowTime = timeOnly ? true : showTimeSelect;
72
89
  var resolvedFormat = (_b = (Array.isArray(dateFormat) ? dateFormat[0] : dateFormat)) !== null && _b !== void 0 ? _b : "yyyy-MM-dd";
73
90
  var displayValue = formatDateValue(selected, resolvedFormat);
74
- return (_jsx(ReactDatePicker, __assign({ popperProps: { strategy: "fixed" }, popperPlacement: "bottom-start" }, props, { selected: selected, showTimeSelect: resolvedShowTime, showTimeSelectOnly: timeOnly, calendarClassName: cx("solid-react-datepicker-calendar", calendarClassName), popperClassName: cx("solid-react-datepicker-popper", popperClassName), customInput: _jsx(SolidDatePickerInput, { className: inputClassName, displayValue: displayValue }), className: cx("solid-datepicker", className) })));
91
+ var enableMonthDropdown = showMonthDropdown !== null && showMonthDropdown !== void 0 ? showMonthDropdown : !timeOnly;
92
+ var enableYearDropdown = showYearDropdown !== null && showYearDropdown !== void 0 ? showYearDropdown : !timeOnly;
93
+ var shouldUseCustomHeader = !timeOnly && !renderCustomHeader;
94
+ var yearOptions = buildYearOptions(selected, minDate, maxDate);
95
+ return (_jsx(ReactDatePicker, __assign({ popperProps: { strategy: "fixed" }, popperPlacement: "bottom-start" }, props, { selected: selected, minDate: minDate, maxDate: maxDate, showTimeSelect: resolvedShowTime, showTimeSelectOnly: timeOnly, showMonthDropdown: enableMonthDropdown, showYearDropdown: enableYearDropdown, renderCustomHeader: shouldUseCustomHeader
96
+ ? function (_a) {
97
+ var date = _a.date, changeYear = _a.changeYear, changeMonth = _a.changeMonth, decreaseMonth = _a.decreaseMonth, increaseMonth = _a.increaseMonth, prevMonthButtonDisabled = _a.prevMonthButtonDisabled, nextMonthButtonDisabled = _a.nextMonthButtonDisabled;
98
+ return (_jsxs("div", { className: "solid-react-datepicker-header", children: [_jsx("button", { type: "button", className: "solid-react-datepicker-nav", onClick: decreaseMonth, disabled: prevMonthButtonDisabled, "aria-label": "Previous month", children: _jsx(ChevronLeft, { size: 16 }) }), _jsxs("div", { className: "solid-react-datepicker-selects", children: [_jsx("div", { className: "solid-react-datepicker-select-shell solid-react-datepicker-select-shell--month", children: _jsx(SolidSelect, { native: false, className: "solid-react-datepicker-select-wrap", value: date.getMonth(), options: MONTH_OPTIONS, menuPlacement: "bottom", onChange: function (_a) {
99
+ var value = _a.value;
100
+ return changeMonth(Number(value));
101
+ } }) }), _jsx("div", { className: "solid-react-datepicker-select-shell solid-react-datepicker-select-shell--year", children: _jsx(SolidSelect, { native: false, className: "solid-react-datepicker-select-wrap", value: date.getFullYear(), options: yearOptions.map(function (year) { return ({ label: String(year), value: year }); }), menuPlacement: "bottom", onChange: function (_a) {
102
+ var value = _a.value;
103
+ return changeYear(Number(value));
104
+ } }) })] }), _jsx("button", { type: "button", className: "solid-react-datepicker-nav", onClick: increaseMonth, disabled: nextMonthButtonDisabled, "aria-label": "Next month", children: _jsx(ChevronRight, { size: 16 }) })] }));
105
+ }
106
+ : renderCustomHeader, calendarClassName: cx("solid-react-datepicker-calendar", calendarClassName), popperClassName: cx("solid-react-datepicker-popper", popperClassName), customInput: _jsx(SolidDatePickerInput, { className: inputClassName, displayValue: displayValue }), className: cx("solid-datepicker", className) })));
75
107
  }
76
108
  //# sourceMappingURL=SolidDatePicker.js.map