@prenta/admin 1.16.0 → 1.17.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.
Files changed (97) hide show
  1. package/CHANGELOG.md +18 -0
  2. package/dist/__tests__/components/faq-proposal-preview.render.test.d.ts +2 -0
  3. package/dist/__tests__/components/faq-proposal-preview.render.test.d.ts.map +1 -0
  4. package/dist/__tests__/components/faq-proposal-preview.render.test.js +97 -0
  5. package/dist/__tests__/components/faq-proposal-preview.render.test.js.map +1 -0
  6. package/dist/__tests__/components/seo-issue-fix-panel.render.test.js +37 -11
  7. package/dist/__tests__/components/seo-issue-fix-panel.render.test.js.map +1 -1
  8. package/dist/__tests__/lib/seo-service-errors.test.js +5 -6
  9. package/dist/__tests__/lib/seo-service-errors.test.js.map +1 -1
  10. package/dist/__tests__/lib/seo-service-proposals.test.js +24 -0
  11. package/dist/__tests__/lib/seo-service-proposals.test.js.map +1 -1
  12. package/dist/__tests__/views/seo-proposals-tab.render.test.js +277 -0
  13. package/dist/__tests__/views/seo-proposals-tab.render.test.js.map +1 -1
  14. package/dist/components/seo/FaqProposalPreview.d.ts +39 -0
  15. package/dist/components/seo/FaqProposalPreview.d.ts.map +1 -0
  16. package/dist/components/seo/FaqProposalPreview.js +62 -0
  17. package/dist/components/seo/FaqProposalPreview.js.map +1 -0
  18. package/dist/components/seo/SeoIssueFixPanel.d.ts.map +1 -1
  19. package/dist/components/seo/SeoIssueFixPanel.js +7 -2
  20. package/dist/components/seo/SeoIssueFixPanel.js.map +1 -1
  21. package/dist/lib/seo-service.d.ts +61 -7
  22. package/dist/lib/seo-service.d.ts.map +1 -1
  23. package/dist/lib/seo-service.js +9 -13
  24. package/dist/lib/seo-service.js.map +1 -1
  25. package/dist/prenta-admin.css +1 -1
  26. package/dist/views/seo/ProposalsTab.d.ts.map +1 -1
  27. package/dist/views/seo/ProposalsTab.js +160 -7
  28. package/dist/views/seo/ProposalsTab.js.map +1 -1
  29. package/dist/views/settings/SeoAutopilotCard.d.ts.map +1 -1
  30. package/dist/views/settings/SeoAutopilotCard.js +6 -0
  31. package/dist/views/settings/SeoAutopilotCard.js.map +1 -1
  32. package/package.json +5 -5
  33. package/src/__tests__/components/faq-proposal-preview.render.test.tsx +137 -0
  34. package/src/__tests__/components/seo-issue-fix-panel.render.test.tsx +42 -11
  35. package/src/__tests__/lib/seo-service-errors.test.ts +5 -9
  36. package/src/__tests__/lib/seo-service-proposals.test.ts +30 -0
  37. package/src/__tests__/views/seo-proposals-tab.render.test.tsx +358 -0
  38. package/src/components/seo/FaqProposalPreview.tsx +134 -0
  39. package/src/components/seo/SeoIssueFixPanel.tsx +7 -2
  40. package/src/lib/seo-service.ts +57 -15
  41. package/src/views/seo/ProposalsTab.tsx +279 -13
  42. package/src/views/settings/SeoAutopilotCard.tsx +6 -0
  43. package/dist/components/ContentOverviewChart.d.ts +0 -8
  44. package/dist/components/ContentOverviewChart.d.ts.map +0 -1
  45. package/dist/components/ContentOverviewChart.js +0 -20
  46. package/dist/components/ContentOverviewChart.js.map +0 -1
  47. package/dist/components/SEOPerformance.d.ts +0 -5
  48. package/dist/components/SEOPerformance.d.ts.map +0 -1
  49. package/dist/components/SEOPerformance.js +0 -29
  50. package/dist/components/SEOPerformance.js.map +0 -1
  51. package/dist/components/ui/Avatar.d.ts +0 -9
  52. package/dist/components/ui/Avatar.d.ts.map +0 -1
  53. package/dist/components/ui/Avatar.js +0 -21
  54. package/dist/components/ui/Avatar.js.map +0 -1
  55. package/dist/components/ui/CommandPalette.d.ts +0 -14
  56. package/dist/components/ui/CommandPalette.d.ts.map +0 -1
  57. package/dist/components/ui/CommandPalette.js +0 -58
  58. package/dist/components/ui/CommandPalette.js.map +0 -1
  59. package/dist/components/ui/DataTable.d.ts +0 -30
  60. package/dist/components/ui/DataTable.d.ts.map +0 -1
  61. package/dist/components/ui/DataTable.js +0 -44
  62. package/dist/components/ui/DataTable.js.map +0 -1
  63. package/dist/components/ui/Pagination.d.ts +0 -9
  64. package/dist/components/ui/Pagination.d.ts.map +0 -1
  65. package/dist/components/ui/Pagination.js +0 -26
  66. package/dist/components/ui/Pagination.js.map +0 -1
  67. package/dist/components/ui/Select.d.ts +0 -16
  68. package/dist/components/ui/Select.d.ts.map +0 -1
  69. package/dist/components/ui/Select.js +0 -24
  70. package/dist/components/ui/Select.js.map +0 -1
  71. package/dist/components/ui/Toast.d.ts +0 -18
  72. package/dist/components/ui/Toast.d.ts.map +0 -1
  73. package/dist/components/ui/Toast.js +0 -29
  74. package/dist/components/ui/Toast.js.map +0 -1
  75. package/dist/components/ui/index.d.ts +0 -46
  76. package/dist/components/ui/index.d.ts.map +0 -1
  77. package/dist/components/ui/index.js +0 -24
  78. package/dist/components/ui/index.js.map +0 -1
  79. package/dist/hooks/useContentLock.d.ts +0 -12
  80. package/dist/hooks/useContentLock.d.ts.map +0 -1
  81. package/dist/hooks/useContentLock.js +0 -38
  82. package/dist/hooks/useContentLock.js.map +0 -1
  83. package/dist/hooks/useDebounce.d.ts +0 -2
  84. package/dist/hooks/useDebounce.d.ts.map +0 -1
  85. package/dist/hooks/useDebounce.js +0 -11
  86. package/dist/hooks/useDebounce.js.map +0 -1
  87. package/src/components/ContentOverviewChart.tsx +0 -75
  88. package/src/components/SEOPerformance.tsx +0 -163
  89. package/src/components/ui/Avatar.tsx +0 -42
  90. package/src/components/ui/CommandPalette.tsx +0 -133
  91. package/src/components/ui/DataTable.tsx +0 -204
  92. package/src/components/ui/Pagination.tsx +0 -94
  93. package/src/components/ui/Select.tsx +0 -53
  94. package/src/components/ui/Toast.tsx +0 -72
  95. package/src/components/ui/index.ts +0 -61
  96. package/src/hooks/useContentLock.ts +0 -55
  97. package/src/hooks/useDebounce.ts +0 -14
@@ -1 +0,0 @@
1
- {"version":3,"file":"Avatar.js","sourceRoot":"","sources":["../../../src/components/ui/Avatar.tsx"],"names":[],"mappings":";AAQA,MAAM,WAAW,GAA+B;IAC9C,EAAE,EAAE,qBAAqB;IACzB,EAAE,EAAE,iBAAiB;IACrB,EAAE,EAAE,mBAAmB;CACxB,CAAA;AAED,SAAS,WAAW,CAAC,IAAY;IAC/B,OAAO,IAAI;SACR,KAAK,CAAC,GAAG,CAAC;SACV,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;SAC7B,IAAI,CAAC,EAAE,CAAC;SACR,WAAW,EAAE;SACb,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAA;AAChB,CAAC;AAED,MAAM,UAAU,MAAM,CAAC,EAAE,GAAG,EAAE,IAAI,GAAG,EAAE,EAAE,IAAI,GAAG,IAAI,EAAe;IACjE,IAAI,GAAG,EAAE,CAAC;QACR,OAAO,CACL,cACE,GAAG,EAAE,GAAG,EACR,GAAG,EAAE,IAAI,EACT,SAAS,EAAE,mDAAmD,WAAW,CAAC,IAAI,CAAC,EAAE,GACjF,CACH,CAAA;IACH,CAAC;IAED,OAAO,CACL,eACE,SAAS,EAAE,kIAAkI,WAAW,CAAC,IAAI,CAAC,EAAE,YAE/J,WAAW,CAAC,IAAI,CAAC,IAAI,GAAG,GACpB,CACR,CAAA;AACH,CAAC"}
@@ -1,14 +0,0 @@
1
- interface CommandItem {
2
- id: string;
3
- label: string;
4
- group: string;
5
- onSelect: () => void;
6
- }
7
- export interface CommandPaletteProps {
8
- open: boolean;
9
- onClose: () => void;
10
- items: CommandItem[];
11
- }
12
- export declare function CommandPalette({ open, onClose, items }: CommandPaletteProps): import("react/jsx-runtime").JSX.Element | null;
13
- export {};
14
- //# sourceMappingURL=CommandPalette.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"CommandPalette.d.ts","sourceRoot":"","sources":["../../../src/components/ui/CommandPalette.tsx"],"names":[],"mappings":"AAIA,UAAU,WAAW;IACnB,EAAE,EAAE,MAAM,CAAA;IACV,KAAK,EAAE,MAAM,CAAA;IACb,KAAK,EAAE,MAAM,CAAA;IACb,QAAQ,EAAE,MAAM,IAAI,CAAA;CACrB;AAED,MAAM,WAAW,mBAAmB;IAClC,IAAI,EAAE,OAAO,CAAA;IACb,OAAO,EAAE,MAAM,IAAI,CAAA;IACnB,KAAK,EAAE,WAAW,EAAE,CAAA;CACrB;AAED,wBAAgB,cAAc,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE,mBAAmB,kDAmH3E"}
@@ -1,58 +0,0 @@
1
- 'use client';
2
- import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
- import { useState, useEffect, useRef } from 'react';
4
- export function CommandPalette({ open, onClose, items }) {
5
- const [query, setQuery] = useState('');
6
- const [activeIndex, setActiveIndex] = useState(0);
7
- const inputRef = useRef(null);
8
- const filtered = items.filter((item) => item.label.toLowerCase().includes(query.toLowerCase()));
9
- const groups = Array.from(new Set(filtered.map((i) => i.group)));
10
- useEffect(() => {
11
- if (open) {
12
- setQuery('');
13
- setActiveIndex(0);
14
- requestAnimationFrame(() => inputRef.current?.focus());
15
- }
16
- }, [open]);
17
- useEffect(() => {
18
- if (!open)
19
- return;
20
- function handleKey(e) {
21
- if (e.key === 'Escape') {
22
- onClose();
23
- return;
24
- }
25
- if (e.key === 'ArrowDown') {
26
- e.preventDefault();
27
- setActiveIndex((i) => Math.min(i + 1, filtered.length - 1));
28
- }
29
- if (e.key === 'ArrowUp') {
30
- e.preventDefault();
31
- setActiveIndex((i) => Math.max(i - 1, 0));
32
- }
33
- if (e.key === 'Enter' && filtered[activeIndex]) {
34
- filtered[activeIndex].onSelect();
35
- onClose();
36
- }
37
- }
38
- document.addEventListener('keydown', handleKey);
39
- return () => document.removeEventListener('keydown', handleKey);
40
- }, [open, onClose, filtered, activeIndex]);
41
- if (!open)
42
- return null;
43
- let flatIndex = -1;
44
- return (_jsxs("div", { className: "fixed inset-0 z-[70] flex items-start justify-center pt-[20vh]", children: [_jsx("div", { className: "fixed inset-0 bg-black/50", onClick: onClose, role: "presentation" }), _jsxs("div", { className: "relative z-10 w-full max-w-lg overflow-hidden rounded-lg border border-[var(--border)] bg-[var(--popover)] shadow-2xl", children: [_jsxs("div", { className: "flex items-center border-b border-[var(--border)] px-4", children: [_jsx("svg", { className: "mr-2 h-4 w-4 text-[var(--muted-foreground)]", fill: "none", viewBox: "0 0 24 24", stroke: "currentColor", strokeWidth: 2, children: _jsx("path", { strokeLinecap: "round", strokeLinejoin: "round", d: "M21 21l-6-6m2-5a7 7 0 11-14 0 7 7 0 0114 0z" }) }), _jsx("input", { ref: inputRef, type: "text", value: query, onChange: (e) => {
45
- setQuery(e.target.value);
46
- setActiveIndex(0);
47
- }, placeholder: "Type a command or search...", className: "flex-1 bg-transparent py-3 text-sm outline-none" })] }), _jsxs("div", { className: "max-h-72 overflow-y-auto py-2", children: [groups.map((group) => (_jsxs("div", { children: [_jsx("div", { className: "px-4 py-1.5 text-xs font-medium text-[var(--muted-foreground)]", children: group }), filtered
48
- .filter((i) => i.group === group)
49
- .map((item) => {
50
- flatIndex++;
51
- const idx = flatIndex;
52
- return (_jsx("button", { onClick: () => {
53
- item.onSelect();
54
- onClose();
55
- }, className: `flex w-full px-4 py-2 text-sm ${idx === activeIndex ? 'bg-[var(--accent)]' : ''}`, children: item.label }, item.id));
56
- })] }, group))), filtered.length === 0 && (_jsx("p", { className: "px-4 py-6 text-center text-sm text-[var(--muted-foreground)]", children: "No results found." }))] })] })] }));
57
- }
58
- //# sourceMappingURL=CommandPalette.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"CommandPalette.js","sourceRoot":"","sources":["../../../src/components/ui/CommandPalette.tsx"],"names":[],"mappings":"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"}
@@ -1,30 +0,0 @@
1
- interface Column {
2
- key: string;
3
- label: string;
4
- sortable?: boolean;
5
- }
6
- interface Row {
7
- id: string;
8
- [key: string]: any;
9
- }
10
- export interface RowAction {
11
- key: string;
12
- label: string;
13
- icon?: React.ReactNode;
14
- destructive?: boolean;
15
- onClick: (row: Row) => void;
16
- }
17
- export interface DataTableProps {
18
- columns: Column[];
19
- rows: Row[];
20
- selectedIds: string[];
21
- onSelectionChange: (ids: string[]) => void;
22
- sortField?: string;
23
- sortDir?: 'asc' | 'desc';
24
- onSort?: (field: string) => void;
25
- rowActions?: RowAction[];
26
- onRowClick?: (row: Row) => void;
27
- }
28
- export declare function DataTable({ columns, rows, selectedIds, onSelectionChange, sortField, sortDir, onSort, rowActions, onRowClick, }: DataTableProps): import("react/jsx-runtime").JSX.Element;
29
- export {};
30
- //# sourceMappingURL=DataTable.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"DataTable.d.ts","sourceRoot":"","sources":["../../../src/components/ui/DataTable.tsx"],"names":[],"mappings":"AAIA,UAAU,MAAM;IACd,GAAG,EAAE,MAAM,CAAA;IACX,KAAK,EAAE,MAAM,CAAA;IACb,QAAQ,CAAC,EAAE,OAAO,CAAA;CACnB;AAED,UAAU,GAAG;IACX,EAAE,EAAE,MAAM,CAAA;IACV,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAA;CACnB;AAED,MAAM,WAAW,SAAS;IACxB,GAAG,EAAE,MAAM,CAAA;IACX,KAAK,EAAE,MAAM,CAAA;IACb,IAAI,CAAC,EAAE,KAAK,CAAC,SAAS,CAAA;IACtB,WAAW,CAAC,EAAE,OAAO,CAAA;IACrB,OAAO,EAAE,CAAC,GAAG,EAAE,GAAG,KAAK,IAAI,CAAA;CAC5B;AAED,MAAM,WAAW,cAAc;IAC7B,OAAO,EAAE,MAAM,EAAE,CAAA;IACjB,IAAI,EAAE,GAAG,EAAE,CAAA;IACX,WAAW,EAAE,MAAM,EAAE,CAAA;IACrB,iBAAiB,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,IAAI,CAAA;IAC1C,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,OAAO,CAAC,EAAE,KAAK,GAAG,MAAM,CAAA;IACxB,MAAM,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAA;IAChC,UAAU,CAAC,EAAE,SAAS,EAAE,CAAA;IACxB,UAAU,CAAC,EAAE,CAAC,GAAG,EAAE,GAAG,KAAK,IAAI,CAAA;CAChC;AAED,wBAAgB,SAAS,CAAC,EACxB,OAAO,EACP,IAAI,EACJ,WAAW,EACX,iBAAiB,EACjB,SAAS,EACT,OAAO,EACP,MAAM,EACN,UAAU,EACV,UAAU,GACX,EAAE,cAAc,2CA0FhB"}
@@ -1,44 +0,0 @@
1
- 'use client';
2
- import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
- import { useState, useRef, useEffect } from 'react';
4
- export function DataTable({ columns, rows, selectedIds, onSelectionChange, sortField, sortDir, onSort, rowActions, onRowClick, }) {
5
- const allSelected = rows.length > 0 && selectedIds.length === rows.length;
6
- function toggleAll() {
7
- onSelectionChange(allSelected ? [] : rows.map((r) => r.id));
8
- }
9
- function toggleRow(id) {
10
- onSelectionChange(selectedIds.includes(id) ? selectedIds.filter((s) => s !== id) : [...selectedIds, id]);
11
- }
12
- return (_jsx("div", { className: "overflow-x-auto rounded-lg border border-[var(--border)]", children: _jsxs("table", { className: "w-full text-left text-sm", children: [_jsx("thead", { className: "bg-muted border-b border-[var(--border)]", children: _jsxs("tr", { children: [_jsx("th", { className: "w-10 px-4 py-3", children: _jsx("input", { type: "checkbox", checked: allSelected, onChange: toggleAll, className: "rounded border-[var(--border)]" }) }), columns.map((col) => (_jsx("th", { className: "px-4 py-3 font-medium", "aria-sort": col.sortable && onSort
13
- ? sortField === col.key
14
- ? sortDir === 'asc'
15
- ? 'ascending'
16
- : 'descending'
17
- : 'none'
18
- : undefined, children: col.sortable && onSort ? (_jsxs("button", { onClick: () => onSort(col.key), className: "inline-flex items-center gap-1 hover:text-[var(--foreground)]", children: [col.label, sortField === col.key && (_jsx("span", { className: "text-xs", children: sortDir === 'asc' ? '↑' : '↓' }))] })) : (col.label) }, col.key))), rowActions && rowActions.length > 0 && _jsx("th", { className: "w-20 px-4 py-3" })] }) }), _jsx("tbody", { className: "divide-y divide-[var(--border)]", children: rows.map((row) => (_jsxs("tr", { className: `hover:bg-[var(--accent)] ${selectedIds.includes(row.id) ? 'bg-[var(--accent)]' : ''}`, onClick: () => onRowClick?.(row), style: onRowClick ? { cursor: 'pointer' } : undefined, children: [_jsx("td", { className: "px-4 py-3", onClick: (e) => e.stopPropagation(), children: _jsx("input", { type: "checkbox", checked: selectedIds.includes(row.id), onChange: () => toggleRow(row.id), className: "rounded border-[var(--border)]" }) }), columns.map((col) => (_jsx("td", { className: "px-4 py-3", children: row[col.key] }, col.key))), rowActions && rowActions.length > 0 && (_jsx("td", { className: "px-4 py-3", onClick: (e) => e.stopPropagation(), children: _jsx(RowActionsMenu, { actions: rowActions, row: row }) }))] }, row.id))) })] }) }));
19
- }
20
- function RowActionsMenu({ actions, row }) {
21
- const [open, setOpen] = useState(false);
22
- const ref = useRef(null);
23
- useEffect(() => {
24
- if (!open)
25
- return;
26
- function handleClickOutside(e) {
27
- if (ref.current && !ref.current.contains(e.target)) {
28
- setOpen(false);
29
- }
30
- }
31
- document.addEventListener('mousedown', handleClickOutside);
32
- return () => document.removeEventListener('mousedown', handleClickOutside);
33
- }, [open]);
34
- return (_jsxs("div", { className: "relative flex items-center justify-end gap-1", ref: ref, children: [actions
35
- .filter((a) => a.icon)
36
- .map((action) => (_jsx("button", { onClick: () => action.onClick(row), className: "hover:bg-muted rounded p-1 text-[var(--muted-foreground)] hover:text-[var(--foreground)]", "aria-label": action.label, title: action.label, children: action.icon }, action.key))), _jsx("button", { onClick: () => setOpen((o) => !o), className: "hover:bg-muted rounded p-1", "aria-label": "More actions", children: _jsx(MoreVerticalIcon, {}) }), open && (_jsx("div", { className: "absolute top-full right-0 z-50 mt-1 w-40 rounded-md border border-[var(--border)] bg-[var(--popover)] py-1 shadow-lg", children: actions.map((action) => (_jsxs("button", { className: `flex w-full items-center gap-2 px-3 py-1.5 text-sm hover:bg-[var(--accent)] ${action.destructive ? 'text-[var(--destructive)]' : ''}`, onClick: () => {
37
- action.onClick(row);
38
- setOpen(false);
39
- }, children: [action.icon && _jsx("span", { className: "h-4 w-4", children: action.icon }), action.label] }, action.key))) }))] }));
40
- }
41
- function MoreVerticalIcon() {
42
- return (_jsx("svg", { className: "h-4 w-4", fill: "none", viewBox: "0 0 24 24", stroke: "currentColor", strokeWidth: 2, children: _jsx("path", { strokeLinecap: "round", strokeLinejoin: "round", d: "M12 5v.01M12 12v.01M12 19v.01" }) }));
43
- }
44
- //# sourceMappingURL=DataTable.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"DataTable.js","sourceRoot":"","sources":["../../../src/components/ui/DataTable.tsx"],"names":[],"mappings":"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"}
@@ -1,9 +0,0 @@
1
- export interface PaginationProps {
2
- page: number;
3
- perPage: number;
4
- total: number;
5
- onPageChange: (page: number) => void;
6
- onPerPageChange: (perPage: number) => void;
7
- }
8
- export declare function Pagination({ page, perPage, total, onPageChange, onPerPageChange, }: PaginationProps): import("react/jsx-runtime").JSX.Element;
9
- //# sourceMappingURL=Pagination.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"Pagination.d.ts","sourceRoot":"","sources":["../../../src/components/ui/Pagination.tsx"],"names":[],"mappings":"AAEA,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,CAAA;IACZ,OAAO,EAAE,MAAM,CAAA;IACf,KAAK,EAAE,MAAM,CAAA;IACb,YAAY,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAA;IACpC,eAAe,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAA;CAC3C;AAED,wBAAgB,UAAU,CAAC,EACzB,IAAI,EACJ,OAAO,EACP,KAAK,EACL,YAAY,EACZ,eAAe,GAChB,EAAE,eAAe,2CA6EjB"}
@@ -1,26 +0,0 @@
1
- 'use client';
2
- import { jsxs as _jsxs, jsx as _jsx } from "react/jsx-runtime";
3
- export function Pagination({ page, perPage, total, onPageChange, onPerPageChange, }) {
4
- const totalPages = Math.max(1, Math.ceil(total / perPage));
5
- const start = (page - 1) * perPage + 1;
6
- const end = Math.min(page * perPage, total);
7
- function pageNumbers() {
8
- const pages = [];
9
- for (let i = 1; i <= totalPages; i++) {
10
- if (i === 1 || i === totalPages || Math.abs(i - page) <= 1) {
11
- pages.push(i);
12
- }
13
- else if (pages[pages.length - 1] !== 'ellipsis') {
14
- pages.push('ellipsis');
15
- }
16
- }
17
- return pages;
18
- }
19
- return (_jsxs("div", { className: "flex items-center justify-between text-sm", children: [_jsxs("span", { className: "text-[var(--muted-foreground)]", children: [start, "\u2013", end, " of ", total, " results"] }), _jsxs("div", { className: "flex items-center gap-2", children: [_jsx("select", { value: perPage, onChange: (e) => {
20
- onPerPageChange(Number(e.target.value));
21
- onPageChange(1);
22
- }, className: "rounded-md border border-[var(--border)] bg-[var(--input-background)] px-2 py-1 text-sm", children: [10, 25, 50, 100].map((n) => (_jsxs("option", { value: n, children: [n, " / page"] }, n))) }), _jsxs("nav", { className: "flex items-center gap-1", children: [_jsx("button", { onClick: () => onPageChange(page - 1), disabled: page <= 1, className: "rounded-md px-2 py-1 hover:bg-[var(--accent)] disabled:opacity-50", children: "Prev" }), pageNumbers().map((p, i) => p === 'ellipsis' ? (_jsx("span", { className: "px-1 text-[var(--muted-foreground)]", children: "\u2026" }, `e${i}`)) : (_jsx("button", { onClick: () => onPageChange(p), className: `min-w-[2rem] rounded-md px-2 py-1 ${p === page
23
- ? 'bg-[var(--primary)] text-[var(--primary-foreground)]'
24
- : 'hover:bg-[var(--accent)]'}`, children: p }, p))), _jsx("button", { onClick: () => onPageChange(page + 1), disabled: page >= totalPages, className: "rounded-md px-2 py-1 hover:bg-[var(--accent)] disabled:opacity-50", children: "Next" })] })] })] }));
25
- }
26
- //# sourceMappingURL=Pagination.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"Pagination.js","sourceRoot":"","sources":["../../../src/components/ui/Pagination.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAA;;AAUZ,MAAM,UAAU,UAAU,CAAC,EACzB,IAAI,EACJ,OAAO,EACP,KAAK,EACL,YAAY,EACZ,eAAe,GACC;IAChB,MAAM,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,KAAK,GAAG,OAAO,CAAC,CAAC,CAAA;IAC1D,MAAM,KAAK,GAAG,CAAC,IAAI,GAAG,CAAC,CAAC,GAAG,OAAO,GAAG,CAAC,CAAA;IACtC,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,GAAG,OAAO,EAAE,KAAK,CAAC,CAAA;IAE3C,SAAS,WAAW;QAClB,MAAM,KAAK,GAA4B,EAAE,CAAA;QACzC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,UAAU,EAAE,CAAC,EAAE,EAAE,CAAC;YACrC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,UAAU,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;gBAC3D,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;YACf,CAAC;iBAAM,IAAI,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,KAAK,UAAU,EAAE,CAAC;gBAClD,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,CAAA;YACxB,CAAC;QACH,CAAC;QACD,OAAO,KAAK,CAAA;IACd,CAAC;IAED,OAAO,CACL,eAAK,SAAS,EAAC,2CAA2C,aACxD,gBAAM,SAAS,EAAC,gCAAgC,aAC7C,KAAK,YAAG,GAAG,UAAM,KAAK,gBAClB,EAEP,eAAK,SAAS,EAAC,yBAAyB,aACtC,iBACE,KAAK,EAAE,OAAO,EACd,QAAQ,EAAE,CAAC,CAAC,EAAE,EAAE;4BACd,eAAe,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAA;4BACvC,YAAY,CAAC,CAAC,CAAC,CAAA;wBACjB,CAAC,EACD,SAAS,EAAC,yFAAyF,YAElG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAC5B,kBAAgB,KAAK,EAAE,CAAC,aACrB,CAAC,gBADS,CAAC,CAEL,CACV,CAAC,GACK,EAET,eAAK,SAAS,EAAC,yBAAyB,aACtC,iBACE,OAAO,EAAE,GAAG,EAAE,CAAC,YAAY,CAAC,IAAI,GAAG,CAAC,CAAC,EACrC,QAAQ,EAAE,IAAI,IAAI,CAAC,EACnB,SAAS,EAAC,mEAAmE,qBAGtE,EACR,WAAW,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAC1B,CAAC,KAAK,UAAU,CAAC,CAAC,CAAC,CACjB,eAAoB,SAAS,EAAC,qCAAqC,wBAAxD,IAAI,CAAC,EAAE,CAEX,CACR,CAAC,CAAC,CAAC,CACF,iBAEE,OAAO,EAAE,GAAG,EAAE,CAAC,YAAY,CAAC,CAAC,CAAC,EAC9B,SAAS,EAAE,qCACT,CAAC,KAAK,IAAI;oCACR,CAAC,CAAC,sDAAsD;oCACxD,CAAC,CAAC,0BACN,EAAE,YAED,CAAC,IARG,CAAC,CASC,CACV,CACF,EACD,iBACE,OAAO,EAAE,GAAG,EAAE,CAAC,YAAY,CAAC,IAAI,GAAG,CAAC,CAAC,EACrC,QAAQ,EAAE,IAAI,IAAI,UAAU,EAC5B,SAAS,EAAC,mEAAmE,qBAGtE,IACL,IACF,IACF,CACP,CAAA;AACH,CAAC"}
@@ -1,16 +0,0 @@
1
- import { type SelectHTMLAttributes, type ReactNode } from 'react';
2
- import { type VariantProps } from '../../lib/cv.js';
3
- declare const select: (props?: ({
4
- size?: "sm" | "md" | "lg" | undefined;
5
- state?: "default" | "invalid" | "valid" | undefined;
6
- } & {
7
- class?: string | false | null | undefined;
8
- className?: string | false | null | undefined;
9
- }) | undefined) => string;
10
- export type SelectVariants = VariantProps<typeof select>;
11
- export interface SelectProps extends Omit<SelectHTMLAttributes<HTMLSelectElement>, 'size'>, SelectVariants {
12
- children?: ReactNode;
13
- }
14
- export declare const Select: import("react").ForwardRefExoticComponent<SelectProps & import("react").RefAttributes<HTMLSelectElement>>;
15
- export { select as selectVariants };
16
- //# sourceMappingURL=Select.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"Select.d.ts","sourceRoot":"","sources":["../../../src/components/ui/Select.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAc,KAAK,oBAAoB,EAAE,KAAK,SAAS,EAAE,MAAM,OAAO,CAAA;AAC7E,OAAO,EAAM,KAAK,YAAY,EAAE,MAAM,iBAAiB,CAAA;AAGvD,QAAA,MAAM,MAAM;;;;;;yBAcV,CAAA;AAEF,MAAM,MAAM,cAAc,GAAG,YAAY,CAAC,OAAO,MAAM,CAAC,CAAA;AAExD,MAAM,WAAW,WACf,SAAQ,IAAI,CAAC,oBAAoB,CAAC,iBAAiB,CAAC,EAAE,MAAM,CAAC,EAAE,cAAc;IAC7E,QAAQ,CAAC,EAAE,SAAS,CAAA;CACrB;AAED,eAAO,MAAM,MAAM,2GAuBjB,CAAA;AAEF,OAAO,EAAE,MAAM,IAAI,cAAc,EAAE,CAAA"}
@@ -1,24 +0,0 @@
1
- import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
- import { forwardRef } from 'react';
3
- import { cv } from '../../lib/cv.js';
4
- import { formControlBase, formControlState } from './form-control.js';
5
- const select = cv(`${formControlBase} appearance-none pr-8`, {
6
- variants: {
7
- size: {
8
- sm: 'py-1.5 pr-7 pl-3 text-[length:var(--fs-sub)]',
9
- md: '',
10
- lg: 'py-2.5 pr-9 pl-3',
11
- },
12
- state: {
13
- default: formControlState.default,
14
- invalid: formControlState.invalid,
15
- valid: formControlState.valid,
16
- },
17
- },
18
- defaultVariants: { size: 'md', state: 'default' },
19
- });
20
- export const Select = forwardRef(function Select({ size, state, className, children, ...rest }, ref) {
21
- return (_jsxs("div", { className: "relative", children: [_jsx("select", { ref: ref, className: select({ size, state, class: className }), ...rest, children: children }), _jsx("svg", { "aria-hidden": true, className: "pointer-events-none absolute top-1/2 right-2 h-4 w-4 -translate-y-1/2 text-[var(--muted)]", viewBox: "0 0 20 20", fill: "currentColor", children: _jsx("path", { fillRule: "evenodd", d: "M5.23 7.21a.75.75 0 011.06.02L10 11.06l3.71-3.83a.75.75 0 111.08 1.04l-4.25 4.39a.75.75 0 01-1.08 0L5.21 8.27a.75.75 0 01.02-1.06z", clipRule: "evenodd" }) })] }));
22
- });
23
- export { select as selectVariants };
24
- //# sourceMappingURL=Select.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"Select.js","sourceRoot":"","sources":["../../../src/components/ui/Select.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,UAAU,EAA6C,MAAM,OAAO,CAAA;AAC7E,OAAO,EAAE,EAAE,EAAqB,MAAM,iBAAiB,CAAA;AACvD,OAAO,EAAE,eAAe,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAA;AAErE,MAAM,MAAM,GAAG,EAAE,CAAC,GAAG,eAAe,uBAAuB,EAAE;IAC3D,QAAQ,EAAE;QACR,IAAI,EAAE;YACJ,EAAE,EAAE,8CAA8C;YAClD,EAAE,EAAE,EAAE;YACN,EAAE,EAAE,kBAAkB;SACvB;QACD,KAAK,EAAE;YACL,OAAO,EAAE,gBAAgB,CAAC,OAAO;YACjC,OAAO,EAAE,gBAAgB,CAAC,OAAO;YACjC,KAAK,EAAE,gBAAgB,CAAC,KAAK;SAC9B;KACF;IACD,eAAe,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,SAAS,EAAE;CAClD,CAAC,CAAA;AASF,MAAM,CAAC,MAAM,MAAM,GAAG,UAAU,CAAiC,SAAS,MAAM,CAC9E,EAAE,IAAI,EAAE,KAAK,EAAE,SAAS,EAAE,QAAQ,EAAE,GAAG,IAAI,EAAE,EAC7C,GAAG;IAEH,OAAO,CACL,eAAK,SAAS,EAAC,UAAU,aACvB,iBAAQ,GAAG,EAAE,GAAG,EAAE,SAAS,EAAE,MAAM,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC,KAAM,IAAI,YAC7E,QAAQ,GACF,EACT,mCAEE,SAAS,EAAC,2FAA2F,EACrG,OAAO,EAAC,WAAW,EACnB,IAAI,EAAC,cAAc,YAEnB,eACE,QAAQ,EAAC,SAAS,EAClB,CAAC,EAAC,oIAAoI,EACtI,QAAQ,EAAC,SAAS,GAClB,GACE,IACF,CACP,CAAA;AACH,CAAC,CAAC,CAAA;AAEF,OAAO,EAAE,MAAM,IAAI,cAAc,EAAE,CAAA"}
@@ -1,18 +0,0 @@
1
- type ToastType = 'success' | 'error' | 'warning' | 'info';
2
- interface Toast {
3
- id: string;
4
- type: ToastType;
5
- message: string;
6
- }
7
- export declare function useToast(): {
8
- toasts: Toast[];
9
- addToast: (type: ToastType, message: string) => void;
10
- dismissToast: (id: string) => void;
11
- };
12
- export interface ToastContainerProps {
13
- toasts: Toast[];
14
- onDismiss: (id: string) => void;
15
- }
16
- export declare function ToastContainer({ toasts, onDismiss }: ToastContainerProps): import("react/jsx-runtime").JSX.Element | null;
17
- export {};
18
- //# sourceMappingURL=Toast.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"Toast.d.ts","sourceRoot":"","sources":["../../../src/components/ui/Toast.tsx"],"names":[],"mappings":"AAIA,KAAK,SAAS,GAAG,SAAS,GAAG,OAAO,GAAG,SAAS,GAAG,MAAM,CAAA;AAEzD,UAAU,KAAK;IACb,EAAE,EAAE,MAAM,CAAA;IACV,IAAI,EAAE,SAAS,CAAA;IACf,OAAO,EAAE,MAAM,CAAA;CAChB;AASD,wBAAgB,QAAQ;;qBAGc,SAAS,WAAW,MAAM;uBAQxB,MAAM;EAK7C;AAED,MAAM,WAAW,mBAAmB;IAClC,MAAM,EAAE,KAAK,EAAE,CAAA;IACf,SAAS,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,IAAI,CAAA;CAChC;AAED,wBAAgB,cAAc,CAAC,EAAE,MAAM,EAAE,SAAS,EAAE,EAAE,mBAAmB,kDA6BxE"}
@@ -1,29 +0,0 @@
1
- 'use client';
2
- import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
- import { useState, useCallback } from 'react';
4
- const typeClasses = {
5
- success: 'border-success bg-success/10 text-success',
6
- error: 'border-destructive bg-destructive/10 text-destructive',
7
- warning: 'border-warning bg-warning/10 text-warning',
8
- info: 'border-info bg-info/10 text-info',
9
- };
10
- export function useToast() {
11
- const [toasts, setToasts] = useState([]);
12
- const addToast = useCallback((type, message) => {
13
- const id = crypto.randomUUID();
14
- setToasts((prev) => [...prev, { id, type, message }]);
15
- setTimeout(() => {
16
- setToasts((prev) => prev.filter((t) => t.id !== id));
17
- }, 5000);
18
- }, []);
19
- const dismissToast = useCallback((id) => {
20
- setToasts((prev) => prev.filter((t) => t.id !== id));
21
- }, []);
22
- return { toasts, addToast, dismissToast };
23
- }
24
- export function ToastContainer({ toasts, onDismiss }) {
25
- if (toasts.length === 0)
26
- return null;
27
- return (_jsx("div", { className: "fixed right-4 bottom-4 z-[100] flex flex-col gap-2", children: toasts.map((toast) => (_jsxs("div", { className: `flex items-center gap-3 rounded-md border-l-4 px-4 py-3 shadow-lg ${typeClasses[toast.type]}`, children: [_jsx("p", { className: "flex-1 text-sm", children: toast.message }), _jsx("button", { onClick: () => onDismiss(toast.id), className: "shrink-0 opacity-60 hover:opacity-100", children: _jsx("svg", { className: "h-4 w-4", fill: "none", viewBox: "0 0 24 24", stroke: "currentColor", strokeWidth: 2, children: _jsx("path", { strokeLinecap: "round", strokeLinejoin: "round", d: "M6 18L18 6M6 6l12 12" }) }) })] }, toast.id))) }));
28
- }
29
- //# sourceMappingURL=Toast.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"Toast.js","sourceRoot":"","sources":["../../../src/components/ui/Toast.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAA;;AAEZ,OAAO,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,OAAO,CAAA;AAU7C,MAAM,WAAW,GAA8B;IAC7C,OAAO,EAAE,2CAA2C;IACpD,KAAK,EAAE,uDAAuD;IAC9D,OAAO,EAAE,2CAA2C;IACpD,IAAI,EAAE,kCAAkC;CACzC,CAAA;AAED,MAAM,UAAU,QAAQ;IACtB,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,GAAG,QAAQ,CAAU,EAAE,CAAC,CAAA;IAEjD,MAAM,QAAQ,GAAG,WAAW,CAAC,CAAC,IAAe,EAAE,OAAe,EAAE,EAAE;QAChE,MAAM,EAAE,GAAG,MAAM,CAAC,UAAU,EAAE,CAAA;QAC9B,SAAS,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,GAAG,IAAI,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,CAAC,CAAA;QACrD,UAAU,CAAC,GAAG,EAAE;YACd,SAAS,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,CAAA;QACtD,CAAC,EAAE,IAAI,CAAC,CAAA;IACV,CAAC,EAAE,EAAE,CAAC,CAAA;IAEN,MAAM,YAAY,GAAG,WAAW,CAAC,CAAC,EAAU,EAAE,EAAE;QAC9C,SAAS,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,CAAA;IACtD,CAAC,EAAE,EAAE,CAAC,CAAA;IAEN,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,YAAY,EAAE,CAAA;AAC3C,CAAC;AAOD,MAAM,UAAU,cAAc,CAAC,EAAE,MAAM,EAAE,SAAS,EAAuB;IACvE,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,IAAI,CAAA;IAEpC,OAAO,CACL,cAAK,SAAS,EAAC,oDAAoD,YAChE,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CACrB,eAEE,SAAS,EAAE,qEAAqE,WAAW,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,aAEzG,YAAG,SAAS,EAAC,gBAAgB,YAAE,KAAK,CAAC,OAAO,GAAK,EACjD,iBACE,OAAO,EAAE,GAAG,EAAE,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE,CAAC,EAClC,SAAS,EAAC,uCAAuC,YAEjD,cACE,SAAS,EAAC,SAAS,EACnB,IAAI,EAAC,MAAM,EACX,OAAO,EAAC,WAAW,EACnB,MAAM,EAAC,cAAc,EACrB,WAAW,EAAE,CAAC,YAEd,eAAM,aAAa,EAAC,OAAO,EAAC,cAAc,EAAC,OAAO,EAAC,CAAC,EAAC,sBAAsB,GAAG,GAC1E,GACC,KAjBJ,KAAK,CAAC,EAAE,CAkBT,CACP,CAAC,GACE,CACP,CAAA;AACH,CAAC"}
@@ -1,46 +0,0 @@
1
- export { Button, buttonVariants } from './Button.js';
2
- export type { ButtonProps, ButtonVariants } from './Button.js';
3
- export { Badge, badgeVariants, STATUS_TONE, STATUS_LABEL } from './Badge.js';
4
- export type { BadgeProps, BadgeVariants, DocumentStatus } from './Badge.js';
5
- export { Card, CardHeader, CardTitle, CardDescription, CardContent, CardFooter, cardVariants, } from './Card.js';
6
- export type { CardProps, CardVariants } from './Card.js';
7
- export { Input, inputVariants } from './Input.js';
8
- export type { InputProps, InputVariants } from './Input.js';
9
- export { Select, selectVariants } from './Select.js';
10
- export type { SelectProps, SelectVariants } from './Select.js';
11
- export { Avatar } from './Avatar.js';
12
- export type { AvatarProps } from './Avatar.js';
13
- export { EmptyState } from './EmptyState.js';
14
- export type { EmptyStateProps } from './EmptyState.js';
15
- export { Skeleton } from './Skeleton.js';
16
- export type { SkeletonProps } from './Skeleton.js';
17
- export { useToast, ToastContainer } from './Toast.js';
18
- export type { ToastContainerProps } from './Toast.js';
19
- export { Modal } from './Modal.js';
20
- export type { ModalProps } from './Modal.js';
21
- export { ConfirmDialog } from './ConfirmDialog.js';
22
- export type { ConfirmDialogProps } from './ConfirmDialog.js';
23
- export { ReauthDialog } from './ReauthDialog.js';
24
- export type { ReauthDialogProps } from './ReauthDialog.js';
25
- export { DataTable } from './DataTable.js';
26
- export type { DataTableProps } from './DataTable.js';
27
- export { Pagination } from './Pagination.js';
28
- export type { PaginationProps } from './Pagination.js';
29
- export { SearchInput } from './SearchInput.js';
30
- export type { SearchInputProps } from './SearchInput.js';
31
- export { Toggle, toggleTrackVariants, toggleThumbVariants } from './Toggle.js';
32
- export type { ToggleProps, ToggleVariants } from './Toggle.js';
33
- export { StatusBadge, statusBadgeVariants } from './StatusBadge.js';
34
- export type { StatusBadgeProps, StatusBadgeVariants, StatusBadgeTone } from './StatusBadge.js';
35
- export { FilterPill } from './FilterPill.js';
36
- export type { FilterPillProps } from './FilterPill.js';
37
- export { StatPill } from './StatPill.js';
38
- export type { StatPillProps } from './StatPill.js';
39
- export { RowActions, RowActionButton } from './RowActions.js';
40
- export type { RowActionButtonProps } from './RowActions.js';
41
- export { SplitPaneLayout, SplitPaneList, InspectorPane, InspectorPaneHeader, InspectorPaneBody, InspectorPaneSection, InspectorPaneFooter, } from './InspectorPane.js';
42
- export type { InspectorPaneProps } from './InspectorPane.js';
43
- export { formControlBase, formControlState } from './form-control.js';
44
- export { CommandPalette } from './CommandPalette.js';
45
- export type { CommandPaletteProps } from './CommandPalette.js';
46
- //# sourceMappingURL=index.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/ui/index.ts"],"names":[],"mappings":"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"}
@@ -1,24 +0,0 @@
1
- export { Button, buttonVariants } from './Button.js';
2
- export { Badge, badgeVariants, STATUS_TONE, STATUS_LABEL } from './Badge.js';
3
- export { Card, CardHeader, CardTitle, CardDescription, CardContent, CardFooter, cardVariants, } from './Card.js';
4
- export { Input, inputVariants } from './Input.js';
5
- export { Select, selectVariants } from './Select.js';
6
- export { Avatar } from './Avatar.js';
7
- export { EmptyState } from './EmptyState.js';
8
- export { Skeleton } from './Skeleton.js';
9
- export { useToast, ToastContainer } from './Toast.js';
10
- export { Modal } from './Modal.js';
11
- export { ConfirmDialog } from './ConfirmDialog.js';
12
- export { ReauthDialog } from './ReauthDialog.js';
13
- export { DataTable } from './DataTable.js';
14
- export { Pagination } from './Pagination.js';
15
- export { SearchInput } from './SearchInput.js';
16
- export { Toggle, toggleTrackVariants, toggleThumbVariants } from './Toggle.js';
17
- export { StatusBadge, statusBadgeVariants } from './StatusBadge.js';
18
- export { FilterPill } from './FilterPill.js';
19
- export { StatPill } from './StatPill.js';
20
- export { RowActions, RowActionButton } from './RowActions.js';
21
- export { SplitPaneLayout, SplitPaneList, InspectorPane, InspectorPaneHeader, InspectorPaneBody, InspectorPaneSection, InspectorPaneFooter, } from './InspectorPane.js';
22
- export { formControlBase, formControlState } from './form-control.js';
23
- export { CommandPalette } from './CommandPalette.js';
24
- //# sourceMappingURL=index.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/components/ui/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,aAAa,CAAA;AAEpD,OAAO,EAAE,KAAK,EAAE,aAAa,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,YAAY,CAAA;AAE5E,OAAO,EACL,IAAI,EACJ,UAAU,EACV,SAAS,EACT,eAAe,EACf,WAAW,EACX,UAAU,EACV,YAAY,GACb,MAAM,WAAW,CAAA;AAElB,OAAO,EAAE,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAA;AAEjD,OAAO,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,aAAa,CAAA;AAEpD,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAA;AAEpC,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAA;AAE5C,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAA;AAExC,OAAO,EAAE,QAAQ,EAAE,cAAc,EAAE,MAAM,YAAY,CAAA;AAErD,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAA;AAElC,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAA;AAElD,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAA;AAEhD,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAA;AAE1C,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAA;AAE5C,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAA;AAE9C,OAAO,EAAE,MAAM,EAAE,mBAAmB,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAA;AAE9E,OAAO,EAAE,WAAW,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAA;AAEnE,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAA;AAE5C,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAA;AAExC,OAAO,EAAE,UAAU,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAA;AAE7D,OAAO,EACL,eAAe,EACf,aAAa,EACb,aAAa,EACb,mBAAmB,EACnB,iBAAiB,EACjB,oBAAoB,EACpB,mBAAmB,GACpB,MAAM,oBAAoB,CAAA;AAE3B,OAAO,EAAE,eAAe,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAA;AACrE,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAA"}
@@ -1,12 +0,0 @@
1
- interface ContentLock {
2
- lockedBy: string | null;
3
- lockedAt: Date | null;
4
- isLocked: boolean;
5
- isLockedByMe: boolean;
6
- }
7
- export declare function useContentLock(documentId: string | undefined, userId: string): ContentLock & {
8
- acquireLock: () => Promise<boolean>;
9
- releaseLock: () => Promise<void>;
10
- };
11
- export {};
12
- //# sourceMappingURL=useContentLock.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"useContentLock.d.ts","sourceRoot":"","sources":["../../src/hooks/useContentLock.ts"],"names":[],"mappings":"AAIA,UAAU,WAAW;IACnB,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAA;IACvB,QAAQ,EAAE,IAAI,GAAG,IAAI,CAAA;IACrB,QAAQ,EAAE,OAAO,CAAA;IACjB,YAAY,EAAE,OAAO,CAAA;CACtB;AAED,wBAAgB,cAAc,CAC5B,UAAU,EAAE,MAAM,GAAG,SAAS,EAC9B,MAAM,EAAE,MAAM,GACb,WAAW,GAAG;IACf,WAAW,EAAE,MAAM,OAAO,CAAC,OAAO,CAAC,CAAA;IACnC,WAAW,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAA;CACjC,CAqCA"}
@@ -1,38 +0,0 @@
1
- 'use client';
2
- import { useState, useEffect, useCallback } from 'react';
3
- export function useContentLock(documentId, userId) {
4
- const [lock, setLock] = useState({
5
- lockedBy: null,
6
- lockedAt: null,
7
- isLocked: false,
8
- isLockedByMe: false,
9
- });
10
- const acquireLock = useCallback(async () => {
11
- if (!documentId)
12
- return false;
13
- setLock({
14
- lockedBy: userId,
15
- lockedAt: new Date(),
16
- isLocked: true,
17
- isLockedByMe: true,
18
- });
19
- return true;
20
- }, [documentId, userId]);
21
- const releaseLock = useCallback(async () => {
22
- setLock({
23
- lockedBy: null,
24
- lockedAt: null,
25
- isLocked: false,
26
- isLockedByMe: false,
27
- });
28
- }, []);
29
- useEffect(() => {
30
- return () => {
31
- if (lock.isLockedByMe) {
32
- releaseLock();
33
- }
34
- };
35
- }, [lock.isLockedByMe, releaseLock]);
36
- return { ...lock, acquireLock, releaseLock };
37
- }
38
- //# sourceMappingURL=useContentLock.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"useContentLock.js","sourceRoot":"","sources":["../../src/hooks/useContentLock.ts"],"names":[],"mappings":"AAAA,YAAY,CAAA;AAEZ,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,OAAO,CAAA;AASxD,MAAM,UAAU,cAAc,CAC5B,UAA8B,EAC9B,MAAc;IAKd,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,GAAG,QAAQ,CAAc;QAC5C,QAAQ,EAAE,IAAI;QACd,QAAQ,EAAE,IAAI;QACd,QAAQ,EAAE,KAAK;QACf,YAAY,EAAE,KAAK;KACpB,CAAC,CAAA;IAEF,MAAM,WAAW,GAAG,WAAW,CAAC,KAAK,IAAI,EAAE;QACzC,IAAI,CAAC,UAAU;YAAE,OAAO,KAAK,CAAA;QAC7B,OAAO,CAAC;YACN,QAAQ,EAAE,MAAM;YAChB,QAAQ,EAAE,IAAI,IAAI,EAAE;YACpB,QAAQ,EAAE,IAAI;YACd,YAAY,EAAE,IAAI;SACnB,CAAC,CAAA;QACF,OAAO,IAAI,CAAA;IACb,CAAC,EAAE,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC,CAAA;IAExB,MAAM,WAAW,GAAG,WAAW,CAAC,KAAK,IAAI,EAAE;QACzC,OAAO,CAAC;YACN,QAAQ,EAAE,IAAI;YACd,QAAQ,EAAE,IAAI;YACd,QAAQ,EAAE,KAAK;YACf,YAAY,EAAE,KAAK;SACpB,CAAC,CAAA;IACJ,CAAC,EAAE,EAAE,CAAC,CAAA;IAEN,SAAS,CAAC,GAAG,EAAE;QACb,OAAO,GAAG,EAAE;YACV,IAAI,IAAI,CAAC,YAAY,EAAE,CAAC;gBACtB,WAAW,EAAE,CAAA;YACf,CAAC;QACH,CAAC,CAAA;IACH,CAAC,EAAE,CAAC,IAAI,CAAC,YAAY,EAAE,WAAW,CAAC,CAAC,CAAA;IAEpC,OAAO,EAAE,GAAG,IAAI,EAAE,WAAW,EAAE,WAAW,EAAE,CAAA;AAC9C,CAAC"}
@@ -1,2 +0,0 @@
1
- export declare function useDebounce<T>(value: T, delayMs: number): T;
2
- //# sourceMappingURL=useDebounce.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"useDebounce.d.ts","sourceRoot":"","sources":["../../src/hooks/useDebounce.ts"],"names":[],"mappings":"AAIA,wBAAgB,WAAW,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,OAAO,EAAE,MAAM,GAAG,CAAC,CAS3D"}
@@ -1,11 +0,0 @@
1
- 'use client';
2
- import { useState, useEffect } from 'react';
3
- export function useDebounce(value, delayMs) {
4
- const [debouncedValue, setDebouncedValue] = useState(value);
5
- useEffect(() => {
6
- const timer = setTimeout(() => setDebouncedValue(value), delayMs);
7
- return () => clearTimeout(timer);
8
- }, [value, delayMs]);
9
- return debouncedValue;
10
- }
11
- //# sourceMappingURL=useDebounce.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"useDebounce.js","sourceRoot":"","sources":["../../src/hooks/useDebounce.ts"],"names":[],"mappings":"AAAA,YAAY,CAAA;AAEZ,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,OAAO,CAAA;AAE3C,MAAM,UAAU,WAAW,CAAI,KAAQ,EAAE,OAAe;IACtD,MAAM,CAAC,cAAc,EAAE,iBAAiB,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAA;IAE3D,SAAS,CAAC,GAAG,EAAE;QACb,MAAM,KAAK,GAAG,UAAU,CAAC,GAAG,EAAE,CAAC,iBAAiB,CAAC,KAAK,CAAC,EAAE,OAAO,CAAC,CAAA;QACjE,OAAO,GAAG,EAAE,CAAC,YAAY,CAAC,KAAK,CAAC,CAAA;IAClC,CAAC,EAAE,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC,CAAA;IAEpB,OAAO,cAAc,CAAA;AACvB,CAAC"}
@@ -1,75 +0,0 @@
1
- 'use client'
2
-
3
- import { PieChart, Pie, Cell, ResponsiveContainer } from 'recharts'
4
-
5
- interface ContentOverviewChartProps {
6
- published: number
7
- drafts: number
8
- scheduled: number
9
- }
10
-
11
- const COLORS = ['#22c55e', '#f59e0b', '#a855f7']
12
-
13
- export function ContentOverviewChart({ published, drafts, scheduled }: ContentOverviewChartProps) {
14
- const total = published + drafts + scheduled
15
- const data = [
16
- { name: 'Published', value: published },
17
- { name: 'Drafts', value: drafts },
18
- { name: 'Scheduled', value: scheduled },
19
- ]
20
-
21
- if (total === 0) {
22
- return (
23
- <div className="text-muted-foreground flex h-full items-center justify-center text-sm">
24
- No content yet
25
- </div>
26
- )
27
- }
28
-
29
- return (
30
- <div className="flex items-center gap-6">
31
- <div className="h-36 w-36 shrink-0">
32
- <ResponsiveContainer width="100%" height="100%">
33
- <PieChart>
34
- <Pie
35
- data={data}
36
- cx="50%"
37
- cy="50%"
38
- innerRadius={38}
39
- outerRadius={65}
40
- dataKey="value"
41
- strokeWidth={2}
42
- stroke="#fff"
43
- >
44
- {data.map((_, idx) => (
45
- <Cell key={idx} fill={COLORS[idx]} />
46
- ))}
47
- </Pie>
48
- </PieChart>
49
- </ResponsiveContainer>
50
- </div>
51
- <div className="space-y-3">
52
- {data.map((entry, idx) => {
53
- const pct = total > 0 ? Math.round((entry.value / total) * 100) : 0
54
- return (
55
- <div key={entry.name} className="flex items-center gap-3">
56
- <span
57
- className="h-2.5 w-2.5 shrink-0 rounded-full"
58
- style={{ backgroundColor: COLORS[idx] }}
59
- />
60
- <div className="min-w-0">
61
- <span className="text-foreground text-sm">{entry.name}</span>
62
- <div className="flex items-baseline gap-2">
63
- <span className="text-foreground text-lg font-medium">
64
- {entry.value.toLocaleString()}
65
- </span>
66
- <span className="text-muted-foreground text-xs">{pct}%</span>
67
- </div>
68
- </div>
69
- </div>
70
- )
71
- })}
72
- </div>
73
- </div>
74
- )
75
- }