diff --git a/public/images/logo.svg b/public/images/logo.svg
new file mode 100644
index 0000000..8fc8f0c
--- /dev/null
+++ b/public/images/logo.svg
@@ -0,0 +1,11 @@
+
diff --git a/src/components/AiResults/AiResults.tsx b/src/components/AiResults/AiResults.tsx
deleted file mode 100644
index 3caa2e1..0000000
--- a/src/components/AiResults/AiResults.tsx
+++ /dev/null
@@ -1,69 +0,0 @@
-import {
- Flex,
- Pagination,
- Textarea,
- Small,
- H3,
- Grid,
-} from '@bigcommerce/big-design';
-import React, { type SetStateAction, type ChangeEvent, useState } from 'react';
-import { StyledFlex } from './styled';
-
-export interface Result {
- description: string;
- promptAttributes: string;
-}
-
-interface AiResultsProps {
- results: Result[];
- onChange(index: number, description: string): void;
-}
-
-export default function AiResults({ results, onChange }: AiResultsProps) {
- const [page, setPage] = useState(results.length);
-
- const currentResult = results.at(page - 1);
-
- if (!currentResult) {
- return null;
- }
-
- const handlePageChange = (newPage: SetStateAction) => {
- const page = Number(newPage);
- setPage(page);
- onChange(page - 1, results.at(page - 1)?.description || '');
- };
- const handleValueChange = (event: ChangeEvent) =>
- onChange(page - 1, event.target.value);
-
- return (
-
-
-
- Results
-
-
- null}
- onPageChange={handlePageChange}
- totalItems={results.length}
- />
-
-
-
-
-
- {currentResult.promptAttributes}
-
- );
-}
diff --git a/src/components/AiResults/styled.ts b/src/components/AiResults/styled.ts
deleted file mode 100644
index a9f3cb1..0000000
--- a/src/components/AiResults/styled.ts
+++ /dev/null
@@ -1,13 +0,0 @@
-import { Flex } from '@bigcommerce/big-design';
-import styled from 'styled-components';
-
-export const StyledFlex = styled(Flex)`
- & > div:first-child {
- width: 100%;
- }
- textarea {
- height: ${({ theme }) => theme.helpers.remCalc(300)};
- max-height: ${({ theme }) => theme.helpers.remCalc(500)};
- min-height: ${({ theme }) => theme.helpers.remCalc(150)};
- }
-`;
diff --git a/src/components/PromptForm/CustomPromptForm.tsx b/src/components/PromptForm/CustomPromptForm.tsx
deleted file mode 100644
index 048df56..0000000
--- a/src/components/PromptForm/CustomPromptForm.tsx
+++ /dev/null
@@ -1,57 +0,0 @@
-import {
- Checkbox,
- CheckboxLabel,
- FormControlLabel,
- FormGroup,
- Textarea,
-} from '@bigcommerce/big-design';
-import React, { type ChangeEvent } from 'react';
-import { InputLabel } from '~/components/PromptForm/InputLabel';
-import { type CustomAttributes } from '~/context/PromptAttributesContext';
-interface CustomFormProps {
- attributes: CustomAttributes;
- onChange(attributes: CustomAttributes): void;
-}
-
-export const CustomPromptForm = ({ attributes, onChange }: CustomFormProps) => (
- <>
-
-
-
-
-
-
- }
- onChange={() =>
- onChange({
- ...attributes,
- includeProductAttributes: !attributes.includeProductAttributes,
- })
- }
- />
-
- >
-);
diff --git a/src/components/PromptForm/GuidedPromptForm.tsx b/src/components/PromptForm/GuidedPromptForm.tsx
deleted file mode 100644
index ed3c228..0000000
--- a/src/components/PromptForm/GuidedPromptForm.tsx
+++ /dev/null
@@ -1,189 +0,0 @@
-'use client';
-
-import React, { useState } from 'react';
-import {
- Checkbox,
- Collapse,
- Counter,
- FormGroup,
- Input,
- Select,
- CheckboxLabel,
- FormControlLabel,
- Flex,
- Grid,
-} from '@bigcommerce/big-design';
-import { InputLabel } from '~/components/PromptForm/InputLabel';
-import { theme } from '@bigcommerce/big-design-theme';
-import { STYLE_OPTIONS } from '~/constants';
-import { type GuidedAttributes } from '~/context/PromptAttributesContext';
-
-type InputFieldValue = string | number | boolean | undefined;
-
-interface GuidedPromptForm {
- attributes: GuidedAttributes;
- onChange(attributes: GuidedAttributes): void;
-}
-
-export function GuidedPromptForm({ attributes, onChange }: GuidedPromptForm) {
- const [collapseTitle, setCollapseTitle] = useState('Show more');
-
- const handleCollapseChange = (isOpen: boolean) =>
- setCollapseTitle(isOpen ? 'Show less' : 'Show more');
-
- const handleInputChange = (
- value: InputFieldValue,
- fieldName: keyof GuidedAttributes
- ) => onChange({ ...attributes, [fieldName]: value });
-
- return (
- <>
-
-
-
-
- handleInputChange(value, 'wordCount')}
- value={attributes.wordCount}
- required
- />
-
-
-
-
-
-
- }
- onChange={() =>
- handleInputChange(
- !attributes.optimizedForSeo,
- 'optimizedForSeo'
- )
- }
- />
-
-
-
-
-
-
-
-
-
-
-
- }
- onChange={() =>
- handleInputChange(
- !attributes.includeProductAttributes,
- 'includeProductAttributes'
- )
- }
- />
-
-
-
-
-
-
- }
- onChange={(event) =>
- handleInputChange(event.target.value, 'brandVoice')
- }
- />
-
-
-
-
-
- }
- onChange={(event) =>
- handleInputChange(event.target.value, 'additionalAttributes')
- }
- />
-
-
-
-
-
- }
- onChange={(event) =>
- handleInputChange(event.target.value, 'keywords')
- }
- />
-
-
-
-
-
- }
- onChange={(event) =>
- handleInputChange(event.target.value, 'instructions')
- }
- />
-
-
-
- >
- );
-}
diff --git a/src/components/PromptForm/InputLabel.tsx b/src/components/PromptForm/InputLabel.tsx
deleted file mode 100644
index 2181206..0000000
--- a/src/components/PromptForm/InputLabel.tsx
+++ /dev/null
@@ -1,23 +0,0 @@
-import { Flex, Text, Tooltip } from '@bigcommerce/big-design';
-import { BaselineHelpIcon } from '@bigcommerce/big-design-icons';
-import React from 'react';
-
-interface InputLabelProps {
- text: string;
- tooltip: string;
- bold: boolean;
-}
-
-export const InputLabel = ({ text, tooltip, bold }: InputLabelProps) => (
-
-
- {text}
-
- }
- >
- {tooltip}
-
-
-);
diff --git a/src/components/PromptForm/styled.ts b/src/components/PromptForm/styled.ts
deleted file mode 100644
index 62b42b9..0000000
--- a/src/components/PromptForm/styled.ts
+++ /dev/null
@@ -1,58 +0,0 @@
-import styled from 'styled-components';
-
-export const StyledButton = styled.button<{ isActive: boolean }>`
- align-items: center;
- appearance: none;
- background-color: ${({ isActive, theme }) =>
- isActive ? theme.colors.primary20 : theme.colors.white};
- border-top: ${({ theme }) => theme.border.box};
- border-left: ${({ theme }) => theme.border.box};
- border-bottom: ${({ theme }) => theme.border.box};
- border-color: ${({ isActive, theme }) =>
- isActive ? theme.colors.primary30 : theme.colors.secondary30};
- border-right: 0;
- border-radius: 0;
- color: ${({ isActive, theme }) =>
- isActive ? theme.colors.primary60 : theme.colors.secondary60};
- cursor: pointer;
- display: inline-flex;
- flex: none;
- font-size: ${({ theme }) => theme.typography.fontSize.medium};
- font-weight: ${({ theme }) => theme.typography.fontWeight.regular};
- justify-content: center;
- line-height: ${({ theme }) => theme.lineHeight.xLarge};
- outline: none;
- padding: ${({ theme }) => `0 ${theme.spacing.medium}`};
- position: relative;
- text-align: center;
- text-decoration: none;
- user-select: none;
- vertical-align: middle;
- white-space: nowrap;
- width: auto;
-
- &:focus {
- outline: none;
- }
-
- &:first-child {
- border-top-left-radius: ${({ theme }) => theme.borderRadius.normal};
- border-bottom-left-radius: ${({ theme }) => theme.borderRadius.normal};
- }
-
- &:last-child {
- border-top-right-radius: ${({ theme }) => theme.borderRadius.normal};
- border-bottom-right-radius: ${({ theme }) => theme.borderRadius.normal};
- border-right: ${({ theme }) => theme.border.box};
- border-right-color: ${({ isActive, theme }) =>
- isActive ? theme.colors.primary30 : theme.colors.secondary30};
- }
-
- ${({ isActive, theme }) =>
- isActive &&
- `
- + button {
- border-left-color: ${theme.colors.primary30};
- }
- `}
-`;
diff --git a/src/hooks/index.ts b/src/hooks/index.ts
deleted file mode 100644
index 3c307b7..0000000
--- a/src/hooks/index.ts
+++ /dev/null
@@ -1,2 +0,0 @@
-export * from './useLocalStorage';
-export * from './useDescriptionsHistory';
diff --git a/src/hooks/useDescriptionsHistory.ts b/src/hooks/useDescriptionsHistory.ts
deleted file mode 100644
index 8ca5ee7..0000000
--- a/src/hooks/useDescriptionsHistory.ts
+++ /dev/null
@@ -1,54 +0,0 @@
-import { type Result } from '~/components/AiResults/AiResults';
-import { useLocalStorage } from './useLocalStorage';
-import { serializePromptAttributes } from '~/utils/utils';
-import { type PromptAttributes } from '~/context/PromptAttributesContext';
-
-const MAX_LOCAL_STORAGE_RESULTS = 20;
-const STORAGE_KEY = 'ai-product-descriptions:history:product';
-
-export const useDescriptionsHistory = (productId: number) => {
- const [results, setResults] = useLocalStorage(
- `${STORAGE_KEY}:${productId}`,
- []
- );
-
- const setResultsWrapper = ({
- description,
- promptAttributes,
- }: {
- description: string;
- promptAttributes: PromptAttributes;
- }) => {
- const result = {
- description,
- promptAttributes: serializePromptAttributes(promptAttributes),
- };
- setResults([
- ...results.slice(-(MAX_LOCAL_STORAGE_RESULTS - 1)),
- ...[result],
- ]);
- };
-
- const handleDescriptionChange = (index: number, description: string) => {
- setResults((prevResults: Result[]) => {
- if (index < 0 || index >= prevResults.length) {
- return prevResults;
- }
-
- const updatedResults = [...prevResults];
-
- updatedResults[index] = {
- promptAttributes: updatedResults[index]?.promptAttributes || '',
- description: description,
- };
-
- return updatedResults;
- });
- };
-
- return {
- results,
- handleDescriptionChange,
- setResults: setResultsWrapper,
- };
-};
diff --git a/src/hooks/useLocalStorage.ts b/src/hooks/useLocalStorage.ts
deleted file mode 100644
index 46f7fae..0000000
--- a/src/hooks/useLocalStorage.ts
+++ /dev/null
@@ -1,32 +0,0 @@
-import { useState } from 'react';
-
-export const useLocalStorage = (key: string, initVal: T) => {
- const [storedValue, setStoredValue] = useState((): T => {
- try {
- const item = window.localStorage.getItem(key);
-
- if (item) {
- const val: unknown = JSON.parse(item);
-
- // eslint-disable-next-line @typescript-eslint/consistent-type-assertions
- return (val ?? initVal) as T;
- }
-
- return initVal;
- } catch (error) {
- return initVal;
- }
- });
-
- const setValue = (value: T | ((args: T) => T)) => {
- const freshValue =
- typeof value === 'function'
- ? (value as (args: T) => T)(storedValue)
- : value;
-
- setStoredValue(freshValue);
- window.localStorage.setItem(key, JSON.stringify(freshValue));
- };
-
- return [storedValue, setValue] as const;
-};