diff --git a/.github/workflows/deploy.yml b/.github/workflows/deploy.yml index 9a9c8c45a..bb6e623cb 100644 --- a/.github/workflows/deploy.yml +++ b/.github/workflows/deploy.yml @@ -17,6 +17,15 @@ jobs: deploy-key: "${{ github.ref_name == 'main' && 'dev' || 'demo' }}" #deploy-key: dev + build-image-sandbox: + uses: ./.github/workflows/_docker-build-image.yml + secrets: inherit + with: + app-name: sandbox + tag-name: ${{ github.ref_name }} + deploy-key: "${{ github.ref_name == 'main' && 'dev' || 'demo' }}" + #deploy-key: dev + deploy: needs: [build-image-doj] uses: ./.github/workflows/_terraform-apply.yml diff --git a/README.md b/README.md index 1a0cee689..e26bfea09 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,13 @@ # 10x Forms Platform -Test bed for 10x forms tooling, completed as part of the [10x Forms Platform](https://github.com/orgs/GSA-TTS/projects/38?pane=issue&itemId=58755590&issue=GSA-TTS%7C10x-projects%7C29) project. +> **Notice:** +> As of early May 2025, Forms Platform development is paused pending administrative prioritization. + +Forms Platform is the product of extensive research and development completed by [10x](https://10x.gsa.gov/), a federal venture studio housed within the [General Services Administration](https://www.gsa.gov/)'s [Technology Transformation Services](https://tts.gsa.gov/). + +Forms Platform aims to solve a persistent challenge faced by federal agencies: delivery of compliant and user-friendly forms, delivered cost-effectively, seamlessly integrated with diverse agency workflows, and accessible to non-technical program office staff. Deployed broadly, Forms Platform would serve as a common interface to federal government services, tailored to public sector needs. + +If you would like to connect with the team or are interested in Forms Platform for your agency, please contact us at [10x-forms-platform@gsa.gov](mailto:10x-forms-platform@gsa.gov). ## Overview diff --git a/apps/sandbox/.gitignore b/apps/sandbox/.gitignore new file mode 100644 index 000000000..f13846056 --- /dev/null +++ b/apps/sandbox/.gitignore @@ -0,0 +1,2 @@ +dist/ +*.db \ No newline at end of file diff --git a/apps/sandbox/CHANGELOG.md b/apps/sandbox/CHANGELOG.md new file mode 100644 index 000000000..19adc05ca --- /dev/null +++ b/apps/sandbox/CHANGELOG.md @@ -0,0 +1,48 @@ +# @gsa-tts/forms-server-doj + +## 0.1.4 + +### Patch Changes + +- Updated dependencies + - @gsa-tts/forms-infra-core@0.1.4 + +## 0.1.3 + +### Patch Changes + +- Updated dependencies + - @gsa-tts/forms-infra-core@0.1.3 + +## 0.1.2 + +### Patch Changes + +- Initial prerelease +- Updated dependencies + - @gsa-tts/forms-database@0.1.2 + - @gsa-tts/forms-server@0.1.2 + - @gsa-tts/forms-infra-core@0.1.2 + +## 0.1.1 + +### Patch Changes + +- Initial prerelease +- Updated dependencies + - @gsa-tts/forms-database@0.1.1 + - @gsa-tts/forms-server@0.1.1 + - @gsa-tts/forms-infra-core@0.1.1 + +## 0.1.0 + +### Minor Changes + +- Initial prerelease + +### Patch Changes + +- Updated dependencies + - @gsa-tts/forms-database@0.1.0 + - @gsa-tts/forms-server@0.1.0 + - @gsa-tts/forms-infra-core@0.1.0 diff --git a/apps/sandbox/README.md b/apps/sandbox/README.md new file mode 100644 index 000000000..cb573592e --- /dev/null +++ b/apps/sandbox/README.md @@ -0,0 +1,3 @@ +# @gsa-tts/forms-sandbox + +Sandbox application to evaluate platform functionality. diff --git a/apps/sandbox/build.js b/apps/sandbox/build.js new file mode 100644 index 000000000..aaec37375 --- /dev/null +++ b/apps/sandbox/build.js @@ -0,0 +1,14 @@ +import esbuild from 'esbuild'; + +esbuild + .build({ + bundle: true, + entryPoints: ['./src/index.ts'], + format: 'esm', + minify: true, + outdir: './dist', + platform: 'node', + sourcemap: true, + target: 'esnext', + }) + .catch(() => process.exit(1)); diff --git a/apps/sandbox/package.json b/apps/sandbox/package.json new file mode 100644 index 000000000..a9c20d4e3 --- /dev/null +++ b/apps/sandbox/package.json @@ -0,0 +1,25 @@ +{ + "name": "@gsa-tts/forms-sandbox", + "version": "0.1.4", + "description": "Form server sandbox for evaluating functionality.", + "type": "module", + "license": "CC0", + "main": "src/index.ts", + "private": true, + "scripts": { + "build": "tsup src/* --format esm", + "clean": "rimraf dist tsconfig.tsbuildinfo coverage", + "dev": "tsup src/* --watch --format esm", + "start": "VCAP_SERVICES='{\"aws-rds\": [{ \"credentials\": { \"uri\": \"\" }}]}' node dist/index.js", + "test": "vitest run --coverage" + }, + "dependencies": { + "@gsa-tts/forms-database": "workspace:*", + "@gsa-tts/forms-infra-core": "workspace:*", + "@gsa-tts/forms-server": "workspace:*" + }, + "devDependencies": { + "@types/supertest": "^6.0.2", + "supertest": "^7.0.0" + } +} diff --git a/apps/sandbox/src/index.ts b/apps/sandbox/src/index.ts new file mode 100644 index 000000000..b4874e4bb --- /dev/null +++ b/apps/sandbox/src/index.ts @@ -0,0 +1,52 @@ +import { createPostgresDatabaseContext } from '@gsa-tts/forms-database/context'; +import { getAWSSecretsManagerVault } from '@gsa-tts/forms-infra-core'; + +import { createCustomServer } from './server.js'; + +const port = process.env.PORT || 4321; + +const getCloudGovServerSecrets = () => { + if (process.env.VCAP_SERVICES === undefined) { + return; + } + const services = JSON.parse(process.env.VCAP_SERVICES || '{}'); + return { + //loginGovClientSecret: services['user-provided']?.credentials?.SECRET_LOGIN_GOV_PRIVATE_KEY, + dbUri: services['aws-rds'][0].credentials.uri as string, + }; +}; + +const getAppRunnerSecrets = async () => { + const secrets = { + dbHost: process.env.DB_HOST, + dbPort: process.env.DB_PORT, + dbName: process.env.DB_NAME, + dbSecretArn: process.env.DB_SECRET_ARN, + } + if (secrets.dbHost === undefined || secrets.dbPort === undefined || secrets.dbName === undefined || secrets.dbSecretArn === undefined) { + return; + } + + const vault = getAWSSecretsManagerVault(); + const dbSecret = await vault.getSecret(secrets.dbSecretArn); + if (dbSecret === undefined) { + console.error('Error getting secret:', secrets.dbSecretArn); + return; + } + const secret = JSON.parse(dbSecret); + return { + dbUri: `postgresql://${secret.username}:${secret.password}@${secret.dbHost}:${secret.dbPort}/${secret.dbName}` + }; +}; + +const secrets = getCloudGovServerSecrets() || (await getAppRunnerSecrets()); +if (secrets === undefined) { + console.error('Error getting secrets'); + process.exit(1); +} + +const db = await createPostgresDatabaseContext(secrets.dbUri, true); +const server = await createCustomServer(db); +server.listen(port, () => { + console.log(`Server running on http://localhost:${port}`); +}); diff --git a/apps/sandbox/src/server.ts b/apps/sandbox/src/server.ts new file mode 100644 index 000000000..eb2ebbc01 --- /dev/null +++ b/apps/sandbox/src/server.ts @@ -0,0 +1,19 @@ +import { type DatabaseContext } from '@gsa-tts/forms-database'; +import { createServer } from '@gsa-tts/forms-server'; + +export const createCustomServer = async (db: DatabaseContext): Promise => { + return createServer({ + agencyBranding: false, + title: 'Form Service Sandbox', + db, + loginGovOptions: { + loginGovUrl: 'https://idp.int.identitysandbox.gov', + clientId: + 'urn:gov:gsa:openidconnect.profiles:sp:sso:gsa:tts-10x-atj-dev-server-doj', + //clientSecret: '', // secrets.loginGovClientSecret, + }, + isUserAuthorized: async (email: string) => { + return email.endsWith('.gov'); + }, + }); +}; diff --git a/apps/sandbox/tests/integration.test.ts b/apps/sandbox/tests/integration.test.ts new file mode 100644 index 000000000..64d2e0831 --- /dev/null +++ b/apps/sandbox/tests/integration.test.ts @@ -0,0 +1,16 @@ +import request from 'supertest'; +import { describe, expect, test } from 'vitest'; + +import { createInMemoryDatabaseContext } from '@gsa-tts/forms-database/context'; + +import { createCustomServer } from '../src/server'; + +describe('Form Service Sandbox', () => { + test('renders the home page', async () => { + const db = await createInMemoryDatabaseContext(); + const app = await createCustomServer(db); + const response = await request(app).get('/'); + expect(response.ok).toBe(true); + expect(response.text).toMatch(/Form Service Sandbox/); + }); +}); diff --git a/apps/sandbox/tsconfig.json b/apps/sandbox/tsconfig.json new file mode 100644 index 000000000..11cf6557d --- /dev/null +++ b/apps/sandbox/tsconfig.json @@ -0,0 +1,11 @@ +{ + "extends": "../../tsconfig.base.json", + "compilerOptions": { + "module": "NodeNext", + "moduleResolution": "NodeNext", + "outDir": "./dist", + "emitDeclarationOnly": true + }, + "include": ["./src"], + "references": [] +} diff --git a/apps/sandbox/vitest.config.ts b/apps/sandbox/vitest.config.ts new file mode 100644 index 000000000..d18c1f860 --- /dev/null +++ b/apps/sandbox/vitest.config.ts @@ -0,0 +1,10 @@ +import { defineConfig } from 'vitest/config'; + +import sharedTestConfig from '../../vitest.shared'; + +export default defineConfig({ + ...sharedTestConfig, + test: { + ...sharedTestConfig.test, + }, +}); diff --git a/apps/server-doj/src/server.ts b/apps/server-doj/src/server.ts index da5ff593e..de8dae4f6 100644 --- a/apps/server-doj/src/server.ts +++ b/apps/server-doj/src/server.ts @@ -3,6 +3,7 @@ import { createServer } from '@gsa-tts/forms-server'; export const createCustomServer = async (db: DatabaseContext): Promise => { return createServer({ + agencyBranding: true, title: 'DOJ Form Service', db, loginGovOptions: { diff --git a/documents/adr/0005-build-system.md b/documents/adr/0005-build-system.md index a5761aaef..1575b2e0d 100644 --- a/documents/adr/0005-build-system.md +++ b/documents/adr/0005-build-system.md @@ -1,4 +1,4 @@ -# 5. Infrastructure as Code +# 5. Build system Date: 2023-10-12 diff --git a/documents/adr/0008-initial-form-handling-strategy.md b/documents/adr/0008-initial-form-handling-strategy.md index c8aae1425..e5571988e 100644 --- a/documents/adr/0008-initial-form-handling-strategy.md +++ b/documents/adr/0008-initial-form-handling-strategy.md @@ -32,4 +32,4 @@ By starting small and not pulling in dependencies we do not immediately need, we However, we risk losing the opportunity to quickly get "big wins" by pulling in a more fully-baked interview format at the onset. As a result, such solutions should be considered near-term integration opportunities. -This ADR will need to be continually reevaluated through the course of 10x phase 3 work. +This ADR should be continually reevaluated through the course of development. diff --git a/documents/adr/0013-database-strategy.md b/documents/adr/0013-database-strategy.md index 77428a26c..c7539944c 100644 --- a/documents/adr/0013-database-strategy.md +++ b/documents/adr/0013-database-strategy.md @@ -18,7 +18,7 @@ The database should be commonly used and easy to host in many varied deployment ## Decision -We will use PostgreSQL in our production deployments. We will use [Testcontainers](https://testcontainers.com/) to unit-test database gateway logic against a PostgreSQL container. Integration testing will be handled with an in-memory SQLite database. +We will use PostgreSQL in our production deployments. We will use [Testcontainers](https://testcontainers.com/) to unit-test database gateway logic against a PostgreSQL container. Integration testing will be handled with ephemeral in-memory SQLite databases. [Knex.js](https://knexjs.org/) is the most widely-used node.js query builder, and has backend adapters for most common relational databases. We will utilize Knex.js for its migration support. Knex.js may also be used for queries, as appropriate. diff --git a/documents/adr/0014-authentication.md b/documents/adr/0014-authentication.md index d67f264d3..bc97f5f5f 100644 --- a/documents/adr/0014-authentication.md +++ b/documents/adr/0014-authentication.md @@ -6,6 +6,8 @@ Date: 2024-09-04 Approved +> *NOTE: Lucia [is deprecated](https://github.com/lucia-auth/lucia/discussions/1714), and there were some challenges integrating it cleanly into the [auth package](../../packages/auth/). As a result, this ADR should be reconsidered.* + ## Context Forms Platform requires a method of authenticating users. We are inclined to default to [Login.gov](https://login.gov/), a government-wide federated service hosted by [TTS](https://www.gsa.gov/about-us/organization/federal-acquisition-service/technology-transformation-services), unless circumstances prevent its usage. diff --git a/documents/adr/0015-rest-api.md b/documents/adr/0015-rest-api.md index 2b725456a..240fac8d7 100644 --- a/documents/adr/0015-rest-api.md +++ b/documents/adr/0015-rest-api.md @@ -6,6 +6,8 @@ Date: 2024-09-04 Approved +> *NOTE: The strategy for API management would benefit from being reconsidered.* + ## Context During the prototyping and demo phase, Forms Platform used client-side services that persisted to browser local storage. As we introduce a backend to support agency users, we need to structure an API for the content authoring operations of the platform. diff --git a/documents/adr/0017-use-named-exports.md b/documents/adr/0017-use-named-exports.md new file mode 100644 index 000000000..93507a004 --- /dev/null +++ b/documents/adr/0017-use-named-exports.md @@ -0,0 +1,58 @@ +# 17. Use Named Exports Over Default Exports and Avoid index Files + +Date: 04-16-2025 + +## Status + +Approved + +## Context + +During the recent refactoring of the `Form` and `FormManager` components in the `design` package, we noticed inconsistencies in the use of default exports, named exports, and `index` files. Some files used default exports, while others used named exports. Additionally, many directories relied on `index.tsx` files, which made it harder to locate specific components or utilities in the codebase. + +Default exports can sometimes lead to ambiguity, especially when renaming imports, and they do not provide the same level of tooling support (e.g., auto-imports in IDEs) as named exports. Named exports, on the other hand, make it clear what is being exported and allow for more consistent imports across the codebase. + +Similarly, `index` files can introduce ambiguity when navigating the codebase, as multiple `index.tsx` files across different directories make it harder to locate specific functionality. Using descriptive file names improves clarity and maintainability. + +## Decision + +We will adopt the following guidelines for exports and file structure moving forward: +1. **Use named exports** for all components, utilities, and types. +2. **Avoid default exports**, except in cases where a file exports a single, primary entity (e.g., a React component that represents the main purpose of the file). +3. **Avoid `index` files** in favor of descriptive file names (e.g., `FormManager.tsx` instead of `index.tsx`). + +## Consequences + +- **Consistency:** The codebase will have a consistent export style and file structure, making it easier to read and maintain. +- **Tooling Support:** Named exports improve IDE tooling, such as auto-imports and refactoring. +- **Clarity:** Named exports and descriptive file names make it clear what is being exported and where functionality resides, reducing ambiguity. +- **Ease of Navigation:** Avoiding `index` files ensures that file names are descriptive, making it easier to locate specific components or utilities. + +## Examples + +### Before (Default Export): + +```tsx +// FormManager.tsx +export default function FormManager() { ... } + +// Importing in other files +import FormManager from './FormManager'; +``` + +### After (Named Export): +```tsx + +// FormManager.tsx +export function FormManager() { ... } + +// Importing in other files +import { FormManager } from './FormManager'; +``` + +## Related Changes + +This decision was applied during the refactoring of the `Form` and `FormManager` components in the design package. As part of this refactor: + +- Default exports were replaced with named exports. +- `index.tsx` files were replaced with descriptive file names (e.g., `FormManager.tsx`, `PatternComponents.tsx`). diff --git a/documents/pending-loose-ends.md b/documents/pending-loose-ends.md new file mode 100644 index 000000000..ea22a6d07 --- /dev/null +++ b/documents/pending-loose-ends.md @@ -0,0 +1,11 @@ +# Pending loose ends + +## Context + +In early May 2025, Forms Platform development was suspended indefinitely. At that point, the project team was preparing for a pilot production launch, which would have brought functionality to an MVP status and wrapped up technical loose ends. This document describes that unfinished technical work that should be considered project development resumes. + +## Task list + +- ADR [0014-authentication](./adr/0014-authentication.md) describes an authentication approach that leverages the Lucia library. Lucia usage should be reconsidered when integrating with a production identity provider. +- ADR [0015-rest-api](./adr/0015-rest-api.md) describes a simple strategy for bootstrapping an API with Astro. At some point, before extensive API growth but probably perhaps pilot, a more thought out strategy should be considered. +- ADRs [0007-initial-css-strategy](./adr/0007-initial-css-strategy.md) and [0016-unused-css](./adr/0016-unused-css.md) describe CSS approaches. This approach should be reconsidered when the ability to integrate with agency USWDS themes and component encapsulation become important qualities. diff --git a/e2e/src/preview.spec.ts b/e2e/src/preview.spec.ts new file mode 100644 index 000000000..c1a4b1ad5 --- /dev/null +++ b/e2e/src/preview.spec.ts @@ -0,0 +1,29 @@ +import { test, expect } from './fixtures/import-file.fixture.js'; +import { FormCreatePage } from './models/form-create-page.js'; + +test.describe('Form builder preview', () => { + let formPage: FormCreatePage; + let formUrl: string; + + test.beforeEach(async ({ page, formUrl: url }) => { + formPage = new FormCreatePage(page); + formUrl = url; + await formPage.navigateTo(formUrl); + }); + + test('Preview navigation', async ({ page }) => { + await page.getByRole('link', { name: 'Preview' }).click(); + expect(page.url()).toContain('preview'); + const nextPageIndex = 1; + const menu = page.getByRole('navigation', { name: 'Section navigation' }); + await expect(menu).toBeVisible(); + const links = menu.getByRole('link'); + + const numLinks = await links.count(); + await expect(page.getByRole('heading', { name: `${nextPageIndex} of ${numLinks}`})).toBeVisible(); + expect(numLinks).toBeGreaterThanOrEqual(nextPageIndex + 1); + + await links.nth(nextPageIndex).click(); + await expect(page.getByRole('heading', { name: `${nextPageIndex + 1} of ${numLinks}`})).toBeVisible(); + }); +}); diff --git a/infra/cdktf/src/lib/cloud.gov/space.ts b/infra/cdktf/src/lib/cloud.gov/space.ts index 2e49aa106..d97bf2e91 100644 --- a/infra/cdktf/src/lib/cloud.gov/space.ts +++ b/infra/cdktf/src/lib/cloud.gov/space.ts @@ -34,5 +34,12 @@ export class CloudGovSpace extends Construct { ), } ); + + new AstroService(scope, `${id}-sandbox`, space.id, `sandbox:${gitRef}`, { + loginGovPrivateKey: getSecret( + this, + `/${id}/sandbox/login.gov/private-key` + ), + }); } } diff --git a/manage.sh b/manage.sh index 8151253ed..6cebc247e 100755 --- a/manage.sh +++ b/manage.sh @@ -1,3 +1,3 @@ #!/bin/sh -pnpm --filter @atj/cli-app cli $@ +pnpm --filter @gsa-tts/forms-cli cli $@ diff --git a/packages/design/src/Form/Form.stories.tsx b/packages/design/src/Form/Form.stories.tsx index 5233f9fe2..2b3c88d6b 100644 --- a/packages/design/src/Form/Form.stories.tsx +++ b/packages/design/src/Form/Form.stories.tsx @@ -1,7 +1,7 @@ import React from 'react'; import type { Meta, StoryObj } from '@storybook/react'; -import Form from './index.js'; +import Form from './Form.js'; import { createTestFormContext, createTestSession } from '../test-form.js'; import { MemoryRouter } from 'react-router-dom'; diff --git a/packages/design/src/Form/index.tsx b/packages/design/src/Form/Form.tsx similarity index 89% rename from packages/design/src/Form/index.tsx rename to packages/design/src/Form/Form.tsx index 99e99413a..4e85538ac 100644 --- a/packages/design/src/Form/index.tsx +++ b/packages/design/src/Form/Form.tsx @@ -8,30 +8,10 @@ import { type FormConfig, type FormRoute, type FormSession, - type PatternProps, type Prompt, - type PromptComponent, } from '@gsa-tts/forms-core'; import { renderPromptComponents } from './form-common.js'; - -export type FormUIContext = { - config: FormConfig; - components: ComponentForPattern; - uswdsRoot: `${string}/`; -}; - -export type ComponentForPattern = Record< - string, - PatternComponent ->; - -export type PatternComponent> = - React.ComponentType< - T & { - context: FormUIContext; - childComponents?: PromptComponent[]; - } - >; +import { FormUIContext } from './types.js'; const usePrompt = ( initialPrompt: Prompt, diff --git a/packages/design/src/Form/components/AccordionRow/AccordionRow.stories.tsx b/packages/design/src/Form/components/AccordionRow/AccordionRow.stories.tsx index 8b4e2297b..70a76541e 100644 --- a/packages/design/src/Form/components/AccordionRow/AccordionRow.stories.tsx +++ b/packages/design/src/Form/components/AccordionRow/AccordionRow.stories.tsx @@ -1,7 +1,7 @@ import React from 'react'; import { type Meta, type StoryObj } from '@storybook/react'; -import AccordionRow from './index.js'; +import AccordionRow from './AccordionRow.js'; const meta: Meta = { title: 'patterns/AccordionRow', diff --git a/packages/design/src/Form/components/AccordionRow/index.tsx b/packages/design/src/Form/components/AccordionRow/AccordionRow.tsx similarity index 95% rename from packages/design/src/Form/components/AccordionRow/index.tsx rename to packages/design/src/Form/components/AccordionRow/AccordionRow.tsx index e6238864d..c71dcede7 100644 --- a/packages/design/src/Form/components/AccordionRow/index.tsx +++ b/packages/design/src/Form/components/AccordionRow/AccordionRow.tsx @@ -2,7 +2,7 @@ import React, { useState } from 'react'; import classNames from 'classnames'; import { type AccordionRowProps } from '@gsa-tts/forms-core'; -import { type PatternComponent } from '../../index.js'; +import { type PatternComponent } from '../../types.js'; const AccordionRow: PatternComponent = ({ inputId, diff --git a/packages/design/src/Form/components/Address/Address.stories.tsx b/packages/design/src/Form/components/Address/Address.stories.tsx index 21ff57e77..78971c3fb 100644 --- a/packages/design/src/Form/components/Address/Address.stories.tsx +++ b/packages/design/src/Form/components/Address/Address.stories.tsx @@ -2,7 +2,7 @@ import React from 'react'; import { FormProvider, useForm } from 'react-hook-form'; import { type Meta, type StoryObj } from '@storybook/react'; -import AddressPattern from './index.js'; +import AddressPattern from './Address.js'; import { stateTerritoryOrMilitaryPostList } from '@gsa-tts/forms-core'; const meta: Meta = { diff --git a/packages/design/src/Form/components/Address/index.tsx b/packages/design/src/Form/components/Address/Address.tsx similarity index 99% rename from packages/design/src/Form/components/Address/index.tsx rename to packages/design/src/Form/components/Address/Address.tsx index 64ade143b..c50798e89 100644 --- a/packages/design/src/Form/components/Address/index.tsx +++ b/packages/design/src/Form/components/Address/Address.tsx @@ -4,7 +4,7 @@ import { useFormContext } from 'react-hook-form'; import { type AddressComponentProps } from '@gsa-tts/forms-core'; -import { type PatternComponent } from '../../index.js'; +import { type PatternComponent } from '../../types.js'; const AddressPattern: PatternComponent = ({ childProps, diff --git a/packages/design/src/Form/components/Attachment/Attachment.stories.tsx b/packages/design/src/Form/components/Attachment/Attachment.stories.tsx index 352243e10..d529001c7 100644 --- a/packages/design/src/Form/components/Attachment/Attachment.stories.tsx +++ b/packages/design/src/Form/components/Attachment/Attachment.stories.tsx @@ -6,7 +6,7 @@ import { type AttachmentProps } from '@gsa-tts/forms-core'; import { FormProvider, useForm } from 'react-hook-form'; import type { Meta, StoryObj } from '@storybook/react'; -import Attachment from './index.js'; +import Attachment from './Attachment.js'; const defaultArgs = { _patternId: '', diff --git a/packages/design/src/Form/components/Attachment/index.tsx b/packages/design/src/Form/components/Attachment/Attachment.tsx similarity index 98% rename from packages/design/src/Form/components/Attachment/index.tsx rename to packages/design/src/Form/components/Attachment/Attachment.tsx index e91b74666..130c43b89 100644 --- a/packages/design/src/Form/components/Attachment/index.tsx +++ b/packages/design/src/Form/components/Attachment/Attachment.tsx @@ -3,7 +3,7 @@ import React, { useState } from 'react'; import { useFormContext } from 'react-hook-form'; import { type AttachmentProps } from '@gsa-tts/forms-core'; import { attachmentFileTypeOptions } from '@gsa-tts/forms-core'; -import { type PatternComponent } from '../../../Form/index.js'; +import { type PatternComponent } from '../../types.js'; const Attachment: PatternComponent = props => { const { register } = useFormContext(); diff --git a/packages/design/src/Form/components/Checkbox/Checkbox.stories.tsx b/packages/design/src/Form/components/Checkbox/Checkbox.stories.tsx index 9b61a6f88..088113673 100644 --- a/packages/design/src/Form/components/Checkbox/Checkbox.stories.tsx +++ b/packages/design/src/Form/components/Checkbox/Checkbox.stories.tsx @@ -2,7 +2,7 @@ import React from 'react'; import { FormProvider, useForm } from 'react-hook-form'; import { type Meta, type StoryObj } from '@storybook/react'; -import { CheckboxPattern } from './Checkbox.js'; +import CheckboxPattern from './Checkbox.js'; import { CheckboxProps } from '@gsa-tts/forms-core'; const meta: Meta = { diff --git a/packages/design/src/Form/components/Checkbox/Checkbox.tsx b/packages/design/src/Form/components/Checkbox/Checkbox.tsx index bb42833ff..d3b3f7660 100644 --- a/packages/design/src/Form/components/Checkbox/Checkbox.tsx +++ b/packages/design/src/Form/components/Checkbox/Checkbox.tsx @@ -3,10 +3,10 @@ import { useFormContext } from 'react-hook-form'; import { type CheckboxProps } from '@gsa-tts/forms-core'; -import { type PatternComponent } from '../../../Form/index.js'; +import { type PatternComponent } from '../../types.js'; import classNames from 'classnames'; -export const CheckboxPattern: PatternComponent = props => { +const CheckboxPattern: PatternComponent = props => { const { register } = useFormContext(); return (
@@ -29,3 +29,5 @@ export const CheckboxPattern: PatternComponent = props => {
); }; + +export default CheckboxPattern; diff --git a/packages/design/src/Form/components/Checkbox/index.tsx b/packages/design/src/Form/components/Checkbox/index.tsx deleted file mode 100644 index 8cb1c6146..000000000 --- a/packages/design/src/Form/components/Checkbox/index.tsx +++ /dev/null @@ -1,2 +0,0 @@ -import { CheckboxPattern } from './Checkbox.js'; -export default CheckboxPattern; diff --git a/packages/design/src/Form/components/CheckboxGroup/CheckboxGroup.stories.tsx b/packages/design/src/Form/components/CheckboxGroup/CheckboxGroup.stories.tsx index 89194bdd8..8ae050f1a 100644 --- a/packages/design/src/Form/components/CheckboxGroup/CheckboxGroup.stories.tsx +++ b/packages/design/src/Form/components/CheckboxGroup/CheckboxGroup.stories.tsx @@ -2,7 +2,7 @@ import React from 'react'; import { FormProvider, useForm } from 'react-hook-form'; import { type Meta, type StoryObj } from '@storybook/react'; -import { CheckboxGroupPattern } from './CheckboxGroup.js'; +import CheckboxGroupPattern from './CheckboxGroup.js'; const meta: Meta = { title: 'patterns/CheckboxGroupPattern', diff --git a/packages/design/src/Form/components/CheckboxGroup/CheckboxGroup.tsx b/packages/design/src/Form/components/CheckboxGroup/CheckboxGroup.tsx index 8cf1d97f3..0ea8256ea 100644 --- a/packages/design/src/Form/components/CheckboxGroup/CheckboxGroup.tsx +++ b/packages/design/src/Form/components/CheckboxGroup/CheckboxGroup.tsx @@ -2,12 +2,10 @@ import React from 'react'; import { useFormContext } from 'react-hook-form'; import { type CheckboxGroupProps } from '@gsa-tts/forms-core'; -import { type PatternComponent } from '../../../Form/index.js'; +import { type PatternComponent } from '../../types.js'; import classNames from 'classnames'; -export const CheckboxGroupPattern: PatternComponent< - CheckboxGroupProps -> = props => { +const CheckboxGroupPattern: PatternComponent = props => { const { register } = useFormContext(); const hintId = `hint-${props.groupId}`; const errorId = `error-${props.groupId}`; @@ -62,3 +60,5 @@ export const CheckboxGroupPattern: PatternComponent< ); }; + +export default CheckboxGroupPattern; diff --git a/packages/design/src/Form/components/CheckboxGroup/index.tsx b/packages/design/src/Form/components/CheckboxGroup/index.tsx deleted file mode 100644 index 5ed112492..000000000 --- a/packages/design/src/Form/components/CheckboxGroup/index.tsx +++ /dev/null @@ -1,2 +0,0 @@ -import { CheckboxGroupPattern } from './CheckboxGroup.js'; -export default CheckboxGroupPattern; diff --git a/packages/design/src/Form/components/Date/Date.stories.tsx b/packages/design/src/Form/components/Date/Date.stories.tsx index 83825e431..c2ce7df6e 100644 --- a/packages/design/src/Form/components/Date/Date.stories.tsx +++ b/packages/design/src/Form/components/Date/Date.stories.tsx @@ -2,7 +2,7 @@ import React from 'react'; import { FormProvider, useForm } from 'react-hook-form'; import { type Meta, type StoryObj } from '@storybook/react'; -import { DatePattern } from './Date.js'; +import DatePattern from './Date.js'; const meta: Meta = { title: 'patterns/DateOfBirthPattern', diff --git a/packages/design/src/Form/components/Date/Date.tsx b/packages/design/src/Form/components/Date/Date.tsx index d55b3f1bf..7eb146d8e 100644 --- a/packages/design/src/Form/components/Date/Date.tsx +++ b/packages/design/src/Form/components/Date/Date.tsx @@ -2,7 +2,7 @@ import React from 'react'; import classNames from 'classnames'; import { useFormContext } from 'react-hook-form'; import { type DateProps } from '@gsa-tts/forms-core'; -import { type PatternComponent } from '../../index.js'; +import { type PatternComponent } from '../../types.js'; const months = [ { value: '01', label: 'January' }, @@ -27,7 +27,7 @@ const getAriaDescribedBy = ( return ids || undefined; }; -export const DatePattern: PatternComponent = ({ +const DatePattern: PatternComponent = ({ monthId, dayId, yearId, @@ -143,3 +143,5 @@ export const DatePattern: PatternComponent = ({ ); }; + +export default DatePattern; diff --git a/packages/design/src/Form/components/Date/index.tsx b/packages/design/src/Form/components/Date/index.tsx deleted file mode 100644 index 5a828f98f..000000000 --- a/packages/design/src/Form/components/Date/index.tsx +++ /dev/null @@ -1,3 +0,0 @@ -import { DatePattern } from './Date.js'; - -export default DatePattern; diff --git a/packages/design/src/Form/components/EmailInput/EmailInput.stories.tsx b/packages/design/src/Form/components/EmailInput/EmailInput.stories.tsx index 9379802d2..03537e59d 100644 --- a/packages/design/src/Form/components/EmailInput/EmailInput.stories.tsx +++ b/packages/design/src/Form/components/EmailInput/EmailInput.stories.tsx @@ -2,7 +2,7 @@ import React from 'react'; import { FormProvider, useForm } from 'react-hook-form'; import { type Meta, type StoryObj } from '@storybook/react'; -import { EmailInputPattern } from './EmailInput.js'; +import EmailInputPattern from './EmailInput.js'; const meta: Meta = { title: 'patterns/EmailInputPattern', diff --git a/packages/design/src/Form/components/EmailInput/EmailInput.tsx b/packages/design/src/Form/components/EmailInput/EmailInput.tsx index 839c50090..07046a0c5 100644 --- a/packages/design/src/Form/components/EmailInput/EmailInput.tsx +++ b/packages/design/src/Form/components/EmailInput/EmailInput.tsx @@ -2,9 +2,9 @@ import React from 'react'; import classNames from 'classnames'; import { useFormContext } from 'react-hook-form'; import { type EmailInputProps } from '@gsa-tts/forms-core'; -import { type PatternComponent } from '../../index.js'; +import { type PatternComponent } from '../../types.js'; -export const EmailInputPattern: PatternComponent = ({ +const EmailInputPattern: PatternComponent = ({ emailId, label, required, @@ -57,3 +57,5 @@ export const EmailInputPattern: PatternComponent = ({ ); }; + +export default EmailInputPattern; diff --git a/packages/design/src/Form/components/EmailInput/index.tsx b/packages/design/src/Form/components/EmailInput/index.tsx deleted file mode 100644 index bc02ffc7c..000000000 --- a/packages/design/src/Form/components/EmailInput/index.tsx +++ /dev/null @@ -1,3 +0,0 @@ -import { EmailInputPattern } from './EmailInput.js'; - -export default EmailInputPattern; diff --git a/packages/design/src/Form/components/Fieldset/Fieldset.stories.tsx b/packages/design/src/Form/components/Fieldset/Fieldset.stories.tsx index 3a07af42b..27a3c399a 100644 --- a/packages/design/src/Form/components/Fieldset/Fieldset.stories.tsx +++ b/packages/design/src/Form/components/Fieldset/Fieldset.stories.tsx @@ -1,7 +1,7 @@ import type { Meta, StoryObj } from '@storybook/react'; import React from 'react'; -import Fieldset from './index.js'; +import Fieldset from './Fieldset.js'; import { FormProvider, useForm } from 'react-hook-form'; import { defaultPatternComponents } from '../index.js'; import type { diff --git a/packages/design/src/Form/components/Fieldset/index.tsx b/packages/design/src/Form/components/Fieldset/Fieldset.tsx similarity index 94% rename from packages/design/src/Form/components/Fieldset/index.tsx rename to packages/design/src/Form/components/Fieldset/Fieldset.tsx index 6e3eb2a0f..d1ef382ac 100644 --- a/packages/design/src/Form/components/Fieldset/index.tsx +++ b/packages/design/src/Form/components/Fieldset/Fieldset.tsx @@ -2,7 +2,7 @@ import React from 'react'; import { type FieldsetProps } from '@gsa-tts/forms-core'; -import { type PatternComponent } from '../../index.js'; +import { type PatternComponent } from '../../types.js'; import { renderPromptComponents } from '../../form-common.js'; import classNames from 'classnames'; diff --git a/packages/design/src/Form/components/FormSummary/FormSummary.stories.tsx b/packages/design/src/Form/components/FormSummary/FormSummary.stories.tsx index c0887d1a0..364ba55e3 100644 --- a/packages/design/src/Form/components/FormSummary/FormSummary.stories.tsx +++ b/packages/design/src/Form/components/FormSummary/FormSummary.stories.tsx @@ -1,6 +1,6 @@ import type { Meta, StoryObj } from '@storybook/react'; -import FormSummary from './index.js'; +import FormSummary from './FormSummary.js'; export default { title: 'patterns/FormSummary', diff --git a/packages/design/src/Form/components/FormSummary/index.tsx b/packages/design/src/Form/components/FormSummary/FormSummary.tsx similarity index 87% rename from packages/design/src/Form/components/FormSummary/index.tsx rename to packages/design/src/Form/components/FormSummary/FormSummary.tsx index e2aeace3d..ab53e2c54 100644 --- a/packages/design/src/Form/components/FormSummary/index.tsx +++ b/packages/design/src/Form/components/FormSummary/FormSummary.tsx @@ -1,7 +1,7 @@ import React from 'react'; import { type FormSummaryProps } from '@gsa-tts/forms-core'; -import { type PatternComponent } from '../../../Form/index.js'; +import { type PatternComponent } from '../../types.js'; const FormSummary: PatternComponent = props => { return ( diff --git a/packages/design/src/Form/components/GenderId/GenderId.stories.tsx b/packages/design/src/Form/components/GenderId/GenderId.stories.tsx index eae09c651..31e253291 100644 --- a/packages/design/src/Form/components/GenderId/GenderId.stories.tsx +++ b/packages/design/src/Form/components/GenderId/GenderId.stories.tsx @@ -1,7 +1,7 @@ import React from 'react'; import { FormProvider, useForm } from 'react-hook-form'; import { type Meta, type StoryObj } from '@storybook/react'; -import GenderIdPattern from './index.js'; +import GenderIdPattern from './GenderId.js'; const meta: Meta = { title: 'patterns/GenderIdPattern', diff --git a/packages/design/src/Form/components/GenderId/index.tsx b/packages/design/src/Form/components/GenderId/GenderId.tsx similarity index 98% rename from packages/design/src/Form/components/GenderId/index.tsx rename to packages/design/src/Form/components/GenderId/GenderId.tsx index d86dcfca1..972b90d04 100644 --- a/packages/design/src/Form/components/GenderId/index.tsx +++ b/packages/design/src/Form/components/GenderId/GenderId.tsx @@ -2,7 +2,7 @@ import React, { useState } from 'react'; import classNames from 'classnames'; import { useFormContext, useWatch } from 'react-hook-form'; import { type GenderIdProps } from '@gsa-tts/forms-core'; -import { type PatternComponent } from '../../index.js'; +import { type PatternComponent } from '../../types.js'; const GenderIdPattern: PatternComponent = ({ genderId, diff --git a/packages/design/src/Form/components/Name/Name.stories.tsx b/packages/design/src/Form/components/Name/Name.stories.tsx index 9db4d2968..f1945725a 100644 --- a/packages/design/src/Form/components/Name/Name.stories.tsx +++ b/packages/design/src/Form/components/Name/Name.stories.tsx @@ -1,7 +1,7 @@ import React from 'react'; import { FormProvider, useForm } from 'react-hook-form'; import { type Meta, type StoryObj } from '@storybook/react'; -import NamePattern from './index.js'; +import NamePattern from './Name.js'; const meta: Meta = { title: 'patterns/NamePattern', diff --git a/packages/design/src/Form/components/Name/index.tsx b/packages/design/src/Form/components/Name/Name.tsx similarity index 98% rename from packages/design/src/Form/components/Name/index.tsx rename to packages/design/src/Form/components/Name/Name.tsx index 5e73cee14..2dad8f532 100644 --- a/packages/design/src/Form/components/Name/index.tsx +++ b/packages/design/src/Form/components/Name/Name.tsx @@ -1,7 +1,7 @@ import React from 'react'; import classNames from 'classnames'; import { useFormContext } from 'react-hook-form'; -import { type PatternComponent } from '../../index.js'; +import { type PatternComponent } from '../../types.js'; import { type NameProps } from '@gsa-tts/forms-core'; const getAriaDescribedBy = ( diff --git a/packages/design/src/Form/components/PackageDownload/index.tsx b/packages/design/src/Form/components/PackageDownload/PackageDownload.tsx similarity index 73% rename from packages/design/src/Form/components/PackageDownload/index.tsx rename to packages/design/src/Form/components/PackageDownload/PackageDownload.tsx index ed75f35fd..a7f1fa2b5 100644 --- a/packages/design/src/Form/components/PackageDownload/index.tsx +++ b/packages/design/src/Form/components/PackageDownload/PackageDownload.tsx @@ -2,8 +2,8 @@ import React from 'react'; import { type PackageDownloadProps } from '@gsa-tts/forms-core'; -import { type PatternComponent } from '../../../Form/index.js'; -import ActionBar from '../../../Form/ActionBar/index.js'; +import { type PatternComponent } from '../../types.js'; +import ActionBar from '../../ActionBar/index.js'; const PackageDownload: PatternComponent = props => { return ( diff --git a/packages/design/src/Form/components/Page/index.tsx b/packages/design/src/Form/components/Page/Page.tsx similarity index 84% rename from packages/design/src/Form/components/Page/index.tsx rename to packages/design/src/Form/components/Page/Page.tsx index 90911aae3..94dd3276b 100644 --- a/packages/design/src/Form/components/Page/index.tsx +++ b/packages/design/src/Form/components/Page/Page.tsx @@ -2,7 +2,7 @@ import React from 'react'; import { type PageProps } from '@gsa-tts/forms-core'; -import { type PatternComponent } from '../../index.js'; +import { type PatternComponent } from '../../types.js'; import { renderPromptComponents } from '../../form-common.js'; const Page: PatternComponent = props => { diff --git a/packages/design/src/Form/components/PageSet/PageMenu/PageMenu.stories.tsx b/packages/design/src/Form/components/PageSet/PageMenu/PageMenu.stories.tsx index 5ffbfc443..bec714872 100644 --- a/packages/design/src/Form/components/PageSet/PageMenu/PageMenu.stories.tsx +++ b/packages/design/src/Form/components/PageSet/PageMenu/PageMenu.stories.tsx @@ -1,6 +1,6 @@ import type { Meta, StoryObj } from '@storybook/react'; -import { PageMenu } from './PageMenu.js'; +import PageMenu from './PageMenu.js'; const meta: Meta = { title: 'patterns/PageSet/PageMenu', diff --git a/packages/design/src/Form/components/PageSet/PageMenu/PageMenu.tsx b/packages/design/src/Form/components/PageSet/PageMenu/PageMenu.tsx index e94027e50..327d3667e 100644 --- a/packages/design/src/Form/components/PageSet/PageMenu/PageMenu.tsx +++ b/packages/design/src/Form/components/PageSet/PageMenu/PageMenu.tsx @@ -11,14 +11,25 @@ export type PageMenuProps = { }[]; }; -export const PageMenu = ({ pages }: PageMenuProps) => { +const PageMenu = ({ pages }: PageMenuProps) => { const [updatedPages, setUpdatedPages] = React.useState(pages); const handlePageVisit = (index: number) => { setUpdatedPages(prevPages => - prevPages.map((page, i) => - i === index || page.selected ? { ...page, visited: true } : page - ) + prevPages.map((page, i) => { + if (i === index) { + return { + ...page, + selected: true, + visited: true, + }; + } else { + return { + ...page, + selected: false, + }; + } + }) ); }; @@ -52,3 +63,5 @@ export const PageMenu = ({ pages }: PageMenuProps) => { ); }; + +export default PageMenu; diff --git a/packages/design/src/Form/components/PageSet/PageMenu/index.ts b/packages/design/src/Form/components/PageSet/PageMenu/index.ts deleted file mode 100644 index 76c88e506..000000000 --- a/packages/design/src/Form/components/PageSet/PageMenu/index.ts +++ /dev/null @@ -1 +0,0 @@ -export { PageMenu } from './PageMenu.js'; diff --git a/packages/design/src/Form/components/PageSet/PageSet.tsx b/packages/design/src/Form/components/PageSet/PageSet.tsx index 8c7e71b6b..10ad94cab 100644 --- a/packages/design/src/Form/components/PageSet/PageSet.tsx +++ b/packages/design/src/Form/components/PageSet/PageSet.tsx @@ -2,10 +2,10 @@ import React from 'react'; import { type PageSetProps } from '@gsa-tts/forms-core'; -import { type PatternComponent } from '../../index.js'; +import { type PatternComponent } from '../../types.js'; import ActionBar from '../../../Form/ActionBar/index.js'; -import { PageMenu } from './PageMenu/index.js'; +import PageMenu from './PageMenu/PageMenu.js'; import { renderPromptComponents } from '../../form-common.js'; import classNames from 'classnames'; @@ -14,7 +14,10 @@ const PageSet: PatternComponent = props => { return (
-
); }; + +export default SelectDropdownPattern; diff --git a/packages/design/src/Form/components/SelectDropdown/index.tsx b/packages/design/src/Form/components/SelectDropdown/index.tsx deleted file mode 100644 index 6fb82928a..000000000 --- a/packages/design/src/Form/components/SelectDropdown/index.tsx +++ /dev/null @@ -1,3 +0,0 @@ -import { SelectDropdownPattern } from './SelectDropdown.js'; - -export default SelectDropdownPattern; diff --git a/packages/design/src/Form/components/Sequence/index.tsx b/packages/design/src/Form/components/Sequence/Sequence.tsx similarity index 78% rename from packages/design/src/Form/components/Sequence/index.tsx rename to packages/design/src/Form/components/Sequence/Sequence.tsx index 27d330908..e2f6d42e2 100644 --- a/packages/design/src/Form/components/Sequence/index.tsx +++ b/packages/design/src/Form/components/Sequence/Sequence.tsx @@ -1,4 +1,4 @@ -import { type PatternComponent } from '../../index.js'; +import { type PatternComponent } from '../../types.js'; import { renderPromptComponents } from '../../form-common.js'; const Sequence: PatternComponent = props => { diff --git a/packages/design/src/Form/components/Sex/Sex.tsx b/packages/design/src/Form/components/Sex/Sex.tsx index a4c2dfa27..88a8363e6 100644 --- a/packages/design/src/Form/components/Sex/Sex.tsx +++ b/packages/design/src/Form/components/Sex/Sex.tsx @@ -1,7 +1,7 @@ import React, { useState } from 'react'; import classNames from 'classnames'; import { useFormContext } from 'react-hook-form'; -import { type PatternComponent } from '../../index.js'; +import { type PatternComponent } from '../../types.js'; import { type SexProps } from '@gsa-tts/forms-core'; import Modal from './Modal.js'; diff --git a/packages/design/src/Form/components/Sex/index.tsx b/packages/design/src/Form/components/Sex/index.tsx deleted file mode 100644 index 60d60729a..000000000 --- a/packages/design/src/Form/components/Sex/index.tsx +++ /dev/null @@ -1,3 +0,0 @@ -import Sex from './Sex.js'; - -export default Sex; diff --git a/packages/design/src/Form/components/SocialSecurityNumber/SocialSecurityNumber.stories.tsx b/packages/design/src/Form/components/SocialSecurityNumber/SocialSecurityNumber.stories.tsx index 192ac6496..e7edb8a5b 100644 --- a/packages/design/src/Form/components/SocialSecurityNumber/SocialSecurityNumber.stories.tsx +++ b/packages/design/src/Form/components/SocialSecurityNumber/SocialSecurityNumber.stories.tsx @@ -2,7 +2,7 @@ import React from 'react'; import { FormProvider, useForm } from 'react-hook-form'; import { type Meta, type StoryObj } from '@storybook/react'; -import { SocialSecurityNumberPattern } from './SocialSecurityNumber.js'; +import SocialSecurityNumberPattern from './SocialSecurityNumber.js'; const meta: Meta = { title: 'patterns/SocialSecurityNumberPattern', diff --git a/packages/design/src/Form/components/SocialSecurityNumber/SocialSecurityNumber.tsx b/packages/design/src/Form/components/SocialSecurityNumber/SocialSecurityNumber.tsx index 1f297c20d..d18ade086 100644 --- a/packages/design/src/Form/components/SocialSecurityNumber/SocialSecurityNumber.tsx +++ b/packages/design/src/Form/components/SocialSecurityNumber/SocialSecurityNumber.tsx @@ -3,7 +3,7 @@ import classNames from 'classnames'; import { useFormContext } from 'react-hook-form'; import { type SocialSecurityNumberProps } from '@gsa-tts/forms-core'; -import { type PatternComponent } from '../../index.js'; +import { type PatternComponent } from '../../types.js'; const formatSSN = (value: string) => { const rawValue = value.replace(/[^\d]/g, ''); @@ -13,7 +13,7 @@ const formatSSN = (value: string) => { return `${rawValue.slice(0, 3)}-${rawValue.slice(3, 5)}-${rawValue.slice(5, 9)}`; }; -export const SocialSecurityNumberPattern: PatternComponent< +const SocialSecurityNumberPattern: PatternComponent< SocialSecurityNumberProps > = ({ ssnId, hint, label, required, error, value }) => { const { register, setValue } = useFormContext(); @@ -69,3 +69,5 @@ export const SocialSecurityNumberPattern: PatternComponent< ); }; + +export default SocialSecurityNumberPattern; diff --git a/packages/design/src/Form/components/SocialSecurityNumber/index.tsx b/packages/design/src/Form/components/SocialSecurityNumber/index.tsx deleted file mode 100644 index 241c5d49c..000000000 --- a/packages/design/src/Form/components/SocialSecurityNumber/index.tsx +++ /dev/null @@ -1,3 +0,0 @@ -import { SocialSecurityNumberPattern } from './SocialSecurityNumber.js'; - -export default SocialSecurityNumberPattern; diff --git a/packages/design/src/Form/components/SubmissionConfirmation/SubmissionConfirmation.stories.tsx b/packages/design/src/Form/components/SubmissionConfirmation/SubmissionConfirmation.stories.tsx index 0e936d01b..9bf2b9eb3 100644 --- a/packages/design/src/Form/components/SubmissionConfirmation/SubmissionConfirmation.stories.tsx +++ b/packages/design/src/Form/components/SubmissionConfirmation/SubmissionConfirmation.stories.tsx @@ -1,6 +1,6 @@ import type { Meta, StoryObj } from '@storybook/react'; -import SubmissionConfirmation from './index.js'; +import SubmissionConfirmation from './SubmissionConfirmation.js'; export default { title: 'patterns/SubmissionConfirmation', diff --git a/packages/design/src/Form/components/SubmissionConfirmation/index.tsx b/packages/design/src/Form/components/SubmissionConfirmation/SubmissionConfirmation.tsx similarity index 97% rename from packages/design/src/Form/components/SubmissionConfirmation/index.tsx rename to packages/design/src/Form/components/SubmissionConfirmation/SubmissionConfirmation.tsx index e62e67c9d..72da6d0c4 100644 --- a/packages/design/src/Form/components/SubmissionConfirmation/index.tsx +++ b/packages/design/src/Form/components/SubmissionConfirmation/SubmissionConfirmation.tsx @@ -1,7 +1,7 @@ import React from 'react'; import { type SubmissionConfirmationProps } from '@gsa-tts/forms-core'; -import { type PatternComponent } from '../../../Form/index.js'; +import { type PatternComponent } from '../../types.js'; const SubmissionConfirmation: PatternComponent< SubmissionConfirmationProps diff --git a/packages/design/src/Form/components/TextArea/TextArea.stories.tsx b/packages/design/src/Form/components/TextArea/TextArea.stories.tsx index ab0f1a3e5..ec26b671f 100644 --- a/packages/design/src/Form/components/TextArea/TextArea.stories.tsx +++ b/packages/design/src/Form/components/TextArea/TextArea.stories.tsx @@ -2,7 +2,7 @@ import React from 'react'; import { FormProvider, useForm } from 'react-hook-form'; import type { Meta, StoryObj } from '@storybook/react'; -import TextArea from './index.js'; +import TextArea from './TextArea.js'; const meta: Meta = { title: 'patterns/TextArea', diff --git a/packages/design/src/Form/components/TextArea/index.tsx b/packages/design/src/Form/components/TextArea/TextArea.tsx similarity index 96% rename from packages/design/src/Form/components/TextArea/index.tsx rename to packages/design/src/Form/components/TextArea/TextArea.tsx index 65fbf5f49..c3788fab5 100644 --- a/packages/design/src/Form/components/TextArea/index.tsx +++ b/packages/design/src/Form/components/TextArea/TextArea.tsx @@ -3,7 +3,7 @@ import classNames from 'classnames'; import { useFormContext } from 'react-hook-form'; import { type TextAreaProps } from '@gsa-tts/forms-core'; -import { type PatternComponent } from '../../../Form/index.js'; +import { type PatternComponent } from '../../types.js'; const TextArea: PatternComponent = ({ inputId, diff --git a/packages/design/src/Form/components/TextInput/TestInput.stories.tsx b/packages/design/src/Form/components/TextInput/TestInput.stories.tsx index 51c2e4adb..69e0e1523 100644 --- a/packages/design/src/Form/components/TextInput/TestInput.stories.tsx +++ b/packages/design/src/Form/components/TextInput/TestInput.stories.tsx @@ -2,7 +2,7 @@ import React from 'react'; import { FormProvider, useForm } from 'react-hook-form'; import type { Meta, StoryObj } from '@storybook/react'; -import TextInput from './index.js'; +import TextInput from './TextInput.js'; const meta: Meta = { title: 'patterns/TextInput', diff --git a/packages/design/src/Form/components/TextInput/index.tsx b/packages/design/src/Form/components/TextInput/TextInput.tsx similarity index 96% rename from packages/design/src/Form/components/TextInput/index.tsx rename to packages/design/src/Form/components/TextInput/TextInput.tsx index eec7b4381..c57fc0e5f 100644 --- a/packages/design/src/Form/components/TextInput/index.tsx +++ b/packages/design/src/Form/components/TextInput/TextInput.tsx @@ -3,7 +3,7 @@ import React from 'react'; import { useFormContext } from 'react-hook-form'; import { type TextInputProps } from '@gsa-tts/forms-core'; -import { type PatternComponent } from '../../../Form/index.js'; +import { type PatternComponent } from '../../types.js'; const TextInput: PatternComponent = ({ inputId, diff --git a/packages/design/src/Form/components/ZipCode/index.tsx b/packages/design/src/Form/components/ZipCode/index.tsx deleted file mode 100644 index a53580d18..000000000 --- a/packages/design/src/Form/components/ZipCode/index.tsx +++ /dev/null @@ -1,24 +0,0 @@ -import React from 'react'; -import { useFormContext } from 'react-hook-form'; - -import { type ZipcodeProps } from '@gsa-tts/forms-core'; - -export const ZipCode = (props: ZipcodeProps) => { - const { register } = useFormContext(); - return ( - <> - - - - ); -}; diff --git a/packages/design/src/Form/components/index.tsx b/packages/design/src/Form/components/index.tsx index e7d4701b6..6a98d2f29 100644 --- a/packages/design/src/Form/components/index.tsx +++ b/packages/design/src/Form/components/index.tsx @@ -1,31 +1,31 @@ -import { PatternComponent, type ComponentForPattern } from '../index.js'; +import { PatternComponent, type ComponentForPattern } from '../types.js'; -import AccordionRow from './AccordionRow/index.js'; -import Attachment from './Attachment/index.js'; -import Address from './Address/index.js'; -import Checkbox from './Checkbox/index.js'; -import CheckboxGroup from './CheckboxGroup/index.js'; -import Date from './Date/index.js'; -import EmailInput from './EmailInput/index.js'; -import Fieldset from './Fieldset/index.js'; -import FormSummary from './FormSummary/index.js'; -import GenderId from './GenderId/index.js'; -import PackageDownload from './PackageDownload/index.js'; -import Page from './Page/index.js'; -import PageSet from './PageSet/index.js'; -import Paragraph from './Paragraph/index.js'; -import PhoneNumber from './PhoneNumber/index.js'; -import RadioGroup from './RadioGroup/index.js'; -import Repeater from './Repeater/index.js'; -import RichText from './RichText/index.js'; -import Sequence from './Sequence/index.js'; -import SelectDropdown from './SelectDropdown/index.js'; -import Sex from './Sex/index.js'; -import SocialSecurityNumber from './SocialSecurityNumber/index.js'; -import SubmissionConfirmation from './SubmissionConfirmation/index.js'; -import TextInput from './TextInput/index.js'; -import TextArea from './TextArea/index.js'; -import Name from './Name/index.js'; +import AccordionRow from './AccordionRow/AccordionRow.js'; +import Attachment from './Attachment/Attachment.js'; +import Address from './Address/Address.js'; +import Checkbox from './Checkbox/Checkbox.js'; +import CheckboxGroup from './CheckboxGroup/CheckboxGroup.js'; +import Date from './Date/Date.js'; +import EmailInput from './EmailInput/EmailInput.js'; +import Fieldset from './Fieldset/Fieldset.js'; +import FormSummary from './FormSummary/FormSummary.js'; +import GenderId from './GenderId/GenderId.js'; +import PackageDownload from './PackageDownload/PackageDownload.js'; +import Page from './Page/Page.js'; +import PageSet from './PageSet/PageSet.js'; +import Paragraph from './Paragraph/Paragraph.js'; +import PhoneNumber from './PhoneNumber/PhoneNumber.js'; +import RadioGroup from './RadioGroup/RadioGroup.js'; +import Repeater from './Repeater/Repeater.js'; +import RichText from './RichText/RichText.js'; +import Sequence from './Sequence/Sequence.js'; +import SelectDropdown from './SelectDropdown/SelectDropdown.js'; +import Sex from './Sex/Sex.js'; +import SocialSecurityNumber from './SocialSecurityNumber/SocialSecurityNumber.js'; +import SubmissionConfirmation from './SubmissionConfirmation/SubmissionConfirmation.js'; +import TextInput from './TextInput/TextInput.js'; +import TextArea from './TextArea/TextArea.js'; +import Name from './Name/Name.js'; export const defaultPatternComponents: ComponentForPattern = { 'accordion-row': AccordionRow as PatternComponent, diff --git a/packages/design/src/Form/form-common.tsx b/packages/design/src/Form/form-common.tsx index e4c7c3815..4a1779ae2 100644 --- a/packages/design/src/Form/form-common.tsx +++ b/packages/design/src/Form/form-common.tsx @@ -1,6 +1,6 @@ import React from 'react'; import type { PromptComponent } from '@gsa-tts/forms-core'; -import type { FormUIContext } from './index.js'; +import type { FormUIContext } from './types.js'; export const renderPromptComponents = ( context: FormUIContext, diff --git a/packages/design/src/Form/types.ts b/packages/design/src/Form/types.ts new file mode 100644 index 000000000..486d147f8 --- /dev/null +++ b/packages/design/src/Form/types.ts @@ -0,0 +1,24 @@ +import { + type FormConfig, + type PatternProps, + type PromptComponent, +} from '@gsa-tts/forms-core'; + +export type FormUIContext = { + config: FormConfig; + components: ComponentForPattern; + uswdsRoot: `${string}/`; +}; + +export type ComponentForPattern = Record< + string, + PatternComponent +>; + +export type PatternComponent> = + React.ComponentType< + T & { + context: FormUIContext; + childComponents?: PromptComponent[]; + } + >; diff --git a/packages/design/src/FormManager/FormDelete/FormDelete.stories.tsx b/packages/design/src/FormManager/FormDelete/FormDelete.stories.tsx index a13cf61e6..fa572a9e3 100644 --- a/packages/design/src/FormManager/FormDelete/FormDelete.stories.tsx +++ b/packages/design/src/FormManager/FormDelete/FormDelete.stories.tsx @@ -5,7 +5,7 @@ import type { Meta, StoryObj } from '@storybook/react'; import { createTestBrowserFormService } from '@gsa-tts/forms-core/context'; import { createPatternTestForm } from '../../test-form.js'; -import FormDelete from './index.js'; +import FormDelete from './FormDelete.js'; const meta: Meta = { title: 'FormManager/FormDelete', diff --git a/packages/design/src/FormManager/FormDelete/index.tsx b/packages/design/src/FormManager/FormDelete/FormDelete.tsx similarity index 100% rename from packages/design/src/FormManager/FormDelete/index.tsx rename to packages/design/src/FormManager/FormDelete/FormDelete.tsx diff --git a/packages/design/src/FormManager/FormDocumentImport/DocumentImporter/DocumentImporter.stories.tsx b/packages/design/src/FormManager/FormDocumentImport/DocumentImporter/DocumentImporter.stories.tsx index a2bdbbdac..1d4dd81d4 100644 --- a/packages/design/src/FormManager/FormDocumentImport/DocumentImporter/DocumentImporter.stories.tsx +++ b/packages/design/src/FormManager/FormDocumentImport/DocumentImporter/DocumentImporter.stories.tsx @@ -2,7 +2,7 @@ import React from 'react'; import { MemoryRouter } from 'react-router-dom'; import type { Meta, StoryObj } from '@storybook/react'; -import DocumentImporter from './index.js'; +import DocumentImporter from './DocumentImporter.js'; import { createPatternTestForm } from '../../../test-form.js'; const meta: Meta = { diff --git a/packages/design/src/FormManager/FormDocumentImport/DocumentImporter/index.tsx b/packages/design/src/FormManager/FormDocumentImport/DocumentImporter/DocumentImporter.tsx similarity index 98% rename from packages/design/src/FormManager/FormDocumentImport/DocumentImporter/index.tsx rename to packages/design/src/FormManager/FormDocumentImport/DocumentImporter/DocumentImporter.tsx index 189ff7a07..1164170bc 100644 --- a/packages/design/src/FormManager/FormDocumentImport/DocumentImporter/index.tsx +++ b/packages/design/src/FormManager/FormDocumentImport/DocumentImporter/DocumentImporter.tsx @@ -10,7 +10,8 @@ import { createFormSession, } from '@gsa-tts/forms-core'; -import Form, { FormUIContext } from '../../../Form/index.js'; +import Form from '../../../Form/Form.js'; +import { type FormUIContext } from '../../../Form/types.js'; import { onFileInputChangeGetFile } from '../../FormList/CreateNew/file-input.js'; const DocumentImporter = ({ diff --git a/packages/design/src/FormManager/FormDocumentImport/index.tsx b/packages/design/src/FormManager/FormDocumentImport/FormDocumentImport.tsx similarity index 85% rename from packages/design/src/FormManager/FormDocumentImport/index.tsx rename to packages/design/src/FormManager/FormDocumentImport/FormDocumentImport.tsx index 87b8d1a02..f1d870fb1 100644 --- a/packages/design/src/FormManager/FormDocumentImport/index.tsx +++ b/packages/design/src/FormManager/FormDocumentImport/FormDocumentImport.tsx @@ -2,8 +2,8 @@ import React, { useEffect, useState } from 'react'; import { Blueprint, type FormService } from '@gsa-tts/forms-core'; -import { type FormUIContext } from '../../Form/index.js'; -import DocumentImporter from './DocumentImporter/index.js'; +import { type FormUIContext } from '../../Form/types.js'; +import DocumentImporter from './DocumentImporter/DocumentImporter.js'; export const FormDocumentImport = ({ baseUrl, diff --git a/packages/design/src/FormManager/FormEdit/PreviewPattern.tsx b/packages/design/src/FormManager/FormEdit/PreviewPattern.tsx index 215007986..6a0d41a74 100644 --- a/packages/design/src/FormManager/FormEdit/PreviewPattern.tsx +++ b/packages/design/src/FormManager/FormEdit/PreviewPattern.tsx @@ -1,6 +1,6 @@ import React, { useEffect, useRef } from 'react'; -import { PatternComponent } from '../../Form/index.js'; +import { PatternComponent } from '../../Form/types.js'; import { useFormManagerStore } from '../store.js'; export const PreviewPattern: PatternComponent = function PreviewPattern(props) { diff --git a/packages/design/src/FormManager/FormEdit/components/AccordionRowPatternEdit/index.tsx b/packages/design/src/FormManager/FormEdit/components/AccordionRowPatternEdit/AccordionRowPatternEdit.tsx similarity index 99% rename from packages/design/src/FormManager/FormEdit/components/AccordionRowPatternEdit/index.tsx rename to packages/design/src/FormManager/FormEdit/components/AccordionRowPatternEdit/AccordionRowPatternEdit.tsx index e94282551..615fdadd5 100644 --- a/packages/design/src/FormManager/FormEdit/components/AccordionRowPatternEdit/index.tsx +++ b/packages/design/src/FormManager/FormEdit/components/AccordionRowPatternEdit/AccordionRowPatternEdit.tsx @@ -6,7 +6,7 @@ import type { AccordionRowPattern, } from '@gsa-tts/forms-core'; -import AccordionRow from '../../../../Form/components/AccordionRow/index.js'; +import AccordionRow from '../../../../Form/components/AccordionRow/AccordionRow.js'; import { PatternEditComponent } from '../../types.js'; import { PatternEditActions } from '../common/PatternEditActions.js'; diff --git a/packages/design/src/FormManager/FormEdit/components/AddressPatternEdit/index.tsx b/packages/design/src/FormManager/FormEdit/components/AddressPatternEdit/AddressPatternEdit.tsx similarity index 98% rename from packages/design/src/FormManager/FormEdit/components/AddressPatternEdit/index.tsx rename to packages/design/src/FormManager/FormEdit/components/AddressPatternEdit/AddressPatternEdit.tsx index aff61a061..a9348b347 100644 --- a/packages/design/src/FormManager/FormEdit/components/AddressPatternEdit/index.tsx +++ b/packages/design/src/FormManager/FormEdit/components/AddressPatternEdit/AddressPatternEdit.tsx @@ -4,7 +4,7 @@ import classNames from 'classnames'; import { type AddressComponentProps } from '@gsa-tts/forms-core'; import { type AddressPattern } from '@gsa-tts/forms-core'; -import Address from '../../../../Form/components/Address/index.js'; +import Address from '../../../../Form/components/Address/Address.js'; import { PatternEditComponent } from '../../types.js'; import { PatternEditActions } from '../common/PatternEditActions.js'; diff --git a/packages/design/src/FormManager/FormEdit/components/AttachmentPatternEdit/index.tsx b/packages/design/src/FormManager/FormEdit/components/AttachmentPatternEdit/AttachmentPatternEdit.tsx similarity index 97% rename from packages/design/src/FormManager/FormEdit/components/AttachmentPatternEdit/index.tsx rename to packages/design/src/FormManager/FormEdit/components/AttachmentPatternEdit/AttachmentPatternEdit.tsx index 7fcabe801..014e11cd5 100644 --- a/packages/design/src/FormManager/FormEdit/components/AttachmentPatternEdit/index.tsx +++ b/packages/design/src/FormManager/FormEdit/components/AttachmentPatternEdit/AttachmentPatternEdit.tsx @@ -2,7 +2,7 @@ import classNames from 'classnames'; import React from 'react'; import { PatternId, AttachmentProps } from '@gsa-tts/forms-core'; import { AttachmentPattern } from '@gsa-tts/forms-core'; -import Attachment from '../../../../Form/components/Attachment/index.js'; +import Attachment from '../../../../Form/components/Attachment/Attachment.js'; import { useFormManagerStore } from '../../../store.js'; import { PatternEditComponent } from '../../types.js'; import { PatternEditActions } from '../common/PatternEditActions.js'; diff --git a/packages/design/src/FormManager/FormEdit/components/CheckboxGroupPatternEdit/CheckboxGroupPatternEdit.stories.tsx b/packages/design/src/FormManager/FormEdit/components/CheckboxGroupPatternEdit/CheckboxGroupPatternEdit.stories.tsx index 636c15fc0..b179b9209 100644 --- a/packages/design/src/FormManager/FormEdit/components/CheckboxGroupPatternEdit/CheckboxGroupPatternEdit.stories.tsx +++ b/packages/design/src/FormManager/FormEdit/components/CheckboxGroupPatternEdit/CheckboxGroupPatternEdit.stories.tsx @@ -4,7 +4,7 @@ import { type CheckboxGroupPattern } from '@gsa-tts/forms-core'; import { createPatternEditStoryMeta } from '../common/story-helper.js'; import FormEdit from '../../index.js'; -import CheckboxGroupPatternEdit from '../CheckboxGroupPatternEdit/index.js'; +import CheckboxGroupPatternEdit from './CheckboxGroupPatternEdit.js'; import { enLocale as message } from '@gsa-tts/forms-common'; import { expect, userEvent } from '@storybook/test'; import { within } from '@testing-library/react'; diff --git a/packages/design/src/FormManager/FormEdit/components/CheckboxGroupPatternEdit/index.tsx b/packages/design/src/FormManager/FormEdit/components/CheckboxGroupPatternEdit/CheckboxGroupPatternEdit.tsx similarity index 98% rename from packages/design/src/FormManager/FormEdit/components/CheckboxGroupPatternEdit/index.tsx rename to packages/design/src/FormManager/FormEdit/components/CheckboxGroupPatternEdit/CheckboxGroupPatternEdit.tsx index b0b010ce6..03d4db164 100644 --- a/packages/design/src/FormManager/FormEdit/components/CheckboxGroupPatternEdit/index.tsx +++ b/packages/design/src/FormManager/FormEdit/components/CheckboxGroupPatternEdit/CheckboxGroupPatternEdit.tsx @@ -2,12 +2,12 @@ import classnames from 'classnames'; import React from 'react'; import { UniqueIdentifier } from '@dnd-kit/core'; -import { DraggableList } from '../PreviewSequencePattern/DraggableList.js'; +import { DraggableList } from '../DraggableList/DraggableList.js'; import { type CheckboxGroupProps } from '@gsa-tts/forms-core'; import { type CheckboxGroupPattern } from '@gsa-tts/forms-core'; -import CheckboxGroup from '../../../../Form/components/CheckboxGroup/index.js'; +import CheckboxGroup from '../../../../Form/components/CheckboxGroup/CheckboxGroup.js'; import { PatternEditComponent } from '../../types.js'; import { PatternEditActions } from '../common/PatternEditActions.js'; diff --git a/packages/design/src/FormManager/FormEdit/components/CheckboxPatternEdit/CheckboxPatternEdit.stories.tsx b/packages/design/src/FormManager/FormEdit/components/CheckboxPatternEdit/CheckboxPatternEdit.stories.tsx index 84c40e44f..dcddd9488 100644 --- a/packages/design/src/FormManager/FormEdit/components/CheckboxPatternEdit/CheckboxPatternEdit.stories.tsx +++ b/packages/design/src/FormManager/FormEdit/components/CheckboxPatternEdit/CheckboxPatternEdit.stories.tsx @@ -2,7 +2,7 @@ import type { Meta, StoryObj } from '@storybook/react'; import { type CheckboxPattern } from '@gsa-tts/forms-core'; -import CheckboxPatternEdit from './index.js'; +import CheckboxPatternEdit from './CheckboxPatternEdit.js'; import { createPatternEditStoryMeta, testEmptyFormLabelError, diff --git a/packages/design/src/FormManager/FormEdit/components/CheckboxPatternEdit/index.tsx b/packages/design/src/FormManager/FormEdit/components/CheckboxPatternEdit/CheckboxPatternEdit.tsx similarity index 97% rename from packages/design/src/FormManager/FormEdit/components/CheckboxPatternEdit/index.tsx rename to packages/design/src/FormManager/FormEdit/components/CheckboxPatternEdit/CheckboxPatternEdit.tsx index c5a41be93..8039d6e9a 100644 --- a/packages/design/src/FormManager/FormEdit/components/CheckboxPatternEdit/index.tsx +++ b/packages/design/src/FormManager/FormEdit/components/CheckboxPatternEdit/CheckboxPatternEdit.tsx @@ -5,7 +5,7 @@ import { enLocale as message } from '@gsa-tts/forms-common'; import { type CheckboxProps } from '@gsa-tts/forms-core'; import { type CheckboxPattern } from '@gsa-tts/forms-core'; -import Checkbox from '../../../../Form/components/Checkbox/index.js'; +import Checkbox from '../../../../Form/components/Checkbox/Checkbox.js'; import { PatternEditComponent } from '../../types.js'; import { PatternEditActions } from '../common/PatternEditActions.js'; diff --git a/packages/design/src/FormManager/FormEdit/components/DatePatternEdit/index.tsx b/packages/design/src/FormManager/FormEdit/components/DatePatternEdit/DatePatternEdit.tsx similarity index 98% rename from packages/design/src/FormManager/FormEdit/components/DatePatternEdit/index.tsx rename to packages/design/src/FormManager/FormEdit/components/DatePatternEdit/DatePatternEdit.tsx index 692d2bc1c..72168ac92 100644 --- a/packages/design/src/FormManager/FormEdit/components/DatePatternEdit/index.tsx +++ b/packages/design/src/FormManager/FormEdit/components/DatePatternEdit/DatePatternEdit.tsx @@ -5,7 +5,7 @@ import { type DateProps } from '@gsa-tts/forms-core'; import { type DateOfBirthPattern } from '@gsa-tts/forms-core'; import { type DatePickerPattern } from '@gsa-tts/forms-core'; -import Date from '../../../../Form/components/Date/index.js'; +import Date from '../../../../Form/components/Date/Date.js'; import { PatternEditComponent } from '../../types.js'; import { PatternEditActions } from '../common/PatternEditActions.js'; diff --git a/packages/design/src/FormManager/FormEdit/components/DraggableList.stories.tsx b/packages/design/src/FormManager/FormEdit/components/DraggableList/DraggableList.stories.tsx similarity index 95% rename from packages/design/src/FormManager/FormEdit/components/DraggableList.stories.tsx rename to packages/design/src/FormManager/FormEdit/components/DraggableList/DraggableList.stories.tsx index 7914a463e..64ed1242e 100644 --- a/packages/design/src/FormManager/FormEdit/components/DraggableList.stories.tsx +++ b/packages/design/src/FormManager/FormEdit/components/DraggableList/DraggableList.stories.tsx @@ -2,18 +2,18 @@ import React from 'react'; import { MemoryRouter } from 'react-router-dom'; import type { Meta, StoryObj } from '@storybook/react'; -import { FormManagerProvider, useFormManagerStore } from '../../store.js'; +import { FormManagerProvider, useFormManagerStore } from '../../../store.js'; import { createTestFormManagerContext, createTestSession, createPatternTestForm, -} from '../../../test-form.js'; +} from '../../../../test-form.js'; import { DraggableList, DraggableListProps, DraggableListPresentation, -} from './PreviewSequencePattern/DraggableList.js'; +} from './DraggableList.js'; import { getPattern } from '@gsa-tts/forms-core'; const meta: Meta = { diff --git a/packages/design/src/FormManager/FormEdit/components/PreviewSequencePattern/DraggableList.tsx b/packages/design/src/FormManager/FormEdit/components/DraggableList/DraggableList.tsx similarity index 100% rename from packages/design/src/FormManager/FormEdit/components/PreviewSequencePattern/DraggableList.tsx rename to packages/design/src/FormManager/FormEdit/components/DraggableList/DraggableList.tsx diff --git a/packages/design/src/FormManager/FormEdit/components/EmailInputPatternEdit/index.tsx b/packages/design/src/FormManager/FormEdit/components/EmailInputPatternEdit/EmailInputPatternEdit.tsx similarity index 98% rename from packages/design/src/FormManager/FormEdit/components/EmailInputPatternEdit/index.tsx rename to packages/design/src/FormManager/FormEdit/components/EmailInputPatternEdit/EmailInputPatternEdit.tsx index 6e32ceccf..c8f0b9c3c 100644 --- a/packages/design/src/FormManager/FormEdit/components/EmailInputPatternEdit/index.tsx +++ b/packages/design/src/FormManager/FormEdit/components/EmailInputPatternEdit/EmailInputPatternEdit.tsx @@ -4,7 +4,7 @@ import React from 'react'; import { type EmailInputProps } from '@gsa-tts/forms-core'; import { type EmailInputPattern } from '@gsa-tts/forms-core'; -import EmailInput from '../../../../Form/components/EmailInput/index.js'; +import EmailInput from '../../../../Form/components/EmailInput/EmailInput.js'; import { PatternEditComponent } from '../../types.js'; import { PatternEditActions } from '../common/PatternEditActions.js'; diff --git a/packages/design/src/FormManager/FormEdit/components/FieldsetEdit/index.tsx b/packages/design/src/FormManager/FormEdit/components/FieldsetEdit/FieldsetEdit.tsx similarity index 97% rename from packages/design/src/FormManager/FormEdit/components/FieldsetEdit/index.tsx rename to packages/design/src/FormManager/FormEdit/components/FieldsetEdit/FieldsetEdit.tsx index 8c7d74361..09d82a279 100644 --- a/packages/design/src/FormManager/FormEdit/components/FieldsetEdit/index.tsx +++ b/packages/design/src/FormManager/FormEdit/components/FieldsetEdit/FieldsetEdit.tsx @@ -17,9 +17,9 @@ import { PatternEditForm } from '../common/PatternEditForm.js'; import { usePatternEditFormContext } from '../common/hooks.js'; import { enLocale as message } from '@gsa-tts/forms-common'; import styles from '../../formEditStyles.module.css'; -import { FormManagerContext } from '../../../../index.js'; -import { PatternComponent } from '../../../../Form/index.js'; -import Fieldset from '../../../../Form/components/Fieldset/index.js'; +import { type FormManagerContext } from '../../../types.js'; +import { type PatternComponent } from '../../../../Form/types.js'; +import Fieldset from '../../../../Form/components/Fieldset/Fieldset.js'; import { renderEditPromptComponents } from '../../../manager-common.js'; const FieldsetEdit: PatternEditComponent = ({ diff --git a/packages/design/src/FormManager/FormEdit/components/FormSummaryEdit.tsx b/packages/design/src/FormManager/FormEdit/components/FormSummaryEdit.tsx index f34d2283b..65b7adea5 100644 --- a/packages/design/src/FormManager/FormEdit/components/FormSummaryEdit.tsx +++ b/packages/design/src/FormManager/FormEdit/components/FormSummaryEdit.tsx @@ -5,7 +5,7 @@ import { type FormSummaryProps } from '@gsa-tts/forms-core'; import { type Pattern } from '@gsa-tts/forms-core'; import { type FormSummaryPattern } from '@gsa-tts/forms-core'; -import FormSummary from '../../../Form/components/FormSummary/index.js'; +import FormSummary from '../../../Form/components/FormSummary/FormSummary.js'; import { PatternEditComponent } from '../types.js'; import { PatternEditActions } from './common/PatternEditActions.js'; diff --git a/packages/design/src/FormManager/FormEdit/components/GenderIdPatternEdit/index.tsx b/packages/design/src/FormManager/FormEdit/components/GenderIdPatternEdit/GenderIdPatternEdit.tsx similarity index 98% rename from packages/design/src/FormManager/FormEdit/components/GenderIdPatternEdit/index.tsx rename to packages/design/src/FormManager/FormEdit/components/GenderIdPatternEdit/GenderIdPatternEdit.tsx index 86f9bef2a..5ff8fde0f 100644 --- a/packages/design/src/FormManager/FormEdit/components/GenderIdPatternEdit/index.tsx +++ b/packages/design/src/FormManager/FormEdit/components/GenderIdPatternEdit/GenderIdPatternEdit.tsx @@ -4,7 +4,7 @@ import React from 'react'; import { type GenderIdProps } from '@gsa-tts/forms-core'; import { type GenderIdPattern } from '@gsa-tts/forms-core'; -import GenderId from '../../../../Form/components/GenderId/index.js'; +import GenderId from '../../../../Form/components/GenderId/GenderId.js'; import { PatternEditComponent } from '../../types.js'; import { PatternEditActions } from '../common/PatternEditActions.js'; diff --git a/packages/design/src/FormManager/FormEdit/components/InputPatternEdit/index.tsx b/packages/design/src/FormManager/FormEdit/components/InputPatternEdit/InputPatternEdit.tsx similarity index 98% rename from packages/design/src/FormManager/FormEdit/components/InputPatternEdit/index.tsx rename to packages/design/src/FormManager/FormEdit/components/InputPatternEdit/InputPatternEdit.tsx index fcde783e6..0af349e54 100644 --- a/packages/design/src/FormManager/FormEdit/components/InputPatternEdit/index.tsx +++ b/packages/design/src/FormManager/FormEdit/components/InputPatternEdit/InputPatternEdit.tsx @@ -4,7 +4,7 @@ import React from 'react'; import { PatternId, TextInputProps } from '@gsa-tts/forms-core'; import { InputPattern } from '@gsa-tts/forms-core'; -import TextInput from '../../../../Form/components/TextInput/index.js'; +import TextInput from '../../../../Form/components/TextInput/TextInput.js'; import { useFormManagerStore } from '../../../store.js'; import { PatternEditComponent } from '../../types.js'; diff --git a/packages/design/src/FormManager/FormEdit/components/NamePatternEdit/index.tsx b/packages/design/src/FormManager/FormEdit/components/NamePatternEdit/NamePatternEdit.tsx similarity index 98% rename from packages/design/src/FormManager/FormEdit/components/NamePatternEdit/index.tsx rename to packages/design/src/FormManager/FormEdit/components/NamePatternEdit/NamePatternEdit.tsx index 5eeb16cb7..c0515de4d 100644 --- a/packages/design/src/FormManager/FormEdit/components/NamePatternEdit/index.tsx +++ b/packages/design/src/FormManager/FormEdit/components/NamePatternEdit/NamePatternEdit.tsx @@ -5,7 +5,7 @@ import { type NameProps } from '@gsa-tts/forms-core'; import { type NamePattern } from '@gsa-tts/forms-core'; import { PatternEditComponent } from '../../types.js'; -import Name from '../../../../Form/components/Name/index.js'; +import Name from '../../../../Form/components/Name/Name.js'; import { PatternEditActions } from '../common/PatternEditActions.js'; import { PatternEditForm } from '../common/PatternEditForm.js'; diff --git a/packages/design/src/FormManager/FormEdit/components/PackageDownloadPatternEdit.tsx b/packages/design/src/FormManager/FormEdit/components/PackageDownloadPatternEdit.tsx index 8b4dc737b..3a1a0aab0 100644 --- a/packages/design/src/FormManager/FormEdit/components/PackageDownloadPatternEdit.tsx +++ b/packages/design/src/FormManager/FormEdit/components/PackageDownloadPatternEdit.tsx @@ -8,7 +8,7 @@ import { type PatternId, } from '@gsa-tts/forms-core'; -import PackageDownload from '../../../Form/components/PackageDownload/index.js'; +import PackageDownload from '../../../Form/components/PackageDownload/PackageDownload.js'; import { PatternEditComponent } from '../types.js'; import { PatternEditActions } from './common/PatternEditActions.js'; diff --git a/packages/design/src/FormManager/FormEdit/components/PageEdit.tsx b/packages/design/src/FormManager/FormEdit/components/PageEdit.tsx index a9efe1c7c..5a560016a 100644 --- a/packages/design/src/FormManager/FormEdit/components/PageEdit.tsx +++ b/packages/design/src/FormManager/FormEdit/components/PageEdit.tsx @@ -11,7 +11,7 @@ import { PatternEditComponent } from '../types.js'; import { PatternEditActions } from './common/PatternEditActions.js'; import { PatternEditForm } from './common/PatternEditForm.js'; import { usePatternEditFormContext } from './common/hooks.js'; -import { PatternPreviewSequence } from './PreviewSequencePattern/index.js'; +import { PatternPreviewSequence } from './PreviewSequencePattern/PreviewSequencePattern.js'; import styles from '../formEditStyles.module.css'; export const PageEdit: PatternEditComponent = props => { diff --git a/packages/design/src/FormManager/FormEdit/components/PageSetEdit/PageSetEdit.stories.tsx b/packages/design/src/FormManager/FormEdit/components/PageSetEdit/PageSetEdit.stories.tsx index 8e322a07f..8f8b9c811 100644 --- a/packages/design/src/FormManager/FormEdit/components/PageSetEdit/PageSetEdit.stories.tsx +++ b/packages/design/src/FormManager/FormEdit/components/PageSetEdit/PageSetEdit.stories.tsx @@ -5,7 +5,7 @@ import { createPatternEditStoryMeta, testUpdateFormFieldOnSubmitByElement, } from '../common/story-helper.js'; -import PageSetEdit from './index.js'; +import PageSetEdit from './PageSetEdit.js'; import { createPatternTestForm } from '../../../../test-form.js'; const blueprint = createPatternTestForm({ diff --git a/packages/design/src/FormManager/FormEdit/components/PageSetEdit/index.tsx b/packages/design/src/FormManager/FormEdit/components/PageSetEdit/PageSetEdit.tsx similarity index 97% rename from packages/design/src/FormManager/FormEdit/components/PageSetEdit/index.tsx rename to packages/design/src/FormManager/FormEdit/components/PageSetEdit/PageSetEdit.tsx index 9e6d0ac48..fec082563 100644 --- a/packages/design/src/FormManager/FormEdit/components/PageSetEdit/index.tsx +++ b/packages/design/src/FormManager/FormEdit/components/PageSetEdit/PageSetEdit.tsx @@ -7,7 +7,7 @@ import { PatternEditComponent } from '../../types.js'; import ActionBar from '../../../../Form/ActionBar/index.js'; import classNames from 'classnames'; import styles from '../../../../Form/components/PageSet/PageMenu/pageMenuStyles.module.css'; -import { DraggableList } from '../PreviewSequencePattern/DraggableList.js'; +import { DraggableList } from '../DraggableList/DraggableList.js'; import { useFormManagerStore } from '../../../store.js'; import { useSearchParams } from 'react-router-dom'; import { UniqueIdentifier } from '@dnd-kit/core'; diff --git a/packages/design/src/FormManager/FormEdit/components/ParagraphPatternEdit/index.tsx b/packages/design/src/FormManager/FormEdit/components/ParagraphPatternEdit/ParagraphPatternEdit.tsx similarity index 96% rename from packages/design/src/FormManager/FormEdit/components/ParagraphPatternEdit/index.tsx rename to packages/design/src/FormManager/FormEdit/components/ParagraphPatternEdit/ParagraphPatternEdit.tsx index bc241eef5..db73251de 100644 --- a/packages/design/src/FormManager/FormEdit/components/ParagraphPatternEdit/index.tsx +++ b/packages/design/src/FormManager/FormEdit/components/ParagraphPatternEdit/ParagraphPatternEdit.tsx @@ -5,7 +5,7 @@ import { enLocale as message } from '@gsa-tts/forms-common'; import { PatternId, type ParagraphProps } from '@gsa-tts/forms-core'; import { type ParagraphPattern } from '@gsa-tts/forms-core'; -import Paragraph from '../../../../Form/components/Paragraph/index.js'; +import Paragraph from '../../../../Form/components/Paragraph/Paragraph.js'; import { PatternEditComponent } from '../../types.js'; import { PatternEditActions } from '../common/PatternEditActions.js'; diff --git a/packages/design/src/FormManager/FormEdit/components/PhoneNumberPatternEdit/index.tsx b/packages/design/src/FormManager/FormEdit/components/PhoneNumberPatternEdit/PhoneNumberPatternEdit.tsx similarity index 99% rename from packages/design/src/FormManager/FormEdit/components/PhoneNumberPatternEdit/index.tsx rename to packages/design/src/FormManager/FormEdit/components/PhoneNumberPatternEdit/PhoneNumberPatternEdit.tsx index 0f1657320..85ed5423d 100644 --- a/packages/design/src/FormManager/FormEdit/components/PhoneNumberPatternEdit/index.tsx +++ b/packages/design/src/FormManager/FormEdit/components/PhoneNumberPatternEdit/PhoneNumberPatternEdit.tsx @@ -4,7 +4,7 @@ import React from 'react'; import { type PhoneNumberProps } from '@gsa-tts/forms-core'; import { type PhoneNumberPattern } from '@gsa-tts/forms-core'; -import PhoneNumber from '../../../../Form/components/PhoneNumber/index.js'; +import PhoneNumber from '../../../../Form/components/PhoneNumber/PhoneNumber.js'; import { PatternEditComponent } from '../../types.js'; import { PatternEditActions } from '../common/PatternEditActions.js'; diff --git a/packages/design/src/FormManager/FormEdit/components/PreviewSequencePattern/index.tsx b/packages/design/src/FormManager/FormEdit/components/PreviewSequencePattern/PreviewSequencePattern.tsx similarity index 96% rename from packages/design/src/FormManager/FormEdit/components/PreviewSequencePattern/index.tsx rename to packages/design/src/FormManager/FormEdit/components/PreviewSequencePattern/PreviewSequencePattern.tsx index a9ae14aab..bba4388f3 100644 --- a/packages/design/src/FormManager/FormEdit/components/PreviewSequencePattern/index.tsx +++ b/packages/design/src/FormManager/FormEdit/components/PreviewSequencePattern/PreviewSequencePattern.tsx @@ -2,7 +2,7 @@ import React from 'react'; import { type SequenceProps, getPattern } from '@gsa-tts/forms-core'; -import { DraggableList } from './DraggableList.js'; +import { DraggableList } from '../DraggableList/DraggableList.js'; import { useFormManagerStore } from '../../../store.js'; import { PatternEditComponent } from '../../types.js'; import { renderEditPromptComponents } from '../../../manager-common.js'; diff --git a/packages/design/src/FormManager/FormEdit/components/RadioGroupPatternEdit/RadioGroupPatternEdit.stories.tsx b/packages/design/src/FormManager/FormEdit/components/RadioGroupPatternEdit/RadioGroupPatternEdit.stories.tsx index 5122fc7da..751def80e 100644 --- a/packages/design/src/FormManager/FormEdit/components/RadioGroupPatternEdit/RadioGroupPatternEdit.stories.tsx +++ b/packages/design/src/FormManager/FormEdit/components/RadioGroupPatternEdit/RadioGroupPatternEdit.stories.tsx @@ -4,7 +4,7 @@ import { type RadioGroupPattern } from '@gsa-tts/forms-core'; import { createPatternEditStoryMeta } from '../common/story-helper.js'; import FormEdit from '../../index.js'; -import CheckboxPatternEdit from '../CheckboxPatternEdit/index.js'; +import CheckboxPatternEdit from '../CheckboxPatternEdit/CheckboxPatternEdit.js'; import { enLocale as message } from '@gsa-tts/forms-common'; import { expect, userEvent } from '@storybook/test'; import { within } from '@testing-library/react'; diff --git a/packages/design/src/FormManager/FormEdit/components/RadioGroupPatternEdit/index.tsx b/packages/design/src/FormManager/FormEdit/components/RadioGroupPatternEdit/RadioGroupPatternEdit.tsx similarity index 97% rename from packages/design/src/FormManager/FormEdit/components/RadioGroupPatternEdit/index.tsx rename to packages/design/src/FormManager/FormEdit/components/RadioGroupPatternEdit/RadioGroupPatternEdit.tsx index 112191f55..25594f45c 100644 --- a/packages/design/src/FormManager/FormEdit/components/RadioGroupPatternEdit/index.tsx +++ b/packages/design/src/FormManager/FormEdit/components/RadioGroupPatternEdit/RadioGroupPatternEdit.tsx @@ -2,11 +2,11 @@ import classnames from 'classnames'; import React from 'react'; import { UniqueIdentifier } from '@dnd-kit/core'; -import { DraggableList } from '../PreviewSequencePattern/DraggableList.js'; +import { DraggableList } from '../DraggableList/DraggableList.js'; import { type RadioGroupProps } from '@gsa-tts/forms-core'; import { type RadioGroupPattern } from '@gsa-tts/forms-core'; -import RadioGroup from '../../../../Form/components/RadioGroup/index.js'; +import RadioGroup from '../../../../Form/components/RadioGroup/RadioGroup.js'; import { PatternEditComponent } from '../../types.js'; import { PatternEditActions } from '../common/PatternEditActions.js'; diff --git a/packages/design/src/FormManager/FormEdit/components/RepeaterPatternEdit.stories.tsx b/packages/design/src/FormManager/FormEdit/components/RepeaterPatternEdit/RepeaterPatternEdit.stories.tsx similarity index 97% rename from packages/design/src/FormManager/FormEdit/components/RepeaterPatternEdit.stories.tsx rename to packages/design/src/FormManager/FormEdit/components/RepeaterPatternEdit/RepeaterPatternEdit.stories.tsx index 9c3c2cb78..7088899d4 100644 --- a/packages/design/src/FormManager/FormEdit/components/RepeaterPatternEdit.stories.tsx +++ b/packages/design/src/FormManager/FormEdit/components/RepeaterPatternEdit/RepeaterPatternEdit.stories.tsx @@ -9,8 +9,8 @@ import { createPatternEditStoryMeta, testEmptyFormLabelErrorByElement, testUpdateFormFieldOnSubmitByElement, -} from './common/story-helper.js'; -import FormEdit from '../index.js'; +} from '../common/story-helper.js'; +import FormEdit from '../../index.js'; const pattern: RepeaterPattern = { id: '1', diff --git a/packages/design/src/FormManager/FormEdit/components/RepeaterPatternEdit.tsx b/packages/design/src/FormManager/FormEdit/components/RepeaterPatternEdit/RepeaterPatternEdit.tsx similarity index 92% rename from packages/design/src/FormManager/FormEdit/components/RepeaterPatternEdit.tsx rename to packages/design/src/FormManager/FormEdit/components/RepeaterPatternEdit/RepeaterPatternEdit.tsx index 77a1e07ad..617b3dabc 100644 --- a/packages/design/src/FormManager/FormEdit/components/RepeaterPatternEdit.tsx +++ b/packages/design/src/FormManager/FormEdit/components/RepeaterPatternEdit/RepeaterPatternEdit.tsx @@ -8,20 +8,20 @@ import { CompoundAddPatternButton, CompoundAddNewPatternButton, AddInformationOrInstructionsButton, -} from '../AddPatternDropdown.js'; -import { PatternComponent } from '../../../Form/index.js'; -import Repeater from '../../../Form/components/Repeater/index.js'; -import { useFormManagerStore } from '../../store.js'; -import { PatternEditComponent } from '../types.js'; +} from '../../AddPatternDropdown.js'; +import { PatternComponent } from '../../../../Form/types.js'; +import Repeater from '../../../../Form/components/Repeater/Repeater.js'; +import { useFormManagerStore } from '../../../store.js'; +import { PatternEditComponent } from '../../types.js'; -import { PatternEditActions } from './common/PatternEditActions.js'; -import { PatternEditForm } from './common/PatternEditForm.js'; -import { usePatternEditFormContext } from './common/hooks.js'; +import { PatternEditActions } from '../common/PatternEditActions.js'; +import { PatternEditForm } from '../common/PatternEditForm.js'; +import { usePatternEditFormContext } from '../common/hooks.js'; import { enLocale as message } from '@gsa-tts/forms-common'; -import styles from '../formEditStyles.module.css'; -import { renderEditPromptComponents } from '../../manager-common.js'; -import type { FormManagerContext } from '../../index.js'; +import styles from '../../formEditStyles.module.css'; +import { renderEditPromptComponents } from '../../../manager-common.js'; +import type { FormManagerContext } from '../../../types.js'; const RepeaterEdit: PatternEditComponent = ({ context, diff --git a/packages/design/src/FormManager/FormEdit/components/RichTextPatternEdit/index.tsx b/packages/design/src/FormManager/FormEdit/components/RichTextPatternEdit/RichTextPatternEdit.tsx similarity index 99% rename from packages/design/src/FormManager/FormEdit/components/RichTextPatternEdit/index.tsx rename to packages/design/src/FormManager/FormEdit/components/RichTextPatternEdit/RichTextPatternEdit.tsx index 9c7cadaa3..3d41de3a5 100644 --- a/packages/design/src/FormManager/FormEdit/components/RichTextPatternEdit/index.tsx +++ b/packages/design/src/FormManager/FormEdit/components/RichTextPatternEdit/RichTextPatternEdit.tsx @@ -12,7 +12,7 @@ import { type RichTextProps, } from '@gsa-tts/forms-core'; -import RichText from '../../../../Form/components/RichText/index.js'; +import RichText from '../../../../Form/components/RichText/RichText.js'; import { PatternEditActions } from '../common/PatternEditActions.js'; import { PatternEditForm } from '../common/PatternEditForm.js'; import { usePatternEditFormContext } from '../common/hooks.js'; diff --git a/packages/design/src/FormManager/FormEdit/components/SelectDropdownPatternEdit/index.tsx b/packages/design/src/FormManager/FormEdit/components/SelectDropdownPatternEdit/SelectDropdownPatternEdit.tsx similarity index 98% rename from packages/design/src/FormManager/FormEdit/components/SelectDropdownPatternEdit/index.tsx rename to packages/design/src/FormManager/FormEdit/components/SelectDropdownPatternEdit/SelectDropdownPatternEdit.tsx index 3d5d4a60b..014ed67b9 100644 --- a/packages/design/src/FormManager/FormEdit/components/SelectDropdownPatternEdit/index.tsx +++ b/packages/design/src/FormManager/FormEdit/components/SelectDropdownPatternEdit/SelectDropdownPatternEdit.tsx @@ -2,12 +2,12 @@ import classnames from 'classnames'; import React from 'react'; import { UniqueIdentifier } from '@dnd-kit/core'; -import { DraggableList } from '../PreviewSequencePattern/DraggableList.js'; +import { DraggableList } from '../DraggableList/DraggableList.js'; import { type SelectDropdownProps } from '@gsa-tts/forms-core'; import { type SelectDropdownPattern } from '@gsa-tts/forms-core'; -import SelectDropdown from '../../../../Form/components/SelectDropdown/index.js'; +import SelectDropdown from '../../../../Form/components/SelectDropdown/SelectDropdown.js'; import { PatternEditComponent } from '../../types.js'; import { PatternEditActions } from '../common/PatternEditActions.js'; diff --git a/packages/design/src/FormManager/FormEdit/components/SexPatternEdit/index.tsx b/packages/design/src/FormManager/FormEdit/components/SexPatternEdit/SexPatternEdit.tsx similarity index 98% rename from packages/design/src/FormManager/FormEdit/components/SexPatternEdit/index.tsx rename to packages/design/src/FormManager/FormEdit/components/SexPatternEdit/SexPatternEdit.tsx index 03e91e2dc..47760c55c 100644 --- a/packages/design/src/FormManager/FormEdit/components/SexPatternEdit/index.tsx +++ b/packages/design/src/FormManager/FormEdit/components/SexPatternEdit/SexPatternEdit.tsx @@ -3,7 +3,7 @@ import React from 'react'; import { type SexProps, type SexPattern } from '@gsa-tts/forms-core'; -import Sex from '../../../../Form/components/Sex/index.js'; +import Sex from '../../../../Form/components/Sex/Sex.js'; import { PatternEditComponent } from '../../types.js'; import { PatternEditActions } from '../common/PatternEditActions.js'; diff --git a/packages/design/src/FormManager/FormEdit/components/SocialSecurityNumberPatternEdit/index.tsx b/packages/design/src/FormManager/FormEdit/components/SocialSecurityNumberPatternEdit/SocialSecurityNumberPatternEdit.tsx similarity index 98% rename from packages/design/src/FormManager/FormEdit/components/SocialSecurityNumberPatternEdit/index.tsx rename to packages/design/src/FormManager/FormEdit/components/SocialSecurityNumberPatternEdit/SocialSecurityNumberPatternEdit.tsx index b0e94cc53..fbfbfe09e 100644 --- a/packages/design/src/FormManager/FormEdit/components/SocialSecurityNumberPatternEdit/index.tsx +++ b/packages/design/src/FormManager/FormEdit/components/SocialSecurityNumberPatternEdit/SocialSecurityNumberPatternEdit.tsx @@ -4,7 +4,7 @@ import React from 'react'; import { type SocialSecurityNumberProps } from '@gsa-tts/forms-core'; import { type SocialSecurityNumberPattern } from '@gsa-tts/forms-core'; -import SocialSecurityNumber from '../../../../Form/components/SocialSecurityNumber/index.js'; +import SocialSecurityNumber from '../../../../Form/components/SocialSecurityNumber/SocialSecurityNumber.js'; import { PatternEditComponent } from '../../types.js'; import { PatternEditActions } from '../common/PatternEditActions.js'; diff --git a/packages/design/src/FormManager/FormEdit/components/SubmissionConfirmationEdit.tsx b/packages/design/src/FormManager/FormEdit/components/SubmissionConfirmationEdit.tsx index 60d9e51a9..d330312e2 100644 --- a/packages/design/src/FormManager/FormEdit/components/SubmissionConfirmationEdit.tsx +++ b/packages/design/src/FormManager/FormEdit/components/SubmissionConfirmationEdit.tsx @@ -5,7 +5,7 @@ import { SubmissionConfirmationProps, } from '@gsa-tts/forms-core'; -import SubmissionConfirmation from '../../../Form/components/SubmissionConfirmation/index.js'; +import SubmissionConfirmation from '../../../Form/components/SubmissionConfirmation/SubmissionConfirmation.js'; import { PatternEditComponent } from '../types.js'; import { PatternEditForm } from './common/PatternEditForm.js'; diff --git a/packages/design/src/FormManager/FormEdit/components/TextAreaPatternEdit/index.tsx b/packages/design/src/FormManager/FormEdit/components/TextAreaPatternEdit/SocialSecurityNumberPatternEdit.tsx similarity index 98% rename from packages/design/src/FormManager/FormEdit/components/TextAreaPatternEdit/index.tsx rename to packages/design/src/FormManager/FormEdit/components/TextAreaPatternEdit/SocialSecurityNumberPatternEdit.tsx index 81257d527..0d67b4e2b 100644 --- a/packages/design/src/FormManager/FormEdit/components/TextAreaPatternEdit/index.tsx +++ b/packages/design/src/FormManager/FormEdit/components/TextAreaPatternEdit/SocialSecurityNumberPatternEdit.tsx @@ -4,7 +4,7 @@ import React from 'react'; import { PatternId, TextAreaProps } from '@gsa-tts/forms-core'; import { TextAreaPattern } from '@gsa-tts/forms-core'; -import TextArea from '../../../../Form/components/TextArea/index.js'; +import TextArea from '../../../../Form/components/TextArea/TextArea.js'; import { useFormManagerStore } from '../../../store.js'; import { PatternEditComponent } from '../../types.js'; diff --git a/packages/design/src/FormManager/FormEdit/components/common/PatternEditActions.tsx b/packages/design/src/FormManager/FormEdit/components/common/PatternEditActions.tsx index c48d668b1..e24ab46b1 100644 --- a/packages/design/src/FormManager/FormEdit/components/common/PatternEditActions.tsx +++ b/packages/design/src/FormManager/FormEdit/components/common/PatternEditActions.tsx @@ -35,8 +35,9 @@ export const PatternEditActions = ({ children }: PatternEditActionsProps) => { focusPatternType === 'repeater' || focusPatternType === 'fieldset'; const isSummary = focusPatternType === 'form-summary'; const isPagePattern = focusPatternType === 'page'; - const { copyPattern } = useFormManagerStore(state => ({ + const { copyPattern, copyPage } = useFormManagerStore(state => ({ copyPattern: state.copyPattern, + copyPage: state.copyPage, })); const pages = useFormManagerStore(state => Object.values(state.session.form.patterns).filter( @@ -67,6 +68,12 @@ export const PatternEditActions = ({ children }: PatternEditActionsProps) => { } }; + const handleCopyPage = () => { + if (focusPatternId && isPagePattern) { + copyPage(focusPatternId); + } + }; + return (
{ >
- {isForm ? ( - - ) : ( -
-
- -
- )} + ) + }