diff --git a/README.md b/README.md index 2926b64..dbcb4b1 100644 --- a/README.md +++ b/README.md @@ -78,13 +78,15 @@ Afterwards go into the "Website"-folder from VS Code and open the terminal (of t # Settings in pipeline The pipeline expects a variable group called `DataModel`. It must have the following variables. The app user only requires the `Environment Maker` security role. +* AdoWikiName: Name of your wiki found under "Overview -> Wiki" in ADO. (will be encoded so dont worry about space) +* AdoWikiPagePath: Path to the introduction page you wish to show in DMV. (will also be encoded so dont worry about spaces) * AzureClientId: Client id for an Azure App Registration with access to the Dataverse Environment. * AzureClientSecret: Client Secret for the above. Remember to set its variable type to "Secret"! * AzureTenantId: Azure Tenant ID (where your App Regustration is placed and resource group will be placed). * AzureServiceConnectionName: Name of the Azure Resource Manager service connection created from ADO to Azure. * AzureLocation: Name of the location for the resource group in Azure (e.g. "westeurope" - not the display name which is "West Europe"). * AzureResourceGroupName: Name of the Resource Group in Azure. If this matches an existing group in the location above that will be used for the DMV resources, if not a new resource group will be created. -* DataverseUrl: URL for the Dataverse environment which the data model will be based on (e.g. "https://mySystem-dev.crm4.dynamics.com/". +* DataverseUrl: URL for the Dataverse environment which the data model will be based on (e.g. "https://mySystem-dev.crm4.dynamics.com/"). * DataverseSolutionNames: Comma-seperated list of solutions to based DMV on. Use the logical names (not display names). * WebsiteName: Used for the url of the web app presenting the data model to the user. The full URL will be in the format "https://wa-{WebsiteName}.azurewebsites.net/" and must be globally unique. * WebsitePassword: Password used by DMV users to login to the generated site. @@ -118,11 +120,20 @@ The `azure-pipelines-external.yml` file is a reusable Azure DevOps pipeline temp - Add a new "Azure Repos Git" pipeline in Azure DevOps and choose the `azure-pipelines-external.yml` file from your repository as the "Existing Azure Pipelines YAML file" to base the pipeline on. - Adjust the parameters in the YAML file as needed for your environment (usually only if you chose another name for the variable group than "Datamodel"). +> [!NOTE] +> YAML file contains two properties you may want to change: +> 1. Name of your ADO wiki repository +> 2. Name of your variable group + 4. **Pipeline Execution** - The first time the pipeline is run you will see a "This pipeline needs permission to access a resource..." click "View" and give it permission to access the variable group you have created. - The pipeline will clone the public DataModelViewer repository, build the application, and deploy it using the shared templates. - The pipeline is scheduled to run daily at 03:00 AM by default. You can adjust or remove the schedule as needed. You can of course also run the pipeline ad-hoc if you wish. +5. **Possible Additional Steps** + - The Build Service needs at least READ-access to the repo (check at: Project Settings > Repositories > 'wiki-repo' > Security) + - In the same location also add the pipeline to the "Pipeline permissions" (this will stop any permission prompts on pipeline runs) + ## Notes - The used Azure subscription must have "Microsoft.Web" registered as a "Resource provider" (namespace) otherwise the deploy will fail. diff --git a/Website/app/about/page.tsx b/Website/app/about/page.tsx index 7930170..7cf8725 100644 --- a/Website/app/about/page.tsx +++ b/Website/app/about/page.tsx @@ -1,12 +1,15 @@ import { AboutView } from '@/components/aboutview/AboutView'; -import { TouchProvider } from '@/components/ui/hybridtooltop'; -import { Loading } from '@/components/ui/loading'; +import { TouchProvider } from '@/components/shared/ui/hybridtooltop'; +import { Loading } from '@/components/shared/ui/loading'; +import { TooltipProvider } from '@/components/shared/ui/tooltip'; import React, { Suspense } from 'react' export default function About() { return }> - + + + } diff --git a/Website/app/api/markdown/route.ts b/Website/app/api/markdown/route.ts new file mode 100644 index 0000000..a0037a6 --- /dev/null +++ b/Website/app/api/markdown/route.ts @@ -0,0 +1,16 @@ +import { NextResponse } from 'next/server' +import { readFileSync } from "fs"; +import { join } from "path"; + +export async function GET() { + const generatedPath = join(process.cwd(), 'generated', 'Introduction.md'); + const stubsPath = join(process.cwd(), 'stubs', 'Introduction.md'); + let fileContent; + try { + fileContent = readFileSync(generatedPath, 'utf-8'); + } catch (error) { + fileContent = readFileSync(stubsPath, 'utf-8'); + console.error('Error reading generated wiki file, falling back to stubs:', error); + } + return NextResponse.json({ fileContent }) +} diff --git a/Website/app/diagram/page.tsx b/Website/app/diagram/page.tsx index a208404..f079359 100644 --- a/Website/app/diagram/page.tsx +++ b/Website/app/diagram/page.tsx @@ -1,14 +1,17 @@ "use client"; -import { TouchProvider } from "@/components/ui/hybridtooltop"; -import { Loading } from "@/components/ui/loading"; -import DiagramView from "@/components/diagram/DiagramView"; +import { TouchProvider } from "@/components/shared/ui/hybridtooltop"; +import { Loading } from "@/components/shared/ui/loading"; +import DiagramView from "@/components/diagramview/DiagramView"; import { Suspense } from "react"; +import { TooltipProvider } from "@/components/shared/ui/tooltip"; export default function Home() { return }> - + + + } \ No newline at end of file diff --git a/Website/app/login/page.tsx b/Website/app/login/page.tsx index 3c65678..c15bffa 100644 --- a/Website/app/login/page.tsx +++ b/Website/app/login/page.tsx @@ -1,7 +1,7 @@ 'use client'; -import { Button } from "@/components/ui/button"; -import { Input } from "@/components/ui/input"; +import { Button } from "@/components/shared/ui/button"; +import { Input } from "@/components/shared/ui/input"; import { createSession } from "@/lib/session"; import { useRouter } from "next/navigation"; import { FormEvent, useState, useEffect } from "react"; diff --git a/Website/app/metadata/page.tsx b/Website/app/metadata/page.tsx new file mode 100644 index 0000000..0c0b5b9 --- /dev/null +++ b/Website/app/metadata/page.tsx @@ -0,0 +1,18 @@ +import { DatamodelView } from "@/components/datamodelview/DatamodelView"; +import { TouchProvider } from "@/components/shared/ui/hybridtooltop"; +import { Loading } from "@/components/shared/ui/loading"; +import { TooltipProvider } from "@/components/shared/ui/tooltip"; +import { DatamodelDataProvider } from "@/contexts/DatamodelDataContext"; +import { Suspense } from "react"; + +export default function Data() { + return }> + + + + + + + + +} diff --git a/Website/app/page.tsx b/Website/app/page.tsx index dc292db..a52da11 100644 --- a/Website/app/page.tsx +++ b/Website/app/page.tsx @@ -1,15 +1,15 @@ -import { DatamodelView } from "@/components/datamodelview/DatamodelView"; -import { TouchProvider } from "@/components/ui/hybridtooltop"; -import { Loading } from "@/components/ui/loading"; -import { DatamodelDataProvider } from "@/contexts/DatamodelDataContext"; +import { HomeView } from "@/components/homeview/HomeView"; +import { TouchProvider } from "@/components/shared/ui/hybridtooltop"; +import { Loading } from "@/components/shared/ui/loading"; +import { TooltipProvider } from "@/components/shared/ui/tooltip"; import { Suspense } from "react"; -export default function Home() { +export default function Data() { return }> - - - + + + } diff --git a/Website/components/aboutview/AboutView.tsx b/Website/components/aboutview/AboutView.tsx index 1253637..c50c2fb 100644 --- a/Website/components/aboutview/AboutView.tsx +++ b/Website/components/aboutview/AboutView.tsx @@ -1,7 +1,7 @@ 'use client' import React, { useEffect, useState } from 'react' -import { AppSidebar } from '../AppSidebar' +import { AppSidebar } from '../shared/AppSidebar' import { useSidebarDispatch } from '@/contexts/SidebarContext' import { TooltipProvider } from '@radix-ui/react-tooltip' import { LastSynched } from '@/generated/Data' @@ -14,6 +14,7 @@ export const AboutView = ({}: IAboutViewProps) => { useEffect(() => { dispatch({ type: 'SET_ELEMENT', payload: <> }) + dispatch({ type: 'SET_SHOW_ELEMENT', payload: false }); fetch('/api/version') .then((res) => res.json()) .then((data) => setVersion(data.version)) diff --git a/Website/components/datamodelview/Attributes.tsx b/Website/components/datamodelview/Attributes.tsx index ea1e7c6..ef148a4 100644 --- a/Website/components/datamodelview/Attributes.tsx +++ b/Website/components/datamodelview/Attributes.tsx @@ -1,23 +1,23 @@ 'use client' import { EntityType, AttributeType } from "@/lib/Types" -import { TableHeader, TableRow, TableHead, TableBody, TableCell, Table } from "../ui/table" -import { Button } from "../ui/button" +import { TableHeader, TableRow, TableHead, TableBody, TableCell, Table } from "../shared/ui/table" +import { Button } from "../shared/ui/button" import { useState } from "react" import { ArrowUpDown, ArrowUp, ArrowDown, EyeOff, Eye, Search, X } from "lucide-react" -import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from "./../ui/select" -import { Input } from "../ui/input" +import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from "../shared/ui/select" +import { Input } from "../shared/ui/input" import { AttributeDetails } from "./entity/AttributeDetails" -import BooleanAttribute from "./../attributes/BooleanAttribute" -import ChoiceAttribute from "./../attributes/ChoiceAttribute" -import DateTimeAttribute from "./../attributes/DateTimeAttribute" -import DecimalAttribute from "./../attributes/DecimalAttribute" -import FileAttribute from "./../attributes/FileAttribute" -import GenericAttribute from "./../attributes/GenericAttribute" -import IntegerAttribute from "./../attributes/IntegerAttribute" -import LookupAttribute from "./../attributes/LookupAttribute" -import StatusAttribute from "./../attributes/StatusAttribute" -import StringAttribute from "./../attributes/StringAttribute" +import BooleanAttribute from "./attributes/BooleanAttribute" +import ChoiceAttribute from "./attributes/ChoiceAttribute" +import DateTimeAttribute from "./attributes/DateTimeAttribute" +import DecimalAttribute from "./attributes/DecimalAttribute" +import FileAttribute from "./attributes/FileAttribute" +import GenericAttribute from "./attributes/GenericAttribute" +import IntegerAttribute from "./attributes/IntegerAttribute" +import LookupAttribute from "./attributes/LookupAttribute" +import StatusAttribute from "./attributes/StatusAttribute" +import StringAttribute from "./attributes/StringAttribute" import React from "react" import { highlightMatch } from "../datamodelview/List"; diff --git a/Website/components/datamodelview/DatamodelView.tsx b/Website/components/datamodelview/DatamodelView.tsx index b921aee..afc8772 100644 --- a/Website/components/datamodelview/DatamodelView.tsx +++ b/Website/components/datamodelview/DatamodelView.tsx @@ -1,7 +1,7 @@ 'use client' -import { AppSidebar } from "../AppSidebar"; -import { TooltipProvider } from "../ui/tooltip"; +import { AppSidebar } from "../shared/AppSidebar"; +import { TooltipProvider } from "../shared/ui/tooltip"; import { useSidebarDispatch } from "@/contexts/SidebarContext"; import { SidebarDatamodelView } from "./SidebarDatamodelView"; import { DatamodelViewProvider, useDatamodelView, useDatamodelViewDispatch } from "@/contexts/DatamodelViewContext"; @@ -18,6 +18,7 @@ export function DatamodelView() { useEffect(() => { dispatch({ type: "SET_ELEMENT", payload: }); + dispatch({ type: 'SET_SHOW_ELEMENT', payload: true }); }, []); return ( diff --git a/Website/components/datamodelview/Keys.tsx b/Website/components/datamodelview/Keys.tsx index 610f494..440ae91 100644 --- a/Website/components/datamodelview/Keys.tsx +++ b/Website/components/datamodelview/Keys.tsx @@ -1,11 +1,11 @@ 'use client' import { EntityType } from "@/lib/Types" -import { TableHeader, TableRow, TableHead, TableBody, TableCell, Table } from "../ui/table" +import { TableHeader, TableRow, TableHead, TableBody, TableCell, Table } from "../shared/ui/table" import { useState } from "react" import { ArrowUpDown, ArrowUp, ArrowDown, Search, X } from "lucide-react" -import { Input } from "../ui/input" -import { Button } from "../ui/button" +import { Input } from "../shared/ui/input" +import { Button } from "../shared/ui/button" import React from "react" import { highlightMatch } from "../datamodelview/List"; diff --git a/Website/components/datamodelview/Relationships.tsx b/Website/components/datamodelview/Relationships.tsx index 887dd90..c209f9d 100644 --- a/Website/components/datamodelview/Relationships.tsx +++ b/Website/components/datamodelview/Relationships.tsx @@ -1,13 +1,13 @@ 'use client' import { EntityType } from "@/lib/Types" -import { TableHeader, TableRow, TableHead, TableBody, TableCell, Table } from "../ui/table" -import { Button } from "../ui/button" +import { TableHeader, TableRow, TableHead, TableBody, TableCell, Table } from "../shared/ui/table" +import { Button } from "../shared/ui/button" import { CascadeConfiguration } from "./entity/CascadeConfiguration" import { useState } from "react" import { ArrowUpDown, ArrowUp, ArrowDown, Search, X } from "lucide-react" -import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from "../ui/select" -import { Input } from "../ui/input" +import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from "../shared/ui/select" +import { Input } from "../shared/ui/input" import { useDatamodelView, useDatamodelViewDispatch } from "@/contexts/DatamodelViewContext" import React from "react" import { highlightMatch } from "../datamodelview/List"; diff --git a/Website/components/datamodelview/Section.tsx b/Website/components/datamodelview/Section.tsx index a7c274e..d9a811f 100644 --- a/Website/components/datamodelview/Section.tsx +++ b/Website/components/datamodelview/Section.tsx @@ -1,7 +1,7 @@ 'use client' import { EntityType, GroupType } from "@/lib/Types" -import { Tabs, TabsList, TabsTrigger, TabsContent } from "../ui/tabs" +import { Tabs, TabsList, TabsTrigger, TabsContent } from "../shared/ui/tabs" import { EntityHeader } from "./entity/EntityHeader" import { SecurityRoles } from "./entity/SecurityRoles" import Keys from "./Keys" diff --git a/Website/components/datamodelview/SidebarDatamodelView.tsx b/Website/components/datamodelview/SidebarDatamodelView.tsx index d8d98c1..981ac33 100644 --- a/Website/components/datamodelview/SidebarDatamodelView.tsx +++ b/Website/components/datamodelview/SidebarDatamodelView.tsx @@ -1,12 +1,12 @@ import { EntityType, GroupType } from "@/lib/Types"; -import { useTouch } from '../ui/hybridtooltop'; +import { useTouch } from '../shared/ui/hybridtooltop'; import { useSidebarDispatch } from '@/contexts/SidebarContext'; import { cn } from "@/lib/utils"; import { Collapsible, CollapsibleTrigger, CollapsibleContent } from "@radix-ui/react-collapsible"; import { Slot } from "@radix-ui/react-slot"; import { ExternalLink, Puzzle, Search, X } from "lucide-react"; import { useState, useEffect } from "react"; -import { Input } from "@/components/ui/input"; +import { Input } from "@/components/shared/ui/input"; import { useDatamodelView, useDatamodelViewDispatch } from "@/contexts/DatamodelViewContext"; import { useDatamodelData } from "@/contexts/DatamodelDataContext"; diff --git a/Website/components/datamodelview/TimeSlicedSearch.tsx b/Website/components/datamodelview/TimeSlicedSearch.tsx index 28b8b48..5caed02 100644 --- a/Website/components/datamodelview/TimeSlicedSearch.tsx +++ b/Website/components/datamodelview/TimeSlicedSearch.tsx @@ -2,7 +2,7 @@ import React, { useState, useRef, useCallback, useEffect } from 'react'; import { createPortal } from 'react-dom'; -import { Input } from '../ui/input'; +import { Input } from '../shared/ui/input'; import { Search, ChevronUp, ChevronDown, X } from 'lucide-react'; import { useSidebar } from '@/contexts/SidebarContext'; import { useIsMobile } from '@/hooks/use-mobile'; diff --git a/Website/components/attributes/BooleanAttribute.tsx b/Website/components/datamodelview/attributes/BooleanAttribute.tsx similarity index 100% rename from Website/components/attributes/BooleanAttribute.tsx rename to Website/components/datamodelview/attributes/BooleanAttribute.tsx diff --git a/Website/components/attributes/ChoiceAttribute.tsx b/Website/components/datamodelview/attributes/ChoiceAttribute.tsx similarity index 100% rename from Website/components/attributes/ChoiceAttribute.tsx rename to Website/components/datamodelview/attributes/ChoiceAttribute.tsx diff --git a/Website/components/attributes/DateTimeAttribute.tsx b/Website/components/datamodelview/attributes/DateTimeAttribute.tsx similarity index 100% rename from Website/components/attributes/DateTimeAttribute.tsx rename to Website/components/datamodelview/attributes/DateTimeAttribute.tsx diff --git a/Website/components/attributes/DecimalAttribute.tsx b/Website/components/datamodelview/attributes/DecimalAttribute.tsx similarity index 100% rename from Website/components/attributes/DecimalAttribute.tsx rename to Website/components/datamodelview/attributes/DecimalAttribute.tsx diff --git a/Website/components/attributes/FileAttribute.tsx b/Website/components/datamodelview/attributes/FileAttribute.tsx similarity index 100% rename from Website/components/attributes/FileAttribute.tsx rename to Website/components/datamodelview/attributes/FileAttribute.tsx diff --git a/Website/components/attributes/GenericAttribute.tsx b/Website/components/datamodelview/attributes/GenericAttribute.tsx similarity index 100% rename from Website/components/attributes/GenericAttribute.tsx rename to Website/components/datamodelview/attributes/GenericAttribute.tsx diff --git a/Website/components/attributes/IntegerAttribute.tsx b/Website/components/datamodelview/attributes/IntegerAttribute.tsx similarity index 100% rename from Website/components/attributes/IntegerAttribute.tsx rename to Website/components/datamodelview/attributes/IntegerAttribute.tsx diff --git a/Website/components/attributes/LookupAttribute.tsx b/Website/components/datamodelview/attributes/LookupAttribute.tsx similarity index 100% rename from Website/components/attributes/LookupAttribute.tsx rename to Website/components/datamodelview/attributes/LookupAttribute.tsx diff --git a/Website/components/attributes/StatusAttribute.tsx b/Website/components/datamodelview/attributes/StatusAttribute.tsx similarity index 100% rename from Website/components/attributes/StatusAttribute.tsx rename to Website/components/datamodelview/attributes/StatusAttribute.tsx diff --git a/Website/components/attributes/StringAttribute.tsx b/Website/components/datamodelview/attributes/StringAttribute.tsx similarity index 100% rename from Website/components/attributes/StringAttribute.tsx rename to Website/components/datamodelview/attributes/StringAttribute.tsx diff --git a/Website/components/datamodelview/entity/AttributeDetails.tsx b/Website/components/datamodelview/entity/AttributeDetails.tsx index cb282d7..93298fc 100644 --- a/Website/components/datamodelview/entity/AttributeDetails.tsx +++ b/Website/components/datamodelview/entity/AttributeDetails.tsx @@ -2,7 +2,7 @@ import { AttributeType, CalculationMethods, RequiredLevel } from "@/lib/Types"; import { Calculator, CircleAlert, CirclePlus, Eye, Lock, Sigma, Zap } from "lucide-react"; -import { HybridTooltip, HybridTooltipContent, HybridTooltipTrigger } from "../../ui/hybridtooltop"; +import { HybridTooltip, HybridTooltipContent, HybridTooltipTrigger } from "../../shared/ui/hybridtooltop"; export function AttributeDetails({ attribute }: { attribute: AttributeType }) { const details = []; diff --git a/Website/components/datamodelview/entity/EntityDetails.tsx b/Website/components/datamodelview/entity/EntityDetails.tsx index e7a0237..2d2a564 100644 --- a/Website/components/datamodelview/entity/EntityDetails.tsx +++ b/Website/components/datamodelview/entity/EntityDetails.tsx @@ -2,7 +2,7 @@ import { EntityType, OwnershipType } from "@/lib/Types"; import { Eye, ClipboardList, Paperclip, Building, Users } from "lucide-react"; -import { HybridTooltip, HybridTooltipContent, HybridTooltipTrigger } from "../../ui/hybridtooltop"; +import { HybridTooltip, HybridTooltipContent, HybridTooltipTrigger } from "../../shared/ui/hybridtooltop"; type EntityDetailType = { icon: JSX.Element; diff --git a/Website/components/datamodelview/entity/SecurityRoles.tsx b/Website/components/datamodelview/entity/SecurityRoles.tsx index ba1e98f..82b5632 100644 --- a/Website/components/datamodelview/entity/SecurityRoles.tsx +++ b/Website/components/datamodelview/entity/SecurityRoles.tsx @@ -2,7 +2,7 @@ import { SecurityRole, PrivilegeDepth } from "@/lib/Types"; import { Ban, User, Users, Boxes, Building2, Minus } from "lucide-react"; -import { HybridTooltip, HybridTooltipContent, HybridTooltipTrigger } from "../../ui/hybridtooltop"; +import { HybridTooltip, HybridTooltipContent, HybridTooltipTrigger } from "../../shared/ui/hybridtooltop"; export function SecurityRoles({ roles }: { roles: SecurityRole[] }) { return ( diff --git a/Website/components/diagram/DiagramCanvas.tsx b/Website/components/diagramview/DiagramCanvas.tsx similarity index 100% rename from Website/components/diagram/DiagramCanvas.tsx rename to Website/components/diagramview/DiagramCanvas.tsx diff --git a/Website/components/diagram/DiagramControls.tsx b/Website/components/diagramview/DiagramControls.tsx similarity index 95% rename from Website/components/diagram/DiagramControls.tsx rename to Website/components/diagramview/DiagramControls.tsx index d1ecd64..9ab53d1 100644 --- a/Website/components/diagram/DiagramControls.tsx +++ b/Website/components/diagramview/DiagramControls.tsx @@ -1,6 +1,6 @@ import React from 'react'; -import { Button } from '@/components/ui/button'; -import { Separator } from '@/components/ui/separator'; +import { Button } from '@/components/shared/ui/button'; +import { Separator } from '@/components/shared/ui/separator'; import { ZoomIn, ZoomOut, diff --git a/Website/components/diagram/DiagramRenderer.ts b/Website/components/diagramview/DiagramRenderer.ts similarity index 98% rename from Website/components/diagram/DiagramRenderer.ts rename to Website/components/diagramview/DiagramRenderer.ts index 63c7ded..785d072 100644 --- a/Website/components/diagram/DiagramRenderer.ts +++ b/Website/components/diagramview/DiagramRenderer.ts @@ -1,6 +1,6 @@ import { dia } from '@joint/core'; import { AttributeType, EntityType } from '@/lib/Types'; -import { EntityElement } from '@/components/diagram/elements/EntityElement'; +import { EntityElement } from '@/components/diagramview/elements/EntityElement'; export type IPortMap = Record; diff --git a/Website/components/diagram/DiagramResetButton.tsx b/Website/components/diagramview/DiagramResetButton.tsx similarity index 89% rename from Website/components/diagram/DiagramResetButton.tsx rename to Website/components/diagramview/DiagramResetButton.tsx index 477e68f..21ca7d4 100644 --- a/Website/components/diagram/DiagramResetButton.tsx +++ b/Website/components/diagramview/DiagramResetButton.tsx @@ -1,5 +1,5 @@ import React from 'react'; -import { Button } from '@/components/ui/button'; +import { Button } from '@/components/shared/ui/button'; import { RotateCcw } from 'lucide-react'; interface DiagramResetButtonProps { diff --git a/Website/components/diagram/DiagramView.tsx b/Website/components/diagramview/DiagramView.tsx similarity index 98% rename from Website/components/diagram/DiagramView.tsx rename to Website/components/diagramview/DiagramView.tsx index 8db9229..dd2c474 100644 --- a/Website/components/diagram/DiagramView.tsx +++ b/Website/components/diagramview/DiagramView.tsx @@ -3,17 +3,17 @@ import React, { useEffect, useMemo, useState, useCallback, useRef } from 'react' import { dia, util } from '@joint/core' import { Groups } from "../../generated/Data" -import { SquareElement } from '@/components/diagram/elements/SquareElement'; -import { TextElement } from '@/components/diagram/elements/TextElement'; -import { DiagramCanvas } from '@/components/diagram/DiagramCanvas'; -import { ZoomCoordinateIndicator } from '@/components/diagram/ZoomCoordinateIndicator'; -import { EntityActionsPane, LinkPropertiesPane, LinkProperties } from '@/components/diagram/panes'; +import { SquareElement } from '@/components/diagramview/elements/SquareElement'; +import { TextElement } from '@/components/diagramview/elements/TextElement'; +import { DiagramCanvas } from '@/components/diagramview/DiagramCanvas'; +import { ZoomCoordinateIndicator } from '@/components/diagramview/ZoomCoordinateIndicator'; +import { EntityActionsPane, LinkPropertiesPane, LinkProperties } from '@/components/diagramview/panes'; import { entityStyleManager } from '@/lib/entity-styling'; -import { SquarePropertiesPane } from '@/components/diagram/panes/SquarePropertiesPane'; -import { TextPropertiesPane } from '@/components/diagram/panes/TextPropertiesPane'; -import { calculateGridLayout, getDefaultLayoutOptions, calculateEntityHeight, estimateEntityDimensions } from '@/components/diagram/GridLayoutManager'; +import { SquarePropertiesPane } from '@/components/diagramview/panes/SquarePropertiesPane'; +import { TextPropertiesPane } from '@/components/diagramview/panes/TextPropertiesPane'; +import { calculateGridLayout, getDefaultLayoutOptions, calculateEntityHeight, estimateEntityDimensions } from '@/components/diagramview/GridLayoutManager'; import { AttributeType } from '@/lib/Types'; -import { AppSidebar } from '../AppSidebar'; +import { AppSidebar } from '../shared/AppSidebar'; import { DiagramViewProvider, useDiagramViewContext } from '@/contexts/DiagramViewContext'; import { SidebarDiagramView } from './SidebarDiagramView'; import { useSidebarDispatch } from '@/contexts/SidebarContext'; @@ -877,6 +877,7 @@ export default function DiagramView({ }: IDiagramView) { useEffect(() => { dispatch({ type: "SET_ELEMENT", payload: }) + dispatch({ type: 'SET_SHOW_ELEMENT', payload: true }); }, []) return ( diff --git a/Website/components/diagram/GridLayoutManager.ts b/Website/components/diagramview/GridLayoutManager.ts similarity index 98% rename from Website/components/diagram/GridLayoutManager.ts rename to Website/components/diagramview/GridLayoutManager.ts index b23e3e2..9b32c07 100644 --- a/Website/components/diagram/GridLayoutManager.ts +++ b/Website/components/diagramview/GridLayoutManager.ts @@ -1,5 +1,5 @@ import { EntityType } from '@/lib/Types'; -import { EntityElement } from '@/components/diagram/elements/EntityElement'; +import { EntityElement } from '@/components/diagramview/elements/EntityElement'; export type DiagramType = 'simple' | 'detailed'; diff --git a/Website/components/diagram/GroupSelector.tsx b/Website/components/diagramview/GroupSelector.tsx similarity index 95% rename from Website/components/diagram/GroupSelector.tsx rename to Website/components/diagramview/GroupSelector.tsx index 7ba4ba5..d49671a 100644 --- a/Website/components/diagram/GroupSelector.tsx +++ b/Website/components/diagramview/GroupSelector.tsx @@ -1,7 +1,7 @@ import React from 'react'; import { GroupType } from '@/lib/Types'; -import { Button } from '@/components/ui/button'; -import { Separator } from '@/components/ui/separator'; +import { Button } from '@/components/shared/ui/button'; +import { Separator } from '@/components/shared/ui/separator'; import { FolderOpen, Folder } from 'lucide-react'; import { cn } from '@/lib/utils'; diff --git a/Website/components/diagram/SidebarDiagramView.tsx b/Website/components/diagramview/SidebarDiagramView.tsx similarity index 98% rename from Website/components/diagram/SidebarDiagramView.tsx rename to Website/components/diagramview/SidebarDiagramView.tsx index 8405835..25c2a46 100644 --- a/Website/components/diagram/SidebarDiagramView.tsx +++ b/Website/components/diagramview/SidebarDiagramView.tsx @@ -1,10 +1,10 @@ import React, { useState } from 'react'; -import { Tabs, TabsContent, TabsList, TabsTrigger } from '@/components/ui/tabs'; -import { Collapsible, CollapsibleContent, CollapsibleTrigger } from '@/components/ui/collapsible'; -import { Button } from '@/components/ui/button'; +import { Tabs, TabsContent, TabsList, TabsTrigger } from '@/components/shared/ui/tabs'; +import { Collapsible, CollapsibleContent, CollapsibleTrigger } from '@/components/shared/ui/collapsible'; +import { Button } from '@/components/shared/ui/button'; import { ChevronDown, ChevronRight, Database, Square, Type, Settings, Hammer, Users, Save, Upload, Smartphone, RotateCcw, Trash2 } from 'lucide-react'; import { useDiagramViewContextSafe } from '@/contexts/DiagramViewContext'; -import { AddEntityPane, AddGroupPane, ResetToGroupPane } from '@/components/diagram/panes'; +import { AddEntityPane, AddGroupPane, ResetToGroupPane } from '@/components/diagramview/panes'; import { useIsMobile } from '@/hooks/use-mobile'; import { GroupType } from '@/lib/Types'; diff --git a/Website/components/diagram/ZoomCoordinateIndicator.tsx b/Website/components/diagramview/ZoomCoordinateIndicator.tsx similarity index 100% rename from Website/components/diagram/ZoomCoordinateIndicator.tsx rename to Website/components/diagramview/ZoomCoordinateIndicator.tsx diff --git a/Website/components/diagram/avoid-router/avoidrouter.ts b/Website/components/diagramview/avoid-router/avoidrouter.ts similarity index 100% rename from Website/components/diagram/avoid-router/avoidrouter.ts rename to Website/components/diagramview/avoid-router/avoidrouter.ts diff --git a/Website/components/diagram/elements/EntityAttribute.ts b/Website/components/diagramview/elements/EntityAttribute.ts similarity index 100% rename from Website/components/diagram/elements/EntityAttribute.ts rename to Website/components/diagramview/elements/EntityAttribute.ts diff --git a/Website/components/diagram/elements/EntityBody.ts b/Website/components/diagramview/elements/EntityBody.ts similarity index 100% rename from Website/components/diagram/elements/EntityBody.ts rename to Website/components/diagramview/elements/EntityBody.ts diff --git a/Website/components/diagram/elements/EntityElement.ts b/Website/components/diagramview/elements/EntityElement.ts similarity index 100% rename from Website/components/diagram/elements/EntityElement.ts rename to Website/components/diagramview/elements/EntityElement.ts diff --git a/Website/components/diagram/elements/SimpleEntityElement.ts b/Website/components/diagramview/elements/SimpleEntityElement.ts similarity index 100% rename from Website/components/diagram/elements/SimpleEntityElement.ts rename to Website/components/diagramview/elements/SimpleEntityElement.ts diff --git a/Website/components/diagram/elements/SquareElement.ts b/Website/components/diagramview/elements/SquareElement.ts similarity index 100% rename from Website/components/diagram/elements/SquareElement.ts rename to Website/components/diagramview/elements/SquareElement.ts diff --git a/Website/components/diagram/elements/SquareElementView.ts b/Website/components/diagramview/elements/SquareElementView.ts similarity index 100% rename from Website/components/diagram/elements/SquareElementView.ts rename to Website/components/diagramview/elements/SquareElementView.ts diff --git a/Website/components/diagram/elements/TextElement.ts b/Website/components/diagramview/elements/TextElement.ts similarity index 100% rename from Website/components/diagram/elements/TextElement.ts rename to Website/components/diagramview/elements/TextElement.ts diff --git a/Website/components/diagram/panes/AddAttributePane.tsx b/Website/components/diagramview/panes/AddAttributePane.tsx similarity index 96% rename from Website/components/diagram/panes/AddAttributePane.tsx rename to Website/components/diagramview/panes/AddAttributePane.tsx index c8fc130..6d45ffa 100644 --- a/Website/components/diagram/panes/AddAttributePane.tsx +++ b/Website/components/diagramview/panes/AddAttributePane.tsx @@ -8,12 +8,12 @@ import { SheetTitle, SheetDescription, SheetFooter -} from '@/components/ui/sheet'; -import { Button } from '@/components/ui/button'; -import { Input } from '@/components/ui/input'; -import { Label } from '@/components/ui/label'; -import { Card, CardContent } from '@/components/ui/card'; -import { Tooltip, TooltipContent, TooltipProvider, TooltipTrigger } from '@/components/ui/tooltip'; +} from '@/components/shared/ui/sheet'; +import { Button } from '@/components/shared/ui/button'; +import { Input } from '@/components/shared/ui/input'; +import { Label } from '@/components/shared/ui/label'; +import { Card, CardContent } from '@/components/shared/ui/card'; +import { Tooltip, TooltipContent, TooltipProvider, TooltipTrigger } from '@/components/shared/ui/tooltip'; import { Type, Calendar, diff --git a/Website/components/diagram/panes/AddEntityPane.tsx b/Website/components/diagramview/panes/AddEntityPane.tsx similarity index 98% rename from Website/components/diagram/panes/AddEntityPane.tsx rename to Website/components/diagramview/panes/AddEntityPane.tsx index c96e38d..1bfc258 100644 --- a/Website/components/diagram/panes/AddEntityPane.tsx +++ b/Website/components/diagramview/panes/AddEntityPane.tsx @@ -1,10 +1,10 @@ 'use client'; import React, { useState, useMemo } from 'react'; -import { Button } from '@/components/ui/button'; -import { Input } from '@/components/ui/input'; -import { Sheet, SheetContent, SheetHeader, SheetTitle } from '@/components/ui/sheet'; -import { Checkbox } from '@/components/ui/checkbox'; +import { Button } from '@/components/shared/ui/button'; +import { Input } from '@/components/shared/ui/input'; +import { Sheet, SheetContent, SheetHeader, SheetTitle } from '@/components/shared/ui/sheet'; +import { Checkbox } from '@/components/shared/ui/checkbox'; import { Search } from 'lucide-react'; import { Groups } from '@/generated/Data'; import { EntityType, GroupType, AttributeType } from '@/lib/Types'; diff --git a/Website/components/diagram/panes/AddGroupPane.tsx b/Website/components/diagramview/panes/AddGroupPane.tsx similarity index 98% rename from Website/components/diagram/panes/AddGroupPane.tsx rename to Website/components/diagramview/panes/AddGroupPane.tsx index 031c55d..de95608 100644 --- a/Website/components/diagram/panes/AddGroupPane.tsx +++ b/Website/components/diagramview/panes/AddGroupPane.tsx @@ -1,9 +1,9 @@ 'use client'; import React, { useState, useMemo } from 'react'; -import { Button } from '@/components/ui/button'; -import { Input } from '@/components/ui/input'; -import { Sheet, SheetContent, SheetHeader, SheetTitle } from '@/components/ui/sheet'; +import { Button } from '@/components/shared/ui/button'; +import { Input } from '@/components/shared/ui/input'; +import { Sheet, SheetContent, SheetHeader, SheetTitle } from '@/components/shared/ui/sheet'; import { Search, Database } from 'lucide-react'; import { Groups } from '@/generated/Data'; import { EntityType, GroupType } from '@/lib/Types'; diff --git a/Website/components/diagram/panes/AttributeSelectionPanel.tsx b/Website/components/diagramview/panes/AttributeSelectionPanel.tsx similarity index 96% rename from Website/components/diagram/panes/AttributeSelectionPanel.tsx rename to Website/components/diagramview/panes/AttributeSelectionPanel.tsx index d917981..cfcefca 100644 --- a/Website/components/diagram/panes/AttributeSelectionPanel.tsx +++ b/Website/components/diagramview/panes/AttributeSelectionPanel.tsx @@ -1,9 +1,9 @@ 'use client'; import React from 'react'; -import { Button } from '@/components/ui/button'; -import { Label } from '@/components/ui/label'; -import { Collapsible, CollapsibleContent, CollapsibleTrigger } from '@/components/ui/collapsible'; +import { Button } from '@/components/shared/ui/button'; +import { Label } from '@/components/shared/ui/label'; +import { Collapsible, CollapsibleContent, CollapsibleTrigger } from '@/components/shared/ui/collapsible'; import { ChevronDown, ChevronRight, Settings } from 'lucide-react'; import { AttributeSelectionMode } from '@/hooks/useAttributeSelection'; diff --git a/Website/components/diagram/panes/EntityActionsPane.tsx b/Website/components/diagramview/panes/EntityActionsPane.tsx similarity index 98% rename from Website/components/diagram/panes/EntityActionsPane.tsx rename to Website/components/diagramview/panes/EntityActionsPane.tsx index 532c5e8..d4e974e 100644 --- a/Website/components/diagram/panes/EntityActionsPane.tsx +++ b/Website/components/diagramview/panes/EntityActionsPane.tsx @@ -1,11 +1,11 @@ 'use client'; import React, { useState } from 'react'; -import { Button } from '@/components/ui/button'; -import { Input } from '@/components/ui/input'; -import { Sheet, SheetContent, SheetHeader, SheetTitle } from '@/components/ui/sheet'; -import { Collapsible, CollapsibleContent, CollapsibleTrigger } from '@/components/ui/collapsible'; -import { Tooltip, TooltipContent, TooltipProvider, TooltipTrigger } from '@/components/ui/tooltip'; +import { Button } from '@/components/shared/ui/button'; +import { Input } from '@/components/shared/ui/input'; +import { Sheet, SheetContent, SheetHeader, SheetTitle } from '@/components/shared/ui/sheet'; +import { Collapsible, CollapsibleContent, CollapsibleTrigger } from '@/components/shared/ui/collapsible'; +import { Tooltip, TooltipContent, TooltipProvider, TooltipTrigger } from '@/components/shared/ui/tooltip'; import { Trash2, Plus, diff --git a/Website/components/diagram/panes/LinkPropertiesPane.tsx b/Website/components/diagramview/panes/LinkPropertiesPane.tsx similarity index 96% rename from Website/components/diagram/panes/LinkPropertiesPane.tsx rename to Website/components/diagramview/panes/LinkPropertiesPane.tsx index 06cbff3..1fd94c6 100644 --- a/Website/components/diagram/panes/LinkPropertiesPane.tsx +++ b/Website/components/diagramview/panes/LinkPropertiesPane.tsx @@ -1,12 +1,12 @@ 'use client'; import React, { useState, useEffect } from 'react'; -import { Sheet, SheetContent, SheetDescription, SheetHeader, SheetTitle } from '@/components/ui/sheet'; -import { Button } from '@/components/ui/button'; -import { Input } from '@/components/ui/input'; -import { Label } from '@/components/ui/label'; -import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from '@/components/ui/select'; -import { Separator } from '@/components/ui/separator'; +import { Sheet, SheetContent, SheetDescription, SheetHeader, SheetTitle } from '@/components/shared/ui/sheet'; +import { Button } from '@/components/shared/ui/button'; +import { Input } from '@/components/shared/ui/input'; +import { Label } from '@/components/shared/ui/label'; +import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from '@/components/shared/ui/select'; +import { Separator } from '@/components/shared/ui/separator'; import { dia } from '@joint/core'; import { PRESET_COLORS, LINE_STYLES, STROKE_WIDTHS } from '../shared/DiagramConstants'; diff --git a/Website/components/diagram/panes/ResetToGroupPane.tsx b/Website/components/diagramview/panes/ResetToGroupPane.tsx similarity index 95% rename from Website/components/diagram/panes/ResetToGroupPane.tsx rename to Website/components/diagramview/panes/ResetToGroupPane.tsx index 968a00d..e996f18 100644 --- a/Website/components/diagram/panes/ResetToGroupPane.tsx +++ b/Website/components/diagramview/panes/ResetToGroupPane.tsx @@ -5,16 +5,16 @@ import { SheetDescription, SheetHeader, SheetTitle, -} from "@/components/ui/sheet"; +} from "@/components/shared/ui/sheet"; import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue, -} from "@/components/ui/select"; -import { Label } from "@/components/ui/label"; -import { Button } from '@/components/ui/button'; +} from "@/components/shared/ui/select"; +import { Label } from "@/components/shared/ui/label"; +import { Button } from '@/components/shared/ui/button'; import { RotateCcw } from 'lucide-react'; import { Groups } from '../../../generated/Data'; import { GroupType } from '@/lib/Types'; diff --git a/Website/components/diagram/panes/SquarePropertiesPane.tsx b/Website/components/diagramview/panes/SquarePropertiesPane.tsx similarity index 97% rename from Website/components/diagram/panes/SquarePropertiesPane.tsx rename to Website/components/diagramview/panes/SquarePropertiesPane.tsx index 77e7b06..9d30ded 100644 --- a/Website/components/diagram/panes/SquarePropertiesPane.tsx +++ b/Website/components/diagramview/panes/SquarePropertiesPane.tsx @@ -1,10 +1,10 @@ import React, { useState, useEffect } from 'react'; -import { Sheet, SheetContent, SheetHeader, SheetTitle } from '@/components/ui/sheet'; -import { Button } from '@/components/ui/button'; -import { Input } from '@/components/ui/input'; -import { Label } from '@/components/ui/label'; -import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from '@/components/ui/select'; -import { Separator } from '@/components/ui/separator'; +import { Sheet, SheetContent, SheetHeader, SheetTitle } from '@/components/shared/ui/sheet'; +import { Button } from '@/components/shared/ui/button'; +import { Input } from '@/components/shared/ui/input'; +import { Label } from '@/components/shared/ui/label'; +import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from '@/components/shared/ui/select'; +import { Separator } from '@/components/shared/ui/separator'; import { Square, Trash2 } from 'lucide-react'; import { SquareElement, SquareElementData } from '../elements/SquareElement'; import { PRESET_COLORS } from '../shared/DiagramConstants'; diff --git a/Website/components/diagram/panes/TextPropertiesPane.tsx b/Website/components/diagramview/panes/TextPropertiesPane.tsx similarity index 97% rename from Website/components/diagram/panes/TextPropertiesPane.tsx rename to Website/components/diagramview/panes/TextPropertiesPane.tsx index 7a06df3..8b5613b 100644 --- a/Website/components/diagram/panes/TextPropertiesPane.tsx +++ b/Website/components/diagramview/panes/TextPropertiesPane.tsx @@ -1,10 +1,10 @@ import React, { useState, useEffect } from 'react'; -import { Sheet, SheetContent, SheetHeader, SheetTitle } from '@/components/ui/sheet'; -import { Button } from '@/components/ui/button'; -import { Input } from '@/components/ui/input'; -import { Label } from '@/components/ui/label'; -import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from '@/components/ui/select'; -import { Separator } from '@/components/ui/separator'; +import { Sheet, SheetContent, SheetHeader, SheetTitle } from '@/components/shared/ui/sheet'; +import { Button } from '@/components/shared/ui/button'; +import { Input } from '@/components/shared/ui/input'; +import { Label } from '@/components/shared/ui/label'; +import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from '@/components/shared/ui/select'; +import { Separator } from '@/components/shared/ui/separator'; import { Type, Trash2 } from 'lucide-react'; import { TextElement, TextElementData } from '../elements/TextElement'; diff --git a/Website/components/diagram/panes/index.ts b/Website/components/diagramview/panes/index.ts similarity index 100% rename from Website/components/diagram/panes/index.ts rename to Website/components/diagramview/panes/index.ts diff --git a/Website/components/diagram/renderers/DetailedDiagramRender.ts b/Website/components/diagramview/renderers/DetailedDiagramRender.ts similarity index 100% rename from Website/components/diagram/renderers/DetailedDiagramRender.ts rename to Website/components/diagramview/renderers/DetailedDiagramRender.ts diff --git a/Website/components/diagram/renderers/SimpleDiagramRender.ts b/Website/components/diagramview/renderers/SimpleDiagramRender.ts similarity index 98% rename from Website/components/diagram/renderers/SimpleDiagramRender.ts rename to Website/components/diagramview/renderers/SimpleDiagramRender.ts index f391085..f3dd680 100644 --- a/Website/components/diagram/renderers/SimpleDiagramRender.ts +++ b/Website/components/diagramview/renderers/SimpleDiagramRender.ts @@ -1,6 +1,6 @@ // SimpleDiagramRenderer.ts import { dia, shapes } from '@joint/core'; -import { SimpleEntityElement } from '@/components/diagram/elements/SimpleEntityElement'; +import { SimpleEntityElement } from '@/components/diagramview/elements/SimpleEntityElement'; import { DiagramRenderer, IPortMap } from '../DiagramRenderer'; import { AttributeType, EntityType } from '@/lib/Types'; diff --git a/Website/components/diagram/shared/DiagramConstants.ts b/Website/components/diagramview/shared/DiagramConstants.ts similarity index 100% rename from Website/components/diagram/shared/DiagramConstants.ts rename to Website/components/diagramview/shared/DiagramConstants.ts diff --git a/Website/components/homeview/HomeView.tsx b/Website/components/homeview/HomeView.tsx new file mode 100644 index 0000000..19e4385 --- /dev/null +++ b/Website/components/homeview/HomeView.tsx @@ -0,0 +1,52 @@ +'use client' + +import { useEffect, useState } from 'react'; +import { AppSidebar } from '../shared/AppSidebar' +import { useSidebarDispatch } from '@/contexts/SidebarContext' +import Markdown from 'react-markdown' + +interface IHomeViewProps { } + +export const HomeView = ({ }: IHomeViewProps) => { + + const dispatch = useSidebarDispatch(); + + const [wikipage, setWikipage] = useState(''); + + useEffect(() => { + dispatch({ type: 'SET_ELEMENT', payload: <> }); + dispatch({ type: 'SET_SHOW_ELEMENT', payload: false }); + fetch('/api/markdown') + .then(res => res.json()) + .then(data => setWikipage(data.fileContent.replace(/\\n/g, '\n'))); + }, []); + + return ( +
+ + +
+
+

Welcome back to your datamodel!

+
+
+ {/* Add loading state */} + {wikipage ? ( +

, + h2: ({ ...props }) =>

, + h3: ({ ...props }) =>

, + h4: ({ ...props }) =>

, + p: ({ ...props }) =>

, + a: ({ ...props }) => , + li: ({ ...props }) =>

  • , + span: ({ ...props }) => , + }}>{wikipage} + ) : ( +
    Loading wiki...
    + )} +
  • +
    +
    + ) +} diff --git a/Website/components/AppSidebar.tsx b/Website/components/shared/AppSidebar.tsx similarity index 100% rename from Website/components/AppSidebar.tsx rename to Website/components/shared/AppSidebar.tsx diff --git a/Website/components/SidebarNavRail.tsx b/Website/components/shared/SidebarNavRail.tsx similarity index 58% rename from Website/components/SidebarNavRail.tsx rename to Website/components/shared/SidebarNavRail.tsx index 01344bb..c6125a2 100644 --- a/Website/components/SidebarNavRail.tsx +++ b/Website/components/shared/SidebarNavRail.tsx @@ -1,30 +1,48 @@ import React from "react"; import { useRouter, usePathname } from "next/navigation"; -import { LogOut, Info, Database, PencilRuler, PlugZap, Sparkles } from "lucide-react"; -import { Button } from "@/components/ui/button"; +import { LogOut, Info, Database, PencilRuler, PlugZap, Sparkles, Home, ChartPie } from "lucide-react"; +import { Button } from "@/components/shared/ui/button"; import { useSidebarDispatch } from "@/contexts/SidebarContext"; +import { Tooltip, TooltipContent } from "./ui/tooltip"; +import { TooltipTrigger } from "@radix-ui/react-tooltip"; const navItems = [ { - label: "Metadata Viewer", - icon: , + label: "Home", + icon: , href: "/", active: true, disabled: false, + new: true, + }, + { + label: "Insight viewer", + icon: , + href: "/insight", + active: false, + disabled: true, + new: false, + }, + { + label: "Metadata viewer", + icon: , + href: "/metadata", + active: false, + disabled: false, new: false, }, { - label: "Diagram Viewer", + label: "Diagram viewer", icon: , href: "/diagram", active: false, disabled: false, - new: true, + new: false, }, { - label: "Dependency Viewer", + label: "Process viewer", icon: , - href: "/dependency", + href: "/process", active: false, disabled: true, new: false, @@ -46,18 +64,25 @@ export default function SidebarNavRail() {
    {navItems.map((item) => (
    - + + +

    {item.label}

    +
    + + + +
    {item.new && (
    diff --git a/Website/components/ui/button.tsx b/Website/components/shared/ui/button.tsx similarity index 100% rename from Website/components/ui/button.tsx rename to Website/components/shared/ui/button.tsx diff --git a/Website/components/ui/card.tsx b/Website/components/shared/ui/card.tsx similarity index 100% rename from Website/components/ui/card.tsx rename to Website/components/shared/ui/card.tsx diff --git a/Website/components/ui/checkbox.tsx b/Website/components/shared/ui/checkbox.tsx similarity index 100% rename from Website/components/ui/checkbox.tsx rename to Website/components/shared/ui/checkbox.tsx diff --git a/Website/components/ui/collapsible.tsx b/Website/components/shared/ui/collapsible.tsx similarity index 100% rename from Website/components/ui/collapsible.tsx rename to Website/components/shared/ui/collapsible.tsx diff --git a/Website/components/ui/hybridtooltop.tsx b/Website/components/shared/ui/hybridtooltop.tsx similarity index 100% rename from Website/components/ui/hybridtooltop.tsx rename to Website/components/shared/ui/hybridtooltop.tsx diff --git a/Website/components/ui/input.tsx b/Website/components/shared/ui/input.tsx similarity index 100% rename from Website/components/ui/input.tsx rename to Website/components/shared/ui/input.tsx diff --git a/Website/components/ui/label.tsx b/Website/components/shared/ui/label.tsx similarity index 100% rename from Website/components/ui/label.tsx rename to Website/components/shared/ui/label.tsx diff --git a/Website/components/ui/loading.tsx b/Website/components/shared/ui/loading.tsx similarity index 100% rename from Website/components/ui/loading.tsx rename to Website/components/shared/ui/loading.tsx diff --git a/Website/components/ui/popover.tsx b/Website/components/shared/ui/popover.tsx similarity index 100% rename from Website/components/ui/popover.tsx rename to Website/components/shared/ui/popover.tsx diff --git a/Website/components/ui/select.tsx b/Website/components/shared/ui/select.tsx similarity index 100% rename from Website/components/ui/select.tsx rename to Website/components/shared/ui/select.tsx diff --git a/Website/components/ui/separator.tsx b/Website/components/shared/ui/separator.tsx similarity index 100% rename from Website/components/ui/separator.tsx rename to Website/components/shared/ui/separator.tsx diff --git a/Website/components/ui/sheet.tsx b/Website/components/shared/ui/sheet.tsx similarity index 100% rename from Website/components/ui/sheet.tsx rename to Website/components/shared/ui/sheet.tsx diff --git a/Website/components/ui/skeleton.tsx b/Website/components/shared/ui/skeleton.tsx similarity index 100% rename from Website/components/ui/skeleton.tsx rename to Website/components/shared/ui/skeleton.tsx diff --git a/Website/components/ui/table.tsx b/Website/components/shared/ui/table.tsx similarity index 100% rename from Website/components/ui/table.tsx rename to Website/components/shared/ui/table.tsx diff --git a/Website/components/ui/tabs.tsx b/Website/components/shared/ui/tabs.tsx similarity index 100% rename from Website/components/ui/tabs.tsx rename to Website/components/shared/ui/tabs.tsx diff --git a/Website/components/ui/tooltip.tsx b/Website/components/shared/ui/tooltip.tsx similarity index 100% rename from Website/components/ui/tooltip.tsx rename to Website/components/shared/ui/tooltip.tsx diff --git a/Website/hooks/useDiagram.ts b/Website/hooks/useDiagram.ts index 4388dab..c6cb581 100644 --- a/Website/hooks/useDiagram.ts +++ b/Website/hooks/useDiagram.ts @@ -1,14 +1,12 @@ import { useRef, useState, useCallback, useEffect } from 'react'; import { dia, routers, shapes } from '@joint/core'; import { GroupType, EntityType, AttributeType } from '@/lib/Types'; -import { SquareElement } from '@/components/diagram/elements/SquareElement'; -import { SquareElementView } from '@/components/diagram/elements/SquareElementView'; -import { TextElement } from '@/components/diagram/elements/TextElement'; -import { AvoidRouter } from '@/components/diagram/avoid-router/avoidrouter'; -import { DiagramRenderer } from '@/components/diagram/DiagramRenderer'; -import { SimpleDiagramRenderer } from '@/components/diagram/renderers/SimpleDiagramRender'; -import { DetailedDiagramRender } from '@/components/diagram/renderers/DetailedDiagramRender'; -import { PRESET_COLORS } from '@/components/diagram/shared/DiagramConstants'; +import { SquareElement } from '@/components/diagramview/elements/SquareElement'; +import { SquareElementView } from '@/components/diagramview/elements/SquareElementView'; +import { TextElement } from '@/components/diagramview/elements/TextElement'; +import { AvoidRouter } from '@/components/diagramview/avoid-router/avoidrouter'; +import { DiagramRenderer } from '@/components/diagramview/DiagramRenderer'; +import { PRESET_COLORS } from '@/components/diagramview/shared/DiagramConstants'; import { entityStyleManager } from '@/lib/entity-styling'; export type DiagramType = 'simple' | 'detailed'; diff --git a/Website/package-lock.json b/Website/package-lock.json index b6470b6..32929a4 100644 --- a/Website/package-lock.json +++ b/Website/package-lock.json @@ -29,6 +29,7 @@ "next": "^15.3.4", "react": "^19.0.0", "react-dom": "^19.0.0", + "react-markdown": "^10.1.0", "react-window": "^1.8.11", "tailwind-merge": "^2.5.5", "tailwindcss-animate": "^1.0.7" @@ -3294,6 +3295,39 @@ "url": "https://github.com/sponsors/tannerlinsley" } }, + "node_modules/@types/debug": { + "version": "4.1.12", + "resolved": "https://registry.npmjs.org/@types/debug/-/debug-4.1.12.tgz", + "integrity": "sha512-vIChWdVG3LG1SMxEvI/AK+FWJthlrqlTu7fbrlywTkkaONwk/UAGaULXRlf8vkzFBLVm0zkMdCquhL5aOjhXPQ==", + "license": "MIT", + "dependencies": { + "@types/ms": "*" + } + }, + "node_modules/@types/estree": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.8.tgz", + "integrity": "sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==", + "license": "MIT" + }, + "node_modules/@types/estree-jsx": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/@types/estree-jsx/-/estree-jsx-1.0.5.tgz", + "integrity": "sha512-52CcUVNFyfb1A2ALocQw/Dd1BQFNmSdkuC3BkZ6iqhdMfQz7JWOFRuJFloOzjk+6WijU56m9oKXFAXc7o3Towg==", + "license": "MIT", + "dependencies": { + "@types/estree": "*" + } + }, + "node_modules/@types/hast": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@types/hast/-/hast-3.0.4.tgz", + "integrity": "sha512-WPs+bbQw5aCj+x6laNGWLH3wviHtoCv/P3+otBhbOhJgG8qtpdAMlTCxLtsTWA7LH1Oh/bFCHsBn0TPS5m30EQ==", + "license": "MIT", + "dependencies": { + "@types/unist": "*" + } + }, "node_modules/@types/json5": { "version": "0.0.29", "resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz", @@ -3307,6 +3341,21 @@ "dev": true, "license": "MIT" }, + "node_modules/@types/mdast": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-4.0.4.tgz", + "integrity": "sha512-kGaNbPh1k7AFzgpud/gMdvIm5xuECykRR+JnWKQno9TAXVa6WIVCGTPvYGekIDL4uwCZQSYbUxNBSb1aUo79oA==", + "license": "MIT", + "dependencies": { + "@types/unist": "*" + } + }, + "node_modules/@types/ms": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@types/ms/-/ms-2.1.0.tgz", + "integrity": "sha512-GsCCIZDE/p3i96vtEqx+7dBUGXrc7zeSK3wwPHIaRThS+9OhWIXRqzs4d6k1SVU8g91DrNRWxWUGhp5KXQb2VA==", + "license": "MIT" + }, "node_modules/@types/node": { "version": "20.17.9", "resolved": "https://registry.npmjs.org/@types/node/-/node-20.17.9.tgz", @@ -3319,14 +3368,12 @@ "node_modules/@types/prop-types": { "version": "15.7.13", "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.13.tgz", - "integrity": "sha512-hCZTSvwbzWGvhqxp/RqVqwU999pBf2vp7hzIjiYOsl8wqOmUxkQ6ddw1cV3l8811+kdUFus/q4d1Y3E3SyEifA==", - "devOptional": true + "integrity": "sha512-hCZTSvwbzWGvhqxp/RqVqwU999pBf2vp7hzIjiYOsl8wqOmUxkQ6ddw1cV3l8811+kdUFus/q4d1Y3E3SyEifA==" }, "node_modules/@types/react": { "version": "18.3.12", "resolved": "https://registry.npmjs.org/@types/react/-/react-18.3.12.tgz", "integrity": "sha512-D2wOSq/d6Agt28q7rSI3jhU7G6aiuzljDGZ2hTZHIkrTLUI+AF3WMeKkEZ9nN2fkBAlcktT6vcZjDFiIhMYEQw==", - "devOptional": true, "dependencies": { "@types/prop-types": "*", "csstype": "^3.0.2" @@ -3351,6 +3398,12 @@ "@types/react": "*" } }, + "node_modules/@types/unist": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.3.tgz", + "integrity": "sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q==", + "license": "MIT" + }, "node_modules/@typescript-eslint/eslint-plugin": { "version": "8.16.0", "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.16.0.tgz", @@ -3608,8 +3661,7 @@ "node_modules/@ungap/structured-clone": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.2.0.tgz", - "integrity": "sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==", - "dev": true + "integrity": "sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==" }, "node_modules/acorn": { "version": "8.14.0", @@ -3907,6 +3959,16 @@ "node": ">= 0.4" } }, + "node_modules/bail": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/bail/-/bail-2.0.2.tgz", + "integrity": "sha512-0xO6mYd7JB2YesxDKplafRpsiOzPt9V02ddPCLbY1xYGPOX24NTyN50qnUxgCPcSoYMhKpAuBTjQoRZCAkUDRw==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, "node_modules/balanced-match": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", @@ -4010,6 +4072,16 @@ } ] }, + "node_modules/ccount": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/ccount/-/ccount-2.0.1.tgz", + "integrity": "sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, "node_modules/chalk": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", @@ -4026,6 +4098,46 @@ "url": "https://github.com/chalk/chalk?sponsor=1" } }, + "node_modules/character-entities": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/character-entities/-/character-entities-2.0.2.tgz", + "integrity": "sha512-shx7oQ0Awen/BRIdkjkvz54PnEEI/EjwXDSIZp86/KKdbafHh1Df/RYGBhn4hbe2+uKC9FnT5UCEdyPz3ai9hQ==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/character-entities-html4": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/character-entities-html4/-/character-entities-html4-2.1.0.tgz", + "integrity": "sha512-1v7fgQRj6hnSwFpq1Eu0ynr/CDEw0rXo2B61qXrLNdHZmPKgb7fqS1a2JwF0rISo9q77jDI8VMEHoApn8qDoZA==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/character-entities-legacy": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/character-entities-legacy/-/character-entities-legacy-3.0.0.tgz", + "integrity": "sha512-RpPp0asT/6ufRm//AJVwpViZbGM/MkjQFxJccQRHmISF/22NBtsHqAWmL+/pmkPWoIUJdWyeVleTl1wydHATVQ==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/character-reference-invalid": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/character-reference-invalid/-/character-reference-invalid-2.0.1.tgz", + "integrity": "sha512-iBZ4F4wRbyORVsu0jPV7gXkOsGYjGHPmAyv+HiHG8gi5PtC9KI2j1+v8/tlibRvjoWX027ypmG/n0HtO5t7unw==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, "node_modules/chokidar": { "version": "3.6.0", "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz", @@ -4125,6 +4237,16 @@ "simple-swizzle": "^0.2.2" } }, + "node_modules/comma-separated-tokens": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/comma-separated-tokens/-/comma-separated-tokens-2.0.3.tgz", + "integrity": "sha512-Fu4hJdvzeylCfQPp9SGWidpzrMs7tTrlu6Vb8XGaRGck8QSNZJJp538Wrb60Lax4fPwR64ViY468OIUTbRlGZg==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, "node_modules/commander": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz", @@ -4166,8 +4288,7 @@ "node_modules/csstype": { "version": "3.1.3", "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.3.tgz", - "integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==", - "devOptional": true + "integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==" }, "node_modules/damerau-levenshtein": { "version": "1.0.8", @@ -4230,7 +4351,6 @@ "version": "4.3.7", "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.7.tgz", "integrity": "sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==", - "dev": true, "dependencies": { "ms": "^2.1.3" }, @@ -4243,6 +4363,19 @@ } } }, + "node_modules/decode-named-character-reference": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/decode-named-character-reference/-/decode-named-character-reference-1.2.0.tgz", + "integrity": "sha512-c6fcElNV6ShtZXmsgNgFFV5tVX2PaV4g+MOAkb8eXHvn6sryJBrZa9r0zV6+dtTyoCKxtDy5tyQ5ZwQuidtd+Q==", + "license": "MIT", + "dependencies": { + "character-entities": "^2.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, "node_modules/deep-is": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", @@ -4283,6 +4416,15 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/dequal": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/dequal/-/dequal-2.0.3.tgz", + "integrity": "sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, "node_modules/detect-libc": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.0.4.tgz", @@ -4298,6 +4440,19 @@ "resolved": "https://registry.npmjs.org/detect-node-es/-/detect-node-es-1.1.0.tgz", "integrity": "sha512-ypdmJU/TbBby2Dxibuv7ZLW3Bs1QEmM7nHjEANfohJLvE0XVujisn1qPJcZxg+qDucsr+bP6fLD1rPS3AhJ7EQ==" }, + "node_modules/devlop": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/devlop/-/devlop-1.1.0.tgz", + "integrity": "sha512-RWmIqhcFf1lRYBvNmr7qTNuyCt/7/ns2jbpp1+PalgE/rDQcBT0fioSMUpJ93irlUhC5hrg4cYqe6U+0ImW0rA==", + "license": "MIT", + "dependencies": { + "dequal": "^2.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, "node_modules/didyoumean": { "version": "1.2.2", "resolved": "https://registry.npmjs.org/didyoumean/-/didyoumean-1.2.2.tgz", @@ -4958,6 +5113,16 @@ "node": ">=4.0" } }, + "node_modules/estree-util-is-identifier-name": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/estree-util-is-identifier-name/-/estree-util-is-identifier-name-3.0.0.tgz", + "integrity": "sha512-hFtqIDZTIUZ9BXLb8y4pYGyk6+wekIivNVTcmvk8NoOh+VeRn5y6cEHzbURrWbfp1fIqdVipilzj+lfaadNZmg==", + "license": "MIT", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, "node_modules/esutils": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", @@ -4967,6 +5132,12 @@ "node": ">=0.10.0" } }, + "node_modules/extend": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", + "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", + "license": "MIT" + }, "node_modules/fast-deep-equal": { "version": "3.1.3", "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", @@ -5387,6 +5558,56 @@ "node": ">= 0.4" } }, + "node_modules/hast-util-to-jsx-runtime": { + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/hast-util-to-jsx-runtime/-/hast-util-to-jsx-runtime-2.3.6.tgz", + "integrity": "sha512-zl6s8LwNyo1P9uw+XJGvZtdFF1GdAkOg8ujOw+4Pyb76874fLps4ueHXDhXWdk6YHQ6OgUtinliG7RsYvCbbBg==", + "license": "MIT", + "dependencies": { + "@types/estree": "^1.0.0", + "@types/hast": "^3.0.0", + "@types/unist": "^3.0.0", + "comma-separated-tokens": "^2.0.0", + "devlop": "^1.0.0", + "estree-util-is-identifier-name": "^3.0.0", + "hast-util-whitespace": "^3.0.0", + "mdast-util-mdx-expression": "^2.0.0", + "mdast-util-mdx-jsx": "^3.0.0", + "mdast-util-mdxjs-esm": "^2.0.0", + "property-information": "^7.0.0", + "space-separated-tokens": "^2.0.0", + "style-to-js": "^1.0.0", + "unist-util-position": "^5.0.0", + "vfile-message": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/hast-util-whitespace": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/hast-util-whitespace/-/hast-util-whitespace-3.0.0.tgz", + "integrity": "sha512-88JUN06ipLwsnv+dVn+OIYOvAuvBMy/Qoi6O7mQHxdPXpjy+Cd6xRkWwux7DKO+4sYILtLBRIKgsdpS2gQc7qw==", + "license": "MIT", + "dependencies": { + "@types/hast": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/html-url-attributes": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/html-url-attributes/-/html-url-attributes-3.0.1.tgz", + "integrity": "sha512-ol6UPyBWqsrO6EJySPz2O7ZSr856WDrEzM5zMqp+FJJLGMW35cLYmmZnl0vztAZxRUoNZJFTCohfjuIJ8I4QBQ==", + "license": "MIT", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, "node_modules/ignore": { "version": "5.3.2", "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz", @@ -5438,6 +5659,12 @@ "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", "dev": true }, + "node_modules/inline-style-parser": { + "version": "0.2.4", + "resolved": "https://registry.npmjs.org/inline-style-parser/-/inline-style-parser-0.2.4.tgz", + "integrity": "sha512-0aO8FkhNZlj/ZIbNi7Lxxr12obT7cL1moPfE4tg1LkX7LlLfC6DeX4l2ZEud1ukP9jNQyNnfzQVqwbwmAATY4Q==", + "license": "MIT" + }, "node_modules/internal-slot": { "version": "1.0.7", "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.7.tgz", @@ -5452,6 +5679,30 @@ "node": ">= 0.4" } }, + "node_modules/is-alphabetical": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-alphabetical/-/is-alphabetical-2.0.1.tgz", + "integrity": "sha512-FWyyY60MeTNyeSRpkM2Iry0G9hpr7/9kD40mD/cGQEuilcZYS4okz8SN2Q6rLCJ8gbCt6fN+rC+6tMGS99LaxQ==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/is-alphanumerical": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-alphanumerical/-/is-alphanumerical-2.0.1.tgz", + "integrity": "sha512-hmbYhX/9MUMF5uh7tOXyK/n0ZvWpad5caBA17GsC6vyuCqaWliRG5K1qS9inmUhEMaOBIW7/whAnSwveW/LtZw==", + "license": "MIT", + "dependencies": { + "is-alphabetical": "^2.0.0", + "is-decimal": "^2.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, "node_modules/is-array-buffer": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.4.tgz", @@ -5594,6 +5845,16 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/is-decimal": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-decimal/-/is-decimal-2.0.1.tgz", + "integrity": "sha512-AAB9hiomQs5DXWcRB1rqsxGUstbRroFOPPVAomNk/3XHR5JyEZChOyTWe2oayKnsSsr/kcGqF+z6yuH6HHpN0A==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, "node_modules/is-extglob": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", @@ -5651,6 +5912,16 @@ "node": ">=0.10.0" } }, + "node_modules/is-hexadecimal": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-hexadecimal/-/is-hexadecimal-2.0.1.tgz", + "integrity": "sha512-DgZQp241c8oO6cA1SbTEWiXeoxV42vlcJxgH+B3hi1AiqqKruZR3ZGF8In3fj4+/y/7rHvlOZLZtgJ/4ttYGZg==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, "node_modules/is-map": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/is-map/-/is-map-2.0.3.tgz", @@ -5708,6 +5979,18 @@ "node": ">=8" } }, + "node_modules/is-plain-obj": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.1.0.tgz", + "integrity": "sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/is-regex": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.2.0.tgz", @@ -6039,6 +6322,16 @@ "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", "dev": true }, + "node_modules/longest-streak": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/longest-streak/-/longest-streak-3.1.0.tgz", + "integrity": "sha512-9Ri+o0JYgehTaVBBDoMqIl8GXtbWg711O3srftcHhZ0dqnETqLaoIK0x17fUw9rFSlK/0NlsKe0Ahhyl5pXE2g==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, "node_modules/loose-envify": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", @@ -6064,79 +6357,673 @@ "react": "^16.5.1 || ^17.0.0 || ^18.0.0 || ^19.0.0-rc" } }, - "node_modules/memoize-one": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/memoize-one/-/memoize-one-5.2.1.tgz", - "integrity": "sha512-zYiwtZUcYyXKo/np96AGZAckk+FWWsUdJ3cHGGmld7+AhvcWmQyGCYUh1hc4Q/pkOhb65dQR/pqCyK0cOaHz4Q==", - "license": "MIT" - }, - "node_modules/merge2": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", - "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", - "engines": { - "node": ">= 8" + "node_modules/mdast-util-from-markdown": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/mdast-util-from-markdown/-/mdast-util-from-markdown-2.0.2.tgz", + "integrity": "sha512-uZhTV/8NBuw0WHkPTrCqDOl0zVe1BIng5ZtHoDk49ME1qqcjYmmLmOf0gELgcRMxN4w2iuIeVso5/6QymSrgmA==", + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0", + "@types/unist": "^3.0.0", + "decode-named-character-reference": "^1.0.0", + "devlop": "^1.0.0", + "mdast-util-to-string": "^4.0.0", + "micromark": "^4.0.0", + "micromark-util-decode-numeric-character-reference": "^2.0.0", + "micromark-util-decode-string": "^2.0.0", + "micromark-util-normalize-identifier": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0", + "unist-util-stringify-position": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/micromatch": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", - "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", + "node_modules/mdast-util-mdx-expression": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/mdast-util-mdx-expression/-/mdast-util-mdx-expression-2.0.1.tgz", + "integrity": "sha512-J6f+9hUp+ldTZqKRSg7Vw5V6MqjATc+3E4gf3CFNcuZNWD8XdyI6zQ8GqH7f8169MM6P7hMBRDVGnn7oHB9kXQ==", + "license": "MIT", "dependencies": { - "braces": "^3.0.3", - "picomatch": "^2.3.1" + "@types/estree-jsx": "^1.0.0", + "@types/hast": "^3.0.0", + "@types/mdast": "^4.0.0", + "devlop": "^1.0.0", + "mdast-util-from-markdown": "^2.0.0", + "mdast-util-to-markdown": "^2.0.0" }, - "engines": { - "node": ">=8.6" + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dev": true, + "node_modules/mdast-util-mdx-jsx": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/mdast-util-mdx-jsx/-/mdast-util-mdx-jsx-3.2.0.tgz", + "integrity": "sha512-lj/z8v0r6ZtsN/cGNNtemmmfoLAFZnjMbNyLzBafjzikOM+glrjNHPlf6lQDOTccj9n5b0PPihEBbhneMyGs1Q==", + "license": "MIT", "dependencies": { - "brace-expansion": "^1.1.7" + "@types/estree-jsx": "^1.0.0", + "@types/hast": "^3.0.0", + "@types/mdast": "^4.0.0", + "@types/unist": "^3.0.0", + "ccount": "^2.0.0", + "devlop": "^1.1.0", + "mdast-util-from-markdown": "^2.0.0", + "mdast-util-to-markdown": "^2.0.0", + "parse-entities": "^4.0.0", + "stringify-entities": "^4.0.0", + "unist-util-stringify-position": "^4.0.0", + "vfile-message": "^4.0.0" }, - "engines": { - "node": "*" + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/minimist": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", - "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", - "dev": true, + "node_modules/mdast-util-mdxjs-esm": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/mdast-util-mdxjs-esm/-/mdast-util-mdxjs-esm-2.0.1.tgz", + "integrity": "sha512-EcmOpxsZ96CvlP03NghtH1EsLtr0n9Tm4lPUJUBccV9RwUOneqSycg19n5HGzCf+10LozMRSObtVr3ee1WoHtg==", + "license": "MIT", + "dependencies": { + "@types/estree-jsx": "^1.0.0", + "@types/hast": "^3.0.0", + "@types/mdast": "^4.0.0", + "devlop": "^1.0.0", + "mdast-util-from-markdown": "^2.0.0", + "mdast-util-to-markdown": "^2.0.0" + }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/minipass": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", - "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", - "engines": { - "node": ">=16 || 14 >=14.17" + "node_modules/mdast-util-phrasing": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/mdast-util-phrasing/-/mdast-util-phrasing-4.1.0.tgz", + "integrity": "sha512-TqICwyvJJpBwvGAMZjj4J2n0X8QWp21b9l0o7eXyVJ25YNWYbJDVIyD1bZXE6WtV6RmKJVYmQAKWa0zWOABz2w==", + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0", + "unist-util-is": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", - "dev": true + "node_modules/mdast-util-to-hast": { + "version": "13.2.0", + "resolved": "https://registry.npmjs.org/mdast-util-to-hast/-/mdast-util-to-hast-13.2.0.tgz", + "integrity": "sha512-QGYKEuUsYT9ykKBCMOEDLsU5JRObWQusAolFMeko/tYPufNkRffBAQjIE+99jbA87xv6FgmjLtwjh9wBWajwAA==", + "license": "MIT", + "dependencies": { + "@types/hast": "^3.0.0", + "@types/mdast": "^4.0.0", + "@ungap/structured-clone": "^1.0.0", + "devlop": "^1.0.0", + "micromark-util-sanitize-uri": "^2.0.0", + "trim-lines": "^3.0.0", + "unist-util-position": "^5.0.0", + "unist-util-visit": "^5.0.0", + "vfile": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } }, - "node_modules/mz": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/mz/-/mz-2.7.0.tgz", - "integrity": "sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==", + "node_modules/mdast-util-to-markdown": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/mdast-util-to-markdown/-/mdast-util-to-markdown-2.1.2.tgz", + "integrity": "sha512-xj68wMTvGXVOKonmog6LwyJKrYXZPvlwabaryTjLh9LuvovB/KAH+kvi8Gjj+7rJjsFi23nkUxRQv1KqSroMqA==", + "license": "MIT", "dependencies": { - "any-promise": "^1.0.0", - "object-assign": "^4.0.1", - "thenify-all": "^1.0.0" + "@types/mdast": "^4.0.0", + "@types/unist": "^3.0.0", + "longest-streak": "^3.0.0", + "mdast-util-phrasing": "^4.0.0", + "mdast-util-to-string": "^4.0.0", + "micromark-util-classify-character": "^2.0.0", + "micromark-util-decode-string": "^2.0.0", + "unist-util-visit": "^5.0.0", + "zwitch": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/nanoid": { - "version": "3.3.8", + "node_modules/mdast-util-to-string": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/mdast-util-to-string/-/mdast-util-to-string-4.0.0.tgz", + "integrity": "sha512-0H44vDimn51F0YwvxSJSm0eCDOJTRlmN0R1yBh4HLj9wiV1Dn0QoXGbvFAWj2hSItVTlCmBF1hqKlIyUBVFLPg==", + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/memoize-one": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/memoize-one/-/memoize-one-5.2.1.tgz", + "integrity": "sha512-zYiwtZUcYyXKo/np96AGZAckk+FWWsUdJ3cHGGmld7+AhvcWmQyGCYUh1hc4Q/pkOhb65dQR/pqCyK0cOaHz4Q==", + "license": "MIT" + }, + "node_modules/merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "engines": { + "node": ">= 8" + } + }, + "node_modules/micromark": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/micromark/-/micromark-4.0.2.tgz", + "integrity": "sha512-zpe98Q6kvavpCr1NPVSCMebCKfD7CA2NqZ+rykeNhONIJBpc1tFKt9hucLGwha3jNTNI8lHpctWJWoimVF4PfA==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "@types/debug": "^4.0.0", + "debug": "^4.0.0", + "decode-named-character-reference": "^1.0.0", + "devlop": "^1.0.0", + "micromark-core-commonmark": "^2.0.0", + "micromark-factory-space": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-chunked": "^2.0.0", + "micromark-util-combine-extensions": "^2.0.0", + "micromark-util-decode-numeric-character-reference": "^2.0.0", + "micromark-util-encode": "^2.0.0", + "micromark-util-normalize-identifier": "^2.0.0", + "micromark-util-resolve-all": "^2.0.0", + "micromark-util-sanitize-uri": "^2.0.0", + "micromark-util-subtokenize": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-core-commonmark": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/micromark-core-commonmark/-/micromark-core-commonmark-2.0.3.tgz", + "integrity": "sha512-RDBrHEMSxVFLg6xvnXmb1Ayr2WzLAWjeSATAoxwKYJV94TeNavgoIdA0a9ytzDSVzBy2YKFK+emCPOEibLeCrg==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "decode-named-character-reference": "^1.0.0", + "devlop": "^1.0.0", + "micromark-factory-destination": "^2.0.0", + "micromark-factory-label": "^2.0.0", + "micromark-factory-space": "^2.0.0", + "micromark-factory-title": "^2.0.0", + "micromark-factory-whitespace": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-chunked": "^2.0.0", + "micromark-util-classify-character": "^2.0.0", + "micromark-util-html-tag-name": "^2.0.0", + "micromark-util-normalize-identifier": "^2.0.0", + "micromark-util-resolve-all": "^2.0.0", + "micromark-util-subtokenize": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-factory-destination": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-factory-destination/-/micromark-factory-destination-2.0.1.tgz", + "integrity": "sha512-Xe6rDdJlkmbFRExpTOmRj9N3MaWmbAgdpSrBQvCFqhezUn4AHqJHbaEnfbVYYiexVSs//tqOdY/DxhjdCiJnIA==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-character": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-factory-label": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-factory-label/-/micromark-factory-label-2.0.1.tgz", + "integrity": "sha512-VFMekyQExqIW7xIChcXn4ok29YE3rnuyveW3wZQWWqF4Nv9Wk5rgJ99KzPvHjkmPXF93FXIbBp6YdW3t71/7Vg==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "devlop": "^1.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-factory-space": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-factory-space/-/micromark-factory-space-2.0.1.tgz", + "integrity": "sha512-zRkxjtBxxLd2Sc0d+fbnEunsTj46SWXgXciZmHq0kDYGnck/ZSGj9/wULTV95uoeYiK5hRXP2mJ98Uo4cq/LQg==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-character": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-factory-title": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-factory-title/-/micromark-factory-title-2.0.1.tgz", + "integrity": "sha512-5bZ+3CjhAd9eChYTHsjy6TGxpOFSKgKKJPJxr293jTbfry2KDoWkhBb6TcPVB4NmzaPhMs1Frm9AZH7OD4Cjzw==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-factory-space": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-factory-whitespace": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-factory-whitespace/-/micromark-factory-whitespace-2.0.1.tgz", + "integrity": "sha512-Ob0nuZ3PKt/n0hORHyvoD9uZhr+Za8sFoP+OnMcnWK5lngSzALgQYKMr9RJVOWLqQYuyn6ulqGWSXdwf6F80lQ==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-factory-space": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-util-character": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.1.1.tgz", + "integrity": "sha512-wv8tdUTJ3thSFFFJKtpYKOYiGP2+v96Hvk4Tu8KpCAsTMs6yi+nVmGh1syvSCsaxz45J6Jbw+9DD6g97+NV67Q==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-util-chunked": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-chunked/-/micromark-util-chunked-2.0.1.tgz", + "integrity": "sha512-QUNFEOPELfmvv+4xiNg2sRYeS/P84pTW0TCgP5zc9FpXetHY0ab7SxKyAQCNCc1eK0459uoLI1y5oO5Vc1dbhA==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-symbol": "^2.0.0" + } + }, + "node_modules/micromark-util-classify-character": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-classify-character/-/micromark-util-classify-character-2.0.1.tgz", + "integrity": "sha512-K0kHzM6afW/MbeWYWLjoHQv1sgg2Q9EccHEDzSkxiP/EaagNzCm7T/WMKZ3rjMbvIpvBiZgwR3dKMygtA4mG1Q==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-character": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-util-combine-extensions": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-combine-extensions/-/micromark-util-combine-extensions-2.0.1.tgz", + "integrity": "sha512-OnAnH8Ujmy59JcyZw8JSbK9cGpdVY44NKgSM7E9Eh7DiLS2E9RNQf0dONaGDzEG9yjEl5hcqeIsj4hfRkLH/Bg==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-chunked": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-util-decode-numeric-character-reference": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/micromark-util-decode-numeric-character-reference/-/micromark-util-decode-numeric-character-reference-2.0.2.tgz", + "integrity": "sha512-ccUbYk6CwVdkmCQMyr64dXz42EfHGkPQlBj5p7YVGzq8I7CtjXZJrubAYezf7Rp+bjPseiROqe7G6foFd+lEuw==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-symbol": "^2.0.0" + } + }, + "node_modules/micromark-util-decode-string": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-decode-string/-/micromark-util-decode-string-2.0.1.tgz", + "integrity": "sha512-nDV/77Fj6eH1ynwscYTOsbK7rR//Uj0bZXBwJZRfaLEJ1iGBR6kIfNmlNqaqJf649EP0F3NWNdeJi03elllNUQ==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "decode-named-character-reference": "^1.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-decode-numeric-character-reference": "^2.0.0", + "micromark-util-symbol": "^2.0.0" + } + }, + "node_modules/micromark-util-encode": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-encode/-/micromark-util-encode-2.0.1.tgz", + "integrity": "sha512-c3cVx2y4KqUnwopcO9b/SCdo2O67LwJJ/UyqGfbigahfegL9myoEFoDYZgkT7f36T0bLrM9hZTAaAyH+PCAXjw==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT" + }, + "node_modules/micromark-util-html-tag-name": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-html-tag-name/-/micromark-util-html-tag-name-2.0.1.tgz", + "integrity": "sha512-2cNEiYDhCWKI+Gs9T0Tiysk136SnR13hhO8yW6BGNyhOC4qYFnwF1nKfD3HFAIXA5c45RrIG1ub11GiXeYd1xA==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT" + }, + "node_modules/micromark-util-normalize-identifier": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-normalize-identifier/-/micromark-util-normalize-identifier-2.0.1.tgz", + "integrity": "sha512-sxPqmo70LyARJs0w2UclACPUUEqltCkJ6PhKdMIDuJ3gSf/Q+/GIe3WKl0Ijb/GyH9lOpUkRAO2wp0GVkLvS9Q==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-symbol": "^2.0.0" + } + }, + "node_modules/micromark-util-resolve-all": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-resolve-all/-/micromark-util-resolve-all-2.0.1.tgz", + "integrity": "sha512-VdQyxFWFT2/FGJgwQnJYbe1jjQoNTS4RjglmSjTUlpUMa95Htx9NHeYW4rGDJzbjvCsl9eLjMQwGeElsqmzcHg==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-util-sanitize-uri": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-sanitize-uri/-/micromark-util-sanitize-uri-2.0.1.tgz", + "integrity": "sha512-9N9IomZ/YuGGZZmQec1MbgxtlgougxTodVwDzzEouPKo3qFWvymFHWcnDi2vzV1ff6kas9ucW+o3yzJK9YB1AQ==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-character": "^2.0.0", + "micromark-util-encode": "^2.0.0", + "micromark-util-symbol": "^2.0.0" + } + }, + "node_modules/micromark-util-subtokenize": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/micromark-util-subtokenize/-/micromark-util-subtokenize-2.1.0.tgz", + "integrity": "sha512-XQLu552iSctvnEcgXw6+Sx75GflAPNED1qx7eBJ+wydBb2KCbRZe+NwvIEEMM83uml1+2WSXpBAcp9IUCgCYWA==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "devlop": "^1.0.0", + "micromark-util-chunked": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-util-symbol": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.1.tgz", + "integrity": "sha512-vs5t8Apaud9N28kgCrRUdEed4UJ+wWNvicHLPxCa9ENlYuAY31M0ETy5y1vA33YoNPDFTghEbnh6efaE8h4x0Q==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT" + }, + "node_modules/micromark-util-types": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/micromark-util-types/-/micromark-util-types-2.0.2.tgz", + "integrity": "sha512-Yw0ECSpJoViF1qTU4DC6NwtC4aWGt1EkzaQB8KPPyCRR8z9TWeV0HbEFGTO+ZY1wB22zmxnJqhPyTpOVCpeHTA==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT" + }, + "node_modules/micromatch": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", + "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", + "dependencies": { + "braces": "^3.0.3", + "picomatch": "^2.3.1" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/minimist": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", + "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/minipass": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", + "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, + "node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" + }, + "node_modules/mz": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/mz/-/mz-2.7.0.tgz", + "integrity": "sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==", + "dependencies": { + "any-promise": "^1.0.0", + "object-assign": "^4.0.1", + "thenify-all": "^1.0.0" + } + }, + "node_modules/nanoid": { + "version": "3.3.8", "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.8.tgz", "integrity": "sha512-WNLf5Sd8oZxOm+TzppcYk8gVOgP+l58xNy58D0nbUnOxOWRWvlcCV4kUF7ltmI6PsrLl/BgKEyS4mqsGChFN0w==", "funding": [ @@ -6438,6 +7325,31 @@ "node": ">=6" } }, + "node_modules/parse-entities": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/parse-entities/-/parse-entities-4.0.2.tgz", + "integrity": "sha512-GG2AQYWoLgL877gQIKeRPGO1xF9+eG1ujIb5soS5gPvLQ1y2o8FL90w2QWNdf9I361Mpp7726c+lj3U0qK1uGw==", + "license": "MIT", + "dependencies": { + "@types/unist": "^2.0.0", + "character-entities-legacy": "^3.0.0", + "character-reference-invalid": "^2.0.0", + "decode-named-character-reference": "^1.0.0", + "is-alphanumerical": "^2.0.0", + "is-decimal": "^2.0.0", + "is-hexadecimal": "^2.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/parse-entities/node_modules/@types/unist": { + "version": "2.0.11", + "resolved": "https://registry.npmjs.org/@types/unist/-/unist-2.0.11.tgz", + "integrity": "sha512-CmBKiL6NNo/OqgmMn95Fk9Whlp2mtvIv+KNpQKN2F4SjvrEesubTRWGYSg+BnWZOnlCaSTU1sMpsBOzgbYhnsA==", + "license": "MIT" + }, "node_modules/path-exists": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", @@ -6692,6 +7604,16 @@ "react-is": "^16.13.1" } }, + "node_modules/property-information": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/property-information/-/property-information-7.1.0.tgz", + "integrity": "sha512-TwEZ+X+yCJmYfL7TPUOcvBZ4QfoT5YenQiJuX//0th53DE6w0xxLEtfK3iyryQFddXuvkIk51EEgrJQ0WJkOmQ==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, "node_modules/punycode": { "version": "2.3.1", "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", @@ -6747,6 +7669,33 @@ "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==", "dev": true }, + "node_modules/react-markdown": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/react-markdown/-/react-markdown-10.1.0.tgz", + "integrity": "sha512-qKxVopLT/TyA6BX3Ue5NwabOsAzm0Q7kAPwq6L+wWDwisYs7R8vZ0nRXqq6rkueboxpkjvLGU9fWifiX/ZZFxQ==", + "license": "MIT", + "dependencies": { + "@types/hast": "^3.0.0", + "@types/mdast": "^4.0.0", + "devlop": "^1.0.0", + "hast-util-to-jsx-runtime": "^2.0.0", + "html-url-attributes": "^3.0.0", + "mdast-util-to-hast": "^13.0.0", + "remark-parse": "^11.0.0", + "remark-rehype": "^11.0.0", + "unified": "^11.0.0", + "unist-util-visit": "^5.0.0", + "vfile": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + }, + "peerDependencies": { + "@types/react": ">=18", + "react": ">=18" + } + }, "node_modules/react-remove-scroll": { "version": "2.6.3", "resolved": "https://registry.npmjs.org/react-remove-scroll/-/react-remove-scroll-2.6.3.tgz", @@ -6888,6 +7837,39 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/remark-parse": { + "version": "11.0.0", + "resolved": "https://registry.npmjs.org/remark-parse/-/remark-parse-11.0.0.tgz", + "integrity": "sha512-FCxlKLNGknS5ba/1lmpYijMUzX2esxW5xQqjWxw2eHFfS2MSdaHVINFmhjo+qN1WhZhNimq0dZATN9pH0IDrpA==", + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0", + "mdast-util-from-markdown": "^2.0.0", + "micromark-util-types": "^2.0.0", + "unified": "^11.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-rehype": { + "version": "11.1.2", + "resolved": "https://registry.npmjs.org/remark-rehype/-/remark-rehype-11.1.2.tgz", + "integrity": "sha512-Dh7l57ianaEoIpzbp0PC9UKAdCSVklD8E5Rpw7ETfbTl3FqcOOgq5q2LVDhgGCkaBv7p24JXikPdvhhmHvKMsw==", + "license": "MIT", + "dependencies": { + "@types/hast": "^3.0.0", + "@types/mdast": "^4.0.0", + "mdast-util-to-hast": "^13.0.0", + "unified": "^11.0.0", + "vfile": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, "node_modules/resolve": { "version": "1.22.8", "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz", @@ -7163,6 +8145,16 @@ "node": ">=0.10.0" } }, + "node_modules/space-separated-tokens": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/space-separated-tokens/-/space-separated-tokens-2.0.2.tgz", + "integrity": "sha512-PEGlAwrG8yXGXRjW32fGbg66JAlOAwbObuqVoJpv/mRgoWDQfgH1wDPvtzWyUSNAXBGSk8h755YDbbcEy3SH2Q==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, "node_modules/streamsearch": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/streamsearch/-/streamsearch-1.1.0.tgz", @@ -7330,6 +8322,20 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/stringify-entities": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/stringify-entities/-/stringify-entities-4.0.4.tgz", + "integrity": "sha512-IwfBptatlO+QCJUo19AqvrPNqlVMpW9YEL2LIVY+Rpv2qsjCGxaDLNRgeGsQWJhfItebuJhsGSLjaBbNSQ+ieg==", + "license": "MIT", + "dependencies": { + "character-entities-html4": "^2.0.0", + "character-entities-legacy": "^3.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, "node_modules/strip-ansi": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", @@ -7374,6 +8380,24 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/style-to-js": { + "version": "1.1.17", + "resolved": "https://registry.npmjs.org/style-to-js/-/style-to-js-1.1.17.tgz", + "integrity": "sha512-xQcBGDxJb6jjFCTzvQtfiPn6YvvP2O8U1MDIPNfJQlWMYfktPy+iGsHE7cssjs7y84d9fQaK4UF3RIJaAHSoYA==", + "license": "MIT", + "dependencies": { + "style-to-object": "1.0.9" + } + }, + "node_modules/style-to-object": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/style-to-object/-/style-to-object-1.0.9.tgz", + "integrity": "sha512-G4qppLgKu/k6FwRpHiGiKPaPTFcG3g4wNVX/Qsfu+RqQM30E7Tyu/TEgxcL9PNLF5pdRLwQdE3YKKf+KF2Dzlw==", + "license": "MIT", + "dependencies": { + "inline-style-parser": "0.2.4" + } + }, "node_modules/styled-jsx": { "version": "5.1.6", "resolved": "https://registry.npmjs.org/styled-jsx/-/styled-jsx-5.1.6.tgz", @@ -7605,6 +8629,26 @@ "node": ">=8.0" } }, + "node_modules/trim-lines": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/trim-lines/-/trim-lines-3.0.1.tgz", + "integrity": "sha512-kRj8B+YHZCc9kQYdWfJB2/oUl9rA99qbowYYBtr4ui4mZyAQ2JpvVBd/6U2YloATfqBhBTSMhTpgBHtU0Mf3Rg==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/trough": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/trough/-/trough-2.2.0.tgz", + "integrity": "sha512-tmMpK00BjZiUyVyvrBK7knerNgmgvcV/KLVyuma/SC+TQN167GrMRciANTz09+k3zW8L8t60jWO1GpfkZdjTaw==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, "node_modules/ts-api-utils": { "version": "1.4.3", "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-1.4.3.tgz", @@ -7771,6 +8815,93 @@ "integrity": "sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw==", "dev": true }, + "node_modules/unified": { + "version": "11.0.5", + "resolved": "https://registry.npmjs.org/unified/-/unified-11.0.5.tgz", + "integrity": "sha512-xKvGhPWw3k84Qjh8bI3ZeJjqnyadK+GEFtazSfZv/rKeTkTjOJho6mFqh2SM96iIcZokxiOpg78GazTSg8+KHA==", + "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0", + "bail": "^2.0.0", + "devlop": "^1.0.0", + "extend": "^3.0.0", + "is-plain-obj": "^4.0.0", + "trough": "^2.0.0", + "vfile": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unist-util-is": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-6.0.0.tgz", + "integrity": "sha512-2qCTHimwdxLfz+YzdGfkqNlH0tLi9xjTnHddPmJwtIG9MGsdbutfTc4P+haPD7l7Cjxf/WZj+we5qfVPvvxfYw==", + "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unist-util-position": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-5.0.0.tgz", + "integrity": "sha512-fucsC7HjXvkB5R3kTCO7kUjRdrS0BJt3M/FPxmHMBOm8JQi2BsHAHFsy27E0EolP8rp0NzXsJ+jNPyDWvOJZPA==", + "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unist-util-stringify-position": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-4.0.0.tgz", + "integrity": "sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==", + "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unist-util-visit": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-5.0.0.tgz", + "integrity": "sha512-MR04uvD+07cwl/yhVuVWAtw+3GOR/knlL55Nd/wAdblk27GCVt3lqpTivy/tkJcZoNPzTwS1Y+KMojlLDhoTzg==", + "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0", + "unist-util-is": "^6.0.0", + "unist-util-visit-parents": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unist-util-visit-parents": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-6.0.1.tgz", + "integrity": "sha512-L/PqWzfTP9lzzEa6CKs0k2nARxTdZduw3zyh8d2NVBnsyvHjSX4TWse388YrrQKbvI8w20fGjGlhgT96WwKykw==", + "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0", + "unist-util-is": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, "node_modules/uri-js": { "version": "4.4.1", "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", @@ -7826,6 +8957,34 @@ "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==" }, + "node_modules/vfile": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/vfile/-/vfile-6.0.3.tgz", + "integrity": "sha512-KzIbH/9tXat2u30jf+smMwFCsno4wHVdNmzFyL+T/L3UGqqk6JKfVqOFOZEpZSHADH1k40ab6NUIXZq422ov3Q==", + "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0", + "vfile-message": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/vfile-message": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-4.0.3.tgz", + "integrity": "sha512-QTHzsGd1EhbZs4AsQ20JX1rC3cOlt/IWJruk893DfLRr57lcnOeMaWG4K0JrRta4mIJZKth2Au3mM3u03/JWKw==", + "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0", + "unist-util-stringify-position": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, "node_modules/which": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", @@ -8044,6 +9203,16 @@ "funding": { "url": "https://github.com/sponsors/sindresorhus" } + }, + "node_modules/zwitch": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/zwitch/-/zwitch-2.0.4.tgz", + "integrity": "sha512-bXE4cR/kVZhKZX/RjPEflHaKVhUVl85noU3v6b8apfQEc1x4A+zBxjZ4lN8LqGd6WZ3dl98pY4o717VFmoPp+A==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } } } } diff --git a/Website/package.json b/Website/package.json index 7bb9a9f..e791d23 100644 --- a/Website/package.json +++ b/Website/package.json @@ -31,6 +31,7 @@ "next": "^15.3.4", "react": "^19.0.0", "react-dom": "^19.0.0", + "react-markdown": "^10.1.0", "react-window": "^1.8.11", "tailwind-merge": "^2.5.5", "tailwindcss-animate": "^1.0.7" diff --git a/Website/scripts/copyStub.js b/Website/scripts/copyStub.js index 8eea9ed..d7c3574 100644 --- a/Website/scripts/copyStub.js +++ b/Website/scripts/copyStub.js @@ -1,10 +1,15 @@ const fs = require('fs'); const path = require('path'); -const source = path.resolve(__dirname, '../stubs/Data.ts'); -const destination = path.resolve(__dirname, '../generated/Data.ts'); +const sourceDir = path.resolve(__dirname, '../stubs'); +const destinationDir = path.resolve(__dirname, '../generated'); -fs.mkdirSync(path.dirname(destination), { recursive: true }); -fs.copyFileSync(source, destination); +fs.mkdirSync(destinationDir, { recursive: true }); -console.log(`Stub Data.ts copied to ${destination}`); \ No newline at end of file +const files = fs.readdirSync(sourceDir); +files.forEach(file => { + const sourceFile = path.join(sourceDir, file); + const destFile = path.join(destinationDir, file); + fs.copyFileSync(sourceFile, destFile); + console.log(`Copied ${file} to ${destinationDir}`); +}); \ No newline at end of file diff --git a/Website/stubs/Introduction.md b/Website/stubs/Introduction.md new file mode 100644 index 0000000..a104365 --- /dev/null +++ b/Website/stubs/Introduction.md @@ -0,0 +1,9 @@ +# 🦗 Cricket noices... 🦗 +_No ADO WiKi page connected..._ + +### Setup +1. Update ADO Pipelines to version 1.4.0 or newer +2. Open YAML files and ensure variable group and ADO repo looks correct. +3. Update Library Variables for pipeline (new ones are: AdoWikiPagePath & AdoWikiName) +4. Ensure Read Access from the pipeline to the WiKi Repo (Project Settings > Repositories > 'wiki-repo' > Security) +5. Ensure Pipeline is registered under "Pipeline Permissions" (Project Settings > Repositories > 'wiki-repo' > Security) \ No newline at end of file diff --git a/azure-pipelines-build-jobs.yml b/azure-pipelines-build-jobs.yml index 60a05bd..4ae8835 100644 --- a/azure-pipelines-build-jobs.yml +++ b/azure-pipelines-build-jobs.yml @@ -17,6 +17,12 @@ parameters: - name: dataverseUrl type: string default: '' + - name: adoWikiName + type: string + default: '' + - name: adoWikiPagePath + type: string + default: '' steps: - task: UseDotNet@2 @@ -40,6 +46,71 @@ steps: AZURE_CLIENT_SECRET: ${{ parameters.azureClientSecret }} DataverseUrl: ${{ parameters.dataverseUrl }} + - script: | + set -uo pipefail + API_VER="7.1" + + # Generated folder location in DMV + OUT_FILE="generated/IntroductionPage.md" + + # The encoding removes all spaces, weird charachters etc. with encoded values like %20 for space. + WIKI_NAME_ENCODED=$(python3 -c "import urllib.parse, os; print(urllib.parse.quote(os.environ['WIKI_NAME']))") + ENCODED_PATH=$(python3 -c "import urllib.parse, os; print(urllib.parse.quote(os.environ['WIKI_PAGE_PATH']))") + + URL="${ORG_URL}${PROJECT}/_apis/wiki/wikis/${WIKI_NAME_ENCODED}/pages?path=${ENCODED_PATH}&includeContent=true&api-version=${API_VER}" + + # Debug: Print the constructed URL + echo "Constructed URL: $URL" + echo "ENCODED_PATH: $ENCODED_PATH" + echo "ORG_URL: $ORG_URL" + echo "PROJECT: $PROJECT" + echo "WIKI_NAME: $WIKI_NAME" + echo "ENCODED_WIKI_NAME: $WIKI_NAME_ENCODED" + + mkdir -p "$(dirname "$OUT_FILE")" + # -w (wrap) 0 ensures the token is one line + BASE64=$(printf ":%s" "$SYSTEM_ACCESSTOKEN" | base64 --wrap 0) + + # Headers are important https://learn.microsoft.com/en-us/rest/api/azure/devops/?view=azure-devops-rest-7.2 + # HTTP 2.0 (default) does not work hence the older (1.1) version used + RESPONSE=$(curl \ + --silent \ + --show-error \ + --http1.1 \ + --header "Authorization: Basic ${BASE64}" \ + --header "Accept: application/json" \ + "$URL") + + # Check if it's valid JSON + if echo "$RESPONSE" | jq . > /dev/null 2>&1; then + echo "Response is valid JSON" + + # Check if it has content field + if echo "$RESPONSE" | jq -e '.content' > /dev/null 2>&1; then + echo "Response has .content field" + echo "$RESPONSE" | jq -r '.content' > "$OUT_FILE" + echo "Saved wiki page to $OUT_FILE" + else + echo "Response does not have .content field" + echo "Available fields:" + echo "$RESPONSE" | jq 'keys' + fi + else + echo "Response is NOT valid JSON" + echo "This might be an error message or HTML response" + fi + + echo "Saved wiki page to $OUT_FILE" + workingDirectory: $(Build.SourcesDirectory)/Website + displayName: Download Introduction WiKi Page into TS project + continueOnError: true + env: + ORG_URL: $(System.CollectionUri) + PROJECT: $(System.TeamProject) + SYSTEM_ACCESSTOKEN: $(System.AccessToken) + WIKI_NAME: ${{ parameters.adoWikiName}} + WIKI_PAGE_PATH: ${{ parameters.adoWikiPagePath}} + - task: NodeTool@0 displayName: "Install Node.js" inputs: @@ -50,6 +121,7 @@ steps: workingDirectory: $(Build.SourcesDirectory)/Website displayName: "Build Next.js app" + - task: ArchiveFiles@2 inputs: rootFolderOrFile: "$(Build.SourcesDirectory)/Website/.next/standalone" @@ -59,4 +131,4 @@ steps: replaceExistingArchive: true - publish: $(Build.ArtifactStagingDirectory)/WebApp.zip - artifact: WebApp + artifact: WebApp \ No newline at end of file diff --git a/azure-pipelines-external.yml b/azure-pipelines-external.yml index 942c2b6..6c55dce 100644 --- a/azure-pipelines-external.yml +++ b/azure-pipelines-external.yml @@ -39,11 +39,20 @@ variables: - name: bicepTemplateFile value: "Infrastructure/main.bicep" +resources: + repositories: + - repository: wiki + type: git + name: Documentation # Change this to correct repo if needed + stages: - stage: Build displayName: "Build Stage" jobs: - job: BuildApp + uses: + repositories: + - wiki displayName: "Build App" steps: - checkout: none @@ -57,6 +66,8 @@ stages: azureClientId: $(AzureClientId) azureClientSecret: $(AzureClientSecret) dataverseUrl: $(DataverseUrl) + adoWikiName: $(AdoWikiName) + adoWikiPagePath: $(AdoWikiPagePath) - stage: Deploy displayName: "Deploy Stage" @@ -77,4 +88,4 @@ stages: azureLocation: $(AzureLocation) websitePassword: $(WebsitePassword) websiteSessionSecret: $(WebsiteSessionSecret) - websiteName: $(WebsiteName) + websiteName: $(WebsiteName) \ No newline at end of file