@ploykit/ui 0.1.1 → 0.2.0

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.
Files changed (83) hide show
  1. package/README.md +41 -41
  2. package/dist/components/CronInput.js +2 -2
  3. package/dist/components/DataTable.js +1 -1
  4. package/dist/components/ImpersonationBanner.js +1 -1
  5. package/dist/components/NotificationBell.js +1 -1
  6. package/dist/components/OnboardingChecklist.js +3 -3
  7. package/dist/components/Page.js +1 -1
  8. package/dist/components/SecretModal.js +1 -1
  9. package/dist/components/SettingsCard.js +2 -2
  10. package/dist/components/SiteBannerLayer.js +1 -1
  11. package/dist/components/StatusBadge.d.ts +4 -0
  12. package/dist/components/StatusBadge.js +7 -0
  13. package/dist/components/UserMenu.js +2 -2
  14. package/dist/components/WorkspaceSwitcher.js +4 -4
  15. package/dist/components/ui/Badge.d.ts +4 -10
  16. package/dist/components/ui/Badge.js +26 -14
  17. package/dist/components/ui/Button.d.ts +5 -7
  18. package/dist/components/ui/Button.js +22 -21
  19. package/dist/components/ui/Input.d.ts +2 -2
  20. package/dist/components/ui/Input.js +4 -7
  21. package/dist/components/ui/alert-dialog.d.ts +2 -2
  22. package/dist/components/ui/alert-dialog.js +10 -9
  23. package/dist/components/ui/avatar.js +3 -2
  24. package/dist/components/ui/breadcrumb.js +7 -7
  25. package/dist/components/ui/card.d.ts +2 -4
  26. package/dist/components/ui/card.js +7 -7
  27. package/dist/components/ui/checkbox.js +3 -2
  28. package/dist/components/ui/dialog.d.ts +16 -14
  29. package/dist/components/ui/dialog.js +35 -25
  30. package/dist/components/ui/dropdown-menu.d.ts +29 -0
  31. package/dist/components/ui/dropdown-menu.js +50 -0
  32. package/dist/components/ui/empty.d.ts +7 -9
  33. package/dist/components/ui/empty.js +6 -9
  34. package/dist/components/ui/field.js +10 -9
  35. package/dist/components/ui/popover.js +3 -2
  36. package/dist/components/ui/progress.js +2 -1
  37. package/dist/components/ui/select.js +6 -6
  38. package/dist/components/ui/separator.js +1 -0
  39. package/dist/components/ui/sheet.js +3 -3
  40. package/dist/components/ui/sidebar.d.ts +2 -2
  41. package/dist/components/ui/sidebar.js +25 -34
  42. package/dist/components/ui/skeleton.d.ts +1 -2
  43. package/dist/components/ui/switch.js +1 -1
  44. package/dist/components/ui/tabs.js +3 -3
  45. package/dist/components/ui/tooltip.js +1 -1
  46. package/dist/index.d.ts +5 -39
  47. package/dist/index.js +5 -25
  48. package/dist/layouts/AppShell.d.ts +1 -1
  49. package/dist/layouts/AppShell.js +23 -1
  50. package/dist/layouts/SettingsShell.d.ts +1 -1
  51. package/dist/layouts/SettingsShell.js +3 -3
  52. package/dist/pages/LoginPage.js +5 -5
  53. package/dist/pages/account/NotificationPreferencesPage.js +2 -2
  54. package/dist/pages/account/ProfileSettingsPage.js +6 -6
  55. package/dist/pages/account/SecuritySettingsPage.js +7 -7
  56. package/dist/pages/account/TokensPage.js +4 -4
  57. package/dist/pages/admin/AdminSettingsPage.js +5 -5
  58. package/dist/pages/admin/AdminShell.js +2 -2
  59. package/dist/pages/admin/AuditPage.js +3 -3
  60. package/dist/pages/admin/OrdersPage.js +4 -3
  61. package/dist/pages/admin/OverviewPage.js +4 -4
  62. package/dist/pages/admin/SSOPage.js +3 -3
  63. package/dist/pages/admin/UserDetailPage.js +6 -5
  64. package/dist/pages/admin/UsersPage.js +7 -6
  65. package/dist/pages/admin/WebhookDeliveriesPage.js +4 -3
  66. package/dist/pages/admin/WorkspaceDetailPage.js +5 -5
  67. package/dist/pages/admin/WorkspacesPage.js +4 -4
  68. package/dist/pages/admin/shared.js +1 -1
  69. package/dist/pages/auth/ForgotPasswordPage.js +3 -3
  70. package/dist/pages/auth/InviteAcceptPage.js +3 -3
  71. package/dist/pages/auth/RegisterPage.js +6 -6
  72. package/dist/pages/auth/ResetPasswordPage.js +3 -3
  73. package/dist/pages/auth/VerifyEmailPage.js +3 -3
  74. package/dist/pages/workspace/BillingPage.js +8 -7
  75. package/dist/pages/workspace/BillingSuccessPage.js +3 -3
  76. package/dist/pages/workspace/MembersPage.js +7 -6
  77. package/dist/pages/workspace/SchedulesPage.js +5 -5
  78. package/dist/pages/workspace/UsagePage.d.ts +1 -1
  79. package/dist/pages/workspace/UsagePage.js +2 -2
  80. package/dist/pages/workspace/WebhooksPage.js +9 -9
  81. package/dist/pages/workspace/WorkspaceAuditPage.js +3 -3
  82. package/dist/pages/workspace/WorkspaceGeneralPage.js +7 -7
  83. package/package.json +8 -4
@@ -4,15 +4,15 @@ import { useMutation, useQuery, useQueryClient } from '@tanstack/react-query';
4
4
  import { FormField } from '../../components/FormField';
5
5
  import { PageError, PageHeader } from '../../components/Page';
6
6
  import { toast } from '../../components/toast';
7
- import { Badge } from '../../components/ui/Badge';
8
- import { Button } from '../../components/ui/Button';
7
+ import { Badge } from '../../components/ui/badge';
8
+ import { Button } from '../../components/ui/button';
9
9
  import { Card, CardAction, CardContent, CardDescription, CardHeader, CardTitle, } from '../../components/ui/card';
10
- import { Input } from '../../components/ui/Input';
10
+ import { Input } from '../../components/ui/input';
11
11
  import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue, } from '../../components/ui/select';
12
12
  import { Switch } from '../../components/ui/switch';
13
- import { useApi } from '../../hooks/useApi';
13
+ import { useApi } from '@ploykit/hooks';
14
14
  import { SiteBanner } from '../../components/SiteBanner';
15
- import { SITE_CONFIG_QUERY_KEY } from '../../hooks/useSiteConfig';
15
+ import { SITE_CONFIG_QUERY_KEY } from '@ploykit/hooks';
16
16
  import { adminError } from './shared';
17
17
  const ERROR_TOAST_MS = 8_000;
18
18
  function parseRateLimit(raw) {
@@ -1,9 +1,9 @@
1
1
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
2
  import { Link, Navigate, useLocation } from 'react-router';
3
3
  import { Activity, ArrowLeft, Building2, KeyRound, LayoutDashboard, Receipt, ScrollText, Settings, ShieldCheck, Users, Webhook, } from 'lucide-react';
4
- import { buttonVariants } from '../../components/ui/Button';
4
+ import { buttonVariants } from '../../components/ui/button';
5
5
  import { UserMenu } from '../../components/UserMenu';
6
- import { useAuth } from '../../hooks/useAuth';
6
+ import { useAuth } from '@ploykit/hooks';
7
7
  import { cn } from '../../lib/utils';
8
8
  const NAV = [
9
9
  {
@@ -7,9 +7,9 @@ import { apiFetch } from '@ploykit/client';
7
7
  import { DataTable } from '../../components/DataTable';
8
8
  import { PageEmpty, PageError, PageHeader } from '../../components/Page';
9
9
  import { toast } from '../../components/toast';
10
- import { Button } from '../../components/ui/Button';
11
- import { Input } from '../../components/ui/Input';
12
- import { useApi } from '../../hooks/useApi';
10
+ import { Button } from '../../components/ui/button';
11
+ import { Input } from '../../components/ui/input';
12
+ import { useApi } from '@ploykit/hooks';
13
13
  import { apiErrorMessage } from '../../lib/api-error';
14
14
  import { shortID, formatDateTime } from '../../lib/utils';
15
15
  import { ADMIN_PAGE_SIZE, adminError } from './shared';
@@ -7,11 +7,12 @@ import { DataTable } from '../../components/DataTable';
7
7
  import { PageEmpty, PageError, PageHeader } from '../../components/Page';
8
8
  import { SettingsCard } from '../../components/SettingsCard';
9
9
  import { toast } from '../../components/toast';
10
- import { Badge, StatusBadge } from '../../components/ui/Badge';
11
- import { Button } from '../../components/ui/Button';
10
+ import { Badge } from '../../components/ui/badge';
11
+ import { StatusBadge } from '../../components/StatusBadge';
12
+ import { Button } from '../../components/ui/button';
12
13
  import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue, } from '../../components/ui/select';
13
14
  import { Tabs, TabsContent, TabsList, TabsTrigger, } from '../../components/ui/tabs';
14
- import { useApi } from '../../hooks/useApi';
15
+ import { useApi } from '@ploykit/hooks';
15
16
  import { formatDateTime, shortID, statusLabel } from '../../lib/utils';
16
17
  import { ADMIN_PAGE_SIZE, adminError, adminListQuery, formatCents, } from './shared';
17
18
  const ORDER_STATUSES = ['pending', 'paid', 'failed', 'canceled', 'refunded'];
@@ -7,13 +7,13 @@ import { DataTable } from '../../components/DataTable';
7
7
  import { FormField } from '../../components/FormField';
8
8
  import { PageEmpty, PageError, PageHeader } from '../../components/Page';
9
9
  import { toast } from '../../components/toast';
10
- import { Badge } from '../../components/ui/Badge';
11
- import { Button } from '../../components/ui/Button';
10
+ import { Badge } from '../../components/ui/badge';
11
+ import { Button } from '../../components/ui/button';
12
12
  import { Card, CardAction, CardDescription, CardHeader, CardTitle, } from '../../components/ui/card';
13
13
  import { Dialog, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogTitle, } from '../../components/ui/dialog';
14
- import { Input } from '../../components/ui/Input';
14
+ import { Input } from '../../components/ui/input';
15
15
  import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue, } from '../../components/ui/select';
16
- import { useApi } from '../../hooks/useApi';
16
+ import { useApi } from '@ploykit/hooks';
17
17
  import { apiErrorMessage } from '../../lib/api-error';
18
18
  import { formatDateTime } from '../../lib/utils';
19
19
  import { adminError } from './shared';
@@ -4,9 +4,9 @@ import { Link } from 'react-router';
4
4
  import { useQuery } from '@tanstack/react-query';
5
5
  import { DataTable } from '../../components/DataTable';
6
6
  import { PageEmpty, PageError, PageHeader } from '../../components/Page';
7
- import { Badge } from '../../components/ui/Badge';
8
- import { Button } from '../../components/ui/Button';
9
- import { useApi } from '../../hooks/useApi';
7
+ import { Badge } from '../../components/ui/badge';
8
+ import { Button } from '../../components/ui/button';
9
+ import { useApi } from '@ploykit/hooks';
10
10
  import { formatDateTime } from '../../lib/utils';
11
11
  import { ADMIN_PAGE_SIZE, adminError } from './shared';
12
12
  export function SSOPage() {
@@ -10,11 +10,12 @@ import { PageEmpty, PageError, PageHeader } from '../../components/Page';
10
10
  import { ImpactConfirmation } from '../../components/SecretModal';
11
11
  import { SettingsCard } from '../../components/SettingsCard';
12
12
  import { toast } from '../../components/toast';
13
- import { Badge, StatusBadge } from '../../components/ui/Badge';
14
- import { Button } from '../../components/ui/Button';
15
- import { Input } from '../../components/ui/Input';
16
- import { useApi, ApiError } from '../../hooks/useApi';
17
- import { useAuth } from '../../hooks/useAuth';
13
+ import { Badge } from '../../components/ui/badge';
14
+ import { StatusBadge } from '../../components/StatusBadge';
15
+ import { Button } from '../../components/ui/button';
16
+ import { Input } from '../../components/ui/input';
17
+ import { useApi, ApiError } from '@ploykit/hooks';
18
+ import { useAuth } from '@ploykit/hooks';
18
19
  import { apiErrorMessage } from '../../lib/api-error';
19
20
  import { formatDate, formatDateTime, shortID } from '../../lib/utils';
20
21
  import { adminError } from './shared';
@@ -8,13 +8,14 @@ import { DataTable } from '../../components/DataTable';
8
8
  import { PageEmpty, PageError, PageHeader } from '../../components/Page';
9
9
  import { ImpactConfirmation } from '../../components/SecretModal';
10
10
  import { toast } from '../../components/toast';
11
- import { Badge, StatusBadge } from '../../components/ui/Badge';
12
- import { Button } from '../../components/ui/Button';
13
- import { Input } from '../../components/ui/Input';
14
- import { DropdownMenu, DropdownMenuContent, DropdownMenuGroup, DropdownMenuItem, DropdownMenuLabel, DropdownMenuSeparator, DropdownMenuTrigger, } from '../../components/ui/menu';
11
+ import { Badge } from '../../components/ui/badge';
12
+ import { StatusBadge } from '../../components/StatusBadge';
13
+ import { Button } from '../../components/ui/button';
14
+ import { Input } from '../../components/ui/input';
15
+ import { DropdownMenu, DropdownMenuContent, DropdownMenuGroup, DropdownMenuItem, DropdownMenuLabel, DropdownMenuSeparator, DropdownMenuTrigger, } from '../../components/ui/dropdown-menu';
15
16
  import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue, } from '../../components/ui/select';
16
- import { useApi } from '../../hooks/useApi';
17
- import { useAuth } from '../../hooks/useAuth';
17
+ import { useApi } from '@ploykit/hooks';
18
+ import { useAuth } from '@ploykit/hooks';
18
19
  import { formatDate, formatDateTime } from '../../lib/utils';
19
20
  import { ADMIN_PAGE_SIZE, adminError, adminListQuery, } from './shared';
20
21
  const STATUS_OPTIONS = [
@@ -5,10 +5,11 @@ import { useMutation, useQuery, useQueryClient } from '@tanstack/react-query';
5
5
  import { DataTable } from '../../components/DataTable';
6
6
  import { PageEmpty, PageError, PageHeader } from '../../components/Page';
7
7
  import { toast } from '../../components/toast';
8
- import { Badge, StatusBadge } from '../../components/ui/Badge';
9
- import { Button } from '../../components/ui/Button';
8
+ import { Badge } from '../../components/ui/badge';
9
+ import { StatusBadge } from '../../components/StatusBadge';
10
+ import { Button } from '../../components/ui/button';
10
11
  import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue, } from '../../components/ui/select';
11
- import { useApi } from '../../hooks/useApi';
12
+ import { useApi } from '@ploykit/hooks';
12
13
  import { formatDateTime, shortID, statusLabel } from '../../lib/utils';
13
14
  import { ADMIN_PAGE_SIZE, adminError, adminListQuery, } from './shared';
14
15
  const DELIVERY_STATUSES = ['pending', 'delivered', 'dead'];
@@ -10,12 +10,12 @@ import { PageEmpty, PageError, PageHeader } from '../../components/Page';
10
10
  import { ImpactConfirmation } from '../../components/SecretModal';
11
11
  import { SettingsCard } from '../../components/SettingsCard';
12
12
  import { toast } from '../../components/toast';
13
- import { Badge } from '../../components/ui/Badge';
14
- import { Button } from '../../components/ui/Button';
15
- import { Input } from '../../components/ui/Input';
13
+ import { Badge } from '../../components/ui/badge';
14
+ import { Button } from '../../components/ui/button';
15
+ import { Input } from '../../components/ui/input';
16
16
  import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue, } from '../../components/ui/select';
17
- import { useApi } from '../../hooks/useApi';
18
- import { useAuth } from '../../hooks/useAuth';
17
+ import { useApi } from '@ploykit/hooks';
18
+ import { useAuth } from '@ploykit/hooks';
19
19
  import { apiErrorMessage } from '../../lib/api-error';
20
20
  import { formatDate, formatDateTime, shortID } from '../../lib/utils';
21
21
  import { adminError } from './shared';
@@ -5,11 +5,11 @@ import { useMutation, useQuery, useQueryClient } from '@tanstack/react-query';
5
5
  import { DataTable } from '../../components/DataTable';
6
6
  import { PageEmpty, PageError, PageHeader } from '../../components/Page';
7
7
  import { toast } from '../../components/toast';
8
- import { Badge } from '../../components/ui/Badge';
9
- import { Button } from '../../components/ui/Button';
10
- import { Input } from '../../components/ui/Input';
8
+ import { Badge } from '../../components/ui/badge';
9
+ import { Button } from '../../components/ui/button';
10
+ import { Input } from '../../components/ui/input';
11
11
  import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue, } from '../../components/ui/select';
12
- import { useApi } from '../../hooks/useApi';
12
+ import { useApi } from '@ploykit/hooks';
13
13
  import { formatDate } from '../../lib/utils';
14
14
  import { ADMIN_PAGE_SIZE, adminError, adminListQuery, } from './shared';
15
15
  const FALLBACK_PLAN_CODES = ['free'];
@@ -1,4 +1,4 @@
1
- import { ApiError } from '../../hooks/useApi';
1
+ import { ApiError } from '@ploykit/hooks';
2
2
  import { apiErrorMessage } from '../../lib/api-error';
3
3
  export const ADMIN_PAGE_SIZE = 20;
4
4
  export function adminError(err, fallback) {
@@ -2,9 +2,9 @@ import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-run
2
2
  import { useState } from 'react';
3
3
  import { AuthShell } from '../../layouts/AuthShell';
4
4
  import { FormField } from '../../components/FormField';
5
- import { Button } from '../../components/ui/Button';
6
- import { Input } from '../../components/ui/Input';
7
- import { usePasswordReset } from '../../hooks/usePasswordReset';
5
+ import { Button } from '../../components/ui/button';
6
+ import { Input } from '../../components/ui/input';
7
+ import { usePasswordReset } from '@ploykit/hooks';
8
8
  export function ForgotPasswordPage({ title = '找回密码', sentHint = '如果该邮箱存在,重置链接已发送,请查收邮箱。', backPath = '/login', }) {
9
9
  const { requestReset } = usePasswordReset();
10
10
  const [email, setEmail] = useState('');
@@ -1,11 +1,11 @@
1
1
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
2
  import { useNavigate } from 'react-router';
3
3
  import { Check, X } from 'lucide-react';
4
- import { Button } from '../../components/ui/Button';
5
- import { Badge } from '../../components/ui/Badge';
4
+ import { Button } from '../../components/ui/button';
5
+ import { Badge } from '../../components/ui/badge';
6
6
  import { PageLoading, PageEmpty } from '../../components/Page';
7
7
  import { toast } from '../../components/toast';
8
- import { useMyInvitations } from '../../hooks/useMembers';
8
+ import { useMyInvitations } from '@ploykit/hooks';
9
9
  import { formatDateTime } from '../../lib/utils';
10
10
  import { apiErrorMessage } from '../../lib/api-error';
11
11
  const ROLE_LABEL = { owner: '所有者', admin: '管理员', member: '成员' };
@@ -3,13 +3,13 @@ import { useState } from 'react';
3
3
  import { z } from 'zod';
4
4
  import { AuthShell } from '../../layouts/AuthShell';
5
5
  import { FormField } from '../../components/FormField';
6
- import { Button } from '../../components/ui/Button';
7
- import { Input } from '../../components/ui/Input';
6
+ import { Button } from '../../components/ui/button';
7
+ import { Input } from '../../components/ui/input';
8
8
  import { FieldDescription, FieldSeparator } from '../../components/ui/field';
9
- import { useApi } from '../../hooks/useApi';
10
- import { useAuth } from '../../hooks/useAuth';
11
- import { useSiteConfig } from '../../hooks/useSiteConfig';
12
- import { useZodForm } from '../../hooks/useZodForm';
9
+ import { useApi } from '@ploykit/hooks';
10
+ import { useAuth } from '@ploykit/hooks';
11
+ import { useSiteConfig } from '@ploykit/hooks';
12
+ import { useZodForm } from '@ploykit/hooks';
13
13
  import { apiErrorMessage } from '../../lib/api-error';
14
14
  import { toast } from '../../components/toast';
15
15
  function passwordKinds(pw) {
@@ -2,9 +2,9 @@ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-run
2
2
  import { useEffect, useState } from 'react';
3
3
  import { AuthShell } from '../../layouts/AuthShell';
4
4
  import { FormField } from '../../components/FormField';
5
- import { Button } from '../../components/ui/Button';
6
- import { Input } from '../../components/ui/Input';
7
- import { usePasswordReset } from '../../hooks/usePasswordReset';
5
+ import { Button } from '../../components/ui/button';
6
+ import { Input } from '../../components/ui/input';
7
+ import { usePasswordReset } from '@ploykit/hooks';
8
8
  import { passwordSchema } from './RegisterPage';
9
9
  const REDIRECT_DELAY_MS = 3000;
10
10
  export function ResetPasswordPage({ onDone }) {
@@ -2,8 +2,8 @@ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
2
  import { useEffect, useRef, useState } from 'react';
3
3
  import { api } from '@ploykit/client';
4
4
  import { AuthShell } from '../../layouts/AuthShell';
5
- import { buttonVariants } from '../../components/ui/Button';
6
- import { Empty, EmptyHeader, EmptyMedia, EmptyTitle, EmptyDescription, EmptyFooter, } from '../../components/ui/empty';
5
+ import { buttonVariants } from '../../components/ui/button';
6
+ import { Empty, EmptyHeader, EmptyMedia, EmptyTitle, EmptyDescription, EmptyContent, } from '../../components/ui/empty';
7
7
  import { MailCheck, LoaderCircle, CircleX } from 'lucide-react';
8
8
  export function VerifyEmailPage() {
9
9
  const [state, setState] = useState('verifying');
@@ -41,5 +41,5 @@ export function VerifyEmailPage() {
41
41
  ? '感谢确认,现在可以正常登录了。'
42
42
  : state === 'failed'
43
43
  ? (message ?? '验证失败')
44
- : '请稍候,正在校验邮件链接…' })] }), _jsx(EmptyFooter, { children: _jsx("a", { href: "/login", className: buttonVariants({ variant: 'outline' }), children: "\u8FD4\u56DE\u767B\u5F55" }) })] }) }));
44
+ : '请稍候,正在校验邮件链接…' })] }), _jsx(EmptyContent, { children: _jsx("a", { href: "/login", className: buttonVariants({ variant: 'outline' }), children: "\u8FD4\u56DE\u767B\u5F55" }) })] }) }));
45
45
  }
@@ -7,14 +7,15 @@ import { DataTable } from '../../components/DataTable';
7
7
  import { SettingsCard } from '../../components/SettingsCard';
8
8
  import { useConfirm } from '../../components/ConfirmDialog';
9
9
  import { toast } from '../../components/toast';
10
- import { Button } from '../../components/ui/Button';
11
- import { Badge, StatusBadge } from '../../components/ui/Badge';
10
+ import { Button } from '../../components/ui/button';
11
+ import { Badge } from '../../components/ui/badge';
12
+ import { StatusBadge } from '../../components/StatusBadge';
12
13
  import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from '../../components/ui/select';
13
- import { useApi } from '../../hooks/useApi';
14
- import { useBilling } from '../../hooks/useBilling';
15
- import { useSiteConfig } from '../../hooks/useSiteConfig';
16
- import { useWorkspace } from '../../hooks/useWorkspace';
17
- import { queryKeys, } from '../../provider/PloykitProvider';
14
+ import { useApi } from '@ploykit/hooks';
15
+ import { useBilling } from '@ploykit/hooks';
16
+ import { useSiteConfig } from '@ploykit/hooks';
17
+ import { useWorkspace } from '@ploykit/hooks';
18
+ import { queryKeys, } from '@ploykit/hooks';
18
19
  import { formatDateTime, cn } from '../../lib/utils';
19
20
  import { apiErrorMessage } from '../../lib/api-error';
20
21
  const INTERVAL_LABEL = { monthly: '按月', yearly: '按年' };
@@ -4,9 +4,9 @@ import { useNavigate } from 'react-router';
4
4
  import { useQuery, useQueryClient } from '@tanstack/react-query';
5
5
  import { Skeleton } from '../../components/ui/skeleton';
6
6
  import { toast } from '../../components/toast';
7
- import { useApi } from '../../hooks/useApi';
8
- import { useWorkspace } from '../../hooks/useWorkspace';
9
- import { queryKeys } from '../../provider/PloykitProvider';
7
+ import { useApi } from '@ploykit/hooks';
8
+ import { useWorkspace } from '@ploykit/hooks';
9
+ import { queryKeys } from '@ploykit/hooks';
10
10
  const POLL_MS = 5_000;
11
11
  const MAX_TRIES = 12;
12
12
  function toBaseline(sub) {
@@ -9,17 +9,18 @@ import { FormField } from '../../components/FormField';
9
9
  import { SecretModal, ImpactConfirmation } from '../../components/SecretModal';
10
10
  import { useConfirm } from '../../components/ConfirmDialog';
11
11
  import { toast } from '../../components/toast';
12
- import { Button } from '../../components/ui/Button';
13
- import { Input } from '../../components/ui/Input';
14
- import { Badge, StatusBadge } from '../../components/ui/Badge';
12
+ import { Button } from '../../components/ui/button';
13
+ import { Input } from '../../components/ui/input';
14
+ import { Badge } from '../../components/ui/badge';
15
+ import { StatusBadge } from '../../components/StatusBadge';
15
16
  import { Tabs, TabsContent, TabsList, TabsTrigger } from '../../components/ui/tabs';
16
17
  import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue, } from '../../components/ui/select';
17
18
  import { Dialog, DialogContent, DialogHeader, DialogTitle, DialogDescription, DialogFooter, } from '../../components/ui/dialog';
18
- import { useZodForm } from '../../hooks/useZodForm';
19
- import { useMembers, useMemberMutations, ASSIGNABLE_ROLES, LIST_PAGE_SIZE, } from '../../hooks/useMembers';
19
+ import { useZodForm } from '@ploykit/hooks';
20
+ import { useMembers, useMemberMutations, ASSIGNABLE_ROLES, LIST_PAGE_SIZE, } from '@ploykit/hooks';
20
21
  import { formatDateTime } from '../../lib/utils';
21
22
  import { apiErrorMessage } from '../../lib/api-error';
22
- import { roleSatisfies } from '../../lib/perm';
23
+ import { roleSatisfies } from '@ploykit/hooks';
23
24
  const inviteSchema = z.object({
24
25
  email: z.string().min(1, '请输入邮箱').email('邮箱格式不正确'),
25
26
  role: z.enum(['admin', 'member']),
@@ -8,13 +8,13 @@ import { DataTable } from '../../components/DataTable';
8
8
  import { FormField } from '../../components/FormField';
9
9
  import { CronInput, describeCron } from '../../components/CronInput';
10
10
  import { toast } from '../../components/toast';
11
- import { Button } from '../../components/ui/Button';
12
- import { Input } from '../../components/ui/Input';
11
+ import { Button } from '../../components/ui/button';
12
+ import { Input } from '../../components/ui/input';
13
13
  import { Switch } from '../../components/ui/switch';
14
14
  import { Dialog, DialogContent, DialogHeader, DialogTitle, DialogDescription, DialogFooter, } from '../../components/ui/dialog';
15
- import { useApi } from '../../hooks/useApi';
16
- import { useWorkspace } from '../../hooks/useWorkspace';
17
- import { useZodForm } from '../../hooks/useZodForm';
15
+ import { useApi } from '@ploykit/hooks';
16
+ import { useWorkspace } from '@ploykit/hooks';
17
+ import { useZodForm } from '@ploykit/hooks';
18
18
  import { useConfirm } from '../../components/ConfirmDialog';
19
19
  import { browserTzLabel, formatDateTimeTz } from '../../lib/utils';
20
20
  import { apiErrorMessage } from '../../lib/api-error';
@@ -1,4 +1,4 @@
1
- import { type PKUsageItem } from '../../hooks/useUsage';
1
+ import { type PKUsageItem } from '@ploykit/hooks';
2
2
  interface ReservationDetail {
3
3
  id: string;
4
4
  amount: number;
@@ -1,11 +1,11 @@
1
1
  import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
2
2
  import { Link } from 'react-router';
3
3
  import { PageHeader, PageLoading, PageError, PageEmpty } from '../../components/Page';
4
- import { Badge } from '../../components/ui/Badge';
4
+ import { Badge } from '../../components/ui/badge';
5
5
  import { Card, CardHeader, CardTitle, CardAction, CardContent } from '../../components/ui/card';
6
6
  import { Progress, ProgressLabel, ProgressValue, } from '../../components/ui/progress';
7
7
  import { DataTable } from '../../components/DataTable';
8
- import { useUsage } from '../../hooks/useUsage';
8
+ import { useUsage } from '@ploykit/hooks';
9
9
  import { apiErrorMessage } from '../../lib/api-error';
10
10
  const NEAR_FULL_PCT = 80;
11
11
  const DIM_LABEL = {
@@ -9,21 +9,21 @@ import { FormField } from '../../components/FormField';
9
9
  import { SecretModal } from '../../components/SecretModal';
10
10
  import { useConfirm } from '../../components/ConfirmDialog';
11
11
  import { toast } from '../../components/toast';
12
- import { Button } from '../../components/ui/Button';
13
- import { Input } from '../../components/ui/Input';
14
- import { StatusBadge } from '../../components/ui/Badge';
12
+ import { Button } from '../../components/ui/button';
13
+ import { Input } from '../../components/ui/input';
14
+ import { StatusBadge } from '../../components/StatusBadge';
15
15
  import { Tabs, TabsContent, TabsList, TabsTrigger } from '../../components/ui/tabs';
16
16
  import { Switch } from '../../components/ui/switch';
17
17
  import { Checkbox } from '../../components/ui/checkbox';
18
18
  import { Dialog, DialogContent, DialogHeader, DialogTitle, DialogDescription, DialogFooter, } from '../../components/ui/dialog';
19
- import { DropdownMenu, DropdownMenuContent, DropdownMenuItem, DropdownMenuTrigger, } from '../../components/ui/menu';
20
- import { useApi } from '../../hooks/useApi';
21
- import { useWorkspace } from '../../hooks/useWorkspace';
22
- import { useZodForm } from '../../hooks/useZodForm';
23
- import { queryKeys } from '../../provider/PloykitProvider';
19
+ import { DropdownMenu, DropdownMenuContent, DropdownMenuItem, DropdownMenuTrigger, } from '../../components/ui/dropdown-menu';
20
+ import { useApi } from '@ploykit/hooks';
21
+ import { useWorkspace } from '@ploykit/hooks';
22
+ import { useZodForm } from '@ploykit/hooks';
23
+ import { queryKeys } from '@ploykit/hooks';
24
24
  import { formatDateTime } from '../../lib/utils';
25
25
  import { apiErrorMessage } from '../../lib/api-error';
26
- import { roleSatisfies } from '../../lib/perm';
26
+ import { roleSatisfies } from '@ploykit/hooks';
27
27
  const createSchema = z.object({
28
28
  url: z
29
29
  .string()
@@ -4,10 +4,10 @@ import { useSearchParams } from 'react-router';
4
4
  import { Download, Search } from 'lucide-react';
5
5
  import { PageHeader, PageLoading, PageError, PageEmpty } from '../../components/Page';
6
6
  import { DataTable } from '../../components/DataTable';
7
- import { Button } from '../../components/ui/Button';
8
- import { Input } from '../../components/ui/Input';
7
+ import { Button } from '../../components/ui/button';
8
+ import { Input } from '../../components/ui/input';
9
9
  import { toast } from '../../components/toast';
10
- import { useAudit, exportAuditCsv, } from '../../hooks/useAudit';
10
+ import { useAudit, exportAuditCsv, } from '@ploykit/hooks';
11
11
  import { formatDateTime } from '../../lib/utils';
12
12
  import { apiErrorMessage } from '../../lib/api-error';
13
13
  const PAGE_SIZE = 20;
@@ -9,14 +9,14 @@ import { FormField } from '../../components/FormField';
9
9
  import { ImpactConfirmation } from '../../components/SecretModal';
10
10
  import { useConfirm } from '../../components/ConfirmDialog';
11
11
  import { toast } from '../../components/toast';
12
- import { Button } from '../../components/ui/Button';
13
- import { Input } from '../../components/ui/Input';
14
- import { useApi } from '../../hooks/useApi';
15
- import { useWorkspace } from '../../hooks/useWorkspace';
16
- import { useZodForm } from '../../hooks/useZodForm';
17
- import { queryKeys } from '../../provider/PloykitProvider';
12
+ import { Button } from '../../components/ui/button';
13
+ import { Input } from '../../components/ui/input';
14
+ import { useApi } from '@ploykit/hooks';
15
+ import { useWorkspace } from '@ploykit/hooks';
16
+ import { useZodForm } from '@ploykit/hooks';
17
+ import { queryKeys } from '@ploykit/hooks';
18
18
  import { apiErrorMessage } from '../../lib/api-error';
19
- import { roleSatisfies } from '../../lib/perm';
19
+ import { roleSatisfies } from '@ploykit/hooks';
20
20
  const renameSchema = z.object({
21
21
  name: z.string().trim().min(1, '请输入工作区名称').max(64, '名称最多 64 字符'),
22
22
  });
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ploykit/ui",
3
- "version": "0.1.1",
3
+ "version": "0.2.0",
4
4
  "type": "module",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",
@@ -10,6 +10,11 @@
10
10
  "types": "./dist/index.d.ts",
11
11
  "default": "./dist/index.js"
12
12
  },
13
+ "./components/ui/*": {
14
+ "development": "./src/components/ui/*.tsx",
15
+ "types": "./dist/components/ui/*.d.ts",
16
+ "default": "./dist/components/ui/*.js"
17
+ },
13
18
  "./package.json": "./package.json"
14
19
  },
15
20
  "files": [
@@ -24,13 +29,12 @@
24
29
  },
25
30
  "dependencies": {
26
31
  "@base-ui/react": "^1.8.0",
27
- "@hookform/resolvers": "^5.9.1",
28
32
  "@ploykit/client": "^0.2.0",
29
- "@ploykit/runtime": "^0.1.0",
33
+ "@ploykit/hooks": "^0.1.0",
30
34
  "class-variance-authority": "^0.7.1",
31
35
  "clsx": "^2.1.1",
36
+ "cn": "^0.4.0",
32
37
  "lucide-react": "^1.52.0",
33
- "react-hook-form": "^7.0.0",
34
38
  "sonner": "^2.0.8",
35
39
  "tailwind-merge": "^3.7.0",
36
40
  "zod": "^4.0.0"