deepspace 0.3.8 → 0.3.10
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/cli.js +694 -145
- package/dist/cli.js.map +1 -1
- package/dist/index.d.ts +174 -10
- package/dist/index.js +594 -281
- package/dist/index.js.map +1 -1
- package/dist/server.d.ts +3805 -0
- package/dist/server.js +6371 -0
- package/dist/server.js.map +1 -0
- package/dist/worker.d.ts +153 -17
- package/dist/worker.js +246 -29
- package/dist/worker.js.map +1 -1
- package/package.json +10 -3
package/dist/index.js
CHANGED
|
@@ -11,13 +11,13 @@ var DEV_CONFIG = {
|
|
|
11
11
|
};
|
|
12
12
|
var PROD_CONFIG = {
|
|
13
13
|
name: "prod",
|
|
14
|
-
apiUrl: "https://
|
|
15
|
-
platformWorkerUrl: "https://
|
|
16
|
-
authUrl: "https://
|
|
17
|
-
authSignInUrl: "https://deep.space/
|
|
18
|
-
authSignUpUrl: "https://deep.space/
|
|
14
|
+
apiUrl: "https://api-worker.deep.space",
|
|
15
|
+
platformWorkerUrl: "https://platform-worker.deep.space",
|
|
16
|
+
authUrl: "https://auth.deep.space",
|
|
17
|
+
authSignInUrl: "https://auth.deep.space/login/social",
|
|
18
|
+
authSignUpUrl: "https://auth.deep.space/login/social",
|
|
19
19
|
mainAppUrl: "https://deep.space",
|
|
20
|
-
dashboardUrl: "https://
|
|
20
|
+
dashboardUrl: "https://dashboard.deep.space"
|
|
21
21
|
};
|
|
22
22
|
var cachedEnvironment = null;
|
|
23
23
|
function parseEnv(value) {
|
|
@@ -591,6 +591,55 @@ import { useEffect, useRef } from "react";
|
|
|
591
591
|
// src/client/auth/client.ts
|
|
592
592
|
import { createAuthClient } from "better-auth/react";
|
|
593
593
|
import { organizationClient, twoFactorClient } from "better-auth/client/plugins";
|
|
594
|
+
|
|
595
|
+
// src/client/auth/token.ts
|
|
596
|
+
var cachedToken = null;
|
|
597
|
+
var tokenExpiry = 0;
|
|
598
|
+
function extractExpiry(token) {
|
|
599
|
+
try {
|
|
600
|
+
const parts = token.split(".");
|
|
601
|
+
if (parts.length < 2) return 0;
|
|
602
|
+
const payload = JSON.parse(atob(parts[1].replace(/-/g, "+").replace(/_/g, "/")));
|
|
603
|
+
return (payload.exp ?? 0) * 1e3;
|
|
604
|
+
} catch {
|
|
605
|
+
return 0;
|
|
606
|
+
}
|
|
607
|
+
}
|
|
608
|
+
async function getAuthToken() {
|
|
609
|
+
if (typeof window === "undefined") return null;
|
|
610
|
+
if (cachedToken && Date.now() < tokenExpiry - 3e4) {
|
|
611
|
+
return cachedToken;
|
|
612
|
+
}
|
|
613
|
+
try {
|
|
614
|
+
const res = await fetch("/api/auth/token", {
|
|
615
|
+
method: "POST",
|
|
616
|
+
credentials: "include",
|
|
617
|
+
headers: { "Content-Type": "application/json" }
|
|
618
|
+
});
|
|
619
|
+
if (!res.ok) {
|
|
620
|
+
cachedToken = null;
|
|
621
|
+
tokenExpiry = 0;
|
|
622
|
+
return null;
|
|
623
|
+
}
|
|
624
|
+
const data = await res.json();
|
|
625
|
+
if (!data.token) {
|
|
626
|
+
cachedToken = null;
|
|
627
|
+
tokenExpiry = 0;
|
|
628
|
+
return null;
|
|
629
|
+
}
|
|
630
|
+
cachedToken = data.token;
|
|
631
|
+
tokenExpiry = extractExpiry(data.token);
|
|
632
|
+
return data.token;
|
|
633
|
+
} catch {
|
|
634
|
+
return null;
|
|
635
|
+
}
|
|
636
|
+
}
|
|
637
|
+
function clearAuthToken() {
|
|
638
|
+
cachedToken = null;
|
|
639
|
+
tokenExpiry = 0;
|
|
640
|
+
}
|
|
641
|
+
|
|
642
|
+
// src/client/auth/client.ts
|
|
594
643
|
function getBaseURL() {
|
|
595
644
|
if (typeof window !== "undefined") {
|
|
596
645
|
return window.location.origin;
|
|
@@ -604,10 +653,16 @@ var authClient = createAuthClient({
|
|
|
604
653
|
var {
|
|
605
654
|
useSession,
|
|
606
655
|
signIn,
|
|
607
|
-
signOut,
|
|
608
656
|
useActiveOrganization,
|
|
609
657
|
useListOrganizations
|
|
610
658
|
} = authClient;
|
|
659
|
+
async function signOut(...args) {
|
|
660
|
+
try {
|
|
661
|
+
return await authClient.signOut(...args);
|
|
662
|
+
} finally {
|
|
663
|
+
clearAuthToken();
|
|
664
|
+
}
|
|
665
|
+
}
|
|
611
666
|
|
|
612
667
|
// src/client/auth/DeepSpaceAuthProvider.tsx
|
|
613
668
|
import { Fragment, jsx, jsxs } from "react/jsx-runtime";
|
|
@@ -665,53 +720,6 @@ function useAuthUser() {
|
|
|
665
720
|
};
|
|
666
721
|
}
|
|
667
722
|
|
|
668
|
-
// src/client/auth/token.ts
|
|
669
|
-
var cachedToken = null;
|
|
670
|
-
var tokenExpiry = 0;
|
|
671
|
-
function extractExpiry(token) {
|
|
672
|
-
try {
|
|
673
|
-
const parts = token.split(".");
|
|
674
|
-
if (parts.length < 2) return 0;
|
|
675
|
-
const payload = JSON.parse(atob(parts[1].replace(/-/g, "+").replace(/_/g, "/")));
|
|
676
|
-
return (payload.exp ?? 0) * 1e3;
|
|
677
|
-
} catch {
|
|
678
|
-
return 0;
|
|
679
|
-
}
|
|
680
|
-
}
|
|
681
|
-
async function getAuthToken() {
|
|
682
|
-
if (typeof window === "undefined") return null;
|
|
683
|
-
if (cachedToken && Date.now() < tokenExpiry - 3e4) {
|
|
684
|
-
return cachedToken;
|
|
685
|
-
}
|
|
686
|
-
try {
|
|
687
|
-
const res = await fetch("/api/auth/token", {
|
|
688
|
-
method: "POST",
|
|
689
|
-
credentials: "include",
|
|
690
|
-
headers: { "Content-Type": "application/json" }
|
|
691
|
-
});
|
|
692
|
-
if (!res.ok) {
|
|
693
|
-
cachedToken = null;
|
|
694
|
-
tokenExpiry = 0;
|
|
695
|
-
return null;
|
|
696
|
-
}
|
|
697
|
-
const data = await res.json();
|
|
698
|
-
if (!data.token) {
|
|
699
|
-
cachedToken = null;
|
|
700
|
-
tokenExpiry = 0;
|
|
701
|
-
return null;
|
|
702
|
-
}
|
|
703
|
-
cachedToken = data.token;
|
|
704
|
-
tokenExpiry = extractExpiry(data.token);
|
|
705
|
-
return data.token;
|
|
706
|
-
} catch {
|
|
707
|
-
return null;
|
|
708
|
-
}
|
|
709
|
-
}
|
|
710
|
-
function clearAuthToken() {
|
|
711
|
-
cachedToken = null;
|
|
712
|
-
tokenExpiry = 0;
|
|
713
|
-
}
|
|
714
|
-
|
|
715
723
|
// src/client/auth/AuthOverlay.tsx
|
|
716
724
|
import { useState } from "react";
|
|
717
725
|
import { Fragment as Fragment2, jsx as jsx2, jsxs as jsxs2 } from "react/jsx-runtime";
|
|
@@ -1335,9 +1343,15 @@ function useRecordAuth() {
|
|
|
1335
1343
|
}
|
|
1336
1344
|
function recordMatchesWhere(record, where) {
|
|
1337
1345
|
if (!where) return true;
|
|
1338
|
-
const
|
|
1346
|
+
const r = record;
|
|
1347
|
+
const data = r.data;
|
|
1339
1348
|
if (!data) return false;
|
|
1340
|
-
return Object.entries(where).every(([key, value]) =>
|
|
1349
|
+
return Object.entries(where).every(([key, value]) => {
|
|
1350
|
+
if (key in data) return data[key] === value;
|
|
1351
|
+
if (key === "recordId") return r.recordId === value;
|
|
1352
|
+
if (key === "createdBy") return r.createdBy === value;
|
|
1353
|
+
return false;
|
|
1354
|
+
});
|
|
1341
1355
|
}
|
|
1342
1356
|
function RecordProviderCore({
|
|
1343
1357
|
roomId,
|
|
@@ -1816,9 +1830,15 @@ function wsLog(event, label) {
|
|
|
1816
1830
|
import { Fragment as Fragment6, jsx as jsx7, jsxs as jsxs4 } from "react/jsx-runtime";
|
|
1817
1831
|
function recordMatchesWhere2(record, where) {
|
|
1818
1832
|
if (!where) return true;
|
|
1819
|
-
const
|
|
1833
|
+
const r = record;
|
|
1834
|
+
const data = r.data;
|
|
1820
1835
|
if (!data) return false;
|
|
1821
|
-
return Object.entries(where).every(([key, value]) =>
|
|
1836
|
+
return Object.entries(where).every(([key, value]) => {
|
|
1837
|
+
if (key in data) return data[key] === value;
|
|
1838
|
+
if (key === "recordId") return r.recordId === value;
|
|
1839
|
+
if (key === "createdBy") return r.createdBy === value;
|
|
1840
|
+
return false;
|
|
1841
|
+
});
|
|
1822
1842
|
}
|
|
1823
1843
|
function HeadlessScope({ roomId, schemas, appId, wsUrl, wsPathPrefix }) {
|
|
1824
1844
|
return /* @__PURE__ */ jsx7(
|
|
@@ -2645,8 +2665,12 @@ function useYjsRoom(docId, fieldName) {
|
|
|
2645
2665
|
const docRef = useRef8(null);
|
|
2646
2666
|
if (!docRef.current) docRef.current = new Y3.Doc();
|
|
2647
2667
|
const doc = docRef.current;
|
|
2668
|
+
const awarenessRef = useRef8(null);
|
|
2669
|
+
if (!awarenessRef.current) awarenessRef.current = new Awareness(doc);
|
|
2670
|
+
const awareness = awarenessRef.current;
|
|
2648
2671
|
const wsRef = useRef8(null);
|
|
2649
2672
|
const isLocalRef = useRef8(false);
|
|
2673
|
+
const applyingRemoteAwarenessRef = useRef8(false);
|
|
2650
2674
|
const yText = useMemo9(() => doc.getText(fieldName), [doc, fieldName]);
|
|
2651
2675
|
useEffect10(() => {
|
|
2652
2676
|
const observer = () => {
|
|
@@ -2679,7 +2703,7 @@ function useYjsRoom(docId, fieldName) {
|
|
|
2679
2703
|
if (typeof event.data === "string") {
|
|
2680
2704
|
try {
|
|
2681
2705
|
const msg = JSON.parse(event.data);
|
|
2682
|
-
if (msg.type === "auth") setCanWrite(msg.canWrite);
|
|
2706
|
+
if (msg.type === "auth" && typeof msg.canWrite === "boolean") setCanWrite(msg.canWrite);
|
|
2683
2707
|
} catch {
|
|
2684
2708
|
}
|
|
2685
2709
|
return;
|
|
@@ -2713,6 +2737,15 @@ function useYjsRoom(docId, fieldName) {
|
|
|
2713
2737
|
break;
|
|
2714
2738
|
}
|
|
2715
2739
|
}
|
|
2740
|
+
return;
|
|
2741
|
+
}
|
|
2742
|
+
if (messageType === MSG_AWARENESS) {
|
|
2743
|
+
applyingRemoteAwarenessRef.current = true;
|
|
2744
|
+
try {
|
|
2745
|
+
handleAwarenessMessage(awareness, data);
|
|
2746
|
+
} finally {
|
|
2747
|
+
applyingRemoteAwarenessRef.current = false;
|
|
2748
|
+
}
|
|
2716
2749
|
}
|
|
2717
2750
|
};
|
|
2718
2751
|
ws.onclose = () => {
|
|
@@ -2736,7 +2769,22 @@ function useYjsRoom(docId, fieldName) {
|
|
|
2736
2769
|
}
|
|
2737
2770
|
wsRef.current = null;
|
|
2738
2771
|
};
|
|
2739
|
-
}, [doc, docId, yText]);
|
|
2772
|
+
}, [doc, awareness, docId, yText]);
|
|
2773
|
+
useEffect10(() => {
|
|
2774
|
+
const handler = ({ added, updated, removed }) => {
|
|
2775
|
+
if (applyingRemoteAwarenessRef.current) return;
|
|
2776
|
+
const changedClients = added.concat(updated).concat(removed);
|
|
2777
|
+
if (changedClients.length === 0) return;
|
|
2778
|
+
const ws = wsRef.current;
|
|
2779
|
+
if (!ws || ws.readyState !== WebSocket.OPEN) return;
|
|
2780
|
+
ws.send(encodeAwarenessMessage(awareness, changedClients).buffer);
|
|
2781
|
+
};
|
|
2782
|
+
awareness.on("update", handler);
|
|
2783
|
+
return () => {
|
|
2784
|
+
awareness.off("update", handler);
|
|
2785
|
+
awareness.setLocalState(null);
|
|
2786
|
+
};
|
|
2787
|
+
}, [awareness]);
|
|
2740
2788
|
useEffect10(() => {
|
|
2741
2789
|
const handler = (update, origin) => {
|
|
2742
2790
|
if (origin === "server") return;
|
|
@@ -2763,7 +2811,7 @@ function useYjsRoom(docId, fieldName) {
|
|
|
2763
2811
|
});
|
|
2764
2812
|
isLocalRef.current = false;
|
|
2765
2813
|
}, [doc, yText, canWrite]);
|
|
2766
|
-
return { doc, text, setText, synced, canWrite };
|
|
2814
|
+
return { doc, awareness, text, setText, synced, canWrite };
|
|
2767
2815
|
}
|
|
2768
2816
|
|
|
2769
2817
|
// src/client/storage/hooks/useGameRoom.ts
|
|
@@ -4753,6 +4801,268 @@ function decodeAiStreamChunk(chunk) {
|
|
|
4753
4801
|
}
|
|
4754
4802
|
}
|
|
4755
4803
|
|
|
4804
|
+
// src/client/subscriptions/useSubscription.ts
|
|
4805
|
+
import { useCallback as useCallback25, useEffect as useEffect19, useState as useState16 } from "react";
|
|
4806
|
+
|
|
4807
|
+
// src/shared/subscription.ts
|
|
4808
|
+
var ENTITLED_STATUSES = /* @__PURE__ */ new Set([
|
|
4809
|
+
"active",
|
|
4810
|
+
"trialing"
|
|
4811
|
+
]);
|
|
4812
|
+
function isEntitled(tier, status) {
|
|
4813
|
+
if (tier === "free") return true;
|
|
4814
|
+
return ENTITLED_STATUSES.has(status);
|
|
4815
|
+
}
|
|
4816
|
+
|
|
4817
|
+
// src/client/subscriptions/useSubscription.ts
|
|
4818
|
+
async function authedJson(path, init) {
|
|
4819
|
+
const token = await getAuthToken();
|
|
4820
|
+
const res = await fetch(path, {
|
|
4821
|
+
...init,
|
|
4822
|
+
credentials: "include",
|
|
4823
|
+
headers: {
|
|
4824
|
+
"Content-Type": "application/json",
|
|
4825
|
+
...token ? { Authorization: `Bearer ${token}` } : {},
|
|
4826
|
+
...init?.headers
|
|
4827
|
+
}
|
|
4828
|
+
});
|
|
4829
|
+
const data = await res.json().catch(() => ({}));
|
|
4830
|
+
if (!res.ok) {
|
|
4831
|
+
throw new Error(data.error ?? `Request failed (${res.status})`);
|
|
4832
|
+
}
|
|
4833
|
+
return data;
|
|
4834
|
+
}
|
|
4835
|
+
function useSubscription() {
|
|
4836
|
+
const [state, setState] = useState16({
|
|
4837
|
+
tier: "free",
|
|
4838
|
+
status: "none",
|
|
4839
|
+
interval: null,
|
|
4840
|
+
currentPeriodEnd: null,
|
|
4841
|
+
cancelAtPeriodEnd: false,
|
|
4842
|
+
trialEndsAt: null,
|
|
4843
|
+
plans: []
|
|
4844
|
+
});
|
|
4845
|
+
const [isLoading, setLoading] = useState16(true);
|
|
4846
|
+
const [error, setError] = useState16(null);
|
|
4847
|
+
const refresh = useCallback25(async () => {
|
|
4848
|
+
setLoading(true);
|
|
4849
|
+
try {
|
|
4850
|
+
const r = await authedJson("/_deepspace/subscriptions/me");
|
|
4851
|
+
setState({
|
|
4852
|
+
tier: r.tier,
|
|
4853
|
+
status: r.status,
|
|
4854
|
+
interval: r.interval ?? null,
|
|
4855
|
+
currentPeriodEnd: r.currentPeriodEnd,
|
|
4856
|
+
cancelAtPeriodEnd: r.cancelAtPeriodEnd,
|
|
4857
|
+
trialEndsAt: r.trialEndsAt,
|
|
4858
|
+
plans: r.plans ?? []
|
|
4859
|
+
});
|
|
4860
|
+
setError(null);
|
|
4861
|
+
} catch (e) {
|
|
4862
|
+
setError(e instanceof Error ? e.message : "Failed to load subscription");
|
|
4863
|
+
} finally {
|
|
4864
|
+
setLoading(false);
|
|
4865
|
+
}
|
|
4866
|
+
}, []);
|
|
4867
|
+
useEffect19(() => {
|
|
4868
|
+
refresh();
|
|
4869
|
+
}, [refresh]);
|
|
4870
|
+
const entitled = isEntitled(state.tier, state.status);
|
|
4871
|
+
const hasTier = useCallback25(
|
|
4872
|
+
(slug) => state.tier === slug && isEntitled(state.tier, state.status),
|
|
4873
|
+
[state.tier, state.status]
|
|
4874
|
+
);
|
|
4875
|
+
const isAtLeast = useCallback25(
|
|
4876
|
+
(slug) => {
|
|
4877
|
+
if (!isEntitled(state.tier, state.status)) return false;
|
|
4878
|
+
const targetRank = state.plans.find((p) => p.slug === slug)?.rank;
|
|
4879
|
+
const currentRank = state.plans.find((p) => p.slug === state.tier)?.rank;
|
|
4880
|
+
if (targetRank == null || currentRank == null) return false;
|
|
4881
|
+
return currentRank >= targetRank;
|
|
4882
|
+
},
|
|
4883
|
+
[state.plans, state.tier, state.status]
|
|
4884
|
+
);
|
|
4885
|
+
const subscribe = useCallback25(
|
|
4886
|
+
async (planSlug, opts) => {
|
|
4887
|
+
const result = await authedJson("/_deepspace/subscriptions/checkout", {
|
|
4888
|
+
method: "POST",
|
|
4889
|
+
body: JSON.stringify({
|
|
4890
|
+
planSlug,
|
|
4891
|
+
interval: opts?.interval ?? "month",
|
|
4892
|
+
returnUrl: opts?.returnUrl ?? window.location.href,
|
|
4893
|
+
cancelUrl: opts?.cancelUrl ?? window.location.href,
|
|
4894
|
+
requestNonce: crypto.randomUUID()
|
|
4895
|
+
})
|
|
4896
|
+
});
|
|
4897
|
+
if (result.immediate) await refresh();
|
|
4898
|
+
if (typeof window !== "undefined" && result.url) {
|
|
4899
|
+
window.location.href = result.url;
|
|
4900
|
+
}
|
|
4901
|
+
return result;
|
|
4902
|
+
},
|
|
4903
|
+
[refresh]
|
|
4904
|
+
);
|
|
4905
|
+
const openPortal = useCallback25(
|
|
4906
|
+
async (returnUrl) => {
|
|
4907
|
+
return authedJson("/_deepspace/subscriptions/portal", {
|
|
4908
|
+
method: "POST",
|
|
4909
|
+
body: JSON.stringify({ returnUrl: returnUrl ?? window.location.href })
|
|
4910
|
+
});
|
|
4911
|
+
},
|
|
4912
|
+
[]
|
|
4913
|
+
);
|
|
4914
|
+
return {
|
|
4915
|
+
tier: state.tier,
|
|
4916
|
+
status: state.status,
|
|
4917
|
+
entitled,
|
|
4918
|
+
interval: state.interval,
|
|
4919
|
+
currentPeriodEnd: state.currentPeriodEnd,
|
|
4920
|
+
cancelAtPeriodEnd: state.cancelAtPeriodEnd,
|
|
4921
|
+
trialEndsAt: state.trialEndsAt,
|
|
4922
|
+
isLoading,
|
|
4923
|
+
error,
|
|
4924
|
+
hasTier,
|
|
4925
|
+
isAtLeast,
|
|
4926
|
+
plans: state.plans,
|
|
4927
|
+
subscribe,
|
|
4928
|
+
openPortal,
|
|
4929
|
+
refresh
|
|
4930
|
+
};
|
|
4931
|
+
}
|
|
4932
|
+
|
|
4933
|
+
// src/client/subscriptions/PricingTable.tsx
|
|
4934
|
+
import { jsx as jsx10, jsxs as jsxs5 } from "react/jsx-runtime";
|
|
4935
|
+
function PricingTable(props) {
|
|
4936
|
+
const interval = props.interval ?? "month";
|
|
4937
|
+
return /* @__PURE__ */ jsx10("div", { className: "grid gap-4 md:grid-cols-3", children: props.plans.map((plan) => {
|
|
4938
|
+
const price = plan.prices.find((p) => p.interval === interval);
|
|
4939
|
+
const selected = props.currentTier === plan.slug;
|
|
4940
|
+
const isTrueFree = plan.prices.length === 0;
|
|
4941
|
+
const otherIntervals = plan.prices.map((p) => p.interval).filter((i) => i !== interval);
|
|
4942
|
+
const intervalUnavailable = !price && !isTrueFree;
|
|
4943
|
+
const onlyInterval = otherIntervals.length === 1 ? otherIntervals[0] : null;
|
|
4944
|
+
const unavailableLabel = onlyInterval ? onlyInterval === "month" ? "Monthly only" : "Yearly only" : "Unavailable";
|
|
4945
|
+
const priceLabel = price ? `$${(price.priceCents / 100).toFixed(0)}` : isTrueFree ? "Free" : unavailableLabel;
|
|
4946
|
+
const disabled = selected || intervalUnavailable;
|
|
4947
|
+
return /* @__PURE__ */ jsxs5("section", { className: "rounded-lg border border-border p-5", children: [
|
|
4948
|
+
/* @__PURE__ */ jsxs5("div", { className: "space-y-1", children: [
|
|
4949
|
+
/* @__PURE__ */ jsx10("h3", { className: "text-lg font-semibold", children: plan.name }),
|
|
4950
|
+
/* @__PURE__ */ jsxs5("p", { className: "text-3xl font-semibold", children: [
|
|
4951
|
+
priceLabel,
|
|
4952
|
+
/* @__PURE__ */ jsx10("span", { className: "text-sm font-normal text-muted-foreground", children: price ? `/${interval}` : "" })
|
|
4953
|
+
] }),
|
|
4954
|
+
plan.trialDays ? /* @__PURE__ */ jsxs5("p", { className: "text-xs text-muted-foreground", children: [
|
|
4955
|
+
plan.trialDays,
|
|
4956
|
+
"-day free trial"
|
|
4957
|
+
] }) : null
|
|
4958
|
+
] }),
|
|
4959
|
+
/* @__PURE__ */ jsx10(
|
|
4960
|
+
"button",
|
|
4961
|
+
{
|
|
4962
|
+
type: "button",
|
|
4963
|
+
disabled,
|
|
4964
|
+
onClick: () => void props.onSelect(plan.slug, interval),
|
|
4965
|
+
className: "mt-5 w-full rounded-md bg-primary px-4 py-2 text-sm font-medium text-primary-foreground disabled:cursor-not-allowed disabled:opacity-60",
|
|
4966
|
+
children: selected ? "Current plan" : intervalUnavailable ? unavailableLabel : "Select plan"
|
|
4967
|
+
}
|
|
4968
|
+
)
|
|
4969
|
+
] }, plan.slug);
|
|
4970
|
+
}) });
|
|
4971
|
+
}
|
|
4972
|
+
|
|
4973
|
+
// src/client/charges/useCheckout.ts
|
|
4974
|
+
import { useCallback as useCallback26, useEffect as useEffect20, useMemo as useMemo15, useState as useState17 } from "react";
|
|
4975
|
+
async function authedJson2(path, init) {
|
|
4976
|
+
const token = await getAuthToken();
|
|
4977
|
+
const res = await fetch(path, {
|
|
4978
|
+
...init,
|
|
4979
|
+
credentials: "include",
|
|
4980
|
+
headers: {
|
|
4981
|
+
"Content-Type": "application/json",
|
|
4982
|
+
...token ? { Authorization: `Bearer ${token}` } : {},
|
|
4983
|
+
...init?.headers
|
|
4984
|
+
}
|
|
4985
|
+
});
|
|
4986
|
+
const data = await res.json().catch(() => ({}));
|
|
4987
|
+
if (!res.ok) {
|
|
4988
|
+
throw new Error(data.error ?? `Request failed (${res.status})`);
|
|
4989
|
+
}
|
|
4990
|
+
return data;
|
|
4991
|
+
}
|
|
4992
|
+
function useCheckout(opts) {
|
|
4993
|
+
const [purchases, setPurchases] = useState17([]);
|
|
4994
|
+
const [isLoading, setLoading] = useState17(true);
|
|
4995
|
+
const [error, setError] = useState17(null);
|
|
4996
|
+
const refresh = useCallback26(async () => {
|
|
4997
|
+
setLoading(true);
|
|
4998
|
+
try {
|
|
4999
|
+
const r = await authedJson2(
|
|
5000
|
+
"/_deepspace/charges/me"
|
|
5001
|
+
);
|
|
5002
|
+
setPurchases(r.purchases ?? []);
|
|
5003
|
+
setError(null);
|
|
5004
|
+
} catch (e) {
|
|
5005
|
+
setError(e instanceof Error ? e.message : "Failed to load purchases");
|
|
5006
|
+
} finally {
|
|
5007
|
+
setLoading(false);
|
|
5008
|
+
}
|
|
5009
|
+
}, []);
|
|
5010
|
+
useEffect20(() => {
|
|
5011
|
+
refresh();
|
|
5012
|
+
}, [refresh]);
|
|
5013
|
+
const chargeOnce = useCallback26(
|
|
5014
|
+
async (chargeOpts) => {
|
|
5015
|
+
setError(null);
|
|
5016
|
+
const common = {
|
|
5017
|
+
returnUrl: chargeOpts.returnUrl ?? window.location.href,
|
|
5018
|
+
cancelUrl: chargeOpts.cancelUrl ?? window.location.href,
|
|
5019
|
+
requestNonce: crypto.randomUUID()
|
|
5020
|
+
};
|
|
5021
|
+
const body = chargeOpts.productId !== void 0 ? { ...common, productId: chargeOpts.productId } : {
|
|
5022
|
+
...common,
|
|
5023
|
+
amount: chargeOpts.amount,
|
|
5024
|
+
name: chargeOpts.name,
|
|
5025
|
+
...chargeOpts.description ? { description: chargeOpts.description } : {}
|
|
5026
|
+
};
|
|
5027
|
+
try {
|
|
5028
|
+
const result = await authedJson2(
|
|
5029
|
+
"/_deepspace/charges/create",
|
|
5030
|
+
{
|
|
5031
|
+
method: "POST",
|
|
5032
|
+
body: JSON.stringify(body)
|
|
5033
|
+
}
|
|
5034
|
+
);
|
|
5035
|
+
if (typeof window !== "undefined" && result.url) {
|
|
5036
|
+
window.location.href = result.url;
|
|
5037
|
+
}
|
|
5038
|
+
return result;
|
|
5039
|
+
} catch (e) {
|
|
5040
|
+
const msg = e instanceof Error ? e.message : "Failed to start checkout";
|
|
5041
|
+
setError(msg);
|
|
5042
|
+
throw e;
|
|
5043
|
+
}
|
|
5044
|
+
},
|
|
5045
|
+
[]
|
|
5046
|
+
);
|
|
5047
|
+
const ownsProduct = useCallback26(
|
|
5048
|
+
(productId) => purchases.some((p) => p.productId === productId),
|
|
5049
|
+
[purchases]
|
|
5050
|
+
);
|
|
5051
|
+
const owned = useMemo15(
|
|
5052
|
+
() => !!opts?.productId && purchases.some((p) => p.productId === opts.productId),
|
|
5053
|
+
[opts?.productId, purchases]
|
|
5054
|
+
);
|
|
5055
|
+
return {
|
|
5056
|
+
chargeOnce,
|
|
5057
|
+
isLoading,
|
|
5058
|
+
error,
|
|
5059
|
+
purchases,
|
|
5060
|
+
owned,
|
|
5061
|
+
ownsProduct,
|
|
5062
|
+
refresh
|
|
5063
|
+
};
|
|
5064
|
+
}
|
|
5065
|
+
|
|
4756
5066
|
// src/ui/utils.ts
|
|
4757
5067
|
import { clsx } from "clsx";
|
|
4758
5068
|
import { twMerge } from "tailwind-merge";
|
|
@@ -4762,8 +5072,8 @@ function cn(...inputs) {
|
|
|
4762
5072
|
|
|
4763
5073
|
// src/ui/Card.tsx
|
|
4764
5074
|
import * as React7 from "react";
|
|
4765
|
-
import { jsx as
|
|
4766
|
-
var Card = React7.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */
|
|
5075
|
+
import { jsx as jsx11 } from "react/jsx-runtime";
|
|
5076
|
+
var Card = React7.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx11(
|
|
4767
5077
|
"div",
|
|
4768
5078
|
{
|
|
4769
5079
|
ref,
|
|
@@ -4775,7 +5085,7 @@ var Card = React7.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ j
|
|
|
4775
5085
|
}
|
|
4776
5086
|
));
|
|
4777
5087
|
Card.displayName = "Card";
|
|
4778
|
-
var CardHeader = React7.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */
|
|
5088
|
+
var CardHeader = React7.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx11(
|
|
4779
5089
|
"div",
|
|
4780
5090
|
{
|
|
4781
5091
|
ref,
|
|
@@ -4784,7 +5094,7 @@ var CardHeader = React7.forwardRef(({ className, ...props }, ref) => /* @__PURE_
|
|
|
4784
5094
|
}
|
|
4785
5095
|
));
|
|
4786
5096
|
CardHeader.displayName = "CardHeader";
|
|
4787
|
-
var CardTitle = React7.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */
|
|
5097
|
+
var CardTitle = React7.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx11(
|
|
4788
5098
|
"div",
|
|
4789
5099
|
{
|
|
4790
5100
|
ref,
|
|
@@ -4793,7 +5103,7 @@ var CardTitle = React7.forwardRef(({ className, ...props }, ref) => /* @__PURE__
|
|
|
4793
5103
|
}
|
|
4794
5104
|
));
|
|
4795
5105
|
CardTitle.displayName = "CardTitle";
|
|
4796
|
-
var CardDescription = React7.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */
|
|
5106
|
+
var CardDescription = React7.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx11(
|
|
4797
5107
|
"div",
|
|
4798
5108
|
{
|
|
4799
5109
|
ref,
|
|
@@ -4802,9 +5112,9 @@ var CardDescription = React7.forwardRef(({ className, ...props }, ref) => /* @__
|
|
|
4802
5112
|
}
|
|
4803
5113
|
));
|
|
4804
5114
|
CardDescription.displayName = "CardDescription";
|
|
4805
|
-
var CardContent = React7.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */
|
|
5115
|
+
var CardContent = React7.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx11("div", { ref, className: cn("p-4 pt-0 sm:p-6 sm:pt-0", className), ...props }));
|
|
4806
5116
|
CardContent.displayName = "CardContent";
|
|
4807
|
-
var CardFooter = React7.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */
|
|
5117
|
+
var CardFooter = React7.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx11(
|
|
4808
5118
|
"div",
|
|
4809
5119
|
{
|
|
4810
5120
|
ref,
|
|
@@ -4817,9 +5127,9 @@ CardFooter.displayName = "CardFooter";
|
|
|
4817
5127
|
// src/ui/Separator.tsx
|
|
4818
5128
|
import * as React8 from "react";
|
|
4819
5129
|
import * as SeparatorPrimitive from "@radix-ui/react-separator";
|
|
4820
|
-
import { jsx as
|
|
5130
|
+
import { jsx as jsx12 } from "react/jsx-runtime";
|
|
4821
5131
|
var Separator = React8.forwardRef(
|
|
4822
|
-
({ className, orientation = "horizontal", decorative = true, ...props }, ref) => /* @__PURE__ */
|
|
5132
|
+
({ className, orientation = "horizontal", decorative = true, ...props }, ref) => /* @__PURE__ */ jsx12(
|
|
4823
5133
|
SeparatorPrimitive.Root,
|
|
4824
5134
|
{
|
|
4825
5135
|
ref,
|
|
@@ -4838,8 +5148,8 @@ Separator.displayName = SeparatorPrimitive.Root.displayName;
|
|
|
4838
5148
|
|
|
4839
5149
|
// src/ui/Table.tsx
|
|
4840
5150
|
import * as React9 from "react";
|
|
4841
|
-
import { jsx as
|
|
4842
|
-
var Table = React9.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */
|
|
5151
|
+
import { jsx as jsx13 } from "react/jsx-runtime";
|
|
5152
|
+
var Table = React9.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx13("div", { className: "relative w-full overflow-auto", children: /* @__PURE__ */ jsx13(
|
|
4843
5153
|
"table",
|
|
4844
5154
|
{
|
|
4845
5155
|
ref,
|
|
@@ -4848,9 +5158,9 @@ var Table = React9.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */
|
|
|
4848
5158
|
}
|
|
4849
5159
|
) }));
|
|
4850
5160
|
Table.displayName = "Table";
|
|
4851
|
-
var TableHeader = React9.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */
|
|
5161
|
+
var TableHeader = React9.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx13("thead", { ref, className: cn("[&_tr]:border-b", className), ...props }));
|
|
4852
5162
|
TableHeader.displayName = "TableHeader";
|
|
4853
|
-
var TableBody = React9.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */
|
|
5163
|
+
var TableBody = React9.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx13(
|
|
4854
5164
|
"tbody",
|
|
4855
5165
|
{
|
|
4856
5166
|
ref,
|
|
@@ -4859,7 +5169,7 @@ var TableBody = React9.forwardRef(({ className, ...props }, ref) => /* @__PURE__
|
|
|
4859
5169
|
}
|
|
4860
5170
|
));
|
|
4861
5171
|
TableBody.displayName = "TableBody";
|
|
4862
|
-
var TableFooter = React9.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */
|
|
5172
|
+
var TableFooter = React9.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx13(
|
|
4863
5173
|
"tfoot",
|
|
4864
5174
|
{
|
|
4865
5175
|
ref,
|
|
@@ -4871,7 +5181,7 @@ var TableFooter = React9.forwardRef(({ className, ...props }, ref) => /* @__PURE
|
|
|
4871
5181
|
}
|
|
4872
5182
|
));
|
|
4873
5183
|
TableFooter.displayName = "TableFooter";
|
|
4874
|
-
var TableRow = React9.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */
|
|
5184
|
+
var TableRow = React9.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx13(
|
|
4875
5185
|
"tr",
|
|
4876
5186
|
{
|
|
4877
5187
|
ref,
|
|
@@ -4883,7 +5193,7 @@ var TableRow = React9.forwardRef(({ className, ...props }, ref) => /* @__PURE__
|
|
|
4883
5193
|
}
|
|
4884
5194
|
));
|
|
4885
5195
|
TableRow.displayName = "TableRow";
|
|
4886
|
-
var TableHead = React9.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */
|
|
5196
|
+
var TableHead = React9.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx13(
|
|
4887
5197
|
"th",
|
|
4888
5198
|
{
|
|
4889
5199
|
ref,
|
|
@@ -4895,7 +5205,7 @@ var TableHead = React9.forwardRef(({ className, ...props }, ref) => /* @__PURE__
|
|
|
4895
5205
|
}
|
|
4896
5206
|
));
|
|
4897
5207
|
TableHead.displayName = "TableHead";
|
|
4898
|
-
var TableCell = React9.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */
|
|
5208
|
+
var TableCell = React9.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx13(
|
|
4899
5209
|
"td",
|
|
4900
5210
|
{
|
|
4901
5211
|
ref,
|
|
@@ -4907,7 +5217,7 @@ var TableCell = React9.forwardRef(({ className, ...props }, ref) => /* @__PURE__
|
|
|
4907
5217
|
}
|
|
4908
5218
|
));
|
|
4909
5219
|
TableCell.displayName = "TableCell";
|
|
4910
|
-
var TableCaption = React9.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */
|
|
5220
|
+
var TableCaption = React9.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx13(
|
|
4911
5221
|
"caption",
|
|
4912
5222
|
{
|
|
4913
5223
|
ref,
|
|
@@ -4920,9 +5230,9 @@ TableCaption.displayName = "TableCaption";
|
|
|
4920
5230
|
// src/ui/Tabs.tsx
|
|
4921
5231
|
import * as React10 from "react";
|
|
4922
5232
|
import * as TabsPrimitive from "@radix-ui/react-tabs";
|
|
4923
|
-
import { jsx as
|
|
5233
|
+
import { jsx as jsx14 } from "react/jsx-runtime";
|
|
4924
5234
|
var Tabs = TabsPrimitive.Root;
|
|
4925
|
-
var TabsList = React10.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */
|
|
5235
|
+
var TabsList = React10.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx14(
|
|
4926
5236
|
TabsPrimitive.List,
|
|
4927
5237
|
{
|
|
4928
5238
|
ref,
|
|
@@ -4934,7 +5244,7 @@ var TabsList = React10.forwardRef(({ className, ...props }, ref) => /* @__PURE__
|
|
|
4934
5244
|
}
|
|
4935
5245
|
));
|
|
4936
5246
|
TabsList.displayName = TabsPrimitive.List.displayName;
|
|
4937
|
-
var TabsTrigger = React10.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */
|
|
5247
|
+
var TabsTrigger = React10.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx14(
|
|
4938
5248
|
TabsPrimitive.Trigger,
|
|
4939
5249
|
{
|
|
4940
5250
|
ref,
|
|
@@ -4946,7 +5256,7 @@ var TabsTrigger = React10.forwardRef(({ className, ...props }, ref) => /* @__PUR
|
|
|
4946
5256
|
}
|
|
4947
5257
|
));
|
|
4948
5258
|
TabsTrigger.displayName = TabsPrimitive.Trigger.displayName;
|
|
4949
|
-
var TabsContent = React10.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */
|
|
5259
|
+
var TabsContent = React10.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx14(
|
|
4950
5260
|
TabsPrimitive.Content,
|
|
4951
5261
|
{
|
|
4952
5262
|
ref,
|
|
@@ -4963,7 +5273,7 @@ TabsContent.displayName = TabsPrimitive.Content.displayName;
|
|
|
4963
5273
|
import * as React11 from "react";
|
|
4964
5274
|
import { Slot } from "@radix-ui/react-slot";
|
|
4965
5275
|
import { cva } from "class-variance-authority";
|
|
4966
|
-
import { jsx as
|
|
5276
|
+
import { jsx as jsx15, jsxs as jsxs6 } from "react/jsx-runtime";
|
|
4967
5277
|
var buttonVariants = cva(
|
|
4968
5278
|
"inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-lg text-sm font-medium transition-all duration-200 focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:size-4 [&_svg]:shrink-0",
|
|
4969
5279
|
{
|
|
@@ -4992,7 +5302,7 @@ var buttonVariants = cva(
|
|
|
4992
5302
|
var Button = React11.forwardRef(
|
|
4993
5303
|
({ className, variant, size, asChild = false, loading = false, disabled, children, ...props }, ref) => {
|
|
4994
5304
|
const Comp = asChild ? Slot : "button";
|
|
4995
|
-
return /* @__PURE__ */
|
|
5305
|
+
return /* @__PURE__ */ jsxs6(
|
|
4996
5306
|
Comp,
|
|
4997
5307
|
{
|
|
4998
5308
|
className: cn(buttonVariants({ variant, size, className })),
|
|
@@ -5000,7 +5310,7 @@ var Button = React11.forwardRef(
|
|
|
5000
5310
|
disabled: disabled || loading,
|
|
5001
5311
|
...props,
|
|
5002
5312
|
children: [
|
|
5003
|
-
loading && /* @__PURE__ */
|
|
5313
|
+
loading && /* @__PURE__ */ jsx15("span", { className: "w-4 h-4 border-2 border-current border-t-transparent rounded-full animate-spin" }),
|
|
5004
5314
|
children
|
|
5005
5315
|
]
|
|
5006
5316
|
}
|
|
@@ -5011,10 +5321,10 @@ Button.displayName = "Button";
|
|
|
5011
5321
|
|
|
5012
5322
|
// src/ui/Input.tsx
|
|
5013
5323
|
import * as React12 from "react";
|
|
5014
|
-
import { jsx as
|
|
5324
|
+
import { jsx as jsx16 } from "react/jsx-runtime";
|
|
5015
5325
|
var Input = React12.forwardRef(
|
|
5016
5326
|
({ className, type, ...props }, ref) => {
|
|
5017
|
-
return /* @__PURE__ */
|
|
5327
|
+
return /* @__PURE__ */ jsx16(
|
|
5018
5328
|
"input",
|
|
5019
5329
|
{
|
|
5020
5330
|
type,
|
|
@@ -5032,9 +5342,9 @@ Input.displayName = "Input";
|
|
|
5032
5342
|
|
|
5033
5343
|
// src/ui/Textarea.tsx
|
|
5034
5344
|
import * as React13 from "react";
|
|
5035
|
-
import { jsx as
|
|
5345
|
+
import { jsx as jsx17 } from "react/jsx-runtime";
|
|
5036
5346
|
var Textarea = React13.forwardRef(({ className, ...props }, ref) => {
|
|
5037
|
-
return /* @__PURE__ */
|
|
5347
|
+
return /* @__PURE__ */ jsx17(
|
|
5038
5348
|
"textarea",
|
|
5039
5349
|
{
|
|
5040
5350
|
className: cn(
|
|
@@ -5052,11 +5362,11 @@ Textarea.displayName = "Textarea";
|
|
|
5052
5362
|
import * as React14 from "react";
|
|
5053
5363
|
import * as SelectPrimitive from "@radix-ui/react-select";
|
|
5054
5364
|
import { Check, ChevronDown, ChevronUp } from "lucide-react";
|
|
5055
|
-
import { jsx as
|
|
5365
|
+
import { jsx as jsx18, jsxs as jsxs7 } from "react/jsx-runtime";
|
|
5056
5366
|
var Select = SelectPrimitive.Root;
|
|
5057
5367
|
var SelectGroup = SelectPrimitive.Group;
|
|
5058
5368
|
var SelectValue = SelectPrimitive.Value;
|
|
5059
|
-
var SelectTrigger = React14.forwardRef(({ className, children, ...props }, ref) => /* @__PURE__ */
|
|
5369
|
+
var SelectTrigger = React14.forwardRef(({ className, children, ...props }, ref) => /* @__PURE__ */ jsxs7(
|
|
5060
5370
|
SelectPrimitive.Trigger,
|
|
5061
5371
|
{
|
|
5062
5372
|
ref,
|
|
@@ -5067,12 +5377,12 @@ var SelectTrigger = React14.forwardRef(({ className, children, ...props }, ref)
|
|
|
5067
5377
|
...props,
|
|
5068
5378
|
children: [
|
|
5069
5379
|
children,
|
|
5070
|
-
/* @__PURE__ */
|
|
5380
|
+
/* @__PURE__ */ jsx18(SelectPrimitive.Icon, { asChild: true, children: /* @__PURE__ */ jsx18(ChevronDown, { className: "h-4 w-4 opacity-50" }) })
|
|
5071
5381
|
]
|
|
5072
5382
|
}
|
|
5073
5383
|
));
|
|
5074
5384
|
SelectTrigger.displayName = SelectPrimitive.Trigger.displayName;
|
|
5075
|
-
var SelectScrollUpButton = React14.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */
|
|
5385
|
+
var SelectScrollUpButton = React14.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx18(
|
|
5076
5386
|
SelectPrimitive.ScrollUpButton,
|
|
5077
5387
|
{
|
|
5078
5388
|
ref,
|
|
@@ -5081,11 +5391,11 @@ var SelectScrollUpButton = React14.forwardRef(({ className, ...props }, ref) =>
|
|
|
5081
5391
|
className
|
|
5082
5392
|
),
|
|
5083
5393
|
...props,
|
|
5084
|
-
children: /* @__PURE__ */
|
|
5394
|
+
children: /* @__PURE__ */ jsx18(ChevronUp, { className: "h-4 w-4" })
|
|
5085
5395
|
}
|
|
5086
5396
|
));
|
|
5087
5397
|
SelectScrollUpButton.displayName = SelectPrimitive.ScrollUpButton.displayName;
|
|
5088
|
-
var SelectScrollDownButton = React14.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */
|
|
5398
|
+
var SelectScrollDownButton = React14.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx18(
|
|
5089
5399
|
SelectPrimitive.ScrollDownButton,
|
|
5090
5400
|
{
|
|
5091
5401
|
ref,
|
|
@@ -5094,11 +5404,11 @@ var SelectScrollDownButton = React14.forwardRef(({ className, ...props }, ref) =
|
|
|
5094
5404
|
className
|
|
5095
5405
|
),
|
|
5096
5406
|
...props,
|
|
5097
|
-
children: /* @__PURE__ */
|
|
5407
|
+
children: /* @__PURE__ */ jsx18(ChevronDown, { className: "h-4 w-4" })
|
|
5098
5408
|
}
|
|
5099
5409
|
));
|
|
5100
5410
|
SelectScrollDownButton.displayName = SelectPrimitive.ScrollDownButton.displayName;
|
|
5101
|
-
var SelectContent = React14.forwardRef(({ className, children, position = "popper", ...props }, ref) => /* @__PURE__ */
|
|
5411
|
+
var SelectContent = React14.forwardRef(({ className, children, position = "popper", ...props }, ref) => /* @__PURE__ */ jsx18(SelectPrimitive.Portal, { children: /* @__PURE__ */ jsxs7(
|
|
5102
5412
|
SelectPrimitive.Content,
|
|
5103
5413
|
{
|
|
5104
5414
|
ref,
|
|
@@ -5110,8 +5420,8 @@ var SelectContent = React14.forwardRef(({ className, children, position = "poppe
|
|
|
5110
5420
|
position,
|
|
5111
5421
|
...props,
|
|
5112
5422
|
children: [
|
|
5113
|
-
/* @__PURE__ */
|
|
5114
|
-
/* @__PURE__ */
|
|
5423
|
+
/* @__PURE__ */ jsx18(SelectScrollUpButton, {}),
|
|
5424
|
+
/* @__PURE__ */ jsx18(
|
|
5115
5425
|
SelectPrimitive.Viewport,
|
|
5116
5426
|
{
|
|
5117
5427
|
className: cn(
|
|
@@ -5121,12 +5431,12 @@ var SelectContent = React14.forwardRef(({ className, children, position = "poppe
|
|
|
5121
5431
|
children
|
|
5122
5432
|
}
|
|
5123
5433
|
),
|
|
5124
|
-
/* @__PURE__ */
|
|
5434
|
+
/* @__PURE__ */ jsx18(SelectScrollDownButton, {})
|
|
5125
5435
|
]
|
|
5126
5436
|
}
|
|
5127
5437
|
) }));
|
|
5128
5438
|
SelectContent.displayName = SelectPrimitive.Content.displayName;
|
|
5129
|
-
var SelectLabel = React14.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */
|
|
5439
|
+
var SelectLabel = React14.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx18(
|
|
5130
5440
|
SelectPrimitive.Label,
|
|
5131
5441
|
{
|
|
5132
5442
|
ref,
|
|
@@ -5135,7 +5445,7 @@ var SelectLabel = React14.forwardRef(({ className, ...props }, ref) => /* @__PUR
|
|
|
5135
5445
|
}
|
|
5136
5446
|
));
|
|
5137
5447
|
SelectLabel.displayName = SelectPrimitive.Label.displayName;
|
|
5138
|
-
var SelectItem = React14.forwardRef(({ className, children, ...props }, ref) => /* @__PURE__ */
|
|
5448
|
+
var SelectItem = React14.forwardRef(({ className, children, ...props }, ref) => /* @__PURE__ */ jsxs7(
|
|
5139
5449
|
SelectPrimitive.Item,
|
|
5140
5450
|
{
|
|
5141
5451
|
ref,
|
|
@@ -5145,13 +5455,13 @@ var SelectItem = React14.forwardRef(({ className, children, ...props }, ref) =>
|
|
|
5145
5455
|
),
|
|
5146
5456
|
...props,
|
|
5147
5457
|
children: [
|
|
5148
|
-
/* @__PURE__ */
|
|
5149
|
-
/* @__PURE__ */
|
|
5458
|
+
/* @__PURE__ */ jsx18("span", { className: "absolute right-2 flex h-3.5 w-3.5 items-center justify-center", children: /* @__PURE__ */ jsx18(SelectPrimitive.ItemIndicator, { children: /* @__PURE__ */ jsx18(Check, { className: "h-4 w-4" }) }) }),
|
|
5459
|
+
/* @__PURE__ */ jsx18(SelectPrimitive.ItemText, { children })
|
|
5150
5460
|
]
|
|
5151
5461
|
}
|
|
5152
5462
|
));
|
|
5153
5463
|
SelectItem.displayName = SelectPrimitive.Item.displayName;
|
|
5154
|
-
var SelectSeparator = React14.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */
|
|
5464
|
+
var SelectSeparator = React14.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx18(
|
|
5155
5465
|
SelectPrimitive.Separator,
|
|
5156
5466
|
{
|
|
5157
5467
|
ref,
|
|
@@ -5165,8 +5475,8 @@ SelectSeparator.displayName = SelectPrimitive.Separator.displayName;
|
|
|
5165
5475
|
import * as React15 from "react";
|
|
5166
5476
|
import * as CheckboxPrimitive from "@radix-ui/react-checkbox";
|
|
5167
5477
|
import { Check as Check2 } from "lucide-react";
|
|
5168
|
-
import { jsx as
|
|
5169
|
-
var Checkbox = React15.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */
|
|
5478
|
+
import { jsx as jsx19 } from "react/jsx-runtime";
|
|
5479
|
+
var Checkbox = React15.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx19(
|
|
5170
5480
|
CheckboxPrimitive.Root,
|
|
5171
5481
|
{
|
|
5172
5482
|
ref,
|
|
@@ -5175,11 +5485,11 @@ var Checkbox = React15.forwardRef(({ className, ...props }, ref) => /* @__PURE__
|
|
|
5175
5485
|
className
|
|
5176
5486
|
),
|
|
5177
5487
|
...props,
|
|
5178
|
-
children: /* @__PURE__ */
|
|
5488
|
+
children: /* @__PURE__ */ jsx19(
|
|
5179
5489
|
CheckboxPrimitive.Indicator,
|
|
5180
5490
|
{
|
|
5181
5491
|
className: cn("grid place-content-center text-current"),
|
|
5182
|
-
children: /* @__PURE__ */
|
|
5492
|
+
children: /* @__PURE__ */ jsx19(Check2, { className: "h-4 w-4" })
|
|
5183
5493
|
}
|
|
5184
5494
|
)
|
|
5185
5495
|
}
|
|
@@ -5189,8 +5499,8 @@ Checkbox.displayName = CheckboxPrimitive.Root.displayName;
|
|
|
5189
5499
|
// src/ui/Switch.tsx
|
|
5190
5500
|
import * as React16 from "react";
|
|
5191
5501
|
import * as SwitchPrimitives from "@radix-ui/react-switch";
|
|
5192
|
-
import { jsx as
|
|
5193
|
-
var Switch = React16.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */
|
|
5502
|
+
import { jsx as jsx20 } from "react/jsx-runtime";
|
|
5503
|
+
var Switch = React16.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx20(
|
|
5194
5504
|
SwitchPrimitives.Root,
|
|
5195
5505
|
{
|
|
5196
5506
|
className: cn(
|
|
@@ -5199,7 +5509,7 @@ var Switch = React16.forwardRef(({ className, ...props }, ref) => /* @__PURE__ *
|
|
|
5199
5509
|
),
|
|
5200
5510
|
...props,
|
|
5201
5511
|
ref,
|
|
5202
|
-
children: /* @__PURE__ */
|
|
5512
|
+
children: /* @__PURE__ */ jsx20(
|
|
5203
5513
|
SwitchPrimitives.Thumb,
|
|
5204
5514
|
{
|
|
5205
5515
|
className: cn(
|
|
@@ -5215,11 +5525,11 @@ Switch.displayName = SwitchPrimitives.Root.displayName;
|
|
|
5215
5525
|
import * as React17 from "react";
|
|
5216
5526
|
import * as LabelPrimitive from "@radix-ui/react-label";
|
|
5217
5527
|
import { cva as cva2 } from "class-variance-authority";
|
|
5218
|
-
import { jsx as
|
|
5528
|
+
import { jsx as jsx21 } from "react/jsx-runtime";
|
|
5219
5529
|
var labelVariants = cva2(
|
|
5220
5530
|
"text-sm font-medium leading-none peer-disabled:cursor-not-allowed peer-disabled:opacity-70"
|
|
5221
5531
|
);
|
|
5222
|
-
var Label2 = React17.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */
|
|
5532
|
+
var Label2 = React17.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx21(
|
|
5223
5533
|
LabelPrimitive.Root,
|
|
5224
5534
|
{
|
|
5225
5535
|
ref,
|
|
@@ -5231,7 +5541,7 @@ Label2.displayName = LabelPrimitive.Root.displayName;
|
|
|
5231
5541
|
|
|
5232
5542
|
// src/ui/Badge.tsx
|
|
5233
5543
|
import { cva as cva3 } from "class-variance-authority";
|
|
5234
|
-
import { jsx as
|
|
5544
|
+
import { jsx as jsx22 } from "react/jsx-runtime";
|
|
5235
5545
|
var badgeVariants = cva3(
|
|
5236
5546
|
"inline-flex items-center rounded-full border font-semibold transition-colors focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2",
|
|
5237
5547
|
{
|
|
@@ -5258,14 +5568,14 @@ var badgeVariants = cva3(
|
|
|
5258
5568
|
}
|
|
5259
5569
|
);
|
|
5260
5570
|
function Badge({ className, variant, size, ...props }) {
|
|
5261
|
-
return /* @__PURE__ */
|
|
5571
|
+
return /* @__PURE__ */ jsx22("div", { className: cn(badgeVariants({ variant, size }), className), ...props });
|
|
5262
5572
|
}
|
|
5263
5573
|
|
|
5264
5574
|
// src/ui/Avatar.tsx
|
|
5265
5575
|
import * as React18 from "react";
|
|
5266
5576
|
import * as AvatarPrimitive from "@radix-ui/react-avatar";
|
|
5267
|
-
import { jsx as
|
|
5268
|
-
var Avatar = React18.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */
|
|
5577
|
+
import { jsx as jsx23 } from "react/jsx-runtime";
|
|
5578
|
+
var Avatar = React18.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx23(
|
|
5269
5579
|
AvatarPrimitive.Root,
|
|
5270
5580
|
{
|
|
5271
5581
|
ref,
|
|
@@ -5277,7 +5587,7 @@ var Avatar = React18.forwardRef(({ className, ...props }, ref) => /* @__PURE__ *
|
|
|
5277
5587
|
}
|
|
5278
5588
|
));
|
|
5279
5589
|
Avatar.displayName = AvatarPrimitive.Root.displayName;
|
|
5280
|
-
var AvatarImage = React18.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */
|
|
5590
|
+
var AvatarImage = React18.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx23(
|
|
5281
5591
|
AvatarPrimitive.Image,
|
|
5282
5592
|
{
|
|
5283
5593
|
ref,
|
|
@@ -5286,7 +5596,7 @@ var AvatarImage = React18.forwardRef(({ className, ...props }, ref) => /* @__PUR
|
|
|
5286
5596
|
}
|
|
5287
5597
|
));
|
|
5288
5598
|
AvatarImage.displayName = AvatarPrimitive.Image.displayName;
|
|
5289
|
-
var AvatarFallback = React18.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */
|
|
5599
|
+
var AvatarFallback = React18.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx23(
|
|
5290
5600
|
AvatarPrimitive.Fallback,
|
|
5291
5601
|
{
|
|
5292
5602
|
ref,
|
|
@@ -5302,8 +5612,8 @@ AvatarFallback.displayName = AvatarPrimitive.Fallback.displayName;
|
|
|
5302
5612
|
// src/ui/Progress.tsx
|
|
5303
5613
|
import * as React19 from "react";
|
|
5304
5614
|
import * as ProgressPrimitive from "@radix-ui/react-progress";
|
|
5305
|
-
import { jsx as
|
|
5306
|
-
var Progress = React19.forwardRef(({ className, value, ...props }, ref) => /* @__PURE__ */
|
|
5615
|
+
import { jsx as jsx24 } from "react/jsx-runtime";
|
|
5616
|
+
var Progress = React19.forwardRef(({ className, value, ...props }, ref) => /* @__PURE__ */ jsx24(
|
|
5307
5617
|
ProgressPrimitive.Root,
|
|
5308
5618
|
{
|
|
5309
5619
|
ref,
|
|
@@ -5312,7 +5622,7 @@ var Progress = React19.forwardRef(({ className, value, ...props }, ref) => /* @_
|
|
|
5312
5622
|
className
|
|
5313
5623
|
),
|
|
5314
5624
|
...props,
|
|
5315
|
-
children: /* @__PURE__ */
|
|
5625
|
+
children: /* @__PURE__ */ jsx24(
|
|
5316
5626
|
ProgressPrimitive.Indicator,
|
|
5317
5627
|
{
|
|
5318
5628
|
className: "h-full w-full flex-1 bg-primary transition-all",
|
|
@@ -5324,12 +5634,12 @@ var Progress = React19.forwardRef(({ className, value, ...props }, ref) => /* @_
|
|
|
5324
5634
|
Progress.displayName = ProgressPrimitive.Root.displayName;
|
|
5325
5635
|
|
|
5326
5636
|
// src/ui/Skeleton.tsx
|
|
5327
|
-
import { jsx as
|
|
5637
|
+
import { jsx as jsx25, jsxs as jsxs8 } from "react/jsx-runtime";
|
|
5328
5638
|
function Skeleton({
|
|
5329
5639
|
className,
|
|
5330
5640
|
...props
|
|
5331
5641
|
}) {
|
|
5332
|
-
return /* @__PURE__ */
|
|
5642
|
+
return /* @__PURE__ */ jsx25(
|
|
5333
5643
|
"div",
|
|
5334
5644
|
{
|
|
5335
5645
|
className: cn("animate-pulse rounded-md bg-primary/10", className),
|
|
@@ -5342,7 +5652,7 @@ function SkeletonText({
|
|
|
5342
5652
|
lastLineWidth = "60%",
|
|
5343
5653
|
className = ""
|
|
5344
5654
|
}) {
|
|
5345
|
-
return /* @__PURE__ */
|
|
5655
|
+
return /* @__PURE__ */ jsx25("div", { className: cn("space-y-2", className), children: Array.from({ length: lines }).map((_, i) => /* @__PURE__ */ jsx25(
|
|
5346
5656
|
Skeleton,
|
|
5347
5657
|
{
|
|
5348
5658
|
className: "h-4",
|
|
@@ -5352,23 +5662,23 @@ function SkeletonText({
|
|
|
5352
5662
|
)) });
|
|
5353
5663
|
}
|
|
5354
5664
|
function SkeletonCard({ hasImage = false, className = "" }) {
|
|
5355
|
-
return /* @__PURE__ */
|
|
5356
|
-
hasImage && /* @__PURE__ */
|
|
5357
|
-
/* @__PURE__ */
|
|
5358
|
-
/* @__PURE__ */
|
|
5359
|
-
/* @__PURE__ */
|
|
5360
|
-
/* @__PURE__ */
|
|
5665
|
+
return /* @__PURE__ */ jsxs8("div", { className: cn("border border-border rounded-lg overflow-hidden", className), children: [
|
|
5666
|
+
hasImage && /* @__PURE__ */ jsx25(Skeleton, { className: "w-full h-32 rounded-none" }),
|
|
5667
|
+
/* @__PURE__ */ jsxs8("div", { className: "p-4 space-y-3", children: [
|
|
5668
|
+
/* @__PURE__ */ jsx25(Skeleton, { className: "h-5 w-3/4" }),
|
|
5669
|
+
/* @__PURE__ */ jsx25(SkeletonText, { lines: 2 }),
|
|
5670
|
+
/* @__PURE__ */ jsx25(Skeleton, { className: "h-3 w-1/3" })
|
|
5361
5671
|
] })
|
|
5362
5672
|
] });
|
|
5363
5673
|
}
|
|
5364
5674
|
function SkeletonList({ items = 5, className = "" }) {
|
|
5365
|
-
return /* @__PURE__ */
|
|
5366
|
-
/* @__PURE__ */
|
|
5367
|
-
/* @__PURE__ */
|
|
5368
|
-
/* @__PURE__ */
|
|
5369
|
-
/* @__PURE__ */
|
|
5675
|
+
return /* @__PURE__ */ jsx25("div", { className: cn("space-y-3", className), children: Array.from({ length: items }).map((_, i) => /* @__PURE__ */ jsxs8("div", { className: "flex items-center gap-3 p-3 border border-border rounded-lg", children: [
|
|
5676
|
+
/* @__PURE__ */ jsx25(Skeleton, { className: "w-10 h-10 rounded-full" }),
|
|
5677
|
+
/* @__PURE__ */ jsxs8("div", { className: "flex-1 space-y-2", children: [
|
|
5678
|
+
/* @__PURE__ */ jsx25(Skeleton, { className: "h-4 w-1/3" }),
|
|
5679
|
+
/* @__PURE__ */ jsx25(Skeleton, { className: "h-3 w-1/2" })
|
|
5370
5680
|
] }),
|
|
5371
|
-
/* @__PURE__ */
|
|
5681
|
+
/* @__PURE__ */ jsx25(Skeleton, { className: "w-16 h-6" })
|
|
5372
5682
|
] }, i)) });
|
|
5373
5683
|
}
|
|
5374
5684
|
function SkeletonTable({
|
|
@@ -5376,9 +5686,9 @@ function SkeletonTable({
|
|
|
5376
5686
|
columns = 4,
|
|
5377
5687
|
className = ""
|
|
5378
5688
|
}) {
|
|
5379
|
-
return /* @__PURE__ */
|
|
5380
|
-
/* @__PURE__ */
|
|
5381
|
-
Array.from({ length: rows }).map((_, rowIndex) => /* @__PURE__ */
|
|
5689
|
+
return /* @__PURE__ */ jsxs8("div", { className: cn("border border-border rounded-lg overflow-hidden", className), children: [
|
|
5690
|
+
/* @__PURE__ */ jsx25("div", { className: "flex gap-4 p-4 bg-muted/50 border-b border-border", children: Array.from({ length: columns }).map((_, i) => /* @__PURE__ */ jsx25(Skeleton, { className: "h-4 flex-1" }, i)) }),
|
|
5691
|
+
Array.from({ length: rows }).map((_, rowIndex) => /* @__PURE__ */ jsx25("div", { className: "flex gap-4 p-4 border-b border-border last:border-0", children: Array.from({ length: columns }).map((_2, colIndex) => /* @__PURE__ */ jsx25(
|
|
5382
5692
|
Skeleton,
|
|
5383
5693
|
{
|
|
5384
5694
|
className: "h-4 flex-1",
|
|
@@ -5394,7 +5704,7 @@ function SkeletonAvatar({ size = "md", className = "" }) {
|
|
|
5394
5704
|
md: "w-10 h-10",
|
|
5395
5705
|
lg: "w-12 h-12"
|
|
5396
5706
|
};
|
|
5397
|
-
return /* @__PURE__ */
|
|
5707
|
+
return /* @__PURE__ */ jsx25(Skeleton, { className: cn(sizes[size], "rounded-full", className) });
|
|
5398
5708
|
}
|
|
5399
5709
|
function LoadingSpinner({ size = "md", className = "" }) {
|
|
5400
5710
|
const sizes = {
|
|
@@ -5402,7 +5712,7 @@ function LoadingSpinner({ size = "md", className = "" }) {
|
|
|
5402
5712
|
md: "w-6 h-6",
|
|
5403
5713
|
lg: "w-8 h-8"
|
|
5404
5714
|
};
|
|
5405
|
-
return /* @__PURE__ */
|
|
5715
|
+
return /* @__PURE__ */ jsx25(
|
|
5406
5716
|
"div",
|
|
5407
5717
|
{
|
|
5408
5718
|
className: cn(sizes[size], "border-2 border-muted border-t-primary rounded-full animate-spin", className)
|
|
@@ -5414,16 +5724,16 @@ function LoadingOverlay({
|
|
|
5414
5724
|
message,
|
|
5415
5725
|
className = ""
|
|
5416
5726
|
}) {
|
|
5417
|
-
return /* @__PURE__ */
|
|
5418
|
-
/* @__PURE__ */
|
|
5419
|
-
message && /* @__PURE__ */
|
|
5727
|
+
return /* @__PURE__ */ jsxs8("div", { className: cn("flex flex-col items-center justify-center py-16", className), children: [
|
|
5728
|
+
/* @__PURE__ */ jsx25(LoadingSpinner, { size: "lg" }),
|
|
5729
|
+
message && /* @__PURE__ */ jsx25("p", { className: "mt-4 text-muted-foreground", children: message }),
|
|
5420
5730
|
children
|
|
5421
5731
|
] });
|
|
5422
5732
|
}
|
|
5423
5733
|
|
|
5424
5734
|
// src/ui/CardGrid.tsx
|
|
5425
5735
|
import { MoreHorizontal, Trash2 } from "lucide-react";
|
|
5426
|
-
import { jsx as
|
|
5736
|
+
import { jsx as jsx26, jsxs as jsxs9 } from "react/jsx-runtime";
|
|
5427
5737
|
function CardGrid({ children, columns = 3, className = "", ...rest }) {
|
|
5428
5738
|
const gridCols = {
|
|
5429
5739
|
1: "grid-cols-1",
|
|
@@ -5431,10 +5741,10 @@ function CardGrid({ children, columns = 3, className = "", ...rest }) {
|
|
|
5431
5741
|
3: "grid-cols-1 sm:grid-cols-2 lg:grid-cols-3",
|
|
5432
5742
|
4: "grid-cols-1 sm:grid-cols-2 lg:grid-cols-3 xl:grid-cols-4"
|
|
5433
5743
|
};
|
|
5434
|
-
return /* @__PURE__ */
|
|
5744
|
+
return /* @__PURE__ */ jsx26("div", { className: cn("grid gap-3 sm:gap-4", gridCols[columns], className), ...rest, children });
|
|
5435
5745
|
}
|
|
5436
5746
|
function GridCard({ children, onClick, className = "", hoverable = true, ...rest }) {
|
|
5437
|
-
return /* @__PURE__ */
|
|
5747
|
+
return /* @__PURE__ */ jsx26(
|
|
5438
5748
|
"div",
|
|
5439
5749
|
{
|
|
5440
5750
|
onClick,
|
|
@@ -5455,7 +5765,7 @@ function GridCardImage({ src, alt = "", height = "md", className = "" }) {
|
|
|
5455
5765
|
md: "h-36",
|
|
5456
5766
|
lg: "h-48"
|
|
5457
5767
|
};
|
|
5458
|
-
return /* @__PURE__ */
|
|
5768
|
+
return /* @__PURE__ */ jsx26("div", { className: cn(heights[height], "overflow-hidden bg-muted", className), children: /* @__PURE__ */ jsx26(
|
|
5459
5769
|
"img",
|
|
5460
5770
|
{
|
|
5461
5771
|
src,
|
|
@@ -5466,16 +5776,16 @@ function GridCardImage({ src, alt = "", height = "md", className = "" }) {
|
|
|
5466
5776
|
) });
|
|
5467
5777
|
}
|
|
5468
5778
|
function GridCardHeader({ children, actions, className = "" }) {
|
|
5469
|
-
return /* @__PURE__ */
|
|
5470
|
-
/* @__PURE__ */
|
|
5471
|
-
actions && /* @__PURE__ */
|
|
5779
|
+
return /* @__PURE__ */ jsxs9("div", { className: cn("flex items-start justify-between gap-2 p-4 pb-2", className), children: [
|
|
5780
|
+
/* @__PURE__ */ jsx26("div", { className: "flex-1 min-w-0", children }),
|
|
5781
|
+
actions && /* @__PURE__ */ jsx26("div", { className: "sm:opacity-0 sm:group-hover:opacity-100 transition-opacity shrink-0", children: actions })
|
|
5472
5782
|
] });
|
|
5473
5783
|
}
|
|
5474
5784
|
function GridCardTitle({ children, className = "" }) {
|
|
5475
|
-
return /* @__PURE__ */
|
|
5785
|
+
return /* @__PURE__ */ jsx26("h3", { className: cn("font-semibold text-foreground truncate", className), children });
|
|
5476
5786
|
}
|
|
5477
5787
|
function GridCardContent({ children, className = "" }) {
|
|
5478
|
-
return /* @__PURE__ */
|
|
5788
|
+
return /* @__PURE__ */ jsx26("div", { className: cn("px-4 pb-4", className), children });
|
|
5479
5789
|
}
|
|
5480
5790
|
function GridCardDescription({ children, lines = 2, className = "" }) {
|
|
5481
5791
|
const lineClamp = {
|
|
@@ -5484,10 +5794,10 @@ function GridCardDescription({ children, lines = 2, className = "" }) {
|
|
|
5484
5794
|
3: "line-clamp-3",
|
|
5485
5795
|
4: "line-clamp-4"
|
|
5486
5796
|
};
|
|
5487
|
-
return /* @__PURE__ */
|
|
5797
|
+
return /* @__PURE__ */ jsx26("p", { className: cn("text-sm text-muted-foreground leading-relaxed", lineClamp[lines], className), children });
|
|
5488
5798
|
}
|
|
5489
5799
|
function GridCardFooter({ children, className = "" }) {
|
|
5490
|
-
return /* @__PURE__ */
|
|
5800
|
+
return /* @__PURE__ */ jsx26("div", { className: cn("px-4 pb-4 pt-2 text-xs text-muted-foreground", className), children });
|
|
5491
5801
|
}
|
|
5492
5802
|
function GridCardBadge({ children, variant = "default", className = "" }) {
|
|
5493
5803
|
const variants = {
|
|
@@ -5496,28 +5806,28 @@ function GridCardBadge({ children, variant = "default", className = "" }) {
|
|
|
5496
5806
|
warning: "bg-warning/20 text-warning border-warning/40",
|
|
5497
5807
|
danger: "bg-destructive/20 text-destructive border-destructive/40"
|
|
5498
5808
|
};
|
|
5499
|
-
return /* @__PURE__ */
|
|
5809
|
+
return /* @__PURE__ */ jsx26("span", { className: cn("inline-flex px-2 py-0.5 text-xs font-medium rounded border", variants[variant], className), children });
|
|
5500
5810
|
}
|
|
5501
5811
|
function GridCardActions({ onDelete, onMore }) {
|
|
5502
5812
|
const handleClick = (e, handler) => {
|
|
5503
5813
|
e.stopPropagation();
|
|
5504
5814
|
handler?.();
|
|
5505
5815
|
};
|
|
5506
|
-
return /* @__PURE__ */
|
|
5507
|
-
onMore && /* @__PURE__ */
|
|
5816
|
+
return /* @__PURE__ */ jsxs9("div", { className: "flex items-center gap-1", children: [
|
|
5817
|
+
onMore && /* @__PURE__ */ jsx26(
|
|
5508
5818
|
"button",
|
|
5509
5819
|
{
|
|
5510
5820
|
onClick: (e) => handleClick(e, onMore),
|
|
5511
5821
|
className: "p-2 rounded-lg bg-muted/50 hover:bg-muted text-muted-foreground hover:text-foreground transition-colors",
|
|
5512
|
-
children: /* @__PURE__ */
|
|
5822
|
+
children: /* @__PURE__ */ jsx26(MoreHorizontal, { className: "w-4 h-4" })
|
|
5513
5823
|
}
|
|
5514
5824
|
),
|
|
5515
|
-
onDelete && /* @__PURE__ */
|
|
5825
|
+
onDelete && /* @__PURE__ */ jsx26(
|
|
5516
5826
|
"button",
|
|
5517
5827
|
{
|
|
5518
5828
|
onClick: (e) => handleClick(e, onDelete),
|
|
5519
5829
|
className: "p-2 rounded-lg bg-muted/50 hover:bg-destructive/20 text-muted-foreground hover:text-destructive transition-colors",
|
|
5520
|
-
children: /* @__PURE__ */
|
|
5830
|
+
children: /* @__PURE__ */ jsx26(Trash2, { className: "w-4 h-4" })
|
|
5521
5831
|
}
|
|
5522
5832
|
)
|
|
5523
5833
|
] });
|
|
@@ -5534,7 +5844,7 @@ GridCard.Actions = GridCardActions;
|
|
|
5534
5844
|
// src/ui/Alert.tsx
|
|
5535
5845
|
import * as React20 from "react";
|
|
5536
5846
|
import { cva as cva4 } from "class-variance-authority";
|
|
5537
|
-
import { jsx as
|
|
5847
|
+
import { jsx as jsx27 } from "react/jsx-runtime";
|
|
5538
5848
|
var alertVariants = cva4(
|
|
5539
5849
|
"relative w-full rounded-lg border px-4 py-3 text-sm [&>svg+div]:translate-y-[-3px] [&>svg]:absolute [&>svg]:left-4 [&>svg]:top-4 [&>svg]:text-foreground [&>svg~*]:pl-7",
|
|
5540
5850
|
{
|
|
@@ -5552,7 +5862,7 @@ var alertVariants = cva4(
|
|
|
5552
5862
|
}
|
|
5553
5863
|
}
|
|
5554
5864
|
);
|
|
5555
|
-
var Alert = React20.forwardRef(({ className, variant, ...props }, ref) => /* @__PURE__ */
|
|
5865
|
+
var Alert = React20.forwardRef(({ className, variant, ...props }, ref) => /* @__PURE__ */ jsx27(
|
|
5556
5866
|
"div",
|
|
5557
5867
|
{
|
|
5558
5868
|
ref,
|
|
@@ -5562,7 +5872,7 @@ var Alert = React20.forwardRef(({ className, variant, ...props }, ref) => /* @__
|
|
|
5562
5872
|
}
|
|
5563
5873
|
));
|
|
5564
5874
|
Alert.displayName = "Alert";
|
|
5565
|
-
var AlertTitle = React20.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */
|
|
5875
|
+
var AlertTitle = React20.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx27(
|
|
5566
5876
|
"h5",
|
|
5567
5877
|
{
|
|
5568
5878
|
ref,
|
|
@@ -5571,7 +5881,7 @@ var AlertTitle = React20.forwardRef(({ className, ...props }, ref) => /* @__PURE
|
|
|
5571
5881
|
}
|
|
5572
5882
|
));
|
|
5573
5883
|
AlertTitle.displayName = "AlertTitle";
|
|
5574
|
-
var AlertDescription = React20.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */
|
|
5884
|
+
var AlertDescription = React20.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx27(
|
|
5575
5885
|
"div",
|
|
5576
5886
|
{
|
|
5577
5887
|
ref,
|
|
@@ -5585,42 +5895,42 @@ AlertDescription.displayName = "AlertDescription";
|
|
|
5585
5895
|
import {
|
|
5586
5896
|
createContext as createContext4,
|
|
5587
5897
|
useContext as useContext6,
|
|
5588
|
-
useState as
|
|
5589
|
-
useCallback as
|
|
5590
|
-
useEffect as
|
|
5898
|
+
useState as useState18,
|
|
5899
|
+
useCallback as useCallback27,
|
|
5900
|
+
useEffect as useEffect21
|
|
5591
5901
|
} from "react";
|
|
5592
|
-
import { jsx as
|
|
5902
|
+
import { jsx as jsx28, jsxs as jsxs10 } from "react/jsx-runtime";
|
|
5593
5903
|
function CheckCircleIcon({ className }) {
|
|
5594
|
-
return /* @__PURE__ */
|
|
5595
|
-
/* @__PURE__ */
|
|
5596
|
-
/* @__PURE__ */
|
|
5904
|
+
return /* @__PURE__ */ jsxs10("svg", { className, viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: 2, strokeLinecap: "round", strokeLinejoin: "round", children: [
|
|
5905
|
+
/* @__PURE__ */ jsx28("path", { d: "M22 11.08V12a10 10 0 1 1-5.93-9.14" }),
|
|
5906
|
+
/* @__PURE__ */ jsx28("polyline", { points: "22 4 12 14.01 9 11.01" })
|
|
5597
5907
|
] });
|
|
5598
5908
|
}
|
|
5599
5909
|
function AlertCircleIcon({ className }) {
|
|
5600
|
-
return /* @__PURE__ */
|
|
5601
|
-
/* @__PURE__ */
|
|
5602
|
-
/* @__PURE__ */
|
|
5603
|
-
/* @__PURE__ */
|
|
5910
|
+
return /* @__PURE__ */ jsxs10("svg", { className, viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: 2, strokeLinecap: "round", strokeLinejoin: "round", children: [
|
|
5911
|
+
/* @__PURE__ */ jsx28("circle", { cx: "12", cy: "12", r: "10" }),
|
|
5912
|
+
/* @__PURE__ */ jsx28("line", { x1: "12", y1: "8", x2: "12", y2: "12" }),
|
|
5913
|
+
/* @__PURE__ */ jsx28("line", { x1: "12", y1: "16", x2: "12.01", y2: "16" })
|
|
5604
5914
|
] });
|
|
5605
5915
|
}
|
|
5606
5916
|
function AlertTriangleIcon({ className }) {
|
|
5607
|
-
return /* @__PURE__ */
|
|
5608
|
-
/* @__PURE__ */
|
|
5609
|
-
/* @__PURE__ */
|
|
5610
|
-
/* @__PURE__ */
|
|
5917
|
+
return /* @__PURE__ */ jsxs10("svg", { className, viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: 2, strokeLinecap: "round", strokeLinejoin: "round", children: [
|
|
5918
|
+
/* @__PURE__ */ jsx28("path", { d: "M10.29 3.86L1.82 18a2 2 0 0 0 1.71 3h16.94a2 2 0 0 0 1.71-3L13.71 3.86a2 2 0 0 0-3.42 0z" }),
|
|
5919
|
+
/* @__PURE__ */ jsx28("line", { x1: "12", y1: "9", x2: "12", y2: "13" }),
|
|
5920
|
+
/* @__PURE__ */ jsx28("line", { x1: "12", y1: "17", x2: "12.01", y2: "17" })
|
|
5611
5921
|
] });
|
|
5612
5922
|
}
|
|
5613
5923
|
function InfoIcon({ className }) {
|
|
5614
|
-
return /* @__PURE__ */
|
|
5615
|
-
/* @__PURE__ */
|
|
5616
|
-
/* @__PURE__ */
|
|
5617
|
-
/* @__PURE__ */
|
|
5924
|
+
return /* @__PURE__ */ jsxs10("svg", { className, viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: 2, strokeLinecap: "round", strokeLinejoin: "round", children: [
|
|
5925
|
+
/* @__PURE__ */ jsx28("circle", { cx: "12", cy: "12", r: "10" }),
|
|
5926
|
+
/* @__PURE__ */ jsx28("line", { x1: "12", y1: "16", x2: "12", y2: "12" }),
|
|
5927
|
+
/* @__PURE__ */ jsx28("line", { x1: "12", y1: "8", x2: "12.01", y2: "8" })
|
|
5618
5928
|
] });
|
|
5619
5929
|
}
|
|
5620
5930
|
function CloseIcon({ className }) {
|
|
5621
|
-
return /* @__PURE__ */
|
|
5622
|
-
/* @__PURE__ */
|
|
5623
|
-
/* @__PURE__ */
|
|
5931
|
+
return /* @__PURE__ */ jsxs10("svg", { className, viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: 2, strokeLinecap: "round", strokeLinejoin: "round", children: [
|
|
5932
|
+
/* @__PURE__ */ jsx28("line", { x1: "18", y1: "6", x2: "6", y2: "18" }),
|
|
5933
|
+
/* @__PURE__ */ jsx28("line", { x1: "6", y1: "6", x2: "18", y2: "18" })
|
|
5624
5934
|
] });
|
|
5625
5935
|
}
|
|
5626
5936
|
var ToastContext = createContext4(null);
|
|
@@ -5634,14 +5944,14 @@ function ToastProvider({
|
|
|
5634
5944
|
position = "bottom-right",
|
|
5635
5945
|
maxToasts = 5
|
|
5636
5946
|
}) {
|
|
5637
|
-
const [toasts, setToasts] =
|
|
5638
|
-
const dismiss =
|
|
5947
|
+
const [toasts, setToasts] = useState18([]);
|
|
5948
|
+
const dismiss = useCallback27((id) => {
|
|
5639
5949
|
setToasts((prev) => prev.filter((t) => t.id !== id));
|
|
5640
5950
|
}, []);
|
|
5641
|
-
const dismissAll =
|
|
5951
|
+
const dismissAll = useCallback27(() => {
|
|
5642
5952
|
setToasts([]);
|
|
5643
5953
|
}, []);
|
|
5644
|
-
const addToast =
|
|
5954
|
+
const addToast = useCallback27(
|
|
5645
5955
|
(options) => {
|
|
5646
5956
|
const id = Math.random().toString(36).slice(2);
|
|
5647
5957
|
const duration = options.duration ?? 5e3;
|
|
@@ -5655,23 +5965,23 @@ function ToastProvider({
|
|
|
5655
5965
|
},
|
|
5656
5966
|
[dismiss, maxToasts]
|
|
5657
5967
|
);
|
|
5658
|
-
const toast =
|
|
5968
|
+
const toast = useCallback27(
|
|
5659
5969
|
(options) => addToast(options),
|
|
5660
5970
|
[addToast]
|
|
5661
5971
|
);
|
|
5662
|
-
const success =
|
|
5972
|
+
const success = useCallback27(
|
|
5663
5973
|
(title, description) => addToast({ type: "success", title, description }),
|
|
5664
5974
|
[addToast]
|
|
5665
5975
|
);
|
|
5666
|
-
const error =
|
|
5976
|
+
const error = useCallback27(
|
|
5667
5977
|
(title, description) => addToast({ type: "error", title, description }),
|
|
5668
5978
|
[addToast]
|
|
5669
5979
|
);
|
|
5670
|
-
const warning =
|
|
5980
|
+
const warning = useCallback27(
|
|
5671
5981
|
(title, description) => addToast({ type: "warning", title, description }),
|
|
5672
5982
|
[addToast]
|
|
5673
5983
|
);
|
|
5674
|
-
const info =
|
|
5984
|
+
const info = useCallback27(
|
|
5675
5985
|
(title, description) => addToast({ type: "info", title, description }),
|
|
5676
5986
|
[addToast]
|
|
5677
5987
|
);
|
|
@@ -5683,17 +5993,17 @@ function ToastProvider({
|
|
|
5683
5993
|
"top-center": "top-4 left-1/2 -translate-x-1/2",
|
|
5684
5994
|
"bottom-center": "bottom-4 left-1/2 -translate-x-1/2"
|
|
5685
5995
|
};
|
|
5686
|
-
return /* @__PURE__ */
|
|
5996
|
+
return /* @__PURE__ */ jsxs10(
|
|
5687
5997
|
ToastContext.Provider,
|
|
5688
5998
|
{
|
|
5689
5999
|
value: { toasts, toast, success, error, warning, info, dismiss, dismissAll },
|
|
5690
6000
|
children: [
|
|
5691
6001
|
children,
|
|
5692
|
-
/* @__PURE__ */
|
|
6002
|
+
/* @__PURE__ */ jsx28(
|
|
5693
6003
|
"div",
|
|
5694
6004
|
{
|
|
5695
6005
|
className: `fixed z-[100] flex flex-col gap-2 ${positionClasses[position]}`,
|
|
5696
|
-
children: toasts.map((t) => /* @__PURE__ */
|
|
6006
|
+
children: toasts.map((t) => /* @__PURE__ */ jsx28(ToastItem, { toast: t, onDismiss: () => dismiss(t.id) }, t.id))
|
|
5697
6007
|
}
|
|
5698
6008
|
)
|
|
5699
6009
|
]
|
|
@@ -5708,14 +6018,14 @@ var TOAST_CONFIG = {
|
|
|
5708
6018
|
};
|
|
5709
6019
|
function ToastItem({ toast, onDismiss }) {
|
|
5710
6020
|
const { Icon: Icon2, accent, icon } = TOAST_CONFIG[toast.type];
|
|
5711
|
-
const [exiting, setExiting] =
|
|
5712
|
-
|
|
6021
|
+
const [exiting, setExiting] = useState18(false);
|
|
6022
|
+
useEffect21(() => {
|
|
5713
6023
|
if (exiting) {
|
|
5714
6024
|
const timer = setTimeout(onDismiss, 150);
|
|
5715
6025
|
return () => clearTimeout(timer);
|
|
5716
6026
|
}
|
|
5717
6027
|
}, [exiting, onDismiss]);
|
|
5718
|
-
return /* @__PURE__ */
|
|
6028
|
+
return /* @__PURE__ */ jsxs10(
|
|
5719
6029
|
"div",
|
|
5720
6030
|
{
|
|
5721
6031
|
className: `
|
|
@@ -5726,19 +6036,19 @@ function ToastItem({ toast, onDismiss }) {
|
|
|
5726
6036
|
`,
|
|
5727
6037
|
role: "alert",
|
|
5728
6038
|
children: [
|
|
5729
|
-
/* @__PURE__ */
|
|
5730
|
-
/* @__PURE__ */
|
|
5731
|
-
/* @__PURE__ */
|
|
5732
|
-
/* @__PURE__ */
|
|
5733
|
-
toast.description && /* @__PURE__ */
|
|
6039
|
+
/* @__PURE__ */ jsx28("span", { className: `absolute inset-y-0 left-0 w-[3px] ${accent}`, "aria-hidden": true }),
|
|
6040
|
+
/* @__PURE__ */ jsx28(Icon2, { className: `mt-0.5 h-4 w-4 shrink-0 ${icon}` }),
|
|
6041
|
+
/* @__PURE__ */ jsxs10("div", { className: "flex-1 min-w-0", children: [
|
|
6042
|
+
/* @__PURE__ */ jsx28("p", { className: "text-[13px] font-medium leading-tight", children: toast.title }),
|
|
6043
|
+
toast.description && /* @__PURE__ */ jsx28("p", { className: "mt-0.5 text-xs leading-snug text-muted-foreground", children: toast.description })
|
|
5734
6044
|
] }),
|
|
5735
|
-
/* @__PURE__ */
|
|
6045
|
+
/* @__PURE__ */ jsx28(
|
|
5736
6046
|
"button",
|
|
5737
6047
|
{
|
|
5738
6048
|
onClick: () => setExiting(true),
|
|
5739
6049
|
className: "-mr-0.5 shrink-0 rounded p-1 text-muted-foreground transition-colors hover:bg-muted hover:text-foreground",
|
|
5740
6050
|
"aria-label": "Dismiss",
|
|
5741
|
-
children: /* @__PURE__ */
|
|
6051
|
+
children: /* @__PURE__ */ jsx28(CloseIcon, { className: "h-3.5 w-3.5" })
|
|
5742
6052
|
}
|
|
5743
6053
|
)
|
|
5744
6054
|
]
|
|
@@ -5748,7 +6058,7 @@ function ToastItem({ toast, onDismiss }) {
|
|
|
5748
6058
|
|
|
5749
6059
|
// src/ui/EmptyState.tsx
|
|
5750
6060
|
import { FileText, Search, Inbox, Plus, FolderOpen, Users, AlertCircle } from "lucide-react";
|
|
5751
|
-
import { jsx as
|
|
6061
|
+
import { jsx as jsx29, jsxs as jsxs11 } from "react/jsx-runtime";
|
|
5752
6062
|
function EmptyState({
|
|
5753
6063
|
icon,
|
|
5754
6064
|
title,
|
|
@@ -5758,23 +6068,23 @@ function EmptyState({
|
|
|
5758
6068
|
className = "",
|
|
5759
6069
|
...rest
|
|
5760
6070
|
}) {
|
|
5761
|
-
return /* @__PURE__ */
|
|
5762
|
-
icon && /* @__PURE__ */
|
|
5763
|
-
/* @__PURE__ */
|
|
5764
|
-
description && /* @__PURE__ */
|
|
5765
|
-
(action || secondaryAction) && /* @__PURE__ */
|
|
5766
|
-
action && /* @__PURE__ */
|
|
6071
|
+
return /* @__PURE__ */ jsxs11("div", { className: cn("flex flex-col items-center justify-center py-16 px-4 text-center", className), ...rest, children: [
|
|
6072
|
+
icon && /* @__PURE__ */ jsx29("div", { className: "w-16 h-16 rounded-2xl bg-muted/50 border border-border flex items-center justify-center mb-5", children: /* @__PURE__ */ jsx29("span", { className: "text-muted-foreground", children: icon }) }),
|
|
6073
|
+
/* @__PURE__ */ jsx29("h3", { className: "text-lg font-semibold text-foreground mb-2", children: title }),
|
|
6074
|
+
description && /* @__PURE__ */ jsx29("p", { className: "text-muted-foreground text-sm max-w-sm mb-6", children: description }),
|
|
6075
|
+
(action || secondaryAction) && /* @__PURE__ */ jsxs11("div", { className: "flex items-center gap-3", children: [
|
|
6076
|
+
action && /* @__PURE__ */ jsxs11(
|
|
5767
6077
|
"button",
|
|
5768
6078
|
{
|
|
5769
6079
|
onClick: action.onClick,
|
|
5770
6080
|
className: "inline-flex items-center gap-2 px-4 py-2 bg-primary text-primary-foreground rounded-lg font-medium text-sm hover:bg-primary/90 shadow-lg shadow-primary/25 transition-all",
|
|
5771
6081
|
children: [
|
|
5772
|
-
/* @__PURE__ */
|
|
6082
|
+
/* @__PURE__ */ jsx29(Plus, { className: "w-4 h-4" }),
|
|
5773
6083
|
action.label
|
|
5774
6084
|
]
|
|
5775
6085
|
}
|
|
5776
6086
|
),
|
|
5777
|
-
secondaryAction && /* @__PURE__ */
|
|
6087
|
+
secondaryAction && /* @__PURE__ */ jsx29(
|
|
5778
6088
|
"button",
|
|
5779
6089
|
{
|
|
5780
6090
|
onClick: secondaryAction.onClick,
|
|
@@ -5786,10 +6096,10 @@ function EmptyState({
|
|
|
5786
6096
|
] });
|
|
5787
6097
|
}
|
|
5788
6098
|
function EmptyItems({ action, className }) {
|
|
5789
|
-
return /* @__PURE__ */
|
|
6099
|
+
return /* @__PURE__ */ jsx29(
|
|
5790
6100
|
EmptyState,
|
|
5791
6101
|
{
|
|
5792
|
-
icon: /* @__PURE__ */
|
|
6102
|
+
icon: /* @__PURE__ */ jsx29(Inbox, { className: "w-8 h-8" }),
|
|
5793
6103
|
title: "No items yet",
|
|
5794
6104
|
description: "Get started by creating your first item.",
|
|
5795
6105
|
action: action ? { label: action.label, onClick: action.onClick } : void 0,
|
|
@@ -5798,10 +6108,10 @@ function EmptyItems({ action, className }) {
|
|
|
5798
6108
|
);
|
|
5799
6109
|
}
|
|
5800
6110
|
function EmptySearch({ query, onClear, className }) {
|
|
5801
|
-
return /* @__PURE__ */
|
|
6111
|
+
return /* @__PURE__ */ jsx29(
|
|
5802
6112
|
EmptyState,
|
|
5803
6113
|
{
|
|
5804
|
-
icon: /* @__PURE__ */
|
|
6114
|
+
icon: /* @__PURE__ */ jsx29(Search, { className: "w-8 h-8" }),
|
|
5805
6115
|
title: "No results found",
|
|
5806
6116
|
description: query ? `No results for "${query}". Try a different search term.` : "Try adjusting your search or filters.",
|
|
5807
6117
|
secondaryAction: onClear ? { label: "Clear search", onClick: onClear } : void 0,
|
|
@@ -5810,10 +6120,10 @@ function EmptySearch({ query, onClear, className }) {
|
|
|
5810
6120
|
);
|
|
5811
6121
|
}
|
|
5812
6122
|
function EmptyDocuments({ action, className }) {
|
|
5813
|
-
return /* @__PURE__ */
|
|
6123
|
+
return /* @__PURE__ */ jsx29(
|
|
5814
6124
|
EmptyState,
|
|
5815
6125
|
{
|
|
5816
|
-
icon: /* @__PURE__ */
|
|
6126
|
+
icon: /* @__PURE__ */ jsx29(FileText, { className: "w-8 h-8" }),
|
|
5817
6127
|
title: "No documents",
|
|
5818
6128
|
description: "Create a document to start writing.",
|
|
5819
6129
|
action: action ? { label: action.label, onClick: action.onClick } : void 0,
|
|
@@ -5822,10 +6132,10 @@ function EmptyDocuments({ action, className }) {
|
|
|
5822
6132
|
);
|
|
5823
6133
|
}
|
|
5824
6134
|
function EmptyProjects({ action, className }) {
|
|
5825
|
-
return /* @__PURE__ */
|
|
6135
|
+
return /* @__PURE__ */ jsx29(
|
|
5826
6136
|
EmptyState,
|
|
5827
6137
|
{
|
|
5828
|
-
icon: /* @__PURE__ */
|
|
6138
|
+
icon: /* @__PURE__ */ jsx29(FolderOpen, { className: "w-8 h-8" }),
|
|
5829
6139
|
title: "No projects",
|
|
5830
6140
|
description: "Create a project to organize your work.",
|
|
5831
6141
|
action: action ? { label: action.label, onClick: action.onClick } : void 0,
|
|
@@ -5834,10 +6144,10 @@ function EmptyProjects({ action, className }) {
|
|
|
5834
6144
|
);
|
|
5835
6145
|
}
|
|
5836
6146
|
function EmptyTeam({ action, className }) {
|
|
5837
|
-
return /* @__PURE__ */
|
|
6147
|
+
return /* @__PURE__ */ jsx29(
|
|
5838
6148
|
EmptyState,
|
|
5839
6149
|
{
|
|
5840
|
-
icon: /* @__PURE__ */
|
|
6150
|
+
icon: /* @__PURE__ */ jsx29(Users, { className: "w-8 h-8" }),
|
|
5841
6151
|
title: "No team members",
|
|
5842
6152
|
description: "Invite people to collaborate with you.",
|
|
5843
6153
|
action: action ? { label: action.label, onClick: action.onClick } : void 0,
|
|
@@ -5846,10 +6156,10 @@ function EmptyTeam({ action, className }) {
|
|
|
5846
6156
|
);
|
|
5847
6157
|
}
|
|
5848
6158
|
function EmptyError({ error, onRetry, className }) {
|
|
5849
|
-
return /* @__PURE__ */
|
|
6159
|
+
return /* @__PURE__ */ jsx29(
|
|
5850
6160
|
EmptyState,
|
|
5851
6161
|
{
|
|
5852
|
-
icon: /* @__PURE__ */
|
|
6162
|
+
icon: /* @__PURE__ */ jsx29(AlertCircle, { className: "w-8 h-8 text-destructive" }),
|
|
5853
6163
|
title: "Something went wrong",
|
|
5854
6164
|
description: error || "An error occurred. Please try again.",
|
|
5855
6165
|
action: onRetry ? { label: "Try again", onClick: onRetry } : void 0,
|
|
@@ -5862,12 +6172,12 @@ function EmptyError({ error, onRetry, className }) {
|
|
|
5862
6172
|
import * as React22 from "react";
|
|
5863
6173
|
import * as DialogPrimitive from "@radix-ui/react-dialog";
|
|
5864
6174
|
import { X } from "lucide-react";
|
|
5865
|
-
import { jsx as
|
|
6175
|
+
import { jsx as jsx30, jsxs as jsxs12 } from "react/jsx-runtime";
|
|
5866
6176
|
var Dialog = DialogPrimitive.Root;
|
|
5867
6177
|
var DialogTrigger = DialogPrimitive.Trigger;
|
|
5868
6178
|
var DialogPortal = DialogPrimitive.Portal;
|
|
5869
6179
|
var DialogClose = DialogPrimitive.Close;
|
|
5870
|
-
var DialogOverlay = React22.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */
|
|
6180
|
+
var DialogOverlay = React22.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx30(
|
|
5871
6181
|
DialogPrimitive.Overlay,
|
|
5872
6182
|
{
|
|
5873
6183
|
ref,
|
|
@@ -5879,9 +6189,9 @@ var DialogOverlay = React22.forwardRef(({ className, ...props }, ref) => /* @__P
|
|
|
5879
6189
|
}
|
|
5880
6190
|
));
|
|
5881
6191
|
DialogOverlay.displayName = DialogPrimitive.Overlay.displayName;
|
|
5882
|
-
var DialogContent = React22.forwardRef(({ className, children, ...props }, ref) => /* @__PURE__ */
|
|
5883
|
-
/* @__PURE__ */
|
|
5884
|
-
/* @__PURE__ */
|
|
6192
|
+
var DialogContent = React22.forwardRef(({ className, children, ...props }, ref) => /* @__PURE__ */ jsxs12(DialogPortal, { children: [
|
|
6193
|
+
/* @__PURE__ */ jsx30(DialogOverlay, {}),
|
|
6194
|
+
/* @__PURE__ */ jsxs12(
|
|
5885
6195
|
DialogPrimitive.Content,
|
|
5886
6196
|
{
|
|
5887
6197
|
ref,
|
|
@@ -5892,9 +6202,9 @@ var DialogContent = React22.forwardRef(({ className, children, ...props }, ref)
|
|
|
5892
6202
|
...props,
|
|
5893
6203
|
children: [
|
|
5894
6204
|
children,
|
|
5895
|
-
/* @__PURE__ */
|
|
5896
|
-
/* @__PURE__ */
|
|
5897
|
-
/* @__PURE__ */
|
|
6205
|
+
/* @__PURE__ */ jsxs12(DialogPrimitive.Close, { className: "absolute right-4 top-4 rounded-sm p-1 opacity-70 ring-offset-background transition-opacity hover:opacity-100 focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2 disabled:pointer-events-none data-[state=open]:bg-accent data-[state=open]:text-muted-foreground", children: [
|
|
6206
|
+
/* @__PURE__ */ jsx30(X, { className: "h-4 w-4" }),
|
|
6207
|
+
/* @__PURE__ */ jsx30("span", { className: "sr-only", children: "Close" })
|
|
5898
6208
|
] })
|
|
5899
6209
|
]
|
|
5900
6210
|
}
|
|
@@ -5904,7 +6214,7 @@ DialogContent.displayName = DialogPrimitive.Content.displayName;
|
|
|
5904
6214
|
var DialogHeader = ({
|
|
5905
6215
|
className,
|
|
5906
6216
|
...props
|
|
5907
|
-
}) => /* @__PURE__ */
|
|
6217
|
+
}) => /* @__PURE__ */ jsx30(
|
|
5908
6218
|
"div",
|
|
5909
6219
|
{
|
|
5910
6220
|
className: cn(
|
|
@@ -5918,7 +6228,7 @@ DialogHeader.displayName = "DialogHeader";
|
|
|
5918
6228
|
var DialogFooter = ({
|
|
5919
6229
|
className,
|
|
5920
6230
|
...props
|
|
5921
|
-
}) => /* @__PURE__ */
|
|
6231
|
+
}) => /* @__PURE__ */ jsx30(
|
|
5922
6232
|
"div",
|
|
5923
6233
|
{
|
|
5924
6234
|
className: cn(
|
|
@@ -5929,7 +6239,7 @@ var DialogFooter = ({
|
|
|
5929
6239
|
}
|
|
5930
6240
|
);
|
|
5931
6241
|
DialogFooter.displayName = "DialogFooter";
|
|
5932
|
-
var DialogTitle = React22.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */
|
|
6242
|
+
var DialogTitle = React22.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx30(
|
|
5933
6243
|
DialogPrimitive.Title,
|
|
5934
6244
|
{
|
|
5935
6245
|
ref,
|
|
@@ -5941,7 +6251,7 @@ var DialogTitle = React22.forwardRef(({ className, ...props }, ref) => /* @__PUR
|
|
|
5941
6251
|
}
|
|
5942
6252
|
));
|
|
5943
6253
|
DialogTitle.displayName = DialogPrimitive.Title.displayName;
|
|
5944
|
-
var DialogDescription = React22.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */
|
|
6254
|
+
var DialogDescription = React22.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx30(
|
|
5945
6255
|
DialogPrimitive.Description,
|
|
5946
6256
|
{
|
|
5947
6257
|
ref,
|
|
@@ -5955,14 +6265,14 @@ DialogDescription.displayName = DialogPrimitive.Description.displayName;
|
|
|
5955
6265
|
import * as React23 from "react";
|
|
5956
6266
|
import * as DropdownMenuPrimitive from "@radix-ui/react-dropdown-menu";
|
|
5957
6267
|
import { Check as Check3, ChevronRight, Circle } from "lucide-react";
|
|
5958
|
-
import { jsx as
|
|
6268
|
+
import { jsx as jsx31, jsxs as jsxs13 } from "react/jsx-runtime";
|
|
5959
6269
|
var DropdownMenu = DropdownMenuPrimitive.Root;
|
|
5960
6270
|
var DropdownMenuTrigger = DropdownMenuPrimitive.Trigger;
|
|
5961
6271
|
var DropdownMenuGroup = DropdownMenuPrimitive.Group;
|
|
5962
6272
|
var DropdownMenuPortal = DropdownMenuPrimitive.Portal;
|
|
5963
6273
|
var DropdownMenuSub = DropdownMenuPrimitive.Sub;
|
|
5964
6274
|
var DropdownMenuRadioGroup = DropdownMenuPrimitive.RadioGroup;
|
|
5965
|
-
var DropdownMenuSubTrigger = React23.forwardRef(({ className, inset, children, ...props }, ref) => /* @__PURE__ */
|
|
6275
|
+
var DropdownMenuSubTrigger = React23.forwardRef(({ className, inset, children, ...props }, ref) => /* @__PURE__ */ jsxs13(
|
|
5966
6276
|
DropdownMenuPrimitive.SubTrigger,
|
|
5967
6277
|
{
|
|
5968
6278
|
ref,
|
|
@@ -5974,12 +6284,12 @@ var DropdownMenuSubTrigger = React23.forwardRef(({ className, inset, children, .
|
|
|
5974
6284
|
...props,
|
|
5975
6285
|
children: [
|
|
5976
6286
|
children,
|
|
5977
|
-
/* @__PURE__ */
|
|
6287
|
+
/* @__PURE__ */ jsx31(ChevronRight, { className: "ml-auto" })
|
|
5978
6288
|
]
|
|
5979
6289
|
}
|
|
5980
6290
|
));
|
|
5981
6291
|
DropdownMenuSubTrigger.displayName = DropdownMenuPrimitive.SubTrigger.displayName;
|
|
5982
|
-
var DropdownMenuSubContent = React23.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */
|
|
6292
|
+
var DropdownMenuSubContent = React23.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx31(
|
|
5983
6293
|
DropdownMenuPrimitive.SubContent,
|
|
5984
6294
|
{
|
|
5985
6295
|
ref,
|
|
@@ -5991,7 +6301,7 @@ var DropdownMenuSubContent = React23.forwardRef(({ className, ...props }, ref) =
|
|
|
5991
6301
|
}
|
|
5992
6302
|
));
|
|
5993
6303
|
DropdownMenuSubContent.displayName = DropdownMenuPrimitive.SubContent.displayName;
|
|
5994
|
-
var DropdownMenuContent = React23.forwardRef(({ className, sideOffset = 4, ...props }, ref) => /* @__PURE__ */
|
|
6304
|
+
var DropdownMenuContent = React23.forwardRef(({ className, sideOffset = 4, ...props }, ref) => /* @__PURE__ */ jsx31(DropdownMenuPrimitive.Portal, { children: /* @__PURE__ */ jsx31(
|
|
5995
6305
|
DropdownMenuPrimitive.Content,
|
|
5996
6306
|
{
|
|
5997
6307
|
ref,
|
|
@@ -6005,7 +6315,7 @@ var DropdownMenuContent = React23.forwardRef(({ className, sideOffset = 4, ...pr
|
|
|
6005
6315
|
}
|
|
6006
6316
|
) }));
|
|
6007
6317
|
DropdownMenuContent.displayName = DropdownMenuPrimitive.Content.displayName;
|
|
6008
|
-
var DropdownMenuItem = React23.forwardRef(({ className, inset, ...props }, ref) => /* @__PURE__ */
|
|
6318
|
+
var DropdownMenuItem = React23.forwardRef(({ className, inset, ...props }, ref) => /* @__PURE__ */ jsx31(
|
|
6009
6319
|
DropdownMenuPrimitive.Item,
|
|
6010
6320
|
{
|
|
6011
6321
|
ref,
|
|
@@ -6018,7 +6328,7 @@ var DropdownMenuItem = React23.forwardRef(({ className, inset, ...props }, ref)
|
|
|
6018
6328
|
}
|
|
6019
6329
|
));
|
|
6020
6330
|
DropdownMenuItem.displayName = DropdownMenuPrimitive.Item.displayName;
|
|
6021
|
-
var DropdownMenuCheckboxItem = React23.forwardRef(({ className, children, checked, ...props }, ref) => /* @__PURE__ */
|
|
6331
|
+
var DropdownMenuCheckboxItem = React23.forwardRef(({ className, children, checked, ...props }, ref) => /* @__PURE__ */ jsxs13(
|
|
6022
6332
|
DropdownMenuPrimitive.CheckboxItem,
|
|
6023
6333
|
{
|
|
6024
6334
|
ref,
|
|
@@ -6029,13 +6339,13 @@ var DropdownMenuCheckboxItem = React23.forwardRef(({ className, children, checke
|
|
|
6029
6339
|
checked,
|
|
6030
6340
|
...props,
|
|
6031
6341
|
children: [
|
|
6032
|
-
/* @__PURE__ */
|
|
6342
|
+
/* @__PURE__ */ jsx31("span", { className: "absolute left-2 flex h-3.5 w-3.5 items-center justify-center", children: /* @__PURE__ */ jsx31(DropdownMenuPrimitive.ItemIndicator, { children: /* @__PURE__ */ jsx31(Check3, { className: "h-4 w-4" }) }) }),
|
|
6033
6343
|
children
|
|
6034
6344
|
]
|
|
6035
6345
|
}
|
|
6036
6346
|
));
|
|
6037
6347
|
DropdownMenuCheckboxItem.displayName = DropdownMenuPrimitive.CheckboxItem.displayName;
|
|
6038
|
-
var DropdownMenuRadioItem = React23.forwardRef(({ className, children, ...props }, ref) => /* @__PURE__ */
|
|
6348
|
+
var DropdownMenuRadioItem = React23.forwardRef(({ className, children, ...props }, ref) => /* @__PURE__ */ jsxs13(
|
|
6039
6349
|
DropdownMenuPrimitive.RadioItem,
|
|
6040
6350
|
{
|
|
6041
6351
|
ref,
|
|
@@ -6045,13 +6355,13 @@ var DropdownMenuRadioItem = React23.forwardRef(({ className, children, ...props
|
|
|
6045
6355
|
),
|
|
6046
6356
|
...props,
|
|
6047
6357
|
children: [
|
|
6048
|
-
/* @__PURE__ */
|
|
6358
|
+
/* @__PURE__ */ jsx31("span", { className: "absolute left-2 flex h-3.5 w-3.5 items-center justify-center", children: /* @__PURE__ */ jsx31(DropdownMenuPrimitive.ItemIndicator, { children: /* @__PURE__ */ jsx31(Circle, { className: "h-2 w-2 fill-current" }) }) }),
|
|
6049
6359
|
children
|
|
6050
6360
|
]
|
|
6051
6361
|
}
|
|
6052
6362
|
));
|
|
6053
6363
|
DropdownMenuRadioItem.displayName = DropdownMenuPrimitive.RadioItem.displayName;
|
|
6054
|
-
var DropdownMenuLabel = React23.forwardRef(({ className, inset, ...props }, ref) => /* @__PURE__ */
|
|
6364
|
+
var DropdownMenuLabel = React23.forwardRef(({ className, inset, ...props }, ref) => /* @__PURE__ */ jsx31(
|
|
6055
6365
|
DropdownMenuPrimitive.Label,
|
|
6056
6366
|
{
|
|
6057
6367
|
ref,
|
|
@@ -6064,7 +6374,7 @@ var DropdownMenuLabel = React23.forwardRef(({ className, inset, ...props }, ref)
|
|
|
6064
6374
|
}
|
|
6065
6375
|
));
|
|
6066
6376
|
DropdownMenuLabel.displayName = DropdownMenuPrimitive.Label.displayName;
|
|
6067
|
-
var DropdownMenuSeparator = React23.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */
|
|
6377
|
+
var DropdownMenuSeparator = React23.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx31(
|
|
6068
6378
|
DropdownMenuPrimitive.Separator,
|
|
6069
6379
|
{
|
|
6070
6380
|
ref,
|
|
@@ -6077,7 +6387,7 @@ var DropdownMenuShortcut = ({
|
|
|
6077
6387
|
className,
|
|
6078
6388
|
...props
|
|
6079
6389
|
}) => {
|
|
6080
|
-
return /* @__PURE__ */
|
|
6390
|
+
return /* @__PURE__ */ jsx31(
|
|
6081
6391
|
"span",
|
|
6082
6392
|
{
|
|
6083
6393
|
className: cn("ml-auto text-xs tracking-widest opacity-60", className),
|
|
@@ -6090,11 +6400,11 @@ DropdownMenuShortcut.displayName = "DropdownMenuShortcut";
|
|
|
6090
6400
|
// src/ui/Tooltip.tsx
|
|
6091
6401
|
import * as React24 from "react";
|
|
6092
6402
|
import * as TooltipPrimitive from "@radix-ui/react-tooltip";
|
|
6093
|
-
import { jsx as
|
|
6403
|
+
import { jsx as jsx32 } from "react/jsx-runtime";
|
|
6094
6404
|
var TooltipProvider = TooltipPrimitive.Provider;
|
|
6095
6405
|
var Tooltip = TooltipPrimitive.Root;
|
|
6096
6406
|
var TooltipTrigger = TooltipPrimitive.Trigger;
|
|
6097
|
-
var TooltipContent = React24.forwardRef(({ className, sideOffset = 4, ...props }, ref) => /* @__PURE__ */
|
|
6407
|
+
var TooltipContent = React24.forwardRef(({ className, sideOffset = 4, ...props }, ref) => /* @__PURE__ */ jsx32(TooltipPrimitive.Portal, { children: /* @__PURE__ */ jsx32(
|
|
6098
6408
|
TooltipPrimitive.Content,
|
|
6099
6409
|
{
|
|
6100
6410
|
ref,
|
|
@@ -6109,7 +6419,7 @@ var TooltipContent = React24.forwardRef(({ className, sideOffset = 4, ...props }
|
|
|
6109
6419
|
TooltipContent.displayName = TooltipPrimitive.Content.displayName;
|
|
6110
6420
|
|
|
6111
6421
|
// src/ui/Modal.tsx
|
|
6112
|
-
import { jsx as
|
|
6422
|
+
import { jsx as jsx33, jsxs as jsxs14 } from "react/jsx-runtime";
|
|
6113
6423
|
function Modal({
|
|
6114
6424
|
open,
|
|
6115
6425
|
onClose,
|
|
@@ -6123,24 +6433,24 @@ function Modal({
|
|
|
6123
6433
|
lg: "max-w-[calc(100vw-2rem)] sm:max-w-2xl",
|
|
6124
6434
|
xl: "max-w-[calc(100vw-2rem)] sm:max-w-4xl"
|
|
6125
6435
|
};
|
|
6126
|
-
return /* @__PURE__ */
|
|
6436
|
+
return /* @__PURE__ */ jsx33(Dialog, { open, onOpenChange: (v) => {
|
|
6127
6437
|
if (!v) onClose();
|
|
6128
|
-
}, children: /* @__PURE__ */
|
|
6438
|
+
}, children: /* @__PURE__ */ jsx33(DialogContent, { "aria-describedby": void 0, className: cn(sizes[size], "flex flex-col max-h-[85vh]", className), children }) });
|
|
6129
6439
|
}
|
|
6130
6440
|
function ModalHeader({ children, className = "" }) {
|
|
6131
|
-
return /* @__PURE__ */
|
|
6441
|
+
return /* @__PURE__ */ jsx33(DialogHeader, { className, children });
|
|
6132
6442
|
}
|
|
6133
6443
|
function ModalTitle({ children, className = "" }) {
|
|
6134
|
-
return /* @__PURE__ */
|
|
6444
|
+
return /* @__PURE__ */ jsx33(DialogTitle, { className, children });
|
|
6135
6445
|
}
|
|
6136
6446
|
function ModalDescription({ children, className = "" }) {
|
|
6137
|
-
return /* @__PURE__ */
|
|
6447
|
+
return /* @__PURE__ */ jsx33(DialogDescription, { className, children });
|
|
6138
6448
|
}
|
|
6139
6449
|
function ModalBody({ children, className = "" }) {
|
|
6140
|
-
return /* @__PURE__ */
|
|
6450
|
+
return /* @__PURE__ */ jsx33("div", { className: cn("flex-1 overflow-y-auto py-4", className), children });
|
|
6141
6451
|
}
|
|
6142
6452
|
function ModalFooter({ children, className = "" }) {
|
|
6143
|
-
return /* @__PURE__ */
|
|
6453
|
+
return /* @__PURE__ */ jsx33(DialogFooter, { className, children });
|
|
6144
6454
|
}
|
|
6145
6455
|
function ConfirmModal({
|
|
6146
6456
|
open,
|
|
@@ -6153,14 +6463,14 @@ function ConfirmModal({
|
|
|
6153
6463
|
variant = "destructive",
|
|
6154
6464
|
loading = false
|
|
6155
6465
|
}) {
|
|
6156
|
-
return /* @__PURE__ */
|
|
6157
|
-
/* @__PURE__ */
|
|
6158
|
-
/* @__PURE__ */
|
|
6159
|
-
description && /* @__PURE__ */
|
|
6466
|
+
return /* @__PURE__ */ jsxs14(Modal, { open, onClose, size: "sm", children: [
|
|
6467
|
+
/* @__PURE__ */ jsxs14(Modal.Header, { children: [
|
|
6468
|
+
/* @__PURE__ */ jsx33(Modal.Title, { children: title }),
|
|
6469
|
+
description && /* @__PURE__ */ jsx33(Modal.Description, { children: description })
|
|
6160
6470
|
] }),
|
|
6161
|
-
/* @__PURE__ */
|
|
6162
|
-
/* @__PURE__ */
|
|
6163
|
-
/* @__PURE__ */
|
|
6471
|
+
/* @__PURE__ */ jsxs14(Modal.Footer, { children: [
|
|
6472
|
+
/* @__PURE__ */ jsx33(Button, { variant: "ghost", onClick: onClose, disabled: loading, children: cancelText }),
|
|
6473
|
+
/* @__PURE__ */ jsx33(Button, { variant, onClick: onConfirm, loading, children: confirmText })
|
|
6164
6474
|
] })
|
|
6165
6475
|
] });
|
|
6166
6476
|
}
|
|
@@ -6173,12 +6483,12 @@ Modal.Footer = ModalFooter;
|
|
|
6173
6483
|
// src/ui/SearchInput.tsx
|
|
6174
6484
|
import * as React25 from "react";
|
|
6175
6485
|
import { Search as Search2, X as X2 } from "lucide-react";
|
|
6176
|
-
import { jsx as
|
|
6486
|
+
import { jsx as jsx34, jsxs as jsxs15 } from "react/jsx-runtime";
|
|
6177
6487
|
var SearchInput = React25.forwardRef(
|
|
6178
6488
|
({ className, onClear, value, ...props }, ref) => {
|
|
6179
|
-
return /* @__PURE__ */
|
|
6180
|
-
/* @__PURE__ */
|
|
6181
|
-
/* @__PURE__ */
|
|
6489
|
+
return /* @__PURE__ */ jsxs15("div", { className: "relative", children: [
|
|
6490
|
+
/* @__PURE__ */ jsx34(Search2, { className: "absolute left-3 top-1/2 -translate-y-1/2 h-4 w-4 text-muted-foreground" }),
|
|
6491
|
+
/* @__PURE__ */ jsx34(
|
|
6182
6492
|
Input,
|
|
6183
6493
|
{
|
|
6184
6494
|
ref,
|
|
@@ -6188,13 +6498,13 @@ var SearchInput = React25.forwardRef(
|
|
|
6188
6498
|
...props
|
|
6189
6499
|
}
|
|
6190
6500
|
),
|
|
6191
|
-
value && onClear && /* @__PURE__ */
|
|
6501
|
+
value && onClear && /* @__PURE__ */ jsx34(
|
|
6192
6502
|
"button",
|
|
6193
6503
|
{
|
|
6194
6504
|
type: "button",
|
|
6195
6505
|
onClick: onClear,
|
|
6196
6506
|
className: "absolute right-3 top-1/2 -translate-y-1/2 h-4 w-4 text-muted-foreground hover:text-foreground transition-colors",
|
|
6197
|
-
children: /* @__PURE__ */
|
|
6507
|
+
children: /* @__PURE__ */ jsx34(X2, { className: "h-4 w-4" })
|
|
6198
6508
|
}
|
|
6199
6509
|
)
|
|
6200
6510
|
] });
|
|
@@ -6276,6 +6586,7 @@ export {
|
|
|
6276
6586
|
Modal,
|
|
6277
6587
|
PlatformContext,
|
|
6278
6588
|
PlatformProvider,
|
|
6589
|
+
PricingTable,
|
|
6279
6590
|
Progress,
|
|
6280
6591
|
ROLES,
|
|
6281
6592
|
ROLE_ADMIN,
|
|
@@ -6381,6 +6692,7 @@ export {
|
|
|
6381
6692
|
useCanvas,
|
|
6382
6693
|
useChannelMembers,
|
|
6383
6694
|
useChannels,
|
|
6695
|
+
useCheckout,
|
|
6384
6696
|
useCommunities,
|
|
6385
6697
|
useConversation,
|
|
6386
6698
|
useConversations,
|
|
@@ -6402,6 +6714,7 @@ export {
|
|
|
6402
6714
|
useReadReceipts,
|
|
6403
6715
|
useRecordContext,
|
|
6404
6716
|
useSession,
|
|
6717
|
+
useSubscription,
|
|
6405
6718
|
useToast,
|
|
6406
6719
|
useUser,
|
|
6407
6720
|
useUserLookup,
|