From db3c0274f625ce51f375ddaf80872707675605f0 Mon Sep 17 00:00:00 2001
From: adilallo <39313955+adilallo@users.noreply.github.com>
Date: Thu, 5 Feb 2026 18:21:56 -0700
Subject: [PATCH 01/15] Start organizational migration
---
app/blog/[slug]/page.tsx | 6 +++---
app/components-preview/page.tsx | 6 +++---
.../ConditionalHeader/ConditionalHeader.view.tsx | 4 ++--
app/components/{ => buttons}/Button.tsx | 4 ++--
.../{ => cards}/IconCard/IconCard.container.tsx | 0
.../{ => cards}/IconCard/IconCard.types.ts | 0
.../{ => cards}/IconCard/IconCard.view.tsx | 0
app/components/{ => cards}/IconCard/index.tsx | 0
app/components/{ => cards}/NumberCard.tsx | 4 ++--
.../{ => cards}/RuleCard/RuleCard.container.tsx | 2 +-
.../{ => cards}/RuleCard/RuleCard.types.ts | 2 +-
.../{ => cards}/RuleCard/RuleCard.view.tsx | 4 ++--
app/components/{ => cards}/RuleCard/index.tsx | 0
.../{ => controls}/Checkbox/Checkbox.container.tsx | 4 ++--
.../{ => controls}/Checkbox/Checkbox.types.ts | 2 +-
.../{ => controls}/Checkbox/Checkbox.view.tsx | 0
app/components/{ => controls}/Checkbox/index.tsx | 0
.../CheckboxGroup/CheckboxGroup.container.tsx | 2 +-
.../CheckboxGroup/CheckboxGroup.types.ts | 2 +-
.../CheckboxGroup/CheckboxGroup.view.tsx | 0
.../{ => controls}/CheckboxGroup/index.tsx | 0
.../{ => controls}/Chip/Chip.container.tsx | 2 +-
app/components/{ => controls}/Chip/Chip.types.ts | 2 +-
app/components/{ => controls}/Chip/Chip.view.tsx | 0
app/components/{ => controls}/Chip/index.tsx | 0
.../InputWithCounter/InputWithCounter.types.ts | 0
.../InputWithCounter/InputWithCounter.view.tsx | 0
.../{ => controls}/InputWithCounter/index.tsx | 0
.../MultiSelect/MultiSelect.container.tsx | 2 +-
.../MultiSelect/MultiSelect.types.ts | 2 +-
.../MultiSelect/MultiSelect.view.tsx | 2 +-
.../{ => controls}/MultiSelect/index.tsx | 0
.../RadioButton/RadioButton.container.tsx | 2 +-
.../RadioButton/RadioButton.types.ts | 2 +-
.../RadioButton/RadioButton.view.tsx | 0
.../{ => controls}/RadioButton/index.tsx | 0
.../RadioGroup/RadioGroup.container.tsx | 2 +-
.../{ => controls}/RadioGroup/RadioGroup.types.ts | 2 +-
.../{ => controls}/RadioGroup/RadioGroup.view.tsx | 0
app/components/{ => controls}/RadioGroup/index.tsx | 0
.../SelectInput/SelectInput.container.tsx | 4 ++--
.../SelectInput/SelectInput.types.ts | 2 +-
.../SelectInput/SelectInput.view.tsx | 6 +++---
.../{ => controls}/SelectInput/index.tsx | 0
.../{ => controls}/Switch/Switch.container.tsx | 2 +-
.../{ => controls}/Switch/Switch.types.ts | 2 +-
.../{ => controls}/Switch/Switch.view.tsx | 0
app/components/{ => controls}/Switch/index.tsx | 0
.../{ => controls}/TextArea/TextArea.container.tsx | 4 ++--
.../{ => controls}/TextArea/TextArea.types.ts | 2 +-
.../{ => controls}/TextArea/TextArea.view.tsx | 0
app/components/{ => controls}/TextArea/index.tsx | 0
.../TextInput/TextInput.container.tsx | 4 ++--
.../{ => controls}/TextInput/TextInput.types.ts | 2 +-
.../{ => controls}/TextInput/TextInput.view.tsx | 2 +-
app/components/{ => controls}/TextInput/index.tsx | 0
.../{ => controls}/Toggle/Toggle.container.tsx | 2 +-
.../{ => controls}/Toggle/Toggle.types.ts | 2 +-
.../{ => controls}/Toggle/Toggle.view.tsx | 0
app/components/{ => controls}/Toggle/index.tsx | 0
.../ToggleGroup/ToggleGroup.container.tsx | 2 +-
.../ToggleGroup/ToggleGroup.types.ts | 2 +-
.../ToggleGroup/ToggleGroup.view.tsx | 0
.../{ => controls}/ToggleGroup/index.tsx | 0
app/components/{ => icons}/Avatar.tsx | 2 +-
app/components/{ => icons}/Logo.tsx | 2 +-
.../{ => modals}/Alert/Alert.container.tsx | 2 +-
app/components/{ => modals}/Alert/Alert.types.ts | 0
app/components/{ => modals}/Alert/Alert.view.tsx | 2 +-
app/components/{ => modals}/Alert/index.tsx | 0
.../{ => modals}/Create/Create.container.tsx | 0
app/components/{ => modals}/Create/Create.types.ts | 0
app/components/{ => modals}/Create/Create.view.tsx | 6 +++---
app/components/{ => modals}/Create/index.tsx | 0
.../{ => modals}/Tooltip/Tooltip.container.tsx | 2 +-
.../{ => modals}/Tooltip/Tooltip.types.ts | 0
.../{ => modals}/Tooltip/Tooltip.view.tsx | 0
app/components/{ => modals}/Tooltip/index.tsx | 0
app/components/{ => navigation}/Footer.tsx | 8 ++++----
.../{ => navigation}/Header/Header.container.tsx | 12 ++++++------
.../{ => navigation}/Header/Header.types.ts | 0
.../{ => navigation}/Header/Header.view.tsx | 2 +-
app/components/{ => navigation}/Header/index.tsx | 0
app/components/{ => navigation}/HeaderTab.tsx | 2 +-
.../HomeHeader/HomeHeader.container.tsx | 12 ++++++------
.../HomeHeader/HomeHeader.types.ts | 0
.../HomeHeader/HomeHeader.view.tsx | 2 +-
.../{ => navigation}/HomeHeader/index.tsx | 0
app/components/{ => navigation}/MenuBar.tsx | 4 ++--
.../MenuBarItem/MenuBarItem.container.tsx | 2 +-
.../MenuBarItem/MenuBarItem.types.ts | 0
.../MenuBarItem/MenuBarItem.view.tsx | 0
.../{ => navigation}/MenuBarItem/index.tsx | 0
.../NavigationItem/NavigationItem.container.tsx | 2 +-
.../NavigationItem/NavigationItem.types.ts | 0
.../NavigationItem/NavigationItem.view.tsx | 0
.../{ => navigation}/NavigationItem/index.tsx | 0
.../{ => progress}/Progress/Progress.container.tsx | 0
.../{ => progress}/Progress/Progress.types.ts | 0
.../{ => progress}/Progress/Progress.view.tsx | 0
.../Progress}/Stepper/Stepper.container.tsx | 0
.../Progress}/Stepper/Stepper.types.ts | 0
.../Progress}/Stepper/Stepper.view.tsx | 0
.../{ => progress/Progress}/Stepper/index.tsx | 0
app/components/{ => progress}/Progress/index.tsx | 0
.../AskOrganizer/AskOrganizer.container.tsx | 6 +++---
.../AskOrganizer/AskOrganizer.types.ts | 0
.../AskOrganizer/AskOrganizer.view.tsx | 6 +++---
.../{ => sections}/AskOrganizer/index.tsx | 0
app/components/{ => sections}/ContentBanner.tsx | 6 +++---
.../FeatureGrid/FeatureGrid.container.tsx | 2 +-
.../FeatureGrid/FeatureGrid.types.ts | 0
.../FeatureGrid/FeatureGrid.view.tsx | 6 +++---
.../{ => sections}/FeatureGrid/index.tsx | 0
app/components/{ => sections}/HeroBanner.tsx | 8 ++++----
.../{ => sections}/LogoWall/LogoWall.container.tsx | 0
.../{ => sections}/LogoWall/LogoWall.types.ts | 0
.../{ => sections}/LogoWall/LogoWall.view.tsx | 0
app/components/{ => sections}/LogoWall/index.tsx | 0
.../NumberedCards/NumberedCards.container.tsx | 2 +-
.../NumberedCards/NumberedCards.types.ts | 0
.../NumberedCards/NumberedCards.view.tsx | 6 +++---
.../{ => sections}/NumberedCards/index.tsx | 0
.../QuoteBlock/QuoteBlock.container.tsx | 4 ++--
.../{ => sections}/QuoteBlock/QuoteBlock.types.ts | 0
.../{ => sections}/QuoteBlock/QuoteBlock.view.tsx | 4 ++--
app/components/{ => sections}/QuoteBlock/index.tsx | 0
.../RelatedArticles/RelatedArticles.container.tsx | 2 +-
.../RelatedArticles/RelatedArticles.types.ts | 2 +-
.../RelatedArticles/RelatedArticles.view.tsx | 2 +-
.../{ => sections}/RelatedArticles/index.tsx | 0
.../RuleStack/RuleStack.container.tsx | 2 +-
.../{ => sections}/RuleStack/RuleStack.types.ts | 0
.../{ => sections}/RuleStack/RuleStack.view.tsx | 10 +++++-----
app/components/{ => sections}/RuleStack/index.tsx | 0
app/components/{ => sections}/SectionHeader.tsx | 2 +-
app/components/{ => sections}/SectionNumber.tsx | 2 +-
.../ContentLockup/ContentLockup.container.tsx | 2 +-
.../ContentLockup/ContentLockup.types.ts | 0
.../ContentLockup/ContentLockup.view.tsx | 4 ++--
app/components/{ => type}/ContentLockup/index.tsx | 0
app/components/{ => utility}/AvatarContainer.tsx | 2 +-
app/components/{ => utility}/ErrorBoundary.tsx | 2 +-
app/components/{ => utility}/ImagePlaceholder.tsx | 2 +-
.../{ => utility}/ModalFooter/ModalFooter.types.ts | 0
.../{ => utility}/ModalFooter/ModalFooter.view.tsx | 6 +++---
app/components/{ => utility}/ModalFooter/index.tsx | 0
.../{ => utility}/ModalHeader/ModalHeader.types.ts | 0
.../{ => utility}/ModalHeader/ModalHeader.view.tsx | 2 +-
app/components/{ => utility}/ModalHeader/index.tsx | 0
app/components/{ => utility}/Separator.tsx | 0
app/layout.tsx | 2 +-
app/learn/page.tsx | 4 ++--
app/monitor/page.tsx | 4 ++--
app/page.tsx | 14 +++++++-------
stories/Checkbox.stories.js | 2 +-
stories/RadioButton.stories.js | 2 +-
stories/RuleCard.stories.js | 2 +-
tests/pages/user-journey.test.jsx | 4 ++--
tests/unit/RuleCard.test.jsx | 2 +-
tests/unit/RuleStack.test.jsx | 2 +-
161 files changed, 145 insertions(+), 145 deletions(-)
rename app/components/{ => buttons}/Button.tsx (98%)
rename app/components/{ => cards}/IconCard/IconCard.container.tsx (100%)
rename app/components/{ => cards}/IconCard/IconCard.types.ts (100%)
rename app/components/{ => cards}/IconCard/IconCard.view.tsx (100%)
rename app/components/{ => cards}/IconCard/index.tsx (100%)
rename app/components/{ => cards}/NumberCard.tsx (97%)
rename app/components/{ => cards}/RuleCard/RuleCard.container.tsx (96%)
rename app/components/{ => cards}/RuleCard/RuleCard.types.ts (93%)
rename app/components/{ => cards}/RuleCard/RuleCard.view.tsx (98%)
rename app/components/{ => cards}/RuleCard/index.tsx (100%)
rename app/components/{ => controls}/Checkbox/Checkbox.container.tsx (97%)
rename app/components/{ => controls}/Checkbox/Checkbox.types.ts (94%)
rename app/components/{ => controls}/Checkbox/Checkbox.view.tsx (100%)
rename app/components/{ => controls}/Checkbox/index.tsx (100%)
rename app/components/{ => controls}/CheckboxGroup/CheckboxGroup.container.tsx (96%)
rename app/components/{ => controls}/CheckboxGroup/CheckboxGroup.types.ts (92%)
rename app/components/{ => controls}/CheckboxGroup/CheckboxGroup.view.tsx (100%)
rename app/components/{ => controls}/CheckboxGroup/index.tsx (100%)
rename app/components/{ => controls}/Chip/Chip.container.tsx (98%)
rename app/components/{ => controls}/Chip/Chip.types.ts (97%)
rename app/components/{ => controls}/Chip/Chip.view.tsx (100%)
rename app/components/{ => controls}/Chip/index.tsx (100%)
rename app/components/{ => controls}/InputWithCounter/InputWithCounter.types.ts (100%)
rename app/components/{ => controls}/InputWithCounter/InputWithCounter.view.tsx (100%)
rename app/components/{ => controls}/InputWithCounter/index.tsx (100%)
rename app/components/{ => controls}/MultiSelect/MultiSelect.container.tsx (97%)
rename app/components/{ => controls}/MultiSelect/MultiSelect.types.ts (98%)
rename app/components/{ => controls}/MultiSelect/MultiSelect.view.tsx (99%)
rename app/components/{ => controls}/MultiSelect/index.tsx (100%)
rename app/components/{ => controls}/RadioButton/RadioButton.container.tsx (98%)
rename app/components/{ => controls}/RadioButton/RadioButton.types.ts (94%)
rename app/components/{ => controls}/RadioButton/RadioButton.view.tsx (100%)
rename app/components/{ => controls}/RadioButton/index.tsx (100%)
rename app/components/{ => controls}/RadioGroup/RadioGroup.container.tsx (94%)
rename app/components/{ => controls}/RadioGroup/RadioGroup.types.ts (93%)
rename app/components/{ => controls}/RadioGroup/RadioGroup.view.tsx (100%)
rename app/components/{ => controls}/RadioGroup/index.tsx (100%)
rename app/components/{ => controls}/SelectInput/SelectInput.container.tsx (98%)
rename app/components/{ => controls}/SelectInput/SelectInput.types.ts (94%)
rename app/components/{ => controls}/SelectInput/SelectInput.view.tsx (97%)
rename app/components/{ => controls}/SelectInput/index.tsx (100%)
rename app/components/{ => controls}/Switch/Switch.container.tsx (98%)
rename app/components/{ => controls}/Switch/Switch.types.ts (94%)
rename app/components/{ => controls}/Switch/Switch.view.tsx (100%)
rename app/components/{ => controls}/Switch/index.tsx (100%)
rename app/components/{ => controls}/TextArea/TextArea.container.tsx (97%)
rename app/components/{ => controls}/TextArea/TextArea.types.ts (96%)
rename app/components/{ => controls}/TextArea/TextArea.view.tsx (100%)
rename app/components/{ => controls}/TextArea/index.tsx (100%)
rename app/components/{ => controls}/TextInput/TextInput.container.tsx (98%)
rename app/components/{ => controls}/TextInput/TextInput.types.ts (95%)
rename app/components/{ => controls}/TextInput/TextInput.view.tsx (97%)
rename app/components/{ => controls}/TextInput/index.tsx (100%)
rename app/components/{ => controls}/Toggle/Toggle.container.tsx (98%)
rename app/components/{ => controls}/Toggle/Toggle.types.ts (95%)
rename app/components/{ => controls}/Toggle/Toggle.view.tsx (100%)
rename app/components/{ => controls}/Toggle/index.tsx (100%)
rename app/components/{ => controls}/ToggleGroup/ToggleGroup.container.tsx (99%)
rename app/components/{ => controls}/ToggleGroup/ToggleGroup.types.ts (95%)
rename app/components/{ => controls}/ToggleGroup/ToggleGroup.view.tsx (100%)
rename app/components/{ => controls}/ToggleGroup/index.tsx (100%)
rename app/components/{ => icons}/Avatar.tsx (95%)
rename app/components/{ => icons}/Logo.tsx (98%)
rename app/components/{ => modals}/Alert/Alert.container.tsx (99%)
rename app/components/{ => modals}/Alert/Alert.types.ts (100%)
rename app/components/{ => modals}/Alert/Alert.view.tsx (98%)
rename app/components/{ => modals}/Alert/index.tsx (100%)
rename app/components/{ => modals}/Create/Create.container.tsx (100%)
rename app/components/{ => modals}/Create/Create.types.ts (100%)
rename app/components/{ => modals}/Create/Create.view.tsx (93%)
rename app/components/{ => modals}/Create/index.tsx (100%)
rename app/components/{ => modals}/Tooltip/Tooltip.container.tsx (96%)
rename app/components/{ => modals}/Tooltip/Tooltip.types.ts (100%)
rename app/components/{ => modals}/Tooltip/Tooltip.view.tsx (100%)
rename app/components/{ => modals}/Tooltip/index.tsx (100%)
rename app/components/{ => navigation}/Footer.tsx (97%)
rename app/components/{ => navigation}/Header/Header.container.tsx (92%)
rename app/components/{ => navigation}/Header/Header.types.ts (100%)
rename app/components/{ => navigation}/Header/Header.view.tsx (98%)
rename app/components/{ => navigation}/Header/index.tsx (100%)
rename app/components/{ => navigation}/HeaderTab.tsx (97%)
rename app/components/{ => navigation}/HomeHeader/HomeHeader.container.tsx (94%)
rename app/components/{ => navigation}/HomeHeader/HomeHeader.types.ts (100%)
rename app/components/{ => navigation}/HomeHeader/HomeHeader.view.tsx (98%)
rename app/components/{ => navigation}/HomeHeader/index.tsx (100%)
rename app/components/{ => navigation}/MenuBar.tsx (92%)
rename app/components/{ => navigation}/MenuBarItem/MenuBarItem.container.tsx (99%)
rename app/components/{ => navigation}/MenuBarItem/MenuBarItem.types.ts (100%)
rename app/components/{ => navigation}/MenuBarItem/MenuBarItem.view.tsx (100%)
rename app/components/{ => navigation}/MenuBarItem/index.tsx (100%)
rename app/components/{ => navigation}/NavigationItem/NavigationItem.container.tsx (98%)
rename app/components/{ => navigation}/NavigationItem/NavigationItem.types.ts (100%)
rename app/components/{ => navigation}/NavigationItem/NavigationItem.view.tsx (100%)
rename app/components/{ => navigation}/NavigationItem/index.tsx (100%)
rename app/components/{ => progress}/Progress/Progress.container.tsx (100%)
rename app/components/{ => progress}/Progress/Progress.types.ts (100%)
rename app/components/{ => progress}/Progress/Progress.view.tsx (100%)
rename app/components/{ => progress/Progress}/Stepper/Stepper.container.tsx (100%)
rename app/components/{ => progress/Progress}/Stepper/Stepper.types.ts (100%)
rename app/components/{ => progress/Progress}/Stepper/Stepper.view.tsx (100%)
rename app/components/{ => progress/Progress}/Stepper/index.tsx (100%)
rename app/components/{ => progress}/Progress/index.tsx (100%)
rename app/components/{ => sections}/AskOrganizer/AskOrganizer.container.tsx (94%)
rename app/components/{ => sections}/AskOrganizer/AskOrganizer.types.ts (100%)
rename app/components/{ => sections}/AskOrganizer/AskOrganizer.view.tsx (90%)
rename app/components/{ => sections}/AskOrganizer/index.tsx (100%)
rename app/components/{ => sections}/ContentBanner.tsx (94%)
rename app/components/{ => sections}/FeatureGrid/FeatureGrid.container.tsx (97%)
rename app/components/{ => sections}/FeatureGrid/FeatureGrid.types.ts (100%)
rename app/components/{ => sections}/FeatureGrid/FeatureGrid.view.tsx (93%)
rename app/components/{ => sections}/FeatureGrid/index.tsx (100%)
rename app/components/{ => sections}/HeroBanner.tsx (92%)
rename app/components/{ => sections}/LogoWall/LogoWall.container.tsx (100%)
rename app/components/{ => sections}/LogoWall/LogoWall.types.ts (100%)
rename app/components/{ => sections}/LogoWall/LogoWall.view.tsx (100%)
rename app/components/{ => sections}/LogoWall/index.tsx (100%)
rename app/components/{ => sections}/NumberedCards/NumberedCards.container.tsx (94%)
rename app/components/{ => sections}/NumberedCards/NumberedCards.types.ts (100%)
rename app/components/{ => sections}/NumberedCards/NumberedCards.view.tsx (93%)
rename app/components/{ => sections}/NumberedCards/index.tsx (100%)
rename app/components/{ => sections}/QuoteBlock/QuoteBlock.container.tsx (97%)
rename app/components/{ => sections}/QuoteBlock/QuoteBlock.types.ts (100%)
rename app/components/{ => sections}/QuoteBlock/QuoteBlock.view.tsx (98%)
rename app/components/{ => sections}/QuoteBlock/index.tsx (100%)
rename app/components/{ => sections}/RelatedArticles/RelatedArticles.container.tsx (98%)
rename app/components/{ => sections}/RelatedArticles/RelatedArticles.types.ts (87%)
rename app/components/{ => sections}/RelatedArticles/RelatedArticles.view.tsx (97%)
rename app/components/{ => sections}/RelatedArticles/index.tsx (100%)
rename app/components/{ => sections}/RuleStack/RuleStack.container.tsx (95%)
rename app/components/{ => sections}/RuleStack/RuleStack.types.ts (100%)
rename app/components/{ => sections}/RuleStack/RuleStack.view.tsx (95%)
rename app/components/{ => sections}/RuleStack/index.tsx (100%)
rename app/components/{ => sections}/SectionHeader.tsx (97%)
rename app/components/{ => sections}/SectionNumber.tsx (95%)
rename app/components/{ => type}/ContentLockup/ContentLockup.container.tsx (99%)
rename app/components/{ => type}/ContentLockup/ContentLockup.types.ts (100%)
rename app/components/{ => type}/ContentLockup/ContentLockup.view.tsx (97%)
rename app/components/{ => type}/ContentLockup/index.tsx (100%)
rename app/components/{ => utility}/AvatarContainer.tsx (95%)
rename app/components/{ => utility}/ErrorBoundary.tsx (97%)
rename app/components/{ => utility}/ImagePlaceholder.tsx (95%)
rename app/components/{ => utility}/ModalFooter/ModalFooter.types.ts (100%)
rename app/components/{ => utility}/ModalFooter/ModalFooter.view.tsx (91%)
rename app/components/{ => utility}/ModalFooter/index.tsx (100%)
rename app/components/{ => utility}/ModalHeader/ModalHeader.types.ts (100%)
rename app/components/{ => utility}/ModalHeader/ModalHeader.view.tsx (96%)
rename app/components/{ => utility}/ModalHeader/index.tsx (100%)
rename app/components/{ => utility}/Separator.tsx (100%)
diff --git a/app/blog/[slug]/page.tsx b/app/blog/[slug]/page.tsx
index 82d3263..a874791 100644
--- a/app/blog/[slug]/page.tsx
+++ b/app/blog/[slug]/page.tsx
@@ -7,14 +7,14 @@ import {
type BlogPost,
} from "../../../lib/content";
import { logger } from "../../../lib/logger";
-import ContentBanner from "../../components/ContentBanner";
-import AskOrganizer from "../../components/AskOrganizer";
+import ContentBanner from "../../components/sections/ContentBanner";
+import AskOrganizer from "../../components/sections/AskOrganizer";
import { getAssetPath, ASSETS } from "../../../lib/assetUtils";
import "../blog.css";
// Code split RelatedArticles - blog-specific, below the fold
const RelatedArticles = dynamic(
- () => import("../../components/RelatedArticles"),
+ () => import("../../components/sections/RelatedArticles"),
{
loading: () => (
diff --git a/app/components-preview/page.tsx b/app/components-preview/page.tsx
index 315a6f5..c02a602 100644
--- a/app/components-preview/page.tsx
+++ b/app/components-preview/page.tsx
@@ -1,9 +1,9 @@
"use client";
import { useState } from "react";
-import RuleCard from "../components/RuleCard";
-import Chip from "../components/Chip";
-import MultiSelect from "../components/MultiSelect";
+import RuleCard from "../components/cards/RuleCard";
+import Chip from "../components/controls/Chip";
+import MultiSelect from "../components/controls/MultiSelect";
import Image from "next/image";
import { getAssetPath } from "../../lib/assetUtils";
diff --git a/app/components/ConditionalHeader/ConditionalHeader.view.tsx b/app/components/ConditionalHeader/ConditionalHeader.view.tsx
index ff36612..7f50389 100644
--- a/app/components/ConditionalHeader/ConditionalHeader.view.tsx
+++ b/app/components/ConditionalHeader/ConditionalHeader.view.tsx
@@ -1,5 +1,5 @@
-import HomeHeader from "../HomeHeader";
-import Header from "../Header";
+import HomeHeader from "../navigation/HomeHeader";
+import Header from "../navigation/Header";
import type { ConditionalHeaderViewProps } from "./ConditionalHeader.types";
export function ConditionalHeaderView({
diff --git a/app/components/Button.tsx b/app/components/buttons/Button.tsx
similarity index 98%
rename from app/components/Button.tsx
rename to app/components/buttons/Button.tsx
index dcd65bb..42aece7 100644
--- a/app/components/Button.tsx
+++ b/app/components/buttons/Button.tsx
@@ -1,6 +1,6 @@
import { memo } from "react";
-import type { VariantValue, SizeValue } from "../../lib/propNormalization";
-import { normalizeVariant, normalizeSize } from "../../lib/propNormalization";
+import type { VariantValue, SizeValue } from "../../../lib/propNormalization";
+import { normalizeVariant, normalizeSize } from "../../../lib/propNormalization";
interface ButtonProps extends React.ButtonHTMLAttributes {
children: React.ReactNode;
diff --git a/app/components/IconCard/IconCard.container.tsx b/app/components/cards/IconCard/IconCard.container.tsx
similarity index 100%
rename from app/components/IconCard/IconCard.container.tsx
rename to app/components/cards/IconCard/IconCard.container.tsx
diff --git a/app/components/IconCard/IconCard.types.ts b/app/components/cards/IconCard/IconCard.types.ts
similarity index 100%
rename from app/components/IconCard/IconCard.types.ts
rename to app/components/cards/IconCard/IconCard.types.ts
diff --git a/app/components/IconCard/IconCard.view.tsx b/app/components/cards/IconCard/IconCard.view.tsx
similarity index 100%
rename from app/components/IconCard/IconCard.view.tsx
rename to app/components/cards/IconCard/IconCard.view.tsx
diff --git a/app/components/IconCard/index.tsx b/app/components/cards/IconCard/index.tsx
similarity index 100%
rename from app/components/IconCard/index.tsx
rename to app/components/cards/IconCard/index.tsx
diff --git a/app/components/NumberCard.tsx b/app/components/cards/NumberCard.tsx
similarity index 97%
rename from app/components/NumberCard.tsx
rename to app/components/cards/NumberCard.tsx
index c1722a3..cddb2b5 100644
--- a/app/components/NumberCard.tsx
+++ b/app/components/cards/NumberCard.tsx
@@ -1,9 +1,9 @@
"use client";
import { memo } from "react";
-import SectionNumber from "./SectionNumber";
+import SectionNumber from "../sections/SectionNumber";
-import { normalizeNumberCardSize } from "../../lib/propNormalization";
+import { normalizeNumberCardSize } from "../../../lib/propNormalization";
export type NumberCardSizeValue =
| "Small"
diff --git a/app/components/RuleCard/RuleCard.container.tsx b/app/components/cards/RuleCard/RuleCard.container.tsx
similarity index 96%
rename from app/components/RuleCard/RuleCard.container.tsx
rename to app/components/cards/RuleCard/RuleCard.container.tsx
index 84105b6..6e55e42 100644
--- a/app/components/RuleCard/RuleCard.container.tsx
+++ b/app/components/cards/RuleCard/RuleCard.container.tsx
@@ -3,7 +3,7 @@
import { memo } from "react";
import { RuleCardView } from "./RuleCard.view";
import type { RuleCardProps } from "./RuleCard.types";
-import { normalizeRuleCardSize } from "../../../lib/propNormalization";
+import { normalizeRuleCardSize } from "../../../../lib/propNormalization";
declare global {
interface Window {
diff --git a/app/components/RuleCard/RuleCard.types.ts b/app/components/cards/RuleCard/RuleCard.types.ts
similarity index 93%
rename from app/components/RuleCard/RuleCard.types.ts
rename to app/components/cards/RuleCard/RuleCard.types.ts
index 3ebe9ce..516f9ed 100644
--- a/app/components/RuleCard/RuleCard.types.ts
+++ b/app/components/cards/RuleCard/RuleCard.types.ts
@@ -1,4 +1,4 @@
-import type { ChipOption } from "../MultiSelect/MultiSelect.types";
+import type { ChipOption } from "../../controls/MultiSelect/MultiSelect.types";
export interface Category {
name: string;
diff --git a/app/components/RuleCard/RuleCard.view.tsx b/app/components/cards/RuleCard/RuleCard.view.tsx
similarity index 98%
rename from app/components/RuleCard/RuleCard.view.tsx
rename to app/components/cards/RuleCard/RuleCard.view.tsx
index bdd2625..5cdea94 100644
--- a/app/components/RuleCard/RuleCard.view.tsx
+++ b/app/components/cards/RuleCard/RuleCard.view.tsx
@@ -1,8 +1,8 @@
"use client";
import Image from "next/image";
-import { useTranslation } from "../../contexts/MessagesContext";
-import MultiSelect from "../MultiSelect";
+import { useTranslation } from "../../../contexts/MessagesContext";
+import MultiSelect from "../../controls/MultiSelect";
import type { RuleCardViewProps } from "./RuleCard.types";
export function RuleCardView({
diff --git a/app/components/RuleCard/index.tsx b/app/components/cards/RuleCard/index.tsx
similarity index 100%
rename from app/components/RuleCard/index.tsx
rename to app/components/cards/RuleCard/index.tsx
diff --git a/app/components/Checkbox/Checkbox.container.tsx b/app/components/controls/Checkbox/Checkbox.container.tsx
similarity index 97%
rename from app/components/Checkbox/Checkbox.container.tsx
rename to app/components/controls/Checkbox/Checkbox.container.tsx
index 42c531b..7650f3a 100644
--- a/app/components/Checkbox/Checkbox.container.tsx
+++ b/app/components/controls/Checkbox/Checkbox.container.tsx
@@ -1,10 +1,10 @@
"use client";
import { memo } from "react";
-import { useComponentId } from "../../hooks";
+import { useComponentId } from "../../../hooks";
import { CheckboxView } from "./Checkbox.view";
import type { CheckboxProps } from "./Checkbox.types";
-import { normalizeMode, normalizeState } from "../../../lib/propNormalization";
+import { normalizeMode, normalizeState } from "../../../../lib/propNormalization";
const CheckboxContainer = memo(
({
diff --git a/app/components/Checkbox/Checkbox.types.ts b/app/components/controls/Checkbox/Checkbox.types.ts
similarity index 94%
rename from app/components/Checkbox/Checkbox.types.ts
rename to app/components/controls/Checkbox/Checkbox.types.ts
index c6cd369..f292633 100644
--- a/app/components/Checkbox/Checkbox.types.ts
+++ b/app/components/controls/Checkbox/Checkbox.types.ts
@@ -1,4 +1,4 @@
-import type { ModeValue, StateValue } from "../../../lib/propNormalization";
+import type { ModeValue, StateValue } from "../../../../lib/propNormalization";
export interface CheckboxProps {
checked?: boolean;
diff --git a/app/components/Checkbox/Checkbox.view.tsx b/app/components/controls/Checkbox/Checkbox.view.tsx
similarity index 100%
rename from app/components/Checkbox/Checkbox.view.tsx
rename to app/components/controls/Checkbox/Checkbox.view.tsx
diff --git a/app/components/Checkbox/index.tsx b/app/components/controls/Checkbox/index.tsx
similarity index 100%
rename from app/components/Checkbox/index.tsx
rename to app/components/controls/Checkbox/index.tsx
diff --git a/app/components/CheckboxGroup/CheckboxGroup.container.tsx b/app/components/controls/CheckboxGroup/CheckboxGroup.container.tsx
similarity index 96%
rename from app/components/CheckboxGroup/CheckboxGroup.container.tsx
rename to app/components/controls/CheckboxGroup/CheckboxGroup.container.tsx
index cde1c3c..2fac6e8 100644
--- a/app/components/CheckboxGroup/CheckboxGroup.container.tsx
+++ b/app/components/controls/CheckboxGroup/CheckboxGroup.container.tsx
@@ -3,7 +3,7 @@
import { memo, useCallback, useId, useState } from "react";
import { CheckboxGroupView } from "./CheckboxGroup.view";
import type { CheckboxGroupProps } from "./CheckboxGroup.types";
-import { normalizeMode } from "../../../lib/propNormalization";
+import { normalizeMode } from "../../../../lib/propNormalization";
const CheckboxGroupContainer = ({
name,
diff --git a/app/components/CheckboxGroup/CheckboxGroup.types.ts b/app/components/controls/CheckboxGroup/CheckboxGroup.types.ts
similarity index 92%
rename from app/components/CheckboxGroup/CheckboxGroup.types.ts
rename to app/components/controls/CheckboxGroup/CheckboxGroup.types.ts
index 2c1e6a5..2a4b9be 100644
--- a/app/components/CheckboxGroup/CheckboxGroup.types.ts
+++ b/app/components/controls/CheckboxGroup/CheckboxGroup.types.ts
@@ -5,7 +5,7 @@ export interface CheckboxOption {
ariaLabel?: string;
}
-import type { ModeValue } from "../../../lib/propNormalization";
+import type { ModeValue } from "../../../../lib/propNormalization";
export interface CheckboxGroupProps {
name?: string;
diff --git a/app/components/CheckboxGroup/CheckboxGroup.view.tsx b/app/components/controls/CheckboxGroup/CheckboxGroup.view.tsx
similarity index 100%
rename from app/components/CheckboxGroup/CheckboxGroup.view.tsx
rename to app/components/controls/CheckboxGroup/CheckboxGroup.view.tsx
diff --git a/app/components/CheckboxGroup/index.tsx b/app/components/controls/CheckboxGroup/index.tsx
similarity index 100%
rename from app/components/CheckboxGroup/index.tsx
rename to app/components/controls/CheckboxGroup/index.tsx
diff --git a/app/components/Chip/Chip.container.tsx b/app/components/controls/Chip/Chip.container.tsx
similarity index 98%
rename from app/components/Chip/Chip.container.tsx
rename to app/components/controls/Chip/Chip.container.tsx
index d26acec..9fcb8ed 100644
--- a/app/components/Chip/Chip.container.tsx
+++ b/app/components/controls/Chip/Chip.container.tsx
@@ -7,7 +7,7 @@ import {
normalizeChipPalette,
normalizeChipSize,
normalizeChipState,
-} from "../../../lib/propNormalization";
+} from "../../../../lib/propNormalization";
const ChipContainer = memo(
({
diff --git a/app/components/Chip/Chip.types.ts b/app/components/controls/Chip/Chip.types.ts
similarity index 97%
rename from app/components/Chip/Chip.types.ts
rename to app/components/controls/Chip/Chip.types.ts
index 0a240b3..13ca6ed 100644
--- a/app/components/Chip/Chip.types.ts
+++ b/app/components/controls/Chip/Chip.types.ts
@@ -2,7 +2,7 @@ import type {
ChipPaletteValue,
ChipSizeValue,
ChipStateValue,
-} from "../../../lib/propNormalization";
+} from "../../../../lib/propNormalization";
export interface ChipProps {
label: string;
diff --git a/app/components/Chip/Chip.view.tsx b/app/components/controls/Chip/Chip.view.tsx
similarity index 100%
rename from app/components/Chip/Chip.view.tsx
rename to app/components/controls/Chip/Chip.view.tsx
diff --git a/app/components/Chip/index.tsx b/app/components/controls/Chip/index.tsx
similarity index 100%
rename from app/components/Chip/index.tsx
rename to app/components/controls/Chip/index.tsx
diff --git a/app/components/InputWithCounter/InputWithCounter.types.ts b/app/components/controls/InputWithCounter/InputWithCounter.types.ts
similarity index 100%
rename from app/components/InputWithCounter/InputWithCounter.types.ts
rename to app/components/controls/InputWithCounter/InputWithCounter.types.ts
diff --git a/app/components/InputWithCounter/InputWithCounter.view.tsx b/app/components/controls/InputWithCounter/InputWithCounter.view.tsx
similarity index 100%
rename from app/components/InputWithCounter/InputWithCounter.view.tsx
rename to app/components/controls/InputWithCounter/InputWithCounter.view.tsx
diff --git a/app/components/InputWithCounter/index.tsx b/app/components/controls/InputWithCounter/index.tsx
similarity index 100%
rename from app/components/InputWithCounter/index.tsx
rename to app/components/controls/InputWithCounter/index.tsx
diff --git a/app/components/MultiSelect/MultiSelect.container.tsx b/app/components/controls/MultiSelect/MultiSelect.container.tsx
similarity index 97%
rename from app/components/MultiSelect/MultiSelect.container.tsx
rename to app/components/controls/MultiSelect/MultiSelect.container.tsx
index 1613576..7691976 100644
--- a/app/components/MultiSelect/MultiSelect.container.tsx
+++ b/app/components/controls/MultiSelect/MultiSelect.container.tsx
@@ -3,7 +3,7 @@
import { memo } from "react";
import MultiSelectView from "./MultiSelect.view";
import type { MultiSelectProps } from "./MultiSelect.types";
-import { normalizeMultiSelectSize, normalizeChipPalette } from "../../../lib/propNormalization";
+import { normalizeMultiSelectSize, normalizeChipPalette } from "../../../../lib/propNormalization";
const MultiSelectContainer = memo(
({
diff --git a/app/components/MultiSelect/MultiSelect.types.ts b/app/components/controls/MultiSelect/MultiSelect.types.ts
similarity index 98%
rename from app/components/MultiSelect/MultiSelect.types.ts
rename to app/components/controls/MultiSelect/MultiSelect.types.ts
index 9c035cc..634727c 100644
--- a/app/components/MultiSelect/MultiSelect.types.ts
+++ b/app/components/controls/MultiSelect/MultiSelect.types.ts
@@ -1,4 +1,4 @@
-import type { ChipStateValue, ChipPaletteValue } from "../../../lib/propNormalization";
+import type { ChipStateValue, ChipPaletteValue } from "../../../../lib/propNormalization";
export interface ChipOption {
id: string;
diff --git a/app/components/MultiSelect/MultiSelect.view.tsx b/app/components/controls/MultiSelect/MultiSelect.view.tsx
similarity index 99%
rename from app/components/MultiSelect/MultiSelect.view.tsx
rename to app/components/controls/MultiSelect/MultiSelect.view.tsx
index b1d2197..5201008 100644
--- a/app/components/MultiSelect/MultiSelect.view.tsx
+++ b/app/components/controls/MultiSelect/MultiSelect.view.tsx
@@ -2,7 +2,7 @@
import { memo } from "react";
import Chip from "../Chip";
-import InputLabel from "../InputLabel";
+import InputLabel from "../../InputLabel";
import type { MultiSelectViewProps } from "./MultiSelect.types";
function MultiSelectView({
diff --git a/app/components/MultiSelect/index.tsx b/app/components/controls/MultiSelect/index.tsx
similarity index 100%
rename from app/components/MultiSelect/index.tsx
rename to app/components/controls/MultiSelect/index.tsx
diff --git a/app/components/RadioButton/RadioButton.container.tsx b/app/components/controls/RadioButton/RadioButton.container.tsx
similarity index 98%
rename from app/components/RadioButton/RadioButton.container.tsx
rename to app/components/controls/RadioButton/RadioButton.container.tsx
index 24628b6..0f11b2d 100644
--- a/app/components/RadioButton/RadioButton.container.tsx
+++ b/app/components/controls/RadioButton/RadioButton.container.tsx
@@ -3,7 +3,7 @@
import { memo, useCallback, useId } from "react";
import { RadioButtonView } from "./RadioButton.view";
import type { RadioButtonProps } from "./RadioButton.types";
-import { normalizeMode, normalizeState } from "../../../lib/propNormalization";
+import { normalizeMode, normalizeState } from "../../../../lib/propNormalization";
const RadioButtonContainer = ({
checked = false,
diff --git a/app/components/RadioButton/RadioButton.types.ts b/app/components/controls/RadioButton/RadioButton.types.ts
similarity index 94%
rename from app/components/RadioButton/RadioButton.types.ts
rename to app/components/controls/RadioButton/RadioButton.types.ts
index 63900c7..48cc32a 100644
--- a/app/components/RadioButton/RadioButton.types.ts
+++ b/app/components/controls/RadioButton/RadioButton.types.ts
@@ -1,4 +1,4 @@
-import type { ModeValue, StateValue } from "../../../lib/propNormalization";
+import type { ModeValue, StateValue } from "../../../../lib/propNormalization";
export interface RadioButtonProps {
checked?: boolean;
diff --git a/app/components/RadioButton/RadioButton.view.tsx b/app/components/controls/RadioButton/RadioButton.view.tsx
similarity index 100%
rename from app/components/RadioButton/RadioButton.view.tsx
rename to app/components/controls/RadioButton/RadioButton.view.tsx
diff --git a/app/components/RadioButton/index.tsx b/app/components/controls/RadioButton/index.tsx
similarity index 100%
rename from app/components/RadioButton/index.tsx
rename to app/components/controls/RadioButton/index.tsx
diff --git a/app/components/RadioGroup/RadioGroup.container.tsx b/app/components/controls/RadioGroup/RadioGroup.container.tsx
similarity index 94%
rename from app/components/RadioGroup/RadioGroup.container.tsx
rename to app/components/controls/RadioGroup/RadioGroup.container.tsx
index 25695c7..8217652 100644
--- a/app/components/RadioGroup/RadioGroup.container.tsx
+++ b/app/components/controls/RadioGroup/RadioGroup.container.tsx
@@ -3,7 +3,7 @@
import { memo, useCallback, useId } from "react";
import { RadioGroupView } from "./RadioGroup.view";
import type { RadioGroupProps } from "./RadioGroup.types";
-import { normalizeMode, normalizeState } from "../../../lib/propNormalization";
+import { normalizeMode, normalizeState } from "../../../../lib/propNormalization";
const RadioGroupContainer = ({
name,
diff --git a/app/components/RadioGroup/RadioGroup.types.ts b/app/components/controls/RadioGroup/RadioGroup.types.ts
similarity index 93%
rename from app/components/RadioGroup/RadioGroup.types.ts
rename to app/components/controls/RadioGroup/RadioGroup.types.ts
index f1588b5..2a6ef2e 100644
--- a/app/components/RadioGroup/RadioGroup.types.ts
+++ b/app/components/controls/RadioGroup/RadioGroup.types.ts
@@ -5,7 +5,7 @@ export interface RadioOption {
ariaLabel?: string;
}
-import type { ModeValue, StateValue } from "../../../lib/propNormalization";
+import type { ModeValue, StateValue } from "../../../../lib/propNormalization";
export interface RadioGroupProps {
name?: string;
diff --git a/app/components/RadioGroup/RadioGroup.view.tsx b/app/components/controls/RadioGroup/RadioGroup.view.tsx
similarity index 100%
rename from app/components/RadioGroup/RadioGroup.view.tsx
rename to app/components/controls/RadioGroup/RadioGroup.view.tsx
diff --git a/app/components/RadioGroup/index.tsx b/app/components/controls/RadioGroup/index.tsx
similarity index 100%
rename from app/components/RadioGroup/index.tsx
rename to app/components/controls/RadioGroup/index.tsx
diff --git a/app/components/SelectInput/SelectInput.container.tsx b/app/components/controls/SelectInput/SelectInput.container.tsx
similarity index 98%
rename from app/components/SelectInput/SelectInput.container.tsx
rename to app/components/controls/SelectInput/SelectInput.container.tsx
index 76add96..63c1338 100644
--- a/app/components/SelectInput/SelectInput.container.tsx
+++ b/app/components/controls/SelectInput/SelectInput.container.tsx
@@ -13,10 +13,10 @@ import React, {
useImperativeHandle,
useEffect,
} from "react";
-import { useClickOutside } from "../../hooks";
+import { useClickOutside } from "../../../hooks";
import { SelectInputView } from "./SelectInput.view";
import type { SelectInputProps } from "./SelectInput.types";
-import { normalizeState, normalizeSmallMediumLargeSize, normalizeLabelVariant } from "../../../lib/propNormalization";
+import { normalizeState, normalizeSmallMediumLargeSize, normalizeLabelVariant } from "../../../../lib/propNormalization";
const SelectInputContainer = forwardRef(
(
diff --git a/app/components/SelectInput/SelectInput.types.ts b/app/components/controls/SelectInput/SelectInput.types.ts
similarity index 94%
rename from app/components/SelectInput/SelectInput.types.ts
rename to app/components/controls/SelectInput/SelectInput.types.ts
index 364b800..3dbb427 100644
--- a/app/components/SelectInput/SelectInput.types.ts
+++ b/app/components/controls/SelectInput/SelectInput.types.ts
@@ -5,7 +5,7 @@ export interface SelectOptionData {
label: string;
}
-import type { StateValue } from "../../../lib/propNormalization";
+import type { StateValue } from "../../../../lib/propNormalization";
export type SelectInputLabelVariantValue = "default" | "horizontal" | "Default" | "Horizontal";
export type SelectInputSizeValue = "small" | "medium" | "large" | "Small" | "Medium" | "Large";
diff --git a/app/components/SelectInput/SelectInput.view.tsx b/app/components/controls/SelectInput/SelectInput.view.tsx
similarity index 97%
rename from app/components/SelectInput/SelectInput.view.tsx
rename to app/components/controls/SelectInput/SelectInput.view.tsx
index ba8b9a7..941ede5 100644
--- a/app/components/SelectInput/SelectInput.view.tsx
+++ b/app/components/controls/SelectInput/SelectInput.view.tsx
@@ -1,7 +1,7 @@
import React, { Children, type ReactNode } from "react";
-import { getAssetPath, ASSETS } from "../../../lib/assetUtils";
-import SelectDropdown from "../SelectDropdown";
-import SelectOption from "../SelectOption";
+import { getAssetPath, ASSETS } from "../../../../lib/assetUtils";
+import SelectDropdown from "../../SelectDropdown";
+import SelectOption from "../../SelectOption";
import type { SelectOptionData } from "./SelectInput.types";
export interface SelectInputViewProps {
diff --git a/app/components/SelectInput/index.tsx b/app/components/controls/SelectInput/index.tsx
similarity index 100%
rename from app/components/SelectInput/index.tsx
rename to app/components/controls/SelectInput/index.tsx
diff --git a/app/components/Switch/Switch.container.tsx b/app/components/controls/Switch/Switch.container.tsx
similarity index 98%
rename from app/components/Switch/Switch.container.tsx
rename to app/components/controls/Switch/Switch.container.tsx
index 64602b5..6844f8e 100644
--- a/app/components/Switch/Switch.container.tsx
+++ b/app/components/controls/Switch/Switch.container.tsx
@@ -3,7 +3,7 @@
import { memo, useCallback, useId, forwardRef } from "react";
import { SwitchView } from "./Switch.view";
import type { SwitchProps } from "./Switch.types";
-import { normalizeState } from "../../../lib/propNormalization";
+import { normalizeState } from "../../../../lib/propNormalization";
const SwitchContainer = memo(
forwardRef((props, ref) => {
diff --git a/app/components/Switch/Switch.types.ts b/app/components/controls/Switch/Switch.types.ts
similarity index 94%
rename from app/components/Switch/Switch.types.ts
rename to app/components/controls/Switch/Switch.types.ts
index 2bccb8b..2772f11 100644
--- a/app/components/Switch/Switch.types.ts
+++ b/app/components/controls/Switch/Switch.types.ts
@@ -1,4 +1,4 @@
-import type { StateValue } from "../../../lib/propNormalization";
+import type { StateValue } from "../../../../lib/propNormalization";
export interface SwitchProps extends Omit<
React.ButtonHTMLAttributes,
diff --git a/app/components/Switch/Switch.view.tsx b/app/components/controls/Switch/Switch.view.tsx
similarity index 100%
rename from app/components/Switch/Switch.view.tsx
rename to app/components/controls/Switch/Switch.view.tsx
diff --git a/app/components/Switch/index.tsx b/app/components/controls/Switch/index.tsx
similarity index 100%
rename from app/components/Switch/index.tsx
rename to app/components/controls/Switch/index.tsx
diff --git a/app/components/TextArea/TextArea.container.tsx b/app/components/controls/TextArea/TextArea.container.tsx
similarity index 97%
rename from app/components/TextArea/TextArea.container.tsx
rename to app/components/controls/TextArea/TextArea.container.tsx
index 7d99dee..3b1c1d4 100644
--- a/app/components/TextArea/TextArea.container.tsx
+++ b/app/components/controls/TextArea/TextArea.container.tsx
@@ -1,10 +1,10 @@
"use client";
import { memo, forwardRef } from "react";
-import { useComponentId, useFormField } from "../../hooks";
+import { useComponentId, useFormField } from "../../../hooks";
import { TextAreaView } from "./TextArea.view";
import type { TextAreaProps } from "./TextArea.types";
-import { normalizeInputState, normalizeSmallMediumLargeSize, normalizeLabelVariant } from "../../../lib/propNormalization";
+import { normalizeInputState, normalizeSmallMediumLargeSize, normalizeLabelVariant } from "../../../../lib/propNormalization";
const TextAreaContainer = forwardRef(
(
diff --git a/app/components/TextArea/TextArea.types.ts b/app/components/controls/TextArea/TextArea.types.ts
similarity index 96%
rename from app/components/TextArea/TextArea.types.ts
rename to app/components/controls/TextArea/TextArea.types.ts
index 11f158c..559bf0d 100644
--- a/app/components/TextArea/TextArea.types.ts
+++ b/app/components/controls/TextArea/TextArea.types.ts
@@ -1,4 +1,4 @@
-import type { InputStateValue } from "../../../lib/propNormalization";
+import type { InputStateValue } from "../../../../lib/propNormalization";
export type TextAreaSizeValue = "small" | "medium" | "large" | "Small" | "Medium" | "Large";
export type TextAreaLabelVariantValue = "default" | "horizontal" | "Default" | "Horizontal";
diff --git a/app/components/TextArea/TextArea.view.tsx b/app/components/controls/TextArea/TextArea.view.tsx
similarity index 100%
rename from app/components/TextArea/TextArea.view.tsx
rename to app/components/controls/TextArea/TextArea.view.tsx
diff --git a/app/components/TextArea/index.tsx b/app/components/controls/TextArea/index.tsx
similarity index 100%
rename from app/components/TextArea/index.tsx
rename to app/components/controls/TextArea/index.tsx
diff --git a/app/components/TextInput/TextInput.container.tsx b/app/components/controls/TextInput/TextInput.container.tsx
similarity index 98%
rename from app/components/TextInput/TextInput.container.tsx
rename to app/components/controls/TextInput/TextInput.container.tsx
index 4236354..26429cb 100644
--- a/app/components/TextInput/TextInput.container.tsx
+++ b/app/components/controls/TextInput/TextInput.container.tsx
@@ -1,10 +1,10 @@
"use client";
import { memo, forwardRef, useState, useRef } from "react";
-import { useComponentId, useFormField } from "../../hooks";
+import { useComponentId, useFormField } from "../../../hooks";
import { TextInputView } from "./TextInput.view";
import type { TextInputProps } from "./TextInput.types";
-import { normalizeInputState } from "../../../lib/propNormalization";
+import { normalizeInputState } from "../../../../lib/propNormalization";
const TextInputContainer = forwardRef(
(
diff --git a/app/components/TextInput/TextInput.types.ts b/app/components/controls/TextInput/TextInput.types.ts
similarity index 95%
rename from app/components/TextInput/TextInput.types.ts
rename to app/components/controls/TextInput/TextInput.types.ts
index beff4cc..3814d0a 100644
--- a/app/components/TextInput/TextInput.types.ts
+++ b/app/components/controls/TextInput/TextInput.types.ts
@@ -1,4 +1,4 @@
-import type { InputStateValue } from "../../../lib/propNormalization";
+import type { InputStateValue } from "../../../../lib/propNormalization";
export interface TextInputProps extends Omit<
React.InputHTMLAttributes,
diff --git a/app/components/TextInput/TextInput.view.tsx b/app/components/controls/TextInput/TextInput.view.tsx
similarity index 97%
rename from app/components/TextInput/TextInput.view.tsx
rename to app/components/controls/TextInput/TextInput.view.tsx
index c815050..99766d2 100644
--- a/app/components/TextInput/TextInput.view.tsx
+++ b/app/components/controls/TextInput/TextInput.view.tsx
@@ -1,5 +1,5 @@
import { forwardRef } from "react";
-import { getAssetPath, ASSETS } from "../../../lib/assetUtils";
+import { getAssetPath, ASSETS } from "../../../../lib/assetUtils";
import type { TextInputViewProps } from "./TextInput.types";
export const TextInputView = forwardRef(
diff --git a/app/components/TextInput/index.tsx b/app/components/controls/TextInput/index.tsx
similarity index 100%
rename from app/components/TextInput/index.tsx
rename to app/components/controls/TextInput/index.tsx
diff --git a/app/components/Toggle/Toggle.container.tsx b/app/components/controls/Toggle/Toggle.container.tsx
similarity index 98%
rename from app/components/Toggle/Toggle.container.tsx
rename to app/components/controls/Toggle/Toggle.container.tsx
index 197eebe..d6b7fd4 100644
--- a/app/components/Toggle/Toggle.container.tsx
+++ b/app/components/controls/Toggle/Toggle.container.tsx
@@ -3,7 +3,7 @@
import { memo, useCallback, useId, forwardRef } from "react";
import { ToggleView } from "./Toggle.view";
import type { ToggleProps } from "./Toggle.types";
-import { normalizeState } from "../../../lib/propNormalization";
+import { normalizeState } from "../../../../lib/propNormalization";
const ToggleContainer = forwardRef(
(
diff --git a/app/components/Toggle/Toggle.types.ts b/app/components/controls/Toggle/Toggle.types.ts
similarity index 95%
rename from app/components/Toggle/Toggle.types.ts
rename to app/components/controls/Toggle/Toggle.types.ts
index cd09bf5..9dd5517 100644
--- a/app/components/Toggle/Toggle.types.ts
+++ b/app/components/controls/Toggle/Toggle.types.ts
@@ -1,4 +1,4 @@
-import type { StateValue } from "../../../lib/propNormalization";
+import type { StateValue } from "../../../../lib/propNormalization";
export interface ToggleProps extends Omit<
React.ButtonHTMLAttributes,
diff --git a/app/components/Toggle/Toggle.view.tsx b/app/components/controls/Toggle/Toggle.view.tsx
similarity index 100%
rename from app/components/Toggle/Toggle.view.tsx
rename to app/components/controls/Toggle/Toggle.view.tsx
diff --git a/app/components/Toggle/index.tsx b/app/components/controls/Toggle/index.tsx
similarity index 100%
rename from app/components/Toggle/index.tsx
rename to app/components/controls/Toggle/index.tsx
diff --git a/app/components/ToggleGroup/ToggleGroup.container.tsx b/app/components/controls/ToggleGroup/ToggleGroup.container.tsx
similarity index 99%
rename from app/components/ToggleGroup/ToggleGroup.container.tsx
rename to app/components/controls/ToggleGroup/ToggleGroup.container.tsx
index 4e2ad1d..89982fe 100644
--- a/app/components/ToggleGroup/ToggleGroup.container.tsx
+++ b/app/components/controls/ToggleGroup/ToggleGroup.container.tsx
@@ -3,7 +3,7 @@
import { memo, useCallback, useId, forwardRef } from "react";
import { ToggleGroupView } from "./ToggleGroup.view";
import type { ToggleGroupProps } from "./ToggleGroup.types";
-import { normalizeToggleState, normalizeToggleGroupPosition } from "../../../lib/propNormalization";
+import { normalizeToggleState, normalizeToggleGroupPosition } from "../../../../lib/propNormalization";
const ToggleGroupContainer = memo(
forwardRef((props, _ref) => {
diff --git a/app/components/ToggleGroup/ToggleGroup.types.ts b/app/components/controls/ToggleGroup/ToggleGroup.types.ts
similarity index 95%
rename from app/components/ToggleGroup/ToggleGroup.types.ts
rename to app/components/controls/ToggleGroup/ToggleGroup.types.ts
index 993a8d8..8f5ea4c 100644
--- a/app/components/ToggleGroup/ToggleGroup.types.ts
+++ b/app/components/controls/ToggleGroup/ToggleGroup.types.ts
@@ -1,4 +1,4 @@
-import type { StateValue } from "../../../lib/propNormalization";
+import type { StateValue } from "../../../../lib/propNormalization";
export type ToggleGroupPositionValue = "left" | "middle" | "right" | "Left" | "Middle" | "Right";
diff --git a/app/components/ToggleGroup/ToggleGroup.view.tsx b/app/components/controls/ToggleGroup/ToggleGroup.view.tsx
similarity index 100%
rename from app/components/ToggleGroup/ToggleGroup.view.tsx
rename to app/components/controls/ToggleGroup/ToggleGroup.view.tsx
diff --git a/app/components/ToggleGroup/index.tsx b/app/components/controls/ToggleGroup/index.tsx
similarity index 100%
rename from app/components/ToggleGroup/index.tsx
rename to app/components/controls/ToggleGroup/index.tsx
diff --git a/app/components/Avatar.tsx b/app/components/icons/Avatar.tsx
similarity index 95%
rename from app/components/Avatar.tsx
rename to app/components/icons/Avatar.tsx
index 712b847..8a59e8c 100644
--- a/app/components/Avatar.tsx
+++ b/app/components/icons/Avatar.tsx
@@ -1,5 +1,5 @@
import { memo } from "react";
-import { normalizeSize } from "../../lib/propNormalization";
+import { normalizeSize } from "../../../lib/propNormalization";
export type AvatarSizeValue = "small" | "medium" | "large" | "xlarge" | "Small" | "Medium" | "Large" | "XLarge";
diff --git a/app/components/Logo.tsx b/app/components/icons/Logo.tsx
similarity index 98%
rename from app/components/Logo.tsx
rename to app/components/icons/Logo.tsx
index eaa3eab..dde8433 100644
--- a/app/components/Logo.tsx
+++ b/app/components/icons/Logo.tsx
@@ -1,6 +1,6 @@
import { memo } from "react";
import Link from "next/link";
-import { getAssetPath, ASSETS } from "../../lib/assetUtils";
+import { getAssetPath, ASSETS } from "../../../lib/assetUtils";
interface LogoProps {
size?:
diff --git a/app/components/Alert/Alert.container.tsx b/app/components/modals/Alert/Alert.container.tsx
similarity index 99%
rename from app/components/Alert/Alert.container.tsx
rename to app/components/modals/Alert/Alert.container.tsx
index 26b704a..417a045 100644
--- a/app/components/Alert/Alert.container.tsx
+++ b/app/components/modals/Alert/Alert.container.tsx
@@ -3,7 +3,7 @@
import { memo } from "react";
import { AlertView } from "./Alert.view";
import type { AlertProps } from "./Alert.types";
-import { normalizeAlertStatus, normalizeAlertType } from "../../../lib/propNormalization";
+import { normalizeAlertStatus, normalizeAlertType } from "../../../../lib/propNormalization";
const AlertContainer = memo(
({
diff --git a/app/components/Alert/Alert.types.ts b/app/components/modals/Alert/Alert.types.ts
similarity index 100%
rename from app/components/Alert/Alert.types.ts
rename to app/components/modals/Alert/Alert.types.ts
diff --git a/app/components/Alert/Alert.view.tsx b/app/components/modals/Alert/Alert.view.tsx
similarity index 98%
rename from app/components/Alert/Alert.view.tsx
rename to app/components/modals/Alert/Alert.view.tsx
index 374efa2..5bae88e 100644
--- a/app/components/Alert/Alert.view.tsx
+++ b/app/components/modals/Alert/Alert.view.tsx
@@ -1,5 +1,5 @@
import type { AlertViewProps } from "./Alert.types";
-import Button from "../Button";
+import Button from "../../buttons/Button";
export function AlertView({
title,
diff --git a/app/components/Alert/index.tsx b/app/components/modals/Alert/index.tsx
similarity index 100%
rename from app/components/Alert/index.tsx
rename to app/components/modals/Alert/index.tsx
diff --git a/app/components/Create/Create.container.tsx b/app/components/modals/Create/Create.container.tsx
similarity index 100%
rename from app/components/Create/Create.container.tsx
rename to app/components/modals/Create/Create.container.tsx
diff --git a/app/components/Create/Create.types.ts b/app/components/modals/Create/Create.types.ts
similarity index 100%
rename from app/components/Create/Create.types.ts
rename to app/components/modals/Create/Create.types.ts
diff --git a/app/components/Create/Create.view.tsx b/app/components/modals/Create/Create.view.tsx
similarity index 93%
rename from app/components/Create/Create.view.tsx
rename to app/components/modals/Create/Create.view.tsx
index bf89cbc..090a3d9 100644
--- a/app/components/Create/Create.view.tsx
+++ b/app/components/modals/Create/Create.view.tsx
@@ -1,9 +1,9 @@
"use client";
import { createPortal } from "react-dom";
-import ContentLockup from "../ContentLockup";
-import ModalFooter from "../ModalFooter";
-import ModalHeader from "../ModalHeader";
+import ContentLockup from "../../type/ContentLockup";
+import ModalFooter from "../../utility/ModalFooter";
+import ModalHeader from "../../utility/ModalHeader";
import type { CreateViewProps } from "./Create.types";
export function CreateView({
diff --git a/app/components/Create/index.tsx b/app/components/modals/Create/index.tsx
similarity index 100%
rename from app/components/Create/index.tsx
rename to app/components/modals/Create/index.tsx
diff --git a/app/components/Tooltip/Tooltip.container.tsx b/app/components/modals/Tooltip/Tooltip.container.tsx
similarity index 96%
rename from app/components/Tooltip/Tooltip.container.tsx
rename to app/components/modals/Tooltip/Tooltip.container.tsx
index 32e2b2f..474bcf9 100644
--- a/app/components/Tooltip/Tooltip.container.tsx
+++ b/app/components/modals/Tooltip/Tooltip.container.tsx
@@ -3,7 +3,7 @@
import { memo, useState } from "react";
import { TooltipView } from "./Tooltip.view";
import type { TooltipProps } from "./Tooltip.types";
-import { normalizeTooltipPosition } from "../../../lib/propNormalization";
+import { normalizeTooltipPosition } from "../../../../lib/propNormalization";
const TooltipContainer = memo(
({ children, text, position: positionProp = "top", className = "", disabled = false }) => {
diff --git a/app/components/Tooltip/Tooltip.types.ts b/app/components/modals/Tooltip/Tooltip.types.ts
similarity index 100%
rename from app/components/Tooltip/Tooltip.types.ts
rename to app/components/modals/Tooltip/Tooltip.types.ts
diff --git a/app/components/Tooltip/Tooltip.view.tsx b/app/components/modals/Tooltip/Tooltip.view.tsx
similarity index 100%
rename from app/components/Tooltip/Tooltip.view.tsx
rename to app/components/modals/Tooltip/Tooltip.view.tsx
diff --git a/app/components/Tooltip/index.tsx b/app/components/modals/Tooltip/index.tsx
similarity index 100%
rename from app/components/Tooltip/index.tsx
rename to app/components/modals/Tooltip/index.tsx
diff --git a/app/components/Footer.tsx b/app/components/navigation/Footer.tsx
similarity index 97%
rename from app/components/Footer.tsx
rename to app/components/navigation/Footer.tsx
index b6f9e37..79ae7b9 100644
--- a/app/components/Footer.tsx
+++ b/app/components/navigation/Footer.tsx
@@ -1,11 +1,11 @@
"use client";
import { memo } from "react";
-import { useTranslation } from "../contexts/MessagesContext";
+import { useTranslation } from "../../contexts/MessagesContext";
import Link from "next/link";
-import Logo from "./Logo";
-import Separator from "./Separator";
-import { getAssetPath, ASSETS } from "../../lib/assetUtils";
+import Logo from "../icons/Logo";
+import Separator from "../utility/Separator";
+import { getAssetPath, ASSETS } from "../../../lib/assetUtils";
const Footer = memo(() => {
const t = useTranslation("footer");
diff --git a/app/components/Header/Header.container.tsx b/app/components/navigation/Header/Header.container.tsx
similarity index 92%
rename from app/components/Header/Header.container.tsx
rename to app/components/navigation/Header/Header.container.tsx
index 52f6990..2c99512 100644
--- a/app/components/Header/Header.container.tsx
+++ b/app/components/navigation/Header/Header.container.tsx
@@ -2,13 +2,13 @@
import { memo } from "react";
import { usePathname } from "next/navigation";
-import { useTranslation } from "../../contexts/MessagesContext";
+import { useTranslation } from "../../../contexts/MessagesContext";
import MenuBarItem from "../MenuBarItem";
-import Button from "../Button";
-import AvatarContainer from "../AvatarContainer";
-import Avatar from "../Avatar";
-import Logo from "../Logo";
-import { getAssetPath, ASSETS } from "../../../lib/assetUtils";
+import Button from "../../buttons/Button";
+import AvatarContainer from "../../utility/AvatarContainer";
+import Avatar from "../../icons/Avatar";
+import Logo from "../../icons/Logo";
+import { getAssetPath, ASSETS } from "../../../../lib/assetUtils";
import { HeaderView } from "./Header.view";
import type { HeaderProps, NavSize } from "./Header.types";
diff --git a/app/components/Header/Header.types.ts b/app/components/navigation/Header/Header.types.ts
similarity index 100%
rename from app/components/Header/Header.types.ts
rename to app/components/navigation/Header/Header.types.ts
diff --git a/app/components/Header/Header.view.tsx b/app/components/navigation/Header/Header.view.tsx
similarity index 98%
rename from app/components/Header/Header.view.tsx
rename to app/components/navigation/Header/Header.view.tsx
index 780c7b2..51d49cb 100644
--- a/app/components/Header/Header.view.tsx
+++ b/app/components/navigation/Header/Header.view.tsx
@@ -1,6 +1,6 @@
"use client";
-import { useTranslation } from "../../contexts/MessagesContext";
+import { useTranslation } from "../../../contexts/MessagesContext";
import MenuBar from "../MenuBar";
import type { HeaderViewProps } from "./Header.types";
diff --git a/app/components/Header/index.tsx b/app/components/navigation/Header/index.tsx
similarity index 100%
rename from app/components/Header/index.tsx
rename to app/components/navigation/Header/index.tsx
diff --git a/app/components/HeaderTab.tsx b/app/components/navigation/HeaderTab.tsx
similarity index 97%
rename from app/components/HeaderTab.tsx
rename to app/components/navigation/HeaderTab.tsx
index 8afe968..1809ef0 100644
--- a/app/components/HeaderTab.tsx
+++ b/app/components/navigation/HeaderTab.tsx
@@ -1,5 +1,5 @@
import { memo } from "react";
-import { getAssetPath } from "../../lib/assetUtils";
+import { getAssetPath } from "../../../lib/assetUtils";
interface HeaderTabProps extends React.HTMLAttributes {
children?: React.ReactNode;
diff --git a/app/components/HomeHeader/HomeHeader.container.tsx b/app/components/navigation/HomeHeader/HomeHeader.container.tsx
similarity index 94%
rename from app/components/HomeHeader/HomeHeader.container.tsx
rename to app/components/navigation/HomeHeader/HomeHeader.container.tsx
index 4fb1e8f..62b6ebb 100644
--- a/app/components/HomeHeader/HomeHeader.container.tsx
+++ b/app/components/navigation/HomeHeader/HomeHeader.container.tsx
@@ -2,13 +2,13 @@
import { memo } from "react";
import { usePathname } from "next/navigation";
-import { useTranslation } from "../../contexts/MessagesContext";
+import { useTranslation } from "../../../contexts/MessagesContext";
import MenuBarItem from "../MenuBarItem";
-import Button from "../Button";
-import AvatarContainer from "../AvatarContainer";
-import Avatar from "../Avatar";
-import Logo from "../Logo";
-import { getAssetPath, ASSETS } from "../../../lib/assetUtils";
+import Button from "../../buttons/Button";
+import AvatarContainer from "../../utility/AvatarContainer";
+import Avatar from "../../icons/Avatar";
+import Logo from "../../icons/Logo";
+import { getAssetPath, ASSETS } from "../../../../lib/assetUtils";
import HomeHeaderView from "./HomeHeader.view";
import type { HomeHeaderProps, NavSize } from "./HomeHeader.types";
diff --git a/app/components/HomeHeader/HomeHeader.types.ts b/app/components/navigation/HomeHeader/HomeHeader.types.ts
similarity index 100%
rename from app/components/HomeHeader/HomeHeader.types.ts
rename to app/components/navigation/HomeHeader/HomeHeader.types.ts
diff --git a/app/components/HomeHeader/HomeHeader.view.tsx b/app/components/navigation/HomeHeader/HomeHeader.view.tsx
similarity index 98%
rename from app/components/HomeHeader/HomeHeader.view.tsx
rename to app/components/navigation/HomeHeader/HomeHeader.view.tsx
index 97606e6..0c98fef 100644
--- a/app/components/HomeHeader/HomeHeader.view.tsx
+++ b/app/components/navigation/HomeHeader/HomeHeader.view.tsx
@@ -2,7 +2,7 @@
import { memo } from "react";
import Script from "next/script";
-import { useTranslation } from "../../contexts/MessagesContext";
+import { useTranslation } from "../../../contexts/MessagesContext";
import HeaderTab from "../HeaderTab";
import MenuBar from "../MenuBar";
import type { HomeHeaderViewProps } from "./HomeHeader.types";
diff --git a/app/components/HomeHeader/index.tsx b/app/components/navigation/HomeHeader/index.tsx
similarity index 100%
rename from app/components/HomeHeader/index.tsx
rename to app/components/navigation/HomeHeader/index.tsx
diff --git a/app/components/MenuBar.tsx b/app/components/navigation/MenuBar.tsx
similarity index 92%
rename from app/components/MenuBar.tsx
rename to app/components/navigation/MenuBar.tsx
index 4d4cd13..4e4f7cb 100644
--- a/app/components/MenuBar.tsx
+++ b/app/components/navigation/MenuBar.tsx
@@ -1,8 +1,8 @@
"use client";
import { memo } from "react";
-import { useTranslation } from "../contexts/MessagesContext";
-import { normalizeMenuBarSize } from "../../lib/propNormalization";
+import { useTranslation } from "../../contexts/MessagesContext";
+import { normalizeMenuBarSize } from "../../../lib/propNormalization";
export type MenuBarSizeValue =
| "xsmall"
diff --git a/app/components/MenuBarItem/MenuBarItem.container.tsx b/app/components/navigation/MenuBarItem/MenuBarItem.container.tsx
similarity index 99%
rename from app/components/MenuBarItem/MenuBarItem.container.tsx
rename to app/components/navigation/MenuBarItem/MenuBarItem.container.tsx
index d55a605..f437d7d 100644
--- a/app/components/MenuBarItem/MenuBarItem.container.tsx
+++ b/app/components/navigation/MenuBarItem/MenuBarItem.container.tsx
@@ -3,7 +3,7 @@
import { memo } from "react";
import MenuBarItemView from "./MenuBarItem.view";
import type { MenuBarItemProps } from "./MenuBarItem.types";
-import { normalizeMenuBarItemVariant } from "../../../lib/propNormalization";
+import { normalizeMenuBarItemVariant } from "../../../../lib/propNormalization";
const MenuBarItemContainer = memo(
({
diff --git a/app/components/MenuBarItem/MenuBarItem.types.ts b/app/components/navigation/MenuBarItem/MenuBarItem.types.ts
similarity index 100%
rename from app/components/MenuBarItem/MenuBarItem.types.ts
rename to app/components/navigation/MenuBarItem/MenuBarItem.types.ts
diff --git a/app/components/MenuBarItem/MenuBarItem.view.tsx b/app/components/navigation/MenuBarItem/MenuBarItem.view.tsx
similarity index 100%
rename from app/components/MenuBarItem/MenuBarItem.view.tsx
rename to app/components/navigation/MenuBarItem/MenuBarItem.view.tsx
diff --git a/app/components/MenuBarItem/index.tsx b/app/components/navigation/MenuBarItem/index.tsx
similarity index 100%
rename from app/components/MenuBarItem/index.tsx
rename to app/components/navigation/MenuBarItem/index.tsx
diff --git a/app/components/NavigationItem/NavigationItem.container.tsx b/app/components/navigation/NavigationItem/NavigationItem.container.tsx
similarity index 98%
rename from app/components/NavigationItem/NavigationItem.container.tsx
rename to app/components/navigation/NavigationItem/NavigationItem.container.tsx
index 05ac949..3afe5aa 100644
--- a/app/components/NavigationItem/NavigationItem.container.tsx
+++ b/app/components/navigation/NavigationItem/NavigationItem.container.tsx
@@ -3,7 +3,7 @@
import { memo } from "react";
import NavigationItemView from "./NavigationItem.view";
import type { NavigationItemProps } from "./NavigationItem.types";
-import { normalizeNavigationItemVariant, normalizeNavigationItemSize } from "../../../lib/propNormalization";
+import { normalizeNavigationItemVariant, normalizeNavigationItemSize } from "../../../../lib/propNormalization";
const NavigationItemContainer = memo(
({
diff --git a/app/components/NavigationItem/NavigationItem.types.ts b/app/components/navigation/NavigationItem/NavigationItem.types.ts
similarity index 100%
rename from app/components/NavigationItem/NavigationItem.types.ts
rename to app/components/navigation/NavigationItem/NavigationItem.types.ts
diff --git a/app/components/NavigationItem/NavigationItem.view.tsx b/app/components/navigation/NavigationItem/NavigationItem.view.tsx
similarity index 100%
rename from app/components/NavigationItem/NavigationItem.view.tsx
rename to app/components/navigation/NavigationItem/NavigationItem.view.tsx
diff --git a/app/components/NavigationItem/index.tsx b/app/components/navigation/NavigationItem/index.tsx
similarity index 100%
rename from app/components/NavigationItem/index.tsx
rename to app/components/navigation/NavigationItem/index.tsx
diff --git a/app/components/Progress/Progress.container.tsx b/app/components/progress/Progress/Progress.container.tsx
similarity index 100%
rename from app/components/Progress/Progress.container.tsx
rename to app/components/progress/Progress/Progress.container.tsx
diff --git a/app/components/Progress/Progress.types.ts b/app/components/progress/Progress/Progress.types.ts
similarity index 100%
rename from app/components/Progress/Progress.types.ts
rename to app/components/progress/Progress/Progress.types.ts
diff --git a/app/components/Progress/Progress.view.tsx b/app/components/progress/Progress/Progress.view.tsx
similarity index 100%
rename from app/components/Progress/Progress.view.tsx
rename to app/components/progress/Progress/Progress.view.tsx
diff --git a/app/components/Stepper/Stepper.container.tsx b/app/components/progress/Progress/Stepper/Stepper.container.tsx
similarity index 100%
rename from app/components/Stepper/Stepper.container.tsx
rename to app/components/progress/Progress/Stepper/Stepper.container.tsx
diff --git a/app/components/Stepper/Stepper.types.ts b/app/components/progress/Progress/Stepper/Stepper.types.ts
similarity index 100%
rename from app/components/Stepper/Stepper.types.ts
rename to app/components/progress/Progress/Stepper/Stepper.types.ts
diff --git a/app/components/Stepper/Stepper.view.tsx b/app/components/progress/Progress/Stepper/Stepper.view.tsx
similarity index 100%
rename from app/components/Stepper/Stepper.view.tsx
rename to app/components/progress/Progress/Stepper/Stepper.view.tsx
diff --git a/app/components/Stepper/index.tsx b/app/components/progress/Progress/Stepper/index.tsx
similarity index 100%
rename from app/components/Stepper/index.tsx
rename to app/components/progress/Progress/Stepper/index.tsx
diff --git a/app/components/Progress/index.tsx b/app/components/progress/Progress/index.tsx
similarity index 100%
rename from app/components/Progress/index.tsx
rename to app/components/progress/Progress/index.tsx
diff --git a/app/components/AskOrganizer/AskOrganizer.container.tsx b/app/components/sections/AskOrganizer/AskOrganizer.container.tsx
similarity index 94%
rename from app/components/AskOrganizer/AskOrganizer.container.tsx
rename to app/components/sections/AskOrganizer/AskOrganizer.container.tsx
index 1933187..bb5ee50 100644
--- a/app/components/AskOrganizer/AskOrganizer.container.tsx
+++ b/app/components/sections/AskOrganizer/AskOrganizer.container.tsx
@@ -1,14 +1,14 @@
"use client";
import { memo } from "react";
-import { useTranslation } from "../../contexts/MessagesContext";
-import { useAnalytics } from "../../hooks";
+import { useTranslation } from "../../../contexts/MessagesContext";
+import { useAnalytics } from "../../../hooks";
import AskOrganizerView from "./AskOrganizer.view";
import type {
AskOrganizerProps,
AskOrganizerVariant,
} from "./AskOrganizer.types";
-import { normalizeAskOrganizerVariant } from "../../../lib/propNormalization";
+import { normalizeAskOrganizerVariant } from "../../../../lib/propNormalization";
const VARIANT_STYLES: Record<
"centered" | "left-aligned" | "compact" | "inverse",
diff --git a/app/components/AskOrganizer/AskOrganizer.types.ts b/app/components/sections/AskOrganizer/AskOrganizer.types.ts
similarity index 100%
rename from app/components/AskOrganizer/AskOrganizer.types.ts
rename to app/components/sections/AskOrganizer/AskOrganizer.types.ts
diff --git a/app/components/AskOrganizer/AskOrganizer.view.tsx b/app/components/sections/AskOrganizer/AskOrganizer.view.tsx
similarity index 90%
rename from app/components/AskOrganizer/AskOrganizer.view.tsx
rename to app/components/sections/AskOrganizer/AskOrganizer.view.tsx
index 553a6df..0f3face 100644
--- a/app/components/AskOrganizer/AskOrganizer.view.tsx
+++ b/app/components/sections/AskOrganizer/AskOrganizer.view.tsx
@@ -1,8 +1,8 @@
"use client";
-import { useTranslation } from "../../contexts/MessagesContext";
-import ContentLockup from "../ContentLockup";
-import Button from "../Button";
+import { useTranslation } from "../../../contexts/MessagesContext";
+import ContentLockup from "../../type/ContentLockup";
+import Button from "../../buttons/Button";
import type { AskOrganizerViewProps } from "./AskOrganizer.types";
function AskOrganizerView({
diff --git a/app/components/AskOrganizer/index.tsx b/app/components/sections/AskOrganizer/index.tsx
similarity index 100%
rename from app/components/AskOrganizer/index.tsx
rename to app/components/sections/AskOrganizer/index.tsx
diff --git a/app/components/ContentBanner.tsx b/app/components/sections/ContentBanner.tsx
similarity index 94%
rename from app/components/ContentBanner.tsx
rename to app/components/sections/ContentBanner.tsx
index 609ca2d..fee3e06 100644
--- a/app/components/ContentBanner.tsx
+++ b/app/components/sections/ContentBanner.tsx
@@ -1,9 +1,9 @@
"use client";
import { memo } from "react";
-import { getAssetPath } from "../../lib/assetUtils";
-import ContentContainer from "./ContentContainer";
-import type { BlogPost } from "../../lib/content";
+import { getAssetPath } from "../../../lib/assetUtils";
+import ContentContainer from "../ContentContainer";
+import type { BlogPost } from "../../../lib/content";
interface ContentBannerProps {
post: BlogPost;
diff --git a/app/components/FeatureGrid/FeatureGrid.container.tsx b/app/components/sections/FeatureGrid/FeatureGrid.container.tsx
similarity index 97%
rename from app/components/FeatureGrid/FeatureGrid.container.tsx
rename to app/components/sections/FeatureGrid/FeatureGrid.container.tsx
index 967ad3e..bb46bbc 100644
--- a/app/components/FeatureGrid/FeatureGrid.container.tsx
+++ b/app/components/sections/FeatureGrid/FeatureGrid.container.tsx
@@ -1,7 +1,7 @@
"use client";
import { memo, useMemo } from "react";
-import { useTranslation } from "../../contexts/MessagesContext";
+import { useTranslation } from "../../../contexts/MessagesContext";
import FeatureGridView from "./FeatureGrid.view";
import type { FeatureGridProps, Feature } from "./FeatureGrid.types";
diff --git a/app/components/FeatureGrid/FeatureGrid.types.ts b/app/components/sections/FeatureGrid/FeatureGrid.types.ts
similarity index 100%
rename from app/components/FeatureGrid/FeatureGrid.types.ts
rename to app/components/sections/FeatureGrid/FeatureGrid.types.ts
diff --git a/app/components/FeatureGrid/FeatureGrid.view.tsx b/app/components/sections/FeatureGrid/FeatureGrid.view.tsx
similarity index 93%
rename from app/components/FeatureGrid/FeatureGrid.view.tsx
rename to app/components/sections/FeatureGrid/FeatureGrid.view.tsx
index 318865d..d1ccf13 100644
--- a/app/components/FeatureGrid/FeatureGrid.view.tsx
+++ b/app/components/sections/FeatureGrid/FeatureGrid.view.tsx
@@ -1,8 +1,8 @@
"use client";
-import { useTranslation } from "../../contexts/MessagesContext";
-import ContentLockup from "../ContentLockup";
-import MiniCard from "../MiniCard";
+import { useTranslation } from "../../../contexts/MessagesContext";
+import ContentLockup from "../../type/ContentLockup";
+import MiniCard from "../../MiniCard";
import type { FeatureGridViewProps } from "./FeatureGrid.types";
function FeatureGridView({
diff --git a/app/components/FeatureGrid/index.tsx b/app/components/sections/FeatureGrid/index.tsx
similarity index 100%
rename from app/components/FeatureGrid/index.tsx
rename to app/components/sections/FeatureGrid/index.tsx
diff --git a/app/components/HeroBanner.tsx b/app/components/sections/HeroBanner.tsx
similarity index 92%
rename from app/components/HeroBanner.tsx
rename to app/components/sections/HeroBanner.tsx
index 5f3eb36..741e98b 100644
--- a/app/components/HeroBanner.tsx
+++ b/app/components/sections/HeroBanner.tsx
@@ -1,10 +1,10 @@
"use client";
import { memo } from "react";
-import { useTranslation } from "../contexts/MessagesContext";
-import ContentLockup from "./ContentLockup";
-import HeroDecor from "./HeroDecor";
-import { getAssetPath } from "../../lib/assetUtils";
+import { useTranslation } from "../../contexts/MessagesContext";
+import ContentLockup from "../type/ContentLockup";
+import HeroDecor from "../HeroDecor";
+import { getAssetPath } from "../../../lib/assetUtils";
interface HeroBannerProps {
title?: string;
diff --git a/app/components/LogoWall/LogoWall.container.tsx b/app/components/sections/LogoWall/LogoWall.container.tsx
similarity index 100%
rename from app/components/LogoWall/LogoWall.container.tsx
rename to app/components/sections/LogoWall/LogoWall.container.tsx
diff --git a/app/components/LogoWall/LogoWall.types.ts b/app/components/sections/LogoWall/LogoWall.types.ts
similarity index 100%
rename from app/components/LogoWall/LogoWall.types.ts
rename to app/components/sections/LogoWall/LogoWall.types.ts
diff --git a/app/components/LogoWall/LogoWall.view.tsx b/app/components/sections/LogoWall/LogoWall.view.tsx
similarity index 100%
rename from app/components/LogoWall/LogoWall.view.tsx
rename to app/components/sections/LogoWall/LogoWall.view.tsx
diff --git a/app/components/LogoWall/index.tsx b/app/components/sections/LogoWall/index.tsx
similarity index 100%
rename from app/components/LogoWall/index.tsx
rename to app/components/sections/LogoWall/index.tsx
diff --git a/app/components/NumberedCards/NumberedCards.container.tsx b/app/components/sections/NumberedCards/NumberedCards.container.tsx
similarity index 94%
rename from app/components/NumberedCards/NumberedCards.container.tsx
rename to app/components/sections/NumberedCards/NumberedCards.container.tsx
index 604fc17..3273e34 100644
--- a/app/components/NumberedCards/NumberedCards.container.tsx
+++ b/app/components/sections/NumberedCards/NumberedCards.container.tsx
@@ -1,7 +1,7 @@
"use client";
import { memo } from "react";
-import { useSchemaData } from "../../hooks";
+import { useSchemaData } from "../../../hooks";
import NumberedCardsView from "./NumberedCards.view";
import type { NumberedCardsProps } from "./NumberedCards.types";
diff --git a/app/components/NumberedCards/NumberedCards.types.ts b/app/components/sections/NumberedCards/NumberedCards.types.ts
similarity index 100%
rename from app/components/NumberedCards/NumberedCards.types.ts
rename to app/components/sections/NumberedCards/NumberedCards.types.ts
diff --git a/app/components/NumberedCards/NumberedCards.view.tsx b/app/components/sections/NumberedCards/NumberedCards.view.tsx
similarity index 93%
rename from app/components/NumberedCards/NumberedCards.view.tsx
rename to app/components/sections/NumberedCards/NumberedCards.view.tsx
index d77fb0b..9e42905 100644
--- a/app/components/NumberedCards/NumberedCards.view.tsx
+++ b/app/components/sections/NumberedCards/NumberedCards.view.tsx
@@ -1,9 +1,9 @@
"use client";
-import { useTranslation } from "../../contexts/MessagesContext";
+import { useTranslation } from "../../../contexts/MessagesContext";
import SectionHeader from "../SectionHeader";
-import NumberCard from "../NumberCard";
-import Button from "../Button";
+import NumberCard from "../../cards/NumberCard";
+import Button from "../../buttons/Button";
import type { NumberedCardsViewProps } from "./NumberedCards.types";
function NumberedCardsView({
diff --git a/app/components/NumberedCards/index.tsx b/app/components/sections/NumberedCards/index.tsx
similarity index 100%
rename from app/components/NumberedCards/index.tsx
rename to app/components/sections/NumberedCards/index.tsx
diff --git a/app/components/QuoteBlock/QuoteBlock.container.tsx b/app/components/sections/QuoteBlock/QuoteBlock.container.tsx
similarity index 97%
rename from app/components/QuoteBlock/QuoteBlock.container.tsx
rename to app/components/sections/QuoteBlock/QuoteBlock.container.tsx
index 0d8bd4f..a88ebac 100644
--- a/app/components/QuoteBlock/QuoteBlock.container.tsx
+++ b/app/components/sections/QuoteBlock/QuoteBlock.container.tsx
@@ -1,10 +1,10 @@
"use client";
import { memo, useState } from "react";
-import { logger } from "../../../lib/logger";
+import { logger } from "../../../../lib/logger";
import QuoteBlockView from "./QuoteBlock.view";
import type { QuoteBlockProps, VariantConfig } from "./QuoteBlock.types";
-import { normalizeQuoteBlockVariant } from "../../../lib/propNormalization";
+import { normalizeQuoteBlockVariant } from "../../../../lib/propNormalization";
const QuoteBlockContainer = memo(
({
diff --git a/app/components/QuoteBlock/QuoteBlock.types.ts b/app/components/sections/QuoteBlock/QuoteBlock.types.ts
similarity index 100%
rename from app/components/QuoteBlock/QuoteBlock.types.ts
rename to app/components/sections/QuoteBlock/QuoteBlock.types.ts
diff --git a/app/components/QuoteBlock/QuoteBlock.view.tsx b/app/components/sections/QuoteBlock/QuoteBlock.view.tsx
similarity index 98%
rename from app/components/QuoteBlock/QuoteBlock.view.tsx
rename to app/components/sections/QuoteBlock/QuoteBlock.view.tsx
index ba5b731..27221db 100644
--- a/app/components/QuoteBlock/QuoteBlock.view.tsx
+++ b/app/components/sections/QuoteBlock/QuoteBlock.view.tsx
@@ -2,8 +2,8 @@
import { memo } from "react";
import Image from "next/image";
-import { useTranslation } from "../../contexts/MessagesContext";
-import QuoteDecor from "../QuoteDecor";
+import { useTranslation } from "../../../contexts/MessagesContext";
+import QuoteDecor from "../../QuoteDecor";
import type { QuoteBlockViewProps } from "./QuoteBlock.types";
function QuoteBlockView({
diff --git a/app/components/QuoteBlock/index.tsx b/app/components/sections/QuoteBlock/index.tsx
similarity index 100%
rename from app/components/QuoteBlock/index.tsx
rename to app/components/sections/QuoteBlock/index.tsx
diff --git a/app/components/RelatedArticles/RelatedArticles.container.tsx b/app/components/sections/RelatedArticles/RelatedArticles.container.tsx
similarity index 98%
rename from app/components/RelatedArticles/RelatedArticles.container.tsx
rename to app/components/sections/RelatedArticles/RelatedArticles.container.tsx
index b0fe4bd..67feb64 100644
--- a/app/components/RelatedArticles/RelatedArticles.container.tsx
+++ b/app/components/sections/RelatedArticles/RelatedArticles.container.tsx
@@ -1,7 +1,7 @@
"use client";
import { useState, useEffect, memo, useMemo, useCallback } from "react";
-import { useIsMobile } from "../../hooks";
+import { useIsMobile } from "../../../hooks";
import { RelatedArticlesView } from "./RelatedArticles.view";
import type { RelatedArticlesProps } from "./RelatedArticles.types";
diff --git a/app/components/RelatedArticles/RelatedArticles.types.ts b/app/components/sections/RelatedArticles/RelatedArticles.types.ts
similarity index 87%
rename from app/components/RelatedArticles/RelatedArticles.types.ts
rename to app/components/sections/RelatedArticles/RelatedArticles.types.ts
index b7d3878..de78279 100644
--- a/app/components/RelatedArticles/RelatedArticles.types.ts
+++ b/app/components/sections/RelatedArticles/RelatedArticles.types.ts
@@ -1,4 +1,4 @@
-import type { BlogPost } from "../../../lib/content";
+import type { BlogPost } from "../../../../lib/content";
export interface RelatedArticlesProps {
relatedPosts: BlogPost[];
diff --git a/app/components/RelatedArticles/RelatedArticles.view.tsx b/app/components/sections/RelatedArticles/RelatedArticles.view.tsx
similarity index 97%
rename from app/components/RelatedArticles/RelatedArticles.view.tsx
rename to app/components/sections/RelatedArticles/RelatedArticles.view.tsx
index ede0e27..0142ff5 100644
--- a/app/components/RelatedArticles/RelatedArticles.view.tsx
+++ b/app/components/sections/RelatedArticles/RelatedArticles.view.tsx
@@ -1,4 +1,4 @@
-import ContentThumbnailTemplate from "../ContentThumbnailTemplate";
+import ContentThumbnailTemplate from "../../ContentThumbnailTemplate";
import type { RelatedArticlesViewProps } from "./RelatedArticles.types";
export function RelatedArticlesView({
diff --git a/app/components/RelatedArticles/index.tsx b/app/components/sections/RelatedArticles/index.tsx
similarity index 100%
rename from app/components/RelatedArticles/index.tsx
rename to app/components/sections/RelatedArticles/index.tsx
diff --git a/app/components/RuleStack/RuleStack.container.tsx b/app/components/sections/RuleStack/RuleStack.container.tsx
similarity index 95%
rename from app/components/RuleStack/RuleStack.container.tsx
rename to app/components/sections/RuleStack/RuleStack.container.tsx
index f3e535f..6c4fb25 100644
--- a/app/components/RuleStack/RuleStack.container.tsx
+++ b/app/components/sections/RuleStack/RuleStack.container.tsx
@@ -1,7 +1,7 @@
"use client";
import { memo } from "react";
-import { logger } from "../../../lib/logger";
+import { logger } from "../../../../lib/logger";
import { RuleStackView } from "./RuleStack.view";
import type { RuleStackProps } from "./RuleStack.types";
diff --git a/app/components/RuleStack/RuleStack.types.ts b/app/components/sections/RuleStack/RuleStack.types.ts
similarity index 100%
rename from app/components/RuleStack/RuleStack.types.ts
rename to app/components/sections/RuleStack/RuleStack.types.ts
diff --git a/app/components/RuleStack/RuleStack.view.tsx b/app/components/sections/RuleStack/RuleStack.view.tsx
similarity index 95%
rename from app/components/RuleStack/RuleStack.view.tsx
rename to app/components/sections/RuleStack/RuleStack.view.tsx
index 788db53..ae13cfb 100644
--- a/app/components/RuleStack/RuleStack.view.tsx
+++ b/app/components/sections/RuleStack/RuleStack.view.tsx
@@ -2,12 +2,12 @@
import { useState, useEffect } from "react";
import Image from "next/image";
-import { useTranslation } from "../../contexts/MessagesContext";
-import { useMediaQuery } from "../../hooks/useMediaQuery";
-import RuleCard from "../RuleCard";
+import { useTranslation } from "../../../contexts/MessagesContext";
+import { useMediaQuery } from "../../../hooks/useMediaQuery";
+import RuleCard from "../../cards/RuleCard";
import SectionHeader from "../SectionHeader";
-import Button from "../Button";
-import { getAssetPath } from "../../../lib/assetUtils";
+import Button from "../../buttons/Button";
+import { getAssetPath } from "../../../../lib/assetUtils";
import type { RuleStackViewProps } from "./RuleStack.types";
export function RuleStackView({
diff --git a/app/components/RuleStack/index.tsx b/app/components/sections/RuleStack/index.tsx
similarity index 100%
rename from app/components/RuleStack/index.tsx
rename to app/components/sections/RuleStack/index.tsx
diff --git a/app/components/SectionHeader.tsx b/app/components/sections/SectionHeader.tsx
similarity index 97%
rename from app/components/SectionHeader.tsx
rename to app/components/sections/SectionHeader.tsx
index 3c06485..b018da3 100644
--- a/app/components/SectionHeader.tsx
+++ b/app/components/sections/SectionHeader.tsx
@@ -1,7 +1,7 @@
"use client";
import { memo } from "react";
-import { normalizeSectionHeaderVariant } from "../../lib/propNormalization";
+import { normalizeSectionHeaderVariant } from "../../../lib/propNormalization";
export type SectionHeaderVariantValue = "default" | "multi-line" | "Default" | "Multi-Line";
diff --git a/app/components/SectionNumber.tsx b/app/components/sections/SectionNumber.tsx
similarity index 95%
rename from app/components/SectionNumber.tsx
rename to app/components/sections/SectionNumber.tsx
index b273621..0595c48 100644
--- a/app/components/SectionNumber.tsx
+++ b/app/components/sections/SectionNumber.tsx
@@ -1,7 +1,7 @@
"use client";
import { memo } from "react";
-import { getAssetPath } from "../../lib/assetUtils";
+import { getAssetPath } from "../../../lib/assetUtils";
interface SectionNumberProps {
number: number;
diff --git a/app/components/ContentLockup/ContentLockup.container.tsx b/app/components/type/ContentLockup/ContentLockup.container.tsx
similarity index 99%
rename from app/components/ContentLockup/ContentLockup.container.tsx
rename to app/components/type/ContentLockup/ContentLockup.container.tsx
index 70cd5ac..e14427b 100644
--- a/app/components/ContentLockup/ContentLockup.container.tsx
+++ b/app/components/type/ContentLockup/ContentLockup.container.tsx
@@ -3,7 +3,7 @@
import { memo } from "react";
import ContentLockupView from "./ContentLockup.view";
import type { ContentLockupProps, VariantStyle } from "./ContentLockup.types";
-import { normalizeContentLockupVariant, normalizeAlignment } from "../../../lib/propNormalization";
+import { normalizeContentLockupVariant, normalizeAlignment } from "../../../../lib/propNormalization";
const ContentLockupContainer = memo(
({
diff --git a/app/components/ContentLockup/ContentLockup.types.ts b/app/components/type/ContentLockup/ContentLockup.types.ts
similarity index 100%
rename from app/components/ContentLockup/ContentLockup.types.ts
rename to app/components/type/ContentLockup/ContentLockup.types.ts
diff --git a/app/components/ContentLockup/ContentLockup.view.tsx b/app/components/type/ContentLockup/ContentLockup.view.tsx
similarity index 97%
rename from app/components/ContentLockup/ContentLockup.view.tsx
rename to app/components/type/ContentLockup/ContentLockup.view.tsx
index 7d34f83..44afb71 100644
--- a/app/components/ContentLockup/ContentLockup.view.tsx
+++ b/app/components/type/ContentLockup/ContentLockup.view.tsx
@@ -1,8 +1,8 @@
"use client";
import { memo } from "react";
-import Button from "../Button";
-import { getAssetPath } from "../../../lib/assetUtils";
+import Button from "../../buttons/Button";
+import { getAssetPath } from "../../../../lib/assetUtils";
import type { ContentLockupViewProps } from "./ContentLockup.types";
function ContentLockupView({
diff --git a/app/components/ContentLockup/index.tsx b/app/components/type/ContentLockup/index.tsx
similarity index 100%
rename from app/components/ContentLockup/index.tsx
rename to app/components/type/ContentLockup/index.tsx
diff --git a/app/components/AvatarContainer.tsx b/app/components/utility/AvatarContainer.tsx
similarity index 95%
rename from app/components/AvatarContainer.tsx
rename to app/components/utility/AvatarContainer.tsx
index e5d7c08..f3599ae 100644
--- a/app/components/AvatarContainer.tsx
+++ b/app/components/utility/AvatarContainer.tsx
@@ -1,5 +1,5 @@
import { memo } from "react";
-import { normalizeSize } from "../../lib/propNormalization";
+import { normalizeSize } from "../../../lib/propNormalization";
export type AvatarContainerSizeValue = "small" | "medium" | "large" | "xlarge" | "Small" | "Medium" | "Large" | "XLarge";
diff --git a/app/components/ErrorBoundary.tsx b/app/components/utility/ErrorBoundary.tsx
similarity index 97%
rename from app/components/ErrorBoundary.tsx
rename to app/components/utility/ErrorBoundary.tsx
index 78896f9..12379c3 100644
--- a/app/components/ErrorBoundary.tsx
+++ b/app/components/utility/ErrorBoundary.tsx
@@ -1,7 +1,7 @@
"use client";
import React, { Component, type ReactNode } from "react";
-import { logger } from "../../lib/logger";
+import { logger } from "../../../lib/logger";
interface ErrorBoundaryProps {
children: ReactNode;
diff --git a/app/components/ImagePlaceholder.tsx b/app/components/utility/ImagePlaceholder.tsx
similarity index 95%
rename from app/components/ImagePlaceholder.tsx
rename to app/components/utility/ImagePlaceholder.tsx
index c1a3101..a88c232 100644
--- a/app/components/ImagePlaceholder.tsx
+++ b/app/components/utility/ImagePlaceholder.tsx
@@ -1,7 +1,7 @@
"use client";
import { memo } from "react";
-import { normalizeImagePlaceholderColor } from "../../lib/propNormalization";
+import { normalizeImagePlaceholderColor } from "../../../lib/propNormalization";
export type ImagePlaceholderColorValue =
| "blue"
diff --git a/app/components/ModalFooter/ModalFooter.types.ts b/app/components/utility/ModalFooter/ModalFooter.types.ts
similarity index 100%
rename from app/components/ModalFooter/ModalFooter.types.ts
rename to app/components/utility/ModalFooter/ModalFooter.types.ts
diff --git a/app/components/ModalFooter/ModalFooter.view.tsx b/app/components/utility/ModalFooter/ModalFooter.view.tsx
similarity index 91%
rename from app/components/ModalFooter/ModalFooter.view.tsx
rename to app/components/utility/ModalFooter/ModalFooter.view.tsx
index 1b4ffa2..da0434f 100644
--- a/app/components/ModalFooter/ModalFooter.view.tsx
+++ b/app/components/utility/ModalFooter/ModalFooter.view.tsx
@@ -1,8 +1,8 @@
"use client";
-import { useTranslation } from "../../contexts/MessagesContext";
-import Button from "../Button";
-import Stepper from "../Stepper";
+import { useTranslation } from "../../../contexts/MessagesContext";
+import Button from "../../buttons/Button";
+import Stepper from "../../progress/Stepper";
import type { ModalFooterProps } from "./ModalFooter.types";
export function ModalFooterView({
diff --git a/app/components/ModalFooter/index.tsx b/app/components/utility/ModalFooter/index.tsx
similarity index 100%
rename from app/components/ModalFooter/index.tsx
rename to app/components/utility/ModalFooter/index.tsx
diff --git a/app/components/ModalHeader/ModalHeader.types.ts b/app/components/utility/ModalHeader/ModalHeader.types.ts
similarity index 100%
rename from app/components/ModalHeader/ModalHeader.types.ts
rename to app/components/utility/ModalHeader/ModalHeader.types.ts
diff --git a/app/components/ModalHeader/ModalHeader.view.tsx b/app/components/utility/ModalHeader/ModalHeader.view.tsx
similarity index 96%
rename from app/components/ModalHeader/ModalHeader.view.tsx
rename to app/components/utility/ModalHeader/ModalHeader.view.tsx
index b35aa3e..4bdad22 100644
--- a/app/components/ModalHeader/ModalHeader.view.tsx
+++ b/app/components/utility/ModalHeader/ModalHeader.view.tsx
@@ -1,4 +1,4 @@
-import { getAssetPath } from "../../../lib/assetUtils";
+import { getAssetPath } from "../../../../lib/assetUtils";
import type { ModalHeaderProps } from "./ModalHeader.types";
export function ModalHeaderView({
diff --git a/app/components/ModalHeader/index.tsx b/app/components/utility/ModalHeader/index.tsx
similarity index 100%
rename from app/components/ModalHeader/index.tsx
rename to app/components/utility/ModalHeader/index.tsx
diff --git a/app/components/Separator.tsx b/app/components/utility/Separator.tsx
similarity index 100%
rename from app/components/Separator.tsx
rename to app/components/utility/Separator.tsx
diff --git a/app/layout.tsx b/app/layout.tsx
index 4b65e98..7ccbea7 100644
--- a/app/layout.tsx
+++ b/app/layout.tsx
@@ -8,7 +8,7 @@ import "./globals.css";
import ConditionalHeader from "./components/ConditionalHeader";
// Code split Footer - below the fold, can be lazy loaded
-const Footer = dynamic(() => import("./components/Footer"), {
+const Footer = dynamic(() => import("./components/navigation/Footer"), {
loading: () => (
),
diff --git a/app/learn/page.tsx b/app/learn/page.tsx
index 750d8a9..f7b7f93 100644
--- a/app/learn/page.tsx
+++ b/app/learn/page.tsx
@@ -1,8 +1,8 @@
import messages from "../../messages/en/index";
import { getTranslation } from "../../lib/i18n/getTranslation";
import ContentThumbnailTemplate from "../components/ContentThumbnailTemplate";
-import ContentLockup from "../components/ContentLockup";
-import AskOrganizer from "../components/AskOrganizer";
+import ContentLockup from "../components/type/ContentLockup";
+import AskOrganizer from "../components/sections/AskOrganizer";
import { getAllBlogPosts } from "../../lib/content";
export default function LearnPage() {
diff --git a/app/monitor/page.tsx b/app/monitor/page.tsx
index 08edfcc..56410ee 100644
--- a/app/monitor/page.tsx
+++ b/app/monitor/page.tsx
@@ -1,6 +1,6 @@
import WebVitalsDashboard from "../components/WebVitalsDashboard";
-import Header from "../components/Header";
-import Footer from "../components/Footer";
+import Header from "../components/navigation/Header";
+import Footer from "../components/navigation/Footer";
export default function MonitorPage() {
return (
diff --git a/app/page.tsx b/app/page.tsx
index b85e238..99cae4d 100644
--- a/app/page.tsx
+++ b/app/page.tsx
@@ -1,39 +1,39 @@
import dynamic from "next/dynamic";
import messages from "../messages/en/index";
import { getTranslation } from "../lib/i18n/getTranslation";
-import HeroBanner from "./components/HeroBanner";
-import AskOrganizer from "./components/AskOrganizer";
+import HeroBanner from "./components/sections/HeroBanner";
+import AskOrganizer from "./components/sections/AskOrganizer";
// Code split below-the-fold components to reduce initial bundle size
-const LogoWall = dynamic(() => import("./components/LogoWall"), {
+const LogoWall = dynamic(() => import("./components/sections/LogoWall"), {
loading: () => (
),
ssr: true,
});
-const NumberedCards = dynamic(() => import("./components/NumberedCards"), {
+const NumberedCards = dynamic(() => import("./components/sections/NumberedCards"), {
loading: () => (
),
ssr: true,
});
-const RuleStack = dynamic(() => import("./components/RuleStack"), {
+const RuleStack = dynamic(() => import("./components/sections/RuleStack"), {
loading: () => (
),
ssr: true,
});
-const FeatureGrid = dynamic(() => import("./components/FeatureGrid"), {
+const FeatureGrid = dynamic(() => import("./components/sections/FeatureGrid"), {
loading: () => (
),
ssr: true,
});
-const QuoteBlock = dynamic(() => import("./components/QuoteBlock"), {
+const QuoteBlock = dynamic(() => import("./components/sections/QuoteBlock"), {
loading: () => (
),
diff --git a/stories/Checkbox.stories.js b/stories/Checkbox.stories.js
index fc81d8e..79e72c8 100644
--- a/stories/Checkbox.stories.js
+++ b/stories/Checkbox.stories.js
@@ -1,5 +1,5 @@
import React from "react";
-import Checkbox from "../app/components/Checkbox";
+import Checkbox from "../app/components/controls/Checkbox";
import { within, userEvent } from "@storybook/test";
import { expect } from "@storybook/test";
diff --git a/stories/RadioButton.stories.js b/stories/RadioButton.stories.js
index 1d3f286..70c4cef 100644
--- a/stories/RadioButton.stories.js
+++ b/stories/RadioButton.stories.js
@@ -1,5 +1,5 @@
import React from "react";
-import RadioButton from "../app/components/RadioButton";
+import RadioButton from "../app/components/controls/RadioButton";
export default {
title: "Forms/RadioButton",
diff --git a/stories/RuleCard.stories.js b/stories/RuleCard.stories.js
index 074fc19..75f1dea 100644
--- a/stories/RuleCard.stories.js
+++ b/stories/RuleCard.stories.js
@@ -1,4 +1,4 @@
-import RuleCard from "../app/components/RuleCard";
+import RuleCard from "../app/components/cards/RuleCard";
import Image from "next/image";
export default {
diff --git a/tests/pages/user-journey.test.jsx b/tests/pages/user-journey.test.jsx
index bbf7c9b..b180f70 100644
--- a/tests/pages/user-journey.test.jsx
+++ b/tests/pages/user-journey.test.jsx
@@ -30,8 +30,8 @@ vi.mock("next/dynamic", () => {
},
};
});
-import Header from "../../app/components/Header";
-import Footer from "../../app/components/Footer";
+import Header from "../../app/components/navigation/Header";
+import Footer from "../../app/components/navigation/Footer";
afterEach(() => {
cleanup();
diff --git a/tests/unit/RuleCard.test.jsx b/tests/unit/RuleCard.test.jsx
index f009574..6bb0bcf 100644
--- a/tests/unit/RuleCard.test.jsx
+++ b/tests/unit/RuleCard.test.jsx
@@ -4,7 +4,7 @@ import {
fireEvent,
} from "../utils/test-utils";
import { describe, it, expect, vi } from "vitest";
-import RuleCard from "../../app/components/RuleCard";
+import RuleCard from "../../app/components/cards/RuleCard";
describe("RuleCard Component", () => {
const defaultProps = {
diff --git a/tests/unit/RuleStack.test.jsx b/tests/unit/RuleStack.test.jsx
index 41362dc..dcc773e 100644
--- a/tests/unit/RuleStack.test.jsx
+++ b/tests/unit/RuleStack.test.jsx
@@ -6,7 +6,7 @@ import {
import userEvent from "@testing-library/user-event";
import { vi, describe, test, expect, afterEach } from "vitest";
import { logger } from "../../lib/logger";
-import RuleStack from "../../app/components/RuleStack";
+import RuleStack from "../../app/components/sections/RuleStack";
afterEach(() => {
cleanup();
From 6f178e934fb71908c96e2ac1dbbd9d746294d866 Mon Sep 17 00:00:00 2001
From: adilallo <39313955+adilallo@users.noreply.github.com>
Date: Thu, 5 Feb 2026 22:37:00 -0700
Subject: [PATCH 02/15] Reorganize components
---
app/blog/page.tsx | 2 +-
app/components/{ => ContextMenu}/ContextMenu.tsx | 0
app/components/{ => ContextMenu}/ContextMenuDivider.tsx | 0
.../ContextMenuItem/ContextMenuItem.container.tsx | 0
.../ContextMenuItem/ContextMenuItem.types.ts | 0
.../ContextMenuItem/ContextMenuItem.view.tsx | 0
.../{ => ContextMenu}/ContextMenuItem/index.tsx | 0
app/components/{ => ContextMenu}/ContextMenuSection.tsx | 0
.../{ => cards}/MiniCard/MiniCard.container.tsx | 0
app/components/{ => cards}/MiniCard/MiniCard.types.ts | 0
app/components/{ => cards}/MiniCard/MiniCard.view.tsx | 0
app/components/{ => cards}/MiniCard/index.tsx | 0
.../ContentContainer/ContentContainer.container.tsx | 4 ++--
.../ContentContainer/ContentContainer.types.ts | 2 +-
.../ContentContainer/ContentContainer.view.tsx | 0
app/components/{ => content}/ContentContainer/index.tsx | 0
.../ContentThumbnailTemplate.container.tsx | 4 ++--
.../ContentThumbnailTemplate.types.ts | 2 +-
.../ContentThumbnailTemplate.view.tsx | 0
.../{ => content}/ContentThumbnailTemplate/index.tsx | 0
app/components/controls/MultiSelect/MultiSelect.view.tsx | 2 +-
.../{ => controls/SelectInput}/SelectDropdown.tsx | 0
app/components/controls/SelectInput/SelectInput.view.tsx | 4 ++--
.../SelectInput}/SelectOption/SelectOption.container.tsx | 2 +-
.../SelectInput}/SelectOption/SelectOption.types.ts | 0
.../SelectInput}/SelectOption/SelectOption.view.tsx | 0
.../{ => controls/SelectInput}/SelectOption/index.tsx | 0
.../LanguageSwitcher/LanguageSwitcher.container.tsx | 0
.../LanguageSwitcher/LanguageSwitcher.types.ts | 0
.../LanguageSwitcher/LanguageSwitcher.view.tsx | 2 +-
.../{ => localization}/LanguageSwitcher/index.ts | 0
.../ConditionalHeader/ConditionalHeader.container.tsx | 0
.../ConditionalHeader/ConditionalHeader.types.ts | 0
.../ConditionalHeader/ConditionalHeader.view.tsx | 4 ++--
.../{ => navigation}/ConditionalHeader/index.tsx | 0
app/components/sections/ContentBanner.tsx | 2 +-
app/components/sections/FeatureGrid/FeatureGrid.view.tsx | 2 +-
app/components/sections/{ => HeroBanner}/HeroBanner.tsx | 8 ++++----
app/components/{ => sections/HeroBanner}/HeroDecor.tsx | 0
app/components/sections/HeroBanner/index.tsx | 1 +
app/components/sections/QuoteBlock/QuoteBlock.view.tsx | 2 +-
app/components/{ => sections/QuoteBlock}/QuoteDecor.tsx | 0
.../sections/RelatedArticles/RelatedArticles.view.tsx | 2 +-
.../{ => utility}/InputLabel/InputLabel.container.tsx | 2 +-
.../{ => utility}/InputLabel/InputLabel.types.ts | 0
.../{ => utility}/InputLabel/InputLabel.view.tsx | 2 +-
app/components/{ => utility}/InputLabel/index.tsx | 0
app/layout.tsx | 2 +-
app/learn/page.tsx | 2 +-
stories/ConditionalHeader.stories.js | 2 +-
stories/ContentContainer.stories.js | 2 +-
stories/ContentThumbnailTemplate.stories.js | 2 +-
stories/ContextMenu.stories.js | 8 ++++----
stories/HeroBannerSystem.stories.js | 6 +++---
stories/HeroDecor.stories.js | 2 +-
stories/MiniCard.stories.js | 2 +-
tests/components/ContextMenu.test.tsx | 4 ++--
tests/components/ContextMenuItem.test.tsx | 2 +-
tests/components/InputLabel.test.tsx | 2 +-
tests/unit/ContentContainer.test.jsx | 2 +-
tests/unit/ContentThumbnailTemplate.test.jsx | 2 +-
61 files changed, 45 insertions(+), 44 deletions(-)
rename app/components/{ => ContextMenu}/ContextMenu.tsx (100%)
rename app/components/{ => ContextMenu}/ContextMenuDivider.tsx (100%)
rename app/components/{ => ContextMenu}/ContextMenuItem/ContextMenuItem.container.tsx (100%)
rename app/components/{ => ContextMenu}/ContextMenuItem/ContextMenuItem.types.ts (100%)
rename app/components/{ => ContextMenu}/ContextMenuItem/ContextMenuItem.view.tsx (100%)
rename app/components/{ => ContextMenu}/ContextMenuItem/index.tsx (100%)
rename app/components/{ => ContextMenu}/ContextMenuSection.tsx (100%)
rename app/components/{ => cards}/MiniCard/MiniCard.container.tsx (100%)
rename app/components/{ => cards}/MiniCard/MiniCard.types.ts (100%)
rename app/components/{ => cards}/MiniCard/MiniCard.view.tsx (100%)
rename app/components/{ => cards}/MiniCard/index.tsx (100%)
rename app/components/{ => content}/ContentContainer/ContentContainer.container.tsx (96%)
rename app/components/{ => content}/ContentContainer/ContentContainer.types.ts (92%)
rename app/components/{ => content}/ContentContainer/ContentContainer.view.tsx (100%)
rename app/components/{ => content}/ContentContainer/index.tsx (100%)
rename app/components/{ => content}/ContentThumbnailTemplate/ContentThumbnailTemplate.container.tsx (92%)
rename app/components/{ => content}/ContentThumbnailTemplate/ContentThumbnailTemplate.types.ts (91%)
rename app/components/{ => content}/ContentThumbnailTemplate/ContentThumbnailTemplate.view.tsx (100%)
rename app/components/{ => content}/ContentThumbnailTemplate/index.tsx (100%)
rename app/components/{ => controls/SelectInput}/SelectDropdown.tsx (100%)
rename app/components/{ => controls/SelectInput}/SelectOption/SelectOption.container.tsx (96%)
rename app/components/{ => controls/SelectInput}/SelectOption/SelectOption.types.ts (100%)
rename app/components/{ => controls/SelectInput}/SelectOption/SelectOption.view.tsx (100%)
rename app/components/{ => controls/SelectInput}/SelectOption/index.tsx (100%)
rename app/components/{ => localization}/LanguageSwitcher/LanguageSwitcher.container.tsx (100%)
rename app/components/{ => localization}/LanguageSwitcher/LanguageSwitcher.types.ts (100%)
rename app/components/{ => localization}/LanguageSwitcher/LanguageSwitcher.view.tsx (95%)
rename app/components/{ => localization}/LanguageSwitcher/index.ts (100%)
rename app/components/{ => navigation}/ConditionalHeader/ConditionalHeader.container.tsx (100%)
rename app/components/{ => navigation}/ConditionalHeader/ConditionalHeader.types.ts (100%)
rename app/components/{ => navigation}/ConditionalHeader/ConditionalHeader.view.tsx (71%)
rename app/components/{ => navigation}/ConditionalHeader/index.tsx (100%)
rename app/components/sections/{ => HeroBanner}/HeroBanner.tsx (92%)
rename app/components/{ => sections/HeroBanner}/HeroDecor.tsx (100%)
create mode 100644 app/components/sections/HeroBanner/index.tsx
rename app/components/{ => sections/QuoteBlock}/QuoteDecor.tsx (100%)
rename app/components/{ => utility}/InputLabel/InputLabel.container.tsx (95%)
rename app/components/{ => utility}/InputLabel/InputLabel.types.ts (100%)
rename app/components/{ => utility}/InputLabel/InputLabel.view.tsx (98%)
rename app/components/{ => utility}/InputLabel/index.tsx (100%)
diff --git a/app/blog/page.tsx b/app/blog/page.tsx
index 0cc02c4..3062d03 100644
--- a/app/blog/page.tsx
+++ b/app/blog/page.tsx
@@ -1,5 +1,5 @@
import { getAllBlogPosts } from "../../lib/content";
-import ContentThumbnailTemplate from "../components/ContentThumbnailTemplate";
+import ContentThumbnailTemplate from "../components/content/ContentThumbnailTemplate";
import type { Metadata } from "next";
export const metadata: Metadata = {
diff --git a/app/components/ContextMenu.tsx b/app/components/ContextMenu/ContextMenu.tsx
similarity index 100%
rename from app/components/ContextMenu.tsx
rename to app/components/ContextMenu/ContextMenu.tsx
diff --git a/app/components/ContextMenuDivider.tsx b/app/components/ContextMenu/ContextMenuDivider.tsx
similarity index 100%
rename from app/components/ContextMenuDivider.tsx
rename to app/components/ContextMenu/ContextMenuDivider.tsx
diff --git a/app/components/ContextMenuItem/ContextMenuItem.container.tsx b/app/components/ContextMenu/ContextMenuItem/ContextMenuItem.container.tsx
similarity index 100%
rename from app/components/ContextMenuItem/ContextMenuItem.container.tsx
rename to app/components/ContextMenu/ContextMenuItem/ContextMenuItem.container.tsx
diff --git a/app/components/ContextMenuItem/ContextMenuItem.types.ts b/app/components/ContextMenu/ContextMenuItem/ContextMenuItem.types.ts
similarity index 100%
rename from app/components/ContextMenuItem/ContextMenuItem.types.ts
rename to app/components/ContextMenu/ContextMenuItem/ContextMenuItem.types.ts
diff --git a/app/components/ContextMenuItem/ContextMenuItem.view.tsx b/app/components/ContextMenu/ContextMenuItem/ContextMenuItem.view.tsx
similarity index 100%
rename from app/components/ContextMenuItem/ContextMenuItem.view.tsx
rename to app/components/ContextMenu/ContextMenuItem/ContextMenuItem.view.tsx
diff --git a/app/components/ContextMenuItem/index.tsx b/app/components/ContextMenu/ContextMenuItem/index.tsx
similarity index 100%
rename from app/components/ContextMenuItem/index.tsx
rename to app/components/ContextMenu/ContextMenuItem/index.tsx
diff --git a/app/components/ContextMenuSection.tsx b/app/components/ContextMenu/ContextMenuSection.tsx
similarity index 100%
rename from app/components/ContextMenuSection.tsx
rename to app/components/ContextMenu/ContextMenuSection.tsx
diff --git a/app/components/MiniCard/MiniCard.container.tsx b/app/components/cards/MiniCard/MiniCard.container.tsx
similarity index 100%
rename from app/components/MiniCard/MiniCard.container.tsx
rename to app/components/cards/MiniCard/MiniCard.container.tsx
diff --git a/app/components/MiniCard/MiniCard.types.ts b/app/components/cards/MiniCard/MiniCard.types.ts
similarity index 100%
rename from app/components/MiniCard/MiniCard.types.ts
rename to app/components/cards/MiniCard/MiniCard.types.ts
diff --git a/app/components/MiniCard/MiniCard.view.tsx b/app/components/cards/MiniCard/MiniCard.view.tsx
similarity index 100%
rename from app/components/MiniCard/MiniCard.view.tsx
rename to app/components/cards/MiniCard/MiniCard.view.tsx
diff --git a/app/components/MiniCard/index.tsx b/app/components/cards/MiniCard/index.tsx
similarity index 100%
rename from app/components/MiniCard/index.tsx
rename to app/components/cards/MiniCard/index.tsx
diff --git a/app/components/ContentContainer/ContentContainer.container.tsx b/app/components/content/ContentContainer/ContentContainer.container.tsx
similarity index 96%
rename from app/components/ContentContainer/ContentContainer.container.tsx
rename to app/components/content/ContentContainer/ContentContainer.container.tsx
index 4cacb27..ce82012 100644
--- a/app/components/ContentContainer/ContentContainer.container.tsx
+++ b/app/components/content/ContentContainer/ContentContainer.container.tsx
@@ -1,10 +1,10 @@
"use client";
import { memo } from "react";
-import { getAssetPath, ASSETS } from "../../../lib/assetUtils";
+import { getAssetPath, ASSETS } from "../../../../lib/assetUtils";
import ContentContainerView from "./ContentContainer.view";
import type { ContentContainerProps } from "./ContentContainer.types";
-import { normalizeContentContainerSize } from "../../../lib/propNormalization";
+import { normalizeContentContainerSize } from "../../../../lib/propNormalization";
const ContentContainerContainer = memo(
({ post, width = "200px", size: sizeProp = "responsive" }) => {
diff --git a/app/components/ContentContainer/ContentContainer.types.ts b/app/components/content/ContentContainer/ContentContainer.types.ts
similarity index 92%
rename from app/components/ContentContainer/ContentContainer.types.ts
rename to app/components/content/ContentContainer/ContentContainer.types.ts
index 8bfbff7..18716f8 100644
--- a/app/components/ContentContainer/ContentContainer.types.ts
+++ b/app/components/content/ContentContainer/ContentContainer.types.ts
@@ -1,4 +1,4 @@
-import type { BlogPost } from "../../../lib/content";
+import type { BlogPost } from "../../../../lib/content";
export type ContentContainerSizeValue = "xs" | "responsive" | "Xs" | "Responsive";
diff --git a/app/components/ContentContainer/ContentContainer.view.tsx b/app/components/content/ContentContainer/ContentContainer.view.tsx
similarity index 100%
rename from app/components/ContentContainer/ContentContainer.view.tsx
rename to app/components/content/ContentContainer/ContentContainer.view.tsx
diff --git a/app/components/ContentContainer/index.tsx b/app/components/content/ContentContainer/index.tsx
similarity index 100%
rename from app/components/ContentContainer/index.tsx
rename to app/components/content/ContentContainer/index.tsx
diff --git a/app/components/ContentThumbnailTemplate/ContentThumbnailTemplate.container.tsx b/app/components/content/ContentThumbnailTemplate/ContentThumbnailTemplate.container.tsx
similarity index 92%
rename from app/components/ContentThumbnailTemplate/ContentThumbnailTemplate.container.tsx
rename to app/components/content/ContentThumbnailTemplate/ContentThumbnailTemplate.container.tsx
index 31a1353..646b0da 100644
--- a/app/components/ContentThumbnailTemplate/ContentThumbnailTemplate.container.tsx
+++ b/app/components/content/ContentThumbnailTemplate/ContentThumbnailTemplate.container.tsx
@@ -1,10 +1,10 @@
"use client";
import { memo } from "react";
-import { getAssetPath, ASSETS } from "../../../lib/assetUtils";
+import { getAssetPath, ASSETS } from "../../../../lib/assetUtils";
import ContentThumbnailTemplateView from "./ContentThumbnailTemplate.view";
import type { ContentThumbnailTemplateProps } from "./ContentThumbnailTemplate.types";
-import { normalizeContentThumbnailVariant } from "../../../lib/propNormalization";
+import { normalizeContentThumbnailVariant } from "../../../../lib/propNormalization";
const ContentThumbnailTemplateContainer = memo(
({ post, className = "", variant: variantProp = "vertical" }) => {
diff --git a/app/components/ContentThumbnailTemplate/ContentThumbnailTemplate.types.ts b/app/components/content/ContentThumbnailTemplate/ContentThumbnailTemplate.types.ts
similarity index 91%
rename from app/components/ContentThumbnailTemplate/ContentThumbnailTemplate.types.ts
rename to app/components/content/ContentThumbnailTemplate/ContentThumbnailTemplate.types.ts
index 245abfb..3c8fe75 100644
--- a/app/components/ContentThumbnailTemplate/ContentThumbnailTemplate.types.ts
+++ b/app/components/content/ContentThumbnailTemplate/ContentThumbnailTemplate.types.ts
@@ -1,4 +1,4 @@
-import type { BlogPost } from "../../../lib/content";
+import type { BlogPost } from "../../../../lib/content";
export type ContentThumbnailTemplateVariantValue = "vertical" | "horizontal" | "Vertical" | "Horizontal";
diff --git a/app/components/ContentThumbnailTemplate/ContentThumbnailTemplate.view.tsx b/app/components/content/ContentThumbnailTemplate/ContentThumbnailTemplate.view.tsx
similarity index 100%
rename from app/components/ContentThumbnailTemplate/ContentThumbnailTemplate.view.tsx
rename to app/components/content/ContentThumbnailTemplate/ContentThumbnailTemplate.view.tsx
diff --git a/app/components/ContentThumbnailTemplate/index.tsx b/app/components/content/ContentThumbnailTemplate/index.tsx
similarity index 100%
rename from app/components/ContentThumbnailTemplate/index.tsx
rename to app/components/content/ContentThumbnailTemplate/index.tsx
diff --git a/app/components/controls/MultiSelect/MultiSelect.view.tsx b/app/components/controls/MultiSelect/MultiSelect.view.tsx
index 5201008..eaea8e5 100644
--- a/app/components/controls/MultiSelect/MultiSelect.view.tsx
+++ b/app/components/controls/MultiSelect/MultiSelect.view.tsx
@@ -2,7 +2,7 @@
import { memo } from "react";
import Chip from "../Chip";
-import InputLabel from "../../InputLabel";
+import InputLabel from "../../utility/InputLabel";
import type { MultiSelectViewProps } from "./MultiSelect.types";
function MultiSelectView({
diff --git a/app/components/SelectDropdown.tsx b/app/components/controls/SelectInput/SelectDropdown.tsx
similarity index 100%
rename from app/components/SelectDropdown.tsx
rename to app/components/controls/SelectInput/SelectDropdown.tsx
diff --git a/app/components/controls/SelectInput/SelectInput.view.tsx b/app/components/controls/SelectInput/SelectInput.view.tsx
index 941ede5..caeea8c 100644
--- a/app/components/controls/SelectInput/SelectInput.view.tsx
+++ b/app/components/controls/SelectInput/SelectInput.view.tsx
@@ -1,7 +1,7 @@
import React, { Children, type ReactNode } from "react";
import { getAssetPath, ASSETS } from "../../../../lib/assetUtils";
-import SelectDropdown from "../../SelectDropdown";
-import SelectOption from "../../SelectOption";
+import SelectDropdown from "./SelectDropdown";
+import SelectOption from "./SelectOption";
import type { SelectOptionData } from "./SelectInput.types";
export interface SelectInputViewProps {
diff --git a/app/components/SelectOption/SelectOption.container.tsx b/app/components/controls/SelectInput/SelectOption/SelectOption.container.tsx
similarity index 96%
rename from app/components/SelectOption/SelectOption.container.tsx
rename to app/components/controls/SelectInput/SelectOption/SelectOption.container.tsx
index f387a1a..b909551 100644
--- a/app/components/SelectOption/SelectOption.container.tsx
+++ b/app/components/controls/SelectInput/SelectOption/SelectOption.container.tsx
@@ -3,7 +3,7 @@
import { forwardRef, memo, useCallback } from "react";
import { SelectOptionView } from "./SelectOption.view";
import type { SelectOptionProps } from "./SelectOption.types";
-import { normalizeContextMenuItemSize } from "../../../lib/propNormalization";
+import { normalizeContextMenuItemSize } from "../../../../lib/propNormalization";
const SelectOptionContainer = forwardRef(
(
diff --git a/app/components/SelectOption/SelectOption.types.ts b/app/components/controls/SelectInput/SelectOption/SelectOption.types.ts
similarity index 100%
rename from app/components/SelectOption/SelectOption.types.ts
rename to app/components/controls/SelectInput/SelectOption/SelectOption.types.ts
diff --git a/app/components/SelectOption/SelectOption.view.tsx b/app/components/controls/SelectInput/SelectOption/SelectOption.view.tsx
similarity index 100%
rename from app/components/SelectOption/SelectOption.view.tsx
rename to app/components/controls/SelectInput/SelectOption/SelectOption.view.tsx
diff --git a/app/components/SelectOption/index.tsx b/app/components/controls/SelectInput/SelectOption/index.tsx
similarity index 100%
rename from app/components/SelectOption/index.tsx
rename to app/components/controls/SelectInput/SelectOption/index.tsx
diff --git a/app/components/LanguageSwitcher/LanguageSwitcher.container.tsx b/app/components/localization/LanguageSwitcher/LanguageSwitcher.container.tsx
similarity index 100%
rename from app/components/LanguageSwitcher/LanguageSwitcher.container.tsx
rename to app/components/localization/LanguageSwitcher/LanguageSwitcher.container.tsx
diff --git a/app/components/LanguageSwitcher/LanguageSwitcher.types.ts b/app/components/localization/LanguageSwitcher/LanguageSwitcher.types.ts
similarity index 100%
rename from app/components/LanguageSwitcher/LanguageSwitcher.types.ts
rename to app/components/localization/LanguageSwitcher/LanguageSwitcher.types.ts
diff --git a/app/components/LanguageSwitcher/LanguageSwitcher.view.tsx b/app/components/localization/LanguageSwitcher/LanguageSwitcher.view.tsx
similarity index 95%
rename from app/components/LanguageSwitcher/LanguageSwitcher.view.tsx
rename to app/components/localization/LanguageSwitcher/LanguageSwitcher.view.tsx
index 3abea26..a5f138b 100644
--- a/app/components/LanguageSwitcher/LanguageSwitcher.view.tsx
+++ b/app/components/localization/LanguageSwitcher/LanguageSwitcher.view.tsx
@@ -1,7 +1,7 @@
"use client";
import { memo } from "react";
-import { useTranslation } from "../../contexts/MessagesContext";
+import { useTranslation } from "../../../contexts/MessagesContext";
import type { LanguageSwitcherProps, Language } from "./LanguageSwitcher.types";
function LanguageSwitcherView({ className = "" }: LanguageSwitcherProps) {
diff --git a/app/components/LanguageSwitcher/index.ts b/app/components/localization/LanguageSwitcher/index.ts
similarity index 100%
rename from app/components/LanguageSwitcher/index.ts
rename to app/components/localization/LanguageSwitcher/index.ts
diff --git a/app/components/ConditionalHeader/ConditionalHeader.container.tsx b/app/components/navigation/ConditionalHeader/ConditionalHeader.container.tsx
similarity index 100%
rename from app/components/ConditionalHeader/ConditionalHeader.container.tsx
rename to app/components/navigation/ConditionalHeader/ConditionalHeader.container.tsx
diff --git a/app/components/ConditionalHeader/ConditionalHeader.types.ts b/app/components/navigation/ConditionalHeader/ConditionalHeader.types.ts
similarity index 100%
rename from app/components/ConditionalHeader/ConditionalHeader.types.ts
rename to app/components/navigation/ConditionalHeader/ConditionalHeader.types.ts
diff --git a/app/components/ConditionalHeader/ConditionalHeader.view.tsx b/app/components/navigation/ConditionalHeader/ConditionalHeader.view.tsx
similarity index 71%
rename from app/components/ConditionalHeader/ConditionalHeader.view.tsx
rename to app/components/navigation/ConditionalHeader/ConditionalHeader.view.tsx
index 7f50389..ff36612 100644
--- a/app/components/ConditionalHeader/ConditionalHeader.view.tsx
+++ b/app/components/navigation/ConditionalHeader/ConditionalHeader.view.tsx
@@ -1,5 +1,5 @@
-import HomeHeader from "../navigation/HomeHeader";
-import Header from "../navigation/Header";
+import HomeHeader from "../HomeHeader";
+import Header from "../Header";
import type { ConditionalHeaderViewProps } from "./ConditionalHeader.types";
export function ConditionalHeaderView({
diff --git a/app/components/ConditionalHeader/index.tsx b/app/components/navigation/ConditionalHeader/index.tsx
similarity index 100%
rename from app/components/ConditionalHeader/index.tsx
rename to app/components/navigation/ConditionalHeader/index.tsx
diff --git a/app/components/sections/ContentBanner.tsx b/app/components/sections/ContentBanner.tsx
index fee3e06..8bd0c69 100644
--- a/app/components/sections/ContentBanner.tsx
+++ b/app/components/sections/ContentBanner.tsx
@@ -2,7 +2,7 @@
import { memo } from "react";
import { getAssetPath } from "../../../lib/assetUtils";
-import ContentContainer from "../ContentContainer";
+import ContentContainer from "../content/ContentContainer";
import type { BlogPost } from "../../../lib/content";
interface ContentBannerProps {
diff --git a/app/components/sections/FeatureGrid/FeatureGrid.view.tsx b/app/components/sections/FeatureGrid/FeatureGrid.view.tsx
index d1ccf13..d24d178 100644
--- a/app/components/sections/FeatureGrid/FeatureGrid.view.tsx
+++ b/app/components/sections/FeatureGrid/FeatureGrid.view.tsx
@@ -2,7 +2,7 @@
import { useTranslation } from "../../../contexts/MessagesContext";
import ContentLockup from "../../type/ContentLockup";
-import MiniCard from "../../MiniCard";
+import MiniCard from "../../cards/MiniCard";
import type { FeatureGridViewProps } from "./FeatureGrid.types";
function FeatureGridView({
diff --git a/app/components/sections/HeroBanner.tsx b/app/components/sections/HeroBanner/HeroBanner.tsx
similarity index 92%
rename from app/components/sections/HeroBanner.tsx
rename to app/components/sections/HeroBanner/HeroBanner.tsx
index 741e98b..1cc6e2c 100644
--- a/app/components/sections/HeroBanner.tsx
+++ b/app/components/sections/HeroBanner/HeroBanner.tsx
@@ -1,10 +1,10 @@
"use client";
import { memo } from "react";
-import { useTranslation } from "../../contexts/MessagesContext";
-import ContentLockup from "../type/ContentLockup";
-import HeroDecor from "../HeroDecor";
-import { getAssetPath } from "../../../lib/assetUtils";
+import { useTranslation } from "../../../contexts/MessagesContext";
+import ContentLockup from "../../type/ContentLockup";
+import HeroDecor from "./HeroDecor";
+import { getAssetPath } from "../../../../lib/assetUtils";
interface HeroBannerProps {
title?: string;
diff --git a/app/components/HeroDecor.tsx b/app/components/sections/HeroBanner/HeroDecor.tsx
similarity index 100%
rename from app/components/HeroDecor.tsx
rename to app/components/sections/HeroBanner/HeroDecor.tsx
diff --git a/app/components/sections/HeroBanner/index.tsx b/app/components/sections/HeroBanner/index.tsx
new file mode 100644
index 0000000..406f808
--- /dev/null
+++ b/app/components/sections/HeroBanner/index.tsx
@@ -0,0 +1 @@
+export { default } from "./HeroBanner";
diff --git a/app/components/sections/QuoteBlock/QuoteBlock.view.tsx b/app/components/sections/QuoteBlock/QuoteBlock.view.tsx
index 27221db..8be7e58 100644
--- a/app/components/sections/QuoteBlock/QuoteBlock.view.tsx
+++ b/app/components/sections/QuoteBlock/QuoteBlock.view.tsx
@@ -3,7 +3,7 @@
import { memo } from "react";
import Image from "next/image";
import { useTranslation } from "../../../contexts/MessagesContext";
-import QuoteDecor from "../../QuoteDecor";
+import QuoteDecor from "./QuoteDecor";
import type { QuoteBlockViewProps } from "./QuoteBlock.types";
function QuoteBlockView({
diff --git a/app/components/QuoteDecor.tsx b/app/components/sections/QuoteBlock/QuoteDecor.tsx
similarity index 100%
rename from app/components/QuoteDecor.tsx
rename to app/components/sections/QuoteBlock/QuoteDecor.tsx
diff --git a/app/components/sections/RelatedArticles/RelatedArticles.view.tsx b/app/components/sections/RelatedArticles/RelatedArticles.view.tsx
index 0142ff5..3e9d53e 100644
--- a/app/components/sections/RelatedArticles/RelatedArticles.view.tsx
+++ b/app/components/sections/RelatedArticles/RelatedArticles.view.tsx
@@ -1,4 +1,4 @@
-import ContentThumbnailTemplate from "../../ContentThumbnailTemplate";
+import ContentThumbnailTemplate from "../../content/ContentThumbnailTemplate";
import type { RelatedArticlesViewProps } from "./RelatedArticles.types";
export function RelatedArticlesView({
diff --git a/app/components/InputLabel/InputLabel.container.tsx b/app/components/utility/InputLabel/InputLabel.container.tsx
similarity index 95%
rename from app/components/InputLabel/InputLabel.container.tsx
rename to app/components/utility/InputLabel/InputLabel.container.tsx
index 1060ba7..a5d09e4 100644
--- a/app/components/InputLabel/InputLabel.container.tsx
+++ b/app/components/utility/InputLabel/InputLabel.container.tsx
@@ -6,7 +6,7 @@ import type { InputLabelProps } from "./InputLabel.types";
import {
normalizeInputLabelSize,
normalizeInputLabelPalette,
-} from "../../../lib/propNormalization";
+} from "../../../../lib/propNormalization";
const InputLabelContainer = memo(
({
diff --git a/app/components/InputLabel/InputLabel.types.ts b/app/components/utility/InputLabel/InputLabel.types.ts
similarity index 100%
rename from app/components/InputLabel/InputLabel.types.ts
rename to app/components/utility/InputLabel/InputLabel.types.ts
diff --git a/app/components/InputLabel/InputLabel.view.tsx b/app/components/utility/InputLabel/InputLabel.view.tsx
similarity index 98%
rename from app/components/InputLabel/InputLabel.view.tsx
rename to app/components/utility/InputLabel/InputLabel.view.tsx
index 9b5ab56..79fe5c4 100644
--- a/app/components/InputLabel/InputLabel.view.tsx
+++ b/app/components/utility/InputLabel/InputLabel.view.tsx
@@ -1,7 +1,7 @@
"use client";
import { memo } from "react";
-import { getAssetPath, ASSETS } from "../../../lib/assetUtils";
+import { getAssetPath, ASSETS } from "../../../../lib/assetUtils";
import type { InputLabelViewProps } from "./InputLabel.types";
function InputLabelView({
diff --git a/app/components/InputLabel/index.tsx b/app/components/utility/InputLabel/index.tsx
similarity index 100%
rename from app/components/InputLabel/index.tsx
rename to app/components/utility/InputLabel/index.tsx
diff --git a/app/layout.tsx b/app/layout.tsx
index 7ccbea7..9176575 100644
--- a/app/layout.tsx
+++ b/app/layout.tsx
@@ -5,7 +5,7 @@ import dynamic from "next/dynamic";
import { MessagesProvider } from "./contexts/MessagesContext";
import messages from "../messages/en/index";
import "./globals.css";
-import ConditionalHeader from "./components/ConditionalHeader";
+import ConditionalHeader from "./components/navigation/ConditionalHeader";
// Code split Footer - below the fold, can be lazy loaded
const Footer = dynamic(() => import("./components/navigation/Footer"), {
diff --git a/app/learn/page.tsx b/app/learn/page.tsx
index f7b7f93..cd9b0cd 100644
--- a/app/learn/page.tsx
+++ b/app/learn/page.tsx
@@ -1,6 +1,6 @@
import messages from "../../messages/en/index";
import { getTranslation } from "../../lib/i18n/getTranslation";
-import ContentThumbnailTemplate from "../components/ContentThumbnailTemplate";
+import ContentThumbnailTemplate from "../components/content/ContentThumbnailTemplate";
import ContentLockup from "../components/type/ContentLockup";
import AskOrganizer from "../components/sections/AskOrganizer";
import { getAllBlogPosts } from "../../lib/content";
diff --git a/stories/ConditionalHeader.stories.js b/stories/ConditionalHeader.stories.js
index 73f64af..0e134f8 100644
--- a/stories/ConditionalHeader.stories.js
+++ b/stories/ConditionalHeader.stories.js
@@ -1,4 +1,4 @@
-import ConditionalHeader from "../app/components/ConditionalHeader";
+import ConditionalHeader from "../app/components/navigation/ConditionalHeader";
export default {
title: "Components/ConditionalHeader",
diff --git a/stories/ContentContainer.stories.js b/stories/ContentContainer.stories.js
index 0b29ce9..aa39e94 100644
--- a/stories/ContentContainer.stories.js
+++ b/stories/ContentContainer.stories.js
@@ -1,4 +1,4 @@
-import ContentContainer from "../app/components/ContentContainer";
+import ContentContainer from "../app/components/content/ContentContainer";
const mockPost = {
slug: "sample-article",
diff --git a/stories/ContentThumbnailTemplate.stories.js b/stories/ContentThumbnailTemplate.stories.js
index be1b21e..eaa57b7 100644
--- a/stories/ContentThumbnailTemplate.stories.js
+++ b/stories/ContentThumbnailTemplate.stories.js
@@ -1,4 +1,4 @@
-import ContentThumbnailTemplate from "../app/components/ContentThumbnailTemplate";
+import ContentThumbnailTemplate from "../app/components/content/ContentThumbnailTemplate";
const mockPost = {
slug: "sample-article",
diff --git a/stories/ContextMenu.stories.js b/stories/ContextMenu.stories.js
index 0602f04..9d81a1b 100644
--- a/stories/ContextMenu.stories.js
+++ b/stories/ContextMenu.stories.js
@@ -1,8 +1,8 @@
import React, { useState } from "react";
-import ContextMenu from "../app/components/ContextMenu";
-import ContextMenuItem from "../app/components/ContextMenuItem";
-import ContextMenuSection from "../app/components/ContextMenuSection";
-import ContextMenuDivider from "../app/components/ContextMenuDivider";
+import ContextMenu from "../app/components/ContextMenu/ContextMenu";
+import ContextMenuItem from "../app/components/ContextMenu/ContextMenuItem";
+import ContextMenuSection from "../app/components/ContextMenu/ContextMenuSection";
+import ContextMenuDivider from "../app/components/ContextMenu/ContextMenuDivider";
export default {
title: "Forms/ContextMenu",
diff --git a/stories/HeroBannerSystem.stories.js b/stories/HeroBannerSystem.stories.js
index 9c6356a..c8f7c93 100644
--- a/stories/HeroBannerSystem.stories.js
+++ b/stories/HeroBannerSystem.stories.js
@@ -1,6 +1,6 @@
-import HeroBanner from "../app/components/HeroBanner";
-import ContentLockup from "../app/components/ContentLockup";
-import HeroDecor from "../app/components/HeroDecor";
+import HeroBanner from "../app/components/sections/HeroBanner";
+import ContentLockup from "../app/components/type/ContentLockup";
+import HeroDecor from "../app/components/sections/HeroBanner/HeroDecor";
export default {
title: "Systems/HeroBanner System",
diff --git a/stories/HeroDecor.stories.js b/stories/HeroDecor.stories.js
index 99e3b68..f3cea00 100644
--- a/stories/HeroDecor.stories.js
+++ b/stories/HeroDecor.stories.js
@@ -1,4 +1,4 @@
-import HeroDecor from "../app/components/HeroDecor";
+import HeroDecor from "../app/components/sections/HeroBanner/HeroDecor";
export default {
title: "Components/HeroDecor",
diff --git a/stories/MiniCard.stories.js b/stories/MiniCard.stories.js
index 77e6997..40064d7 100644
--- a/stories/MiniCard.stories.js
+++ b/stories/MiniCard.stories.js
@@ -1,4 +1,4 @@
-import MiniCard from "../app/components/MiniCard";
+import MiniCard from "../app/components/cards/MiniCard";
export default {
title: "Components/MiniCard",
diff --git a/tests/components/ContextMenu.test.tsx b/tests/components/ContextMenu.test.tsx
index 2fb2239..b5ac1f5 100644
--- a/tests/components/ContextMenu.test.tsx
+++ b/tests/components/ContextMenu.test.tsx
@@ -1,6 +1,6 @@
import React from "react";
-import ContextMenu from "../../app/components/ContextMenu";
-import ContextMenuItem from "../../app/components/ContextMenuItem";
+import ContextMenu from "../../app/components/ContextMenu/ContextMenu";
+import ContextMenuItem from "../../app/components/ContextMenu/ContextMenuItem";
import { componentTestSuite } from "../utils/componentTestSuite";
type ContextMenuProps = React.ComponentProps;
diff --git a/tests/components/ContextMenuItem.test.tsx b/tests/components/ContextMenuItem.test.tsx
index 99c01f0..e14aa43 100644
--- a/tests/components/ContextMenuItem.test.tsx
+++ b/tests/components/ContextMenuItem.test.tsx
@@ -1,5 +1,5 @@
import React from "react";
-import ContextMenuItem from "../../app/components/ContextMenuItem";
+import ContextMenuItem from "../../app/components/ContextMenu/ContextMenuItem";
import { componentTestSuite } from "../utils/componentTestSuite";
type ContextMenuItemProps = React.ComponentProps;
diff --git a/tests/components/InputLabel.test.tsx b/tests/components/InputLabel.test.tsx
index ba6b1e7..f59966d 100644
--- a/tests/components/InputLabel.test.tsx
+++ b/tests/components/InputLabel.test.tsx
@@ -1,7 +1,7 @@
import { describe, it, expect } from "vitest";
import { screen } from "@testing-library/react";
import { renderWithProviders as render } from "../utils/test-utils";
-import InputLabel from "../../app/components/InputLabel";
+import InputLabel from "../../app/components/utility/InputLabel";
import {
componentTestSuite,
type ComponentTestSuiteConfig,
diff --git a/tests/unit/ContentContainer.test.jsx b/tests/unit/ContentContainer.test.jsx
index af10a80..0df31f5 100644
--- a/tests/unit/ContentContainer.test.jsx
+++ b/tests/unit/ContentContainer.test.jsx
@@ -1,6 +1,6 @@
import { describe, it, expect, vi } from "vitest";
import { render, screen } from "@testing-library/react";
-import ContentContainer from "../../app/components/ContentContainer";
+import ContentContainer from "../../app/components/content/ContentContainer";
// Mock asset utils
vi.mock("../../lib/assetUtils", () => ({
diff --git a/tests/unit/ContentThumbnailTemplate.test.jsx b/tests/unit/ContentThumbnailTemplate.test.jsx
index 7a57815..374684e 100644
--- a/tests/unit/ContentThumbnailTemplate.test.jsx
+++ b/tests/unit/ContentThumbnailTemplate.test.jsx
@@ -1,6 +1,6 @@
import { describe, it, expect, vi } from "vitest";
import { render, screen } from "@testing-library/react";
-import ContentThumbnailTemplate from "../../app/components/ContentThumbnailTemplate";
+import ContentThumbnailTemplate from "../../app/components/content/ContentThumbnailTemplate";
// Mock Next.js components
vi.mock("next/link", () => {
From aef04c525ab2f1e7a1b19158f679211b22aaca41 Mon Sep 17 00:00:00 2001
From: adilallo <39313955+adilallo@users.noreply.github.com>
Date: Thu, 5 Feb 2026 22:46:16 -0700
Subject: [PATCH 03/15] Update stories to match new component organization
---
stories/{ => ContextMenu}/ContextMenu.stories.js | 10 +++++-----
stories/{ => buttons}/Button.stories.js | 4 ++--
stories/{ => buttons}/Button.visual.stories.js | 4 ++--
stories/{ => cards}/IconCard.stories.js | 6 +++---
stories/{ => cards}/MiniCard.stories.js | 4 ++--
stories/{ => cards}/NumberCard.stories.js | 4 ++--
stories/{ => cards}/RuleCard.stories.js | 4 ++--
stories/{ => content}/ContentContainer.stories.js | 4 ++--
.../{ => content}/ContentThumbnailTemplate.stories.js | 4 ++--
stories/{ => controls}/Checkbox.stories.js | 4 ++--
stories/{ => controls}/CheckboxGroup.stories.js | 4 ++--
stories/{ => controls}/RadioButton.stories.js | 4 ++--
stories/{ => controls}/RadioGroup.stories.js | 4 ++--
stories/{ => controls}/SelectInput.stories.js | 4 ++--
stories/{ => controls}/Switch.stories.js | 4 ++--
stories/{ => controls}/TextArea.stories.js | 4 ++--
stories/{ => controls}/TextInput.stories.js | 4 ++--
stories/{ => controls}/Toggle.stories.js | 4 ++--
stories/{ => controls}/ToggleGroup.stories.js | 4 ++--
stories/{ => icons}/Avatar.stories.js | 4 ++--
stories/{ => icons}/Logo.stories.js | 4 ++--
stories/{ => modals}/Alert.stories.js | 4 ++--
stories/{ => modals}/Create.stories.js | 6 +++---
stories/{ => modals}/Tooltip.stories.js | 6 +++---
stories/{ => navigation}/ConditionalHeader.stories.js | 4 ++--
stories/{ => navigation}/Footer.responsive.stories.js | 4 ++--
stories/{ => navigation}/Footer.stories.js | 4 ++--
stories/{ => navigation}/Header.responsive.stories.js | 4 ++--
stories/{ => navigation}/Header.stories.js | 4 ++--
stories/{ => navigation}/HeaderTab.stories.js | 6 +++---
stories/{ => navigation}/HomeHeader.stories.js | 4 ++--
stories/{ => navigation}/MenuBar.stories.js | 6 +++---
stories/{ => navigation}/MenuBarItem.stories.js | 4 ++--
stories/{ => progress}/Progress.stories.js | 2 +-
stories/{ => progress}/Stepper.stories.js | 4 ++--
stories/{ => sections}/AskOrganizer.stories.js | 4 ++--
stories/{ => sections}/ContentBanner.stories.js | 4 ++--
stories/{ => sections}/FeatureGrid.stories.js | 4 ++--
stories/{ => sections}/HeroBanner.stories.js | 4 ++--
stories/{ => sections}/HeroBannerSystem.stories.js | 6 +++---
stories/{ => sections}/HeroDecor.stories.js | 4 ++--
stories/{ => sections}/LogoWall.stories.js | 4 ++--
stories/{ => sections}/NumberedCards.stories.js | 4 ++--
stories/{ => sections}/QuoteBlock.stories.js | 4 ++--
stories/{ => sections}/RelatedArticles.stories.js | 4 ++--
stories/{ => sections}/RuleStack.stories.js | 4 ++--
stories/{ => sections}/SectionHeader.stories.js | 4 ++--
stories/{ => sections}/SectionNumber.stories.js | 4 ++--
stories/{ => type}/ContentLockup.stories.js | 4 ++--
stories/{ => utility}/AvatarContainer.stories.js | 6 +++---
stories/{ => utility}/ErrorBoundary.stories.js | 4 ++--
51 files changed, 111 insertions(+), 111 deletions(-)
rename stories/{ => ContextMenu}/ContextMenu.stories.js (91%)
rename stories/{ => buttons}/Button.stories.js (99%)
rename stories/{ => buttons}/Button.visual.stories.js (98%)
rename stories/{ => cards}/IconCard.stories.js (92%)
rename stories/{ => cards}/MiniCard.stories.js (95%)
rename stories/{ => cards}/NumberCard.stories.js (98%)
rename stories/{ => cards}/RuleCard.stories.js (99%)
rename stories/{ => content}/ContentContainer.stories.js (92%)
rename stories/{ => content}/ContentThumbnailTemplate.stories.js (93%)
rename stories/{ => controls}/Checkbox.stories.js (98%)
rename stories/{ => controls}/CheckboxGroup.stories.js (97%)
rename stories/{ => controls}/RadioButton.stories.js (98%)
rename stories/{ => controls}/RadioGroup.stories.js (97%)
rename stories/{ => controls}/SelectInput.stories.js (97%)
rename stories/{ => controls}/Switch.stories.js (97%)
rename stories/{ => controls}/TextArea.stories.js (98%)
rename stories/{ => controls}/TextInput.stories.js (98%)
rename stories/{ => controls}/Toggle.stories.js (97%)
rename stories/{ => controls}/ToggleGroup.stories.js (98%)
rename stories/{ => icons}/Avatar.stories.js (97%)
rename stories/{ => icons}/Logo.stories.js (98%)
rename stories/{ => modals}/Alert.stories.js (98%)
rename stories/{ => modals}/Create.stories.js (96%)
rename stories/{ => modals}/Tooltip.stories.js (92%)
rename stories/{ => navigation}/ConditionalHeader.stories.js (84%)
rename stories/{ => navigation}/Footer.responsive.stories.js (98%)
rename stories/{ => navigation}/Footer.stories.js (95%)
rename stories/{ => navigation}/Header.responsive.stories.js (98%)
rename stories/{ => navigation}/Header.stories.js (95%)
rename stories/{ => navigation}/HeaderTab.stories.js (82%)
rename stories/{ => navigation}/HomeHeader.stories.js (95%)
rename stories/{ => navigation}/MenuBar.stories.js (93%)
rename stories/{ => navigation}/MenuBarItem.stories.js (97%)
rename stories/{ => progress}/Progress.stories.js (97%)
rename stories/{ => progress}/Stepper.stories.js (95%)
rename stories/{ => sections}/AskOrganizer.stories.js (95%)
rename stories/{ => sections}/ContentBanner.stories.js (95%)
rename stories/{ => sections}/FeatureGrid.stories.js (95%)
rename stories/{ => sections}/HeroBanner.stories.js (92%)
rename stories/{ => sections}/HeroBannerSystem.stories.js (97%)
rename stories/{ => sections}/HeroDecor.stories.js (92%)
rename stories/{ => sections}/LogoWall.stories.js (95%)
rename stories/{ => sections}/NumberedCards.stories.js (95%)
rename stories/{ => sections}/QuoteBlock.stories.js (97%)
rename stories/{ => sections}/RelatedArticles.stories.js (95%)
rename stories/{ => sections}/RuleStack.stories.js (93%)
rename stories/{ => sections}/SectionHeader.stories.js (97%)
rename stories/{ => sections}/SectionNumber.stories.js (93%)
rename stories/{ => type}/ContentLockup.stories.js (93%)
rename stories/{ => utility}/AvatarContainer.stories.js (97%)
rename stories/{ => utility}/ErrorBoundary.stories.js (87%)
diff --git a/stories/ContextMenu.stories.js b/stories/ContextMenu/ContextMenu.stories.js
similarity index 91%
rename from stories/ContextMenu.stories.js
rename to stories/ContextMenu/ContextMenu.stories.js
index 9d81a1b..89adb19 100644
--- a/stories/ContextMenu.stories.js
+++ b/stories/ContextMenu/ContextMenu.stories.js
@@ -1,11 +1,11 @@
import React, { useState } from "react";
-import ContextMenu from "../app/components/ContextMenu/ContextMenu";
-import ContextMenuItem from "../app/components/ContextMenu/ContextMenuItem";
-import ContextMenuSection from "../app/components/ContextMenu/ContextMenuSection";
-import ContextMenuDivider from "../app/components/ContextMenu/ContextMenuDivider";
+import ContextMenu from "../../app/components/ContextMenu/ContextMenu";
+import ContextMenuItem from "../../app/components/ContextMenu/ContextMenuItem";
+import ContextMenuSection from "../../app/components/ContextMenu/ContextMenuSection";
+import ContextMenuDivider from "../../app/components/ContextMenu/ContextMenuDivider";
export default {
- title: "Forms/ContextMenu",
+ title: "Components/ContextMenu/ContextMenu",
component: ContextMenu,
argTypes: {
className: {
diff --git a/stories/Button.stories.js b/stories/buttons/Button.stories.js
similarity index 99%
rename from stories/Button.stories.js
rename to stories/buttons/Button.stories.js
index efd0684..7aead4d 100644
--- a/stories/Button.stories.js
+++ b/stories/buttons/Button.stories.js
@@ -1,7 +1,7 @@
-import Button from "../app/components/Button";
+import Button from "../../app/components/buttons/Button";
export default {
- title: "Components/Button",
+ title: "Components/Buttons/Button",
component: Button,
parameters: {
layout: "centered",
diff --git a/stories/Button.visual.stories.js b/stories/buttons/Button.visual.stories.js
similarity index 98%
rename from stories/Button.visual.stories.js
rename to stories/buttons/Button.visual.stories.js
index c64b5c8..2593846 100644
--- a/stories/Button.visual.stories.js
+++ b/stories/buttons/Button.visual.stories.js
@@ -1,8 +1,8 @@
-import Button from "../app/components/Button";
+import Button from "../../app/components/buttons/Button";
import { within, userEvent } from "@storybook/test";
export default {
- title: "Components/Button/Visual Regression",
+ title: "Components/Buttons/Button/Visual Regression",
component: Button,
parameters: {
// Chromatic configuration for visual testing
diff --git a/stories/IconCard.stories.js b/stories/cards/IconCard.stories.js
similarity index 92%
rename from stories/IconCard.stories.js
rename to stories/cards/IconCard.stories.js
index e6bab37..2c93784 100644
--- a/stories/IconCard.stories.js
+++ b/stories/cards/IconCard.stories.js
@@ -1,8 +1,8 @@
-import IconCard from "../app/components/IconCard";
-import { getAssetPath } from "../lib/assetUtils";
+import IconCard from "../../app/components/cards/IconCard";
+import { getAssetPath } from "../../lib/assetUtils";
export default {
- title: "Components/IconCard",
+ title: "Components/Cards/IconCard",
component: IconCard,
parameters: {
layout: "centered",
diff --git a/stories/MiniCard.stories.js b/stories/cards/MiniCard.stories.js
similarity index 95%
rename from stories/MiniCard.stories.js
rename to stories/cards/MiniCard.stories.js
index 40064d7..aba9211 100644
--- a/stories/MiniCard.stories.js
+++ b/stories/cards/MiniCard.stories.js
@@ -1,7 +1,7 @@
-import MiniCard from "../app/components/cards/MiniCard";
+import MiniCard from "../../app/components/cards/MiniCard";
export default {
- title: "Components/MiniCard",
+ title: "Components/Cards/MiniCard",
component: MiniCard,
parameters: {
layout: "centered",
diff --git a/stories/NumberCard.stories.js b/stories/cards/NumberCard.stories.js
similarity index 98%
rename from stories/NumberCard.stories.js
rename to stories/cards/NumberCard.stories.js
index d4ab88c..b03f9ff 100644
--- a/stories/NumberCard.stories.js
+++ b/stories/cards/NumberCard.stories.js
@@ -1,7 +1,7 @@
-import NumberCard from "../app/components/NumberCard";
+import NumberCard from "../../app/components/cards/NumberCard";
export default {
- title: "Components/NumberCard",
+ title: "Components/Cards/NumberCard",
component: NumberCard,
parameters: {
layout: "centered",
diff --git a/stories/RuleCard.stories.js b/stories/cards/RuleCard.stories.js
similarity index 99%
rename from stories/RuleCard.stories.js
rename to stories/cards/RuleCard.stories.js
index 75f1dea..3dafa02 100644
--- a/stories/RuleCard.stories.js
+++ b/stories/cards/RuleCard.stories.js
@@ -1,8 +1,8 @@
-import RuleCard from "../app/components/cards/RuleCard";
+import RuleCard from "../../app/components/cards/RuleCard";
import Image from "next/image";
export default {
- title: "Components/RuleCard",
+ title: "Components/Cards/RuleCard",
component: RuleCard,
parameters: {
layout: "centered",
diff --git a/stories/ContentContainer.stories.js b/stories/content/ContentContainer.stories.js
similarity index 92%
rename from stories/ContentContainer.stories.js
rename to stories/content/ContentContainer.stories.js
index aa39e94..0604d9e 100644
--- a/stories/ContentContainer.stories.js
+++ b/stories/content/ContentContainer.stories.js
@@ -1,4 +1,4 @@
-import ContentContainer from "../app/components/content/ContentContainer";
+import ContentContainer from "../../app/components/content/ContentContainer";
const mockPost = {
slug: "sample-article",
@@ -12,7 +12,7 @@ const mockPost = {
};
export default {
- title: "Components/ContentContainer",
+ title: "Components/Content/ContentContainer",
component: ContentContainer,
parameters: {
docs: {
diff --git a/stories/ContentThumbnailTemplate.stories.js b/stories/content/ContentThumbnailTemplate.stories.js
similarity index 93%
rename from stories/ContentThumbnailTemplate.stories.js
rename to stories/content/ContentThumbnailTemplate.stories.js
index eaa57b7..8f56b27 100644
--- a/stories/ContentThumbnailTemplate.stories.js
+++ b/stories/content/ContentThumbnailTemplate.stories.js
@@ -1,4 +1,4 @@
-import ContentThumbnailTemplate from "../app/components/content/ContentThumbnailTemplate";
+import ContentThumbnailTemplate from "../../app/components/content/ContentThumbnailTemplate";
const mockPost = {
slug: "sample-article",
@@ -14,7 +14,7 @@ const mockPost = {
const mockSlugOrder = ["sample-article", "another-article", "third-article"];
export default {
- title: "Components/ContentThumbnailTemplate",
+ title: "Components/Content/ContentThumbnailTemplate",
component: ContentThumbnailTemplate,
parameters: {
docs: {
diff --git a/stories/Checkbox.stories.js b/stories/controls/Checkbox.stories.js
similarity index 98%
rename from stories/Checkbox.stories.js
rename to stories/controls/Checkbox.stories.js
index 79e72c8..b38afe7 100644
--- a/stories/Checkbox.stories.js
+++ b/stories/controls/Checkbox.stories.js
@@ -1,5 +1,5 @@
import React from "react";
-import Checkbox from "../app/components/controls/Checkbox";
+import Checkbox from "../../app/components/controls/Checkbox";
import { within, userEvent } from "@storybook/test";
import { expect } from "@storybook/test";
@@ -27,7 +27,7 @@ const CheckedInteraction = {
};
export default {
- title: "Forms/Checkbox",
+ title: "Components/Controls/Checkbox",
component: Checkbox,
parameters: {
layout: "centered",
diff --git a/stories/CheckboxGroup.stories.js b/stories/controls/CheckboxGroup.stories.js
similarity index 97%
rename from stories/CheckboxGroup.stories.js
rename to stories/controls/CheckboxGroup.stories.js
index 11f5c54..526e6e5 100644
--- a/stories/CheckboxGroup.stories.js
+++ b/stories/controls/CheckboxGroup.stories.js
@@ -1,8 +1,8 @@
import React from "react";
-import CheckboxGroup from "../app/components/CheckboxGroup";
+import CheckboxGroup from "../../app/components/controls/CheckboxGroup";
export default {
- title: "Forms/CheckboxGroup",
+ title: "Components/Controls/CheckboxGroup",
component: CheckboxGroup,
parameters: {
layout: "centered",
diff --git a/stories/RadioButton.stories.js b/stories/controls/RadioButton.stories.js
similarity index 98%
rename from stories/RadioButton.stories.js
rename to stories/controls/RadioButton.stories.js
index 70c4cef..8a75c42 100644
--- a/stories/RadioButton.stories.js
+++ b/stories/controls/RadioButton.stories.js
@@ -1,8 +1,8 @@
import React from "react";
-import RadioButton from "../app/components/controls/RadioButton";
+import RadioButton from "../../app/components/controls/RadioButton";
export default {
- title: "Forms/RadioButton",
+ title: "Components/Controls/RadioButton",
component: RadioButton,
parameters: {
layout: "centered",
diff --git a/stories/RadioGroup.stories.js b/stories/controls/RadioGroup.stories.js
similarity index 97%
rename from stories/RadioGroup.stories.js
rename to stories/controls/RadioGroup.stories.js
index aa06503..74f758f 100644
--- a/stories/RadioGroup.stories.js
+++ b/stories/controls/RadioGroup.stories.js
@@ -1,8 +1,8 @@
import React from "react";
-import RadioGroup from "../app/components/RadioGroup";
+import RadioGroup from "../../app/components/controls/RadioGroup";
export default {
- title: "Forms/RadioGroup",
+ title: "Components/Controls/RadioGroup",
component: RadioGroup,
parameters: {
layout: "centered",
diff --git a/stories/SelectInput.stories.js b/stories/controls/SelectInput.stories.js
similarity index 97%
rename from stories/SelectInput.stories.js
rename to stories/controls/SelectInput.stories.js
index 69a9baf..ccd56da 100644
--- a/stories/SelectInput.stories.js
+++ b/stories/controls/SelectInput.stories.js
@@ -1,8 +1,8 @@
import React, { useState } from "react";
-import SelectInput from "../app/components/SelectInput";
+import SelectInput from "../../app/components/controls/SelectInput";
export default {
- title: "Forms/SelectInput",
+ title: "Components/Controls/SelectInput",
component: SelectInput,
parameters: {
layout: "centered",
diff --git a/stories/Switch.stories.js b/stories/controls/Switch.stories.js
similarity index 97%
rename from stories/Switch.stories.js
rename to stories/controls/Switch.stories.js
index 8dd184c..1e0c9af 100644
--- a/stories/Switch.stories.js
+++ b/stories/controls/Switch.stories.js
@@ -1,8 +1,8 @@
import React from "react";
-import Switch from "../app/components/Switch";
+import Switch from "../../app/components/controls/Switch";
export default {
- title: "Forms/Switch",
+ title: "Components/Controls/Switch",
component: Switch,
parameters: {
layout: "centered",
diff --git a/stories/TextArea.stories.js b/stories/controls/TextArea.stories.js
similarity index 98%
rename from stories/TextArea.stories.js
rename to stories/controls/TextArea.stories.js
index f4fc114..b16fa32 100644
--- a/stories/TextArea.stories.js
+++ b/stories/controls/TextArea.stories.js
@@ -1,8 +1,8 @@
import React from "react";
-import TextArea from "../app/components/TextArea";
+import TextArea from "../../app/components/controls/TextArea";
export default {
- title: "Forms/TextArea",
+ title: "Components/Controls/TextArea",
component: TextArea,
parameters: {
layout: "centered",
diff --git a/stories/TextInput.stories.js b/stories/controls/TextInput.stories.js
similarity index 98%
rename from stories/TextInput.stories.js
rename to stories/controls/TextInput.stories.js
index 2f37e69..cc7ade0 100644
--- a/stories/TextInput.stories.js
+++ b/stories/controls/TextInput.stories.js
@@ -1,8 +1,8 @@
import React from "react";
-import TextInput from "../app/components/TextInput";
+import TextInput from "../../app/components/controls/TextInput";
export default {
- title: "Forms/TextInput",
+ title: "Components/Controls/TextInput",
component: TextInput,
parameters: {
layout: "centered",
diff --git a/stories/Toggle.stories.js b/stories/controls/Toggle.stories.js
similarity index 97%
rename from stories/Toggle.stories.js
rename to stories/controls/Toggle.stories.js
index c31f15c..569122e 100644
--- a/stories/Toggle.stories.js
+++ b/stories/controls/Toggle.stories.js
@@ -1,8 +1,8 @@
import React from "react";
-import Toggle from "../app/components/Toggle";
+import Toggle from "../../app/components/controls/Toggle";
export default {
- title: "Forms/Toggle",
+ title: "Components/Controls/Toggle",
component: Toggle,
parameters: {
layout: "centered",
diff --git a/stories/ToggleGroup.stories.js b/stories/controls/ToggleGroup.stories.js
similarity index 98%
rename from stories/ToggleGroup.stories.js
rename to stories/controls/ToggleGroup.stories.js
index b22af10..99f5597 100644
--- a/stories/ToggleGroup.stories.js
+++ b/stories/controls/ToggleGroup.stories.js
@@ -1,8 +1,8 @@
import React from "react";
-import ToggleGroup from "../app/components/ToggleGroup";
+import ToggleGroup from "../../app/components/controls/ToggleGroup";
export default {
- title: "Forms/ToggleGroup",
+ title: "Components/Controls/ToggleGroup",
component: ToggleGroup,
parameters: {
layout: "centered",
diff --git a/stories/Avatar.stories.js b/stories/icons/Avatar.stories.js
similarity index 97%
rename from stories/Avatar.stories.js
rename to stories/icons/Avatar.stories.js
index bf9d2ed..1016640 100644
--- a/stories/Avatar.stories.js
+++ b/stories/icons/Avatar.stories.js
@@ -1,7 +1,7 @@
-import Avatar from "../app/components/Avatar";
+import Avatar from "../../app/components/icons/Avatar";
export default {
- title: "Components/Avatar",
+ title: "Components/Icons/Avatar",
component: Avatar,
parameters: {
layout: "centered",
diff --git a/stories/Logo.stories.js b/stories/icons/Logo.stories.js
similarity index 98%
rename from stories/Logo.stories.js
rename to stories/icons/Logo.stories.js
index 056866e..91762f6 100644
--- a/stories/Logo.stories.js
+++ b/stories/icons/Logo.stories.js
@@ -1,7 +1,7 @@
-import Logo from "../app/components/Logo";
+import Logo from "../../app/components/icons/Logo";
export default {
- title: "Components/Logo",
+ title: "Components/Icons/Logo",
component: Logo,
parameters: {
layout: "centered",
diff --git a/stories/Alert.stories.js b/stories/modals/Alert.stories.js
similarity index 98%
rename from stories/Alert.stories.js
rename to stories/modals/Alert.stories.js
index f9b4861..f695218 100644
--- a/stories/Alert.stories.js
+++ b/stories/modals/Alert.stories.js
@@ -1,8 +1,8 @@
import React, { useState } from "react";
-import Alert from "../app/components/Alert";
+import Alert from "../../app/components/modals/Alert";
export default {
- title: "Components/Alert",
+ title: "Components/Modals/Alert",
component: Alert,
argTypes: {
status: {
diff --git a/stories/Create.stories.js b/stories/modals/Create.stories.js
similarity index 96%
rename from stories/Create.stories.js
rename to stories/modals/Create.stories.js
index d6d989b..3777099 100644
--- a/stories/Create.stories.js
+++ b/stories/modals/Create.stories.js
@@ -1,8 +1,8 @@
-import Create from "../app/components/Create";
-import TextInput from "../app/components/TextInput";
+import Create from "../../app/components/modals/Create";
+import TextInput from "../../app/components/controls/TextInput";
export default {
- title: "Components/Create",
+ title: "Components/Modals/Create",
component: Create,
parameters: {
layout: "fullscreen",
diff --git a/stories/Tooltip.stories.js b/stories/modals/Tooltip.stories.js
similarity index 92%
rename from stories/Tooltip.stories.js
rename to stories/modals/Tooltip.stories.js
index 5fa8261..0a1ea08 100644
--- a/stories/Tooltip.stories.js
+++ b/stories/modals/Tooltip.stories.js
@@ -1,9 +1,9 @@
import React from "react";
-import Tooltip from "../app/components/Tooltip";
-import Button from "../app/components/Button";
+import Tooltip from "../../app/components/modals/Tooltip";
+import Button from "../../app/components/buttons/Button";
export default {
- title: "Components/Tooltip",
+ title: "Components/Modals/Tooltip",
component: Tooltip,
argTypes: {
position: {
diff --git a/stories/ConditionalHeader.stories.js b/stories/navigation/ConditionalHeader.stories.js
similarity index 84%
rename from stories/ConditionalHeader.stories.js
rename to stories/navigation/ConditionalHeader.stories.js
index 0e134f8..288c546 100644
--- a/stories/ConditionalHeader.stories.js
+++ b/stories/navigation/ConditionalHeader.stories.js
@@ -1,7 +1,7 @@
-import ConditionalHeader from "../app/components/navigation/ConditionalHeader";
+import ConditionalHeader from "../../app/components/navigation/ConditionalHeader";
export default {
- title: "Components/ConditionalHeader",
+ title: "Components/Navigation/ConditionalHeader",
component: ConditionalHeader,
parameters: {
docs: {
diff --git a/stories/Footer.responsive.stories.js b/stories/navigation/Footer.responsive.stories.js
similarity index 98%
rename from stories/Footer.responsive.stories.js
rename to stories/navigation/Footer.responsive.stories.js
index 0c1817f..5780223 100644
--- a/stories/Footer.responsive.stories.js
+++ b/stories/navigation/Footer.responsive.stories.js
@@ -1,8 +1,8 @@
-import Footer from "../app/components/Footer";
+import Footer from "../../app/components/navigation/Footer";
import { within, userEvent } from "@storybook/test";
export default {
- title: "Components/Footer/Responsive",
+ title: "Components/Navigation/Footer/Responsive",
component: Footer,
parameters: {
// Chromatic configuration for responsive testing
diff --git a/stories/Footer.stories.js b/stories/navigation/Footer.stories.js
similarity index 95%
rename from stories/Footer.stories.js
rename to stories/navigation/Footer.stories.js
index aba2b34..8646117 100644
--- a/stories/Footer.stories.js
+++ b/stories/navigation/Footer.stories.js
@@ -1,7 +1,7 @@
-import Footer from "../app/components/Footer";
+import Footer from "../../app/components/navigation/Footer";
export default {
- title: "Components/Footer",
+ title: "Components/Navigation/Footer",
component: Footer,
parameters: {
layout: "fullscreen",
diff --git a/stories/Header.responsive.stories.js b/stories/navigation/Header.responsive.stories.js
similarity index 98%
rename from stories/Header.responsive.stories.js
rename to stories/navigation/Header.responsive.stories.js
index e1ff4c2..457c2f5 100644
--- a/stories/Header.responsive.stories.js
+++ b/stories/navigation/Header.responsive.stories.js
@@ -1,7 +1,7 @@
-import Header from "../app/components/Header";
+import Header from "../../app/components/navigation/Header";
export default {
- title: "Components/Header/Responsive",
+ title: "Components/Navigation/Header/Responsive",
component: Header,
parameters: {
// Chromatic configuration for responsive testing
diff --git a/stories/Header.stories.js b/stories/navigation/Header.stories.js
similarity index 95%
rename from stories/Header.stories.js
rename to stories/navigation/Header.stories.js
index 66a7705..aa5afca 100644
--- a/stories/Header.stories.js
+++ b/stories/navigation/Header.stories.js
@@ -1,7 +1,7 @@
-import Header from "../app/components/Header";
+import Header from "../../app/components/navigation/Header";
export default {
- title: "Components/Header",
+ title: "Components/Navigation/Header",
component: Header,
parameters: {
layout: "fullscreen",
diff --git a/stories/HeaderTab.stories.js b/stories/navigation/HeaderTab.stories.js
similarity index 82%
rename from stories/HeaderTab.stories.js
rename to stories/navigation/HeaderTab.stories.js
index 1d6c806..708aa66 100644
--- a/stories/HeaderTab.stories.js
+++ b/stories/navigation/HeaderTab.stories.js
@@ -1,8 +1,8 @@
-import HeaderTab from "../app/components/HeaderTab";
-import Logo from "../app/components/Logo";
+import HeaderTab from "../../app/components/navigation/HeaderTab";
+import Logo from "../../app/components/icons/Logo";
export default {
- title: "Components/HeaderTab",
+ title: "Components/Navigation/HeaderTab",
component: HeaderTab,
parameters: {
layout: "centered",
diff --git a/stories/HomeHeader.stories.js b/stories/navigation/HomeHeader.stories.js
similarity index 95%
rename from stories/HomeHeader.stories.js
rename to stories/navigation/HomeHeader.stories.js
index 0784021..99d12bf 100644
--- a/stories/HomeHeader.stories.js
+++ b/stories/navigation/HomeHeader.stories.js
@@ -1,7 +1,7 @@
-import HomeHeader from "../app/components/HomeHeader";
+import HomeHeader from "../../app/components/navigation/HomeHeader";
export default {
- title: "Components/HomeHeader",
+ title: "Components/Navigation/HomeHeader",
component: HomeHeader,
parameters: {
layout: "fullscreen",
diff --git a/stories/MenuBar.stories.js b/stories/navigation/MenuBar.stories.js
similarity index 93%
rename from stories/MenuBar.stories.js
rename to stories/navigation/MenuBar.stories.js
index 824232b..ad1f9e1 100644
--- a/stories/MenuBar.stories.js
+++ b/stories/navigation/MenuBar.stories.js
@@ -1,8 +1,8 @@
-import MenuBar from "../app/components/MenuBar";
-import MenuBarItem from "../app/components/MenuBarItem";
+import MenuBar from "../../app/components/navigation/MenuBar";
+import MenuBarItem from "../../app/components/navigation/MenuBarItem";
export default {
- title: "Components/MenuBar",
+ title: "Components/Navigation/MenuBar",
component: MenuBar,
parameters: {
layout: "centered",
diff --git a/stories/MenuBarItem.stories.js b/stories/navigation/MenuBarItem.stories.js
similarity index 97%
rename from stories/MenuBarItem.stories.js
rename to stories/navigation/MenuBarItem.stories.js
index c6f3b61..4a44d67 100644
--- a/stories/MenuBarItem.stories.js
+++ b/stories/navigation/MenuBarItem.stories.js
@@ -1,7 +1,7 @@
-import MenuBarItem from "../app/components/MenuBarItem";
+import MenuBarItem from "../../app/components/navigation/MenuBarItem";
export default {
- title: "Components/MenuBarItem",
+ title: "Components/Navigation/MenuBarItem",
component: MenuBarItem,
parameters: {
layout: "centered",
diff --git a/stories/Progress.stories.js b/stories/progress/Progress.stories.js
similarity index 97%
rename from stories/Progress.stories.js
rename to stories/progress/Progress.stories.js
index 2e3ce5c..077cf34 100644
--- a/stories/Progress.stories.js
+++ b/stories/progress/Progress.stories.js
@@ -1,4 +1,4 @@
-import Progress from "../app/components/Progress";
+import Progress from "../../app/components/progress/Progress";
export default {
title: "Components/Progress",
diff --git a/stories/Stepper.stories.js b/stories/progress/Stepper.stories.js
similarity index 95%
rename from stories/Stepper.stories.js
rename to stories/progress/Stepper.stories.js
index 71281a8..478c60e 100644
--- a/stories/Stepper.stories.js
+++ b/stories/progress/Stepper.stories.js
@@ -1,7 +1,7 @@
-import Stepper from "../app/components/Stepper";
+import Stepper from "../../app/components/progress/Stepper";
export default {
- title: "Components/Stepper",
+ title: "Components/Progress/Stepper",
component: Stepper,
parameters: {
layout: "centered",
diff --git a/stories/AskOrganizer.stories.js b/stories/sections/AskOrganizer.stories.js
similarity index 95%
rename from stories/AskOrganizer.stories.js
rename to stories/sections/AskOrganizer.stories.js
index 3e47905..2e438ad 100644
--- a/stories/AskOrganizer.stories.js
+++ b/stories/sections/AskOrganizer.stories.js
@@ -1,7 +1,7 @@
-import AskOrganizer from "../app/components/AskOrganizer";
+import AskOrganizer from "../../app/components/sections/AskOrganizer";
export default {
- title: "Components/AskOrganizer",
+ title: "Components/Sections/AskOrganizer",
component: AskOrganizer,
parameters: {
docs: {
diff --git a/stories/ContentBanner.stories.js b/stories/sections/ContentBanner.stories.js
similarity index 95%
rename from stories/ContentBanner.stories.js
rename to stories/sections/ContentBanner.stories.js
index 1ccd8ae..4b92b8d 100644
--- a/stories/ContentBanner.stories.js
+++ b/stories/sections/ContentBanner.stories.js
@@ -1,4 +1,4 @@
-import ContentBanner from "../app/components/ContentBanner";
+import ContentBanner from "../../app/components/sections/ContentBanner";
const mockBlogPost = {
slug: "sample-article",
@@ -21,7 +21,7 @@ const mockBlogPost = {
};
export default {
- title: "Components/ContentBanner",
+ title: "Components/Sections/ContentBanner",
component: ContentBanner,
parameters: {
docs: {
diff --git a/stories/FeatureGrid.stories.js b/stories/sections/FeatureGrid.stories.js
similarity index 95%
rename from stories/FeatureGrid.stories.js
rename to stories/sections/FeatureGrid.stories.js
index 28864ba..110a62a 100644
--- a/stories/FeatureGrid.stories.js
+++ b/stories/sections/FeatureGrid.stories.js
@@ -1,7 +1,7 @@
-import FeatureGrid from "../app/components/FeatureGrid";
+import FeatureGrid from "../../app/components/sections/FeatureGrid";
export default {
- title: "Components/FeatureGrid",
+ title: "Components/Sections/FeatureGrid",
component: FeatureGrid,
parameters: {
layout: "fullscreen",
diff --git a/stories/HeroBanner.stories.js b/stories/sections/HeroBanner.stories.js
similarity index 92%
rename from stories/HeroBanner.stories.js
rename to stories/sections/HeroBanner.stories.js
index c5926ea..d6362e5 100644
--- a/stories/HeroBanner.stories.js
+++ b/stories/sections/HeroBanner.stories.js
@@ -1,7 +1,7 @@
-import HeroBanner from "../app/components/HeroBanner";
+import HeroBanner from "../../app/components/sections/HeroBanner";
export default {
- title: "Components/HeroBanner",
+ title: "Components/Sections/HeroBanner",
component: HeroBanner,
parameters: {
layout: "fullscreen",
diff --git a/stories/HeroBannerSystem.stories.js b/stories/sections/HeroBannerSystem.stories.js
similarity index 97%
rename from stories/HeroBannerSystem.stories.js
rename to stories/sections/HeroBannerSystem.stories.js
index c8f7c93..04c4d1f 100644
--- a/stories/HeroBannerSystem.stories.js
+++ b/stories/sections/HeroBannerSystem.stories.js
@@ -1,6 +1,6 @@
-import HeroBanner from "../app/components/sections/HeroBanner";
-import ContentLockup from "../app/components/type/ContentLockup";
-import HeroDecor from "../app/components/sections/HeroBanner/HeroDecor";
+import HeroBanner from "../../app/components/sections/HeroBanner";
+import ContentLockup from "../../app/components/type/ContentLockup";
+import HeroDecor from "../../app/components/sections/HeroBanner/HeroDecor";
export default {
title: "Systems/HeroBanner System",
diff --git a/stories/HeroDecor.stories.js b/stories/sections/HeroDecor.stories.js
similarity index 92%
rename from stories/HeroDecor.stories.js
rename to stories/sections/HeroDecor.stories.js
index f3cea00..c76baf8 100644
--- a/stories/HeroDecor.stories.js
+++ b/stories/sections/HeroDecor.stories.js
@@ -1,7 +1,7 @@
-import HeroDecor from "../app/components/sections/HeroBanner/HeroDecor";
+import HeroDecor from "../../app/components/sections/HeroBanner/HeroDecor";
export default {
- title: "Components/HeroDecor",
+ title: "Components/Sections/HeroDecor",
component: HeroDecor,
parameters: {
layout: "centered",
diff --git a/stories/LogoWall.stories.js b/stories/sections/LogoWall.stories.js
similarity index 95%
rename from stories/LogoWall.stories.js
rename to stories/sections/LogoWall.stories.js
index 4e58e6f..13fda43 100644
--- a/stories/LogoWall.stories.js
+++ b/stories/sections/LogoWall.stories.js
@@ -1,7 +1,7 @@
-import LogoWall from "../app/components/LogoWall";
+import LogoWall from "../../app/components/sections/LogoWall";
export default {
- title: "Components/LogoWall",
+ title: "Components/Sections/LogoWall",
component: LogoWall,
parameters: {
layout: "fullscreen",
diff --git a/stories/NumberedCards.stories.js b/stories/sections/NumberedCards.stories.js
similarity index 95%
rename from stories/NumberedCards.stories.js
rename to stories/sections/NumberedCards.stories.js
index 3d9f651..aad4794 100644
--- a/stories/NumberedCards.stories.js
+++ b/stories/sections/NumberedCards.stories.js
@@ -1,7 +1,7 @@
-import NumberedCards from "../app/components/NumberedCards";
+import NumberedCards from "../../app/components/sections/NumberedCards";
export default {
- title: "Components/NumberedCards",
+ title: "Components/Sections/NumberedCards",
component: NumberedCards,
parameters: {
layout: "fullscreen",
diff --git a/stories/QuoteBlock.stories.js b/stories/sections/QuoteBlock.stories.js
similarity index 97%
rename from stories/QuoteBlock.stories.js
rename to stories/sections/QuoteBlock.stories.js
index 3b4f0f6..3ae18bf 100644
--- a/stories/QuoteBlock.stories.js
+++ b/stories/sections/QuoteBlock.stories.js
@@ -1,7 +1,7 @@
-import QuoteBlock from "../app/components/QuoteBlock";
+import QuoteBlock from "../../app/components/sections/QuoteBlock";
export default {
- title: "Components/QuoteBlock",
+ title: "Components/Sections/QuoteBlock",
component: QuoteBlock,
parameters: {
layout: "fullscreen",
diff --git a/stories/RelatedArticles.stories.js b/stories/sections/RelatedArticles.stories.js
similarity index 95%
rename from stories/RelatedArticles.stories.js
rename to stories/sections/RelatedArticles.stories.js
index 869aa43..a6aaebf 100644
--- a/stories/RelatedArticles.stories.js
+++ b/stories/sections/RelatedArticles.stories.js
@@ -1,4 +1,4 @@
-import RelatedArticles from "../app/components/RelatedArticles";
+import RelatedArticles from "../../app/components/sections/RelatedArticles";
const mockRelatedPosts = [
{
@@ -31,7 +31,7 @@ const mockRelatedPosts = [
];
export default {
- title: "Components/RelatedArticles",
+ title: "Components/Sections/RelatedArticles",
component: RelatedArticles,
parameters: {
docs: {
diff --git a/stories/RuleStack.stories.js b/stories/sections/RuleStack.stories.js
similarity index 93%
rename from stories/RuleStack.stories.js
rename to stories/sections/RuleStack.stories.js
index c5bca40..1da655d 100644
--- a/stories/RuleStack.stories.js
+++ b/stories/sections/RuleStack.stories.js
@@ -1,7 +1,7 @@
-import RuleStack from "../app/components/RuleStack";
+import RuleStack from "../../app/components/sections/RuleStack";
export default {
- title: "Components/RuleStack",
+ title: "Components/Sections/RuleStack",
component: RuleStack,
parameters: {
layout: "fullscreen",
diff --git a/stories/SectionHeader.stories.js b/stories/sections/SectionHeader.stories.js
similarity index 97%
rename from stories/SectionHeader.stories.js
rename to stories/sections/SectionHeader.stories.js
index a821b94..cbf77fb 100644
--- a/stories/SectionHeader.stories.js
+++ b/stories/sections/SectionHeader.stories.js
@@ -1,7 +1,7 @@
-import SectionHeader from "../app/components/SectionHeader";
+import SectionHeader from "../../app/components/sections/SectionHeader";
export default {
- title: "Components/SectionHeader",
+ title: "Components/Sections/SectionHeader",
component: SectionHeader,
parameters: {
layout: "centered",
diff --git a/stories/SectionNumber.stories.js b/stories/sections/SectionNumber.stories.js
similarity index 93%
rename from stories/SectionNumber.stories.js
rename to stories/sections/SectionNumber.stories.js
index b0287c6..2fbb875 100644
--- a/stories/SectionNumber.stories.js
+++ b/stories/sections/SectionNumber.stories.js
@@ -1,7 +1,7 @@
-import SectionNumber from "../app/components/SectionNumber";
+import SectionNumber from "../../app/components/sections/SectionNumber";
export default {
- title: "Components/SectionNumber",
+ title: "Components/Sections/SectionNumber",
component: SectionNumber,
parameters: {
layout: "centered",
diff --git a/stories/ContentLockup.stories.js b/stories/type/ContentLockup.stories.js
similarity index 93%
rename from stories/ContentLockup.stories.js
rename to stories/type/ContentLockup.stories.js
index 387d4ad..fd000a3 100644
--- a/stories/ContentLockup.stories.js
+++ b/stories/type/ContentLockup.stories.js
@@ -1,7 +1,7 @@
-import ContentLockup from "../app/components/ContentLockup";
+import ContentLockup from "../../app/components/type/ContentLockup";
export default {
- title: "Components/ContentLockup",
+ title: "Components/Type/ContentLockup",
component: ContentLockup,
parameters: {
layout: "centered",
diff --git a/stories/AvatarContainer.stories.js b/stories/utility/AvatarContainer.stories.js
similarity index 97%
rename from stories/AvatarContainer.stories.js
rename to stories/utility/AvatarContainer.stories.js
index 3aa222d..2162ae1 100644
--- a/stories/AvatarContainer.stories.js
+++ b/stories/utility/AvatarContainer.stories.js
@@ -1,8 +1,8 @@
-import AvatarContainer from "../app/components/AvatarContainer";
-import Avatar from "../app/components/Avatar";
+import AvatarContainer from "../../app/components/utility/AvatarContainer";
+import Avatar from "../../app/components/icons/Avatar";
export default {
- title: "Components/AvatarContainer",
+ title: "Components/Utility/AvatarContainer",
component: AvatarContainer,
parameters: {
layout: "centered",
diff --git a/stories/ErrorBoundary.stories.js b/stories/utility/ErrorBoundary.stories.js
similarity index 87%
rename from stories/ErrorBoundary.stories.js
rename to stories/utility/ErrorBoundary.stories.js
index bb445ca..a2eccf4 100644
--- a/stories/ErrorBoundary.stories.js
+++ b/stories/utility/ErrorBoundary.stories.js
@@ -1,7 +1,7 @@
-import ErrorBoundary from "../app/components/ErrorBoundary";
+import ErrorBoundary from "../../app/components/utility/ErrorBoundary";
export default {
- title: "Components/ErrorBoundary",
+ title: "Components/Utility/ErrorBoundary",
component: ErrorBoundary,
parameters: {
layout: "centered",
From e3478e610563a48d8cf09e2270210017d60f1b5e Mon Sep 17 00:00:00 2001
From: adilallo <39313955+adilallo@users.noreply.github.com>
Date: Fri, 6 Feb 2026 08:06:50 -0700
Subject: [PATCH 04/15] Update and resolves tests
---
.../ContextMenuItem.container.tsx | 2 +-
.../SelectOption/SelectOption.container.tsx | 2 +-
.../utility/ModalFooter/ModalFooter.view.tsx | 2 +-
tests/components/Alert.test.tsx | 2 +-
tests/components/AskOrganizer.test.tsx | 2 +-
tests/components/Button.test.tsx | 2 +-
tests/components/Checkbox.test.tsx | 2 +-
tests/components/ContentBanner.test.tsx | 2 +-
tests/components/Create.test.tsx | 4 ++--
tests/components/FeatureGrid.test.tsx | 2 +-
tests/components/Footer.test.tsx | 2 +-
tests/components/Header.test.tsx | 2 +-
tests/components/HeroBanner.test.tsx | 2 +-
tests/components/IconCard.test.tsx | 2 +-
tests/components/Logo.test.tsx | 2 +-
tests/components/MultiSelect.test.tsx | 2 +-
tests/components/Progress.test.tsx | 2 +-
tests/components/RadioButton.test.tsx | 2 +-
tests/components/RadioGroup.test.tsx | 2 +-
tests/components/RelatedArticles.test.tsx | 4 ++--
tests/components/SectionHeader.test.tsx | 2 +-
tests/components/SelectInput.test.tsx | 2 +-
tests/components/Stepper.test.tsx | 2 +-
tests/components/Switch.test.tsx | 2 +-
tests/components/TextArea.test.tsx | 2 +-
tests/components/TextInput.test.tsx | 2 +-
tests/components/Toggle.test.tsx | 2 +-
tests/components/ToggleGroup.test.tsx | 2 +-
tests/components/Tooltip.test.tsx | 2 +-
.../homepage-full-chromium.png | Bin 902976 -> 903533 bytes
.../homepage-full-firefox.png | Bin 1090559 -> 1093918 bytes
.../homepage-full-mobile.png | Bin 401974 -> 433377 bytes
.../homepage-full-webkit.png | Bin 1085982 -> 1093891 bytes
tests/pages/blog.test.jsx | 9 +++++----
tests/unit/LogoWall.test.jsx | 2 +-
tests/unit/NumberCard.test.jsx | 2 +-
tests/unit/NumberedCards.test.jsx | 2 +-
tests/unit/QuoteBlock.test.jsx | 2 +-
38 files changed, 40 insertions(+), 39 deletions(-)
diff --git a/app/components/ContextMenu/ContextMenuItem/ContextMenuItem.container.tsx b/app/components/ContextMenu/ContextMenuItem/ContextMenuItem.container.tsx
index 6b524dc..23beff6 100644
--- a/app/components/ContextMenu/ContextMenuItem/ContextMenuItem.container.tsx
+++ b/app/components/ContextMenu/ContextMenuItem/ContextMenuItem.container.tsx
@@ -3,7 +3,7 @@
import { forwardRef, memo, useCallback } from "react";
import { ContextMenuItemView } from "./ContextMenuItem.view";
import type { ContextMenuItemProps } from "./ContextMenuItem.types";
-import { normalizeContextMenuItemSize } from "../../../lib/propNormalization";
+import { normalizeContextMenuItemSize } from "../../../../lib/propNormalization";
const ContextMenuItemContainer = forwardRef<
HTMLDivElement,
diff --git a/app/components/controls/SelectInput/SelectOption/SelectOption.container.tsx b/app/components/controls/SelectInput/SelectOption/SelectOption.container.tsx
index b909551..c92b089 100644
--- a/app/components/controls/SelectInput/SelectOption/SelectOption.container.tsx
+++ b/app/components/controls/SelectInput/SelectOption/SelectOption.container.tsx
@@ -3,7 +3,7 @@
import { forwardRef, memo, useCallback } from "react";
import { SelectOptionView } from "./SelectOption.view";
import type { SelectOptionProps } from "./SelectOption.types";
-import { normalizeContextMenuItemSize } from "../../../../lib/propNormalization";
+import { normalizeContextMenuItemSize } from "../../../../../lib/propNormalization";
const SelectOptionContainer = forwardRef(
(
diff --git a/app/components/utility/ModalFooter/ModalFooter.view.tsx b/app/components/utility/ModalFooter/ModalFooter.view.tsx
index da0434f..311cee2 100644
--- a/app/components/utility/ModalFooter/ModalFooter.view.tsx
+++ b/app/components/utility/ModalFooter/ModalFooter.view.tsx
@@ -2,7 +2,7 @@
import { useTranslation } from "../../../contexts/MessagesContext";
import Button from "../../buttons/Button";
-import Stepper from "../../progress/Stepper";
+import Stepper from "../../progress/Progress/Stepper";
import type { ModalFooterProps } from "./ModalFooter.types";
export function ModalFooterView({
diff --git a/tests/components/Alert.test.tsx b/tests/components/Alert.test.tsx
index c9f78b3..b0b4826 100644
--- a/tests/components/Alert.test.tsx
+++ b/tests/components/Alert.test.tsx
@@ -1,5 +1,5 @@
import React from "react";
-import Alert from "../../app/components/Alert";
+import Alert from "../../app/components/modals/Alert";
import { componentTestSuite } from "../utils/componentTestSuite";
type AlertProps = React.ComponentProps;
diff --git a/tests/components/AskOrganizer.test.tsx b/tests/components/AskOrganizer.test.tsx
index 6bfc7be..0bf7c78 100644
--- a/tests/components/AskOrganizer.test.tsx
+++ b/tests/components/AskOrganizer.test.tsx
@@ -1,7 +1,7 @@
import React from "react";
import { renderWithProviders as render, screen } from "../utils/test-utils";
import { describe, it, expect } from "vitest";
-import AskOrganizer from "../../app/components/AskOrganizer";
+import AskOrganizer from "../../app/components/sections/AskOrganizer";
import {
componentTestSuite,
ComponentTestSuiteConfig,
diff --git a/tests/components/Button.test.tsx b/tests/components/Button.test.tsx
index 3f7f1a5..ae40e3c 100644
--- a/tests/components/Button.test.tsx
+++ b/tests/components/Button.test.tsx
@@ -3,7 +3,7 @@ import { describe, it, expect, vi } from "vitest";
import { render, screen } from "@testing-library/react";
import userEvent from "@testing-library/user-event";
import "@testing-library/jest-dom/vitest";
-import Button from "../../app/components/Button";
+import Button from "../../app/components/buttons/Button";
import {
componentTestSuite,
ComponentTestSuiteConfig,
diff --git a/tests/components/Checkbox.test.tsx b/tests/components/Checkbox.test.tsx
index 1b33731..8fa14ae 100644
--- a/tests/components/Checkbox.test.tsx
+++ b/tests/components/Checkbox.test.tsx
@@ -1,5 +1,5 @@
import React from "react";
-import Checkbox from "../../app/components/Checkbox";
+import Checkbox from "../../app/components/controls/Checkbox";
import { componentTestSuite } from "../utils/componentTestSuite";
type CheckboxProps = React.ComponentProps;
diff --git a/tests/components/ContentBanner.test.tsx b/tests/components/ContentBanner.test.tsx
index 79a4ec9..b3ee80c 100644
--- a/tests/components/ContentBanner.test.tsx
+++ b/tests/components/ContentBanner.test.tsx
@@ -1,7 +1,7 @@
import React from "react";
import { render, screen } from "@testing-library/react";
import { describe, it, expect, vi } from "vitest";
-import ContentBanner from "../../app/components/ContentBanner";
+import ContentBanner from "../../app/components/sections/ContentBanner";
import type { BlogPost } from "../../lib/content";
vi.mock("next/link", () => ({
diff --git a/tests/components/Create.test.tsx b/tests/components/Create.test.tsx
index 6e5be7e..6841a96 100644
--- a/tests/components/Create.test.tsx
+++ b/tests/components/Create.test.tsx
@@ -3,8 +3,8 @@ import { describe, it, expect, vi, beforeEach } from "vitest";
import { screen, fireEvent, waitFor } from "@testing-library/react";
import "@testing-library/jest-dom/vitest";
import { renderWithProviders } from "../utils/test-utils";
-import Create from "../../app/components/Create";
-import TextInput from "../../app/components/TextInput";
+import Create from "../../app/components/modals/Create";
+import TextInput from "../../app/components/controls/TextInput";
type CreateProps = React.ComponentProps;
diff --git a/tests/components/FeatureGrid.test.tsx b/tests/components/FeatureGrid.test.tsx
index 4114a68..e9ef002 100644
--- a/tests/components/FeatureGrid.test.tsx
+++ b/tests/components/FeatureGrid.test.tsx
@@ -1,7 +1,7 @@
import React from "react";
import { renderWithProviders as render, screen } from "../utils/test-utils";
import { describe, it, expect } from "vitest";
-import FeatureGrid from "../../app/components/FeatureGrid";
+import FeatureGrid from "../../app/components/sections/FeatureGrid";
import {
componentTestSuite,
ComponentTestSuiteConfig,
diff --git a/tests/components/Footer.test.tsx b/tests/components/Footer.test.tsx
index a560672..8ff0524 100644
--- a/tests/components/Footer.test.tsx
+++ b/tests/components/Footer.test.tsx
@@ -1,7 +1,7 @@
import React from "react";
import { renderWithProviders as render, screen } from "../utils/test-utils";
import { describe, it, expect } from "vitest";
-import Footer from "../../app/components/Footer";
+import Footer from "../../app/components/navigation/Footer";
import {
componentTestSuite,
ComponentTestSuiteConfig,
diff --git a/tests/components/Header.test.tsx b/tests/components/Header.test.tsx
index 5abbe34..de9d8b2 100644
--- a/tests/components/Header.test.tsx
+++ b/tests/components/Header.test.tsx
@@ -1,5 +1,5 @@
import React from "react";
-import Header from "../../app/components/Header";
+import Header from "../../app/components/navigation/Header";
import { componentTestSuite } from "../utils/componentTestSuite";
type HeaderProps = React.ComponentProps;
diff --git a/tests/components/HeroBanner.test.tsx b/tests/components/HeroBanner.test.tsx
index ac25da3..aabcdd8 100644
--- a/tests/components/HeroBanner.test.tsx
+++ b/tests/components/HeroBanner.test.tsx
@@ -1,7 +1,7 @@
import React from "react";
import { renderWithProviders as render, screen } from "../utils/test-utils";
import { describe, it, expect } from "vitest";
-import HeroBanner from "../../app/components/HeroBanner";
+import HeroBanner from "../../app/components/sections/HeroBanner";
import {
componentTestSuite,
ComponentTestSuiteConfig,
diff --git a/tests/components/IconCard.test.tsx b/tests/components/IconCard.test.tsx
index 5b050a8..d4e9859 100644
--- a/tests/components/IconCard.test.tsx
+++ b/tests/components/IconCard.test.tsx
@@ -2,7 +2,7 @@ import React from "react";
import { describe, it, expect, vi } from "vitest";
import { render, screen, fireEvent } from "@testing-library/react";
import "@testing-library/jest-dom/vitest";
-import IconCard from "../../app/components/IconCard";
+import IconCard from "../../app/components/cards/IconCard";
import {
componentTestSuite,
type ComponentTestSuiteConfig,
diff --git a/tests/components/Logo.test.tsx b/tests/components/Logo.test.tsx
index 8698fbe..5ade664 100644
--- a/tests/components/Logo.test.tsx
+++ b/tests/components/Logo.test.tsx
@@ -1,7 +1,7 @@
import React from "react";
import { render, screen } from "@testing-library/react";
import { describe, it, expect } from "vitest";
-import Logo from "../../app/components/Logo";
+import Logo from "../../app/components/icons/Logo";
import {
componentTestSuite,
ComponentTestSuiteConfig,
diff --git a/tests/components/MultiSelect.test.tsx b/tests/components/MultiSelect.test.tsx
index 06c895f..265479a 100644
--- a/tests/components/MultiSelect.test.tsx
+++ b/tests/components/MultiSelect.test.tsx
@@ -2,7 +2,7 @@ import { describe, it, expect, vi } from "vitest";
import { screen } from "@testing-library/react";
import userEvent from "@testing-library/user-event";
import { renderWithProviders as render } from "../utils/test-utils";
-import MultiSelect from "../../app/components/MultiSelect";
+import MultiSelect from "../../app/components/controls/MultiSelect";
import {
componentTestSuite,
type ComponentTestSuiteConfig,
diff --git a/tests/components/Progress.test.tsx b/tests/components/Progress.test.tsx
index 23edb33..f480741 100644
--- a/tests/components/Progress.test.tsx
+++ b/tests/components/Progress.test.tsx
@@ -2,7 +2,7 @@ import React from "react";
import { describe, it, expect } from "vitest";
import { render, screen } from "@testing-library/react";
import "@testing-library/jest-dom/vitest";
-import Progress from "../../app/components/Progress";
+import Progress from "../../app/components/progress/Progress";
import {
componentTestSuite,
ComponentTestSuiteConfig,
diff --git a/tests/components/RadioButton.test.tsx b/tests/components/RadioButton.test.tsx
index 1139bfa..47c5949 100644
--- a/tests/components/RadioButton.test.tsx
+++ b/tests/components/RadioButton.test.tsx
@@ -1,5 +1,5 @@
import React from "react";
-import RadioButton from "../../app/components/RadioButton";
+import RadioButton from "../../app/components/controls/RadioButton";
import { componentTestSuite } from "../utils/componentTestSuite";
type RadioButtonProps = React.ComponentProps;
diff --git a/tests/components/RadioGroup.test.tsx b/tests/components/RadioGroup.test.tsx
index 26ad75e..35ad774 100644
--- a/tests/components/RadioGroup.test.tsx
+++ b/tests/components/RadioGroup.test.tsx
@@ -1,5 +1,5 @@
import React from "react";
-import RadioGroup from "../../app/components/RadioGroup";
+import RadioGroup from "../../app/components/controls/RadioGroup";
import { componentTestSuite } from "../utils/componentTestSuite";
type RadioGroupProps = React.ComponentProps;
diff --git a/tests/components/RelatedArticles.test.tsx b/tests/components/RelatedArticles.test.tsx
index c3aa2b0..8b8ecb4 100644
--- a/tests/components/RelatedArticles.test.tsx
+++ b/tests/components/RelatedArticles.test.tsx
@@ -1,7 +1,7 @@
import React from "react";
import { render, screen } from "@testing-library/react";
import { describe, it, expect, vi } from "vitest";
-import RelatedArticles from "../../app/components/RelatedArticles";
+import RelatedArticles from "../../app/components/sections/RelatedArticles";
import type { BlogPost } from "../../lib/content";
vi.mock("next/link", () => ({
@@ -12,7 +12,7 @@ vi.mock("next/link", () => ({
),
}));
-vi.mock("../../app/components/ContentThumbnailTemplate", () => ({
+vi.mock("../../app/components/content/ContentThumbnailTemplate", () => ({
default: ({ post }: { post: BlogPost }) => (
diff --git a/tests/components/SectionHeader.test.tsx b/tests/components/SectionHeader.test.tsx
index 0987139..dc5fd36 100644
--- a/tests/components/SectionHeader.test.tsx
+++ b/tests/components/SectionHeader.test.tsx
@@ -1,5 +1,5 @@
import React from "react";
-import SectionHeader from "../../app/components/SectionHeader";
+import SectionHeader from "../../app/components/sections/SectionHeader";
import { componentTestSuite } from "../utils/componentTestSuite";
type SectionHeaderProps = React.ComponentProps;
diff --git a/tests/components/SelectInput.test.tsx b/tests/components/SelectInput.test.tsx
index d71eb53..2e31060 100644
--- a/tests/components/SelectInput.test.tsx
+++ b/tests/components/SelectInput.test.tsx
@@ -1,5 +1,5 @@
import React from "react";
-import SelectInput from "../../app/components/SelectInput";
+import SelectInput from "../../app/components/controls/SelectInput";
import { componentTestSuite } from "../utils/componentTestSuite";
type SelectInputProps = React.ComponentProps;
diff --git a/tests/components/Stepper.test.tsx b/tests/components/Stepper.test.tsx
index 98fad2a..0a21daf 100644
--- a/tests/components/Stepper.test.tsx
+++ b/tests/components/Stepper.test.tsx
@@ -2,7 +2,7 @@ import React from "react";
import { describe, it, expect } from "vitest";
import { render, screen } from "@testing-library/react";
import "@testing-library/jest-dom/vitest";
-import Stepper from "../../app/components/Stepper";
+import Stepper from "../../app/components/progress/Progress/Stepper";
import {
componentTestSuite,
ComponentTestSuiteConfig,
diff --git a/tests/components/Switch.test.tsx b/tests/components/Switch.test.tsx
index 2074dfa..fa5d374 100644
--- a/tests/components/Switch.test.tsx
+++ b/tests/components/Switch.test.tsx
@@ -1,5 +1,5 @@
import React from "react";
-import Switch from "../../app/components/Switch";
+import Switch from "../../app/components/controls/Switch";
import { componentTestSuite } from "../utils/componentTestSuite";
type SwitchProps = React.ComponentProps;
diff --git a/tests/components/TextArea.test.tsx b/tests/components/TextArea.test.tsx
index ac083f7..67e0fa0 100644
--- a/tests/components/TextArea.test.tsx
+++ b/tests/components/TextArea.test.tsx
@@ -1,5 +1,5 @@
import React from "react";
-import TextArea from "../../app/components/TextArea";
+import TextArea from "../../app/components/controls/TextArea";
import { componentTestSuite } from "../utils/componentTestSuite";
type TextAreaProps = React.ComponentProps;
diff --git a/tests/components/TextInput.test.tsx b/tests/components/TextInput.test.tsx
index c63f8ad..72a27ad 100644
--- a/tests/components/TextInput.test.tsx
+++ b/tests/components/TextInput.test.tsx
@@ -1,5 +1,5 @@
import React from "react";
-import TextInput from "../../app/components/TextInput";
+import TextInput from "../../app/components/controls/TextInput";
import { componentTestSuite } from "../utils/componentTestSuite";
type TextInputProps = React.ComponentProps;
diff --git a/tests/components/Toggle.test.tsx b/tests/components/Toggle.test.tsx
index ad091d0..2f863a5 100644
--- a/tests/components/Toggle.test.tsx
+++ b/tests/components/Toggle.test.tsx
@@ -1,5 +1,5 @@
import React from "react";
-import Toggle from "../../app/components/Toggle";
+import Toggle from "../../app/components/controls/Toggle";
import { componentTestSuite } from "../utils/componentTestSuite";
type ToggleProps = React.ComponentProps;
diff --git a/tests/components/ToggleGroup.test.tsx b/tests/components/ToggleGroup.test.tsx
index fe049ac..5ec6f21 100644
--- a/tests/components/ToggleGroup.test.tsx
+++ b/tests/components/ToggleGroup.test.tsx
@@ -1,5 +1,5 @@
import React from "react";
-import ToggleGroup from "../../app/components/ToggleGroup";
+import ToggleGroup from "../../app/components/controls/ToggleGroup";
import { componentTestSuite } from "../utils/componentTestSuite";
type ToggleGroupProps = React.ComponentProps;
diff --git a/tests/components/Tooltip.test.tsx b/tests/components/Tooltip.test.tsx
index 76b0c29..1a83aa9 100644
--- a/tests/components/Tooltip.test.tsx
+++ b/tests/components/Tooltip.test.tsx
@@ -3,7 +3,7 @@ import { describe, it, expect } from "vitest";
import { render, screen } from "@testing-library/react";
import userEvent from "@testing-library/user-event";
import "@testing-library/jest-dom/vitest";
-import Tooltip from "../../app/components/Tooltip";
+import Tooltip from "../../app/components/modals/Tooltip";
import { componentTestSuite } from "../utils/componentTestSuite";
type TooltipProps = React.ComponentProps;
diff --git a/tests/e2e/visual-regression.spec.ts-snapshots/homepage-full-chromium.png b/tests/e2e/visual-regression.spec.ts-snapshots/homepage-full-chromium.png
index 195bce9e2bc6820f36789771a7aef2b6e4d604f8..1224f473e0aed134e77c5d213ce5f688ce562d78 100644
GIT binary patch
delta 420081
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