@burdenoff/microfe-organization 2026.616.1 → 2026.624.2
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/organization-management/AdminOrganizationRoot.js +4 -4
- package/dist/organization-management/AdminOrganizationRoot.js.map +1 -1
- package/dist/organization-management/UserOrganizationRoot.js +4 -4
- package/dist/organization-management/UserOrganizationRoot.js.map +1 -1
- package/dist/organization-management/modules/members/components/BulkInviteForm.js +157 -176
- package/dist/organization-management/modules/members/components/BulkInviteForm.js.map +1 -1
- package/dist/organization-management/modules/members/components/InviteMemberForm.js +2 -2
- package/dist/organization-management/modules/members/components/InviteMemberForm.js.map +1 -1
- package/dist/organization-management/modules/members/components/MyInviteCard.js +2 -2
- package/dist/organization-management/modules/members/components/MyInviteCard.js.map +1 -1
- package/dist/organization-management/modules/members/components/PendingInvitesList.js +78 -101
- package/dist/organization-management/modules/members/components/PendingInvitesList.js.map +1 -1
- package/dist/organization-management/modules/members/pages/InvitePeoplePage.js +1 -1
- package/dist/organization-management/modules/members/pages/InvitePeoplePage.js.map +1 -1
- package/dist/organization-management/modules/members/pages/MemberDetailPage.js +2 -2
- package/dist/organization-management/modules/members/pages/MemberDetailPage.js.map +1 -1
- package/dist/organization-management/modules/members/pages/MembersListPage.js +3 -3
- package/dist/organization-management/modules/members/pages/MembersListPage.js.map +1 -1
- package/dist/organization-management/modules/members/pages/MyInvitesPage.js +2 -2
- package/dist/organization-management/modules/members/pages/MyInvitesPage.js.map +1 -1
- package/dist/organization-management/modules/members/pages/OrganizationInviteAcceptancePage.js +5 -5
- package/dist/organization-management/modules/members/pages/OrganizationInviteAcceptancePage.js.map +1 -1
- package/dist/organization-management/modules/organizations/components/OrganizationForm.js +2 -2
- package/dist/organization-management/modules/organizations/components/OrganizationForm.js.map +1 -1
- package/dist/organization-management/modules/organizations/pages/OrganizationCreatePage.js +2 -2
- package/dist/organization-management/modules/organizations/pages/OrganizationCreatePage.js.map +1 -1
- package/dist/organization-management/modules/organizations/pages/OrganizationDetailPage.js +4 -4
- package/dist/organization-management/modules/organizations/pages/OrganizationDetailPage.js.map +1 -1
- package/dist/organization-management/modules/organizations/pages/OrganizationEditPage.js +2 -2
- package/dist/organization-management/modules/organizations/pages/OrganizationEditPage.js.map +1 -1
- package/dist/organization-management/modules/organizations/pages/OrganizationsListPage.js +5 -5
- package/dist/organization-management/modules/organizations/pages/OrganizationsListPage.js.map +1 -1
- package/dist/organization-management/modules/workspaces/components/WorkspaceCard.js +3 -3
- package/dist/organization-management/modules/workspaces/components/WorkspaceCard.js.map +1 -1
- package/dist/organization-management/modules/workspaces/components/WorkspaceForm.js +2 -2
- package/dist/organization-management/modules/workspaces/components/WorkspaceForm.js.map +1 -1
- package/dist/organization-management/modules/workspaces/pages/WorkspaceCreatePage.js +2 -2
- package/dist/organization-management/modules/workspaces/pages/WorkspaceCreatePage.js.map +1 -1
- package/dist/organization-management/modules/workspaces/pages/WorkspaceDetailPage.js +215 -285
- package/dist/organization-management/modules/workspaces/pages/WorkspaceDetailPage.js.map +1 -1
- package/dist/organization-management/modules/workspaces/pages/WorkspaceEditPage.js +2 -2
- package/dist/organization-management/modules/workspaces/pages/WorkspaceEditPage.js.map +1 -1
- package/dist/organization-management/modules/workspaces/pages/WorkspacesListPage.js +4 -4
- package/dist/organization-management/modules/workspaces/pages/WorkspacesListPage.js.map +1 -1
- package/dist/organization-management/shared/components/feedback/EmptyState.js +2 -2
- package/dist/organization-management/shared/components/feedback/EmptyState.js.map +1 -1
- package/dist/organization-management/shared/components/feedback/ErrorState.js +2 -2
- package/dist/organization-management/shared/components/feedback/ErrorState.js.map +1 -1
- package/dist/organization-management/shared/components/feedback/LoadingState.js +1 -1
- package/dist/organization-management/shared/components/feedback/LoadingState.js.map +1 -1
- package/dist/organization-management/shared/components/input/SearchInput.js +1 -1
- package/dist/organization-management/shared/components/input/SearchInput.js.map +1 -1
- package/package.json +1 -1
|
@@ -7,7 +7,7 @@ import { FeatureFlagProvider as c } from "@burdenoff/fe-libs/shared/feature-flag
|
|
|
7
7
|
import { jsx as l, jsxs as u } from "react/jsx-runtime";
|
|
8
8
|
//#region src/organization-management/AdminOrganizationRoot.tsx
|
|
9
9
|
var d = (d) => {
|
|
10
|
-
let { registerNavItems: f, registerFooterItems: p, basePath: m = "/organizations" } = d,
|
|
10
|
+
let { registerNavItems: f, registerFooterItems: p, basePath: m = "/organizations", renderToaster: h = !1 } = d, g = (e, t) => (e.endsWith("/") ? e.slice(0, -1) : e) + (t.startsWith("/") ? t : `/${t}`);
|
|
11
11
|
return n(() => {
|
|
12
12
|
if (f) return f([
|
|
13
13
|
{
|
|
@@ -21,7 +21,7 @@ var d = (d) => {
|
|
|
21
21
|
{
|
|
22
22
|
id: "admin-org-workspaces",
|
|
23
23
|
label: "Workspaces",
|
|
24
|
-
path:
|
|
24
|
+
path: g(m, "/workspaces"),
|
|
25
25
|
icon: /* @__PURE__ */ l(r, { size: 20 }),
|
|
26
26
|
order: 40,
|
|
27
27
|
group: "globalconsole"
|
|
@@ -37,7 +37,7 @@ var d = (d) => {
|
|
|
37
37
|
{
|
|
38
38
|
id: "admin-org-invites",
|
|
39
39
|
label: "My Invites",
|
|
40
|
-
path:
|
|
40
|
+
path: g(m, "/invites"),
|
|
41
41
|
icon: /* @__PURE__ */ l(a, { size: 20 }),
|
|
42
42
|
order: 60,
|
|
43
43
|
group: "globalconsole"
|
|
@@ -57,7 +57,7 @@ var d = (d) => {
|
|
|
57
57
|
defaultEnabled: !0,
|
|
58
58
|
children: /* @__PURE__ */ u(e, {
|
|
59
59
|
...d,
|
|
60
|
-
children: [/* @__PURE__ */ l(t, {}), /* @__PURE__ */ l(s, {
|
|
60
|
+
children: [/* @__PURE__ */ l(t, {}), h && /* @__PURE__ */ l(s, {
|
|
61
61
|
position: "top-right",
|
|
62
62
|
richColors: !0,
|
|
63
63
|
closeButton: !0
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AdminOrganizationRoot.js","names":[],"sources":["../../src/organization-management/AdminOrganizationRoot.tsx"],"sourcesContent":["import type { FC } from 'react';\nimport { useEffect } from 'react';\nimport { Building, Briefcase, Mail, Users } from 'lucide-react';\nimport { Toaster } from '@burdenoff/fe-libs/ui';\nimport { FeatureFlagProvider } from '@burdenoff/fe-libs/shared/feature-flags';\nimport { OrgConsoleProvider } from './providers/OrgConsoleProvider';\nimport type { NavItem, OrganizationRootProps } from './types';\nimport { AdminOrganizationRoutes } from './AdminOrganizationRoutes';\n\n/**\n * AdminOrganizationRoot\n *\n * Full-capability root for the organization management MFE, intended to\n * be mounted inside the admin application. Exposes organizations,\n * workspaces, members, and invites management — registering nav items\n * for each top-level surface with IDs prefixed `admin-org-*`.\n *\n * Takes the same props as `OrganizationRootProps` so hosts can\n * swap between the user and admin roots without adapter code.\n */\nexport const AdminOrganizationRoot: FC<OrganizationRootProps> = (props) => {\n const {
|
|
1
|
+
{"version":3,"file":"AdminOrganizationRoot.js","names":[],"sources":["../../src/organization-management/AdminOrganizationRoot.tsx"],"sourcesContent":["import type { FC } from 'react';\nimport { useEffect } from 'react';\nimport { Building, Briefcase, Mail, Users } from 'lucide-react';\nimport { Toaster } from '@burdenoff/fe-libs/ui';\nimport { FeatureFlagProvider } from '@burdenoff/fe-libs/shared/feature-flags';\nimport { OrgConsoleProvider } from './providers/OrgConsoleProvider';\nimport type { NavItem, OrganizationRootProps } from './types';\nimport { AdminOrganizationRoutes } from './AdminOrganizationRoutes';\n\n/**\n * AdminOrganizationRoot\n *\n * Full-capability root for the organization management MFE, intended to\n * be mounted inside the admin application. Exposes organizations,\n * workspaces, members, and invites management — registering nav items\n * for each top-level surface with IDs prefixed `admin-org-*`.\n *\n * Takes the same props as `OrganizationRootProps` so hosts can\n * swap between the user and admin roots without adapter code.\n */\nexport const AdminOrganizationRoot: FC<OrganizationRootProps> = (props) => {\n const {\n registerNavItems,\n registerFooterItems,\n basePath = '/organizations',\n renderToaster = false,\n } = props;\n\n const joinPath = (base: string, path: string): string => {\n const cleanBase = base.endsWith('/') ? base.slice(0, -1) : base;\n const cleanPath = path.startsWith('/') ? path : `/${path}`;\n return cleanBase + cleanPath;\n };\n\n useEffect(() => {\n if (!registerNavItems) return;\n\n const navItems: NavItem[] = [\n {\n id: 'admin-org-organizations',\n label: 'Organizations',\n path: basePath,\n icon: <Building size={20} />,\n order: 30,\n group: 'globalconsole',\n },\n {\n id: 'admin-org-workspaces',\n label: 'Workspaces',\n path: joinPath(basePath, '/workspaces'),\n icon: <Briefcase size={20} />,\n order: 40,\n group: 'globalconsole',\n },\n {\n id: 'admin-org-members',\n label: 'Members',\n // Members are accessed through org detail pages; point at orgs\n // list so admins have a discoverable entry point in the\n // top-level nav.\n path: basePath,\n icon: <Users size={20} />,\n order: 50,\n group: 'globalconsole',\n },\n {\n id: 'admin-org-invites',\n label: 'My Invites',\n path: joinPath(basePath, '/invites'),\n icon: <Mail size={20} />,\n order: 60,\n group: 'globalconsole',\n },\n ];\n\n const cleanup = registerNavItems(navItems);\n return cleanup;\n }, [registerNavItems, basePath]);\n\n useEffect(() => {\n if (!registerFooterItems) return;\n\n const footerItems = [\n {\n id: 'organization-management-version',\n label: 'Organization Management v0.1.0',\n type: 'status' as const,\n order: 30,\n section: 'left' as const,\n },\n ];\n\n const cleanup = registerFooterItems(footerItems);\n return cleanup;\n }, [registerFooterItems]);\n\n return (\n <FeatureFlagProvider workspaceId={null} gateway=\"global\" defaultEnabled={true}>\n <OrgConsoleProvider {...props}>\n <AdminOrganizationRoutes />\n {renderToaster && <Toaster position=\"top-right\" richColors closeButton />}\n </OrgConsoleProvider>\n </FeatureFlagProvider>\n );\n};\n"],"mappings":";;;;;;;;AAoBA,IAAa,KAAoD,MAAU;CACzE,IAAM,EACJ,qBACA,wBACA,cAAW,kBACX,mBAAgB,OACd,GAEE,KAAY,GAAc,OACZ,EAAK,SAAS,IAAI,GAAG,EAAK,MAAM,GAAG,GAAG,GAAG,MACzC,EAAK,WAAW,IAAI,GAAG,IAAO,IAAI;AAkEtD,QA9DA,QAAgB;AACT,QAyCL,QADgB,EAtCY;GAC1B;IACE,IAAI;IACJ,OAAO;IACP,MAAM;IACN,MAAM,kBAAC,GAAD,EAAU,MAAM,IAAM,CAAA;IAC5B,OAAO;IACP,OAAO;IACR;GACD;IACE,IAAI;IACJ,OAAO;IACP,MAAM,EAAS,GAAU,cAAc;IACvC,MAAM,kBAAC,GAAD,EAAW,MAAM,IAAM,CAAA;IAC7B,OAAO;IACP,OAAO;IACR;GACD;IACE,IAAI;IACJ,OAAO;IAIP,MAAM;IACN,MAAM,kBAAC,GAAD,EAAO,MAAM,IAAM,CAAA;IACzB,OAAO;IACP,OAAO;IACR;GACD;IACE,IAAI;IACJ,OAAO;IACP,MAAM,EAAS,GAAU,WAAW;IACpC,MAAM,kBAAC,GAAD,EAAM,MAAM,IAAM,CAAA;IACxB,OAAO;IACP,OAAO;IACR;GACF,CAEyC;IAEzC,CAAC,GAAkB,EAAS,CAAC,EAEhC,QAAgB;AACT,QAaL,QADgB,EAVI,CAClB;GACE,IAAI;GACJ,OAAO;GACP,MAAM;GACN,OAAO;GACP,SAAS;GACV,CACF,CAE+C;IAE/C,CAAC,EAAoB,CAAC,EAGvB,kBAAC,GAAD;EAAqB,aAAa;EAAM,SAAQ;EAAS,gBAAgB;YACvE,kBAAC,GAAD;GAAoB,GAAI;aAAxB,CACE,kBAAC,GAAD,EAA2B,CAAA,EAC1B,KAAiB,kBAAC,GAAD;IAAS,UAAS;IAAY,YAAA;IAAW,aAAA;IAAc,CAAA,CACtD;;EACD,CAAA"}
|
|
@@ -7,7 +7,7 @@ import { FeatureFlagProvider as s } from "@burdenoff/fe-libs/shared/feature-flag
|
|
|
7
7
|
import { jsx as c, jsxs as l } from "react/jsx-runtime";
|
|
8
8
|
//#region src/organization-management/UserOrganizationRoot.tsx
|
|
9
9
|
var u = (u) => {
|
|
10
|
-
let { registerNavItems: d, registerFooterItems: f, basePath: p = "/organizations" } = u,
|
|
10
|
+
let { registerNavItems: d, registerFooterItems: f, basePath: p = "/organizations", renderToaster: m = !1 } = u, h = (e, t) => (e.endsWith("/") ? e.slice(0, -1) : e) + (t.startsWith("/") ? t : `/${t}`);
|
|
11
11
|
return n(() => {
|
|
12
12
|
if (d) return d([
|
|
13
13
|
{
|
|
@@ -21,7 +21,7 @@ var u = (u) => {
|
|
|
21
21
|
{
|
|
22
22
|
id: "user-org-invite-people",
|
|
23
23
|
label: "Invite People",
|
|
24
|
-
path:
|
|
24
|
+
path: h(p, "/invite"),
|
|
25
25
|
icon: /* @__PURE__ */ c(a, { size: 20 }),
|
|
26
26
|
order: 25,
|
|
27
27
|
group: "user"
|
|
@@ -29,7 +29,7 @@ var u = (u) => {
|
|
|
29
29
|
{
|
|
30
30
|
id: "user-org-invites",
|
|
31
31
|
label: "My Invites",
|
|
32
|
-
path:
|
|
32
|
+
path: h(p, "/invites"),
|
|
33
33
|
icon: /* @__PURE__ */ c(i, { size: 20 }),
|
|
34
34
|
order: 30,
|
|
35
35
|
group: "user"
|
|
@@ -49,7 +49,7 @@ var u = (u) => {
|
|
|
49
49
|
defaultEnabled: !0,
|
|
50
50
|
children: /* @__PURE__ */ l(e, {
|
|
51
51
|
...u,
|
|
52
|
-
children: [/* @__PURE__ */ c(t, {}), /* @__PURE__ */ c(o, {
|
|
52
|
+
children: [/* @__PURE__ */ c(t, {}), m && /* @__PURE__ */ c(o, {
|
|
53
53
|
position: "top-right",
|
|
54
54
|
richColors: !0,
|
|
55
55
|
closeButton: !0
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"UserOrganizationRoot.js","names":[],"sources":["../../src/organization-management/UserOrganizationRoot.tsx"],"sourcesContent":["import type { FC } from 'react';\nimport { useEffect } from 'react';\nimport { Building2, Mail, UserPlus } from 'lucide-react';\nimport { Toaster } from '@burdenoff/fe-libs/ui';\nimport { FeatureFlagProvider } from '@burdenoff/fe-libs/shared/feature-flags';\nimport { OrgConsoleProvider } from './providers/OrgConsoleProvider';\nimport type { NavItem, OrganizationRootProps } from './types';\nimport { UserOrganizationRoutes } from './UserOrganizationRoutes';\n\n/**\n * UserOrganizationRoot\n *\n * User-facing root for the organization management MFE, intended to be\n * mounted inside product shells (workspaces, botlit, fluidgrids, etc.).\n *\n * Exposes the membership-scoped organization surface:\n * - Organizations list (`mode=\"my\"` → `myOrganizations`)\n * - Organization detail / edit (per-action `hasPermission` gates;\n * backend enforces membership on `organization(id)` resolver)\n * - Members list / detail / invite (backend enforces membership on\n * `organizationMembers` resolver)\n * - My pending invites\n *\n * Registers \"Organizations\" + \"My Invites\" nav items.\n *\n * Takes the same props as `OrganizationRootProps` so hosts can swap\n * between the user and admin roots without adapter code.\n */\nexport const UserOrganizationRoot: FC<OrganizationRootProps> = (props) => {\n const {
|
|
1
|
+
{"version":3,"file":"UserOrganizationRoot.js","names":[],"sources":["../../src/organization-management/UserOrganizationRoot.tsx"],"sourcesContent":["import type { FC } from 'react';\nimport { useEffect } from 'react';\nimport { Building2, Mail, UserPlus } from 'lucide-react';\nimport { Toaster } from '@burdenoff/fe-libs/ui';\nimport { FeatureFlagProvider } from '@burdenoff/fe-libs/shared/feature-flags';\nimport { OrgConsoleProvider } from './providers/OrgConsoleProvider';\nimport type { NavItem, OrganizationRootProps } from './types';\nimport { UserOrganizationRoutes } from './UserOrganizationRoutes';\n\n/**\n * UserOrganizationRoot\n *\n * User-facing root for the organization management MFE, intended to be\n * mounted inside product shells (workspaces, botlit, fluidgrids, etc.).\n *\n * Exposes the membership-scoped organization surface:\n * - Organizations list (`mode=\"my\"` → `myOrganizations`)\n * - Organization detail / edit (per-action `hasPermission` gates;\n * backend enforces membership on `organization(id)` resolver)\n * - Members list / detail / invite (backend enforces membership on\n * `organizationMembers` resolver)\n * - My pending invites\n *\n * Registers \"Organizations\" + \"My Invites\" nav items.\n *\n * Takes the same props as `OrganizationRootProps` so hosts can swap\n * between the user and admin roots without adapter code.\n */\nexport const UserOrganizationRoot: FC<OrganizationRootProps> = (props) => {\n const {\n registerNavItems,\n registerFooterItems,\n basePath = '/organizations',\n renderToaster = false,\n } = props;\n\n const joinPath = (base: string, path: string): string => {\n const cleanBase = base.endsWith('/') ? base.slice(0, -1) : base;\n const cleanPath = path.startsWith('/') ? path : `/${path}`;\n return cleanBase + cleanPath;\n };\n\n useEffect(() => {\n if (!registerNavItems) return;\n\n const navItems: NavItem[] = [\n {\n id: 'user-org-organizations',\n label: 'Organizations',\n path: basePath,\n icon: <Building2 size={20} />,\n order: 20,\n group: 'user',\n },\n {\n id: 'user-org-invite-people',\n label: 'Invite People',\n path: joinPath(basePath, '/invite'),\n icon: <UserPlus size={20} />,\n order: 25,\n group: 'user',\n },\n {\n id: 'user-org-invites',\n label: 'My Invites',\n path: joinPath(basePath, '/invites'),\n icon: <Mail size={20} />,\n order: 30,\n group: 'user',\n },\n ];\n\n const cleanup = registerNavItems(navItems);\n return cleanup;\n }, [registerNavItems, basePath]);\n\n useEffect(() => {\n if (!registerFooterItems) return;\n\n const footerItems = [\n {\n id: 'user-organization-version',\n label: 'Organization (User) v0.1.0',\n type: 'status' as const,\n order: 30,\n section: 'left' as const,\n },\n ];\n\n const cleanup = registerFooterItems(footerItems);\n return cleanup;\n }, [registerFooterItems]);\n\n return (\n <FeatureFlagProvider workspaceId={null} gateway=\"global\" defaultEnabled={true}>\n <OrgConsoleProvider {...props}>\n <UserOrganizationRoutes />\n {renderToaster && <Toaster position=\"top-right\" richColors closeButton />}\n </OrgConsoleProvider>\n </FeatureFlagProvider>\n );\n};\n"],"mappings":";;;;;;;;AA4BA,IAAa,KAAmD,MAAU;CACxE,IAAM,EACJ,qBACA,wBACA,cAAW,kBACX,mBAAgB,OACd,GAEE,KAAY,GAAc,OACZ,EAAK,SAAS,IAAI,GAAG,EAAK,MAAM,GAAG,GAAG,GAAG,MACzC,EAAK,WAAW,IAAI,GAAG,IAAO,IAAI;AAuDtD,QAnDA,QAAgB;AACT,QA8BL,QADgB,EA3BY;GAC1B;IACE,IAAI;IACJ,OAAO;IACP,MAAM;IACN,MAAM,kBAAC,GAAD,EAAW,MAAM,IAAM,CAAA;IAC7B,OAAO;IACP,OAAO;IACR;GACD;IACE,IAAI;IACJ,OAAO;IACP,MAAM,EAAS,GAAU,UAAU;IACnC,MAAM,kBAAC,GAAD,EAAU,MAAM,IAAM,CAAA;IAC5B,OAAO;IACP,OAAO;IACR;GACD;IACE,IAAI;IACJ,OAAO;IACP,MAAM,EAAS,GAAU,WAAW;IACpC,MAAM,kBAAC,GAAD,EAAM,MAAM,IAAM,CAAA;IACxB,OAAO;IACP,OAAO;IACR;GACF,CAEyC;IAEzC,CAAC,GAAkB,EAAS,CAAC,EAEhC,QAAgB;AACT,QAaL,QADgB,EAVI,CAClB;GACE,IAAI;GACJ,OAAO;GACP,MAAM;GACN,OAAO;GACP,SAAS;GACV,CACF,CAE+C;IAE/C,CAAC,EAAoB,CAAC,EAGvB,kBAAC,GAAD;EAAqB,aAAa;EAAM,SAAQ;EAAS,gBAAgB;YACvE,kBAAC,GAAD;GAAoB,GAAI;aAAxB,CACE,kBAAC,GAAD,EAA0B,CAAA,EACzB,KAAiB,kBAAC,GAAD;IAAS,UAAS;IAAY,YAAA;IAAW,aAAA;IAAc,CAAA,CACtD;;EACD,CAAA"}
|
|
@@ -3,57 +3,58 @@ import { useTr as t } from "../../../shared/hooks/useTr.js";
|
|
|
3
3
|
import { downloadTemplate as n, formatInviteError as r, parseBulkInviteCsv as i } from "../utils/bulkInviteCsv.js";
|
|
4
4
|
import { useCallback as a, useMemo as o, useRef as s, useState as c } from "react";
|
|
5
5
|
import { CheckCircle2 as l, Download as u, Loader2 as d, Send as f, Upload as p, XCircle as m } from "lucide-react";
|
|
6
|
-
import {
|
|
6
|
+
import { ResponsiveTable as h } from "@burdenoff/fe-libs/ui";
|
|
7
|
+
import { Fragment as g, jsx as _, jsxs as v } from "react/jsx-runtime";
|
|
7
8
|
//#region src/organization-management/modules/members/components/BulkInviteForm.tsx
|
|
8
|
-
function
|
|
9
|
-
let
|
|
9
|
+
function y({ organizationId: y, inviteMember: b, onCancel: x, loading: S }) {
|
|
10
|
+
let C = t(), w = s(null), [T, E] = c([]), [D, O] = c(null), [k, A] = c(!1), [j, M] = c(!1), N = a((t) => {
|
|
10
11
|
let n = new FileReader();
|
|
11
12
|
n.onload = () => {
|
|
12
|
-
|
|
13
|
+
E(i(typeof n.result == "string" ? n.result : "").map((e) => ({
|
|
13
14
|
...e,
|
|
14
15
|
status: { kind: "idle" }
|
|
15
|
-
}))),
|
|
16
|
+
}))), O(t.name);
|
|
16
17
|
}, n.onerror = () => {
|
|
17
|
-
e.error(
|
|
18
|
+
e.error(C("members.bulkInvite.readError", "Failed to read CSV file."));
|
|
18
19
|
}, n.readAsText(t);
|
|
19
|
-
}, [
|
|
20
|
+
}, [C]), P = (e) => {
|
|
20
21
|
let t = e.target.files?.[0];
|
|
21
|
-
t &&
|
|
22
|
-
},
|
|
23
|
-
e.preventDefault(),
|
|
22
|
+
t && N(t), e.target.value = "";
|
|
23
|
+
}, F = (e) => {
|
|
24
|
+
e.preventDefault(), M(!1);
|
|
24
25
|
let t = e.dataTransfer.files?.[0];
|
|
25
|
-
t &&
|
|
26
|
-
},
|
|
27
|
-
total:
|
|
28
|
-
withErrors:
|
|
29
|
-
sendable:
|
|
30
|
-
invited:
|
|
31
|
-
failed:
|
|
32
|
-
}), [
|
|
33
|
-
if (
|
|
34
|
-
|
|
35
|
-
let t =
|
|
26
|
+
t && N(t);
|
|
27
|
+
}, I = o(() => ({
|
|
28
|
+
total: T.length,
|
|
29
|
+
withErrors: T.filter((e) => e.errors.length > 0).length,
|
|
30
|
+
sendable: T.filter((e) => e.errors.length === 0).length,
|
|
31
|
+
invited: T.filter((e) => e.status.kind === "invited").length,
|
|
32
|
+
failed: T.filter((e) => e.status.kind === "failed").length
|
|
33
|
+
}), [T]), L = async () => {
|
|
34
|
+
if (I.sendable === 0 || k) return;
|
|
35
|
+
A(!0);
|
|
36
|
+
let t = T.map((e, t) => ({
|
|
36
37
|
r: e,
|
|
37
38
|
idx: t
|
|
38
39
|
})).filter(({ r: e }) => e.errors.length === 0 && e.status.kind !== "invited");
|
|
39
40
|
for (let { idx: e } of t) {
|
|
40
|
-
|
|
41
|
+
E((t) => t.map((t, n) => n === e ? {
|
|
41
42
|
...t,
|
|
42
43
|
status: { kind: "sending" }
|
|
43
44
|
} : t));
|
|
44
|
-
let t =
|
|
45
|
+
let t = T[e];
|
|
45
46
|
try {
|
|
46
|
-
await
|
|
47
|
-
organizationId:
|
|
47
|
+
await b({
|
|
48
|
+
organizationId: y,
|
|
48
49
|
email: t.email,
|
|
49
50
|
message: t.message
|
|
50
|
-
}),
|
|
51
|
+
}), E((t) => t.map((t, n) => n === e ? {
|
|
51
52
|
...t,
|
|
52
53
|
status: { kind: "invited" }
|
|
53
54
|
} : t));
|
|
54
55
|
} catch (t) {
|
|
55
|
-
let n = r(t,
|
|
56
|
-
|
|
56
|
+
let n = r(t, C);
|
|
57
|
+
E((t) => t.map((t, r) => r === e ? {
|
|
57
58
|
...t,
|
|
58
59
|
status: {
|
|
59
60
|
kind: "failed",
|
|
@@ -62,230 +63,210 @@ function v({ organizationId: v, inviteMember: y, onCancel: b, loading: x }) {
|
|
|
62
63
|
} : t));
|
|
63
64
|
}
|
|
64
65
|
}
|
|
65
|
-
|
|
66
|
+
A(!1), E((t) => {
|
|
66
67
|
let n = t.filter((e) => e.status.kind === "invited").length, r = t.filter((e) => e.status.kind === "failed").length;
|
|
67
|
-
return e.success(`${
|
|
68
|
+
return e.success(`${C("members.bulkInvite.summaryInvited", "Invited")} ${n} ${C("members.bulkInvite.summaryOf", "of")} ${t.length}. ${r} ${C("members.bulkInvite.summaryFailed", "failed")}.`), t;
|
|
68
69
|
});
|
|
69
|
-
},
|
|
70
|
-
|
|
70
|
+
}, R = T.length > 0, z = I.sendable > 0 && !k && !S, B = (e) => e.errors.length > 0 ? /* @__PURE__ */ v("span", {
|
|
71
|
+
className: "inline-flex items-center gap-1 text-[var(--color-status-error-text)]",
|
|
72
|
+
children: [/* @__PURE__ */ _(m, {
|
|
73
|
+
size: 14,
|
|
74
|
+
"aria-hidden": "true"
|
|
75
|
+
}), e.errors.join(" ")]
|
|
76
|
+
}) : e.status.kind === "sending" ? /* @__PURE__ */ v("span", {
|
|
77
|
+
className: "inline-flex items-center gap-1 text-[var(--color-text-secondary)]",
|
|
78
|
+
children: [/* @__PURE__ */ _(d, {
|
|
79
|
+
size: 14,
|
|
80
|
+
className: "animate-spin",
|
|
81
|
+
"aria-hidden": "true"
|
|
82
|
+
}), C("members.bulkInvite.statusSending", "Sending...")]
|
|
83
|
+
}) : e.status.kind === "invited" ? /* @__PURE__ */ v("span", {
|
|
84
|
+
className: "inline-flex items-center gap-1 text-[var(--color-status-success-text)]",
|
|
85
|
+
children: [/* @__PURE__ */ _(l, {
|
|
86
|
+
size: 14,
|
|
87
|
+
"aria-hidden": "true"
|
|
88
|
+
}), C("members.bulkInvite.statusInvited", "Invited")]
|
|
89
|
+
}) : e.status.kind === "failed" ? /* @__PURE__ */ v("span", {
|
|
90
|
+
className: "inline-flex items-center gap-1 text-[var(--color-status-error-text)]",
|
|
91
|
+
children: [/* @__PURE__ */ _(m, {
|
|
92
|
+
size: 14,
|
|
93
|
+
"aria-hidden": "true"
|
|
94
|
+
}), e.status.message]
|
|
95
|
+
}) : /* @__PURE__ */ _("span", {
|
|
96
|
+
className: "text-[var(--color-text-secondary)]",
|
|
97
|
+
children: C("members.bulkInvite.statusReady", "Ready")
|
|
98
|
+
}), V = [
|
|
99
|
+
{
|
|
100
|
+
key: "rowNumber",
|
|
101
|
+
header: "#",
|
|
102
|
+
priority: "secondary",
|
|
103
|
+
cell: (e) => /* @__PURE__ */ _("span", {
|
|
104
|
+
className: "text-xs tabular-nums text-[var(--color-text-secondary)]",
|
|
105
|
+
children: e.rowNumber
|
|
106
|
+
})
|
|
107
|
+
},
|
|
108
|
+
{
|
|
109
|
+
key: "email",
|
|
110
|
+
header: C("members.bulkInvite.colEmail", "Email"),
|
|
111
|
+
priority: "primary",
|
|
112
|
+
cell: (e) => e.email || /* @__PURE__ */ _("span", {
|
|
113
|
+
className: "italic text-[var(--color-text-muted)]",
|
|
114
|
+
children: C("members.bulkInvite.empty", "(empty)")
|
|
115
|
+
})
|
|
116
|
+
},
|
|
117
|
+
{
|
|
118
|
+
key: "role",
|
|
119
|
+
header: C("members.bulkInvite.colRole", "Role"),
|
|
120
|
+
priority: "secondary",
|
|
121
|
+
cell: (e) => e.role || /* @__PURE__ */ _("span", {
|
|
122
|
+
className: "text-[var(--color-text-muted)]",
|
|
123
|
+
children: "MEMBER"
|
|
124
|
+
})
|
|
125
|
+
},
|
|
126
|
+
{
|
|
127
|
+
key: "status",
|
|
128
|
+
header: C("members.bulkInvite.colStatus", "Status"),
|
|
129
|
+
priority: "secondary",
|
|
130
|
+
cell: (e) => B(e)
|
|
131
|
+
}
|
|
132
|
+
];
|
|
133
|
+
return /* @__PURE__ */ v("div", {
|
|
71
134
|
className: "space-y-5",
|
|
72
135
|
children: [
|
|
73
|
-
/* @__PURE__ */
|
|
136
|
+
/* @__PURE__ */ v("div", {
|
|
74
137
|
className: "flex flex-col gap-3 sm:flex-row sm:items-center sm:justify-between",
|
|
75
|
-
children: [/* @__PURE__ */
|
|
138
|
+
children: [/* @__PURE__ */ _("p", {
|
|
76
139
|
className: "text-sm text-[var(--color-text-muted)]",
|
|
77
|
-
children:
|
|
78
|
-
}), /* @__PURE__ */
|
|
140
|
+
children: C("members.bulkInvite.description", "Upload a CSV with one row per person. Required column: email. Optional: role, message.")
|
|
141
|
+
}), /* @__PURE__ */ v("button", {
|
|
79
142
|
type: "button",
|
|
80
143
|
onClick: n,
|
|
81
144
|
className: "inline-flex min-h-10 items-center justify-center gap-2 rounded-lg border border-[var(--color-border-default)] px-3 py-2 text-sm text-[var(--color-text-primary)] transition-colors hover:bg-[var(--color-bg-subtle)]",
|
|
82
|
-
children: [/* @__PURE__ */
|
|
145
|
+
children: [/* @__PURE__ */ _(u, {
|
|
83
146
|
size: 16,
|
|
84
147
|
"aria-hidden": "true"
|
|
85
|
-
}),
|
|
148
|
+
}), C("members.bulkInvite.downloadTemplate", "Download template")]
|
|
86
149
|
})]
|
|
87
150
|
}),
|
|
88
|
-
/* @__PURE__ */
|
|
151
|
+
/* @__PURE__ */ v("div", {
|
|
89
152
|
onDragOver: (e) => {
|
|
90
|
-
e.preventDefault(),
|
|
153
|
+
e.preventDefault(), M(!0);
|
|
91
154
|
},
|
|
92
|
-
onDragLeave: () =>
|
|
93
|
-
onDrop:
|
|
94
|
-
className: `flex flex-col items-center justify-center gap-3 rounded-xl border-2 border-dashed p-8 transition-colors ${
|
|
155
|
+
onDragLeave: () => M(!1),
|
|
156
|
+
onDrop: F,
|
|
157
|
+
className: `flex flex-col items-center justify-center gap-3 rounded-xl border-2 border-dashed p-8 transition-colors ${j ? "border-[var(--color-action-primary-bg)] bg-[var(--color-status-info-bgSubtle)]" : "border-[var(--color-border-default)] bg-[var(--color-bg-canvas)]"}`,
|
|
95
158
|
children: [
|
|
96
|
-
/* @__PURE__ */
|
|
159
|
+
/* @__PURE__ */ _(p, {
|
|
97
160
|
size: 28,
|
|
98
161
|
className: "text-[var(--color-text-secondary)]",
|
|
99
162
|
"aria-hidden": "true"
|
|
100
163
|
}),
|
|
101
|
-
/* @__PURE__ */
|
|
164
|
+
/* @__PURE__ */ v("div", {
|
|
102
165
|
className: "text-center",
|
|
103
|
-
children: [/* @__PURE__ */
|
|
166
|
+
children: [/* @__PURE__ */ _("p", {
|
|
104
167
|
className: "text-sm font-medium text-[var(--color-text-primary)]",
|
|
105
|
-
children:
|
|
106
|
-
}), /* @__PURE__ */
|
|
168
|
+
children: D || C("members.bulkInvite.dropHere", "Drop a CSV file here or click to browse")
|
|
169
|
+
}), /* @__PURE__ */ _("p", {
|
|
107
170
|
className: "mt-1 text-xs text-[var(--color-text-muted)]",
|
|
108
|
-
children:
|
|
171
|
+
children: C("members.bulkInvite.csvOnly", "CSV files only. Max 1000 rows recommended.")
|
|
109
172
|
})]
|
|
110
173
|
}),
|
|
111
|
-
/* @__PURE__ */
|
|
112
|
-
ref:
|
|
174
|
+
/* @__PURE__ */ _("input", {
|
|
175
|
+
ref: w,
|
|
113
176
|
type: "file",
|
|
114
177
|
accept: ".csv,text/csv",
|
|
115
|
-
onChange:
|
|
178
|
+
onChange: P,
|
|
116
179
|
className: "hidden",
|
|
117
|
-
"aria-label":
|
|
180
|
+
"aria-label": C("members.bulkInvite.fileInputLabel", "Choose CSV file")
|
|
118
181
|
}),
|
|
119
|
-
/* @__PURE__ */
|
|
182
|
+
/* @__PURE__ */ _("button", {
|
|
120
183
|
type: "button",
|
|
121
|
-
onClick: () =>
|
|
184
|
+
onClick: () => w.current?.click(),
|
|
122
185
|
className: "inline-flex min-h-10 items-center justify-center gap-2 rounded-lg bg-[var(--color-action-primary-bg)] px-4 py-2 text-sm text-[var(--color-action-primary-text)] transition-all duration-200 hover:opacity-90",
|
|
123
|
-
children:
|
|
186
|
+
children: C("members.bulkInvite.chooseFile", "Choose file")
|
|
124
187
|
})
|
|
125
188
|
]
|
|
126
189
|
}),
|
|
127
|
-
|
|
190
|
+
R && /* @__PURE__ */ v(g, { children: [/* @__PURE__ */ v("div", {
|
|
128
191
|
className: "flex flex-wrap gap-4 text-xs text-[var(--color-text-secondary)]",
|
|
129
192
|
children: [
|
|
130
|
-
/* @__PURE__ */
|
|
131
|
-
|
|
193
|
+
/* @__PURE__ */ v("span", { children: [
|
|
194
|
+
C("members.bulkInvite.statsTotal", "Total rows"),
|
|
132
195
|
": ",
|
|
133
|
-
|
|
196
|
+
I.total
|
|
134
197
|
] }),
|
|
135
|
-
/* @__PURE__ */
|
|
136
|
-
|
|
198
|
+
/* @__PURE__ */ v("span", { children: [
|
|
199
|
+
C("members.bulkInvite.statsValid", "Ready"),
|
|
137
200
|
": ",
|
|
138
|
-
|
|
201
|
+
I.sendable
|
|
139
202
|
] }),
|
|
140
|
-
|
|
203
|
+
I.withErrors > 0 && /* @__PURE__ */ v("span", {
|
|
141
204
|
className: "text-[var(--color-status-error-text)]",
|
|
142
205
|
children: [
|
|
143
|
-
|
|
206
|
+
C("members.bulkInvite.statsErrors", "With errors"),
|
|
144
207
|
": ",
|
|
145
|
-
|
|
208
|
+
I.withErrors
|
|
146
209
|
]
|
|
147
210
|
}),
|
|
148
|
-
|
|
211
|
+
I.invited > 0 && /* @__PURE__ */ v("span", {
|
|
149
212
|
className: "text-[var(--color-status-success-text)]",
|
|
150
213
|
children: [
|
|
151
|
-
|
|
214
|
+
C("members.bulkInvite.statsInvited", "Invited"),
|
|
152
215
|
": ",
|
|
153
|
-
|
|
216
|
+
I.invited
|
|
154
217
|
]
|
|
155
218
|
}),
|
|
156
|
-
|
|
219
|
+
I.failed > 0 && /* @__PURE__ */ v("span", {
|
|
157
220
|
className: "text-[var(--color-status-error-text)]",
|
|
158
221
|
children: [
|
|
159
|
-
|
|
222
|
+
C("members.bulkInvite.statsFailed", "Failed"),
|
|
160
223
|
": ",
|
|
161
|
-
|
|
224
|
+
I.failed
|
|
162
225
|
]
|
|
163
226
|
})
|
|
164
227
|
]
|
|
165
|
-
}), /* @__PURE__ */
|
|
166
|
-
className: "
|
|
167
|
-
children: /* @__PURE__ */
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
children: [/* @__PURE__ */ g("thead", {
|
|
172
|
-
className: "bg-[var(--color-bg-subtle)]",
|
|
173
|
-
children: /* @__PURE__ */ _("tr", { children: [
|
|
174
|
-
/* @__PURE__ */ g("th", {
|
|
175
|
-
className: "px-3 py-2 text-left text-xs font-semibold uppercase tracking-wide text-[var(--color-text-secondary)]",
|
|
176
|
-
children: "#"
|
|
177
|
-
}),
|
|
178
|
-
/* @__PURE__ */ g("th", {
|
|
179
|
-
className: "px-3 py-2 text-left text-xs font-semibold uppercase tracking-wide text-[var(--color-text-secondary)]",
|
|
180
|
-
children: S("members.bulkInvite.colEmail", "Email")
|
|
181
|
-
}),
|
|
182
|
-
/* @__PURE__ */ g("th", {
|
|
183
|
-
className: "px-3 py-2 text-left text-xs font-semibold uppercase tracking-wide text-[var(--color-text-secondary)]",
|
|
184
|
-
children: S("members.bulkInvite.colRole", "Role")
|
|
185
|
-
}),
|
|
186
|
-
/* @__PURE__ */ g("th", {
|
|
187
|
-
className: "px-3 py-2 text-left text-xs font-semibold uppercase tracking-wide text-[var(--color-text-secondary)]",
|
|
188
|
-
children: S("members.bulkInvite.colStatus", "Status")
|
|
189
|
-
})
|
|
190
|
-
] })
|
|
191
|
-
}), /* @__PURE__ */ g("tbody", {
|
|
192
|
-
className: "divide-y divide-[var(--color-border-default)]",
|
|
193
|
-
children: w.map((e) => {
|
|
194
|
-
let t = e.errors.length > 0;
|
|
195
|
-
return /* @__PURE__ */ _("tr", {
|
|
196
|
-
className: "bg-[var(--color-bg-surface)]",
|
|
197
|
-
children: [
|
|
198
|
-
/* @__PURE__ */ g("td", {
|
|
199
|
-
className: "px-3 py-2 text-xs text-[var(--color-text-secondary)]",
|
|
200
|
-
children: e.rowNumber
|
|
201
|
-
}),
|
|
202
|
-
/* @__PURE__ */ g("td", {
|
|
203
|
-
className: "px-3 py-2 text-sm text-[var(--color-text-primary)]",
|
|
204
|
-
children: e.email || /* @__PURE__ */ g("span", {
|
|
205
|
-
className: "italic text-[var(--color-text-muted)]",
|
|
206
|
-
children: S("members.bulkInvite.empty", "(empty)")
|
|
207
|
-
})
|
|
208
|
-
}),
|
|
209
|
-
/* @__PURE__ */ g("td", {
|
|
210
|
-
className: "px-3 py-2 text-xs text-[var(--color-text-secondary)]",
|
|
211
|
-
children: e.role || /* @__PURE__ */ g("span", {
|
|
212
|
-
className: "text-[var(--color-text-muted)]",
|
|
213
|
-
children: "MEMBER"
|
|
214
|
-
})
|
|
215
|
-
}),
|
|
216
|
-
/* @__PURE__ */ g("td", {
|
|
217
|
-
className: "px-3 py-2 text-xs",
|
|
218
|
-
children: t ? /* @__PURE__ */ _("span", {
|
|
219
|
-
className: "inline-flex items-center gap-1 text-[var(--color-status-error-text)]",
|
|
220
|
-
children: [/* @__PURE__ */ g(m, {
|
|
221
|
-
size: 14,
|
|
222
|
-
"aria-hidden": "true"
|
|
223
|
-
}), e.errors.join(" ")]
|
|
224
|
-
}) : e.status.kind === "sending" ? /* @__PURE__ */ _("span", {
|
|
225
|
-
className: "inline-flex items-center gap-1 text-[var(--color-text-secondary)]",
|
|
226
|
-
children: [/* @__PURE__ */ g(d, {
|
|
227
|
-
size: 14,
|
|
228
|
-
className: "animate-spin",
|
|
229
|
-
"aria-hidden": "true"
|
|
230
|
-
}), S("members.bulkInvite.statusSending", "Sending...")]
|
|
231
|
-
}) : e.status.kind === "invited" ? /* @__PURE__ */ _("span", {
|
|
232
|
-
className: "inline-flex items-center gap-1 text-[var(--color-status-success-text)]",
|
|
233
|
-
children: [/* @__PURE__ */ g(l, {
|
|
234
|
-
size: 14,
|
|
235
|
-
"aria-hidden": "true"
|
|
236
|
-
}), S("members.bulkInvite.statusInvited", "Invited")]
|
|
237
|
-
}) : e.status.kind === "failed" ? /* @__PURE__ */ _("span", {
|
|
238
|
-
className: "inline-flex items-center gap-1 text-[var(--color-status-error-text)]",
|
|
239
|
-
children: [/* @__PURE__ */ g(m, {
|
|
240
|
-
size: 14,
|
|
241
|
-
"aria-hidden": "true"
|
|
242
|
-
}), e.status.message]
|
|
243
|
-
}) : /* @__PURE__ */ g("span", {
|
|
244
|
-
className: "text-[var(--color-text-secondary)]",
|
|
245
|
-
children: S("members.bulkInvite.statusReady", "Ready")
|
|
246
|
-
})
|
|
247
|
-
})
|
|
248
|
-
]
|
|
249
|
-
}, `${e.rowNumber}-${e.email}`);
|
|
250
|
-
})
|
|
251
|
-
})]
|
|
252
|
-
})
|
|
228
|
+
}), /* @__PURE__ */ _("div", {
|
|
229
|
+
className: "rounded-xl border border-[var(--color-border-default)] p-2",
|
|
230
|
+
children: /* @__PURE__ */ _(h, {
|
|
231
|
+
columns: V,
|
|
232
|
+
data: T,
|
|
233
|
+
rowKey: (e) => `${e.rowNumber}-${e.email}`
|
|
253
234
|
})
|
|
254
235
|
})] }),
|
|
255
|
-
/* @__PURE__ */
|
|
236
|
+
/* @__PURE__ */ v("div", {
|
|
256
237
|
className: "flex flex-col gap-3 border-t border-[var(--color-border-default)] pt-4 sm:flex-row",
|
|
257
|
-
children: [/* @__PURE__ */
|
|
238
|
+
children: [/* @__PURE__ */ v("button", {
|
|
258
239
|
type: "button",
|
|
259
|
-
onClick:
|
|
260
|
-
disabled: !
|
|
261
|
-
className: "inline-flex items-center justify-center gap-2 rounded-lg bg-[var(--color-action-primary-bg)] px-6 py-2.5 font-medium text-[var(--color-action-primary-text)] transition-all duration-200 hover:opacity-90
|
|
240
|
+
onClick: L,
|
|
241
|
+
disabled: !z,
|
|
242
|
+
className: "inline-flex items-center justify-center gap-2 rounded-lg bg-[var(--color-action-primary-bg)] px-6 py-2.5 font-medium text-[var(--color-action-primary-text)] transition-all duration-200 hover:opacity-90 disabled:cursor-not-allowed disabled:opacity-50 sm:min-w-[200px]",
|
|
262
243
|
children: [
|
|
263
|
-
|
|
244
|
+
k ? /* @__PURE__ */ _(d, {
|
|
264
245
|
size: 16,
|
|
265
246
|
className: "animate-spin",
|
|
266
247
|
"aria-hidden": "true"
|
|
267
|
-
}) : /* @__PURE__ */
|
|
248
|
+
}) : /* @__PURE__ */ _(f, {
|
|
268
249
|
size: 16,
|
|
269
250
|
"aria-hidden": "true"
|
|
270
251
|
}),
|
|
271
|
-
|
|
252
|
+
C("members.bulkInvite.send", "Send"),
|
|
272
253
|
" ",
|
|
273
|
-
|
|
254
|
+
I.sendable,
|
|
274
255
|
" ",
|
|
275
|
-
|
|
256
|
+
C("members.bulkInvite.sendSuffix", "invites")
|
|
276
257
|
]
|
|
277
|
-
}), /* @__PURE__ */
|
|
258
|
+
}), /* @__PURE__ */ _("button", {
|
|
278
259
|
type: "button",
|
|
279
|
-
onClick:
|
|
280
|
-
disabled:
|
|
281
|
-
className: "rounded-lg border border-[var(--color-border-default)] bg-transparent px-6 py-2.5 font-medium text-[var(--color-text-primary)] transition-all duration-200 hover:bg-[var(--color-bg-subtle)]
|
|
282
|
-
children:
|
|
260
|
+
onClick: x,
|
|
261
|
+
disabled: k,
|
|
262
|
+
className: "rounded-lg border border-[var(--color-border-default)] bg-transparent px-6 py-2.5 font-medium text-[var(--color-text-primary)] transition-all duration-200 hover:bg-[var(--color-bg-subtle)] disabled:cursor-not-allowed disabled:opacity-50 sm:min-w-[140px]",
|
|
263
|
+
children: C("common.cancel", "Cancel")
|
|
283
264
|
})]
|
|
284
265
|
})
|
|
285
266
|
]
|
|
286
267
|
});
|
|
287
268
|
}
|
|
288
269
|
//#endregion
|
|
289
|
-
export {
|
|
270
|
+
export { y as BulkInviteForm };
|
|
290
271
|
|
|
291
272
|
//# sourceMappingURL=BulkInviteForm.js.map
|