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/index.js CHANGED
@@ -11,13 +11,13 @@ var DEV_CONFIG = {
11
11
  };
12
12
  var PROD_CONFIG = {
13
13
  name: "prod",
14
- apiUrl: "https://deepspace-api.eudaimonicincorporated.workers.dev",
15
- platformWorkerUrl: "https://deepspace-platform-worker.eudaimonicincorporated.workers.dev",
16
- authUrl: "https://deepspace-auth.eudaimonicincorporated.workers.dev",
17
- authSignInUrl: "https://deep.space/sign-in",
18
- authSignUpUrl: "https://deep.space/sign-up",
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://console.deep.space"
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 data = record.data;
1346
+ const r = record;
1347
+ const data = r.data;
1339
1348
  if (!data) return false;
1340
- return Object.entries(where).every(([key, value]) => data[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 data = record.data;
1833
+ const r = record;
1834
+ const data = r.data;
1820
1835
  if (!data) return false;
1821
- return Object.entries(where).every(([key, value]) => data[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 jsx10 } from "react/jsx-runtime";
4766
- var Card = React7.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx10(
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__ */ jsx10(
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__ */ jsx10(
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__ */ jsx10(
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__ */ jsx10("div", { ref, className: cn("p-4 pt-0 sm:p-6 sm:pt-0", className), ...props }));
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__ */ jsx10(
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 jsx11 } from "react/jsx-runtime";
5130
+ import { jsx as jsx12 } from "react/jsx-runtime";
4821
5131
  var Separator = React8.forwardRef(
4822
- ({ className, orientation = "horizontal", decorative = true, ...props }, ref) => /* @__PURE__ */ jsx11(
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 jsx12 } from "react/jsx-runtime";
4842
- var Table = React9.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx12("div", { className: "relative w-full overflow-auto", children: /* @__PURE__ */ jsx12(
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__ */ jsx12("thead", { ref, className: cn("[&_tr]:border-b", className), ...props }));
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__ */ jsx12(
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__ */ jsx12(
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__ */ jsx12(
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__ */ jsx12(
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__ */ jsx12(
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__ */ jsx12(
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 jsx13 } from "react/jsx-runtime";
5233
+ import { jsx as jsx14 } from "react/jsx-runtime";
4924
5234
  var Tabs = TabsPrimitive.Root;
4925
- var TabsList = React10.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx13(
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__ */ jsx13(
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__ */ jsx13(
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 jsx14, jsxs as jsxs5 } from "react/jsx-runtime";
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__ */ jsxs5(
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__ */ jsx14("span", { className: "w-4 h-4 border-2 border-current border-t-transparent rounded-full animate-spin" }),
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 jsx15 } from "react/jsx-runtime";
5324
+ import { jsx as jsx16 } from "react/jsx-runtime";
5015
5325
  var Input = React12.forwardRef(
5016
5326
  ({ className, type, ...props }, ref) => {
5017
- return /* @__PURE__ */ jsx15(
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 jsx16 } from "react/jsx-runtime";
5345
+ import { jsx as jsx17 } from "react/jsx-runtime";
5036
5346
  var Textarea = React13.forwardRef(({ className, ...props }, ref) => {
5037
- return /* @__PURE__ */ jsx16(
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 jsx17, jsxs as jsxs6 } from "react/jsx-runtime";
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__ */ jsxs6(
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__ */ jsx17(SelectPrimitive.Icon, { asChild: true, children: /* @__PURE__ */ jsx17(ChevronDown, { className: "h-4 w-4 opacity-50" }) })
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__ */ jsx17(
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__ */ jsx17(ChevronUp, { className: "h-4 w-4" })
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__ */ jsx17(
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__ */ jsx17(ChevronDown, { className: "h-4 w-4" })
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__ */ jsx17(SelectPrimitive.Portal, { children: /* @__PURE__ */ jsxs6(
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__ */ jsx17(SelectScrollUpButton, {}),
5114
- /* @__PURE__ */ jsx17(
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__ */ jsx17(SelectScrollDownButton, {})
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__ */ jsx17(
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__ */ jsxs6(
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__ */ jsx17("span", { className: "absolute right-2 flex h-3.5 w-3.5 items-center justify-center", children: /* @__PURE__ */ jsx17(SelectPrimitive.ItemIndicator, { children: /* @__PURE__ */ jsx17(Check, { className: "h-4 w-4" }) }) }),
5149
- /* @__PURE__ */ jsx17(SelectPrimitive.ItemText, { children })
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__ */ jsx17(
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 jsx18 } from "react/jsx-runtime";
5169
- var Checkbox = React15.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx18(
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__ */ jsx18(
5488
+ children: /* @__PURE__ */ jsx19(
5179
5489
  CheckboxPrimitive.Indicator,
5180
5490
  {
5181
5491
  className: cn("grid place-content-center text-current"),
5182
- children: /* @__PURE__ */ jsx18(Check2, { className: "h-4 w-4" })
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 jsx19 } from "react/jsx-runtime";
5193
- var Switch = React16.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx19(
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__ */ jsx19(
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 jsx20 } from "react/jsx-runtime";
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__ */ jsx20(
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 jsx21 } from "react/jsx-runtime";
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__ */ jsx21("div", { className: cn(badgeVariants({ variant, size }), className), ...props });
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 jsx22 } from "react/jsx-runtime";
5268
- var Avatar = React18.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx22(
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__ */ jsx22(
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__ */ jsx22(
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 jsx23 } from "react/jsx-runtime";
5306
- var Progress = React19.forwardRef(({ className, value, ...props }, ref) => /* @__PURE__ */ jsx23(
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__ */ jsx23(
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 jsx24, jsxs as jsxs7 } from "react/jsx-runtime";
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__ */ jsx24(
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__ */ jsx24("div", { className: cn("space-y-2", className), children: Array.from({ length: lines }).map((_, i) => /* @__PURE__ */ jsx24(
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__ */ jsxs7("div", { className: cn("border border-border rounded-lg overflow-hidden", className), children: [
5356
- hasImage && /* @__PURE__ */ jsx24(Skeleton, { className: "w-full h-32 rounded-none" }),
5357
- /* @__PURE__ */ jsxs7("div", { className: "p-4 space-y-3", children: [
5358
- /* @__PURE__ */ jsx24(Skeleton, { className: "h-5 w-3/4" }),
5359
- /* @__PURE__ */ jsx24(SkeletonText, { lines: 2 }),
5360
- /* @__PURE__ */ jsx24(Skeleton, { className: "h-3 w-1/3" })
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__ */ jsx24("div", { className: cn("space-y-3", className), children: Array.from({ length: items }).map((_, i) => /* @__PURE__ */ jsxs7("div", { className: "flex items-center gap-3 p-3 border border-border rounded-lg", children: [
5366
- /* @__PURE__ */ jsx24(Skeleton, { className: "w-10 h-10 rounded-full" }),
5367
- /* @__PURE__ */ jsxs7("div", { className: "flex-1 space-y-2", children: [
5368
- /* @__PURE__ */ jsx24(Skeleton, { className: "h-4 w-1/3" }),
5369
- /* @__PURE__ */ jsx24(Skeleton, { className: "h-3 w-1/2" })
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__ */ jsx24(Skeleton, { className: "w-16 h-6" })
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__ */ jsxs7("div", { className: cn("border border-border rounded-lg overflow-hidden", className), children: [
5380
- /* @__PURE__ */ jsx24("div", { className: "flex gap-4 p-4 bg-muted/50 border-b border-border", children: Array.from({ length: columns }).map((_, i) => /* @__PURE__ */ jsx24(Skeleton, { className: "h-4 flex-1" }, i)) }),
5381
- Array.from({ length: rows }).map((_, rowIndex) => /* @__PURE__ */ jsx24("div", { className: "flex gap-4 p-4 border-b border-border last:border-0", children: Array.from({ length: columns }).map((_2, colIndex) => /* @__PURE__ */ jsx24(
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__ */ jsx24(Skeleton, { className: cn(sizes[size], "rounded-full", className) });
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__ */ jsx24(
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__ */ jsxs7("div", { className: cn("flex flex-col items-center justify-center py-16", className), children: [
5418
- /* @__PURE__ */ jsx24(LoadingSpinner, { size: "lg" }),
5419
- message && /* @__PURE__ */ jsx24("p", { className: "mt-4 text-muted-foreground", children: message }),
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 jsx25, jsxs as jsxs8 } from "react/jsx-runtime";
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__ */ jsx25("div", { className: cn("grid gap-3 sm:gap-4", gridCols[columns], className), ...rest, children });
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__ */ jsx25(
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__ */ jsx25("div", { className: cn(heights[height], "overflow-hidden bg-muted", className), children: /* @__PURE__ */ jsx25(
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__ */ jsxs8("div", { className: cn("flex items-start justify-between gap-2 p-4 pb-2", className), children: [
5470
- /* @__PURE__ */ jsx25("div", { className: "flex-1 min-w-0", children }),
5471
- actions && /* @__PURE__ */ jsx25("div", { className: "sm:opacity-0 sm:group-hover:opacity-100 transition-opacity shrink-0", children: actions })
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__ */ jsx25("h3", { className: cn("font-semibold text-foreground truncate", className), children });
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__ */ jsx25("div", { className: cn("px-4 pb-4", className), children });
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__ */ jsx25("p", { className: cn("text-sm text-muted-foreground leading-relaxed", lineClamp[lines], className), children });
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__ */ jsx25("div", { className: cn("px-4 pb-4 pt-2 text-xs text-muted-foreground", className), children });
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__ */ jsx25("span", { className: cn("inline-flex px-2 py-0.5 text-xs font-medium rounded border", variants[variant], className), children });
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__ */ jsxs8("div", { className: "flex items-center gap-1", children: [
5507
- onMore && /* @__PURE__ */ jsx25(
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__ */ jsx25(MoreHorizontal, { className: "w-4 h-4" })
5822
+ children: /* @__PURE__ */ jsx26(MoreHorizontal, { className: "w-4 h-4" })
5513
5823
  }
5514
5824
  ),
5515
- onDelete && /* @__PURE__ */ jsx25(
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__ */ jsx25(Trash2, { className: "w-4 h-4" })
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 jsx26 } from "react/jsx-runtime";
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__ */ jsx26(
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__ */ jsx26(
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__ */ jsx26(
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 useState16,
5589
- useCallback as useCallback25,
5590
- useEffect as useEffect19
5898
+ useState as useState18,
5899
+ useCallback as useCallback27,
5900
+ useEffect as useEffect21
5591
5901
  } from "react";
5592
- import { jsx as jsx27, jsxs as jsxs9 } from "react/jsx-runtime";
5902
+ import { jsx as jsx28, jsxs as jsxs10 } from "react/jsx-runtime";
5593
5903
  function CheckCircleIcon({ className }) {
5594
- return /* @__PURE__ */ jsxs9("svg", { className, viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: 2, strokeLinecap: "round", strokeLinejoin: "round", children: [
5595
- /* @__PURE__ */ jsx27("path", { d: "M22 11.08V12a10 10 0 1 1-5.93-9.14" }),
5596
- /* @__PURE__ */ jsx27("polyline", { points: "22 4 12 14.01 9 11.01" })
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__ */ jsxs9("svg", { className, viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: 2, strokeLinecap: "round", strokeLinejoin: "round", children: [
5601
- /* @__PURE__ */ jsx27("circle", { cx: "12", cy: "12", r: "10" }),
5602
- /* @__PURE__ */ jsx27("line", { x1: "12", y1: "8", x2: "12", y2: "12" }),
5603
- /* @__PURE__ */ jsx27("line", { x1: "12", y1: "16", x2: "12.01", y2: "16" })
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__ */ jsxs9("svg", { className, viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: 2, strokeLinecap: "round", strokeLinejoin: "round", children: [
5608
- /* @__PURE__ */ jsx27("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" }),
5609
- /* @__PURE__ */ jsx27("line", { x1: "12", y1: "9", x2: "12", y2: "13" }),
5610
- /* @__PURE__ */ jsx27("line", { x1: "12", y1: "17", x2: "12.01", y2: "17" })
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__ */ jsxs9("svg", { className, viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: 2, strokeLinecap: "round", strokeLinejoin: "round", children: [
5615
- /* @__PURE__ */ jsx27("circle", { cx: "12", cy: "12", r: "10" }),
5616
- /* @__PURE__ */ jsx27("line", { x1: "12", y1: "16", x2: "12", y2: "12" }),
5617
- /* @__PURE__ */ jsx27("line", { x1: "12", y1: "8", x2: "12.01", y2: "8" })
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__ */ jsxs9("svg", { className, viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: 2, strokeLinecap: "round", strokeLinejoin: "round", children: [
5622
- /* @__PURE__ */ jsx27("line", { x1: "18", y1: "6", x2: "6", y2: "18" }),
5623
- /* @__PURE__ */ jsx27("line", { x1: "6", y1: "6", x2: "18", y2: "18" })
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] = useState16([]);
5638
- const dismiss = useCallback25((id) => {
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 = useCallback25(() => {
5951
+ const dismissAll = useCallback27(() => {
5642
5952
  setToasts([]);
5643
5953
  }, []);
5644
- const addToast = useCallback25(
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 = useCallback25(
5968
+ const toast = useCallback27(
5659
5969
  (options) => addToast(options),
5660
5970
  [addToast]
5661
5971
  );
5662
- const success = useCallback25(
5972
+ const success = useCallback27(
5663
5973
  (title, description) => addToast({ type: "success", title, description }),
5664
5974
  [addToast]
5665
5975
  );
5666
- const error = useCallback25(
5976
+ const error = useCallback27(
5667
5977
  (title, description) => addToast({ type: "error", title, description }),
5668
5978
  [addToast]
5669
5979
  );
5670
- const warning = useCallback25(
5980
+ const warning = useCallback27(
5671
5981
  (title, description) => addToast({ type: "warning", title, description }),
5672
5982
  [addToast]
5673
5983
  );
5674
- const info = useCallback25(
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__ */ jsxs9(
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__ */ jsx27(
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__ */ jsx27(ToastItem, { toast: t, onDismiss: () => dismiss(t.id) }, t.id))
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] = useState16(false);
5712
- useEffect19(() => {
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__ */ jsxs9(
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__ */ jsx27("span", { className: `absolute inset-y-0 left-0 w-[3px] ${accent}`, "aria-hidden": true }),
5730
- /* @__PURE__ */ jsx27(Icon2, { className: `mt-0.5 h-4 w-4 shrink-0 ${icon}` }),
5731
- /* @__PURE__ */ jsxs9("div", { className: "flex-1 min-w-0", children: [
5732
- /* @__PURE__ */ jsx27("p", { className: "text-[13px] font-medium leading-tight", children: toast.title }),
5733
- toast.description && /* @__PURE__ */ jsx27("p", { className: "mt-0.5 text-xs leading-snug text-muted-foreground", children: toast.description })
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__ */ jsx27(
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__ */ jsx27(CloseIcon, { className: "h-3.5 w-3.5" })
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 jsx28, jsxs as jsxs10 } from "react/jsx-runtime";
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__ */ jsxs10("div", { className: cn("flex flex-col items-center justify-center py-16 px-4 text-center", className), ...rest, children: [
5762
- icon && /* @__PURE__ */ jsx28("div", { className: "w-16 h-16 rounded-2xl bg-muted/50 border border-border flex items-center justify-center mb-5", children: /* @__PURE__ */ jsx28("span", { className: "text-muted-foreground", children: icon }) }),
5763
- /* @__PURE__ */ jsx28("h3", { className: "text-lg font-semibold text-foreground mb-2", children: title }),
5764
- description && /* @__PURE__ */ jsx28("p", { className: "text-muted-foreground text-sm max-w-sm mb-6", children: description }),
5765
- (action || secondaryAction) && /* @__PURE__ */ jsxs10("div", { className: "flex items-center gap-3", children: [
5766
- action && /* @__PURE__ */ jsxs10(
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__ */ jsx28(Plus, { className: "w-4 h-4" }),
6082
+ /* @__PURE__ */ jsx29(Plus, { className: "w-4 h-4" }),
5773
6083
  action.label
5774
6084
  ]
5775
6085
  }
5776
6086
  ),
5777
- secondaryAction && /* @__PURE__ */ jsx28(
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__ */ jsx28(
6099
+ return /* @__PURE__ */ jsx29(
5790
6100
  EmptyState,
5791
6101
  {
5792
- icon: /* @__PURE__ */ jsx28(Inbox, { className: "w-8 h-8" }),
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__ */ jsx28(
6111
+ return /* @__PURE__ */ jsx29(
5802
6112
  EmptyState,
5803
6113
  {
5804
- icon: /* @__PURE__ */ jsx28(Search, { className: "w-8 h-8" }),
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__ */ jsx28(
6123
+ return /* @__PURE__ */ jsx29(
5814
6124
  EmptyState,
5815
6125
  {
5816
- icon: /* @__PURE__ */ jsx28(FileText, { className: "w-8 h-8" }),
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__ */ jsx28(
6135
+ return /* @__PURE__ */ jsx29(
5826
6136
  EmptyState,
5827
6137
  {
5828
- icon: /* @__PURE__ */ jsx28(FolderOpen, { className: "w-8 h-8" }),
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__ */ jsx28(
6147
+ return /* @__PURE__ */ jsx29(
5838
6148
  EmptyState,
5839
6149
  {
5840
- icon: /* @__PURE__ */ jsx28(Users, { className: "w-8 h-8" }),
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__ */ jsx28(
6159
+ return /* @__PURE__ */ jsx29(
5850
6160
  EmptyState,
5851
6161
  {
5852
- icon: /* @__PURE__ */ jsx28(AlertCircle, { className: "w-8 h-8 text-destructive" }),
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 jsx29, jsxs as jsxs11 } from "react/jsx-runtime";
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__ */ jsx29(
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__ */ jsxs11(DialogPortal, { children: [
5883
- /* @__PURE__ */ jsx29(DialogOverlay, {}),
5884
- /* @__PURE__ */ jsxs11(
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__ */ jsxs11(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: [
5896
- /* @__PURE__ */ jsx29(X, { className: "h-4 w-4" }),
5897
- /* @__PURE__ */ jsx29("span", { className: "sr-only", children: "Close" })
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__ */ jsx29(
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__ */ jsx29(
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__ */ jsx29(
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__ */ jsx29(
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 jsx30, jsxs as jsxs12 } from "react/jsx-runtime";
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__ */ jsxs12(
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__ */ jsx30(ChevronRight, { className: "ml-auto" })
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__ */ jsx30(
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__ */ jsx30(DropdownMenuPrimitive.Portal, { children: /* @__PURE__ */ jsx30(
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__ */ jsx30(
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__ */ jsxs12(
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__ */ jsx30("span", { className: "absolute left-2 flex h-3.5 w-3.5 items-center justify-center", children: /* @__PURE__ */ jsx30(DropdownMenuPrimitive.ItemIndicator, { children: /* @__PURE__ */ jsx30(Check3, { className: "h-4 w-4" }) }) }),
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__ */ jsxs12(
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__ */ jsx30("span", { className: "absolute left-2 flex h-3.5 w-3.5 items-center justify-center", children: /* @__PURE__ */ jsx30(DropdownMenuPrimitive.ItemIndicator, { children: /* @__PURE__ */ jsx30(Circle, { className: "h-2 w-2 fill-current" }) }) }),
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__ */ jsx30(
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__ */ jsx30(
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__ */ jsx30(
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 jsx31 } from "react/jsx-runtime";
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__ */ jsx31(TooltipPrimitive.Portal, { children: /* @__PURE__ */ jsx31(
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 jsx32, jsxs as jsxs13 } from "react/jsx-runtime";
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__ */ jsx32(Dialog, { open, onOpenChange: (v) => {
6436
+ return /* @__PURE__ */ jsx33(Dialog, { open, onOpenChange: (v) => {
6127
6437
  if (!v) onClose();
6128
- }, children: /* @__PURE__ */ jsx32(DialogContent, { "aria-describedby": void 0, className: cn(sizes[size], "flex flex-col max-h-[85vh]", className), children }) });
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__ */ jsx32(DialogHeader, { className, children });
6441
+ return /* @__PURE__ */ jsx33(DialogHeader, { className, children });
6132
6442
  }
6133
6443
  function ModalTitle({ children, className = "" }) {
6134
- return /* @__PURE__ */ jsx32(DialogTitle, { className, children });
6444
+ return /* @__PURE__ */ jsx33(DialogTitle, { className, children });
6135
6445
  }
6136
6446
  function ModalDescription({ children, className = "" }) {
6137
- return /* @__PURE__ */ jsx32(DialogDescription, { className, children });
6447
+ return /* @__PURE__ */ jsx33(DialogDescription, { className, children });
6138
6448
  }
6139
6449
  function ModalBody({ children, className = "" }) {
6140
- return /* @__PURE__ */ jsx32("div", { className: cn("flex-1 overflow-y-auto py-4", className), children });
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__ */ jsx32(DialogFooter, { className, children });
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__ */ jsxs13(Modal, { open, onClose, size: "sm", children: [
6157
- /* @__PURE__ */ jsxs13(Modal.Header, { children: [
6158
- /* @__PURE__ */ jsx32(Modal.Title, { children: title }),
6159
- description && /* @__PURE__ */ jsx32(Modal.Description, { children: description })
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__ */ jsxs13(Modal.Footer, { children: [
6162
- /* @__PURE__ */ jsx32(Button, { variant: "ghost", onClick: onClose, disabled: loading, children: cancelText }),
6163
- /* @__PURE__ */ jsx32(Button, { variant, onClick: onConfirm, loading, children: confirmText })
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 jsx33, jsxs as jsxs14 } from "react/jsx-runtime";
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__ */ jsxs14("div", { className: "relative", children: [
6180
- /* @__PURE__ */ jsx33(Search2, { className: "absolute left-3 top-1/2 -translate-y-1/2 h-4 w-4 text-muted-foreground" }),
6181
- /* @__PURE__ */ jsx33(
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__ */ jsx33(
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__ */ jsx33(X2, { className: "h-4 w-4" })
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,