From 3826fb31c1a170abaccd8eec54b34f3d044be3d1 Mon Sep 17 00:00:00 2001 From: janithjay Date: Thu, 23 Jul 2026 18:37:43 +0530 Subject: [PATCH] fix: resolve B2B components styling and layout issues --- packages/i18n/src/models/i18n.ts | 7 ++ packages/i18n/src/translations/en-US.ts | 8 ++ .../BaseCreateOrganization.styles.ts | 44 +++++++- .../BaseCreateOrganization.tsx | 105 ++++++++++++------ .../BaseOrganizationList.styles.ts | 14 ++- .../OrganizationList/BaseOrganizationList.tsx | 24 +++- .../BaseOrganizationProfile.styles.ts | 27 ++++- .../BaseOrganizationProfile.tsx | 28 ++++- 8 files changed, 213 insertions(+), 44 deletions(-) diff --git a/packages/i18n/src/models/i18n.ts b/packages/i18n/src/models/i18n.ts index a3f8340a6..53c190230 100644 --- a/packages/i18n/src/models/i18n.ts +++ b/packages/i18n/src/models/i18n.ts @@ -56,7 +56,9 @@ export interface I18nTranslations { 'elements.fields.email.label': string; 'elements.fields.email.placeholder': string; 'elements.fields.organization.name.label': string; + 'elements.fields.organization.name.placeholder'?: string; 'elements.fields.organization.handle.label': string; + 'elements.fields.organization.handle.placeholder'?: string; 'elements.fields.organization.description.label': string; 'elements.fields.organization.select.label': string; 'elements.fields.organization.select.placeholder': string; @@ -135,7 +137,10 @@ export interface I18nTranslations { 'organization.switcher.loading.more': string; 'organization.switcher.no.organizations': string; 'organization.switcher.error.prefix': string; + 'organization.list.heading'?: string; + 'organization.list.subheading'?: string; 'organization.profile.heading': string; + 'organization.profile.subheading'?: string; 'organization.profile.loading': string; 'organization.profile.error': string; @@ -144,6 +149,8 @@ export interface I18nTranslations { /* |---------------------------------------------------------------| */ 'organization.create.heading': string; + 'organization.create.subheading'?: string; + 'organization.create.description.placeholder'?: string; 'organization.create.buttons.create_organization.text': string; 'organization.create.buttons.create_organization.loading.text': string; 'organization.create.buttons.cancel.text': string; diff --git a/packages/i18n/src/translations/en-US.ts b/packages/i18n/src/translations/en-US.ts index dd12f1a11..6bbdc63e0 100644 --- a/packages/i18n/src/translations/en-US.ts +++ b/packages/i18n/src/translations/en-US.ts @@ -59,7 +59,9 @@ const translations: I18nTranslations = { 'elements.fields.email.label': 'Email', 'elements.fields.email.placeholder': 'Enter your email', 'elements.fields.organization.name.label': 'Organization Name', + 'elements.fields.organization.name.placeholder': 'Organization Name', 'elements.fields.organization.handle.label': 'Organization Handle', + 'elements.fields.organization.handle.placeholder': 'my-organization', 'elements.fields.organization.description.label': 'Organization Description', 'elements.fields.organization.select.label': 'Select Organization', 'elements.fields.organization.select.placeholder': 'Choose an organization', @@ -139,11 +141,17 @@ const translations: I18nTranslations = { 'organization.switcher.no.organizations': 'No organizations found', 'organization.switcher.error.prefix': 'Error:', + 'organization.list.heading': 'Organizations List', + 'organization.list.subheading': 'View list of organizations.', + 'organization.profile.heading': 'Organization Profile', + 'organization.profile.subheading': 'Manage your organization details.', 'organization.profile.loading': 'Loading organization...', 'organization.profile.error': 'Failed to load organization', 'organization.create.heading': 'Create Organization', + 'organization.create.subheading': 'Set up a new organization workspace.', + 'organization.create.description.placeholder': 'Enter organization description', 'organization.create.buttons.create_organization.text': 'Create Organization', 'organization.create.buttons.create_organization.loading.text': 'Creating...', 'organization.create.buttons.cancel.text': 'Cancel', diff --git a/packages/react/src/components/presentation/CreateOrganization/BaseCreateOrganization.styles.ts b/packages/react/src/components/presentation/CreateOrganization/BaseCreateOrganization.styles.ts index 605a8f0aa..7021d0c96 100644 --- a/packages/react/src/components/presentation/CreateOrganization/BaseCreateOrganization.styles.ts +++ b/packages/react/src/components/presentation/CreateOrganization/BaseCreateOrganization.styles.ts @@ -47,6 +47,26 @@ const useStyles = (theme: Theme, colorScheme: string): Record => gap: calc(${theme.vars.spacing.unit} * 2); `; + const headerContainer: string = css` + margin-bottom: calc(${theme.vars.spacing.unit} * 3); + padding-bottom: calc(${theme.vars.spacing.unit} * 2); + border-bottom: 1px solid ${theme.vars.colors.border}; + `; + + const title: string = css` + font-size: 1.75rem; + font-weight: 700; + color: ${theme.vars.colors.text.primary}; + margin: 0 0 6px 0; + letter-spacing: -0.01em; + `; + + const subtitle: string = css` + font-size: 0.875rem; + color: ${theme.vars.colors.text.secondary}; + margin: 0; + `; + const form: string = css` display: flex; flex-direction: column; @@ -63,13 +83,27 @@ const useStyles = (theme: Theme, colorScheme: string): Record => const field: string = css` display: flex; - align-items: center; + align-items: flex-start; padding: ${theme.vars.spacing.unit} 0; - border-bottom: 1px solid ${theme.vars.colors.border}; min-height: 32px; `; + const label: string = css` + font-size: 0.875rem; + font-weight: 600; + color: ${theme.vars.colors.text.primary}; + width: 200px; + min-width: 200px; + flex-shrink: 0; + text-align: left; + padding-right: calc(${theme.vars.spacing.unit} * 2); + padding-top: calc(${theme.vars.spacing.unit} * 0.75); + white-space: nowrap; + line-height: 1.4; + `; + const fieldGroup: string = css` + flex: 1; display: flex; flex-direction: column; gap: calc(${theme.vars.spacing.unit} * 0.5); @@ -87,6 +121,8 @@ const useStyles = (theme: Theme, colorScheme: string): Record => min-height: 80px; resize: vertical; outline: none; + box-sizing: border-box; + transition: border-color 0.2s, box-shadow 0.2s; &:focus { border-color: ${theme.vars.colors.primary.main}; box-shadow: 0 0 0 2px ${theme.vars.colors.primary.main}20; @@ -153,12 +189,16 @@ const useStyles = (theme: Theme, colorScheme: string): Record => fieldGroup, form, header, + headerContainer, infoContainer, input, + label, popup, root, + subtitle, textarea, textareaError, + title, value, }; }, [ diff --git a/packages/react/src/components/presentation/CreateOrganization/BaseCreateOrganization.tsx b/packages/react/src/components/presentation/CreateOrganization/BaseCreateOrganization.tsx index c7f5d1d4c..325f806dd 100644 --- a/packages/react/src/components/presentation/CreateOrganization/BaseCreateOrganization.tsx +++ b/packages/react/src/components/presentation/CreateOrganization/BaseCreateOrganization.tsx @@ -28,6 +28,7 @@ import DialogPrimitive from '../../primitives/Dialog/Dialog'; import FormControl from '../../primitives/FormControl/FormControl'; import InputLabel from '../../primitives/InputLabel/InputLabel'; import TextField from '../../primitives/TextField/TextField'; +import Typography from '../../primitives/Typography/Typography'; const logger: ReturnType = createPackageComponentLogger( '@asgardeo/react', @@ -194,9 +195,24 @@ export const BaseCreateOrganization: FC = ({ } }; + const getTranslation = (key: string, fallback: string): string => { + const text: string = t(key); + return text && text !== key ? text : fallback; + }; + const createOrganizationContent: ReactElement = (
+ {mode !== 'popup' && ( +
+ + {getTranslation('organization.create.heading', title || 'Create organization')} + + + {getTranslation('organization.create.subheading', 'Set up a new organization workspace.')} + +
+ )}
{error && ( @@ -204,46 +220,65 @@ export const BaseCreateOrganization: FC = ({ {error} )} -
- ): void => handleNameChange(e.target.value)} - disabled={loading} - required - error={formErrors.name} - className={cx(styles['input'])} - /> -
-
- ): void => handleInputChange('handle', e.target.value)} - disabled={loading} - required - error={formErrors.handle} - helperText="This will be your organization's unique identifier. Only lowercase letters, numbers, and hyphens are allowed." - className={cx(styles['input'])} - /> + +
+ + {getTranslation('elements.fields.organization.name.label', 'Organization Name')} + +
+ ): void => handleNameChange(e.target.value)} + disabled={loading} + required + error={formErrors.name} + className={cx(styles['input'])} + /> +
-
- - {t('elements.fields.organization.description.label')} -