From b76a9afe5b4c393a5f63943e9d20e9ae315390f0 Mon Sep 17 00:00:00 2001 From: Alex Carpenter Date: Tue, 30 Jun 2026 12:59:59 -0400 Subject: [PATCH 01/15] feat(ui): Add experimental mosaic components export --- packages/ui/package.json | 5 ++ packages/ui/src/experimental.ts | 13 +++++ packages/ui/src/mosaic/MosaicProvider.tsx | 38 +++++++++++-- .../mosaic/__tests__/MosaicProvider.test.tsx | 50 ++++++++++++++++- .../organization-profile.controller.test.tsx | 53 +++++++++++++++++++ .../__tests__/organization-profile.test.tsx | 20 +++++++ .../aio/organization-profile.controller.tsx | 17 ++++++ .../src/mosaic/aio/organization-profile.tsx | 15 ++++++ .../src/mosaic/hooks/useMosaicEnvironment.ts | 21 ++++++++ .../ui/src/mosaic/hooks/useMosaicRouter.ts | 18 +++++++ .../delete-organization.controller.test.tsx | 23 ++++++++ .../leave-organization.controller.test.tsx | 38 ++++++++++--- .../delete-organization.controller.tsx | 11 +++- .../sections/delete-organization.view.tsx | 1 + .../leave-organization.controller.tsx | 22 ++++++-- packages/ui/src/mosaic/slot-recipe.ts | 4 +- packages/ui/tsdown.config.mts | 1 + 17 files changed, 328 insertions(+), 22 deletions(-) create mode 100644 packages/ui/src/experimental.ts create mode 100644 packages/ui/src/mosaic/aio/__tests__/organization-profile.controller.test.tsx create mode 100644 packages/ui/src/mosaic/aio/__tests__/organization-profile.test.tsx create mode 100644 packages/ui/src/mosaic/aio/organization-profile.controller.tsx create mode 100644 packages/ui/src/mosaic/hooks/useMosaicEnvironment.ts create mode 100644 packages/ui/src/mosaic/hooks/useMosaicRouter.ts diff --git a/packages/ui/package.json b/packages/ui/package.json index a3341049609..1df36da3e0a 100644 --- a/packages/ui/package.json +++ b/packages/ui/package.json @@ -35,6 +35,11 @@ "import": "./dist/entry.js", "default": "./dist/entry.js" }, + "./experimental": { + "types": "./dist/experimental.d.ts", + "import": "./dist/experimental.js", + "default": "./dist/experimental.js" + }, "./internal": { "types": "./dist/internal/index.d.ts", "import": "./dist/internal/index.js", diff --git a/packages/ui/src/experimental.ts b/packages/ui/src/experimental.ts new file mode 100644 index 00000000000..d06e6736c2b --- /dev/null +++ b/packages/ui/src/experimental.ts @@ -0,0 +1,13 @@ +/** + * Experimental entrypoint for the Mosaic design system. + * + * No semver guarantees: anything exported here may change or be removed in a minor + * release. Render `OrganizationProfile` under a `ClerkProvider` (for data) and a + * `MosaicProvider` (for styling/appearance). The profile's parts can also be rendered + * standalone via `OrganizationProfile.GeneralPanel`, `OrganizationProfile.LeaveSection`, + * and `OrganizationProfile.DeleteSection`. + */ +export { MosaicProvider } from './mosaic/MosaicProvider'; +export type { MosaicProviderProps } from './mosaic/MosaicProvider'; +export { OrganizationProfile } from './mosaic/aio/organization-profile'; +export type { MosaicAppearance } from './mosaic/appearance'; diff --git a/packages/ui/src/mosaic/MosaicProvider.tsx b/packages/ui/src/mosaic/MosaicProvider.tsx index 5ed16f7ef4b..1ccc848b87d 100644 --- a/packages/ui/src/mosaic/MosaicProvider.tsx +++ b/packages/ui/src/mosaic/MosaicProvider.tsx @@ -1,7 +1,7 @@ // eslint-disable-next-line no-restricted-imports import createCache from '@emotion/cache'; // eslint-disable-next-line no-restricted-imports -import { CacheProvider } from '@emotion/react'; +import { CacheProvider, Global } from '@emotion/react'; import React from 'react'; import type { MosaicAppearance } from './appearance'; @@ -9,13 +9,38 @@ import { MosaicAppearanceProvider, MosaicIconsProvider, parseMosaicAppearance } import type { MosaicTheme } from './variables'; import { defaultMosaicVariables, resolveVariables } from './variables'; -const getInsertionPoint = (): HTMLElement | null => { +const INSERTION_POINT_ID = 'cl-mosaic-style-insertion-point'; + +// Anchor Emotion's