@collabdt/core 0.0.54 → 0.0.55

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 (28) hide show
  1. package/dist/core/components/AppSidebarContent.d.ts.map +1 -1
  2. package/dist/core/components/AppSidebarContent.js +29 -2
  3. package/dist/core/components/AppSidebarContent.js.map +1 -1
  4. package/dist/core/components/instance-not-found/src/OrganizationNotFoundSection.d.ts.map +1 -1
  5. package/dist/core/components/instance-not-found/src/OrganizationNotFoundSection.js +152 -156
  6. package/dist/core/components/instance-not-found/src/OrganizationNotFoundSection.js.map +1 -1
  7. package/dist/core/components/organizationConfig/src/organizationConfigContent.d.ts.map +1 -1
  8. package/dist/core/components/organizationConfig/src/organizationConfigContent.js +146 -150
  9. package/dist/core/components/organizationConfig/src/organizationConfigContent.js.map +1 -1
  10. package/dist/core/components/support/BugReportDialog.d.ts +7 -0
  11. package/dist/core/components/support/BugReportDialog.d.ts.map +1 -0
  12. package/dist/core/components/support/BugReportDialog.js +117 -0
  13. package/dist/core/components/support/BugReportDialog.js.map +1 -0
  14. package/dist/core/components/support/FeatureRequestDialog.d.ts +8 -0
  15. package/dist/core/components/support/FeatureRequestDialog.d.ts.map +1 -0
  16. package/dist/core/components/support/FeatureRequestDialog.js +116 -0
  17. package/dist/core/components/support/FeatureRequestDialog.js.map +1 -0
  18. package/dist/core/components/support/SupportMenu.d.ts +10 -0
  19. package/dist/core/components/support/SupportMenu.d.ts.map +1 -0
  20. package/dist/core/components/support/SupportMenu.js +78 -0
  21. package/dist/core/components/support/SupportMenu.js.map +1 -0
  22. package/dist/core/components/ui/Navbar.d.ts.map +1 -1
  23. package/dist/core/components/ui/Navbar.js +15 -23
  24. package/dist/core/components/ui/Navbar.js.map +1 -1
  25. package/dist/core/components/viewers/pointcloud/utils/potreeLoader.d.ts.map +1 -1
  26. package/dist/core/components/viewers/pointcloud/utils/potreeLoader.js +1 -1
  27. package/dist/core/components/viewers/pointcloud/utils/potreeLoader.js.map +1 -1
  28. package/package.json +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"AppSidebarContent.d.ts","sourceRoot":"","sources":["../../../src/core/components/AppSidebarContent.tsx"],"names":[],"mappings":"AAKA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAI9B,OAAO,EAAE,WAAW,EAAE,MAAM,WAAW,CAAA;AA2BvC,OAAO,EAAE,YAAY,EAAY,MAAM,kBAAkB,CAAA;AAKzD,eAAO,MAAM,kBAAkB,GAC7B,QAAQ,WAAW,EACnB,iBAAiB,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC,EAC1D,iBAAiB,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC,EAC1D,iBAAiB,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC,EAC1D,SAAS,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,cAAc,CAAC,OAAO,GAAG,QAAQ,CAAC,CAAC,EACjE,eAAe,GAAG,SAYnB,CAAA;AAED,UAAU,eAAe;IACvB,YAAY,EAAE,YAAY,CAAA;IAC1B,uBAAuB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAClD;AAED,wBAAgB,iBAAiB,CAAC,EAAE,YAAY,EAAE,uBAAuB,EAAE,EAAE,eAAe,qBA0U3F"}
1
+ {"version":3,"file":"AppSidebarContent.d.ts","sourceRoot":"","sources":["../../../src/core/components/AppSidebarContent.tsx"],"names":[],"mappings":"AAKA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAI9B,OAAO,EAAE,WAAW,EAAE,MAAM,WAAW,CAAA;AA4BvC,OAAO,EAAE,YAAY,EAAY,MAAM,kBAAkB,CAAA;AASzD,eAAO,MAAM,kBAAkB,GAC7B,QAAQ,WAAW,EACnB,iBAAiB,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC,EAC1D,iBAAiB,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC,EAC1D,iBAAiB,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC,EAC1D,SAAS,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,cAAc,CAAC,OAAO,GAAG,QAAQ,CAAC,CAAC,EACjE,eAAe,GAAG,SAYnB,CAAA;AAED,UAAU,eAAe;IACvB,YAAY,EAAE,YAAY,CAAA;IAC1B,uBAAuB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAClD;AAED,wBAAgB,iBAAiB,CAAC,EAAE,YAAY,EAAE,uBAAuB,EAAE,EAAE,eAAe,qBAoW3F"}
@@ -3,6 +3,8 @@ import { Fragment, jsx, jsxs } from "react/jsx-runtime";
3
3
  import * as React from "react";
4
4
  import { AppConfigContext, MapContext, useMenusContext } from "../store";
5
5
  import { ViewerNames } from "../types/";
6
+ import { BugReportDialog } from "../components/support/BugReportDialog";
7
+ import { FeatureRequestDialog } from "../components/support/FeatureRequestDialog";
6
8
  import {
7
9
  SidebarContent,
8
10
  SidebarGroup,
@@ -23,6 +25,7 @@ import { Separator } from "./ui/Separator";
23
25
  import { useTranslations } from "next-intl";
24
26
  import { useSession } from "next-auth/react";
25
27
  import { useUserRole } from "../hooks/users/users";
28
+ import { SupportMenu } from "../components/support/SupportMenu";
26
29
  const handleChangeViewer = (viewer, setSelectedItem, setSelectedSite, setSelectedFile, setView, menusDispatch) => {
27
30
  setSelectedItem(null);
28
31
  setSelectedSite(null);
@@ -176,6 +179,8 @@ function AppSidebarContent({ organization, countrySubdivisionsData }) {
176
179
  return item.accessibleTo.some((role) => normalizedUserRoles.has(role.toLowerCase()));
177
180
  }, [normalizedUserRoles]);
178
181
  const visibleDatasetItems = datasetItems.filter((item) => !appContent || appContent.includes(item.id)).filter(canRenderItem);
182
+ const [bugOpen, setBugOpen] = React.useState(false);
183
+ const [featureOpen, setFeatureOpen] = React.useState(false);
179
184
  return /* @__PURE__ */ jsxs(Fragment, { children: [
180
185
  /* @__PURE__ */ jsxs(SidebarContent, { className: "overflow-hidden", children: [
181
186
  /* @__PURE__ */ jsx(SidebarHeader, { className: `w-full pt-7 flex items-center justify-center ${isCollapsed ? "items-center" : "pl-4 items-start"}`, children: /* @__PURE__ */ jsxs("div", { className: "flex flex-row items-center gap-3", children: [
@@ -260,7 +265,15 @@ function AppSidebarContent({ organization, countrySubdivisionsData }) {
260
265
  ] }),
261
266
  /* @__PURE__ */ jsxs(SidebarGroup, { children: [
262
267
  /* @__PURE__ */ jsx(SidebarGroupLabel, { children: t("service") }),
263
- /* @__PURE__ */ jsx(SidebarMenu, { children: serviceItems.map((item, index) => /* @__PURE__ */ jsx(SidebarMenuItem, { children: /* @__PURE__ */ jsx(SidebarMenuButton, { asChild: true, children: /* @__PURE__ */ jsxs(
268
+ /* @__PURE__ */ jsx(SidebarMenu, { children: serviceItems.map((item, index) => /* @__PURE__ */ jsx(SidebarMenuItem, { children: item.id === "support" ? /* @__PURE__ */ jsx(
269
+ SupportMenu,
270
+ {
271
+ isCollapsed,
272
+ item,
273
+ onOpenBug: () => setBugOpen(true),
274
+ onOpenFeature: () => setFeatureOpen(true)
275
+ }
276
+ ) : /* @__PURE__ */ jsx(SidebarMenuButton, { asChild: true, children: /* @__PURE__ */ jsxs(
264
277
  "a",
265
278
  {
266
279
  href: item.url,
@@ -273,7 +286,21 @@ function AppSidebarContent({ organization, countrySubdivisionsData }) {
273
286
  }
274
287
  ) }) }, index)) })
275
288
  ] })
276
- ] })
289
+ ] }),
290
+ /* @__PURE__ */ jsx(
291
+ BugReportDialog,
292
+ {
293
+ open: bugOpen,
294
+ onOpenChange: setBugOpen
295
+ }
296
+ ),
297
+ /* @__PURE__ */ jsx(
298
+ FeatureRequestDialog,
299
+ {
300
+ open: featureOpen,
301
+ onOpenChange: setFeatureOpen
302
+ }
303
+ )
277
304
  ] });
278
305
  }
279
306
  export {
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/core/components/AppSidebarContent.tsx"],"sourcesContent":["'use client'\r\n\r\n// SPDX-License-Identifier: AGPL-3.0-or-later\r\n// Copyright (C) 2025 Collab Digital Twins\r\n\r\nimport * as React from 'react'\r\n\r\n// Dependencies\r\nimport { AppConfigContext, MapContext, useMenusContext } from '../store'\r\nimport { ViewerNames } from '../types/'\r\n\r\n// Shadcn Components\r\nimport {\r\n SidebarContent,\r\n SidebarGroup,\r\n SidebarGroupContent,\r\n SidebarGroupLabel,\r\n SidebarMenu,\r\n SidebarMenuButton,\r\n SidebarMenuItem,\r\n SidebarHeader,\r\n SidebarFooter,\r\n useSidebar,\r\n} from '../components/ui/Sidebar'\r\n\r\nimport { Button } from './ui/Button'\r\n\r\n// Custom Components\r\nimport LanguageSwitch from './LanguageSwitch'\r\n\r\n// Icons\r\nimport * as LR from 'lucide-react'\r\n\r\nimport { Logo } from './Logo'\r\nimport { Separator } from './ui/Separator'\r\nimport { useTranslations } from 'next-intl'\r\nimport { Organization, Language } from '../types/dbTypes'\r\nimport { RoleNames } from '../types/global'\r\nimport { useSession } from 'next-auth/react'\r\nimport { useUserRole } from '../hooks/users/users'\r\n\r\nexport const handleChangeViewer = (\r\n viewer: ViewerNames,\r\n setSelectedItem: React.Dispatch<React.SetStateAction<any>>,\r\n setSelectedSite: React.Dispatch<React.SetStateAction<any>>,\r\n setSelectedFile: React.Dispatch<React.SetStateAction<any>>,\r\n setView: React.Dispatch<React.SetStateAction<'table' | 'detail'>>,\r\n menusDispatch: any,\r\n) => {\r\n // Reset selected item, file, & view when changing viewer\r\n setSelectedItem(null)\r\n setSelectedSite(null)\r\n setSelectedFile(null)\r\n setView('table')\r\n\r\n menusDispatch({\r\n type: 'SET_VIEWER',\r\n payload: { currentViewer: viewer },\r\n })\r\n}\r\n\r\ninterface AppSidebarProps {\r\n organization: Organization\r\n countrySubdivisionsData?: Record<string, string>;\r\n}\r\n\r\nexport function AppSidebarContent({ organization, countrySubdivisionsData }: AppSidebarProps) {\r\n // Translations\r\n const t = useTranslations('AppSidebar')\r\n\r\n const { dispatch: appConfigDispatch } = React.useContext(AppConfigContext)\r\n const { dispatch: mapDispatch } = React.useContext(MapContext)\r\n\r\n React.useEffect(() => {\r\n appConfigDispatch({\r\n type: 'SET_ORGANIZATION',\r\n payload: { organization },\r\n })\r\n }, [organization, appConfigDispatch])\r\n \r\n React.useEffect(() => {\r\n if (countrySubdivisionsData) {\r\n mapDispatch({\r\n type: 'SET_COUNTRY_SUBDIVISIONS',\r\n payload: { countrySubdivisionsData, organizationCountry: organization.country },\r\n })\r\n }\r\n }, [countrySubdivisionsData, mapDispatch, organization.country])\r\n\r\n const sidebarTitle = organization?.title ?? organization.name ?? 'CDT Platform'\r\n\r\n const allViewers: ViewerNames[] = [ViewerNames.extensions, ViewerNames.bim, ViewerNames.pointcloud, ViewerNames.sites, ViewerNames.infrastructure, ViewerNames.buildings, ViewerNames.files,];\r\n const appContent: ViewerNames[] = [ViewerNames.map];\r\n\r\n if (organization.appContent && organization.appContent.length > 0) {\r\n appContent.push(...organization.appContent as ViewerNames[]);\r\n } else {\r\n appContent.push(...allViewers);\r\n }\r\n\r\n const logoKey = organization?.logoKey\r\n const minioBaseUrl = process.env.NEXT_PUBLIC_MINIO_BUCKET_URL\r\n const logoUrl = minioBaseUrl && logoKey\r\n ? `${minioBaseUrl}/org-logos/${logoKey}`\r\n : '/images/cdt-logo-stroke.svg'\r\n\r\n const { dispatch: menusDispatch, state: menusState } = useMenusContext()\r\n const { setSelectedItem, setSelectedSite, setSelectedFile, setView } = useMenusContext()\r\n\r\n const { data: session } = useSession()\r\n const { userRole } = useUserRole(session?.user?.id || '')\r\n const normalizedUserRoles = React.useMemo(\r\n () => new Set(userRole?.name ? [userRole.name.trim().toLowerCase()] : []),\r\n [userRole]\r\n )\r\n\r\n const { sidebarState, setOpenInfo, isMobile, openMobile } = useSidebar()\r\n\r\n const changeViewer = (viewer: ViewerNames) => {\r\n handleChangeViewer(viewer, setSelectedItem, setSelectedSite, setSelectedFile, setView, menusDispatch)\r\n setOpenInfo(false)\r\n }\r\n\r\n const handleMapClick = () => {\r\n changeViewer(ViewerNames.map)\r\n }\r\n\r\n interface MenuItem {\r\n title: string\r\n id: ViewerNames | string\r\n icon: React.ElementType\r\n onClick?: () => void\r\n accessibleTo?: RoleNames[],\r\n url?: string\r\n tooltip?: string\r\n }\r\n\r\n // Sidebar menu items\r\n const viewerItems: MenuItem[] = [\r\n {\r\n title: t('mapTitle'),\r\n id: ViewerNames.map,\r\n icon: LR.Map,\r\n onClick: handleMapClick,\r\n },\r\n {\r\n title: t('bimTitle'),\r\n id: ViewerNames.bim,\r\n icon: LR.Box,\r\n onClick: () => changeViewer(ViewerNames.bim),\r\n },\r\n {\r\n title: t('pointCloudTitle'),\r\n id: ViewerNames.pointcloud,\r\n icon: LR.Grip,\r\n onClick: () => changeViewer(ViewerNames.pointcloud),\r\n }\r\n ]\r\n\r\n const datasetItems: MenuItem[] = [\r\n {\r\n title: t('siteTitle'),\r\n id: ViewerNames.sites,\r\n onClick: () => changeViewer(ViewerNames.sites),\r\n icon: LR.BoxSelect,\r\n },\r\n {\r\n title: t('buildingsTitle'),\r\n id: ViewerNames.buildings,\r\n icon: LR.Building2,\r\n onClick: () => changeViewer(ViewerNames.buildings),\r\n },\r\n {\r\n title: t('filesTitle'),\r\n id: ViewerNames.files,\r\n icon: LR.GalleryVerticalEnd,\r\n onClick: () => changeViewer(ViewerNames.files),\r\n },\r\n // {\r\n // title: t('landTitle'),\r\n // id: ViewerNames.land,\r\n // icon: LR.Mountain,\r\n // onClick: () => changeViewer(ViewerNames.land),\r\n // },\r\n {\r\n title: t('infrastructureTitle'),\r\n id: ViewerNames.infrastructure,\r\n icon: LR.TrainTrack,\r\n onClick: () => changeViewer(ViewerNames.infrastructure),\r\n },\r\n\r\n ]\r\n\r\n const managementItems: MenuItem[] = [\r\n // {\r\n // title: t('users'),\r\n // id: ViewerNames.users,\r\n // onClick: () => changeViewer(ViewerNames.users),\r\n // icon: LR.Users,\r\n // accessibleTo: [RoleNames.admin],\r\n // },\r\n {\r\n title: t('addExtensions'),\r\n id: ViewerNames.extensions,\r\n icon: LR.Blocks,\r\n onClick: () => changeViewer(ViewerNames.extensions),\r\n }\r\n ]\r\n\r\n // Sidebar footer items\r\n const serviceItems: MenuItem[] = [\r\n {\r\n title: t('support'),\r\n id: 'support',\r\n url: 'mailto:info@collabdt.org?subject=Support Request - CDT Platform',\r\n icon: LR.LifeBuoy,\r\n tooltip: t('contact')\r\n },\r\n // {\r\n // title: t('feedback'),\r\n // url: 'mailto:info@collabdt.org?subject=Feedback - CDT Platform',\r\n // icon: LR.Send,\r\n // },\r\n ]\r\n const { currentViewer } = menusState.menus\r\n\r\n // On mobile, treat the sheet open as expanded so labels render when the drawer is visible\r\n const isCollapsed = isMobile ? !openMobile : sidebarState === 'collapsed'\r\n\r\n const buildBtnClass = (active: boolean) => [\r\n 'text-sm flex items-center gap-2 w-full cursor-pointer transition-colors rounded-md',\r\n isCollapsed ? 'justify-center p-2' : 'justify-start p-2',\r\n active ? 'bg-primary/5 hover:bg-primary/10 border border-primary/15' : 'hover:bg-muted/50',\r\n ].join(' ')\r\n\r\n const buildIconClass = (active: boolean) => [\r\n 'h-4 w-4 shrink-0',\r\n active ? 'text-primary stroke-2' : 'text-muted-foreground'\r\n ].join(' ')\r\n\r\n const canRenderItem = React.useCallback((item: MenuItem) => {\r\n if (item.accessibleTo == null) return true\r\n return item.accessibleTo.some(role => normalizedUserRoles.has(role.toLowerCase()))\r\n }, [normalizedUserRoles])\r\n\r\n const visibleDatasetItems = datasetItems\r\n .filter(item => !appContent || appContent.includes(item.id as ViewerNames))\r\n .filter(canRenderItem)\r\n\r\n\r\n return (\r\n <>\r\n <SidebarContent className='overflow-hidden'>\r\n <SidebarHeader className={`w-full pt-7 flex items-center justify-center ${isCollapsed ? 'items-center' : 'pl-4 items-start'}`}>\r\n <div className='flex flex-row items-center gap-3'>\r\n <Logo image={logoUrl} />\r\n {sidebarState === 'expanded'\r\n && <h1 className=\"text-sm font-bold max-w-36\">{sidebarTitle}</h1>}\r\n </div>\r\n </SidebarHeader>\r\n {isCollapsed && <Separator className=\"z-30 w-2/3 mx-auto\" />}\r\n\r\n <div className='overflow-y-auto overflow-x-hidden'>\r\n <SidebarGroup>\r\n <SidebarGroupLabel>{t('3dViewer')}</SidebarGroupLabel>\r\n <SidebarGroupContent>\r\n <SidebarMenu>\r\n {viewerItems.filter(item => !appContent || appContent.includes(item.id as ViewerNames))\r\n .filter(canRenderItem)\r\n .map(item => {\r\n const active = item.id === currentViewer;\r\n return (\r\n <SidebarMenuItem key={item.title}>\r\n <SidebarMenuButton asChild>\r\n <Button\r\n onClick={item.onClick}\r\n title={isCollapsed ? item.title : undefined}\r\n className={buildBtnClass(active)}\r\n variant=\"ghost\"\r\n >\r\n <item.icon className={buildIconClass(active)} />\r\n <span className={`${isCollapsed ? 'hidden' : 'inline'} ${active ? 'font-bold text-primary' : ''}`}>{item.title}</span>\r\n </Button>\r\n </SidebarMenuButton>\r\n </SidebarMenuItem>\r\n );\r\n })\r\n }\r\n </SidebarMenu>\r\n </SidebarGroupContent>\r\n </SidebarGroup>\r\n\r\n\r\n {visibleDatasetItems.length > 0 && (\r\n <>\r\n {isCollapsed && <Separator className=\"z-30 w-2/3 mx-auto\" />}\r\n\r\n <SidebarGroup>\r\n <SidebarGroupLabel>{t('data')}</SidebarGroupLabel>\r\n\r\n <SidebarGroupContent>\r\n <SidebarMenu>\r\n {visibleDatasetItems.map(item => {\r\n const active = item.id === currentViewer\r\n\r\n return (\r\n <SidebarMenuItem key={item.title}>\r\n <SidebarMenuButton asChild>\r\n <Button\r\n onClick={item.onClick}\r\n title={isCollapsed ? item.title : undefined}\r\n className={buildBtnClass(active)}\r\n variant=\"ghost\"\r\n >\r\n <item.icon className={buildIconClass(active)} />\r\n <span\r\n className={`${isCollapsed ? 'hidden' : 'inline'} ${\r\n active ? 'font-bold text-primary' : ''\r\n }`}\r\n >\r\n {item.title}\r\n </span>\r\n </Button>\r\n </SidebarMenuButton>\r\n </SidebarMenuItem>\r\n )\r\n })}\r\n </SidebarMenu>\r\n </SidebarGroupContent>\r\n </SidebarGroup>\r\n </>\r\n )}\r\n {isCollapsed && <Separator className=\"z-30 w-2/3 mx-auto\" />}\r\n <SidebarGroup>\r\n <SidebarGroupLabel>{t('extensions')}</SidebarGroupLabel>\r\n <SidebarGroupContent>\r\n <SidebarMenu>\r\n {managementItems.filter(canRenderItem).map(item => {\r\n const active = item.id === currentViewer\r\n return (\r\n <SidebarMenuItem key={item.title}>\r\n <SidebarMenuButton asChild>\r\n <Button\r\n onClick={item.onClick}\r\n title={isCollapsed ? item.title : undefined}\r\n className={buildBtnClass(active)}\r\n variant=\"ghost\"\r\n >\r\n <item.icon className={buildIconClass(active)} />\r\n <span className={`${isCollapsed ? 'hidden' : 'inline'} ${active ? 'font-bold text-primary' : ''}`}>{item.title}</span>\r\n </Button>\r\n </SidebarMenuButton>\r\n </SidebarMenuItem>\r\n )\r\n })}\r\n </SidebarMenu>\r\n </SidebarGroupContent>\r\n </SidebarGroup>\r\n </div>\r\n </SidebarContent>\r\n {/* Footer Content - only show when not in BIM mode or when collapsed */}\r\n <SidebarFooter className={`w-full flex flex-col gap-4 ${isCollapsed ? 'items-center justify-center px-0 pb-4' : 'items-start justify-start px-2 pb-4'}`}>\r\n {/* Preferences */}\r\n {organization.languages?.length > 1 && (\r\n <SidebarGroup>\r\n <SidebarGroupLabel>{t('preferences')}</SidebarGroupLabel>\r\n <SidebarMenu>\r\n <SidebarMenuItem>\r\n <LanguageSwitch showLabel={sidebarState === 'expanded'} languages={organization.languages as Language[]} />\r\n </SidebarMenuItem>\r\n </SidebarMenu>\r\n </SidebarGroup>\r\n )}\r\n {/* Services */}\r\n <SidebarGroup>\r\n <SidebarGroupLabel>{t('service')}</SidebarGroupLabel>\r\n <SidebarMenu>\r\n {serviceItems.map((item, index) => (\r\n <SidebarMenuItem key={index}>\r\n <SidebarMenuButton asChild>\r\n <a \r\n href={item.url} \r\n className={`text-xs flex items-center gap-2 w-full ${isCollapsed ? 'justify-center p-2' : 'justify-start p-2'}`}\r\n title={item.tooltip}\r\n >\r\n <item.icon className=\"h-4 w-4\" />\r\n <span className={isCollapsed ? 'hidden' : 'inline'}>{item.title}</span>\r\n </a>\r\n </SidebarMenuButton>\r\n </SidebarMenuItem>\r\n ))}\r\n </SidebarMenu>\r\n </SidebarGroup>\r\n </SidebarFooter>\r\n </>\r\n )\r\n}"],"mappings":"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","names":[]}
1
+ {"version":3,"sources":["../../../src/core/components/AppSidebarContent.tsx"],"sourcesContent":["'use client'\r\n\r\n// SPDX-License-Identifier: AGPL-3.0-or-later\r\n// Copyright (C) 2025 Collab Digital Twins\r\n\r\nimport * as React from 'react'\r\n\r\n// Dependencies\r\nimport { AppConfigContext, MapContext, useMenusContext } from '../store'\r\nimport { ViewerNames } from '../types/'\r\nimport { BugReportDialog } from \"../components/support/BugReportDialog\";\r\nimport { FeatureRequestDialog } from \"../components/support/FeatureRequestDialog\";\r\n// Shadcn Components\r\nimport {\r\n SidebarContent,\r\n SidebarGroup,\r\n SidebarGroupContent,\r\n SidebarGroupLabel,\r\n SidebarMenu,\r\n SidebarMenuButton,\r\n SidebarMenuItem,\r\n SidebarHeader,\r\n SidebarFooter,\r\n useSidebar,\r\n} from '../components/ui/Sidebar'\r\n\r\nimport { Button } from './ui/Button'\r\n\r\n// Custom Components\r\nimport LanguageSwitch from './LanguageSwitch'\r\n\r\n// Icons\r\nimport * as LR from 'lucide-react'\r\n\r\nimport { Logo } from './Logo'\r\nimport { Separator } from './ui/Separator'\r\nimport { useTranslations } from 'next-intl'\r\nimport { Organization, Language } from '../types/dbTypes'\r\nimport { RoleNames } from '../types/global'\r\nimport { useSession } from 'next-auth/react'\r\nimport { useUserRole } from '../hooks/users/users'\r\n\r\nimport { SupportMenu } from \"../components/support/SupportMenu\"\r\n\r\n\r\n\r\nexport const handleChangeViewer = (\r\n viewer: ViewerNames,\r\n setSelectedItem: React.Dispatch<React.SetStateAction<any>>,\r\n setSelectedSite: React.Dispatch<React.SetStateAction<any>>,\r\n setSelectedFile: React.Dispatch<React.SetStateAction<any>>,\r\n setView: React.Dispatch<React.SetStateAction<'table' | 'detail'>>,\r\n menusDispatch: any,\r\n) => {\r\n // Reset selected item, file, & view when changing viewer\r\n setSelectedItem(null)\r\n setSelectedSite(null)\r\n setSelectedFile(null)\r\n setView('table')\r\n\r\n menusDispatch({\r\n type: 'SET_VIEWER',\r\n payload: { currentViewer: viewer },\r\n })\r\n}\r\n\r\ninterface AppSidebarProps {\r\n organization: Organization\r\n countrySubdivisionsData?: Record<string, string>;\r\n}\r\n\r\nexport function AppSidebarContent({ organization, countrySubdivisionsData }: AppSidebarProps) {\r\n // Translations\r\n const t = useTranslations('AppSidebar')\r\n\r\n const { dispatch: appConfigDispatch } = React.useContext(AppConfigContext)\r\n const { dispatch: mapDispatch } = React.useContext(MapContext)\r\n\r\n \r\n\r\n React.useEffect(() => {\r\n appConfigDispatch({\r\n type: 'SET_ORGANIZATION',\r\n payload: { organization },\r\n })\r\n }, [organization, appConfigDispatch])\r\n \r\n React.useEffect(() => {\r\n if (countrySubdivisionsData) {\r\n mapDispatch({\r\n type: 'SET_COUNTRY_SUBDIVISIONS',\r\n payload: { countrySubdivisionsData, organizationCountry: organization.country },\r\n })\r\n }\r\n }, [countrySubdivisionsData, mapDispatch, organization.country])\r\n\r\n const sidebarTitle = organization?.title ?? organization.name ?? 'CDT Platform'\r\n\r\n const allViewers: ViewerNames[] = [ViewerNames.extensions, ViewerNames.bim, ViewerNames.pointcloud, ViewerNames.sites, ViewerNames.infrastructure, ViewerNames.buildings, ViewerNames.files,];\r\n const appContent: ViewerNames[] = [ViewerNames.map];\r\n\r\n if (organization.appContent && organization.appContent.length > 0) {\r\n appContent.push(...organization.appContent as ViewerNames[]);\r\n } else {\r\n appContent.push(...allViewers);\r\n }\r\n\r\n const logoKey = organization?.logoKey\r\n const minioBaseUrl = process.env.NEXT_PUBLIC_MINIO_BUCKET_URL\r\n const logoUrl = minioBaseUrl && logoKey\r\n ? `${minioBaseUrl}/org-logos/${logoKey}`\r\n : '/images/cdt-logo-stroke.svg'\r\n\r\n const { dispatch: menusDispatch, state: menusState } = useMenusContext()\r\n const { setSelectedItem, setSelectedSite, setSelectedFile, setView } = useMenusContext()\r\n\r\n const { data: session } = useSession()\r\n const { userRole } = useUserRole(session?.user?.id || '')\r\n const normalizedUserRoles = React.useMemo(\r\n () => new Set(userRole?.name ? [userRole.name.trim().toLowerCase()] : []),\r\n [userRole]\r\n )\r\n\r\n const { sidebarState, setOpenInfo, isMobile, openMobile } = useSidebar()\r\n\r\n const changeViewer = (viewer: ViewerNames) => {\r\n handleChangeViewer(viewer, setSelectedItem, setSelectedSite, setSelectedFile, setView, menusDispatch)\r\n setOpenInfo(false)\r\n }\r\n\r\n const handleMapClick = () => {\r\n changeViewer(ViewerNames.map)\r\n }\r\n\r\n interface MenuItem {\r\n title: string\r\n id: ViewerNames | string\r\n icon: React.ElementType\r\n onClick?: () => void\r\n accessibleTo?: RoleNames[],\r\n url?: string\r\n tooltip?: string\r\n }\r\n\r\n // Sidebar menu items\r\n const viewerItems: MenuItem[] = [\r\n {\r\n title: t('mapTitle'),\r\n id: ViewerNames.map,\r\n icon: LR.Map,\r\n onClick: handleMapClick,\r\n },\r\n {\r\n title: t('bimTitle'),\r\n id: ViewerNames.bim,\r\n icon: LR.Box,\r\n onClick: () => changeViewer(ViewerNames.bim),\r\n },\r\n {\r\n title: t('pointCloudTitle'),\r\n id: ViewerNames.pointcloud,\r\n icon: LR.Grip,\r\n onClick: () => changeViewer(ViewerNames.pointcloud),\r\n }\r\n ]\r\n\r\n const datasetItems: MenuItem[] = [\r\n {\r\n title: t('siteTitle'),\r\n id: ViewerNames.sites,\r\n onClick: () => changeViewer(ViewerNames.sites),\r\n icon: LR.BoxSelect,\r\n },\r\n {\r\n title: t('buildingsTitle'),\r\n id: ViewerNames.buildings,\r\n icon: LR.Building2,\r\n onClick: () => changeViewer(ViewerNames.buildings),\r\n },\r\n {\r\n title: t('filesTitle'),\r\n id: ViewerNames.files,\r\n icon: LR.GalleryVerticalEnd,\r\n onClick: () => changeViewer(ViewerNames.files),\r\n },\r\n // {\r\n // title: t('landTitle'),\r\n // id: ViewerNames.land,\r\n // icon: LR.Mountain,\r\n // onClick: () => changeViewer(ViewerNames.land),\r\n // },\r\n {\r\n title: t('infrastructureTitle'),\r\n id: ViewerNames.infrastructure,\r\n icon: LR.TrainTrack,\r\n onClick: () => changeViewer(ViewerNames.infrastructure),\r\n },\r\n\r\n ]\r\n\r\n const managementItems: MenuItem[] = [\r\n // {\r\n // title: t('users'),\r\n // id: ViewerNames.users,\r\n // onClick: () => changeViewer(ViewerNames.users),\r\n // icon: LR.Users,\r\n // accessibleTo: [RoleNames.admin],\r\n // },\r\n {\r\n title: t('addExtensions'),\r\n id: ViewerNames.extensions,\r\n icon: LR.Blocks,\r\n onClick: () => changeViewer(ViewerNames.extensions),\r\n }\r\n ]\r\n\r\n // Sidebar footer items\r\n const serviceItems: MenuItem[] = [\r\n {\r\n title: t('support'),\r\n id: 'support',\r\n url: 'mailto:info@collabdt.org?subject=Support Request - CDT Platform',\r\n icon: LR.LifeBuoy,\r\n tooltip: t('contact')\r\n },\r\n // {\r\n // title: t('feedback'),\r\n // url: 'mailto:info@collabdt.org?subject=Feedback - CDT Platform',\r\n // icon: LR.Send,\r\n // },\r\n ]\r\n const { currentViewer } = menusState.menus\r\n\r\n // On mobile, treat the sheet open as expanded so labels render when the drawer is visible\r\n const isCollapsed = isMobile ? !openMobile : sidebarState === 'collapsed'\r\n\r\n const buildBtnClass = (active: boolean) => [\r\n 'text-sm flex items-center gap-2 w-full cursor-pointer transition-colors rounded-md',\r\n isCollapsed ? 'justify-center p-2' : 'justify-start p-2',\r\n active ? 'bg-primary/5 hover:bg-primary/10 border border-primary/15' : 'hover:bg-muted/50',\r\n ].join(' ')\r\n\r\n const buildIconClass = (active: boolean) => [\r\n 'h-4 w-4 shrink-0',\r\n active ? 'text-primary stroke-2' : 'text-muted-foreground'\r\n ].join(' ')\r\n\r\n const canRenderItem = React.useCallback((item: MenuItem) => {\r\n if (item.accessibleTo == null) return true\r\n return item.accessibleTo.some(role => normalizedUserRoles.has(role.toLowerCase()))\r\n }, [normalizedUserRoles])\r\n\r\n const visibleDatasetItems = datasetItems\r\n .filter(item => !appContent || appContent.includes(item.id as ViewerNames))\r\n .filter(canRenderItem)\r\n\r\n const [bugOpen, setBugOpen] = React.useState(false);\r\n const [featureOpen, setFeatureOpen] = React.useState(false);\r\n \r\n return (\r\n <>\r\n <SidebarContent className='overflow-hidden'>\r\n <SidebarHeader className={`w-full pt-7 flex items-center justify-center ${isCollapsed ? 'items-center' : 'pl-4 items-start'}`}>\r\n <div className='flex flex-row items-center gap-3'>\r\n <Logo image={logoUrl} />\r\n {sidebarState === 'expanded'\r\n && <h1 className=\"text-sm font-bold max-w-36\">{sidebarTitle}</h1>}\r\n </div>\r\n </SidebarHeader>\r\n {isCollapsed && <Separator className=\"z-30 w-2/3 mx-auto\" />}\r\n\r\n <div className='overflow-y-auto overflow-x-hidden'>\r\n <SidebarGroup>\r\n <SidebarGroupLabel>{t('3dViewer')}</SidebarGroupLabel>\r\n <SidebarGroupContent>\r\n <SidebarMenu>\r\n {viewerItems.filter(item => !appContent || appContent.includes(item.id as ViewerNames))\r\n .filter(canRenderItem)\r\n .map(item => {\r\n const active = item.id === currentViewer;\r\n return (\r\n <SidebarMenuItem key={item.title}>\r\n <SidebarMenuButton asChild>\r\n <Button\r\n onClick={item.onClick}\r\n title={isCollapsed ? item.title : undefined}\r\n className={buildBtnClass(active)}\r\n variant=\"ghost\"\r\n >\r\n <item.icon className={buildIconClass(active)} />\r\n <span className={`${isCollapsed ? 'hidden' : 'inline'} ${active ? 'font-bold text-primary' : ''}`}>{item.title}</span>\r\n </Button>\r\n </SidebarMenuButton>\r\n </SidebarMenuItem>\r\n );\r\n })\r\n }\r\n </SidebarMenu>\r\n </SidebarGroupContent>\r\n </SidebarGroup>\r\n\r\n\r\n {visibleDatasetItems.length > 0 && (\r\n <>\r\n {isCollapsed && <Separator className=\"z-30 w-2/3 mx-auto\" />}\r\n\r\n <SidebarGroup>\r\n <SidebarGroupLabel>{t('data')}</SidebarGroupLabel>\r\n\r\n <SidebarGroupContent>\r\n <SidebarMenu>\r\n {visibleDatasetItems.map(item => {\r\n const active = item.id === currentViewer\r\n\r\n return (\r\n <SidebarMenuItem key={item.title}>\r\n <SidebarMenuButton asChild>\r\n <Button\r\n onClick={item.onClick}\r\n title={isCollapsed ? item.title : undefined}\r\n className={buildBtnClass(active)}\r\n variant=\"ghost\"\r\n >\r\n <item.icon className={buildIconClass(active)} />\r\n <span\r\n className={`${isCollapsed ? 'hidden' : 'inline'} ${\r\n active ? 'font-bold text-primary' : ''\r\n }`}\r\n >\r\n {item.title}\r\n </span>\r\n </Button>\r\n </SidebarMenuButton>\r\n </SidebarMenuItem>\r\n )\r\n })}\r\n </SidebarMenu>\r\n </SidebarGroupContent>\r\n </SidebarGroup>\r\n </>\r\n )}\r\n {isCollapsed && <Separator className=\"z-30 w-2/3 mx-auto\" />}\r\n <SidebarGroup>\r\n <SidebarGroupLabel>{t('extensions')}</SidebarGroupLabel>\r\n <SidebarGroupContent>\r\n <SidebarMenu>\r\n {managementItems.filter(canRenderItem).map(item => {\r\n const active = item.id === currentViewer\r\n return (\r\n <SidebarMenuItem key={item.title}>\r\n <SidebarMenuButton asChild>\r\n <Button\r\n onClick={item.onClick}\r\n title={isCollapsed ? item.title : undefined}\r\n className={buildBtnClass(active)}\r\n variant=\"ghost\"\r\n >\r\n <item.icon className={buildIconClass(active)} />\r\n <span className={`${isCollapsed ? 'hidden' : 'inline'} ${active ? 'font-bold text-primary' : ''}`}>{item.title}</span>\r\n </Button>\r\n </SidebarMenuButton>\r\n </SidebarMenuItem>\r\n )\r\n })}\r\n </SidebarMenu>\r\n </SidebarGroupContent>\r\n </SidebarGroup>\r\n </div>\r\n </SidebarContent>\r\n {/* Footer Content - only show when not in BIM mode or when collapsed */}\r\n <SidebarFooter className={`w-full flex flex-col gap-4 ${isCollapsed ? 'items-center justify-center px-0 pb-4' : 'items-start justify-start px-2 pb-4'}`}>\r\n {/* Preferences */}\r\n {organization.languages?.length > 1 && (\r\n <SidebarGroup>\r\n <SidebarGroupLabel>{t('preferences')}</SidebarGroupLabel>\r\n <SidebarMenu>\r\n <SidebarMenuItem>\r\n <LanguageSwitch showLabel={sidebarState === 'expanded'} languages={organization.languages as Language[]} />\r\n </SidebarMenuItem>\r\n </SidebarMenu>\r\n </SidebarGroup>\r\n )}\r\n {/* Services */}\r\n <SidebarGroup>\r\n <SidebarGroupLabel>{t('service')}</SidebarGroupLabel>\r\n <SidebarMenu>\r\n {serviceItems.map((item, index) => (\r\n <SidebarMenuItem key={index}>\r\n {item.id === \"support\" ? (\r\n <SupportMenu\r\n isCollapsed={isCollapsed}\r\n item={item}\r\n onOpenBug={() => setBugOpen(true)}\r\n onOpenFeature={() => setFeatureOpen(true)}\r\n />\r\n ) : (\r\n <SidebarMenuButton asChild>\r\n <a\r\n href={item.url}\r\n className={`text-xs flex items-center gap-2 w-full ${\r\n isCollapsed ? \"justify-center p-2\" : \"justify-start p-2\"\r\n }`}\r\n title={item.tooltip}\r\n >\r\n <item.icon className=\"h-4 w-4\" />\r\n <span className={isCollapsed ? \"hidden\" : \"inline\"}>\r\n {item.title}\r\n </span>\r\n </a>\r\n </SidebarMenuButton>\r\n )}\r\n </SidebarMenuItem>\r\n ))}\r\n </SidebarMenu>\r\n </SidebarGroup>\r\n </SidebarFooter>\r\n <BugReportDialog\r\n open={bugOpen}\r\n onOpenChange={setBugOpen}\r\n />\r\n\r\n <FeatureRequestDialog\r\n open={featureOpen}\r\n onOpenChange={setFeatureOpen}\r\n />\r\n </>\r\n )\r\n}"],"mappings":"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","names":[]}
@@ -1 +1 @@
1
- {"version":3,"file":"OrganizationNotFoundSection.d.ts","sourceRoot":"","sources":["../../../../../src/core/components/instance-not-found/src/OrganizationNotFoundSection.tsx"],"names":[],"mappings":"AAeA,UAAU,gCAAgC;IACxC,gBAAgB,EAAE,MAAM,CAAA;IACxB,QAAQ,EAAE,CAAC,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC,eAAe,CAAC,KAAK,IAAI,CAAA;IACvD,YAAY,CAAC,EAAE,OAAO,CAAA;CACvB;AAED,MAAM,CAAC,OAAO,UAAU,2BAA2B,CAAC,EAClD,gBAAgB,EAChB,QAAQ,EACR,YAAoB,EACrB,EAAE,gCAAgC,+BA2MlC"}
1
+ {"version":3,"file":"OrganizationNotFoundSection.d.ts","sourceRoot":"","sources":["../../../../../src/core/components/instance-not-found/src/OrganizationNotFoundSection.tsx"],"names":[],"mappings":"AAcA,UAAU,gCAAgC;IACxC,gBAAgB,EAAE,MAAM,CAAA;IACxB,QAAQ,EAAE,CAAC,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC,eAAe,CAAC,KAAK,IAAI,CAAA;IACvD,YAAY,CAAC,EAAE,OAAO,CAAA;CACvB;AAED,MAAM,CAAC,OAAO,UAAU,2BAA2B,CAAC,EAClD,gBAAgB,EAChB,QAAQ,EACR,YAAoB,EACrB,EAAE,gCAAgC,+BA2MlC"}
@@ -7,7 +7,6 @@ import { Input } from "../../ui/Input";
7
7
  import { Textarea } from "../../ui/Textarea";
8
8
  import { useTranslations } from "next-intl";
9
9
  import Link from "next/link";
10
- import Footer from "../../ui/Footer";
11
10
  import { useState } from "react";
12
11
  function OrganizationNotFoundSection({
13
12
  organizationName,
@@ -21,192 +20,189 @@ function OrganizationNotFoundSection({
21
20
  window.location.href = `/${redirectOrg.trim()}`;
22
21
  }
23
22
  };
24
- return /* @__PURE__ */ jsxs(Fragment, { children: [
25
- /* @__PURE__ */ jsx("section", { className: "min-h-screen py-32 relative flex items-center z-10", children: /* @__PURE__ */ jsx("div", { className: "container mx-auto px-6", children: /* @__PURE__ */ jsxs(
26
- motion.div,
27
- {
28
- initial: { opacity: 0, y: 30 },
29
- animate: { opacity: 1, y: 0 },
30
- className: "max-w-5xl mx-auto",
31
- children: [
32
- /* @__PURE__ */ jsxs("div", { className: "text-center mb-16 space-y-6", children: [
33
- /* @__PURE__ */ jsx("h1", { className: "text-4xl md:text-5xl font-bold text-balance", children: t("title") }),
34
- /* @__PURE__ */ jsxs("div", { className: "text-lg space-y-2", children: [
35
- /* @__PURE__ */ jsxs("p", { className: "text-muted-foreground", children: [
36
- t("organizationLabel"),
37
- " ",
38
- /* @__PURE__ */ jsxs("span", { className: "font-semibold text-foreground", children: [
39
- "'",
40
- organizationName,
41
- "'"
42
- ] }),
43
- " ",
44
- t("notCreatedYet")
23
+ return /* @__PURE__ */ jsx(Fragment, { children: /* @__PURE__ */ jsx("section", { className: "min-h-screen py-32 relative flex items-center z-10", children: /* @__PURE__ */ jsx("div", { className: "container mx-auto px-6", children: /* @__PURE__ */ jsxs(
24
+ motion.div,
25
+ {
26
+ initial: { opacity: 0, y: 30 },
27
+ animate: { opacity: 1, y: 0 },
28
+ className: "max-w-5xl mx-auto",
29
+ children: [
30
+ /* @__PURE__ */ jsxs("div", { className: "text-center mb-16 space-y-6", children: [
31
+ /* @__PURE__ */ jsx("h1", { className: "text-4xl md:text-5xl font-bold text-balance", children: t("title") }),
32
+ /* @__PURE__ */ jsxs("div", { className: "text-lg space-y-2", children: [
33
+ /* @__PURE__ */ jsxs("p", { className: "text-muted-foreground", children: [
34
+ t("organizationLabel"),
35
+ " ",
36
+ /* @__PURE__ */ jsxs("span", { className: "font-semibold text-foreground", children: [
37
+ "'",
38
+ organizationName,
39
+ "'"
45
40
  ] }),
46
- /* @__PURE__ */ jsxs("div", { className: "mt-6 mb-4", children: [
47
- /* @__PURE__ */ jsx("p", { className: "text-sm text-muted-foreground mb-3", children: t("redirectPrompt") }),
48
- /* @__PURE__ */ jsxs("div", { className: "flex flex-col sm:flex-row gap-3 items-stretch justify-center max-w-md mx-auto", children: [
49
- /* @__PURE__ */ jsx(
50
- Input,
51
- {
52
- value: redirectOrg,
53
- onChange: (e) => setRedirectOrg(e.target.value),
54
- placeholder: t("redirectPlaceholder"),
55
- className: "flex-1",
56
- onKeyDown: (e) => {
57
- if (e.key === "Enter") {
58
- e.preventDefault();
59
- handleRedirect();
60
- }
41
+ " ",
42
+ t("notCreatedYet")
43
+ ] }),
44
+ /* @__PURE__ */ jsxs("div", { className: "mt-6 mb-4", children: [
45
+ /* @__PURE__ */ jsx("p", { className: "text-sm text-muted-foreground mb-3", children: t("redirectPrompt") }),
46
+ /* @__PURE__ */ jsxs("div", { className: "flex flex-col sm:flex-row gap-3 items-stretch justify-center max-w-md mx-auto", children: [
47
+ /* @__PURE__ */ jsx(
48
+ Input,
49
+ {
50
+ value: redirectOrg,
51
+ onChange: (e) => setRedirectOrg(e.target.value),
52
+ placeholder: t("redirectPlaceholder"),
53
+ className: "flex-1",
54
+ onKeyDown: (e) => {
55
+ if (e.key === "Enter") {
56
+ e.preventDefault();
57
+ handleRedirect();
61
58
  }
62
59
  }
63
- ),
64
- /* @__PURE__ */ jsx(
65
- Button,
66
- {
67
- onClick: handleRedirect,
68
- variant: "outline",
69
- className: "whitespace-nowrap",
70
- disabled: !redirectOrg.trim(),
71
- children: t("redirectButton")
72
- }
73
- )
74
- ] })
75
- ] }),
76
- /* @__PURE__ */ jsx("p", { className: "text-muted-foreground", children: t("contactMessage") })
60
+ }
61
+ ),
62
+ /* @__PURE__ */ jsx(
63
+ Button,
64
+ {
65
+ onClick: handleRedirect,
66
+ variant: "outline",
67
+ className: "whitespace-nowrap",
68
+ disabled: !redirectOrg.trim(),
69
+ children: t("redirectButton")
70
+ }
71
+ )
72
+ ] })
77
73
  ] }),
78
- /* @__PURE__ */ jsxs("div", { className: "pt-4 flex flex-col sm:flex-row items-stretch justify-center gap-4", children: [
79
- /* @__PURE__ */ jsx(Link, { href: "https://collabdt.org/", children: /* @__PURE__ */ jsx(Button, { variant: "outline", size: "lg", className: "text-base px-8 w-full sm:w-auto", children: t("backToHome") }) }),
80
- /* @__PURE__ */ jsx(
81
- Button,
82
- {
83
- size: "lg",
84
- variant: "outline",
85
- className: "text-base px-8 bg-primary-highlight border-secondary/40 hover:bg-orange-400 hover:border-secondary/60 transition-all whitespace-nowrap w-full sm:w-auto",
86
- asChild: true,
87
- children: /* @__PURE__ */ jsx("a", { href: "https://docs.google.com/forms/d/e/1FAIpQLScB12Qc7khiOk4a_E753jDccx6026AjO-_FINBKoZZZtkmqnA/viewform", target: "_blank", rel: "noopener noreferrer", children: t("betaButton") })
88
- }
89
- )
90
- ] })
74
+ /* @__PURE__ */ jsx("p", { className: "text-muted-foreground", children: t("contactMessage") })
91
75
  ] }),
92
- /* @__PURE__ */ jsxs("div", { className: "grid lg:grid-cols-3 gap-8", children: [
93
- /* @__PURE__ */ jsxs(Card, { className: "lg:col-span-2 p-8", children: [
94
- /* @__PURE__ */ jsx("h3", { className: "text-2xl font-bold mb-6", children: t("formTitle") }),
95
- /* @__PURE__ */ jsx("p", { className: "text-muted-foreground mb-8", children: t("formDescription") }),
96
- /* @__PURE__ */ jsxs("form", { onSubmit, className: "space-y-6", children: [
97
- /* @__PURE__ */ jsxs("div", { className: "grid sm:grid-cols-2 gap-4", children: [
98
- /* @__PURE__ */ jsxs("div", { className: "space-y-2", children: [
99
- /* @__PURE__ */ jsx("label", { htmlFor: "firstName", className: "text-sm font-medium", children: t("firstName") }),
100
- /* @__PURE__ */ jsx(
101
- Input,
102
- {
103
- id: "firstName",
104
- name: "firstName",
105
- required: true,
106
- className: "bg-background"
107
- }
108
- )
109
- ] }),
110
- /* @__PURE__ */ jsxs("div", { className: "space-y-2", children: [
111
- /* @__PURE__ */ jsx("label", { htmlFor: "lastName", className: "text-sm font-medium", children: t("lastName") }),
112
- /* @__PURE__ */ jsx(
113
- Input,
114
- {
115
- id: "lastName",
116
- name: "lastName",
117
- required: true,
118
- className: "bg-background"
119
- }
120
- )
121
- ] })
122
- ] }),
76
+ /* @__PURE__ */ jsxs("div", { className: "pt-4 flex flex-col sm:flex-row items-stretch justify-center gap-4", children: [
77
+ /* @__PURE__ */ jsx(Link, { href: "https://collabdt.org/", children: /* @__PURE__ */ jsx(Button, { variant: "outline", size: "lg", className: "text-base px-8 w-full sm:w-auto", children: t("backToHome") }) }),
78
+ /* @__PURE__ */ jsx(
79
+ Button,
80
+ {
81
+ size: "lg",
82
+ variant: "outline",
83
+ className: "text-base px-8 bg-primary-highlight border-secondary/40 hover:bg-orange-400 hover:border-secondary/60 transition-all whitespace-nowrap w-full sm:w-auto",
84
+ asChild: true,
85
+ children: /* @__PURE__ */ jsx("a", { href: "https://docs.google.com/forms/d/e/1FAIpQLScB12Qc7khiOk4a_E753jDccx6026AjO-_FINBKoZZZtkmqnA/viewform", target: "_blank", rel: "noopener noreferrer", children: t("betaButton") })
86
+ }
87
+ )
88
+ ] })
89
+ ] }),
90
+ /* @__PURE__ */ jsxs("div", { className: "grid lg:grid-cols-3 gap-8", children: [
91
+ /* @__PURE__ */ jsxs(Card, { className: "lg:col-span-2 p-8", children: [
92
+ /* @__PURE__ */ jsx("h3", { className: "text-2xl font-bold mb-6", children: t("formTitle") }),
93
+ /* @__PURE__ */ jsx("p", { className: "text-muted-foreground mb-8", children: t("formDescription") }),
94
+ /* @__PURE__ */ jsxs("form", { onSubmit, className: "space-y-6", children: [
95
+ /* @__PURE__ */ jsxs("div", { className: "grid sm:grid-cols-2 gap-4", children: [
123
96
  /* @__PURE__ */ jsxs("div", { className: "space-y-2", children: [
124
- /* @__PURE__ */ jsx("label", { htmlFor: "email", className: "text-sm font-medium", children: t("email") }),
97
+ /* @__PURE__ */ jsx("label", { htmlFor: "firstName", className: "text-sm font-medium", children: t("firstName") }),
125
98
  /* @__PURE__ */ jsx(
126
99
  Input,
127
100
  {
128
- id: "email",
129
- name: "email",
130
- type: "email",
101
+ id: "firstName",
102
+ name: "firstName",
131
103
  required: true,
132
104
  className: "bg-background"
133
105
  }
134
106
  )
135
107
  ] }),
136
108
  /* @__PURE__ */ jsxs("div", { className: "space-y-2", children: [
137
- /* @__PURE__ */ jsx("label", { htmlFor: "organization", className: "text-sm font-medium", children: t("organization") }),
109
+ /* @__PURE__ */ jsx("label", { htmlFor: "lastName", className: "text-sm font-medium", children: t("lastName") }),
138
110
  /* @__PURE__ */ jsx(
139
111
  Input,
140
112
  {
141
- id: "organization",
142
- name: "organization",
143
- defaultValue: organizationName,
113
+ id: "lastName",
114
+ name: "lastName",
115
+ required: true,
144
116
  className: "bg-background"
145
117
  }
146
118
  )
147
- ] }),
148
- /* @__PURE__ */ jsxs("div", { className: "space-y-2", children: [
149
- /* @__PURE__ */ jsx("label", { htmlFor: "message", className: "text-sm font-medium", children: t("message") }),
119
+ ] })
120
+ ] }),
121
+ /* @__PURE__ */ jsxs("div", { className: "space-y-2", children: [
122
+ /* @__PURE__ */ jsx("label", { htmlFor: "email", className: "text-sm font-medium", children: t("email") }),
123
+ /* @__PURE__ */ jsx(
124
+ Input,
125
+ {
126
+ id: "email",
127
+ name: "email",
128
+ type: "email",
129
+ required: true,
130
+ className: "bg-background"
131
+ }
132
+ )
133
+ ] }),
134
+ /* @__PURE__ */ jsxs("div", { className: "space-y-2", children: [
135
+ /* @__PURE__ */ jsx("label", { htmlFor: "organization", className: "text-sm font-medium", children: t("organization") }),
136
+ /* @__PURE__ */ jsx(
137
+ Input,
138
+ {
139
+ id: "organization",
140
+ name: "organization",
141
+ defaultValue: organizationName,
142
+ className: "bg-background"
143
+ }
144
+ )
145
+ ] }),
146
+ /* @__PURE__ */ jsxs("div", { className: "space-y-2", children: [
147
+ /* @__PURE__ */ jsx("label", { htmlFor: "message", className: "text-sm font-medium", children: t("message") }),
148
+ /* @__PURE__ */ jsx(
149
+ Textarea,
150
+ {
151
+ id: "message",
152
+ name: "message",
153
+ required: true,
154
+ rows: 5,
155
+ className: "bg-background resize-none"
156
+ }
157
+ )
158
+ ] }),
159
+ /* @__PURE__ */ jsx(Button, { type: "submit", size: "lg", className: "gradient-button w-full", disabled: isSubmitting, children: isSubmitting ? t("sending") : t("sendButton") }),
160
+ /* @__PURE__ */ jsxs("p", { className: "text-sm text-muted-foreground text-center pt-2", children: [
161
+ t("orEmail"),
162
+ " ",
163
+ /* @__PURE__ */ jsx("a", { href: "mailto:info@collabdt.org", className: "text-primary hover:underline", children: "info@collabdt.org" })
164
+ ] })
165
+ ] })
166
+ ] }),
167
+ /* @__PURE__ */ jsxs("div", { className: "space-y-6", children: [
168
+ /* @__PURE__ */ jsxs(Card, { className: "p-6 hover-card", children: [
169
+ /* @__PURE__ */ jsx("h3", { className: "text-lg font-bold mb-3", children: t("contactInfoTitle") }),
170
+ /* @__PURE__ */ jsxs("div", { className: "space-y-4", children: [
171
+ /* @__PURE__ */ jsxs("div", { children: [
172
+ /* @__PURE__ */ jsx("p", { className: "text-sm text-muted-foreground mb-1", children: t("emailLabel") }),
150
173
  /* @__PURE__ */ jsx(
151
- Textarea,
174
+ "a",
152
175
  {
153
- id: "message",
154
- name: "message",
155
- required: true,
156
- rows: 5,
157
- className: "bg-background resize-none"
176
+ href: "mailto:info@collabdt.org",
177
+ className: "text-primary hover:underline font-medium text-sm",
178
+ children: "info@collabdt.org"
158
179
  }
159
180
  )
160
181
  ] }),
161
- /* @__PURE__ */ jsx(Button, { type: "submit", size: "lg", className: "gradient-button w-full", disabled: isSubmitting, children: isSubmitting ? t("sending") : t("sendButton") }),
162
- /* @__PURE__ */ jsxs("p", { className: "text-sm text-muted-foreground text-center pt-2", children: [
163
- t("orEmail"),
164
- " ",
165
- /* @__PURE__ */ jsx("a", { href: "mailto:info@collabdt.org", className: "text-primary hover:underline", children: "info@collabdt.org" })
182
+ /* @__PURE__ */ jsxs("div", { children: [
183
+ /* @__PURE__ */ jsx("p", { className: "text-sm text-muted-foreground mb-1", children: t("websiteLabel") }),
184
+ /* @__PURE__ */ jsx(
185
+ "a",
186
+ {
187
+ href: "https://collabdt.org",
188
+ target: "_blank",
189
+ rel: "noopener noreferrer",
190
+ className: "text-primary hover:underline font-medium text-sm",
191
+ children: "collabdt.org"
192
+ }
193
+ )
166
194
  ] })
167
195
  ] })
168
196
  ] }),
169
- /* @__PURE__ */ jsxs("div", { className: "space-y-6", children: [
170
- /* @__PURE__ */ jsxs(Card, { className: "p-6 hover-card", children: [
171
- /* @__PURE__ */ jsx("h3", { className: "text-lg font-bold mb-3", children: t("contactInfoTitle") }),
172
- /* @__PURE__ */ jsxs("div", { className: "space-y-4", children: [
173
- /* @__PURE__ */ jsxs("div", { children: [
174
- /* @__PURE__ */ jsx("p", { className: "text-sm text-muted-foreground mb-1", children: t("emailLabel") }),
175
- /* @__PURE__ */ jsx(
176
- "a",
177
- {
178
- href: "mailto:info@collabdt.org",
179
- className: "text-primary hover:underline font-medium text-sm",
180
- children: "info@collabdt.org"
181
- }
182
- )
183
- ] }),
184
- /* @__PURE__ */ jsxs("div", { children: [
185
- /* @__PURE__ */ jsx("p", { className: "text-sm text-muted-foreground mb-1", children: t("websiteLabel") }),
186
- /* @__PURE__ */ jsx(
187
- "a",
188
- {
189
- href: "https://collabdt.org",
190
- target: "_blank",
191
- rel: "noopener noreferrer",
192
- className: "text-primary hover:underline font-medium text-sm",
193
- children: "collabdt.org"
194
- }
195
- )
196
- ] })
197
- ] })
198
- ] }),
199
- /* @__PURE__ */ jsxs(Card, { className: "p-6 hover-card bg-primary/5 border-primary/20", children: [
200
- /* @__PURE__ */ jsx("h3", { className: "text-lg font-bold mb-3", children: t("needHelpTitle") }),
201
- /* @__PURE__ */ jsx("p", { className: "text-sm text-muted-foreground mb-4", children: t("needHelpDescription") })
202
- ] })
197
+ /* @__PURE__ */ jsxs(Card, { className: "p-6 hover-card bg-primary/5 border-primary/20", children: [
198
+ /* @__PURE__ */ jsx("h3", { className: "text-lg font-bold mb-3", children: t("needHelpTitle") }),
199
+ /* @__PURE__ */ jsx("p", { className: "text-sm text-muted-foreground mb-4", children: t("needHelpDescription") })
203
200
  ] })
204
201
  ] })
205
- ]
206
- }
207
- ) }) }),
208
- /* @__PURE__ */ jsx(Footer, {})
209
- ] });
202
+ ] })
203
+ ]
204
+ }
205
+ ) }) }) });
210
206
  }
211
207
  export {
212
208
  OrganizationNotFoundSection as default