@workos-inc/widgets 1.18.0-next.1788904392369 → 1.18.0

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.
@@ -1,9 +1,9 @@
1
- import { DataIntegration, SharedDataConnection } from '../api/endpoint.cjs';
1
+ import * as React$1 from 'react';
2
+ import { DataIntegration, SharedDataConnection, DataInstallation, DataIntegrationConfigField } from '../api/endpoint.cjs';
2
3
  import { WidgetRootDomProps } from './utils.cjs';
3
4
  import '@tanstack/react-query';
4
5
  import '../api/widgets-api-client.cjs';
5
6
  import './elements.cjs';
6
- import 'react';
7
7
  import '@radix-ui/themes';
8
8
  import '@radix-ui/themes/props';
9
9
  import '../dialog-CGXwsXVe.cjs';
@@ -43,11 +43,87 @@ interface PipesSectionsProps extends PipesProps {
43
43
  /** Names the owning organization in the shared section's description. */
44
44
  organizationName?: string;
45
45
  }
46
+ /**
47
+ * Who will own the resulting installation. Members connect their own account
48
+ * through the personal authorize endpoint; administrators connect an account
49
+ * on the organization's behalf through the organization one.
50
+ */
51
+ type ConnectionOwner = "user" | "organization";
52
+ declare const useOpenDataIntegrationAuthorizeUrl: (integration: DataIntegration, owner?: ConnectionOwner) => (config?: Record<string, string>) => Promise<void>;
53
+ /**
54
+ * Returns the provider-declared `installation`-scope config fields that the
55
+ * integration has not pinned a value for, sorted by descriptor `order`. These
56
+ * are the fields the connect flow must prompt for (pin / prompt-if-unset).
57
+ */
58
+ declare function getUnpinnedInstallationFields(integration: DataIntegration): DataIntegrationConfigField[];
59
+ /**
60
+ * The single connect dialog for all non-API (OAuth) providers. When the
61
+ * provider declares unpinned `installation`-scope config fields (e.g. a Zendesk
62
+ * subdomain), it opens on a field-collection step (values validated against the
63
+ * descriptor `required` / `pattern`) before the redirect explainer; otherwise
64
+ * it opens directly on the explainer. Collected values are submitted as
65
+ * `config` on the POST authorize call. Controlled so it backs the initial
66
+ * connect flow, the dual-method OAuth option, and reauthorization.
67
+ */
68
+ declare function ConnectDialog({ integration, fields, open, onOpenChange, owner, }: {
69
+ integration: DataIntegration;
70
+ fields: DataIntegrationConfigField[];
71
+ open: boolean;
72
+ onOpenChange: (open: boolean) => void;
73
+ owner?: ConnectionOwner;
74
+ }): React$1.JSX.Element;
75
+ /**
76
+ * Stores an API key for the integration: the member's own installation, or,
77
+ * with `owner="organization"`, the one the organization shares with everyone
78
+ * (`installation` then names that shared account).
79
+ */
80
+ declare function ApiKeyDialog({ integration, installation, owner, open, onOpenChange, }: {
81
+ integration: DataIntegration;
82
+ installation?: DataInstallation | null;
83
+ owner?: ConnectionOwner;
84
+ open: boolean;
85
+ onOpenChange: (open: boolean) => void;
86
+ }): React$1.JSX.Element;
87
+ /**
88
+ * Connect form for the `client_credentials` auth method: the provider's client
89
+ * id and secret plus any unpinned `installation`-scope config fields, rendered
90
+ * generically from the descriptors via {@link ConfigFieldInputs}. Submits to
91
+ * PUT `/DataIntegrations/:slug/client-credentials`, which also handles
92
+ * replacing the credentials of an existing client-credentials installation.
93
+ *
94
+ * For an existing installation the form is prefilled from it: the client id as
95
+ * received, the stored secret as a redacted mask that clears on focus (the
96
+ * real value is never sent to the widget, so a new secret must be re-entered
97
+ * to save), and the config fields from `installation.config`. `config` is only
98
+ * included in the payload when the user edits a config field, since the API
99
+ * keeps the stored config when the key is absent; when it is included it is
100
+ * the full round-tripped object, because the write replaces config wholesale.
101
+ */
102
+ declare function ClientCredentialsDialog({ integration, installation, owner, fields, open, onOpenChange, }: {
103
+ integration: DataIntegration;
104
+ installation?: DataInstallation | null;
105
+ owner?: ConnectionOwner;
106
+ fields: DataIntegrationConfigField[];
107
+ open: boolean;
108
+ onOpenChange: (open: boolean) => void;
109
+ }): React$1.JSX.Element;
46
110
  interface PipesLoadingProps extends WidgetRootDomProps {
47
111
  count: number;
48
112
  }
49
113
  declare const PipesLoading: React.FC<PipesLoadingProps>;
114
+ /**
115
+ * Stands in for the rows a list has none of. Filtering is client-side, so an
116
+ * empty list can say whether nothing is enabled yet or a `filter` emptied it.
117
+ */
118
+ declare function PipesEmptyItem({ isFiltered }: {
119
+ isFiltered: boolean;
120
+ }): React$1.JSX.Element;
50
121
  declare const Pipes: React.FC<PipesProps>;
122
+ declare function PipesSection({ title, description, children, }: {
123
+ title: React.ReactNode;
124
+ description: React.ReactNode;
125
+ children: React.ReactNode;
126
+ }): React$1.JSX.Element;
51
127
  /**
52
128
  * The sectioned member experience: the connections the organization shares,
53
129
  * then the member's own. The two lanes come from different endpoints and are
@@ -63,4 +139,4 @@ interface PipesErrorProps extends WidgetRootDomProps {
63
139
  }
64
140
  declare const PipesError: React.FC<PipesErrorProps>;
65
141
 
66
- export { Pipes, PipesError, type PipesErrorProps, PipesLoading, type PipesLoadingProps, type PipesProps, PipesSections, type PipesSectionsProps };
142
+ export { ApiKeyDialog, ClientCredentialsDialog, ConnectDialog, type ConnectionOwner, Pipes, PipesEmptyItem, PipesError, type PipesErrorProps, PipesLoading, type PipesLoadingProps, type PipesProps, PipesSection, PipesSections, type PipesSectionsProps, getUnpinnedInstallationFields, useOpenDataIntegrationAuthorizeUrl };
@@ -28,9 +28,14 @@ var import_jsx_runtime = require("react/jsx-runtime");
28
28
  var import_api_provider = require("./api/api-provider.js");
29
29
  var import_widgets_context = require("./lib/widgets-context.js");
30
30
  var import_pipes_admin = require("./lib/pipes-admin.js");
31
+ var import_endpoint = require("./api/endpoint.js");
31
32
  var import_use_is_hydrated = require("./lib/use-is-hydrated.js");
32
33
  var import_error_boundary = require("./lib/error-boundary.js");
33
- const PipesAdmin = ({ authToken, ...domProps }) => {
34
+ const PipesAdmin = ({
35
+ authToken,
36
+ enableSharedConnections,
37
+ ...domProps
38
+ }) => {
34
39
  const baseUrl = (0, import_widgets_context.useWorkOsApiUrl)();
35
40
  return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
36
41
  import_error_boundary.ErrorBoundary,
@@ -42,13 +47,25 @@ const PipesAdmin = ({ authToken, ...domProps }) => {
42
47
  widgetType: "pipes-admin",
43
48
  authToken,
44
49
  baseUrl,
45
- children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(PipesAdminImpl, { ...domProps })
50
+ children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
51
+ PipesAdminImpl,
52
+ {
53
+ enableSharedConnections,
54
+ ...domProps
55
+ }
56
+ )
46
57
  }
47
58
  )
48
59
  }
49
60
  );
50
61
  };
51
- const PipesAdminImpl = (props) => {
62
+ const PipesAdminImpl = ({
63
+ enableSharedConnections,
64
+ ...props
65
+ }) => {
66
+ return enableSharedConnections ? /* @__PURE__ */ (0, import_jsx_runtime.jsx)(PipesAdminSectionsImpl, { ...props }) : /* @__PURE__ */ (0, import_jsx_runtime.jsx)(PipesAdminProviderSettingsImpl, { ...props });
67
+ };
68
+ const PipesAdminProviderSettingsImpl = (props) => {
52
69
  const isHydrated = (0, import_use_is_hydrated.useIsHydrated)();
53
70
  const integrations = (0, import_pipes_admin.useManageableIntegrations)();
54
71
  if (!isHydrated || integrations.isLoading) {
@@ -59,6 +76,31 @@ const PipesAdminImpl = (props) => {
59
76
  }
60
77
  return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_pipes_admin.PipesAdmin, { integrations: integrations.data, ...props });
61
78
  };
79
+ const PipesAdminSectionsImpl = (props) => {
80
+ const isHydrated = (0, import_use_is_hydrated.useIsHydrated)();
81
+ const integrations = (0, import_pipes_admin.useManageableIntegrations)();
82
+ const shared = (0, import_pipes_admin.useOrganizationOwnedIntegrations)();
83
+ const organizations = (0, import_endpoint.useOrganizations)();
84
+ const organizationName = organizations.data?.data.find(
85
+ (organization) => organization.current
86
+ )?.name;
87
+ if (!isHydrated || integrations.isLoading) {
88
+ return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_pipes_admin.PipesAdminLoading, { count: 6, ...props });
89
+ }
90
+ if (integrations.isError) {
91
+ return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_pipes_admin.PipesAdminError, { error: integrations.error, ...props });
92
+ }
93
+ return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
94
+ import_pipes_admin.PipesAdminSections,
95
+ {
96
+ integrations: integrations.data,
97
+ sharedIntegrations: shared.data,
98
+ isSharedLoading: shared.isLoading,
99
+ organizationName,
100
+ ...props
101
+ }
102
+ );
103
+ };
62
104
  // Annotate the CommonJS export names for ESM import in node:
63
105
  0 && (module.exports = {
64
106
  PipesAdmin,
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/pipes-admin.client.tsx"],"sourcesContent":["\"use client\";\nimport { ApiProvider, AuthToken } from \"./api/api-provider.js\";\nimport { useWorkOsApiUrl } from \"./lib/widgets-context.js\";\nimport {\n PipesAdmin as PipesAdminPresentational,\n PipesAdminError,\n PipesAdminLoading,\n useManageableIntegrations,\n} from \"./lib/pipes-admin.js\";\nimport type {\n PipesAdminErrorProps,\n PipesAdminLoadingProps,\n} from \"./lib/pipes-admin.js\";\nimport { useIsHydrated } from \"./lib/use-is-hydrated.js\";\nimport { ErrorBoundary } from \"./lib/error-boundary.js\";\nimport { WidgetRootDomProps } from \"./lib/utils.js\";\n\ninterface PipesAdminProps extends WidgetRootDomProps {\n authToken: AuthToken;\n}\n\nconst PipesAdmin: React.FC<PipesAdminProps> = ({ authToken, ...domProps }) => {\n const baseUrl = useWorkOsApiUrl();\n\n return (\n <ErrorBoundary\n fallbackRender={({ error }) => (\n <PipesAdminError {...domProps} error={error} />\n )}\n >\n <ApiProvider\n widgetType=\"pipes-admin\"\n authToken={authToken}\n baseUrl={baseUrl}\n >\n <PipesAdminImpl {...domProps} />\n </ApiProvider>\n </ErrorBoundary>\n );\n};\n\nconst PipesAdminImpl = (props: Omit<PipesAdminProps, \"authToken\">) => {\n const isHydrated = useIsHydrated();\n const integrations = useManageableIntegrations();\n\n if (!isHydrated || integrations.isLoading) {\n return <PipesAdminLoading count={6} {...props} />;\n }\n\n if (integrations.isError) {\n return <PipesAdminError error={integrations.error} {...props} />;\n }\n\n return (\n <PipesAdminPresentational integrations={integrations.data} {...props} />\n );\n};\n\nexport type { PipesAdminProps, PipesAdminLoadingProps, PipesAdminErrorProps };\nexport { PipesAdmin, PipesAdminLoading, PipesAdminError };\n"],"mappings":";;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AA2BQ;AA1BR,0BAAuC;AACvC,6BAAgC;AAChC,yBAKO;AAKP,6BAA8B;AAC9B,4BAA8B;AAO9B,MAAM,aAAwC,CAAC,EAAE,WAAW,GAAG,SAAS,MAAM;AAC5E,QAAM,cAAU,wCAAgB;AAEhC,SACE;AAAA,IAAC;AAAA;AAAA,MACC,gBAAgB,CAAC,EAAE,MAAM,MACvB,4CAAC,sCAAiB,GAAG,UAAU,OAAc;AAAA,MAG/C;AAAA,QAAC;AAAA;AAAA,UACC,YAAW;AAAA,UACX;AAAA,UACA;AAAA,UAEA,sDAAC,kBAAgB,GAAG,UAAU;AAAA;AAAA,MAChC;AAAA;AAAA,EACF;AAEJ;AAEA,MAAM,iBAAiB,CAAC,UAA8C;AACpE,QAAM,iBAAa,sCAAc;AACjC,QAAM,mBAAe,8CAA0B;AAE/C,MAAI,CAAC,cAAc,aAAa,WAAW;AACzC,WAAO,4CAAC,wCAAkB,OAAO,GAAI,GAAG,OAAO;AAAA,EACjD;AAEA,MAAI,aAAa,SAAS;AACxB,WAAO,4CAAC,sCAAgB,OAAO,aAAa,OAAQ,GAAG,OAAO;AAAA,EAChE;AAEA,SACE,4CAAC,mBAAAA,YAAA,EAAyB,cAAc,aAAa,MAAO,GAAG,OAAO;AAE1E;","names":["PipesAdminPresentational"]}
1
+ {"version":3,"sources":["../../src/pipes-admin.client.tsx"],"sourcesContent":["\"use client\";\nimport { ApiProvider, AuthToken } from \"./api/api-provider.js\";\nimport { useWorkOsApiUrl } from \"./lib/widgets-context.js\";\nimport {\n PipesAdmin as PipesAdminPresentational,\n PipesAdminSections as PipesAdminSectionsPresentational,\n PipesAdminError,\n PipesAdminLoading,\n useManageableIntegrations,\n useOrganizationOwnedIntegrations,\n} from \"./lib/pipes-admin.js\";\nimport type {\n PipesAdminErrorProps,\n PipesAdminLoadingProps,\n} from \"./lib/pipes-admin.js\";\nimport { useOrganizations } from \"./api/endpoint.js\";\nimport { useIsHydrated } from \"./lib/use-is-hydrated.js\";\nimport { ErrorBoundary } from \"./lib/error-boundary.js\";\nimport { WidgetRootDomProps } from \"./lib/utils.js\";\n\ninterface PipesAdminProps extends WidgetRootDomProps {\n authToken: AuthToken;\n /**\n * Opt in to the sectioned administrator experience: the connections the\n * organization owns and shares with everyone (which the administrator can\n * configure, connect, reauthorize and disconnect), followed by the provider\n * settings that govern what members may connect to on their own.\n *\n * The two sections are fetched separately, so provider settings render as\n * soon as they resolve regardless of the shared section.\n *\n * Defaults to `false`, which renders the single unsectioned provider\n * settings list and never requests organization-owned connections.\n */\n enableSharedConnections?: boolean;\n}\n\nconst PipesAdmin: React.FC<PipesAdminProps> = ({\n authToken,\n enableSharedConnections,\n ...domProps\n}) => {\n const baseUrl = useWorkOsApiUrl();\n\n return (\n <ErrorBoundary\n fallbackRender={({ error }) => (\n <PipesAdminError {...domProps} error={error} />\n )}\n >\n <ApiProvider\n widgetType=\"pipes-admin\"\n authToken={authToken}\n baseUrl={baseUrl}\n >\n <PipesAdminImpl\n enableSharedConnections={enableSharedConnections}\n {...domProps}\n />\n </ApiProvider>\n </ErrorBoundary>\n );\n};\n\n// The two experiences are separate components so the opt-out path mounts no\n// organization-owned hook at all, and therefore issues exactly the requests it\n// always has.\nconst PipesAdminImpl = ({\n enableSharedConnections,\n ...props\n}: Omit<PipesAdminProps, \"authToken\">) => {\n return enableSharedConnections ? (\n <PipesAdminSectionsImpl {...props} />\n ) : (\n <PipesAdminProviderSettingsImpl {...props} />\n );\n};\n\ntype PipesAdminImplProps = Omit<\n PipesAdminProps,\n \"authToken\" | \"enableSharedConnections\"\n>;\n\nconst PipesAdminProviderSettingsImpl = (props: PipesAdminImplProps) => {\n const isHydrated = useIsHydrated();\n const integrations = useManageableIntegrations();\n\n if (!isHydrated || integrations.isLoading) {\n return <PipesAdminLoading count={6} {...props} />;\n }\n\n if (integrations.isError) {\n return <PipesAdminError error={integrations.error} {...props} />;\n }\n\n return (\n <PipesAdminPresentational integrations={integrations.data} {...props} />\n );\n};\n\nconst PipesAdminSectionsImpl = (props: PipesAdminImplProps) => {\n const isHydrated = useIsHydrated();\n const integrations = useManageableIntegrations();\n // Both sections have their own cache entry and resolve independently:\n // provider settings render as soon as they arrive, and a slow or failing\n // organization request only affects the shared section.\n const shared = useOrganizationOwnedIntegrations();\n const organizations = useOrganizations();\n const organizationName = organizations.data?.data.find(\n (organization) => organization.current,\n )?.name;\n\n if (!isHydrated || integrations.isLoading) {\n return <PipesAdminLoading count={6} {...props} />;\n }\n\n if (integrations.isError) {\n return <PipesAdminError error={integrations.error} {...props} />;\n }\n\n return (\n <PipesAdminSectionsPresentational\n integrations={integrations.data}\n sharedIntegrations={shared.data}\n isSharedLoading={shared.isLoading}\n organizationName={organizationName}\n {...props}\n />\n );\n};\n\nexport type { PipesAdminProps, PipesAdminLoadingProps, PipesAdminErrorProps };\nexport { PipesAdmin, PipesAdminLoading, PipesAdminError };\n"],"mappings":";;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AA+CQ;AA9CR,0BAAuC;AACvC,6BAAgC;AAChC,yBAOO;AAKP,sBAAiC;AACjC,6BAA8B;AAC9B,4BAA8B;AAoB9B,MAAM,aAAwC,CAAC;AAAA,EAC7C;AAAA,EACA;AAAA,EACA,GAAG;AACL,MAAM;AACJ,QAAM,cAAU,wCAAgB;AAEhC,SACE;AAAA,IAAC;AAAA;AAAA,MACC,gBAAgB,CAAC,EAAE,MAAM,MACvB,4CAAC,sCAAiB,GAAG,UAAU,OAAc;AAAA,MAG/C;AAAA,QAAC;AAAA;AAAA,UACC,YAAW;AAAA,UACX;AAAA,UACA;AAAA,UAEA;AAAA,YAAC;AAAA;AAAA,cACC;AAAA,cACC,GAAG;AAAA;AAAA,UACN;AAAA;AAAA,MACF;AAAA;AAAA,EACF;AAEJ;AAKA,MAAM,iBAAiB,CAAC;AAAA,EACtB;AAAA,EACA,GAAG;AACL,MAA0C;AACxC,SAAO,0BACL,4CAAC,0BAAwB,GAAG,OAAO,IAEnC,4CAAC,kCAAgC,GAAG,OAAO;AAE/C;AAOA,MAAM,iCAAiC,CAAC,UAA+B;AACrE,QAAM,iBAAa,sCAAc;AACjC,QAAM,mBAAe,8CAA0B;AAE/C,MAAI,CAAC,cAAc,aAAa,WAAW;AACzC,WAAO,4CAAC,wCAAkB,OAAO,GAAI,GAAG,OAAO;AAAA,EACjD;AAEA,MAAI,aAAa,SAAS;AACxB,WAAO,4CAAC,sCAAgB,OAAO,aAAa,OAAQ,GAAG,OAAO;AAAA,EAChE;AAEA,SACE,4CAAC,mBAAAA,YAAA,EAAyB,cAAc,aAAa,MAAO,GAAG,OAAO;AAE1E;AAEA,MAAM,yBAAyB,CAAC,UAA+B;AAC7D,QAAM,iBAAa,sCAAc;AACjC,QAAM,mBAAe,8CAA0B;AAI/C,QAAM,aAAS,qDAAiC;AAChD,QAAM,oBAAgB,kCAAiB;AACvC,QAAM,mBAAmB,cAAc,MAAM,KAAK;AAAA,IAChD,CAAC,iBAAiB,aAAa;AAAA,EACjC,GAAG;AAEH,MAAI,CAAC,cAAc,aAAa,WAAW;AACzC,WAAO,4CAAC,wCAAkB,OAAO,GAAI,GAAG,OAAO;AAAA,EACjD;AAEA,MAAI,aAAa,SAAS;AACxB,WAAO,4CAAC,sCAAgB,OAAO,aAAa,OAAQ,GAAG,OAAO;AAAA,EAChE;AAEA,SACE;AAAA,IAAC,mBAAAC;AAAA,IAAA;AAAA,MACC,cAAc,aAAa;AAAA,MAC3B,oBAAoB,OAAO;AAAA,MAC3B,iBAAiB,OAAO;AAAA,MACxB;AAAA,MACC,GAAG;AAAA;AAAA,EACN;AAEJ;","names":["PipesAdminPresentational","PipesAdminSectionsPresentational"]}
@@ -19,6 +19,19 @@ import '@radix-ui/themes/components/select';
19
19
 
20
20
  interface PipesAdminProps extends WidgetRootDomProps {
21
21
  authToken: AuthToken;
22
+ /**
23
+ * Opt in to the sectioned administrator experience: the connections the
24
+ * organization owns and shares with everyone (which the administrator can
25
+ * configure, connect, reauthorize and disconnect), followed by the provider
26
+ * settings that govern what members may connect to on their own.
27
+ *
28
+ * The two sections are fetched separately, so provider settings render as
29
+ * soon as they resolve regardless of the shared section.
30
+ *
31
+ * Defaults to `false`, which renders the single unsectioned provider
32
+ * settings list and never requests organization-owned connections.
33
+ */
34
+ enableSharedConnections?: boolean;
22
35
  }
23
36
  declare const PipesAdmin: React.FC<PipesAdminProps>;
24
37
 
@@ -1,9 +1,9 @@
1
- import { DataIntegrationConfiguration } from '../api/endpoint.js';
1
+ import * as React from 'react';
2
+ import { DataIntegrationConfiguration, OrganizationDataIntegration } from '../api/endpoint.js';
2
3
  import { WidgetRootDomProps } from './utils.js';
3
4
  import '@tanstack/react-query';
4
5
  import '../api/widgets-api-client.js';
5
6
  import './elements.js';
6
- import 'react';
7
7
  import '@radix-ui/themes';
8
8
  import '@radix-ui/themes/props';
9
9
  import '../dialog-CGXwsXVe.js';
@@ -29,6 +29,18 @@ declare function useManageableIntegrations(): {
29
29
  isError: boolean;
30
30
  error: unknown;
31
31
  };
32
+ /**
33
+ * Integrations the organization owns and shares with everyone, with the
34
+ * organization's configuration and the actions the server allows on them.
35
+ * Gated on the same manage permission as provider settings, but cached
36
+ * separately so the two sections resolve independently. Like the member
37
+ * widget, a failed attempt drops the section rather than leaving skeletons up
38
+ * for the whole retry sequence.
39
+ */
40
+ declare function useOrganizationOwnedIntegrations(): {
41
+ data: OrganizationDataIntegration[];
42
+ isLoading: boolean;
43
+ };
32
44
  interface PipesAdminProps extends WidgetRootDomProps {
33
45
  integrations: DataIntegrationConfiguration[];
34
46
  }
@@ -38,6 +50,30 @@ interface PipesAdminProps extends WidgetRootDomProps {
38
50
  * Presentational — the client wrapper fetches via `useManageableIntegrations`.
39
51
  */
40
52
  declare const PipesAdmin: React.FC<PipesAdminProps>;
53
+ interface PipesAdminSectionsProps extends PipesAdminProps {
54
+ /**
55
+ * Organization-owned integrations, as returned by the organization
56
+ * endpoint. Empty while loading, when the organization owns nothing, and
57
+ * when the request failed.
58
+ */
59
+ sharedIntegrations: OrganizationDataIntegration[];
60
+ /** Renders the shared section as skeleton rows while it resolves. */
61
+ isSharedLoading?: boolean;
62
+ /** Names the owning organization in the shared section's description. */
63
+ organizationName?: string;
64
+ }
65
+ /**
66
+ * The sectioned administrator experience: the connections the organization
67
+ * owns and shares with everyone, then the provider settings governing what
68
+ * members may connect on their own. The two lanes come from different
69
+ * endpoints and are never merged — the same provider can legitimately appear
70
+ * in both, once as the organization's own account and once as the policy for
71
+ * members' personal accounts.
72
+ *
73
+ * The shared section is omitted when the organization owns nothing or the
74
+ * request failed, leaving provider settings on their own.
75
+ */
76
+ declare const PipesAdminSections: React.FC<PipesAdminSectionsProps>;
41
77
  interface PipesAdminLoadingProps extends WidgetRootDomProps {
42
78
  count: number;
43
79
  }
@@ -47,4 +83,4 @@ interface PipesAdminErrorProps extends WidgetRootDomProps {
47
83
  }
48
84
  declare const PipesAdminError: React.FC<PipesAdminErrorProps>;
49
85
 
50
- export { PipesAdmin, PipesAdminError, type PipesAdminErrorProps, PipesAdminLoading, type PipesAdminLoadingProps, type PipesAdminProps, useManageableIntegrations };
86
+ export { PipesAdmin, PipesAdminError, type PipesAdminErrorProps, PipesAdminLoading, type PipesAdminLoadingProps, type PipesAdminProps, PipesAdminSections, type PipesAdminSectionsProps, useManageableIntegrations, useOrganizationOwnedIntegrations };