feat: redo settings and all org pages. (#601)

* feat: new components, deploy storybook

* refactor: simplify component field definitions and enhance button loading state

- Removed unnecessary type imports and simplified the FIELDS array definitions across multiple components in Storybook.
- Updated button component to use a loading state instead of isLoading, improving clarity and consistency in props.
- Adjusted button stories to reflect the new loading prop and enhanced the button's loading visual feedback.
- Minor CSS adjustments for better layout and styling consistency.

* chore: add field, card, password components

* feat: improve page component & update AuthUI path

* chore: update bits-ui to version 2.14.4 and all org related UI's

- Updated bits-ui dependency in pnpm-lock.yaml and package.json to version 2.14.4.
- Refactored imports for RoleBasedSecurity and UpgradeBanner components to use the new ui feature directory.
- Removed unused Course components and related files to clean up the codebase.
- Enhanced various components to improve consistency and maintainability.

* chore: move all setting buttons to the top and update auth ui styles

* chore: remove svelte-loading-spinners and replace with @cio/ui/base/spinner

- Removed all instances of svelte-loading-spinners from the project.
- Updated components to use the new Spinner from @cio/ui/base/spinner.
- Cleaned up pnpm-lock.yaml and package.json to reflect the removal of svelte-loading-spinners.
- Added new CSS animations for rocket launch effects in app.css.
- Enhanced email change flow with updated verification messages in translations.

* chore: remove supabase file upload from dashboard and move to r2

* chore: update organization API and UI components

- Added new API methods for organization plan operations and team management.
- Introduced middleware for API key authentication and organization admin checks.
- Refactored organization-related components to utilize the new API structure.
- Updated various UI components to improve consistency and maintainability.
- Enhanced error handling and validation for organization-related actions.
- Removed deprecated services and streamlined the codebase.
This commit is contained in:
Rotimi Best
2025-12-02 09:54:38 +01:00
committed by GitHub
parent 531516a8f7
commit c7854efae3
350 changed files with 13928 additions and 3895 deletions
+3
View File
@@ -10,9 +10,11 @@ export * from './forgot-password';
export * from './welcome';
export * from './verify-email';
export * from './on-password-reset';
export * from './invite-teacher';
// Import types for schema mapping (must be after exports to avoid circular dependency)
import type { forgotPasswordEmail } from './forgot-password';
import type { inviteTeacherEmail } from './invite-teacher';
import type { onPasswordResetEmail } from './on-password-reset';
import type { verifyEmailEmail } from './verify-email';
import type { welcomeEmail } from './welcome';
@@ -28,4 +30,5 @@ export type EmailSchemas = {
welcome: typeof welcomeEmail.template.schema;
verifyEmail: typeof verifyEmailEmail.template.schema;
onPasswordReset: typeof onPasswordResetEmail.template.schema;
inviteTeacher: typeof inviteTeacherEmail.template.schema;
};
@@ -0,0 +1,26 @@
import { z } from 'zod';
import { defineEmail } from '../send';
import { getDefaultTemplate } from '../templates';
export const inviteTeacherEmail = defineEmail({
id: 'inviteTeacher',
subject: 'Join us on ClassroomIO 😃',
schema: z.object({
email: z.string().email(),
orgName: z.string().min(1),
orgSiteName: z.string().min(1),
inviteLink: z.url()
}),
render: (fields) => {
const content = `
<p>Hey there,</p>
<p>You have been invited to join ${fields.orgName} on ClassroomIO 🎉🎉🎉.</p>
<div>
<a class="button" href="${fields.inviteLink}">Accept Invitation</a>
</div>
`;
return getDefaultTemplate(content);
}
});
+1 -1
View File
@@ -1,4 +1,4 @@
export const EMAIL_IDS = ['forgotPassword', 'welcome', 'verifyEmail', 'onPasswordReset'] as const;
export const EMAIL_IDS = ['forgotPassword', 'welcome', 'verifyEmail', 'onPasswordReset', 'inviteTeacher'] as const;
export const EMAIL_FROM = '"Best from ClassroomIO" <[email protected]>';
export const EMAIL_REPLY_TO = '"Best from ClassroomIO" <[email protected]>';