@thunderid/react 0.3.3 → 0.3.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/ThunderIDReactClient.d.ts +1 -5
- package/dist/ThunderIDReactClient.d.ts.map +1 -1
- package/dist/ThunderIDReactClient.js +1 -68
- package/dist/ThunderIDReactClient.js.map +1 -1
- package/dist/cjs/ThunderIDReactClient.cjs +0 -67
- package/dist/cjs/ThunderIDReactClient.cjs.map +1 -1
- package/dist/cjs/components/presentation/LanguageSwitcher/BaseLanguageSwitcher.cjs +1 -1
- package/dist/cjs/components/presentation/UserAvatar/BaseUserAvatar.cjs +57 -0
- package/dist/cjs/components/presentation/UserAvatar/BaseUserAvatar.cjs.map +1 -0
- package/dist/cjs/components/presentation/UserAvatar/UserAvatar.cjs +36 -0
- package/dist/cjs/components/presentation/UserAvatar/UserAvatar.cjs.map +1 -0
- package/dist/cjs/components/presentation/UserDropdown/BaseUserDropdown.cjs +6 -5
- package/dist/cjs/components/presentation/UserDropdown/BaseUserDropdown.cjs.map +1 -1
- package/dist/cjs/components/presentation/auth/AuthOptionFactory.cjs +3 -15
- package/dist/cjs/components/presentation/auth/AuthOptionFactory.cjs.map +1 -1
- package/dist/cjs/contexts/Theme/ThemeContext.cjs.map +1 -1
- package/dist/cjs/contexts/Theme/ThemeProvider.cjs +2 -5
- package/dist/cjs/contexts/Theme/ThemeProvider.cjs.map +1 -1
- package/dist/cjs/contexts/ThunderID/ThunderIDContext.cjs +0 -2
- package/dist/cjs/contexts/ThunderID/ThunderIDContext.cjs.map +1 -1
- package/dist/cjs/contexts/ThunderID/ThunderIDProvider.cjs +14 -90
- package/dist/cjs/contexts/ThunderID/ThunderIDProvider.cjs.map +1 -1
- package/dist/cjs/index.cjs +6 -51
- package/dist/components/presentation/LanguageSwitcher/BaseLanguageSwitcher.js +1 -1
- package/dist/components/presentation/UserAvatar/BaseUserAvatar.d.ts +50 -0
- package/dist/components/presentation/UserAvatar/BaseUserAvatar.d.ts.map +1 -0
- package/dist/components/presentation/UserAvatar/BaseUserAvatar.js +55 -0
- package/dist/components/presentation/UserAvatar/BaseUserAvatar.js.map +1 -0
- package/dist/components/presentation/UserAvatar/UserAvatar.d.ts +46 -0
- package/dist/components/presentation/UserAvatar/UserAvatar.d.ts.map +1 -0
- package/dist/components/presentation/UserAvatar/UserAvatar.js +34 -0
- package/dist/components/presentation/UserAvatar/UserAvatar.js.map +1 -0
- package/dist/components/presentation/UserDropdown/BaseUserDropdown.d.ts.map +1 -1
- package/dist/components/presentation/UserDropdown/BaseUserDropdown.js +6 -5
- package/dist/components/presentation/UserDropdown/BaseUserDropdown.js.map +1 -1
- package/dist/components/presentation/auth/AuthOptionFactory.d.ts +2 -2
- package/dist/components/presentation/auth/AuthOptionFactory.d.ts.map +1 -1
- package/dist/components/presentation/auth/AuthOptionFactory.js +3 -15
- package/dist/components/presentation/auth/AuthOptionFactory.js.map +1 -1
- package/dist/contexts/Theme/ThemeContext.d.ts +0 -12
- package/dist/contexts/Theme/ThemeContext.d.ts.map +1 -1
- package/dist/contexts/Theme/ThemeContext.js.map +1 -1
- package/dist/contexts/Theme/ThemeProvider.d.ts +0 -4
- package/dist/contexts/Theme/ThemeProvider.d.ts.map +1 -1
- package/dist/contexts/Theme/ThemeProvider.js +2 -5
- package/dist/contexts/Theme/ThemeProvider.js.map +1 -1
- package/dist/contexts/ThunderID/ThunderIDContext.d.ts +2 -3
- package/dist/contexts/ThunderID/ThunderIDContext.d.ts.map +1 -1
- package/dist/contexts/ThunderID/ThunderIDContext.js +0 -2
- package/dist/contexts/ThunderID/ThunderIDContext.js.map +1 -1
- package/dist/contexts/ThunderID/ThunderIDProvider.d.ts.map +1 -1
- package/dist/contexts/ThunderID/ThunderIDProvider.js +15 -91
- package/dist/contexts/ThunderID/ThunderIDProvider.js.map +1 -1
- package/dist/index.d.ts +4 -40
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +5 -27
- package/package.json +2 -2
- package/dist/api/createOrganization.d.ts +0 -86
- package/dist/api/createOrganization.d.ts.map +0 -1
- package/dist/api/createOrganization.js +0 -80
- package/dist/api/createOrganization.js.map +0 -1
- package/dist/api/getAllOrganizations.d.ts +0 -78
- package/dist/api/getAllOrganizations.d.ts.map +0 -1
- package/dist/api/getAllOrganizations.js +0 -71
- package/dist/api/getAllOrganizations.js.map +0 -1
- package/dist/api/getMeOrganizations.d.ts +0 -82
- package/dist/api/getMeOrganizations.d.ts.map +0 -1
- package/dist/api/getMeOrganizations.js +0 -75
- package/dist/api/getMeOrganizations.js.map +0 -1
- package/dist/api/getOrganization.d.ts +0 -74
- package/dist/api/getOrganization.d.ts.map +0 -1
- package/dist/api/getOrganization.js +0 -67
- package/dist/api/getOrganization.js.map +0 -1
- package/dist/api/getSchemas.d.ts +0 -72
- package/dist/api/getSchemas.d.ts.map +0 -1
- package/dist/api/getSchemas.js +0 -65
- package/dist/api/getSchemas.js.map +0 -1
- package/dist/api/updateOrganization.d.ts +0 -81
- package/dist/api/updateOrganization.d.ts.map +0 -1
- package/dist/api/updateOrganization.js +0 -74
- package/dist/api/updateOrganization.js.map +0 -1
- package/dist/cjs/api/createOrganization.cjs +0 -82
- package/dist/cjs/api/createOrganization.cjs.map +0 -1
- package/dist/cjs/api/getAllOrganizations.cjs +0 -73
- package/dist/cjs/api/getAllOrganizations.cjs.map +0 -1
- package/dist/cjs/api/getMeOrganizations.cjs +0 -77
- package/dist/cjs/api/getMeOrganizations.cjs.map +0 -1
- package/dist/cjs/api/getOrganization.cjs +0 -69
- package/dist/cjs/api/getOrganization.cjs.map +0 -1
- package/dist/cjs/api/getSchemas.cjs +0 -67
- package/dist/cjs/api/getSchemas.cjs.map +0 -1
- package/dist/cjs/api/updateOrganization.cjs +0 -76
- package/dist/cjs/api/updateOrganization.cjs.map +0 -1
- package/dist/cjs/components/control/OrganizationContext/OrganizationContext.cjs +0 -34
- package/dist/cjs/components/control/OrganizationContext/OrganizationContext.cjs.map +0 -1
- package/dist/cjs/components/control/OrganizationContext/OrganizationContextController.cjs +0 -58
- package/dist/cjs/components/control/OrganizationContext/OrganizationContextController.cjs.map +0 -1
- package/dist/cjs/components/presentation/CreateOrganization/BaseCreateOrganization.cjs +0 -183
- package/dist/cjs/components/presentation/CreateOrganization/BaseCreateOrganization.cjs.map +0 -1
- package/dist/cjs/components/presentation/CreateOrganization/BaseCreateOrganization.styles.cjs +0 -150
- package/dist/cjs/components/presentation/CreateOrganization/BaseCreateOrganization.styles.cjs.map +0 -1
- package/dist/cjs/components/presentation/CreateOrganization/CreateOrganization.cjs +0 -90
- package/dist/cjs/components/presentation/CreateOrganization/CreateOrganization.cjs.map +0 -1
- package/dist/cjs/components/presentation/Organization/BaseOrganization.cjs +0 -41
- package/dist/cjs/components/presentation/Organization/BaseOrganization.cjs.map +0 -1
- package/dist/cjs/components/presentation/Organization/Organization.cjs +0 -49
- package/dist/cjs/components/presentation/Organization/Organization.cjs.map +0 -1
- package/dist/cjs/components/presentation/OrganizationList/BaseOrganizationList.cjs +0 -257
- package/dist/cjs/components/presentation/OrganizationList/BaseOrganizationList.cjs.map +0 -1
- package/dist/cjs/components/presentation/OrganizationList/BaseOrganizationList.styles.cjs +0 -236
- package/dist/cjs/components/presentation/OrganizationList/BaseOrganizationList.styles.cjs.map +0 -1
- package/dist/cjs/components/presentation/OrganizationList/OrganizationList.cjs +0 -86
- package/dist/cjs/components/presentation/OrganizationList/OrganizationList.cjs.map +0 -1
- package/dist/cjs/components/presentation/OrganizationList/OrganizationList.styles.cjs +0 -75
- package/dist/cjs/components/presentation/OrganizationList/OrganizationList.styles.cjs.map +0 -1
- package/dist/cjs/components/presentation/OrganizationProfile/BaseOrganizationProfile.cjs +0 -328
- package/dist/cjs/components/presentation/OrganizationProfile/BaseOrganizationProfile.cjs.map +0 -1
- package/dist/cjs/components/presentation/OrganizationProfile/BaseOrganizationProfile.styles.cjs +0 -166
- package/dist/cjs/components/presentation/OrganizationProfile/BaseOrganizationProfile.styles.cjs.map +0 -1
- package/dist/cjs/components/presentation/OrganizationProfile/OrganizationProfile.cjs +0 -126
- package/dist/cjs/components/presentation/OrganizationProfile/OrganizationProfile.cjs.map +0 -1
- package/dist/cjs/components/presentation/OrganizationSwitcher/BaseOrganizationSwitcher.cjs +0 -288
- package/dist/cjs/components/presentation/OrganizationSwitcher/BaseOrganizationSwitcher.cjs.map +0 -1
- package/dist/cjs/components/presentation/OrganizationSwitcher/BaseOrganizationSwitcher.styles.cjs +0 -237
- package/dist/cjs/components/presentation/OrganizationSwitcher/BaseOrganizationSwitcher.styles.cjs.map +0 -1
- package/dist/cjs/components/presentation/OrganizationSwitcher/OrganizationSwitcher.cjs +0 -127
- package/dist/cjs/components/presentation/OrganizationSwitcher/OrganizationSwitcher.cjs.map +0 -1
- package/dist/cjs/components/presentation/auth/OrganizationUnitPicker/OrganizationUnitPicker.cjs +0 -183
- package/dist/cjs/components/presentation/auth/OrganizationUnitPicker/OrganizationUnitPicker.cjs.map +0 -1
- package/dist/cjs/components/presentation/auth/OrganizationUnitPicker/OrganizationUnitPicker.styles.cjs +0 -128
- package/dist/cjs/components/presentation/auth/OrganizationUnitPicker/OrganizationUnitPicker.styles.cjs.map +0 -1
- package/dist/cjs/components/primitives/Icons/Building.cjs +0 -75
- package/dist/cjs/components/primitives/Icons/Building.cjs.map +0 -1
- package/dist/cjs/contexts/Branding/BrandingContext.cjs +0 -12
- package/dist/cjs/contexts/Branding/BrandingContext.cjs.map +0 -1
- package/dist/cjs/contexts/Branding/BrandingProvider.cjs +0 -96
- package/dist/cjs/contexts/Branding/BrandingProvider.cjs.map +0 -1
- package/dist/cjs/contexts/Branding/useBrandingContext.cjs +0 -40
- package/dist/cjs/contexts/Branding/useBrandingContext.cjs.map +0 -1
- package/dist/cjs/contexts/Organization/OrganizationContext.cjs +0 -27
- package/dist/cjs/contexts/Organization/OrganizationContext.cjs.map +0 -1
- package/dist/cjs/contexts/Organization/OrganizationProvider.cjs +0 -97
- package/dist/cjs/contexts/Organization/OrganizationProvider.cjs.map +0 -1
- package/dist/cjs/contexts/Organization/useOrganization.cjs +0 -100
- package/dist/cjs/contexts/Organization/useOrganization.cjs.map +0 -1
- package/dist/cjs/hooks/useBranding.cjs +0 -71
- package/dist/cjs/hooks/useBranding.cjs.map +0 -1
- package/dist/components/control/OrganizationContext/OrganizationContext.d.ts +0 -40
- package/dist/components/control/OrganizationContext/OrganizationContext.d.ts.map +0 -1
- package/dist/components/control/OrganizationContext/OrganizationContext.js +0 -32
- package/dist/components/control/OrganizationContext/OrganizationContext.js.map +0 -1
- package/dist/components/control/OrganizationContext/OrganizationContextController.d.ts +0 -35
- package/dist/components/control/OrganizationContext/OrganizationContextController.d.ts.map +0 -1
- package/dist/components/control/OrganizationContext/OrganizationContextController.js +0 -55
- package/dist/components/control/OrganizationContext/OrganizationContextController.js.map +0 -1
- package/dist/components/presentation/CreateOrganization/BaseCreateOrganization.d.ts +0 -60
- package/dist/components/presentation/CreateOrganization/BaseCreateOrganization.d.ts.map +0 -1
- package/dist/components/presentation/CreateOrganization/BaseCreateOrganization.js +0 -178
- package/dist/components/presentation/CreateOrganization/BaseCreateOrganization.js.map +0 -1
- package/dist/components/presentation/CreateOrganization/BaseCreateOrganization.styles.d.ts +0 -27
- package/dist/components/presentation/CreateOrganization/BaseCreateOrganization.styles.d.ts.map +0 -1
- package/dist/components/presentation/CreateOrganization/BaseCreateOrganization.styles.js +0 -147
- package/dist/components/presentation/CreateOrganization/BaseCreateOrganization.styles.js.map +0 -1
- package/dist/components/presentation/CreateOrganization/CreateOrganization.d.ts +0 -68
- package/dist/components/presentation/CreateOrganization/CreateOrganization.d.ts.map +0 -1
- package/dist/components/presentation/CreateOrganization/CreateOrganization.js +0 -87
- package/dist/components/presentation/CreateOrganization/CreateOrganization.js.map +0 -1
- package/dist/components/presentation/Organization/BaseOrganization.d.ts +0 -67
- package/dist/components/presentation/Organization/BaseOrganization.d.ts.map +0 -1
- package/dist/components/presentation/Organization/BaseOrganization.js +0 -39
- package/dist/components/presentation/Organization/BaseOrganization.js.map +0 -1
- package/dist/components/presentation/Organization/Organization.d.ts +0 -67
- package/dist/components/presentation/Organization/Organization.d.ts.map +0 -1
- package/dist/components/presentation/Organization/Organization.js +0 -47
- package/dist/components/presentation/Organization/Organization.js.map +0 -1
- package/dist/components/presentation/OrganizationList/BaseOrganizationList.d.ts +0 -135
- package/dist/components/presentation/OrganizationList/BaseOrganizationList.d.ts.map +0 -1
- package/dist/components/presentation/OrganizationList/BaseOrganizationList.js +0 -252
- package/dist/components/presentation/OrganizationList/BaseOrganizationList.js.map +0 -1
- package/dist/components/presentation/OrganizationList/BaseOrganizationList.styles.d.ts +0 -27
- package/dist/components/presentation/OrganizationList/BaseOrganizationList.styles.d.ts.map +0 -1
- package/dist/components/presentation/OrganizationList/BaseOrganizationList.styles.js +0 -233
- package/dist/components/presentation/OrganizationList/BaseOrganizationList.styles.js.map +0 -1
- package/dist/components/presentation/OrganizationList/OrganizationList.d.ts +0 -93
- package/dist/components/presentation/OrganizationList/OrganizationList.d.ts.map +0 -1
- package/dist/components/presentation/OrganizationList/OrganizationList.js +0 -82
- package/dist/components/presentation/OrganizationList/OrganizationList.js.map +0 -1
- package/dist/components/presentation/OrganizationList/OrganizationList.styles.d.ts +0 -27
- package/dist/components/presentation/OrganizationList/OrganizationList.styles.d.ts.map +0 -1
- package/dist/components/presentation/OrganizationList/OrganizationList.styles.js +0 -72
- package/dist/components/presentation/OrganizationList/OrganizationList.styles.js.map +0 -1
- package/dist/components/presentation/OrganizationProfile/BaseOrganizationProfile.d.ts +0 -160
- package/dist/components/presentation/OrganizationProfile/BaseOrganizationProfile.d.ts.map +0 -1
- package/dist/components/presentation/OrganizationProfile/BaseOrganizationProfile.js +0 -323
- package/dist/components/presentation/OrganizationProfile/BaseOrganizationProfile.js.map +0 -1
- package/dist/components/presentation/OrganizationProfile/BaseOrganizationProfile.styles.d.ts +0 -27
- package/dist/components/presentation/OrganizationProfile/BaseOrganizationProfile.styles.d.ts.map +0 -1
- package/dist/components/presentation/OrganizationProfile/BaseOrganizationProfile.styles.js +0 -163
- package/dist/components/presentation/OrganizationProfile/BaseOrganizationProfile.styles.js.map +0 -1
- package/dist/components/presentation/OrganizationProfile/OrganizationProfile.d.ts +0 -120
- package/dist/components/presentation/OrganizationProfile/OrganizationProfile.d.ts.map +0 -1
- package/dist/components/presentation/OrganizationProfile/OrganizationProfile.js +0 -122
- package/dist/components/presentation/OrganizationProfile/OrganizationProfile.js.map +0 -1
- package/dist/components/presentation/OrganizationSwitcher/BaseOrganizationSwitcher.d.ts +0 -149
- package/dist/components/presentation/OrganizationSwitcher/BaseOrganizationSwitcher.d.ts.map +0 -1
- package/dist/components/presentation/OrganizationSwitcher/BaseOrganizationSwitcher.js +0 -282
- package/dist/components/presentation/OrganizationSwitcher/BaseOrganizationSwitcher.js.map +0 -1
- package/dist/components/presentation/OrganizationSwitcher/BaseOrganizationSwitcher.styles.d.ts +0 -27
- package/dist/components/presentation/OrganizationSwitcher/BaseOrganizationSwitcher.styles.d.ts.map +0 -1
- package/dist/components/presentation/OrganizationSwitcher/BaseOrganizationSwitcher.styles.js +0 -234
- package/dist/components/presentation/OrganizationSwitcher/BaseOrganizationSwitcher.styles.js.map +0 -1
- package/dist/components/presentation/OrganizationSwitcher/OrganizationSwitcher.d.ts +0 -71
- package/dist/components/presentation/OrganizationSwitcher/OrganizationSwitcher.d.ts.map +0 -1
- package/dist/components/presentation/OrganizationSwitcher/OrganizationSwitcher.js +0 -124
- package/dist/components/presentation/OrganizationSwitcher/OrganizationSwitcher.js.map +0 -1
- package/dist/components/presentation/auth/OrganizationUnitPicker/OrganizationUnitPicker.d.ts +0 -30
- package/dist/components/presentation/auth/OrganizationUnitPicker/OrganizationUnitPicker.d.ts.map +0 -1
- package/dist/components/presentation/auth/OrganizationUnitPicker/OrganizationUnitPicker.js +0 -179
- package/dist/components/presentation/auth/OrganizationUnitPicker/OrganizationUnitPicker.js.map +0 -1
- package/dist/components/presentation/auth/OrganizationUnitPicker/OrganizationUnitPicker.styles.d.ts +0 -21
- package/dist/components/presentation/auth/OrganizationUnitPicker/OrganizationUnitPicker.styles.d.ts.map +0 -1
- package/dist/components/presentation/auth/OrganizationUnitPicker/OrganizationUnitPicker.styles.js +0 -125
- package/dist/components/presentation/auth/OrganizationUnitPicker/OrganizationUnitPicker.styles.js.map +0 -1
- package/dist/components/presentation/auth/OrganizationUnitPicker/index.d.ts +0 -20
- package/dist/components/presentation/auth/OrganizationUnitPicker/index.d.ts.map +0 -1
- package/dist/components/primitives/Icons/Building.js +0 -73
- package/dist/components/primitives/Icons/Building.js.map +0 -1
- package/dist/contexts/Branding/BrandingContext.d.ts +0 -53
- package/dist/contexts/Branding/BrandingContext.d.ts.map +0 -1
- package/dist/contexts/Branding/BrandingContext.js +0 -10
- package/dist/contexts/Branding/BrandingContext.js.map +0 -1
- package/dist/contexts/Branding/BrandingProvider.d.ts +0 -89
- package/dist/contexts/Branding/BrandingProvider.d.ts.map +0 -1
- package/dist/contexts/Branding/BrandingProvider.js +0 -92
- package/dist/contexts/Branding/BrandingProvider.js.map +0 -1
- package/dist/contexts/Branding/useBrandingContext.d.ts +0 -45
- package/dist/contexts/Branding/useBrandingContext.d.ts.map +0 -1
- package/dist/contexts/Branding/useBrandingContext.js +0 -38
- package/dist/contexts/Branding/useBrandingContext.js.map +0 -1
- package/dist/contexts/Organization/OrganizationContext.d.ts +0 -41
- package/dist/contexts/Organization/OrganizationContext.d.ts.map +0 -1
- package/dist/contexts/Organization/OrganizationContext.js +0 -25
- package/dist/contexts/Organization/OrganizationContext.js.map +0 -1
- package/dist/contexts/Organization/OrganizationProvider.d.ts +0 -94
- package/dist/contexts/Organization/OrganizationProvider.d.ts.map +0 -1
- package/dist/contexts/Organization/OrganizationProvider.js +0 -93
- package/dist/contexts/Organization/OrganizationProvider.js.map +0 -1
- package/dist/contexts/Organization/useOrganization.d.ts +0 -105
- package/dist/contexts/Organization/useOrganization.d.ts.map +0 -1
- package/dist/contexts/Organization/useOrganization.js +0 -98
- package/dist/contexts/Organization/useOrganization.js.map +0 -1
- package/dist/hooks/useBranding.d.ts +0 -128
- package/dist/hooks/useBranding.d.ts.map +0 -1
- package/dist/hooks/useBranding.js +0 -69
- package/dist/hooks/useBranding.js.map +0 -1
package/dist/cjs/components/presentation/OrganizationProfile/BaseOrganizationProfile.styles.cjs.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"BaseOrganizationProfile.styles.cjs","names":[],"sources":["../../../../../src/components/presentation/OrganizationProfile/BaseOrganizationProfile.styles.ts"],"sourcesContent":["/**\n * Copyright (c) 2025, WSO2 LLC. (https://www.wso2.com).\n *\n * WSO2 LLC. licenses this file to you under the Apache License,\n * Version 2.0 (the \"License\"); you may not use this file except\n * in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing,\n * software distributed under the License is distributed on an\n * \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n * KIND, either express or implied. See the License for the\n * specific language governing permissions and limitations\n * under the License.\n */\n\nimport {css} from '@emotion/css';\nimport {Theme} from '@thunderid/browser';\nimport {useMemo} from 'react';\n\n/**\n * Creates styles for the BaseOrganizationProfile component using BEM methodology\n * @param theme - The theme object containing design tokens\n * @param colorScheme - The current color scheme (used for memoization)\n * @returns Object containing CSS class names for component styling\n */\nconst useStyles = (theme: Theme, colorScheme: string): Record<string, string> =>\n useMemo(\n () => ({\n attributeItem: css`\n display: flex;\n gap: ${theme.vars.spacing.unit};\n padding: calc(${theme.vars.spacing.unit} / 4) 0;\n align-items: center;\n `,\n attributeKey: css`\n font-size: 0.75rem;\n font-weight: 500;\n color: ${theme.vars.colors.text.secondary};\n min-width: 80px;\n flex-shrink: 0;\n `,\n attributeValue: css`\n font-size: 0.75rem;\n color: ${theme.vars.colors.text.primary};\n word-break: break-word;\n flex: 1;\n `,\n attributesList: css`\n display: flex;\n flex-direction: column;\n gap: calc(${theme.vars.spacing.unit} / 4);\n `,\n card: css`\n background: ${theme.vars.colors.background.surface};\n border-radius: ${theme.vars.borderRadius.large};\n `,\n editButton: css`\n min-width: auto;\n padding: calc(${theme.vars.spacing.unit} / 2);\n min-height: auto;\n `,\n field: css`\n display: flex;\n align-items: flex-start;\n padding: calc(${theme.vars.spacing.unit} / 2) 0;\n border-bottom: 1px solid ${theme.vars.colors.border};\n min-height: 28px;\n gap: ${theme.vars.spacing.unit};\n `,\n fieldActions: css`\n display: flex;\n align-items: center;\n gap: calc(${theme.vars.spacing.unit} / 2);\n `,\n fieldContent: css`\n flex: 1;\n display: flex;\n align-items: center;\n gap: ${theme.vars.spacing.unit};\n `,\n fieldInput: css`\n margin-bottom: 0;\n `,\n fieldLast: css`\n border-bottom: none;\n `,\n handle: css`\n font-size: 1rem;\n color: ${theme.vars.colors.text.secondary};\n margin: 0;\n font-family: monospace;\n `,\n header: css`\n display: flex;\n align-items: center;\n gap: calc(${theme.vars.spacing.unit} * 2);\n margin-bottom: calc(${theme.vars.spacing.unit} * 3);\n padding-bottom: calc(${theme.vars.spacing.unit} * 2);\n `,\n infoContainer: css`\n display: flex;\n flex-direction: column;\n gap: ${theme.vars.spacing.unit};\n `,\n label: css`\n font-size: 0.875rem;\n font-weight: 500;\n color: ${theme.vars.colors.text.secondary};\n width: 120px;\n flex-shrink: 0;\n line-height: 28px;\n `,\n name: css`\n font-size: 1.5rem;\n font-weight: 600;\n margin: 0 0 8px 0;\n color: ${theme.vars.colors.text.primary};\n `,\n orgInfo: css`\n flex: 1;\n `,\n permissionBadge: css`\n padding: calc(${theme.vars.spacing.unit} / 4) ${theme.vars.spacing.unit};\n border-radius: ${theme.vars.borderRadius.small};\n font-size: 0.75rem;\n background-color: ${theme.vars.colors.primary.main};\n color: ${theme.vars.colors.primary.contrastText};\n border: 1px solid ${theme.vars.colors.border};\n `,\n permissionsList: css`\n display: flex;\n flex-wrap: wrap;\n gap: calc(${theme.vars.spacing.unit} / 2);\n `,\n placeholderButton: css`\n font-style: italic;\n text-decoration: underline;\n opacity: 0.7;\n padding: 0;\n min-height: auto;\n `,\n popup: css`\n padding: calc(${theme.vars.spacing.unit} * 2);\n `,\n root: css`\n padding: calc(${theme.vars.spacing.unit} * 4);\n min-width: 600px;\n margin: 0 auto;\n font-family: ${theme.vars.typography.fontFamily};\n `,\n statusBadge: css`\n padding: calc(${theme.vars.spacing.unit} / 2) ${theme.vars.spacing.unit};\n border-radius: ${theme.vars.borderRadius.small};\n font-size: 0.75rem;\n font-weight: 500;\n color: white;\n text-transform: uppercase;\n letter-spacing: 0.5px;\n `,\n value: css`\n color: ${theme.vars.colors.text.primary};\n flex: 1;\n display: flex;\n align-items: center;\n gap: ${theme.vars.spacing.unit};\n overflow: hidden;\n min-height: 28px;\n line-height: 28px;\n word-break: break-word;\n `,\n valueEmpty: css`\n font-style: italic;\n opacity: 0.7;\n `,\n }),\n [theme, colorScheme],\n );\n\nexport default useStyles;\n"],"mappings":";;;;;;;;;;;;;AA4BA,MAAM,aAAa,OAAc,0CAEtB;CACL,eAAe,iBAAG;;eAET,MAAM,KAAK,QAAQ,KAAK;wBACf,MAAM,KAAK,QAAQ,KAAK;;;CAG1C,cAAc,iBAAG;;;iBAGN,MAAM,KAAK,OAAO,KAAK,UAAU;;;;CAI5C,gBAAgB,iBAAG;;iBAER,MAAM,KAAK,OAAO,KAAK,QAAQ;;;;CAI1C,gBAAgB,iBAAG;;;oBAGL,MAAM,KAAK,QAAQ,KAAK;;CAEtC,MAAM,iBAAG;sBACO,MAAM,KAAK,OAAO,WAAW,QAAQ;yBAClC,MAAM,KAAK,aAAa,MAAM;;CAEjD,YAAY,iBAAG;;wBAEG,MAAM,KAAK,QAAQ,KAAK;;;CAG1C,OAAO,iBAAG;;;wBAGQ,MAAM,KAAK,QAAQ,KAAK;mCACb,MAAM,KAAK,OAAO,OAAO;;eAE7C,MAAM,KAAK,QAAQ,KAAK;;CAEjC,cAAc,iBAAG;;;oBAGH,MAAM,KAAK,QAAQ,KAAK;;CAEtC,cAAc,iBAAG;;;;eAIR,MAAM,KAAK,QAAQ,KAAK;;CAEjC,YAAY,iBAAG;;;CAGf,WAAW,iBAAG;;;CAGd,QAAQ,iBAAG;;iBAEA,MAAM,KAAK,OAAO,KAAK,UAAU;;;;CAI5C,QAAQ,iBAAG;;;oBAGG,MAAM,KAAK,QAAQ,KAAK;8BACd,MAAM,KAAK,QAAQ,KAAK;+BACvB,MAAM,KAAK,QAAQ,KAAK;;CAEjD,eAAe,iBAAG;;;eAGT,MAAM,KAAK,QAAQ,KAAK;;CAEjC,OAAO,iBAAG;;;iBAGC,MAAM,KAAK,OAAO,KAAK,UAAU;;;;;CAK5C,MAAM,iBAAG;;;;iBAIE,MAAM,KAAK,OAAO,KAAK,QAAQ;;CAE1C,SAAS,iBAAG;;;CAGZ,iBAAiB,iBAAG;wBACF,MAAM,KAAK,QAAQ,KAAK,QAAQ,MAAM,KAAK,QAAQ,KAAK;yBACvD,MAAM,KAAK,aAAa,MAAM;;4BAE3B,MAAM,KAAK,OAAO,QAAQ,KAAK;iBAC1C,MAAM,KAAK,OAAO,QAAQ,aAAa;4BAC5B,MAAM,KAAK,OAAO,OAAO;;CAE/C,iBAAiB,iBAAG;;;oBAGN,MAAM,KAAK,QAAQ,KAAK;;CAEtC,mBAAmB,iBAAG;;;;;;;CAOtB,OAAO,iBAAG;wBACQ,MAAM,KAAK,QAAQ,KAAK;;CAE1C,MAAM,iBAAG;wBACS,MAAM,KAAK,QAAQ,KAAK;;;uBAGzB,MAAM,KAAK,WAAW,WAAW;;CAElD,aAAa,iBAAG;wBACE,MAAM,KAAK,QAAQ,KAAK,QAAQ,MAAM,KAAK,QAAQ,KAAK;yBACvD,MAAM,KAAK,aAAa,MAAM;;;;;;;CAOjD,OAAO,iBAAG;iBACC,MAAM,KAAK,OAAO,KAAK,QAAQ;;;;eAIjC,MAAM,KAAK,QAAQ,KAAK;;;;;;CAMjC,YAAY,iBAAG;;;;CAIhB,GACD,CAAC,OAAO,YAAY,CACrB;AAEH,6CAAe"}
|
|
@@ -1,126 +0,0 @@
|
|
|
1
|
-
const require_rolldown_runtime = require('../../../_virtual/rolldown_runtime.cjs');
|
|
2
|
-
const require_useThunderID = require('../../../contexts/ThunderID/useThunderID.cjs');
|
|
3
|
-
const require_useTranslation = require('../../../hooks/useTranslation.cjs');
|
|
4
|
-
const require_BaseOrganizationProfile = require('./BaseOrganizationProfile.cjs');
|
|
5
|
-
const require_getOrganization = require('../../../api/getOrganization.cjs');
|
|
6
|
-
const require_updateOrganization = require('../../../api/updateOrganization.cjs');
|
|
7
|
-
let __thunderid_browser = require("@thunderid/browser");
|
|
8
|
-
__thunderid_browser = require_rolldown_runtime.__toESM(__thunderid_browser);
|
|
9
|
-
let react = require("react");
|
|
10
|
-
react = require_rolldown_runtime.__toESM(react);
|
|
11
|
-
let react_jsx_runtime = require("react/jsx-runtime");
|
|
12
|
-
react_jsx_runtime = require_rolldown_runtime.__toESM(react_jsx_runtime);
|
|
13
|
-
|
|
14
|
-
//#region src/components/presentation/OrganizationProfile/OrganizationProfile.tsx
|
|
15
|
-
const logger = (0, __thunderid_browser.createPackageComponentLogger)("@thunderid/react", "OrganizationProfile");
|
|
16
|
-
/**
|
|
17
|
-
* OrganizationProfile component displays organization information in a
|
|
18
|
-
* structured and styled format. It automatically fetches organization details
|
|
19
|
-
* using the provided organization ID and displays them using BaseOrganizationProfile.
|
|
20
|
-
*
|
|
21
|
-
* The component supports editing functionality, allowing users to modify organization
|
|
22
|
-
* fields inline. Updates are automatically synced with the backend via the SCIM2 API.
|
|
23
|
-
*
|
|
24
|
-
* This component is the React-specific implementation that automatically
|
|
25
|
-
* retrieves the organization data from ThunderID API.
|
|
26
|
-
*
|
|
27
|
-
* @example
|
|
28
|
-
* ```tsx
|
|
29
|
-
* // Basic usage with editing enabled (default)
|
|
30
|
-
* <OrganizationProfile organizationId="0d5e071b-d3d3-475d-b3c6-1a20ee2fa9b1" />
|
|
31
|
-
*
|
|
32
|
-
* // Read-only mode
|
|
33
|
-
* <OrganizationProfile
|
|
34
|
-
* organizationId="0d5e071b-d3d3-475d-b3c6-1a20ee2fa9b1"
|
|
35
|
-
* editable={false}
|
|
36
|
-
* />
|
|
37
|
-
*
|
|
38
|
-
* // With card layout and custom fallbacks
|
|
39
|
-
* <OrganizationProfile
|
|
40
|
-
* organizationId="0d5e071b-d3d3-475d-b3c6-1a20ee2fa9b1"
|
|
41
|
-
* cardLayout={true}
|
|
42
|
-
* loadingFallback={<div>Loading organization...</div>}
|
|
43
|
-
* errorFallback={<div>Failed to load organization</div>}
|
|
44
|
-
* fallback={<div>No organization data available</div>}
|
|
45
|
-
* />
|
|
46
|
-
*
|
|
47
|
-
* // With custom fields configuration and update callback
|
|
48
|
-
* <OrganizationProfile
|
|
49
|
-
* organizationId="0d5e071b-d3d3-475d-b3c6-1a20ee2fa9b1"
|
|
50
|
-
* fields={[
|
|
51
|
-
* { key: 'id', label: 'Organization ID', editable: false },
|
|
52
|
-
* { key: 'name', label: 'Organization Name', editable: true },
|
|
53
|
-
* { key: 'description', label: 'Description', editable: true, render: (value) => value || 'No description' },
|
|
54
|
-
* { key: 'created', label: 'Created Date', editable: false, render: (value) => new Date(value).toLocaleDateString() },
|
|
55
|
-
* { key: 'lastModified', label: 'Last Modified Date', editable: false, render: (value) => new Date(value).toLocaleDateString() },
|
|
56
|
-
* { key: 'attributes', label: 'Custom Attributes', editable: true }
|
|
57
|
-
* ]}
|
|
58
|
-
* onUpdate={async (payload) => {
|
|
59
|
-
* console.log('Organization updated:', payload);
|
|
60
|
-
* // payload contains the updated field values
|
|
61
|
-
* // The component automatically converts these to patch operations
|
|
62
|
-
* }}
|
|
63
|
-
* />
|
|
64
|
-
*
|
|
65
|
-
* // In popup mode
|
|
66
|
-
* <OrganizationProfile
|
|
67
|
-
* organizationId="0d5e071b-d3d3-475d-b3c6-1a20ee2fa9b1"
|
|
68
|
-
* mode="popup"
|
|
69
|
-
* open={isOpen}
|
|
70
|
-
* onOpenChange={setIsOpen}
|
|
71
|
-
* popupTitle="Edit Organization Profile"
|
|
72
|
-
* />
|
|
73
|
-
* ```
|
|
74
|
-
*/
|
|
75
|
-
const OrganizationProfile = ({ organizationId, mode = "default", open = false, onOpenChange, onUpdate, popupTitle, loadingFallback, errorFallback, preferences,...rest }) => {
|
|
76
|
-
const { baseUrl, instanceId } = require_useThunderID.default();
|
|
77
|
-
const { t } = require_useTranslation.default(preferences?.i18n);
|
|
78
|
-
const [organization, setOrganization] = (0, react.useState)(null);
|
|
79
|
-
const fetchOrganization = async () => {
|
|
80
|
-
if (!baseUrl || !organizationId) return;
|
|
81
|
-
try {
|
|
82
|
-
setOrganization(await require_getOrganization.default({
|
|
83
|
-
baseUrl,
|
|
84
|
-
instanceId,
|
|
85
|
-
organizationId
|
|
86
|
-
}));
|
|
87
|
-
} catch (err) {
|
|
88
|
-
logger.error("Failed to fetch organization:");
|
|
89
|
-
setOrganization(null);
|
|
90
|
-
}
|
|
91
|
-
};
|
|
92
|
-
(0, react.useEffect)(() => {
|
|
93
|
-
fetchOrganization();
|
|
94
|
-
}, [baseUrl, organizationId]);
|
|
95
|
-
const handleOrganizationUpdate = async (payload) => {
|
|
96
|
-
if (!baseUrl || !organizationId) return;
|
|
97
|
-
try {
|
|
98
|
-
await require_updateOrganization.default({
|
|
99
|
-
baseUrl,
|
|
100
|
-
instanceId,
|
|
101
|
-
operations: (0, __thunderid_browser.createPatchOperations)(payload),
|
|
102
|
-
organizationId
|
|
103
|
-
});
|
|
104
|
-
await fetchOrganization();
|
|
105
|
-
if (onUpdate) await onUpdate(payload);
|
|
106
|
-
} catch (err) {
|
|
107
|
-
logger.error("Failed to update organization:");
|
|
108
|
-
throw err;
|
|
109
|
-
}
|
|
110
|
-
};
|
|
111
|
-
return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_BaseOrganizationProfile.default, {
|
|
112
|
-
organization,
|
|
113
|
-
onUpdate: handleOrganizationUpdate,
|
|
114
|
-
mode: mode === "popup" ? "popup" : "inline",
|
|
115
|
-
open,
|
|
116
|
-
onOpenChange,
|
|
117
|
-
title: popupTitle || t("organization.profile.heading"),
|
|
118
|
-
preferences,
|
|
119
|
-
...rest
|
|
120
|
-
});
|
|
121
|
-
};
|
|
122
|
-
var OrganizationProfile_default = OrganizationProfile;
|
|
123
|
-
|
|
124
|
-
//#endregion
|
|
125
|
-
exports.default = OrganizationProfile_default;
|
|
126
|
-
//# sourceMappingURL=OrganizationProfile.cjs.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"OrganizationProfile.cjs","names":["logger: ReturnType<typeof createPackageComponentLogger>","OrganizationProfile: FC<OrganizationProfileProps>","useThunderID","useTranslation","getOrganization","updateOrganization","BaseOrganizationProfile"],"sources":["../../../../../src/components/presentation/OrganizationProfile/OrganizationProfile.tsx"],"sourcesContent":["/**\n * Copyright (c) 2025, WSO2 LLC. (https://www.wso2.com).\n *\n * WSO2 LLC. licenses this file to you under the Apache License,\n * Version 2.0 (the \"License\"); you may not use this file except\n * in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing,\n * software distributed under the License is distributed on an\n * \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n * KIND, either express or implied. See the License for the\n * specific language governing permissions and limitations\n * under the License.\n */\n\nimport {OrganizationDetails, createPackageComponentLogger} from '@thunderid/browser';\nimport {FC, ReactElement, useEffect, useState} from 'react';\nimport BaseOrganizationProfile, {BaseOrganizationProfileProps} from './BaseOrganizationProfile';\nimport getOrganization from '../../../api/getOrganization';\nimport updateOrganization, {createPatchOperations} from '../../../api/updateOrganization';\nimport useThunderID from '../../../contexts/ThunderID/useThunderID';\nimport useTranslation from '../../../hooks/useTranslation';\n\nconst logger: ReturnType<typeof createPackageComponentLogger> = createPackageComponentLogger(\n '@thunderid/react',\n 'OrganizationProfile',\n);\n\n/**\n * Props for the OrganizationProfile component.\n * Extends BaseOrganizationProfileProps but makes the organization prop optional\n * since it will be fetched using the organizationId\n */\nexport type OrganizationProfileProps = Omit<BaseOrganizationProfileProps, 'organization' | 'mode'> & {\n /**\n * Component to show when there's an error loading organization data.\n */\n errorFallback?: ReactElement;\n\n /**\n * Component to show while loading organization data.\n */\n loadingFallback?: ReactElement;\n\n /**\n * Display mode for the component.\n */\n mode?: 'default' | 'popup';\n\n /**\n * Callback fired when the popup should be closed (only used in popup mode).\n */\n onOpenChange?: (open: boolean) => void;\n\n /**\n * Callback fired when the organization should be updated.\n */\n onUpdate?: (payload: any) => Promise<void>;\n\n /**\n * Whether the popup is open (only used in popup mode).\n */\n open?: boolean;\n\n /**\n * The ID of the organization to fetch and display.\n */\n organizationId: string;\n\n /**\n * Custom title for the popup dialog (only used in popup mode).\n */\n popupTitle?: string;\n};\n\n/**\n * OrganizationProfile component displays organization information in a\n * structured and styled format. It automatically fetches organization details\n * using the provided organization ID and displays them using BaseOrganizationProfile.\n *\n * The component supports editing functionality, allowing users to modify organization\n * fields inline. Updates are automatically synced with the backend via the SCIM2 API.\n *\n * This component is the React-specific implementation that automatically\n * retrieves the organization data from ThunderID API.\n *\n * @example\n * ```tsx\n * // Basic usage with editing enabled (default)\n * <OrganizationProfile organizationId=\"0d5e071b-d3d3-475d-b3c6-1a20ee2fa9b1\" />\n *\n * // Read-only mode\n * <OrganizationProfile\n * organizationId=\"0d5e071b-d3d3-475d-b3c6-1a20ee2fa9b1\"\n * editable={false}\n * />\n *\n * // With card layout and custom fallbacks\n * <OrganizationProfile\n * organizationId=\"0d5e071b-d3d3-475d-b3c6-1a20ee2fa9b1\"\n * cardLayout={true}\n * loadingFallback={<div>Loading organization...</div>}\n * errorFallback={<div>Failed to load organization</div>}\n * fallback={<div>No organization data available</div>}\n * />\n *\n * // With custom fields configuration and update callback\n * <OrganizationProfile\n * organizationId=\"0d5e071b-d3d3-475d-b3c6-1a20ee2fa9b1\"\n * fields={[\n * { key: 'id', label: 'Organization ID', editable: false },\n * { key: 'name', label: 'Organization Name', editable: true },\n * { key: 'description', label: 'Description', editable: true, render: (value) => value || 'No description' },\n * { key: 'created', label: 'Created Date', editable: false, render: (value) => new Date(value).toLocaleDateString() },\n * { key: 'lastModified', label: 'Last Modified Date', editable: false, render: (value) => new Date(value).toLocaleDateString() },\n * { key: 'attributes', label: 'Custom Attributes', editable: true }\n * ]}\n * onUpdate={async (payload) => {\n * console.log('Organization updated:', payload);\n * // payload contains the updated field values\n * // The component automatically converts these to patch operations\n * }}\n * />\n *\n * // In popup mode\n * <OrganizationProfile\n * organizationId=\"0d5e071b-d3d3-475d-b3c6-1a20ee2fa9b1\"\n * mode=\"popup\"\n * open={isOpen}\n * onOpenChange={setIsOpen}\n * popupTitle=\"Edit Organization Profile\"\n * />\n * ```\n */\nconst OrganizationProfile: FC<OrganizationProfileProps> = ({\n organizationId,\n mode = 'default',\n open = false,\n onOpenChange,\n onUpdate,\n popupTitle,\n loadingFallback,\n errorFallback,\n preferences,\n ...rest\n}: OrganizationProfileProps): ReactElement => {\n const {baseUrl, instanceId} = useThunderID();\n const {t} = useTranslation(preferences?.i18n);\n const [organization, setOrganization] = useState<OrganizationDetails | null>(null);\n\n const fetchOrganization = async (): Promise<void> => {\n if (!baseUrl || !organizationId) {\n return;\n }\n\n try {\n const orgData: any = await getOrganization({\n baseUrl,\n instanceId,\n organizationId,\n });\n setOrganization(orgData);\n } catch (err) {\n logger.error('Failed to fetch organization:');\n setOrganization(null);\n }\n };\n\n useEffect(() => {\n fetchOrganization();\n }, [baseUrl, organizationId]);\n\n const handleOrganizationUpdate = async (payload: any): Promise<void> => {\n if (!baseUrl || !organizationId) return;\n\n try {\n // Convert payload to patch operations format\n const operations: any = createPatchOperations(payload);\n\n await updateOrganization({\n baseUrl,\n instanceId,\n operations,\n organizationId,\n });\n // Refetch organization data after update\n await fetchOrganization();\n\n // Call the optional onUpdate callback\n if (onUpdate) {\n await onUpdate(payload);\n }\n } catch (err) {\n logger.error('Failed to update organization:');\n throw err;\n }\n };\n\n return (\n <BaseOrganizationProfile\n organization={organization}\n onUpdate={handleOrganizationUpdate}\n mode={mode === 'popup' ? 'popup' : 'inline'}\n open={open}\n onOpenChange={onOpenChange}\n title={popupTitle || t('organization.profile.heading')}\n preferences={preferences}\n {...rest}\n />\n );\n};\n\nexport default OrganizationProfile;\n"],"mappings":";;;;;;;;;;;;;;AA0BA,MAAMA,+DACJ,oBACA,sBACD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA4GD,MAAMC,uBAAqD,EACzD,gBACA,OAAO,WACP,OAAO,OACP,cACA,UACA,YACA,iBACA,eACA,YACA,GAAG,WACyC;CAC5C,MAAM,EAAC,SAAS,eAAcC,8BAAc;CAC5C,MAAM,EAAC,MAAKC,+BAAe,aAAa,KAAK;CAC7C,MAAM,CAAC,cAAc,uCAAwD,KAAK;CAElF,MAAM,oBAAoB,YAA2B;AACnD,MAAI,CAAC,WAAW,CAAC,eACf;AAGF,MAAI;AAMF,mBALqB,MAAMC,gCAAgB;IACzC;IACA;IACA;IACD,CAAC,CACsB;WACjB,KAAK;AACZ,UAAO,MAAM,gCAAgC;AAC7C,mBAAgB,KAAK;;;AAIzB,4BAAgB;AACd,qBAAmB;IAClB,CAAC,SAAS,eAAe,CAAC;CAE7B,MAAM,2BAA2B,OAAO,YAAgC;AACtE,MAAI,CAAC,WAAW,CAAC,eAAgB;AAEjC,MAAI;AAIF,SAAMC,mCAAmB;IACvB;IACA;IACA,2DAL4C,QAAQ;IAMpD;IACD,CAAC;AAEF,SAAM,mBAAmB;AAGzB,OAAI,SACF,OAAM,SAAS,QAAQ;WAElB,KAAK;AACZ,UAAO,MAAM,iCAAiC;AAC9C,SAAM;;;AAIV,QACE,2CAACC;EACe;EACd,UAAU;EACV,MAAM,SAAS,UAAU,UAAU;EAC7B;EACQ;EACd,OAAO,cAAc,EAAE,+BAA+B;EACzC;EACb,GAAI;GACJ;;AAIN,kCAAe"}
|
|
@@ -1,288 +0,0 @@
|
|
|
1
|
-
const require_rolldown_runtime = require('../../../_virtual/rolldown_runtime.cjs');
|
|
2
|
-
const require_useTheme = require('../../../contexts/Theme/useTheme.cjs');
|
|
3
|
-
const require_useTranslation = require('../../../hooks/useTranslation.cjs');
|
|
4
|
-
const require_Button = require('../../primitives/Button/Button.cjs');
|
|
5
|
-
const require_Typography = require('../../primitives/Typography/Typography.cjs');
|
|
6
|
-
const require_Avatar = require('../../primitives/Avatar/Avatar.cjs');
|
|
7
|
-
const require_BaseOrganizationSwitcher_styles = require('./BaseOrganizationSwitcher.styles.cjs');
|
|
8
|
-
const require_Building = require('../../primitives/Icons/Building.cjs');
|
|
9
|
-
const require_Check = require('../../primitives/Icons/Check.cjs');
|
|
10
|
-
const require_ChevronDown = require('../../primitives/Icons/ChevronDown.cjs');
|
|
11
|
-
let react = require("react");
|
|
12
|
-
react = require_rolldown_runtime.__toESM(react);
|
|
13
|
-
let react_jsx_runtime = require("react/jsx-runtime");
|
|
14
|
-
react_jsx_runtime = require_rolldown_runtime.__toESM(react_jsx_runtime);
|
|
15
|
-
let __emotion_css = require("@emotion/css");
|
|
16
|
-
__emotion_css = require_rolldown_runtime.__toESM(__emotion_css);
|
|
17
|
-
let __floating_ui_react = require("@floating-ui/react");
|
|
18
|
-
__floating_ui_react = require_rolldown_runtime.__toESM(__floating_ui_react);
|
|
19
|
-
|
|
20
|
-
//#region src/components/presentation/OrganizationSwitcher/BaseOrganizationSwitcher.tsx
|
|
21
|
-
/**
|
|
22
|
-
* BaseOrganizationSwitcher component displays an organization selector with a dropdown menu.
|
|
23
|
-
* When clicked, it shows a popover with available organizations to switch between.
|
|
24
|
-
* This component serves as the base for framework-specific implementations.
|
|
25
|
-
*/
|
|
26
|
-
const BaseOrganizationSwitcher = ({ organizations, currentOrganization, loading = false, error, onOrganizationSwitch, onManageProfile, className = "", style, renderOrganization, renderLoading, renderError, showRole = false, showMemberCount = true, menuItems = [], portalId = "thunderid-organization-switcher", showTriggerLabel = true, avatarSize = 24, fallback = null, preferences }) => {
|
|
27
|
-
const { theme, colorScheme, direction } = require_useTheme.default();
|
|
28
|
-
const styles = require_BaseOrganizationSwitcher_styles.default(theme, colorScheme);
|
|
29
|
-
const [isOpen, setIsOpen] = (0, react.useState)(false);
|
|
30
|
-
const [hoveredItemIndex, setHoveredItemIndex] = (0, react.useState)(null);
|
|
31
|
-
const { t } = require_useTranslation.default(preferences?.i18n);
|
|
32
|
-
const isRTL = direction === "rtl";
|
|
33
|
-
const { refs, floatingStyles, context } = (0, __floating_ui_react.useFloating)({
|
|
34
|
-
middleware: [
|
|
35
|
-
(0, __floating_ui_react.offset)(5),
|
|
36
|
-
(0, __floating_ui_react.flip)({ fallbackAxisSideDirection: "end" }),
|
|
37
|
-
(0, __floating_ui_react.shift)({ padding: 5 })
|
|
38
|
-
],
|
|
39
|
-
onOpenChange: setIsOpen,
|
|
40
|
-
open: isOpen,
|
|
41
|
-
placement: "bottom-end",
|
|
42
|
-
whileElementsMounted: __floating_ui_react.autoUpdate
|
|
43
|
-
});
|
|
44
|
-
const { getReferenceProps, getFloatingProps } = (0, __floating_ui_react.useInteractions)([
|
|
45
|
-
(0, __floating_ui_react.useClick)(context),
|
|
46
|
-
(0, __floating_ui_react.useDismiss)(context),
|
|
47
|
-
(0, __floating_ui_react.useRole)(context)
|
|
48
|
-
]);
|
|
49
|
-
if (fallback && !currentOrganization && !loading && organizations.length === 0) return fallback;
|
|
50
|
-
const handleOrganizationSwitch = (organization) => {
|
|
51
|
-
onOrganizationSwitch(organization);
|
|
52
|
-
setIsOpen(false);
|
|
53
|
-
};
|
|
54
|
-
const handleMenuItemClick = (item) => {
|
|
55
|
-
if (item.onClick) item.onClick();
|
|
56
|
-
setIsOpen(false);
|
|
57
|
-
};
|
|
58
|
-
const switchableOrganizations = organizations.filter((org) => org.id !== currentOrganization?.id);
|
|
59
|
-
const defaultRenderOrganization = (organization, isSelected) => /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(react_jsx_runtime.Fragment, { children: [
|
|
60
|
-
/* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_Avatar.Avatar, {
|
|
61
|
-
variant: "square",
|
|
62
|
-
imageUrl: organization.avatar,
|
|
63
|
-
name: organization.name,
|
|
64
|
-
size: avatarSize * 1.25,
|
|
65
|
-
alt: `${organization.name} avatar`
|
|
66
|
-
}),
|
|
67
|
-
/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
68
|
-
className: (0, __emotion_css.cx)(styles["organizationInfo"]),
|
|
69
|
-
children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_Typography.default, {
|
|
70
|
-
variant: "body2",
|
|
71
|
-
fontWeight: "medium",
|
|
72
|
-
className: (0, __emotion_css.cx)(styles["organizationName"]),
|
|
73
|
-
children: organization.name
|
|
74
|
-
}), /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
75
|
-
className: (0, __emotion_css.cx)(styles["organizationMeta"]),
|
|
76
|
-
children: [
|
|
77
|
-
showMemberCount && organization.memberCount !== void 0 && /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("span", { children: [
|
|
78
|
-
organization.memberCount,
|
|
79
|
-
" ",
|
|
80
|
-
organization.memberCount === 1 ? t("organization.switcher.member") : t("organization.switcher.members")
|
|
81
|
-
] }),
|
|
82
|
-
showRole && organization.role && showMemberCount && organization.memberCount !== void 0 && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", { children: " • " }),
|
|
83
|
-
showRole && organization.role && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
|
|
84
|
-
className: (0, __emotion_css.cx)(styles["roleCapitalized"]),
|
|
85
|
-
children: organization.role
|
|
86
|
-
})
|
|
87
|
-
]
|
|
88
|
-
})]
|
|
89
|
-
}),
|
|
90
|
-
isSelected && /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_Check.default, {
|
|
91
|
-
width: "16",
|
|
92
|
-
height: "16",
|
|
93
|
-
color: theme.vars.colors.text.primary
|
|
94
|
-
})
|
|
95
|
-
] });
|
|
96
|
-
const defaultRenderLoading = () => /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
|
|
97
|
-
className: (0, __emotion_css.cx)(styles["loadingContainer"]),
|
|
98
|
-
children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_Typography.default, {
|
|
99
|
-
variant: "caption",
|
|
100
|
-
className: (0, __emotion_css.cx)(styles["loadingText"]),
|
|
101
|
-
children: t("organization.switcher.loading.placeholder.organizations")
|
|
102
|
-
})
|
|
103
|
-
});
|
|
104
|
-
const defaultRenderError = (errorMessage) => /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
|
|
105
|
-
className: (0, __emotion_css.cx)(styles["errorContainer"]),
|
|
106
|
-
children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_Typography.default, {
|
|
107
|
-
variant: "caption",
|
|
108
|
-
className: (0, __emotion_css.cx)(styles["errorText"]),
|
|
109
|
-
children: errorMessage
|
|
110
|
-
})
|
|
111
|
-
});
|
|
112
|
-
return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
113
|
-
className: (0, __emotion_css.cx)(styles["root"], className),
|
|
114
|
-
style,
|
|
115
|
-
children: [/* @__PURE__ */ (0, react_jsx_runtime.jsxs)(require_Button.default, {
|
|
116
|
-
ref: refs.setReference,
|
|
117
|
-
className: (0, __emotion_css.cx)(styles["trigger"]),
|
|
118
|
-
color: "tertiary",
|
|
119
|
-
variant: "outline",
|
|
120
|
-
size: "medium",
|
|
121
|
-
...getReferenceProps(),
|
|
122
|
-
children: [currentOrganization ? /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(react_jsx_runtime.Fragment, { children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_Avatar.Avatar, {
|
|
123
|
-
variant: "square",
|
|
124
|
-
imageUrl: currentOrganization.avatar,
|
|
125
|
-
name: currentOrganization.name,
|
|
126
|
-
size: avatarSize,
|
|
127
|
-
alt: `${currentOrganization.name} avatar`
|
|
128
|
-
}), showTriggerLabel && /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_Typography.default, {
|
|
129
|
-
variant: "body2",
|
|
130
|
-
className: (0, __emotion_css.cx)(styles["triggerLabel"]),
|
|
131
|
-
children: currentOrganization.name
|
|
132
|
-
})] }) : /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(react_jsx_runtime.Fragment, { children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_Building.default, {
|
|
133
|
-
width: avatarSize,
|
|
134
|
-
height: avatarSize
|
|
135
|
-
}), showTriggerLabel && /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_Typography.default, {
|
|
136
|
-
variant: "body2",
|
|
137
|
-
className: (0, __emotion_css.cx)(styles["triggerLabel"]),
|
|
138
|
-
children: t("elements.fields.organization.select.label")
|
|
139
|
-
})] }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
|
|
140
|
-
style: {
|
|
141
|
-
display: "inline-flex",
|
|
142
|
-
transform: isRTL ? "scaleX(-1)" : "none"
|
|
143
|
-
},
|
|
144
|
-
children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_ChevronDown.default, {
|
|
145
|
-
width: "16",
|
|
146
|
-
height: "16"
|
|
147
|
-
})
|
|
148
|
-
})]
|
|
149
|
-
}), isOpen && /* @__PURE__ */ (0, react_jsx_runtime.jsx)(__floating_ui_react.FloatingPortal, {
|
|
150
|
-
id: portalId,
|
|
151
|
-
children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(__floating_ui_react.FloatingFocusManager, {
|
|
152
|
-
context,
|
|
153
|
-
modal: false,
|
|
154
|
-
initialFocus: -1,
|
|
155
|
-
children: /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
156
|
-
ref: refs.setFloating,
|
|
157
|
-
className: (0, __emotion_css.cx)(styles["content"]),
|
|
158
|
-
style: floatingStyles,
|
|
159
|
-
...getFloatingProps(),
|
|
160
|
-
children: [
|
|
161
|
-
currentOrganization && /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
162
|
-
className: (0, __emotion_css.cx)(styles["header"]),
|
|
163
|
-
children: [
|
|
164
|
-
/* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_Avatar.Avatar, {
|
|
165
|
-
variant: "square",
|
|
166
|
-
imageUrl: currentOrganization.avatar,
|
|
167
|
-
name: currentOrganization.name,
|
|
168
|
-
size: avatarSize * 1.5,
|
|
169
|
-
alt: `${currentOrganization.name} avatar`
|
|
170
|
-
}),
|
|
171
|
-
/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
172
|
-
className: (0, __emotion_css.cx)(styles["headerInfo"]),
|
|
173
|
-
children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_Typography.default, {
|
|
174
|
-
noWrap: true,
|
|
175
|
-
className: (0, __emotion_css.cx)(styles["headerName"]),
|
|
176
|
-
variant: "body1",
|
|
177
|
-
fontWeight: "medium",
|
|
178
|
-
children: currentOrganization.name
|
|
179
|
-
}), /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
180
|
-
className: (0, __emotion_css.cx)(styles["headerMeta"]),
|
|
181
|
-
children: [showMemberCount && currentOrganization.memberCount !== void 0 && /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(require_Typography.default, {
|
|
182
|
-
noWrap: true,
|
|
183
|
-
variant: "caption",
|
|
184
|
-
color: "secondary",
|
|
185
|
-
children: [
|
|
186
|
-
currentOrganization.memberCount,
|
|
187
|
-
" ",
|
|
188
|
-
currentOrganization.memberCount === 1 ? t("organization.switcher.member") : t("organization.switcher.members"),
|
|
189
|
-
showRole && currentOrganization.role && /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("span", { children: [" • ", currentOrganization.role] })
|
|
190
|
-
]
|
|
191
|
-
}), showRole && currentOrganization.role && (!showMemberCount || currentOrganization.memberCount === void 0) && /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_Typography.default, {
|
|
192
|
-
noWrap: true,
|
|
193
|
-
className: (0, __emotion_css.cx)(styles["headerRole"]),
|
|
194
|
-
variant: "caption",
|
|
195
|
-
color: "secondary",
|
|
196
|
-
children: currentOrganization.role
|
|
197
|
-
})]
|
|
198
|
-
})]
|
|
199
|
-
}),
|
|
200
|
-
onManageProfile && /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_Button.default, {
|
|
201
|
-
onClick: onManageProfile,
|
|
202
|
-
color: "tertiary",
|
|
203
|
-
variant: "outline",
|
|
204
|
-
size: "small",
|
|
205
|
-
"aria-label": "Manage Organization Profile",
|
|
206
|
-
className: (0, __emotion_css.cx)(styles["manageButton"]),
|
|
207
|
-
endIcon: /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("svg", {
|
|
208
|
-
width: "16",
|
|
209
|
-
height: "16",
|
|
210
|
-
viewBox: "0 0 24 24",
|
|
211
|
-
fill: "none",
|
|
212
|
-
stroke: "currentColor",
|
|
213
|
-
strokeWidth: "2",
|
|
214
|
-
strokeLinecap: "round",
|
|
215
|
-
strokeLinejoin: "round",
|
|
216
|
-
children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("circle", {
|
|
217
|
-
cx: "12",
|
|
218
|
-
cy: "12",
|
|
219
|
-
r: "3"
|
|
220
|
-
}), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("path", { d: "M19.4 15a1.65 1.65 0 0 0 .33 1.82l.06.06a2 2 0 0 1 0 2.83 2 2 0 0 1-2.83 0l-.06-.06a1.65 1.65 0 0 0-1.82-.33 1.65 1.65 0 0 0-1 1.51V21a2 2 0 0 1-2 2 2 2 0 0 1-2-2v-.09A1.65 1.65 0 0 0 9 19.4a1.65 1.65 0 0 0-1.82.33l-.06.06a2 2 0 0 1-2.83 0 2 2 0 0 1 0-2.83l.06-.06a1.65 1.65 0 0 0 .33-1.82 1.65 1.65 0 0 0-1.51-1H3a2 2 0 0 1-2-2 2 2 0 0 1 2-2h.09A1.65 1.65 0 0 0 4.6 9a1.65 1.65 0 0 0-.33-1.82l-.06-.06a2 2 0 0 1 0-2.83 2 2 0 0 1 2.83 0l.06.06a1.65 1.65 0 0 0 1.82.33H9a1.65 1.65 0 0 0 1 1.51V3a2 2 0 0 1 2-2 2 2 0 0 1 2 2v.09a1.65 1.65 0 0 0 1 1.51 1.65 1.65 0 0 0 1.82-.33l.06-.06a2 2 0 0 1 2.83 0 2 2 0 0 1 0 2.83l-.06.06a1.65 1.65 0 0 0-.33 1.82V9a1.65 1.65 0 0 0 1.51 1H21a2 2 0 0 1 2 2 2 2 0 0 1-2 2h-.09a1.65 1.65 0 0 0-1.51 1z" })]
|
|
221
|
-
}),
|
|
222
|
-
children: t("organization.switcher.buttons.manage.text")
|
|
223
|
-
})
|
|
224
|
-
]
|
|
225
|
-
}),
|
|
226
|
-
organizations.length > 1 && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
|
|
227
|
-
className: (0, __emotion_css.cx)(styles["header"], styles["sectionHeaderContainer"]),
|
|
228
|
-
style: { borderTop: currentOrganization ? `1px solid ${theme.vars.colors.border}` : "none" },
|
|
229
|
-
children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_Typography.default, {
|
|
230
|
-
variant: "caption",
|
|
231
|
-
fontWeight: 600,
|
|
232
|
-
className: (0, __emotion_css.cx)(styles["sectionHeader"]),
|
|
233
|
-
children: t("organization.switcher.switch.organization")
|
|
234
|
-
})
|
|
235
|
-
}),
|
|
236
|
-
/* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
|
|
237
|
-
className: (0, __emotion_css.cx)(styles["menu"]),
|
|
238
|
-
children: (() => {
|
|
239
|
-
if (loading) return renderLoading ? renderLoading() : defaultRenderLoading();
|
|
240
|
-
if (error) return renderError ? renderError(error) : defaultRenderError(error);
|
|
241
|
-
return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(react_jsx_runtime.Fragment, { children: [switchableOrganizations.map((organization) => {
|
|
242
|
-
const isSelected = false;
|
|
243
|
-
return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_Button.default, {
|
|
244
|
-
onClick: () => handleOrganizationSwitch(organization),
|
|
245
|
-
className: (0, __emotion_css.cx)(styles["menuItem"]),
|
|
246
|
-
color: "tertiary",
|
|
247
|
-
variant: "text",
|
|
248
|
-
size: "small",
|
|
249
|
-
style: { backgroundColor: hoveredItemIndex === switchableOrganizations.indexOf(organization) ? theme.vars.colors.action?.hover : "transparent" },
|
|
250
|
-
onMouseEnter: () => setHoveredItemIndex(switchableOrganizations.indexOf(organization)),
|
|
251
|
-
onMouseLeave: () => setHoveredItemIndex(null),
|
|
252
|
-
children: renderOrganization ? renderOrganization(organization, isSelected) : defaultRenderOrganization(organization, isSelected)
|
|
253
|
-
}, organization.id);
|
|
254
|
-
}), menuItems.length > 0 && /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(react_jsx_runtime.Fragment, { children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", { className: (0, __emotion_css.cx)(styles["menuDivider"]) }), menuItems.map((item, index) => /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", { children: item.href ? /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("a", {
|
|
255
|
-
href: item.href,
|
|
256
|
-
style: { backgroundColor: hoveredItemIndex === switchableOrganizations.length + index ? theme.vars.colors.action?.hover : "transparent" },
|
|
257
|
-
className: (0, __emotion_css.cx)(styles["menuItem"]),
|
|
258
|
-
onMouseEnter: () => setHoveredItemIndex(switchableOrganizations.length + index),
|
|
259
|
-
onMouseLeave: () => setHoveredItemIndex(null),
|
|
260
|
-
onFocus: () => setHoveredItemIndex(switchableOrganizations.length + index),
|
|
261
|
-
onBlur: () => setHoveredItemIndex(null),
|
|
262
|
-
children: [item.icon, /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", { children: item.label })]
|
|
263
|
-
}) : /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_Button.default, {
|
|
264
|
-
onClick: () => handleMenuItemClick(item),
|
|
265
|
-
style: { backgroundColor: hoveredItemIndex === switchableOrganizations.length + index ? theme.vars.colors.action?.hover : "transparent" },
|
|
266
|
-
className: (0, __emotion_css.cx)(styles["menuItem"]),
|
|
267
|
-
color: "tertiary",
|
|
268
|
-
variant: "text",
|
|
269
|
-
size: "small",
|
|
270
|
-
startIcon: item.icon,
|
|
271
|
-
onMouseEnter: () => setHoveredItemIndex(switchableOrganizations.length + index),
|
|
272
|
-
onMouseLeave: () => setHoveredItemIndex(null),
|
|
273
|
-
children: item.label
|
|
274
|
-
}) }, index))] })] });
|
|
275
|
-
})()
|
|
276
|
-
})
|
|
277
|
-
]
|
|
278
|
-
})
|
|
279
|
-
})
|
|
280
|
-
})]
|
|
281
|
-
});
|
|
282
|
-
};
|
|
283
|
-
var BaseOrganizationSwitcher_default = BaseOrganizationSwitcher;
|
|
284
|
-
|
|
285
|
-
//#endregion
|
|
286
|
-
exports.BaseOrganizationSwitcher = BaseOrganizationSwitcher;
|
|
287
|
-
exports.default = BaseOrganizationSwitcher_default;
|
|
288
|
-
//# sourceMappingURL=BaseOrganizationSwitcher.cjs.map
|
package/dist/cjs/components/presentation/OrganizationSwitcher/BaseOrganizationSwitcher.cjs.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"BaseOrganizationSwitcher.cjs","names":["BaseOrganizationSwitcher: FC<BaseOrganizationSwitcherProps>","useTheme","styles: Record<string, string>","useStyles","useTranslation","isRTL: boolean","autoUpdate","switchableOrganizations: Organization[]","Avatar","Typography","Check","Button","Building","ChevronDown","FloatingPortal","FloatingFocusManager"],"sources":["../../../../../src/components/presentation/OrganizationSwitcher/BaseOrganizationSwitcher.tsx"],"sourcesContent":["/**\n * Copyright (c) 2025, WSO2 LLC. (https://www.wso2.com).\n *\n * WSO2 LLC. licenses this file to you under the Apache License,\n * Version 2.0 (the \"License\"); you may not use this file except\n * in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing,\n * software distributed under the License is distributed on an\n * \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n * KIND, either express or implied. See the License for the\n * specific language governing permissions and limitations\n * under the License.\n */\n\n// Removed BEM and vendor prefix utilities\nimport {cx} from '@emotion/css';\nimport {\n useFloating,\n autoUpdate,\n offset,\n flip,\n shift,\n useClick,\n useDismiss,\n useRole,\n useInteractions,\n FloatingFocusManager,\n FloatingPortal,\n} from '@floating-ui/react';\nimport {Preferences} from '@thunderid/browser';\nimport {CSSProperties, FC, ReactElement, ReactNode, useState} from 'react';\nimport useStyles from './BaseOrganizationSwitcher.styles';\nimport useTheme from '../../../contexts/Theme/useTheme';\nimport useTranslation from '../../../hooks/useTranslation';\nimport {Avatar} from '../../primitives/Avatar/Avatar';\nimport Button from '../../primitives/Button/Button';\nimport Building from '../../primitives/Icons/Building';\nimport Check from '../../primitives/Icons/Check';\nimport ChevronDown from '../../primitives/Icons/ChevronDown';\nimport Typography from '../../primitives/Typography/Typography';\n\ninterface MenuItem {\n href?: string;\n icon?: ReactNode;\n label: ReactNode;\n onClick?: () => void;\n}\n\n/**\n * Interface for organization data.\n */\nexport interface Organization {\n /**\n * Avatar URL for the organization.\n */\n avatar?: string;\n /**\n * Unique identifier for the organization.\n */\n id: string;\n /**\n * Number of members in the organization.\n */\n memberCount?: number;\n /**\n * Additional metadata for the organization.\n */\n metadata?: Record<string, any>;\n /**\n * Display name of the organization.\n */\n name: string;\n /**\n * User's role in the organization.\n */\n role?: 'owner' | 'admin' | 'member';\n /**\n * URL slug for the organization.\n */\n slug?: string;\n}\n\n/**\n * Props interface for the BaseOrganizationSwitcher component.\n */\nexport interface BaseOrganizationSwitcherProps {\n /**\n * Optional size for the avatar\n */\n avatarSize?: number;\n /**\n * Custom class name for styling.\n */\n className?: string;\n /**\n * Currently selected organization.\n */\n currentOrganization?: Organization;\n /**\n * Error message to display.\n */\n error?: string;\n /**\n * Optional element to render when no organization is selected.\n */\n fallback?: ReactElement | null;\n /**\n * Whether the component is in a loading state.\n */\n loading?: boolean;\n /**\n * Additional menu items to display at the bottom of the dropdown.\n */\n menuItems?: MenuItem[];\n /**\n * Handler for when the manage profile button is clicked.\n */\n onManageProfile?: () => void;\n /**\n * Handler for when an organization is selected.\n */\n onOrganizationSwitch: (organization: Organization) => void;\n /**\n * List of available organizations.\n */\n organizations: Organization[];\n /**\n * The HTML element ID where the portal should be mounted\n */\n portalId?: string;\n /**\n * Component-level preferences to override global i18n and theme settings.\n * Preferences are deep-merged with global ones, with component preferences\n * taking precedence. Affects this component and all its descendants.\n */\n preferences?: Preferences;\n /**\n * Custom render function for the error state.\n */\n renderError?: (error: string) => ReactElement;\n /**\n * Custom render function for the loading state.\n */\n renderLoading?: () => ReactElement;\n /**\n * Custom render function for the organization item.\n */\n renderOrganization?: (organization: Organization, isSelected: boolean) => ReactElement;\n /**\n * Whether to show the member count.\n */\n showMemberCount?: boolean;\n /**\n * Whether to show the role badge.\n */\n showRole?: boolean;\n /**\n * Show organization name next to avatar in the trigger button\n */\n showTriggerLabel?: boolean;\n\n /**\n * Custom styles for the component.\n */\n style?: CSSProperties;\n}\n\n/**\n * BaseOrganizationSwitcher component displays an organization selector with a dropdown menu.\n * When clicked, it shows a popover with available organizations to switch between.\n * This component serves as the base for framework-specific implementations.\n */\nexport const BaseOrganizationSwitcher: FC<BaseOrganizationSwitcherProps> = ({\n organizations,\n currentOrganization,\n loading = false,\n error,\n onOrganizationSwitch,\n onManageProfile,\n className = '',\n style,\n renderOrganization,\n renderLoading,\n renderError,\n showRole = false,\n showMemberCount = true,\n menuItems = [],\n portalId = 'thunderid-organization-switcher',\n showTriggerLabel = true,\n avatarSize = 24,\n fallback = null,\n preferences,\n}: BaseOrganizationSwitcherProps): ReactElement | null => {\n const {theme, colorScheme, direction} = useTheme();\n const styles: Record<string, string> = useStyles(theme, colorScheme);\n const [isOpen, setIsOpen] = useState(false);\n const [hoveredItemIndex, setHoveredItemIndex] = useState<number | null>(null);\n const {t} = useTranslation(preferences?.i18n);\n const isRTL: boolean = direction === 'rtl';\n\n const {refs, floatingStyles, context} = useFloating({\n middleware: [offset(5), flip({fallbackAxisSideDirection: 'end'}), shift({padding: 5})],\n onOpenChange: setIsOpen,\n open: isOpen,\n placement: 'bottom-end',\n whileElementsMounted: autoUpdate,\n });\n\n const click: any = useClick(context);\n const dismiss: any = useDismiss(context);\n const role: any = useRole(context);\n\n const {getReferenceProps, getFloatingProps} = useInteractions([click, dismiss, role]);\n\n if (fallback && !currentOrganization && !loading && organizations.length === 0) {\n return fallback;\n }\n\n const handleOrganizationSwitch = (organization: Organization): void => {\n onOrganizationSwitch(organization);\n setIsOpen(false);\n };\n\n const handleMenuItemClick = (item: MenuItem): void => {\n if (item.onClick) {\n item.onClick();\n }\n setIsOpen(false);\n };\n\n // Filter out current organization from switchable list\n const switchableOrganizations: Organization[] = organizations.filter(\n (org: Organization): boolean => org.id !== currentOrganization?.id,\n );\n\n const defaultRenderOrganization = (organization: Organization, isSelected: boolean): ReactElement => (\n <>\n <Avatar\n variant=\"square\"\n imageUrl={organization.avatar}\n name={organization.name}\n size={avatarSize * 1.25}\n alt={`${organization.name} avatar`}\n />\n <div className={cx(styles['organizationInfo'])}>\n <Typography variant=\"body2\" fontWeight=\"medium\" className={cx(styles['organizationName'])}>\n {organization.name}\n </Typography>\n <div className={cx(styles['organizationMeta'])}>\n {showMemberCount && organization.memberCount !== undefined && (\n <span>\n {organization.memberCount}{' '}\n {organization.memberCount === 1 ? t('organization.switcher.member') : t('organization.switcher.members')}\n </span>\n )}\n {showRole && organization.role && showMemberCount && organization.memberCount !== undefined && (\n <span> • </span>\n )}\n {showRole && organization.role && <span className={cx(styles['roleCapitalized'])}>{organization.role}</span>}\n </div>\n </div>\n {isSelected && <Check width=\"16\" height=\"16\" color={theme.vars.colors.text.primary} />}\n </>\n );\n\n const defaultRenderLoading = (): ReactElement => (\n <div className={cx(styles['loadingContainer'])}>\n <Typography variant=\"caption\" className={cx(styles['loadingText'])}>\n {t('organization.switcher.loading.placeholder.organizations')}\n </Typography>\n </div>\n );\n\n const defaultRenderError = (errorMessage: string): ReactElement => (\n <div className={cx(styles['errorContainer'])}>\n <Typography variant=\"caption\" className={cx(styles['errorText'])}>\n {errorMessage}\n </Typography>\n </div>\n );\n\n return (\n <div className={cx(styles['root'], className)} style={style}>\n <Button\n ref={refs.setReference}\n className={cx(styles['trigger'])}\n color=\"tertiary\"\n variant=\"outline\"\n size=\"medium\"\n {...getReferenceProps()}\n >\n {currentOrganization ? (\n <>\n <Avatar\n variant=\"square\"\n imageUrl={currentOrganization.avatar}\n name={currentOrganization.name}\n size={avatarSize}\n alt={`${currentOrganization.name} avatar`}\n />\n {showTriggerLabel && (\n <Typography variant=\"body2\" className={cx(styles['triggerLabel'])}>\n {currentOrganization.name}\n </Typography>\n )}\n </>\n ) : (\n <>\n <Building width={avatarSize} height={avatarSize} />\n {showTriggerLabel && (\n <Typography variant=\"body2\" className={cx(styles['triggerLabel'])}>\n {t('elements.fields.organization.select.label')}\n </Typography>\n )}\n </>\n )}\n <span style={{display: 'inline-flex', transform: isRTL ? 'scaleX(-1)' : 'none'}}>\n <ChevronDown width=\"16\" height=\"16\" />\n </span>\n </Button>\n\n {isOpen && (\n <FloatingPortal id={portalId}>\n <FloatingFocusManager context={context} modal={false} initialFocus={-1}>\n <div\n ref={refs.setFloating}\n className={cx(styles['content'])}\n style={floatingStyles}\n {...getFloatingProps()}\n >\n {/* Header - Current Organization */}\n {currentOrganization && (\n <div className={cx(styles['header'])}>\n <Avatar\n variant=\"square\"\n imageUrl={currentOrganization.avatar}\n name={currentOrganization.name}\n size={avatarSize * 1.5}\n alt={`${currentOrganization.name} avatar`}\n />\n <div className={cx(styles['headerInfo'])}>\n <Typography noWrap className={cx(styles['headerName'])} variant=\"body1\" fontWeight=\"medium\">\n {currentOrganization.name}\n </Typography>\n <div className={cx(styles['headerMeta'])}>\n {showMemberCount && currentOrganization.memberCount !== undefined && (\n <Typography\n noWrap\n // ...existing code...\n variant=\"caption\"\n color=\"secondary\"\n >\n {currentOrganization.memberCount}{' '}\n {currentOrganization.memberCount === 1\n ? t('organization.switcher.member')\n : t('organization.switcher.members')}\n {showRole && currentOrganization.role && <span> • {currentOrganization.role}</span>}\n </Typography>\n )}\n {showRole &&\n currentOrganization.role &&\n (!showMemberCount || currentOrganization.memberCount === undefined) && (\n <Typography noWrap className={cx(styles['headerRole'])} variant=\"caption\" color=\"secondary\">\n {currentOrganization.role}\n </Typography>\n )}\n </div>\n </div>\n {onManageProfile && (\n <Button\n onClick={onManageProfile}\n color=\"tertiary\"\n variant=\"outline\"\n size=\"small\"\n aria-label=\"Manage Organization Profile\"\n className={cx(styles['manageButton'])}\n endIcon={\n <svg\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <circle cx=\"12\" cy=\"12\" r=\"3\" />\n <path d=\"M19.4 15a1.65 1.65 0 0 0 .33 1.82l.06.06a2 2 0 0 1 0 2.83 2 2 0 0 1-2.83 0l-.06-.06a1.65 1.65 0 0 0-1.82-.33 1.65 1.65 0 0 0-1 1.51V21a2 2 0 0 1-2 2 2 2 0 0 1-2-2v-.09A1.65 1.65 0 0 0 9 19.4a1.65 1.65 0 0 0-1.82.33l-.06.06a2 2 0 0 1-2.83 0 2 2 0 0 1 0-2.83l.06-.06a1.65 1.65 0 0 0 .33-1.82 1.65 1.65 0 0 0-1.51-1H3a2 2 0 0 1-2-2 2 2 0 0 1 2-2h.09A1.65 1.65 0 0 0 4.6 9a1.65 1.65 0 0 0-.33-1.82l-.06-.06a2 2 0 0 1 0-2.83 2 2 0 0 1 2.83 0l.06.06a1.65 1.65 0 0 0 1.82.33H9a1.65 1.65 0 0 0 1 1.51V3a2 2 0 0 1 2-2 2 2 0 0 1 2 2v.09a1.65 1.65 0 0 0 1 1.51 1.65 1.65 0 0 0 1.82-.33l.06-.06a2 2 0 0 1 2.83 0 2 2 0 0 1 0 2.83l-.06.06a1.65 1.65 0 0 0-.33 1.82V9a1.65 1.65 0 0 0 1.51 1H21a2 2 0 0 1 2 2 2 2 0 0 1-2 2h-.09a1.65 1.65 0 0 0-1.51 1z\" />\n </svg>\n }\n >\n {t('organization.switcher.buttons.manage.text')}\n </Button>\n )}\n </div>\n )}\n\n {/* Section Header for Other Organizations */}\n {organizations.length > 1 && (\n <div\n className={cx(styles['header'], styles['sectionHeaderContainer'])}\n style={{\n borderTop: currentOrganization ? `1px solid ${theme.vars.colors.border}` : 'none',\n }}\n >\n <Typography variant=\"caption\" fontWeight={600} className={cx(styles['sectionHeader'])}>\n {t('organization.switcher.switch.organization')}\n </Typography>\n </div>\n )}\n\n {/* Content */}\n <div className={cx(styles['menu'])}>\n {((): ReactElement => {\n if (loading) {\n return renderLoading ? renderLoading() : defaultRenderLoading();\n }\n if (error) {\n return renderError ? renderError(error) : defaultRenderError(error);\n }\n return (\n <>\n {switchableOrganizations.map((organization: Organization): ReactElement => {\n const isSelected = false; // Never selected since we exclude current org\n return (\n <Button\n key={organization.id}\n onClick={(): void => handleOrganizationSwitch(organization)}\n className={cx(styles['menuItem'])}\n color=\"tertiary\"\n variant=\"text\"\n size=\"small\"\n style={{\n backgroundColor:\n hoveredItemIndex === switchableOrganizations.indexOf(organization)\n ? theme.vars.colors.action?.hover\n : 'transparent',\n }}\n onMouseEnter={(): void =>\n setHoveredItemIndex(switchableOrganizations.indexOf(organization))\n }\n onMouseLeave={(): void => setHoveredItemIndex(null)}\n >\n {renderOrganization\n ? renderOrganization(organization, isSelected)\n : defaultRenderOrganization(organization, isSelected)}\n </Button>\n );\n })}\n\n {/* Menu Items */}\n {menuItems.length > 0 && (\n <>\n <div className={cx(styles['menuDivider'])} />\n {menuItems.map(\n (item: any, index: number): ReactElement => (\n <div key={index}>\n {item.href ? (\n <a\n href={item.href}\n style={{\n backgroundColor:\n hoveredItemIndex === switchableOrganizations.length + index\n ? theme.vars.colors.action?.hover\n : 'transparent',\n }}\n className={cx(styles['menuItem'])}\n onMouseEnter={(): void =>\n setHoveredItemIndex(switchableOrganizations.length + index)\n }\n onMouseLeave={(): void => setHoveredItemIndex(null)}\n onFocus={(): void => setHoveredItemIndex(switchableOrganizations.length + index)}\n onBlur={(): void => setHoveredItemIndex(null)}\n >\n {item.icon}\n <span>{item.label}</span>\n </a>\n ) : (\n <Button\n onClick={(): void => handleMenuItemClick(item)}\n style={{\n backgroundColor:\n hoveredItemIndex === switchableOrganizations.length + index\n ? theme.vars.colors.action?.hover\n : 'transparent',\n }}\n className={cx(styles['menuItem'])}\n color=\"tertiary\"\n variant=\"text\"\n size=\"small\"\n startIcon={item.icon}\n onMouseEnter={(): void =>\n setHoveredItemIndex(switchableOrganizations.length + index)\n }\n onMouseLeave={(): void => setHoveredItemIndex(null)}\n >\n {item.label}\n </Button>\n )}\n </div>\n ),\n )}\n </>\n )}\n </>\n );\n })()}\n </div>\n </div>\n </FloatingFocusManager>\n </FloatingPortal>\n )}\n </div>\n );\n};\n\nexport default BaseOrganizationSwitcher;\n"],"mappings":"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"}
|