@m5kdev/web-ui 0.9.0 → 0.9.1
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/packages/backend/dist/src/modules/base/base.procedure.d.mts +11 -1
- package/dist/packages/backend/dist/src/modules/base/base.procedure.d.ts +11 -1
- package/dist/packages/backend/dist/src/modules/base/base.service.d.mts +1 -1
- package/dist/packages/backend/dist/src/modules/base/base.service.d.ts +1 -1
- package/dist/packages/backend/dist/src/modules/billing/billing.repository.d.mts +10 -10
- package/dist/packages/backend/dist/src/modules/billing/billing.repository.d.ts +10 -10
- package/dist/packages/backend/dist/src/modules/billing/billing.service.d.mts +6 -6
- package/dist/packages/backend/dist/src/modules/billing/billing.service.d.ts +6 -6
- package/dist/src/components/AvatarUpload.js +1 -1
- package/dist/src/components/AvatarUpload.mjs +2 -2
- package/dist/src/components/AvatarUpload.mjs.map +1 -1
- package/dist/src/components/Calendar.d.mts +1 -1
- package/dist/src/components/CardsSelect.js +1 -1
- package/dist/src/components/CardsSelect.mjs +1 -1
- package/dist/src/components/CollapsibleSidebarMenuItem.d.mts +1 -1
- package/dist/src/components/ColorPicker.d.mts +1 -1
- package/dist/src/components/ColorPicker.js +1 -1
- package/dist/src/components/ColorPicker.mjs +1 -1
- package/dist/src/components/CopyButton.d.mts +1 -1
- package/dist/src/components/CopyButton.js +1 -1
- package/dist/src/components/CopyButton.mjs +2 -2
- package/dist/src/components/CopyButton.mjs.map +1 -1
- package/dist/src/components/CropDialog.js +1 -1
- package/dist/src/components/CropDialog.mjs +1 -1
- package/dist/src/components/DialogProvider.d.mts +1 -1
- package/dist/src/components/DialogProvider.js +1 -1
- package/dist/src/components/DialogProvider.mjs +2 -2
- package/dist/src/components/DialogProvider.mjs.map +1 -1
- package/dist/src/components/FileDropzone.js +1 -1
- package/dist/src/components/FileDropzone.mjs +3 -3
- package/dist/src/components/FileDropzone.mjs.map +1 -1
- package/dist/src/components/MultiSelectDropdown.js +1 -1
- package/dist/src/components/MultiSelectDropdown.mjs +7 -7
- package/dist/src/components/MultiSelectDropdown.mjs.map +1 -1
- package/dist/src/components/Orb.js +1 -1
- package/dist/src/components/Orb.mjs +1 -1
- package/dist/src/components/PageAlert.d.mts +1 -1
- package/dist/src/components/PageAlert.d.ts +1 -1
- package/dist/src/components/PageAlert.js +1 -1
- package/dist/src/components/PageAlert.mjs +1 -1
- package/dist/src/components/SelectChips.d.mts +1 -1
- package/dist/src/components/SelectChips.js +1 -1
- package/dist/src/components/SelectChips.mjs +1 -1
- package/dist/src/components/SidebarItem.d.mts +1 -1
- package/dist/src/components/TablerIconPicker.d.mts +1 -1
- package/dist/src/components/TablerIconPicker.js +1 -1
- package/dist/src/components/TablerIconPicker.mjs +1 -1
- package/dist/src/components/app-header.js +1 -1
- package/dist/src/components/app-header.mjs +2 -2
- package/dist/src/components/app-header.mjs.map +1 -1
- package/dist/src/components/blur-card.d.mts +1 -1
- package/dist/src/components/blur-card.js +1 -1
- package/dist/src/components/blur-card.mjs +1 -1
- package/dist/src/components/features-section-demo-1.js +1 -1
- package/dist/src/components/features-section-demo-1.mjs +1 -1
- package/dist/src/components/features-section-demo-3.js +1 -1
- package/dist/src/components/features-section-demo-3.mjs +1 -1
- package/dist/src/components/shared/ButtonCopy.js +1 -1
- package/dist/src/components/shared/ButtonCopy.mjs +2 -2
- package/dist/src/components/shared/ButtonCopy.mjs.map +1 -1
- package/dist/src/components/team-switcher.d.mts +1 -1
- package/dist/src/components/team-switcher.js +1 -1
- package/dist/src/components/team-switcher.mjs +1 -1
- package/dist/src/components/theme-provider.js +1 -1
- package/dist/src/components/theme-provider.mjs +1 -1
- package/dist/src/components/typewriter.js +1 -1
- package/dist/src/components/typewriter.mjs +1 -1
- package/dist/src/components/ui/alert-dialog.d.mts +1 -1
- package/dist/src/components/ui/alert.d.mts +1 -1
- package/dist/src/components/ui/avatar.js +1 -1
- package/dist/src/components/ui/avatar.mjs +1 -1
- package/dist/src/components/ui/badge.d.mts +1 -1
- package/dist/src/components/ui/bento-grid2.d.mts +1 -1
- package/dist/src/components/ui/breadcrumb.d.mts +1 -1
- package/dist/src/components/ui/breadcrumb.js +1 -1
- package/dist/src/components/ui/breadcrumb.mjs +1 -1
- package/dist/src/components/ui/button.js +1 -1
- package/dist/src/components/ui/button.mjs +1 -1
- package/dist/src/components/ui/card.js +1 -1
- package/dist/src/components/ui/card.mjs +1 -1
- package/dist/src/components/ui/checkbox.js +1 -1
- package/dist/src/components/ui/checkbox.mjs +1 -1
- package/dist/src/components/ui/dialog.d.mts +1 -1
- package/dist/src/components/ui/dropdown-menu.d.mts +1 -1
- package/dist/src/components/ui/dropdown-menu.js +1 -1
- package/dist/src/components/ui/dropdown-menu.mjs +1 -1
- package/dist/src/components/ui/floating-navbar.d.mts +1 -1
- package/dist/src/components/ui/floating-navbar.js +1 -1
- package/dist/src/components/ui/floating-navbar.mjs +1 -1
- package/dist/src/components/ui/form.d.mts +1 -1
- package/dist/src/components/ui/form.js +1 -1
- package/dist/src/components/ui/form.mjs +1 -1
- package/dist/src/components/ui/image.js +1 -1
- package/dist/src/components/ui/image.mjs +1 -1
- package/dist/src/components/ui/input.js +1 -1
- package/dist/src/components/ui/input.mjs +1 -1
- package/dist/src/components/ui/label.js +1 -1
- package/dist/src/components/ui/label.mjs +1 -1
- package/dist/src/components/ui/pagination.d.mts +1 -1
- package/dist/src/components/ui/progress.js +1 -1
- package/dist/src/components/ui/progress.mjs +1 -1
- package/dist/src/components/ui/resizable-navbar.d.mts +1 -1
- package/dist/src/components/ui/resizable-navbar.js +1 -1
- package/dist/src/components/ui/resizable-navbar.mjs +1 -1
- package/dist/src/components/ui/segment-control.js +1 -1
- package/dist/src/components/ui/segment-control.mjs +3 -3
- package/dist/src/components/ui/segment-control.mjs.map +1 -1
- package/dist/src/components/ui/select.js +1 -1
- package/dist/src/components/ui/select.mjs +1 -1
- package/dist/src/components/ui/separator.js +1 -1
- package/dist/src/components/ui/separator.mjs +1 -1
- package/dist/src/components/ui/sheet.d.mts +1 -1
- package/dist/src/components/ui/sheet.js +1 -1
- package/dist/src/components/ui/sheet.mjs +1 -1
- package/dist/src/components/ui/sidebar.js +1 -1
- package/dist/src/components/ui/sidebar.mjs +1 -1
- package/dist/src/components/ui/slider.js +1 -1
- package/dist/src/components/ui/slider.mjs +1 -1
- package/dist/src/components/ui/spinner.d.mts +1 -1
- package/dist/src/components/ui/switch.js +1 -1
- package/dist/src/components/ui/switch.mjs +1 -1
- package/dist/src/components/ui/table.d.mts +1 -1
- package/dist/src/components/ui/tabs.d.mts +1 -1
- package/dist/src/components/ui/textarea.d.mts +1 -1
- package/dist/src/components/ui/timeline.d.mts +1 -1
- package/dist/src/components/ui/timeline.js +1 -1
- package/dist/src/components/ui/timeline.mjs +1 -1
- package/dist/src/components/ui/toast.js +1 -1
- package/dist/src/components/ui/toast.mjs +1 -1
- package/dist/src/components/ui/tooltip.d.mts +1 -1
- package/dist/src/components/ui/typewriter-effect.js +1 -1
- package/dist/src/components/ui/typewriter-effect.mjs +1 -1
- package/dist/src/icons/GoogleIcon.d.mts +1 -1
- package/dist/src/icons/LinkedInIcon.d.mts +1 -1
- package/dist/src/icons/MicrosoftIcon.d.mts +1 -1
- package/dist/src/modules/app/components/AppLoader.d.mts +1 -1
- package/dist/src/modules/app/components/AppLoader.js +1 -1
- package/dist/src/modules/app/components/AppLoader.mjs +1 -1
- package/dist/src/modules/app/components/AppShell.d.mts +1 -1
- package/dist/src/modules/app/components/AppSidebar.d.mts +1 -1
- package/dist/src/modules/app/components/AppSidebarHeader.js +1 -1
- package/dist/src/modules/app/components/AppSidebarHeader.mjs +1 -1
- package/dist/src/modules/app/components/AppSidebarInvites.js +1 -1
- package/dist/src/modules/app/components/AppSidebarInvites.mjs +1 -1
- package/dist/src/modules/auth/components/AdminUserManagement.js +2 -2
- package/dist/src/modules/auth/components/AdminUserManagement.mjs +6 -6
- package/dist/src/modules/auth/components/AdminUserManagement.mjs.map +1 -1
- package/dist/src/modules/auth/components/AdminWaitlist.js +1 -1
- package/dist/src/modules/auth/components/AdminWaitlist.mjs +3 -3
- package/dist/src/modules/auth/components/AdminWaitlist.mjs.map +1 -1
- package/dist/src/modules/auth/components/AuthLayout.d.mts +1 -1
- package/dist/src/modules/auth/components/AuthProviders.js +1 -1
- package/dist/src/modules/auth/components/AuthProviders.mjs +1 -1
- package/dist/src/modules/auth/components/AuthRouter.d.mts +1 -1
- package/dist/src/modules/auth/components/ClaimAccountRoute.js +1 -1
- package/dist/src/modules/auth/components/ClaimAccountRoute.mjs +1 -1
- package/dist/src/modules/auth/components/ErrorAuthRoute.js +1 -1
- package/dist/src/modules/auth/components/ErrorAuthRoute.mjs +1 -1
- package/dist/src/modules/auth/components/ForgotPasswordForm.js +1 -1
- package/dist/src/modules/auth/components/ForgotPasswordForm.mjs +1 -1
- package/dist/src/modules/auth/components/ForgotPasswordRoute.js +1 -1
- package/dist/src/modules/auth/components/ForgotPasswordRoute.mjs +1 -1
- package/dist/src/modules/auth/components/InviteFriends.js +1 -1
- package/dist/src/modules/auth/components/InviteFriends.mjs +1 -1
- package/dist/src/modules/auth/components/LastUsedBadge.d.mts +1 -1
- package/dist/src/modules/auth/components/LastUsedBadge.js +1 -1
- package/dist/src/modules/auth/components/LastUsedBadge.mjs +1 -1
- package/dist/src/modules/auth/components/LoginForm.js +1 -1
- package/dist/src/modules/auth/components/LoginForm.mjs +1 -1
- package/dist/src/modules/auth/components/LoginRoute.js +1 -1
- package/dist/src/modules/auth/components/LoginRoute.mjs +1 -1
- package/dist/src/modules/auth/components/LogoutRoute.js +1 -1
- package/dist/src/modules/auth/components/LogoutRoute.mjs +1 -1
- package/dist/src/modules/auth/components/OrganizationAcceptInvitationRoute.js +1 -1
- package/dist/src/modules/auth/components/OrganizationAcceptInvitationRoute.mjs +1 -1
- package/dist/src/modules/auth/components/OrganizationMembersRoute.js +2 -2
- package/dist/src/modules/auth/components/OrganizationMembersRoute.mjs +2 -2
- package/dist/src/modules/auth/components/OrganizationPreferences.js +1 -1
- package/dist/src/modules/auth/components/OrganizationPreferences.mjs +1 -1
- package/dist/src/modules/auth/components/OrganizationSettingsRoute.js +2 -2
- package/dist/src/modules/auth/components/OrganizationSettingsRoute.mjs +2 -2
- package/dist/src/modules/auth/components/OrganizationSwitcher.js +2 -2
- package/dist/src/modules/auth/components/OrganizationSwitcher.mjs +2 -2
- package/dist/src/modules/auth/components/PreferencesEditor.js +1 -1
- package/dist/src/modules/auth/components/PreferencesEditor.mjs +1 -1
- package/dist/src/modules/auth/components/ProfileRoute.js +1 -1
- package/dist/src/modules/auth/components/ProfileRoute.mjs +1 -1
- package/dist/src/modules/auth/components/RangeNuqsDatePicker.js +1 -1
- package/dist/src/modules/auth/components/RangeNuqsDatePicker.mjs +1 -1
- package/dist/src/modules/auth/components/ResetPasswordForm.js +1 -1
- package/dist/src/modules/auth/components/ResetPasswordForm.mjs +1 -1
- package/dist/src/modules/auth/components/ResetPasswordRoute.js +1 -1
- package/dist/src/modules/auth/components/ResetPasswordRoute.mjs +1 -1
- package/dist/src/modules/auth/components/SignupFormRoute.js +1 -1
- package/dist/src/modules/auth/components/SignupFormRoute.mjs +1 -1
- package/dist/src/modules/auth/components/SignupRoute.js +1 -1
- package/dist/src/modules/auth/components/SignupRoute.mjs +1 -1
- package/dist/src/modules/auth/components/WaitlistCard.js +1 -1
- package/dist/src/modules/auth/components/WaitlistCard.mjs +1 -1
- package/dist/src/modules/auth/components/WaitlistCodeValidation.js +1 -1
- package/dist/src/modules/auth/components/WaitlistCodeValidation.mjs +1 -1
- package/dist/src/modules/billing/components/BillingBetaPage.d.mts +1 -1
- package/dist/src/modules/billing/components/BillingInvoicePage.js +2 -2
- package/dist/src/modules/billing/components/BillingInvoicePage.mjs +2 -2
- package/dist/src/modules/billing/components/BillingSinglePlanSelect.js +1 -1
- package/dist/src/modules/billing/components/BillingSinglePlanSelect.mjs +1 -1
- package/dist/src/modules/table/components/ColumnOrderAndVisibility.js +1 -1
- package/dist/src/modules/table/components/ColumnOrderAndVisibility.mjs +1 -1
- package/dist/src/modules/table/components/NuqsTable.js +1 -1
- package/dist/src/modules/table/components/NuqsTable.mjs +3 -3
- package/dist/src/modules/table/components/NuqsTable.mjs.map +1 -1
- package/dist/src/modules/table/components/TableFiltering.js +1 -1
- package/dist/src/modules/table/components/TableFiltering.mjs +1 -1
- package/dist/src/modules/table/components/TableGroupBy.js +1 -1
- package/dist/src/modules/table/components/TableGroupBy.mjs +1 -1
- package/dist/src/modules/table/components/TablePagination.js +1 -1
- package/dist/src/modules/table/components/TablePagination.mjs +1 -1
- package/package.json +5 -5
|
@@ -4,8 +4,8 @@ const require_src_modules_auth_components_AuthProviders = require("./AuthProvide
|
|
|
4
4
|
const require_src_modules_auth_components_SignupFormRoute = require("./SignupFormRoute.js");
|
|
5
5
|
const require_src_modules_auth_components_WaitlistCard = require("./WaitlistCard.js");
|
|
6
6
|
const require_src_modules_auth_components_WaitlistCodeValidation = require("./WaitlistCodeValidation.js");
|
|
7
|
-
let _heroui_react = require("@heroui/react");
|
|
8
7
|
let react_jsx_runtime = require("react/jsx-runtime");
|
|
8
|
+
let _heroui_react = require("@heroui/react");
|
|
9
9
|
let react_i18next = require("react-i18next");
|
|
10
10
|
let react_router = require("react-router");
|
|
11
11
|
let nuqs = require("nuqs");
|
|
@@ -2,8 +2,8 @@ import { AuthProviders } from "./AuthProviders.mjs";
|
|
|
2
2
|
import { SignupForm } from "./SignupFormRoute.mjs";
|
|
3
3
|
import { WaitlistCard } from "./WaitlistCard.mjs";
|
|
4
4
|
import { WaitlistCodeValidation } from "./WaitlistCodeValidation.mjs";
|
|
5
|
-
import { Card, CardBody, CardHeader } from "@heroui/react";
|
|
6
5
|
import { jsx, jsxs } from "react/jsx-runtime";
|
|
6
|
+
import { Card, CardBody, CardHeader } from "@heroui/react";
|
|
7
7
|
import { useTranslation } from "react-i18next";
|
|
8
8
|
import { Link as Link$1 } from "react-router";
|
|
9
9
|
import { useQueryState } from "nuqs";
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
2
2
|
require("../../../../_virtual/_rolldown/runtime.js");
|
|
3
|
+
let react_jsx_runtime = require("react/jsx-runtime");
|
|
3
4
|
let react = require("react");
|
|
4
5
|
let _heroui_react = require("@heroui/react");
|
|
5
|
-
let react_jsx_runtime = require("react/jsx-runtime");
|
|
6
6
|
let react_i18next = require("react-i18next");
|
|
7
7
|
let sonner = require("sonner");
|
|
8
8
|
let _tanstack_react_query = require("@tanstack/react-query");
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
+
import { jsx, jsxs } from "react/jsx-runtime";
|
|
1
2
|
import { useState } from "react";
|
|
2
3
|
import { Alert, Button, Card, CardBody, CardHeader, Input } from "@heroui/react";
|
|
3
|
-
import { jsx, jsxs } from "react/jsx-runtime";
|
|
4
4
|
import { useTranslation } from "react-i18next";
|
|
5
5
|
import { toast } from "sonner";
|
|
6
6
|
import { useMutation } from "@tanstack/react-query";
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
2
2
|
require("../../../../_virtual/_rolldown/runtime.js");
|
|
3
|
-
let _heroui_react = require("@heroui/react");
|
|
4
3
|
let react_jsx_runtime = require("react/jsx-runtime");
|
|
4
|
+
let _heroui_react = require("@heroui/react");
|
|
5
5
|
let react_i18next = require("react-i18next");
|
|
6
6
|
let _tanstack_react_query = require("@tanstack/react-query");
|
|
7
7
|
//#region src/modules/auth/components/WaitlistCodeValidation.tsx
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { Alert } from "@heroui/react";
|
|
2
1
|
import { jsx } from "react/jsx-runtime";
|
|
2
|
+
import { Alert } from "@heroui/react";
|
|
3
3
|
import { useTranslation } from "react-i18next";
|
|
4
4
|
import { useQuery } from "@tanstack/react-query";
|
|
5
5
|
//#region src/modules/auth/components/WaitlistCodeValidation.tsx
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
2
2
|
require("../../../../_virtual/_rolldown/runtime.js");
|
|
3
|
-
let _heroui_react = require("@heroui/react");
|
|
4
3
|
let react_jsx_runtime = require("react/jsx-runtime");
|
|
4
|
+
let _heroui_react = require("@heroui/react");
|
|
5
5
|
let lucide_react = require("lucide-react");
|
|
6
|
-
let _m5kdev_frontend_modules_billing_hooks_useSubscription = require("@m5kdev/frontend/modules/billing/hooks/useSubscription");
|
|
7
6
|
let _tanstack_react_query = require("@tanstack/react-query");
|
|
7
|
+
let _m5kdev_frontend_modules_billing_hooks_useSubscription = require("@m5kdev/frontend/modules/billing/hooks/useSubscription");
|
|
8
8
|
//#region src/modules/billing/components/BillingInvoicePage.tsx
|
|
9
9
|
function BillingInvoicePage({ useTRPC, serverUrl }) {
|
|
10
10
|
const { data: invoices, isLoading } = (0, _tanstack_react_query.useQuery)(useTRPC().billing.listInvoices.queryOptions());
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import { Button, Card, CardBody, CardHeader, Chip, Link, Spinner, Table, TableBody, TableCell, TableColumn, TableHeader, TableRow } from "@heroui/react";
|
|
2
1
|
import { jsx, jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { Button, Card, CardBody, CardHeader, Chip, Link, Spinner, Table, TableBody, TableCell, TableColumn, TableHeader, TableRow } from "@heroui/react";
|
|
3
3
|
import { AlertCircle, CheckCircle2, ExternalLink } from "lucide-react";
|
|
4
|
-
import { useSubscription } from "@m5kdev/frontend/modules/billing/hooks/useSubscription";
|
|
5
4
|
import { useQuery } from "@tanstack/react-query";
|
|
5
|
+
import { useSubscription } from "@m5kdev/frontend/modules/billing/hooks/useSubscription";
|
|
6
6
|
//#region src/modules/billing/components/BillingInvoicePage.tsx
|
|
7
7
|
function BillingInvoicePage({ useTRPC, serverUrl }) {
|
|
8
8
|
const { data: invoices, isLoading } = useQuery(useTRPC().billing.listInvoices.queryOptions());
|
|
@@ -3,9 +3,9 @@ require("../../../../_virtual/_rolldown/runtime.js");
|
|
|
3
3
|
const require_src_lib_utils = require("../../../lib/utils.js");
|
|
4
4
|
const require_src_components_ui_card = require("../../../components/ui/card.js");
|
|
5
5
|
const require_src_components_ui_tabs = require("../../../components/ui/tabs.js");
|
|
6
|
+
let react_jsx_runtime = require("react/jsx-runtime");
|
|
6
7
|
let react = require("react");
|
|
7
8
|
let _heroui_react = require("@heroui/react");
|
|
8
|
-
let react_jsx_runtime = require("react/jsx-runtime");
|
|
9
9
|
let lucide_react = require("lucide-react");
|
|
10
10
|
let react_i18next = require("react-i18next");
|
|
11
11
|
let react_router = require("react-router");
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import { cn } from "../../../lib/utils.mjs";
|
|
2
2
|
import { Card as Card$1, CardContent, CardDescription, CardFooter, CardHeader as CardHeader$1, CardTitle } from "../../../components/ui/card.mjs";
|
|
3
3
|
import { Tabs, TabsList, TabsTrigger } from "../../../components/ui/tabs.mjs";
|
|
4
|
+
import { jsx, jsxs } from "react/jsx-runtime";
|
|
4
5
|
import { useState } from "react";
|
|
5
6
|
import { Button } from "@heroui/react";
|
|
6
|
-
import { jsx, jsxs } from "react/jsx-runtime";
|
|
7
7
|
import { Check, LogOut } from "lucide-react";
|
|
8
8
|
import { useTranslation } from "react-i18next";
|
|
9
9
|
import { Link as Link$1, useNavigate } from "react-router";
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
2
2
|
require("../../../../_virtual/_rolldown/runtime.js");
|
|
3
3
|
const require_src_components_ui_button = require("../../../components/ui/button.js");
|
|
4
|
-
let react = require("react");
|
|
5
4
|
let react_jsx_runtime = require("react/jsx-runtime");
|
|
5
|
+
let react = require("react");
|
|
6
6
|
let lucide_react = require("lucide-react");
|
|
7
7
|
let _dnd_kit_core = require("@dnd-kit/core");
|
|
8
8
|
let _dnd_kit_sortable = require("@dnd-kit/sortable");
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { Button } from "../../../components/ui/button.mjs";
|
|
2
|
-
import { useCallback, useState } from "react";
|
|
3
2
|
import { jsx, jsxs } from "react/jsx-runtime";
|
|
3
|
+
import { useCallback, useState } from "react";
|
|
4
4
|
import { EyeIcon, EyeOffIcon, GripVertical } from "lucide-react";
|
|
5
5
|
import { DndContext, KeyboardSensor, PointerSensor, useSensor, useSensors } from "@dnd-kit/core";
|
|
6
6
|
import { SortableContext, arrayMove, sortableKeyboardCoordinates, useSortable, verticalListSortingStrategy } from "@dnd-kit/sortable";
|
|
@@ -6,9 +6,9 @@ const require_src_modules_table_components_ColumnOrderAndVisibility = require(".
|
|
|
6
6
|
const require_src_modules_table_components_TableFiltering = require("./TableFiltering.js");
|
|
7
7
|
const require_src_modules_table_components_TableGroupBy = require("./TableGroupBy.js");
|
|
8
8
|
const require_src_modules_table_components_TablePagination = require("./TablePagination.js");
|
|
9
|
+
let react_jsx_runtime = require("react/jsx-runtime");
|
|
9
10
|
let react = require("react");
|
|
10
11
|
let _heroui_react = require("@heroui/react");
|
|
11
|
-
let react_jsx_runtime = require("react/jsx-runtime");
|
|
12
12
|
let lucide_react = require("lucide-react");
|
|
13
13
|
let _tanstack_react_table = require("@tanstack/react-table");
|
|
14
14
|
//#region src/modules/table/components/NuqsTable.tsx
|
|
@@ -4,9 +4,9 @@ import { ColumnOrderAndVisibility } from "./ColumnOrderAndVisibility.mjs";
|
|
|
4
4
|
import { TableFiltering } from "./TableFiltering.mjs";
|
|
5
5
|
import { TableGroupBy } from "./TableGroupBy.mjs";
|
|
6
6
|
import { TablePagination } from "./TablePagination.mjs";
|
|
7
|
+
import { Fragment, jsx, jsxs } from "react/jsx-runtime";
|
|
7
8
|
import { useEffect, useMemo, useRef, useState } from "react";
|
|
8
9
|
import { Checkbox, Input, Popover, PopoverContent, PopoverTrigger } from "@heroui/react";
|
|
9
|
-
import { Fragment as Fragment$1, jsx, jsxs } from "react/jsx-runtime";
|
|
10
10
|
import { ChevronDown, ChevronRight, ChevronUp, Search } from "lucide-react";
|
|
11
11
|
import { flexRender, getCoreRowModel, getExpandedRowModel, getGroupedRowModel, getPaginationRowModel, useReactTable } from "@tanstack/react-table";
|
|
12
12
|
//#region src/modules/table/components/NuqsTable.tsx
|
|
@@ -199,7 +199,7 @@ const NuqsTable = ({ data, total, columns, tableProps, showGlobalSearch = false,
|
|
|
199
199
|
const [isFiltersOpen, setIsFiltersOpen] = useState(false);
|
|
200
200
|
const [isColumnsOpen, setIsColumnsOpen] = useState(false);
|
|
201
201
|
const [isGroupByOpen, setIsGroupByOpen] = useState(false);
|
|
202
|
-
return /* @__PURE__ */ jsxs(Fragment
|
|
202
|
+
return /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
203
203
|
/* @__PURE__ */ jsxs("div", {
|
|
204
204
|
className: "flex w-full flex-wrap items-center justify-between gap-2",
|
|
205
205
|
children: [/* @__PURE__ */ jsx("div", {
|
|
@@ -297,7 +297,7 @@ const NuqsTable = ({ data, total, columns, tableProps, showGlobalSearch = false,
|
|
|
297
297
|
}
|
|
298
298
|
}) }), table.getHeaderGroups()[0].headers.map((header) => /* @__PURE__ */ jsxs(TableHead, {
|
|
299
299
|
onClick: header.column.getCanSort() ? header.column.getToggleSortingHandler() : void 0,
|
|
300
|
-
children: [flexRender(header.column.columnDef.header, header.getContext()), header.column.getCanSort() && /* @__PURE__ */ jsxs(Fragment
|
|
300
|
+
children: [flexRender(header.column.columnDef.header, header.getContext()), header.column.getCanSort() && /* @__PURE__ */ jsxs(Fragment, { children: [header.column.getIsSorted() === "asc" && /* @__PURE__ */ jsx(ChevronUp, { className: "h-4 w-4 inline ml-1" }), header.column.getIsSorted() === "desc" && /* @__PURE__ */ jsx(ChevronDown, { className: "h-4 w-4 inline ml-1" })] })]
|
|
301
301
|
}, header.id))] }) }), /* @__PURE__ */ jsx(TableBody$1, { children: table.getRowModel().rows.map((row) => {
|
|
302
302
|
if (row.getIsGrouped()) return /* @__PURE__ */ jsxs(TableRow$1, {
|
|
303
303
|
className: "bg-muted/40 font-medium cursor-pointer hover:bg-muted/60",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"NuqsTable.mjs","names":["Button","Table","TableHeader","TableRow","TableBody","TableCell"],"sources":["../../../../../src/modules/table/components/NuqsTable.tsx"],"sourcesContent":["import { Checkbox, Input, Popover, PopoverContent, PopoverTrigger } from \"@heroui/react\";\r\nimport type { QueryFilters } from \"@m5kdev/commons/modules/schemas/query.schema\";\r\nimport type { FilterMethods } from \"@m5kdev/commons/modules/table/filter.types\";\r\nimport type { TableParams } from \"@m5kdev/frontend/modules/table/hooks/useNuqsTable\";\r\nimport type { ColumnDef } from \"@tanstack/react-table\";\r\nimport {\r\n type ColumnOrderState,\r\n type ExpandedState,\r\n flexRender,\r\n getCoreRowModel,\r\n getExpandedRowModel,\r\n getGroupedRowModel,\r\n getPaginationRowModel,\r\n type Table as ReactTable,\r\n useReactTable,\r\n type VisibilityState,\r\n} from \"@tanstack/react-table\";\r\nimport { ChevronDown, ChevronRight, ChevronUp, Search } from \"lucide-react\";\r\nimport { useEffect, useMemo, useRef, useState } from \"react\";\r\nimport { Button } from \"../../../components/ui/button\";\r\nimport {\r\n Table,\r\n TableBody,\r\n TableCell,\r\n TableHead,\r\n TableHeader,\r\n TableRow,\r\n} from \"../../../components/ui/table\";\r\nimport { ColumnOrderAndVisibility } from \"./ColumnOrderAndVisibility\";\r\nimport { TableFiltering } from \"./TableFiltering\";\r\nimport { TableGroupBy } from \"./TableGroupBy\";\r\nimport { TablePagination } from \"./TablePagination\";\r\nimport type { ColumnDataType, ColumnItem } from \"./table.types\";\r\n\r\nfunction getStorageKey(columnIds: string[]): string {\r\n const sortedIds = [...columnIds].sort().join(\",\");\r\n return `table-column-layout-${sortedIds}`;\r\n}\r\n\r\nfunction loadLayoutFromStorage(\r\n columnIds: string[]\r\n): { order: string[]; visibility: Record<string, boolean> } | null {\r\n if (typeof window === \"undefined\") return null;\r\n try {\r\n const key = getStorageKey(columnIds);\r\n const stored = localStorage.getItem(key);\r\n if (!stored) return null;\r\n const parsed = JSON.parse(stored) as { order: string[]; visibility: Record<string, boolean> };\r\n return parsed;\r\n } catch {\r\n return null;\r\n }\r\n}\r\n\r\nfunction saveLayoutToStorage(\r\n columnIds: string[],\r\n order: string[],\r\n visibility: Record<string, boolean>\r\n): void {\r\n if (typeof window === \"undefined\") return;\r\n try {\r\n const key = getStorageKey(columnIds);\r\n localStorage.setItem(key, JSON.stringify({ order, visibility }));\r\n } catch {\r\n // Ignore storage errors\r\n }\r\n}\r\n\r\nexport type NuqsTableColumn<T> = ColumnDef<T> & {\r\n visible?: boolean;\r\n type?: ColumnDataType;\r\n options?: { label: string; value: string }[];\r\n endColumnId?: string;\r\n groupable?: boolean;\r\n};\r\n\r\ntype NuqsTableParams<T> = {\r\n data: T[];\r\n total?: number;\r\n columns: NuqsTableColumn<T>[];\r\n tableProps: TableParams;\r\n /** When true, shows URL-synced global search; enable only if the list API applies `q` server-side. */\r\n showGlobalSearch?: boolean;\r\n singleFilter?: boolean;\r\n filterMethods?: Partial<FilterMethods>;\r\n};\r\n\r\nfunction applyOrder(prev: ColumnItem[], nextOrder: string[]): ColumnItem[] {\r\n const byId = new Map(prev.map((i) => [i.id, i]));\r\n const ordered = nextOrder.map((id) => byId.get(id)).filter(Boolean) as ColumnItem[];\r\n // append any newly added columns (if any appear later)\r\n for (const item of prev) if (!nextOrder.includes(item.id)) ordered.push(item);\r\n return ordered;\r\n}\r\n\r\nfunction applyVisibility(prev: ColumnItem[], visibility: VisibilityState): ColumnItem[] {\r\n return prev.map((column) => ({\r\n ...column,\r\n visibility: visibility[String(column.id)] ?? column.visibility,\r\n }));\r\n}\r\n\r\nexport const NuqsTable = <T,>({\r\n data,\r\n total,\r\n columns,\r\n tableProps,\r\n showGlobalSearch = false,\r\n singleFilter = false,\r\n filterMethods,\r\n}: NuqsTableParams<T>) => {\r\n const columnIds = useMemo(() => columns.map((col) => String(col.id)), [columns]);\r\n // const columnsWithId = useMemo(() => {\r\n // const idColumn: NuqsTableColumn<T> = {\r\n // id: \"__row_id\",\r\n // accessorKey: \"id\",\r\n // header: \"\",\r\n // enableSorting: false,\r\n // enableHiding: false,\r\n // visible: false,\r\n // };\r\n // return [idColumn, ...columns];\r\n // }, [columns]);\r\n\r\n const initialLayout = useMemo(() => {\r\n const defaultLayout = columns.map((column) => ({\r\n id: String(column.id),\r\n label: column.header as string,\r\n visibility: column.visible !== undefined ? column.visible : true,\r\n options: column.options ?? [],\r\n type: column.type ?? undefined,\r\n }));\r\n\r\n const saved = loadLayoutFromStorage(columnIds);\r\n if (!saved) return defaultLayout;\r\n\r\n // Merge saved layout with default layout\r\n const savedById = new Map<string, { order: number; visibility: boolean }>();\r\n saved.order.forEach((id, index) => {\r\n savedById.set(id, { order: index, visibility: saved.visibility[id] ?? true });\r\n });\r\n\r\n const merged: ColumnItem[] = [];\r\n const processedIds = new Set<string>();\r\n\r\n // Add columns in saved order\r\n saved.order.forEach((id) => {\r\n const defaultCol = defaultLayout.find((col) => col.id === id);\r\n if (defaultCol) {\r\n merged.push({\r\n ...defaultCol,\r\n visibility: saved.visibility[id] ?? defaultCol.visibility,\r\n });\r\n processedIds.add(id);\r\n }\r\n });\r\n\r\n // Add any new columns that weren't in saved layout\r\n defaultLayout.forEach((col) => {\r\n if (!processedIds.has(col.id)) {\r\n merged.push(col);\r\n }\r\n });\r\n\r\n return merged;\r\n }, [columns, columnIds]);\r\n\r\n const [layout, setLayout] = useState<ColumnItem[]>(initialLayout);\r\n\r\n // Sync layout when columns change\r\n useEffect(() => {\r\n setLayout(initialLayout);\r\n }, [initialLayout]);\r\n\r\n // Save to localStorage whenever layout changes\r\n useEffect(() => {\r\n const order = layout.map((col) => col.id);\r\n const visibility = Object.fromEntries(layout.map((col) => [col.id, col.visibility]));\r\n saveLayoutToStorage(columnIds, order, visibility);\r\n }, [layout, columnIds]);\r\n\r\n const columnOrder = useMemo(() => layout.map((column) => column.id), [layout]);\r\n const columnVisibility = useMemo(\r\n () => Object.fromEntries(layout.map((column) => [column.id, column.visibility])),\r\n [layout]\r\n );\r\n\r\n const {\r\n limit = 10,\r\n page = 1,\r\n sorting,\r\n setSorting,\r\n setPagination,\r\n pagination,\r\n rowSelection,\r\n setRowSelection,\r\n setFilters,\r\n filters,\r\n grouping,\r\n setGrouping,\r\n q,\r\n setQ,\r\n } = tableProps;\r\n\r\n const skipFirstGlobalSearchPageReset = useRef(true);\r\n // biome-ignore lint/correctness/useExhaustiveDependencies: reset page when `q` changes (incl. back/forward)\r\n useEffect(() => {\r\n if (!showGlobalSearch) return;\r\n if (skipFirstGlobalSearchPageReset.current) {\r\n skipFirstGlobalSearchPageReset.current = false;\r\n return;\r\n }\r\n setPagination?.({ pageIndex: 0, pageSize: limit });\r\n }, [showGlobalSearch, q, limit, setPagination]);\r\n\r\n const isGrouped = grouping.length > 0;\r\n const [expanded, setExpanded] = useState<ExpandedState>({});\r\n\r\n // Redirect back if we're on an empty page (past the last page)\r\n useEffect(() => {\r\n if (!isGrouped && data.length === 0 && page > 1 && total !== undefined) {\r\n setPagination?.({ pageIndex: page - 2, pageSize: limit });\r\n }\r\n }, [data.length, page, limit, total, setPagination, isGrouped]);\r\n\r\n // When grouped, TanStack handles pagination client-side; otherwise use server total\r\n const serverPageCount =\r\n total !== undefined\r\n ? Math.ceil(total / limit) || 1\r\n : data.length === limit\r\n ? page + 1\r\n : Math.max(page, Math.ceil(data.length / limit));\r\n\r\n const table = useReactTable({\r\n data,\r\n columns,\r\n getRowId: (row) => String((row as { id: string | number }).id),\r\n manualSorting: true,\r\n manualPagination: !isGrouped,\r\n state: { pagination, sorting, rowSelection, columnOrder, columnVisibility, grouping, expanded },\r\n ...(isGrouped ? {} : { pageCount: serverPageCount }),\r\n manualFiltering: true,\r\n enableGrouping: true,\r\n groupedColumnMode: false,\r\n autoResetExpanded: false,\r\n onSortingChange: setSorting,\r\n onPaginationChange: setPagination,\r\n onRowSelectionChange: setRowSelection,\r\n onGroupingChange: setGrouping,\r\n onExpandedChange: setExpanded,\r\n getCoreRowModel: getCoreRowModel(),\r\n getGroupedRowModel: getGroupedRowModel(),\r\n getExpandedRowModel: getExpandedRowModel(),\r\n getPaginationRowModel: getPaginationRowModel(),\r\n onColumnOrderChange: (updater) => {\r\n setLayout((prev) =>\r\n applyOrder(prev, typeof updater === \"function\" ? updater(prev.map((i) => i.id)) : updater)\r\n );\r\n },\r\n onColumnVisibilityChange: (updater) => {\r\n setLayout((prev) =>\r\n applyVisibility(\r\n prev,\r\n typeof updater === \"function\"\r\n ? updater(Object.fromEntries(prev.map((i) => [i.id, i.visibility])))\r\n : updater\r\n )\r\n );\r\n },\r\n }) as ReactTable<T>;\r\n\r\n const onChangeOrder = (order: ColumnOrderState) => {\r\n setLayout((prev) => applyOrder(prev, order));\r\n };\r\n const onChangeVisibility = (visibility: VisibilityState) => {\r\n setLayout((prev) => applyVisibility(prev, visibility));\r\n };\r\n\r\n const onFiltersChange = (filters: QueryFilters) => {\r\n setFilters?.(filters);\r\n };\r\n\r\n const filterableColumns = useMemo(() => {\r\n const baseColumns = columns\r\n .filter((column) => Boolean(column.type))\r\n .map((column) => ({\r\n id: String(column.id),\r\n label: String(column.header),\r\n type: column.type,\r\n options: column.options ?? [],\r\n endColumnId: column.endColumnId,\r\n periodStartColumnId: null,\r\n periodEndColumnId: null,\r\n }));\r\n\r\n // Add Period pseudo-columns for date columns with endColumnId\r\n const periodColumns = columns\r\n .filter((column) => column.type === \"date\" && column.endColumnId)\r\n .map((column) => ({\r\n id: `${String(column.id)}__period`,\r\n label: \"Period\",\r\n type: \"date\" as ColumnDataType,\r\n options: [],\r\n endColumnId: null,\r\n periodStartColumnId: String(column.id),\r\n periodEndColumnId: column.endColumnId,\r\n }));\r\n\r\n return [...baseColumns, ...periodColumns];\r\n }, [columns]);\r\n\r\n const groupableColumns = useMemo(\r\n () =>\r\n columns\r\n .filter((col) => col.groupable)\r\n .map((col) => ({ id: String(col.id), label: String(col.header) })),\r\n [columns]\r\n );\r\n\r\n const hasGrouping = grouping.length > 0;\r\n\r\n const [isFiltersOpen, setIsFiltersOpen] = useState(false);\r\n const [isColumnsOpen, setIsColumnsOpen] = useState(false);\r\n const [isGroupByOpen, setIsGroupByOpen] = useState(false);\r\n\r\n return (\r\n <>\r\n <div className=\"flex w-full flex-wrap items-center justify-between gap-2\">\r\n <div className=\"flex min-w-0 flex-1 items-center\">\r\n {showGlobalSearch ? (\r\n <Input\r\n size=\"sm\"\r\n className=\"max-w-xs\"\r\n placeholder=\"Search…\"\r\n value={q ?? \"\"}\r\n onValueChange={(v) => {\r\n setQ?.(v === \"\" ? null : v);\r\n }}\r\n startContent={<Search className=\"h-4 w-4 shrink-0 text-default-400\" aria-hidden />}\r\n aria-label=\"Search table\"\r\n />\r\n ) : null}\r\n </div>\r\n <div className=\"flex shrink-0 items-center gap-2\">\r\n <Popover\r\n placement=\"bottom\"\r\n isOpen={isFiltersOpen}\r\n onOpenChange={setIsFiltersOpen}\r\n portalContainer={document.body}\r\n >\r\n <PopoverTrigger>\r\n <Button variant=\"outline\" size=\"sm\">\r\n <div className=\"flex items-center gap-2\">\r\n Filters\r\n <ChevronDown className=\"h-4 w-4\" />\r\n </div>\r\n </Button>\r\n </PopoverTrigger>\r\n <PopoverContent>\r\n <TableFiltering\r\n columns={filterableColumns}\r\n onFiltersChange={onFiltersChange}\r\n filters={filters ?? []}\r\n onClose={() => setIsFiltersOpen(false)}\r\n singleFilter={singleFilter}\r\n filterMethods={filterMethods}\r\n />\r\n </PopoverContent>\r\n </Popover>\r\n {groupableColumns.length > 0 && (\r\n <Popover\r\n placement=\"bottom\"\r\n isOpen={isGroupByOpen}\r\n onOpenChange={setIsGroupByOpen}\r\n portalContainer={document.body}\r\n >\r\n <PopoverTrigger>\r\n <Button variant={hasGrouping ? \"secondary\" : \"outline\"} size=\"sm\">\r\n <div className=\"flex items-center gap-2\">\r\n {hasGrouping\r\n ? `Grouped by: ${grouping.map((id) => groupableColumns.find((c) => c.id === id)?.label ?? id).join(\" → \")}`\r\n : \"Group by\"}\r\n <ChevronDown className=\"h-4 w-4\" />\r\n </div>\r\n </Button>\r\n </PopoverTrigger>\r\n <PopoverContent>\r\n <TableGroupBy\r\n columns={groupableColumns}\r\n activeGrouping={grouping}\r\n onGroupingChange={(columnIds) => {\r\n setGrouping(columnIds);\r\n setExpanded({});\r\n setPagination?.({ pageIndex: 0, pageSize: limit });\r\n }}\r\n onClose={() => setIsGroupByOpen(false)}\r\n />\r\n </PopoverContent>\r\n </Popover>\r\n )}\r\n <Popover\r\n placement=\"bottom\"\r\n isOpen={isColumnsOpen}\r\n onOpenChange={setIsColumnsOpen}\r\n portalContainer={document.body}\r\n >\r\n <PopoverTrigger>\r\n <Button variant=\"outline\" size=\"sm\">\r\n <div className=\"flex items-center gap-2\">\r\n Columns\r\n <ChevronDown className=\"h-4 w-4\" />\r\n </div>\r\n </Button>\r\n </PopoverTrigger>\r\n <PopoverContent>\r\n <ColumnOrderAndVisibility\r\n layout={layout}\r\n onChangeOrder={onChangeOrder}\r\n onChangeVisibility={onChangeVisibility}\r\n onClose={() => setIsColumnsOpen(false)}\r\n />\r\n </PopoverContent>\r\n </Popover>\r\n </div>\r\n </div>\r\n <Table>\r\n <TableHeader>\r\n <TableRow>\r\n <TableHead>\r\n <Checkbox\r\n isSelected={table.getIsAllRowsSelected()}\r\n onValueChange={(checked) => {\r\n table.toggleAllRowsSelected(checked);\r\n }}\r\n />\r\n </TableHead>\r\n {table.getHeaderGroups()[0].headers.map((header) => (\r\n <TableHead\r\n onClick={\r\n header.column.getCanSort() ? header.column.getToggleSortingHandler() : undefined\r\n }\r\n key={header.id}\r\n >\r\n {flexRender(header.column.columnDef.header, header.getContext())}\r\n {header.column.getCanSort() && (\r\n <>\r\n {header.column.getIsSorted() === \"asc\" && (\r\n <ChevronUp className=\"h-4 w-4 inline ml-1\" />\r\n )}\r\n {header.column.getIsSorted() === \"desc\" && (\r\n <ChevronDown className=\"h-4 w-4 inline ml-1\" />\r\n )}\r\n </>\r\n )}\r\n </TableHead>\r\n ))}\r\n </TableRow>\r\n </TableHeader>\r\n <TableBody>\r\n {table.getRowModel().rows.map((row) => {\r\n if (row.getIsGrouped()) {\r\n return (\r\n <TableRow\r\n key={row.id}\r\n className=\"bg-muted/40 font-medium cursor-pointer hover:bg-muted/60\"\r\n onClick={() => row.toggleExpanded()}\r\n >\r\n <TableCell />\r\n {row.getVisibleCells().map((cell) => {\r\n if (cell.getIsGrouped()) {\r\n return (\r\n <TableCell key={cell.id}>\r\n <span className=\"flex items-center gap-1.5\">\r\n {row.getIsExpanded() ? (\r\n <ChevronDown className=\"h-4 w-4 shrink-0\" />\r\n ) : (\r\n <ChevronRight className=\"h-4 w-4 shrink-0\" />\r\n )}\r\n {flexRender(cell.column.columnDef.cell, cell.getContext())}\r\n <span className=\"text-muted-foreground font-normal ml-1\">\r\n ({row.subRows.length})\r\n </span>\r\n </span>\r\n </TableCell>\r\n );\r\n }\r\n if (cell.getIsAggregated()) {\r\n return (\r\n <TableCell key={cell.id}>\r\n {flexRender(\r\n cell.column.columnDef.aggregatedCell ?? cell.column.columnDef.cell,\r\n cell.getContext()\r\n )}\r\n </TableCell>\r\n );\r\n }\r\n return <TableCell key={cell.id} />;\r\n })}\r\n </TableRow>\r\n );\r\n }\r\n\r\n return (\r\n <TableRow key={row.id}>\r\n <TableCell>\r\n <Checkbox\r\n isSelected={row.getIsSelected()}\r\n onValueChange={(checked) => {\r\n row.toggleSelected(checked);\r\n }}\r\n />\r\n </TableCell>\r\n {row.getVisibleCells().map((cell) => (\r\n <TableCell key={cell.id}>\r\n {flexRender(cell.column.columnDef.cell, cell.getContext())}\r\n </TableCell>\r\n ))}\r\n </TableRow>\r\n );\r\n })}\r\n </TableBody>\r\n </Table>\r\n <TablePagination\r\n pageCount={\r\n isGrouped\r\n ? Math.ceil(table.getPrePaginationRowModel().rows.length / limit) || 1\r\n : serverPageCount\r\n }\r\n page={isGrouped ? table.getState().pagination.pageIndex + 1 : page}\r\n limit={limit}\r\n setPagination={setPagination}\r\n />\r\n </>\r\n );\r\n};\r\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"NuqsTable.mjs","names":["Button","Table","TableHeader","TableRow","TableBody","TableCell"],"sources":["../../../../../src/modules/table/components/NuqsTable.tsx"],"sourcesContent":["import { Checkbox, Input, Popover, PopoverContent, PopoverTrigger } from \"@heroui/react\";\r\nimport type { QueryFilters } from \"@m5kdev/commons/modules/schemas/query.schema\";\r\nimport type { FilterMethods } from \"@m5kdev/commons/modules/table/filter.types\";\r\nimport type { TableParams } from \"@m5kdev/frontend/modules/table/hooks/useNuqsTable\";\r\nimport type { ColumnDef } from \"@tanstack/react-table\";\r\nimport {\r\n type ColumnOrderState,\r\n type ExpandedState,\r\n flexRender,\r\n getCoreRowModel,\r\n getExpandedRowModel,\r\n getGroupedRowModel,\r\n getPaginationRowModel,\r\n type Table as ReactTable,\r\n useReactTable,\r\n type VisibilityState,\r\n} from \"@tanstack/react-table\";\r\nimport { ChevronDown, ChevronRight, ChevronUp, Search } from \"lucide-react\";\r\nimport { useEffect, useMemo, useRef, useState } from \"react\";\r\nimport { Button } from \"../../../components/ui/button\";\r\nimport {\r\n Table,\r\n TableBody,\r\n TableCell,\r\n TableHead,\r\n TableHeader,\r\n TableRow,\r\n} from \"../../../components/ui/table\";\r\nimport { ColumnOrderAndVisibility } from \"./ColumnOrderAndVisibility\";\r\nimport { TableFiltering } from \"./TableFiltering\";\r\nimport { TableGroupBy } from \"./TableGroupBy\";\r\nimport { TablePagination } from \"./TablePagination\";\r\nimport type { ColumnDataType, ColumnItem } from \"./table.types\";\r\n\r\nfunction getStorageKey(columnIds: string[]): string {\r\n const sortedIds = [...columnIds].sort().join(\",\");\r\n return `table-column-layout-${sortedIds}`;\r\n}\r\n\r\nfunction loadLayoutFromStorage(\r\n columnIds: string[]\r\n): { order: string[]; visibility: Record<string, boolean> } | null {\r\n if (typeof window === \"undefined\") return null;\r\n try {\r\n const key = getStorageKey(columnIds);\r\n const stored = localStorage.getItem(key);\r\n if (!stored) return null;\r\n const parsed = JSON.parse(stored) as { order: string[]; visibility: Record<string, boolean> };\r\n return parsed;\r\n } catch {\r\n return null;\r\n }\r\n}\r\n\r\nfunction saveLayoutToStorage(\r\n columnIds: string[],\r\n order: string[],\r\n visibility: Record<string, boolean>\r\n): void {\r\n if (typeof window === \"undefined\") return;\r\n try {\r\n const key = getStorageKey(columnIds);\r\n localStorage.setItem(key, JSON.stringify({ order, visibility }));\r\n } catch {\r\n // Ignore storage errors\r\n }\r\n}\r\n\r\nexport type NuqsTableColumn<T> = ColumnDef<T> & {\r\n visible?: boolean;\r\n type?: ColumnDataType;\r\n options?: { label: string; value: string }[];\r\n endColumnId?: string;\r\n groupable?: boolean;\r\n};\r\n\r\ntype NuqsTableParams<T> = {\r\n data: T[];\r\n total?: number;\r\n columns: NuqsTableColumn<T>[];\r\n tableProps: TableParams;\r\n /** When true, shows URL-synced global search; enable only if the list API applies `q` server-side. */\r\n showGlobalSearch?: boolean;\r\n singleFilter?: boolean;\r\n filterMethods?: Partial<FilterMethods>;\r\n};\r\n\r\nfunction applyOrder(prev: ColumnItem[], nextOrder: string[]): ColumnItem[] {\r\n const byId = new Map(prev.map((i) => [i.id, i]));\r\n const ordered = nextOrder.map((id) => byId.get(id)).filter(Boolean) as ColumnItem[];\r\n // append any newly added columns (if any appear later)\r\n for (const item of prev) if (!nextOrder.includes(item.id)) ordered.push(item);\r\n return ordered;\r\n}\r\n\r\nfunction applyVisibility(prev: ColumnItem[], visibility: VisibilityState): ColumnItem[] {\r\n return prev.map((column) => ({\r\n ...column,\r\n visibility: visibility[String(column.id)] ?? column.visibility,\r\n }));\r\n}\r\n\r\nexport const NuqsTable = <T,>({\r\n data,\r\n total,\r\n columns,\r\n tableProps,\r\n showGlobalSearch = false,\r\n singleFilter = false,\r\n filterMethods,\r\n}: NuqsTableParams<T>) => {\r\n const columnIds = useMemo(() => columns.map((col) => String(col.id)), [columns]);\r\n // const columnsWithId = useMemo(() => {\r\n // const idColumn: NuqsTableColumn<T> = {\r\n // id: \"__row_id\",\r\n // accessorKey: \"id\",\r\n // header: \"\",\r\n // enableSorting: false,\r\n // enableHiding: false,\r\n // visible: false,\r\n // };\r\n // return [idColumn, ...columns];\r\n // }, [columns]);\r\n\r\n const initialLayout = useMemo(() => {\r\n const defaultLayout = columns.map((column) => ({\r\n id: String(column.id),\r\n label: column.header as string,\r\n visibility: column.visible !== undefined ? column.visible : true,\r\n options: column.options ?? [],\r\n type: column.type ?? undefined,\r\n }));\r\n\r\n const saved = loadLayoutFromStorage(columnIds);\r\n if (!saved) return defaultLayout;\r\n\r\n // Merge saved layout with default layout\r\n const savedById = new Map<string, { order: number; visibility: boolean }>();\r\n saved.order.forEach((id, index) => {\r\n savedById.set(id, { order: index, visibility: saved.visibility[id] ?? true });\r\n });\r\n\r\n const merged: ColumnItem[] = [];\r\n const processedIds = new Set<string>();\r\n\r\n // Add columns in saved order\r\n saved.order.forEach((id) => {\r\n const defaultCol = defaultLayout.find((col) => col.id === id);\r\n if (defaultCol) {\r\n merged.push({\r\n ...defaultCol,\r\n visibility: saved.visibility[id] ?? defaultCol.visibility,\r\n });\r\n processedIds.add(id);\r\n }\r\n });\r\n\r\n // Add any new columns that weren't in saved layout\r\n defaultLayout.forEach((col) => {\r\n if (!processedIds.has(col.id)) {\r\n merged.push(col);\r\n }\r\n });\r\n\r\n return merged;\r\n }, [columns, columnIds]);\r\n\r\n const [layout, setLayout] = useState<ColumnItem[]>(initialLayout);\r\n\r\n // Sync layout when columns change\r\n useEffect(() => {\r\n setLayout(initialLayout);\r\n }, [initialLayout]);\r\n\r\n // Save to localStorage whenever layout changes\r\n useEffect(() => {\r\n const order = layout.map((col) => col.id);\r\n const visibility = Object.fromEntries(layout.map((col) => [col.id, col.visibility]));\r\n saveLayoutToStorage(columnIds, order, visibility);\r\n }, [layout, columnIds]);\r\n\r\n const columnOrder = useMemo(() => layout.map((column) => column.id), [layout]);\r\n const columnVisibility = useMemo(\r\n () => Object.fromEntries(layout.map((column) => [column.id, column.visibility])),\r\n [layout]\r\n );\r\n\r\n const {\r\n limit = 10,\r\n page = 1,\r\n sorting,\r\n setSorting,\r\n setPagination,\r\n pagination,\r\n rowSelection,\r\n setRowSelection,\r\n setFilters,\r\n filters,\r\n grouping,\r\n setGrouping,\r\n q,\r\n setQ,\r\n } = tableProps;\r\n\r\n const skipFirstGlobalSearchPageReset = useRef(true);\r\n // biome-ignore lint/correctness/useExhaustiveDependencies: reset page when `q` changes (incl. back/forward)\r\n useEffect(() => {\r\n if (!showGlobalSearch) return;\r\n if (skipFirstGlobalSearchPageReset.current) {\r\n skipFirstGlobalSearchPageReset.current = false;\r\n return;\r\n }\r\n setPagination?.({ pageIndex: 0, pageSize: limit });\r\n }, [showGlobalSearch, q, limit, setPagination]);\r\n\r\n const isGrouped = grouping.length > 0;\r\n const [expanded, setExpanded] = useState<ExpandedState>({});\r\n\r\n // Redirect back if we're on an empty page (past the last page)\r\n useEffect(() => {\r\n if (!isGrouped && data.length === 0 && page > 1 && total !== undefined) {\r\n setPagination?.({ pageIndex: page - 2, pageSize: limit });\r\n }\r\n }, [data.length, page, limit, total, setPagination, isGrouped]);\r\n\r\n // When grouped, TanStack handles pagination client-side; otherwise use server total\r\n const serverPageCount =\r\n total !== undefined\r\n ? Math.ceil(total / limit) || 1\r\n : data.length === limit\r\n ? page + 1\r\n : Math.max(page, Math.ceil(data.length / limit));\r\n\r\n const table = useReactTable({\r\n data,\r\n columns,\r\n getRowId: (row) => String((row as { id: string | number }).id),\r\n manualSorting: true,\r\n manualPagination: !isGrouped,\r\n state: { pagination, sorting, rowSelection, columnOrder, columnVisibility, grouping, expanded },\r\n ...(isGrouped ? {} : { pageCount: serverPageCount }),\r\n manualFiltering: true,\r\n enableGrouping: true,\r\n groupedColumnMode: false,\r\n autoResetExpanded: false,\r\n onSortingChange: setSorting,\r\n onPaginationChange: setPagination,\r\n onRowSelectionChange: setRowSelection,\r\n onGroupingChange: setGrouping,\r\n onExpandedChange: setExpanded,\r\n getCoreRowModel: getCoreRowModel(),\r\n getGroupedRowModel: getGroupedRowModel(),\r\n getExpandedRowModel: getExpandedRowModel(),\r\n getPaginationRowModel: getPaginationRowModel(),\r\n onColumnOrderChange: (updater) => {\r\n setLayout((prev) =>\r\n applyOrder(prev, typeof updater === \"function\" ? updater(prev.map((i) => i.id)) : updater)\r\n );\r\n },\r\n onColumnVisibilityChange: (updater) => {\r\n setLayout((prev) =>\r\n applyVisibility(\r\n prev,\r\n typeof updater === \"function\"\r\n ? updater(Object.fromEntries(prev.map((i) => [i.id, i.visibility])))\r\n : updater\r\n )\r\n );\r\n },\r\n }) as ReactTable<T>;\r\n\r\n const onChangeOrder = (order: ColumnOrderState) => {\r\n setLayout((prev) => applyOrder(prev, order));\r\n };\r\n const onChangeVisibility = (visibility: VisibilityState) => {\r\n setLayout((prev) => applyVisibility(prev, visibility));\r\n };\r\n\r\n const onFiltersChange = (filters: QueryFilters) => {\r\n setFilters?.(filters);\r\n };\r\n\r\n const filterableColumns = useMemo(() => {\r\n const baseColumns = columns\r\n .filter((column) => Boolean(column.type))\r\n .map((column) => ({\r\n id: String(column.id),\r\n label: String(column.header),\r\n type: column.type,\r\n options: column.options ?? [],\r\n endColumnId: column.endColumnId,\r\n periodStartColumnId: null,\r\n periodEndColumnId: null,\r\n }));\r\n\r\n // Add Period pseudo-columns for date columns with endColumnId\r\n const periodColumns = columns\r\n .filter((column) => column.type === \"date\" && column.endColumnId)\r\n .map((column) => ({\r\n id: `${String(column.id)}__period`,\r\n label: \"Period\",\r\n type: \"date\" as ColumnDataType,\r\n options: [],\r\n endColumnId: null,\r\n periodStartColumnId: String(column.id),\r\n periodEndColumnId: column.endColumnId,\r\n }));\r\n\r\n return [...baseColumns, ...periodColumns];\r\n }, [columns]);\r\n\r\n const groupableColumns = useMemo(\r\n () =>\r\n columns\r\n .filter((col) => col.groupable)\r\n .map((col) => ({ id: String(col.id), label: String(col.header) })),\r\n [columns]\r\n );\r\n\r\n const hasGrouping = grouping.length > 0;\r\n\r\n const [isFiltersOpen, setIsFiltersOpen] = useState(false);\r\n const [isColumnsOpen, setIsColumnsOpen] = useState(false);\r\n const [isGroupByOpen, setIsGroupByOpen] = useState(false);\r\n\r\n return (\r\n <>\r\n <div className=\"flex w-full flex-wrap items-center justify-between gap-2\">\r\n <div className=\"flex min-w-0 flex-1 items-center\">\r\n {showGlobalSearch ? (\r\n <Input\r\n size=\"sm\"\r\n className=\"max-w-xs\"\r\n placeholder=\"Search…\"\r\n value={q ?? \"\"}\r\n onValueChange={(v) => {\r\n setQ?.(v === \"\" ? null : v);\r\n }}\r\n startContent={<Search className=\"h-4 w-4 shrink-0 text-default-400\" aria-hidden />}\r\n aria-label=\"Search table\"\r\n />\r\n ) : null}\r\n </div>\r\n <div className=\"flex shrink-0 items-center gap-2\">\r\n <Popover\r\n placement=\"bottom\"\r\n isOpen={isFiltersOpen}\r\n onOpenChange={setIsFiltersOpen}\r\n portalContainer={document.body}\r\n >\r\n <PopoverTrigger>\r\n <Button variant=\"outline\" size=\"sm\">\r\n <div className=\"flex items-center gap-2\">\r\n Filters\r\n <ChevronDown className=\"h-4 w-4\" />\r\n </div>\r\n </Button>\r\n </PopoverTrigger>\r\n <PopoverContent>\r\n <TableFiltering\r\n columns={filterableColumns}\r\n onFiltersChange={onFiltersChange}\r\n filters={filters ?? []}\r\n onClose={() => setIsFiltersOpen(false)}\r\n singleFilter={singleFilter}\r\n filterMethods={filterMethods}\r\n />\r\n </PopoverContent>\r\n </Popover>\r\n {groupableColumns.length > 0 && (\r\n <Popover\r\n placement=\"bottom\"\r\n isOpen={isGroupByOpen}\r\n onOpenChange={setIsGroupByOpen}\r\n portalContainer={document.body}\r\n >\r\n <PopoverTrigger>\r\n <Button variant={hasGrouping ? \"secondary\" : \"outline\"} size=\"sm\">\r\n <div className=\"flex items-center gap-2\">\r\n {hasGrouping\r\n ? `Grouped by: ${grouping.map((id) => groupableColumns.find((c) => c.id === id)?.label ?? id).join(\" → \")}`\r\n : \"Group by\"}\r\n <ChevronDown className=\"h-4 w-4\" />\r\n </div>\r\n </Button>\r\n </PopoverTrigger>\r\n <PopoverContent>\r\n <TableGroupBy\r\n columns={groupableColumns}\r\n activeGrouping={grouping}\r\n onGroupingChange={(columnIds) => {\r\n setGrouping(columnIds);\r\n setExpanded({});\r\n setPagination?.({ pageIndex: 0, pageSize: limit });\r\n }}\r\n onClose={() => setIsGroupByOpen(false)}\r\n />\r\n </PopoverContent>\r\n </Popover>\r\n )}\r\n <Popover\r\n placement=\"bottom\"\r\n isOpen={isColumnsOpen}\r\n onOpenChange={setIsColumnsOpen}\r\n portalContainer={document.body}\r\n >\r\n <PopoverTrigger>\r\n <Button variant=\"outline\" size=\"sm\">\r\n <div className=\"flex items-center gap-2\">\r\n Columns\r\n <ChevronDown className=\"h-4 w-4\" />\r\n </div>\r\n </Button>\r\n </PopoverTrigger>\r\n <PopoverContent>\r\n <ColumnOrderAndVisibility\r\n layout={layout}\r\n onChangeOrder={onChangeOrder}\r\n onChangeVisibility={onChangeVisibility}\r\n onClose={() => setIsColumnsOpen(false)}\r\n />\r\n </PopoverContent>\r\n </Popover>\r\n </div>\r\n </div>\r\n <Table>\r\n <TableHeader>\r\n <TableRow>\r\n <TableHead>\r\n <Checkbox\r\n isSelected={table.getIsAllRowsSelected()}\r\n onValueChange={(checked) => {\r\n table.toggleAllRowsSelected(checked);\r\n }}\r\n />\r\n </TableHead>\r\n {table.getHeaderGroups()[0].headers.map((header) => (\r\n <TableHead\r\n onClick={\r\n header.column.getCanSort() ? header.column.getToggleSortingHandler() : undefined\r\n }\r\n key={header.id}\r\n >\r\n {flexRender(header.column.columnDef.header, header.getContext())}\r\n {header.column.getCanSort() && (\r\n <>\r\n {header.column.getIsSorted() === \"asc\" && (\r\n <ChevronUp className=\"h-4 w-4 inline ml-1\" />\r\n )}\r\n {header.column.getIsSorted() === \"desc\" && (\r\n <ChevronDown className=\"h-4 w-4 inline ml-1\" />\r\n )}\r\n </>\r\n )}\r\n </TableHead>\r\n ))}\r\n </TableRow>\r\n </TableHeader>\r\n <TableBody>\r\n {table.getRowModel().rows.map((row) => {\r\n if (row.getIsGrouped()) {\r\n return (\r\n <TableRow\r\n key={row.id}\r\n className=\"bg-muted/40 font-medium cursor-pointer hover:bg-muted/60\"\r\n onClick={() => row.toggleExpanded()}\r\n >\r\n <TableCell />\r\n {row.getVisibleCells().map((cell) => {\r\n if (cell.getIsGrouped()) {\r\n return (\r\n <TableCell key={cell.id}>\r\n <span className=\"flex items-center gap-1.5\">\r\n {row.getIsExpanded() ? (\r\n <ChevronDown className=\"h-4 w-4 shrink-0\" />\r\n ) : (\r\n <ChevronRight className=\"h-4 w-4 shrink-0\" />\r\n )}\r\n {flexRender(cell.column.columnDef.cell, cell.getContext())}\r\n <span className=\"text-muted-foreground font-normal ml-1\">\r\n ({row.subRows.length})\r\n </span>\r\n </span>\r\n </TableCell>\r\n );\r\n }\r\n if (cell.getIsAggregated()) {\r\n return (\r\n <TableCell key={cell.id}>\r\n {flexRender(\r\n cell.column.columnDef.aggregatedCell ?? cell.column.columnDef.cell,\r\n cell.getContext()\r\n )}\r\n </TableCell>\r\n );\r\n }\r\n return <TableCell key={cell.id} />;\r\n })}\r\n </TableRow>\r\n );\r\n }\r\n\r\n return (\r\n <TableRow key={row.id}>\r\n <TableCell>\r\n <Checkbox\r\n isSelected={row.getIsSelected()}\r\n onValueChange={(checked) => {\r\n row.toggleSelected(checked);\r\n }}\r\n />\r\n </TableCell>\r\n {row.getVisibleCells().map((cell) => (\r\n <TableCell key={cell.id}>\r\n {flexRender(cell.column.columnDef.cell, cell.getContext())}\r\n </TableCell>\r\n ))}\r\n </TableRow>\r\n );\r\n })}\r\n </TableBody>\r\n </Table>\r\n <TablePagination\r\n pageCount={\r\n isGrouped\r\n ? Math.ceil(table.getPrePaginationRowModel().rows.length / limit) || 1\r\n : serverPageCount\r\n }\r\n page={isGrouped ? table.getState().pagination.pageIndex + 1 : page}\r\n limit={limit}\r\n setPagination={setPagination}\r\n />\r\n </>\r\n );\r\n};\r\n"],"mappings":"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"}
|
|
@@ -2,9 +2,9 @@ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
|
2
2
|
require("../../../../_virtual/_rolldown/runtime.js");
|
|
3
3
|
const require_src_components_ui_button = require("../../../components/ui/button.js");
|
|
4
4
|
const require_src_modules_table_filterTransformers = require("../filterTransformers.js");
|
|
5
|
+
let react_jsx_runtime = require("react/jsx-runtime");
|
|
5
6
|
let react = require("react");
|
|
6
7
|
let _heroui_react = require("@heroui/react");
|
|
7
|
-
let react_jsx_runtime = require("react/jsx-runtime");
|
|
8
8
|
let lucide_react = require("lucide-react");
|
|
9
9
|
let _internationalized_date = require("@internationalized/date");
|
|
10
10
|
//#region src/modules/table/components/TableFiltering.tsx
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { Button as Button$1 } from "../../../components/ui/button.mjs";
|
|
2
2
|
import { transformFiltersFromHeroUI, transformFiltersToHeroUI } from "../filterTransformers.mjs";
|
|
3
|
+
import { jsx, jsxs } from "react/jsx-runtime";
|
|
3
4
|
import { useCallback, useEffect, useMemo, useState } from "react";
|
|
4
5
|
import { DatePicker, DateRangePicker, Input, Select, SelectItem } from "@heroui/react";
|
|
5
|
-
import { jsx, jsxs } from "react/jsx-runtime";
|
|
6
6
|
import { PlusIcon, XIcon } from "lucide-react";
|
|
7
7
|
import { getLocalTimeZone, today } from "@internationalized/date";
|
|
8
8
|
//#region src/modules/table/components/TableFiltering.tsx
|
|
@@ -2,8 +2,8 @@ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
|
2
2
|
require("../../../../_virtual/_rolldown/runtime.js");
|
|
3
3
|
const require_src_lib_utils = require("../../../lib/utils.js");
|
|
4
4
|
const require_src_components_ui_button = require("../../../components/ui/button.js");
|
|
5
|
-
let react = require("react");
|
|
6
5
|
let react_jsx_runtime = require("react/jsx-runtime");
|
|
6
|
+
let react = require("react");
|
|
7
7
|
//#region src/modules/table/components/TableGroupBy.tsx
|
|
8
8
|
const TableGroupBy = ({ columns, activeGrouping, onGroupingChange, onClose }) => {
|
|
9
9
|
const [selected, setSelected] = (0, react.useState)(activeGrouping);
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { cn } from "../../../lib/utils.mjs";
|
|
2
2
|
import { Button } from "../../../components/ui/button.mjs";
|
|
3
|
-
import { useState } from "react";
|
|
4
3
|
import { jsx, jsxs } from "react/jsx-runtime";
|
|
4
|
+
import { useState } from "react";
|
|
5
5
|
//#region src/modules/table/components/TableGroupBy.tsx
|
|
6
6
|
const TableGroupBy = ({ columns, activeGrouping, onGroupingChange, onClose }) => {
|
|
7
7
|
const [selected, setSelected] = useState(activeGrouping);
|
|
@@ -2,8 +2,8 @@ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
|
2
2
|
require("../../../../_virtual/_rolldown/runtime.js");
|
|
3
3
|
const require_src_components_ui_input = require("../../../components/ui/input.js");
|
|
4
4
|
const require_src_components_ui_pagination = require("../../../components/ui/pagination.js");
|
|
5
|
-
let react = require("react");
|
|
6
5
|
let react_jsx_runtime = require("react/jsx-runtime");
|
|
6
|
+
let react = require("react");
|
|
7
7
|
//#region src/modules/table/components/TablePagination.tsx
|
|
8
8
|
const TablePagination = ({ pageCount, page = 1, limit = 10, setPagination }) => {
|
|
9
9
|
const [inputValue, setInputValue] = (0, react.useState)(String(page));
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { Input } from "../../../components/ui/input.mjs";
|
|
2
2
|
import { Pagination, PaginationContent, PaginationNext, PaginationPrevious } from "../../../components/ui/pagination.mjs";
|
|
3
|
-
import { useEffect, useState } from "react";
|
|
4
3
|
import { jsx, jsxs } from "react/jsx-runtime";
|
|
4
|
+
import { useEffect, useState } from "react";
|
|
5
5
|
//#region src/modules/table/components/TablePagination.tsx
|
|
6
6
|
const TablePagination = ({ pageCount, page = 1, limit = 10, setPagination }) => {
|
|
7
7
|
const [inputValue, setInputValue] = useState(String(page));
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@m5kdev/web-ui",
|
|
3
|
-
"version": "0.9.
|
|
3
|
+
"version": "0.9.1",
|
|
4
4
|
"license": "GPL-3.0-only",
|
|
5
5
|
"repository": {
|
|
6
6
|
"type": "git",
|
|
@@ -67,8 +67,8 @@
|
|
|
67
67
|
"zod": "4.2.1",
|
|
68
68
|
"@tanstack/react-query": "5.83.0",
|
|
69
69
|
"@trpc/tanstack-react-query": "11.4.3",
|
|
70
|
-
"@m5kdev/
|
|
71
|
-
"@m5kdev/
|
|
70
|
+
"@m5kdev/commons": "0.9.1",
|
|
71
|
+
"@m5kdev/frontend": "0.9.1"
|
|
72
72
|
},
|
|
73
73
|
"devDependencies": {
|
|
74
74
|
"@tsdown/css": "0.21.7",
|
|
@@ -80,8 +80,8 @@
|
|
|
80
80
|
"globals": "16.3.0",
|
|
81
81
|
"tsdown": "0.21.7",
|
|
82
82
|
"vite": "7.0.4",
|
|
83
|
-
"@m5kdev/
|
|
84
|
-
"@m5kdev/
|
|
83
|
+
"@m5kdev/config": "0.9.1",
|
|
84
|
+
"@m5kdev/backend": "0.9.1"
|
|
85
85
|
},
|
|
86
86
|
"exports": {
|
|
87
87
|
"./components/*": {
|