@hexclave/tanstack-start 1.0.53 → 1.0.55
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/components/api-key-dialogs.d.ts +1 -1
- package/dist/components-page/account-settings/active-sessions/active-sessions-page.js +1 -1
- package/dist/components-page/account-settings/api-keys/api-keys-page.js +2 -2
- package/dist/components-page/account-settings/email-and-auth/emails-section.js +1 -1
- package/dist/components-page/account-settings/email-and-auth/mfa-section.js +1 -1
- package/dist/components-page/account-settings/email-and-auth/passkey-section.js +1 -1
- package/dist/components-page/account-settings/email-and-auth/password-section.js +2 -2
- package/dist/components-page/account-settings/payments/payments-panel.js +1 -1
- package/dist/components-page/account-settings/teams/team-api-keys-section.js +2 -2
- package/dist/components-page/account-settings/teams/team-creation-page.js +1 -1
- package/dist/components-page/account-settings/teams/team-member-invitation-section.js +1 -1
- package/dist/esm/components/api-key-dialogs.d.ts +1 -1
- package/dist/esm/components-page/account-settings/active-sessions/active-sessions-page.js +1 -1
- package/dist/esm/components-page/account-settings/api-keys/api-keys-page.js +2 -2
- package/dist/esm/components-page/account-settings/email-and-auth/emails-section.js +1 -1
- package/dist/esm/components-page/account-settings/email-and-auth/mfa-section.js +1 -1
- package/dist/esm/components-page/account-settings/email-and-auth/passkey-section.js +1 -1
- package/dist/esm/components-page/account-settings/email-and-auth/password-section.js +2 -2
- package/dist/esm/components-page/account-settings/payments/payments-panel.js +1 -1
- package/dist/esm/components-page/account-settings/teams/team-api-keys-section.js +2 -2
- package/dist/esm/components-page/account-settings/teams/team-creation-page.js +1 -1
- package/dist/esm/components-page/account-settings/teams/team-member-invitation-section.js +1 -1
- package/dist/esm/generated/quetzal-translations.d.ts +2 -2
- package/dist/esm/lib/hexclave-app/apps/implementations/common.js +2 -2
- package/dist/esm/lib/hexclave-app/apps/implementations/event-tracker.test.js +1 -1
- package/dist/esm/lib/hexclave-app/apps/implementations/session-replay.test.js +1 -1
- package/dist/esm/package.json +37 -0
- package/dist/generated/quetzal-translations.d.ts +1 -1
- package/dist/{hexclave-provider-D9KWfw3n.d.ts → hexclave-provider-CRjTv5L1.d.ts} +2 -2
- package/dist/{hexclave-provider-D9KWfw3n.d.ts.map → hexclave-provider-CRjTv5L1.d.ts.map} +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/lib/hexclave-app/apps/implementations/common.js +2 -2
- package/dist/lib/hexclave-app/apps/implementations/event-tracker.test.js +1 -1
- package/dist/lib/hexclave-app/apps/implementations/session-replay.test.js +1 -1
- package/dist/providers/hexclave-provider.d.ts +1 -1
- package/dist/providers/translation-provider.d.ts +1 -1
- package/dist/{quetzal-translations-XeH3zQ9l.d.ts → quetzal-translations-CK45_4Dm.d.ts} +3 -3
- package/dist/{quetzal-translations-XeH3zQ9l.d.ts.map → quetzal-translations-CK45_4Dm.d.ts.map} +1 -1
- package/dist/{translation-provider-WOaZXqAz.d.ts → translation-provider-DQ3BJepJ.d.ts} +2 -2
- package/dist/{translation-provider-WOaZXqAz.d.ts.map → translation-provider-DQ3BJepJ.d.ts.map} +1 -1
- package/package.json +3 -3
- package/src/config.ts +6 -7
|
@@ -3,7 +3,7 @@ import { n as ApiKeyCreationOptions, r as ApiKeyType, t as ApiKey } from "../ind
|
|
|
3
3
|
//#region src/components/api-key-dialogs.d.ts
|
|
4
4
|
declare const neverInMs: number;
|
|
5
5
|
declare const expiresInOptions: {
|
|
6
|
-
readonly [x: number]: "1 day" | "7 days" | "30 days" | "90 days" | "1 year"
|
|
6
|
+
readonly [x: number]: "Never" | "1 day" | "7 days" | "30 days" | "90 days" | "1 year";
|
|
7
7
|
};
|
|
8
8
|
/**
|
|
9
9
|
* Dialog for creating a new API key
|
|
@@ -4,10 +4,10 @@ let _hexclave_shared_dist_utils_errors = require("@hexclave/shared/dist/utils/er
|
|
|
4
4
|
let _hexclave_ui = require("@hexclave/ui");
|
|
5
5
|
let react = require("react");
|
|
6
6
|
let react_jsx_runtime = require("react/jsx-runtime");
|
|
7
|
-
let _hexclave_shared_dist_utils_dates = require("@hexclave/shared/dist/utils/dates");
|
|
8
7
|
let _________lib_hooks_js = require("../../../lib/hooks.js");
|
|
9
8
|
let _________lib_translations_js = require("../../../lib/translations.js");
|
|
10
9
|
let ___page_layout_js = require("../page-layout.js");
|
|
10
|
+
let _hexclave_shared_dist_utils_dates = require("@hexclave/shared/dist/utils/dates");
|
|
11
11
|
//#region src/components-page/account-settings/active-sessions/active-sessions-page.tsx
|
|
12
12
|
function ActiveSessionsPage(props) {
|
|
13
13
|
const { t } = (0, _________lib_translations_js.useTranslation)();
|
|
@@ -2,11 +2,11 @@ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
|
2
2
|
let _hexclave_ui = require("@hexclave/ui");
|
|
3
3
|
let react = require("react");
|
|
4
4
|
let react_jsx_runtime = require("react/jsx-runtime");
|
|
5
|
+
let _________components_api_key_dialogs_js = require("../../../components/api-key-dialogs.js");
|
|
6
|
+
let _________components_api_key_table_js = require("../../../components/api-key-table.js");
|
|
5
7
|
let _________lib_hooks_js = require("../../../lib/hooks.js");
|
|
6
8
|
let _________lib_translations_js = require("../../../lib/translations.js");
|
|
7
9
|
let ___page_layout_js = require("../page-layout.js");
|
|
8
|
-
let _________components_api_key_dialogs_js = require("../../../components/api-key-dialogs.js");
|
|
9
|
-
let _________components_api_key_table_js = require("../../../components/api-key-table.js");
|
|
10
10
|
//#region src/components-page/account-settings/api-keys/api-keys-page.tsx
|
|
11
11
|
function ApiKeysPage(props) {
|
|
12
12
|
const { t } = (0, _________lib_translations_js.useTranslation)();
|
|
@@ -8,8 +8,8 @@ let react_hook_form = require("react-hook-form");
|
|
|
8
8
|
let react_jsx_runtime = require("react/jsx-runtime");
|
|
9
9
|
let _________lib_hooks_js = require("../../../lib/hooks.js");
|
|
10
10
|
let _________lib_translations_js = require("../../../lib/translations.js");
|
|
11
|
-
let _hexclave_shared_dist_known_errors = require("@hexclave/shared/dist/known-errors");
|
|
12
11
|
let _________components_elements_form_warning_js = require("../../../components/elements/form-warning.js");
|
|
12
|
+
let _hexclave_shared_dist_known_errors = require("@hexclave/shared/dist/known-errors");
|
|
13
13
|
//#region src/components-page/account-settings/email-and-auth/emails-section.tsx
|
|
14
14
|
function EmailsSection(props) {
|
|
15
15
|
const { t } = (0, _________lib_translations_js.useTranslation)();
|
|
@@ -7,12 +7,12 @@ let react = require("react");
|
|
|
7
7
|
let react_jsx_runtime = require("react/jsx-runtime");
|
|
8
8
|
let _________lib_hooks_js = require("../../../lib/hooks.js");
|
|
9
9
|
let _________lib_translations_js = require("../../../lib/translations.js");
|
|
10
|
+
let ___section_js = require("../section.js");
|
|
10
11
|
let _oslojs_otp = require("@oslojs/otp");
|
|
11
12
|
let _hexclave_shared_dist_hooks_use_async_callback = require("@hexclave/shared/dist/hooks/use-async-callback");
|
|
12
13
|
let _hexclave_shared_dist_utils_crypto = require("@hexclave/shared/dist/utils/crypto");
|
|
13
14
|
let qrcode = require("qrcode");
|
|
14
15
|
qrcode = require_rolldown_runtime.__toESM(qrcode);
|
|
15
|
-
let ___section_js = require("../section.js");
|
|
16
16
|
//#region src/components-page/account-settings/email-and-auth/mfa-section.tsx
|
|
17
17
|
function MfaSection(props) {
|
|
18
18
|
const { t } = (0, _________lib_translations_js.useTranslation)();
|
|
@@ -4,8 +4,8 @@ let react = require("react");
|
|
|
4
4
|
let react_jsx_runtime = require("react/jsx-runtime");
|
|
5
5
|
let _________lib_hooks_js = require("../../../lib/hooks.js");
|
|
6
6
|
let _________lib_translations_js = require("../../../lib/translations.js");
|
|
7
|
-
let ___section_js = require("../section.js");
|
|
8
7
|
let _________index_js = require("../../../index.js");
|
|
8
|
+
let ___section_js = require("../section.js");
|
|
9
9
|
//#region src/components-page/account-settings/email-and-auth/passkey-section.tsx
|
|
10
10
|
function PasskeySection(props) {
|
|
11
11
|
const { t } = (0, _________lib_translations_js.useTranslation)();
|
|
@@ -12,9 +12,9 @@ let yup = require("yup");
|
|
|
12
12
|
yup = require_rolldown_runtime.__toESM(yup);
|
|
13
13
|
let _________lib_hooks_js = require("../../../lib/hooks.js");
|
|
14
14
|
let _________lib_translations_js = require("../../../lib/translations.js");
|
|
15
|
-
let _________components_elements_form_warning_js = require("../../../components/elements/form-warning.js");
|
|
16
|
-
let ___section_js = require("../section.js");
|
|
17
15
|
let _________index_js = require("../../../index.js");
|
|
16
|
+
let ___section_js = require("../section.js");
|
|
17
|
+
let _________components_elements_form_warning_js = require("../../../components/elements/form-warning.js");
|
|
18
18
|
//#region src/components-page/account-settings/email-and-auth/password-section.tsx
|
|
19
19
|
function PasswordSection(props) {
|
|
20
20
|
const { t } = (0, _________lib_translations_js.useTranslation)();
|
|
@@ -7,11 +7,11 @@ let react_jsx_runtime = require("react/jsx-runtime");
|
|
|
7
7
|
let _hexclave_shared = require("@hexclave/shared");
|
|
8
8
|
let _hexclave_shared_dist_utils_results = require("@hexclave/shared/dist/utils/results");
|
|
9
9
|
let _________lib_translations_js = require("../../../lib/translations.js");
|
|
10
|
-
let ___section_js = require("../section.js");
|
|
11
10
|
let _________index_js = require("../../../index.js");
|
|
12
11
|
let _stripe_react_stripe_js = require("@stripe/react-stripe-js");
|
|
13
12
|
let _stripe_stripe_js = require("@stripe/stripe-js");
|
|
14
13
|
let _________generated_env_js = require("../../../generated/env.js");
|
|
14
|
+
let ___section_js = require("../section.js");
|
|
15
15
|
//#region src/components-page/account-settings/payments/payments-panel.tsx
|
|
16
16
|
function formatPaymentMethod(pm) {
|
|
17
17
|
return [
|
|
@@ -3,10 +3,10 @@ let _hexclave_shared_dist_utils_errors = require("@hexclave/shared/dist/utils/er
|
|
|
3
3
|
let _hexclave_ui = require("@hexclave/ui");
|
|
4
4
|
let react = require("react");
|
|
5
5
|
let react_jsx_runtime = require("react/jsx-runtime");
|
|
6
|
-
let _________lib_hooks_js = require("../../../lib/hooks.js");
|
|
7
|
-
let _________lib_translations_js = require("../../../lib/translations.js");
|
|
8
6
|
let _________components_api_key_dialogs_js = require("../../../components/api-key-dialogs.js");
|
|
9
7
|
let _________components_api_key_table_js = require("../../../components/api-key-table.js");
|
|
8
|
+
let _________lib_hooks_js = require("../../../lib/hooks.js");
|
|
9
|
+
let _________lib_translations_js = require("../../../lib/translations.js");
|
|
10
10
|
let ___section_js = require("../section.js");
|
|
11
11
|
//#region src/components-page/account-settings/teams/team-api-keys-section.tsx
|
|
12
12
|
function TeamApiKeysSection(props) {
|
|
@@ -9,8 +9,8 @@ let react_jsx_runtime = require("react/jsx-runtime");
|
|
|
9
9
|
let _________lib_hooks_js = require("../../../lib/hooks.js");
|
|
10
10
|
let _________lib_translations_js = require("../../../lib/translations.js");
|
|
11
11
|
let ___page_layout_js = require("../page-layout.js");
|
|
12
|
-
let _________components_elements_form_warning_js = require("../../../components/elements/form-warning.js");
|
|
13
12
|
let ___section_js = require("../section.js");
|
|
13
|
+
let _________components_elements_form_warning_js = require("../../../components/elements/form-warning.js");
|
|
14
14
|
let _________components_message_cards_message_card_js = require("../../../components/message-cards/message-card.js");
|
|
15
15
|
//#region src/components-page/account-settings/teams/team-creation-page.tsx
|
|
16
16
|
function TeamCreationPage(props) {
|
|
@@ -9,8 +9,8 @@ let react_jsx_runtime = require("react/jsx-runtime");
|
|
|
9
9
|
let lucide_react = require("lucide-react");
|
|
10
10
|
let _________lib_hooks_js = require("../../../lib/hooks.js");
|
|
11
11
|
let _________lib_translations_js = require("../../../lib/translations.js");
|
|
12
|
-
let _________components_elements_form_warning_js = require("../../../components/elements/form-warning.js");
|
|
13
12
|
let ___section_js = require("../section.js");
|
|
13
|
+
let _________components_elements_form_warning_js = require("../../../components/elements/form-warning.js");
|
|
14
14
|
//#region src/components-page/account-settings/teams/team-member-invitation-section.tsx
|
|
15
15
|
function TeamMemberInvitationSection(props) {
|
|
16
16
|
if (!(0, _________lib_hooks_js.useUser)({ or: "redirect" }).usePermission(props.team, "$invite_members")) return null;
|
|
@@ -3,7 +3,7 @@ import { ApiKey, ApiKeyCreationOptions, ApiKeyType } from "../lib/hexclave-app/a
|
|
|
3
3
|
//#region src/components/api-key-dialogs.d.ts
|
|
4
4
|
declare const neverInMs: number;
|
|
5
5
|
declare const expiresInOptions: {
|
|
6
|
-
readonly [x: number]: "1 day" | "7 days" | "30 days" | "90 days" | "1 year"
|
|
6
|
+
readonly [x: number]: "Never" | "1 day" | "7 days" | "30 days" | "90 days" | "1 year";
|
|
7
7
|
};
|
|
8
8
|
/**
|
|
9
9
|
* Dialog for creating a new API key
|
|
@@ -3,10 +3,10 @@ import { captureError } from "@hexclave/shared/dist/utils/errors";
|
|
|
3
3
|
import { ActionCell, Badge, Button, Skeleton, Table, TableBody, TableCell, TableHead, TableHeader, TableRow, Typography } from "@hexclave/ui";
|
|
4
4
|
import { useEffect, useState } from "react";
|
|
5
5
|
import { jsx, jsxs } from "react/jsx-runtime";
|
|
6
|
-
import { fromNow } from "@hexclave/shared/dist/utils/dates";
|
|
7
6
|
import { useUser } from "../../../lib/hooks.js";
|
|
8
7
|
import { useTranslation } from "../../../lib/translations.js";
|
|
9
8
|
import { PageLayout } from "../page-layout.js";
|
|
9
|
+
import { fromNow } from "@hexclave/shared/dist/utils/dates";
|
|
10
10
|
//#region src/components-page/account-settings/active-sessions/active-sessions-page.tsx
|
|
11
11
|
function ActiveSessionsPage(props) {
|
|
12
12
|
const { t } = useTranslation();
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
import { Button } from "@hexclave/ui";
|
|
2
2
|
import { useState } from "react";
|
|
3
3
|
import { jsx, jsxs } from "react/jsx-runtime";
|
|
4
|
+
import { CreateApiKeyDialog, ShowApiKeyDialog } from "../../../components/api-key-dialogs.js";
|
|
5
|
+
import { ApiKeyTable } from "../../../components/api-key-table.js";
|
|
4
6
|
import { useUser } from "../../../lib/hooks.js";
|
|
5
7
|
import { useTranslation } from "../../../lib/translations.js";
|
|
6
8
|
import { PageLayout } from "../page-layout.js";
|
|
7
|
-
import { CreateApiKeyDialog, ShowApiKeyDialog } from "../../../components/api-key-dialogs.js";
|
|
8
|
-
import { ApiKeyTable } from "../../../components/api-key-table.js";
|
|
9
9
|
//#region src/components-page/account-settings/api-keys/api-keys-page.tsx
|
|
10
10
|
function ApiKeysPage(props) {
|
|
11
11
|
const { t } = useTranslation();
|
|
@@ -7,8 +7,8 @@ import { useForm } from "react-hook-form";
|
|
|
7
7
|
import { jsx, jsxs } from "react/jsx-runtime";
|
|
8
8
|
import { useUser } from "../../../lib/hooks.js";
|
|
9
9
|
import { useTranslation } from "../../../lib/translations.js";
|
|
10
|
-
import { KnownErrors } from "@hexclave/shared/dist/known-errors";
|
|
11
10
|
import { FormWarningText } from "../../../components/elements/form-warning.js";
|
|
11
|
+
import { KnownErrors } from "@hexclave/shared/dist/known-errors";
|
|
12
12
|
//#region src/components-page/account-settings/email-and-auth/emails-section.tsx
|
|
13
13
|
function EmailsSection(props) {
|
|
14
14
|
const { t } = useTranslation();
|
|
@@ -5,11 +5,11 @@ import { useEffect, useState } from "react";
|
|
|
5
5
|
import { Fragment, jsx, jsxs } from "react/jsx-runtime";
|
|
6
6
|
import { useStackApp, useUser } from "../../../lib/hooks.js";
|
|
7
7
|
import { useTranslation } from "../../../lib/translations.js";
|
|
8
|
+
import { Section } from "../section.js";
|
|
8
9
|
import { createTOTPKeyURI, verifyTOTP } from "@oslojs/otp";
|
|
9
10
|
import { useAsyncCallback } from "@hexclave/shared/dist/hooks/use-async-callback";
|
|
10
11
|
import { generateRandomValues } from "@hexclave/shared/dist/utils/crypto";
|
|
11
12
|
import * as QRCode from "qrcode";
|
|
12
|
-
import { Section } from "../section.js";
|
|
13
13
|
//#region src/components-page/account-settings/email-and-auth/mfa-section.tsx
|
|
14
14
|
function MfaSection(props) {
|
|
15
15
|
const { t } = useTranslation();
|
|
@@ -3,8 +3,8 @@ import { useState } from "react";
|
|
|
3
3
|
import { Fragment, jsx, jsxs } from "react/jsx-runtime";
|
|
4
4
|
import { useUser } from "../../../lib/hooks.js";
|
|
5
5
|
import { useTranslation } from "../../../lib/translations.js";
|
|
6
|
-
import { Section } from "../section.js";
|
|
7
6
|
import { useStackApp as useStackApp$1 } from "../../../index.js";
|
|
7
|
+
import { Section } from "../section.js";
|
|
8
8
|
//#region src/components-page/account-settings/email-and-auth/passkey-section.tsx
|
|
9
9
|
function PasskeySection(props) {
|
|
10
10
|
const { t } = useTranslation();
|
|
@@ -9,9 +9,9 @@ import { getPasswordError } from "@hexclave/shared/dist/helpers/password";
|
|
|
9
9
|
import * as yup from "yup";
|
|
10
10
|
import { useUser } from "../../../lib/hooks.js";
|
|
11
11
|
import { useTranslation } from "../../../lib/translations.js";
|
|
12
|
-
import { FormWarningText } from "../../../components/elements/form-warning.js";
|
|
13
|
-
import { Section } from "../section.js";
|
|
14
12
|
import { useStackApp as useStackApp$1 } from "../../../index.js";
|
|
13
|
+
import { Section } from "../section.js";
|
|
14
|
+
import { FormWarningText } from "../../../components/elements/form-warning.js";
|
|
15
15
|
//#region src/components-page/account-settings/email-and-auth/password-section.tsx
|
|
16
16
|
function PasswordSection(props) {
|
|
17
17
|
const { t } = useTranslation();
|
|
@@ -6,11 +6,11 @@ import { Fragment, jsx, jsxs } from "react/jsx-runtime";
|
|
|
6
6
|
import { KnownErrors } from "@hexclave/shared";
|
|
7
7
|
import { Result } from "@hexclave/shared/dist/utils/results";
|
|
8
8
|
import { useTranslation } from "../../../lib/translations.js";
|
|
9
|
-
import { Section } from "../section.js";
|
|
10
9
|
import { useStackApp } from "../../../index.js";
|
|
11
10
|
import { CardElement, Elements, useElements, useStripe } from "@stripe/react-stripe-js";
|
|
12
11
|
import { loadStripe } from "@stripe/stripe-js";
|
|
13
12
|
import { envVars } from "../../../generated/env.js";
|
|
13
|
+
import { Section } from "../section.js";
|
|
14
14
|
//#region src/components-page/account-settings/payments/payments-panel.tsx
|
|
15
15
|
function formatPaymentMethod(pm) {
|
|
16
16
|
return [
|
|
@@ -2,10 +2,10 @@ import { HexclaveAssertionError } from "@hexclave/shared/dist/utils/errors";
|
|
|
2
2
|
import { Button } from "@hexclave/ui";
|
|
3
3
|
import { useState } from "react";
|
|
4
4
|
import { Fragment, jsx, jsxs } from "react/jsx-runtime";
|
|
5
|
-
import { useStackApp, useUser } from "../../../lib/hooks.js";
|
|
6
|
-
import { useTranslation } from "../../../lib/translations.js";
|
|
7
5
|
import { CreateApiKeyDialog, ShowApiKeyDialog } from "../../../components/api-key-dialogs.js";
|
|
8
6
|
import { ApiKeyTable } from "../../../components/api-key-table.js";
|
|
7
|
+
import { useStackApp, useUser } from "../../../lib/hooks.js";
|
|
8
|
+
import { useTranslation } from "../../../lib/translations.js";
|
|
9
9
|
import { Section } from "../section.js";
|
|
10
10
|
//#region src/components-page/account-settings/teams/team-api-keys-section.tsx
|
|
11
11
|
function TeamApiKeysSection(props) {
|
|
@@ -8,8 +8,8 @@ import { jsx, jsxs } from "react/jsx-runtime";
|
|
|
8
8
|
import { useStackApp, useUser } from "../../../lib/hooks.js";
|
|
9
9
|
import { useTranslation } from "../../../lib/translations.js";
|
|
10
10
|
import { PageLayout } from "../page-layout.js";
|
|
11
|
-
import { FormWarningText } from "../../../components/elements/form-warning.js";
|
|
12
11
|
import { Section } from "../section.js";
|
|
12
|
+
import { FormWarningText } from "../../../components/elements/form-warning.js";
|
|
13
13
|
import { MessageCard } from "../../../components/message-cards/message-card.js";
|
|
14
14
|
//#region src/components-page/account-settings/teams/team-creation-page.tsx
|
|
15
15
|
function TeamCreationPage(props) {
|
|
@@ -8,8 +8,8 @@ import { Fragment, jsx, jsxs } from "react/jsx-runtime";
|
|
|
8
8
|
import { Trash } from "lucide-react";
|
|
9
9
|
import { useUser } from "../../../lib/hooks.js";
|
|
10
10
|
import { useTranslation } from "../../../lib/translations.js";
|
|
11
|
-
import { FormWarningText } from "../../../components/elements/form-warning.js";
|
|
12
11
|
import { Section } from "../section.js";
|
|
12
|
+
import { FormWarningText } from "../../../components/elements/form-warning.js";
|
|
13
13
|
//#region src/components-page/account-settings/teams/team-member-invitation-section.tsx
|
|
14
14
|
function TeamMemberInvitationSection(props) {
|
|
15
15
|
if (!useUser({ or: "redirect" }).usePermission(props.team, "$invite_members")) return null;
|