@prenta/admin 1.17.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 (66) hide show
  1. package/CHANGELOG.md +8 -0
  2. package/dist/__tests__/lib/seo-service-errors.test.js +2 -6
  3. package/dist/__tests__/lib/seo-service-errors.test.js.map +1 -1
  4. package/dist/lib/seo-service.d.ts +0 -5
  5. package/dist/lib/seo-service.d.ts.map +1 -1
  6. package/dist/lib/seo-service.js +0 -11
  7. package/dist/lib/seo-service.js.map +1 -1
  8. package/dist/prenta-admin.css +1 -1
  9. package/package.json +5 -5
  10. package/src/__tests__/lib/seo-service-errors.test.ts +1 -9
  11. package/src/lib/seo-service.ts +0 -14
  12. package/dist/components/ContentOverviewChart.d.ts +0 -8
  13. package/dist/components/ContentOverviewChart.d.ts.map +0 -1
  14. package/dist/components/ContentOverviewChart.js +0 -20
  15. package/dist/components/ContentOverviewChart.js.map +0 -1
  16. package/dist/components/SEOPerformance.d.ts +0 -5
  17. package/dist/components/SEOPerformance.d.ts.map +0 -1
  18. package/dist/components/SEOPerformance.js +0 -29
  19. package/dist/components/SEOPerformance.js.map +0 -1
  20. package/dist/components/ui/Avatar.d.ts +0 -9
  21. package/dist/components/ui/Avatar.d.ts.map +0 -1
  22. package/dist/components/ui/Avatar.js +0 -21
  23. package/dist/components/ui/Avatar.js.map +0 -1
  24. package/dist/components/ui/CommandPalette.d.ts +0 -14
  25. package/dist/components/ui/CommandPalette.d.ts.map +0 -1
  26. package/dist/components/ui/CommandPalette.js +0 -58
  27. package/dist/components/ui/CommandPalette.js.map +0 -1
  28. package/dist/components/ui/DataTable.d.ts +0 -30
  29. package/dist/components/ui/DataTable.d.ts.map +0 -1
  30. package/dist/components/ui/DataTable.js +0 -44
  31. package/dist/components/ui/DataTable.js.map +0 -1
  32. package/dist/components/ui/Pagination.d.ts +0 -9
  33. package/dist/components/ui/Pagination.d.ts.map +0 -1
  34. package/dist/components/ui/Pagination.js +0 -26
  35. package/dist/components/ui/Pagination.js.map +0 -1
  36. package/dist/components/ui/Select.d.ts +0 -16
  37. package/dist/components/ui/Select.d.ts.map +0 -1
  38. package/dist/components/ui/Select.js +0 -24
  39. package/dist/components/ui/Select.js.map +0 -1
  40. package/dist/components/ui/Toast.d.ts +0 -18
  41. package/dist/components/ui/Toast.d.ts.map +0 -1
  42. package/dist/components/ui/Toast.js +0 -29
  43. package/dist/components/ui/Toast.js.map +0 -1
  44. package/dist/components/ui/index.d.ts +0 -46
  45. package/dist/components/ui/index.d.ts.map +0 -1
  46. package/dist/components/ui/index.js +0 -24
  47. package/dist/components/ui/index.js.map +0 -1
  48. package/dist/hooks/useContentLock.d.ts +0 -12
  49. package/dist/hooks/useContentLock.d.ts.map +0 -1
  50. package/dist/hooks/useContentLock.js +0 -38
  51. package/dist/hooks/useContentLock.js.map +0 -1
  52. package/dist/hooks/useDebounce.d.ts +0 -2
  53. package/dist/hooks/useDebounce.d.ts.map +0 -1
  54. package/dist/hooks/useDebounce.js +0 -11
  55. package/dist/hooks/useDebounce.js.map +0 -1
  56. package/src/components/ContentOverviewChart.tsx +0 -75
  57. package/src/components/SEOPerformance.tsx +0 -163
  58. package/src/components/ui/Avatar.tsx +0 -42
  59. package/src/components/ui/CommandPalette.tsx +0 -133
  60. package/src/components/ui/DataTable.tsx +0 -204
  61. package/src/components/ui/Pagination.tsx +0 -94
  62. package/src/components/ui/Select.tsx +0 -53
  63. package/src/components/ui/Toast.tsx +0 -72
  64. package/src/components/ui/index.ts +0 -61
  65. package/src/hooks/useContentLock.ts +0 -55
  66. package/src/hooks/useDebounce.ts +0 -14
@@ -1618,20 +1618,6 @@ export async function explainSeoIssue(issueId: string): Promise<SeoAiResult> {
1618
1618
  return res.data ?? {}
1619
1619
  }
1620
1620
 
1621
- export async function generateStructuredData(context: {
1622
- entityType: string
1623
- entityId: string
1624
- schemaType: string
1625
- }): Promise<SeoAiResult> {
1626
- const res = await cmsApi<SeoAiResult>('/ai/seo/generate-schema', {
1627
- method: 'POST',
1628
- body: JSON.stringify(context),
1629
- })
1630
- if (isAiUnavailable(res.status)) return { unavailable: true }
1631
- if (res.error) return { error: res.error }
1632
- return res.data ?? {}
1633
- }
1634
-
1635
1621
  export async function summarizeSeoAudit(): Promise<SeoAiResult> {
1636
1622
  const res = await cmsApi<SeoAiResult>('/ai/seo/summarize', { method: 'POST' })
1637
1623
  if (isAiUnavailable(res.status)) return { unavailable: true }
@@ -1,8 +0,0 @@
1
- interface ContentOverviewChartProps {
2
- published: number;
3
- drafts: number;
4
- scheduled: number;
5
- }
6
- export declare function ContentOverviewChart({ published, drafts, scheduled }: ContentOverviewChartProps): import("react/jsx-runtime").JSX.Element;
7
- export {};
8
- //# sourceMappingURL=ContentOverviewChart.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"ContentOverviewChart.d.ts","sourceRoot":"","sources":["../../src/components/ContentOverviewChart.tsx"],"names":[],"mappings":"AAIA,UAAU,yBAAyB;IACjC,SAAS,EAAE,MAAM,CAAA;IACjB,MAAM,EAAE,MAAM,CAAA;IACd,SAAS,EAAE,MAAM,CAAA;CAClB;AAID,wBAAgB,oBAAoB,CAAC,EAAE,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,EAAE,yBAAyB,2CA8D/F"}
@@ -1,20 +0,0 @@
1
- 'use client';
2
- import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
- import { PieChart, Pie, Cell, ResponsiveContainer } from 'recharts';
4
- const COLORS = ['#22c55e', '#f59e0b', '#a855f7'];
5
- export function ContentOverviewChart({ published, drafts, scheduled }) {
6
- const total = published + drafts + scheduled;
7
- const data = [
8
- { name: 'Published', value: published },
9
- { name: 'Drafts', value: drafts },
10
- { name: 'Scheduled', value: scheduled },
11
- ];
12
- if (total === 0) {
13
- return (_jsx("div", { className: "text-muted-foreground flex h-full items-center justify-center text-sm", children: "No content yet" }));
14
- }
15
- return (_jsxs("div", { className: "flex items-center gap-6", children: [_jsx("div", { className: "h-36 w-36 shrink-0", children: _jsx(ResponsiveContainer, { width: "100%", height: "100%", children: _jsx(PieChart, { children: _jsx(Pie, { data: data, cx: "50%", cy: "50%", innerRadius: 38, outerRadius: 65, dataKey: "value", strokeWidth: 2, stroke: "#fff", children: data.map((_, idx) => (_jsx(Cell, { fill: COLORS[idx] }, idx))) }) }) }) }), _jsx("div", { className: "space-y-3", children: data.map((entry, idx) => {
16
- const pct = total > 0 ? Math.round((entry.value / total) * 100) : 0;
17
- return (_jsxs("div", { className: "flex items-center gap-3", children: [_jsx("span", { className: "h-2.5 w-2.5 shrink-0 rounded-full", style: { backgroundColor: COLORS[idx] } }), _jsxs("div", { className: "min-w-0", children: [_jsx("span", { className: "text-foreground text-sm", children: entry.name }), _jsxs("div", { className: "flex items-baseline gap-2", children: [_jsx("span", { className: "text-foreground text-lg font-medium", children: entry.value.toLocaleString() }), _jsxs("span", { className: "text-muted-foreground text-xs", children: [pct, "%"] })] })] })] }, entry.name));
18
- }) })] }));
19
- }
20
- //# sourceMappingURL=ContentOverviewChart.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"ContentOverviewChart.js","sourceRoot":"","sources":["../../src/components/ContentOverviewChart.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAA;;AAEZ,OAAO,EAAE,QAAQ,EAAE,GAAG,EAAE,IAAI,EAAE,mBAAmB,EAAE,MAAM,UAAU,CAAA;AAQnE,MAAM,MAAM,GAAG,CAAC,SAAS,EAAE,SAAS,EAAE,SAAS,CAAC,CAAA;AAEhD,MAAM,UAAU,oBAAoB,CAAC,EAAE,SAAS,EAAE,MAAM,EAAE,SAAS,EAA6B;IAC9F,MAAM,KAAK,GAAG,SAAS,GAAG,MAAM,GAAG,SAAS,CAAA;IAC5C,MAAM,IAAI,GAAG;QACX,EAAE,IAAI,EAAE,WAAW,EAAE,KAAK,EAAE,SAAS,EAAE;QACvC,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,EAAE;QACjC,EAAE,IAAI,EAAE,WAAW,EAAE,KAAK,EAAE,SAAS,EAAE;KACxC,CAAA;IAED,IAAI,KAAK,KAAK,CAAC,EAAE,CAAC;QAChB,OAAO,CACL,cAAK,SAAS,EAAC,uEAAuE,+BAEhF,CACP,CAAA;IACH,CAAC;IAED,OAAO,CACL,eAAK,SAAS,EAAC,yBAAyB,aACtC,cAAK,SAAS,EAAC,oBAAoB,YACjC,KAAC,mBAAmB,IAAC,KAAK,EAAC,MAAM,EAAC,MAAM,EAAC,MAAM,YAC7C,KAAC,QAAQ,cACP,KAAC,GAAG,IACF,IAAI,EAAE,IAAI,EACV,EAAE,EAAC,KAAK,EACR,EAAE,EAAC,KAAK,EACR,WAAW,EAAE,EAAE,EACf,WAAW,EAAE,EAAE,EACf,OAAO,EAAC,OAAO,EACf,WAAW,EAAE,CAAC,EACd,MAAM,EAAC,MAAM,YAEZ,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,EAAE,CAAC,CACpB,KAAC,IAAI,IAAW,IAAI,EAAE,MAAM,CAAC,GAAG,CAAC,IAAtB,GAAG,CAAuB,CACtC,CAAC,GACE,GACG,GACS,GAClB,EACN,cAAK,SAAS,EAAC,WAAW,YACvB,IAAI,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,GAAG,EAAE,EAAE;oBACvB,MAAM,GAAG,GAAG,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,KAAK,GAAG,KAAK,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;oBACnE,OAAO,CACL,eAAsB,SAAS,EAAC,yBAAyB,aACvD,eACE,SAAS,EAAC,mCAAmC,EAC7C,KAAK,EAAE,EAAE,eAAe,EAAE,MAAM,CAAC,GAAG,CAAC,EAAE,GACvC,EACF,eAAK,SAAS,EAAC,SAAS,aACtB,eAAM,SAAS,EAAC,yBAAyB,YAAE,KAAK,CAAC,IAAI,GAAQ,EAC7D,eAAK,SAAS,EAAC,2BAA2B,aACxC,eAAM,SAAS,EAAC,qCAAqC,YAClD,KAAK,CAAC,KAAK,CAAC,cAAc,EAAE,GACxB,EACP,gBAAM,SAAS,EAAC,+BAA+B,aAAE,GAAG,SAAS,IACzD,IACF,KAbE,KAAK,CAAC,IAAI,CAcd,CACP,CAAA;gBACH,CAAC,CAAC,GACE,IACF,CACP,CAAA;AACH,CAAC"}
@@ -1,5 +0,0 @@
1
- export interface SEOPerformanceProps {
2
- onNavigate?: (path: string) => void;
3
- }
4
- export declare function SEOPerformance({ onNavigate }: SEOPerformanceProps): import("react/jsx-runtime").JSX.Element | null;
5
- //# sourceMappingURL=SEOPerformance.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"SEOPerformance.d.ts","sourceRoot":"","sources":["../../src/components/SEOPerformance.tsx"],"names":[],"mappings":"AAyCA,MAAM,WAAW,mBAAmB;IAClC,UAAU,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAA;CACpC;AAED,wBAAgB,cAAc,CAAC,EAAE,UAAU,EAAE,EAAE,mBAAmB,kDAqHjE"}
@@ -1,29 +0,0 @@
1
- 'use client';
2
- import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
- import { Search, FileWarning, ImageOff, LinkIcon, ChevronLeft, ChevronRight, } from 'lucide-react';
4
- import { useState } from 'react';
5
- import { gradeFromScore, gradeMeta } from './seo/primitives.js';
6
- import { useApiData } from '../lib/useApiData.js';
7
- /**
8
- * The bands and their colours both come from the SEO primitives — this used to
9
- * restate 80/60 twice on adjacent lines, and `gradeMeta` already returns
10
- * exactly the token classes it was hand-writing.
11
- */
12
- function ScoreBadge({ score }) {
13
- const { text: color, bg } = gradeMeta(gradeFromScore(score));
14
- return (_jsx("span", { className: `inline-flex h-9 w-9 items-center justify-center rounded-full text-sm font-medium ${color} ${bg}`, children: score }));
15
- }
16
- export function SEOPerformance({ onNavigate }) {
17
- const { data, loading, error } = useApiData('/seo/summary');
18
- const [page, setPage] = useState(0);
19
- const perPage = 5;
20
- if (loading || error || !data)
21
- return null;
22
- const issues = data.issuesSummary;
23
- const totalIssues = issues.missingMetaDescriptions + issues.brokenInternalLinks + issues.missingAltText;
24
- const topContent = data.topContent ?? [];
25
- const totalPages = Math.max(1, Math.ceil(topContent.length / perPage));
26
- const visible = topContent.slice(page * perPage, (page + 1) * perPage);
27
- return (_jsxs("div", { className: "border-border bg-card rounded-lg border", children: [_jsxs("div", { className: "border-border flex items-center justify-between border-b p-4", children: [_jsxs("div", { className: "flex items-center gap-2", children: [_jsx(Search, { className: "text-muted-foreground h-4 w-4" }), _jsx("h2", { className: "text-foreground text-sm font-medium", children: "SEO Performance" })] }), totalIssues > 0 && (_jsxs("span", { className: "text-muted-foreground text-xs", children: [totalIssues, " issue", totalIssues !== 1 ? 's' : '', " found"] }))] }), _jsxs("div", { className: "divide-border grid grid-cols-1 divide-y lg:grid-cols-12 lg:divide-x lg:divide-y-0", children: [_jsxs("div", { className: "p-4 lg:col-span-7", children: [_jsx("h3", { className: "text-foreground mb-3 text-sm font-medium", children: "Top Performing Content" }), _jsxs("div", { className: "space-y-2", children: [visible.map((item) => (_jsxs("div", { className: "flex items-center justify-between py-2", children: [_jsxs("div", { className: "mr-3 min-w-0 flex-1", children: [_jsx("p", { className: "text-foreground truncate text-sm font-medium", children: item.title }), _jsx("p", { className: "text-muted-foreground text-xs capitalize", children: item.collection })] }), _jsx(ScoreBadge, { score: item.score })] }, item.id))), visible.length === 0 && (_jsx("p", { className: "text-muted-foreground py-4 text-center text-sm", children: "No published content yet" }))] }), topContent.length > perPage && (_jsxs("div", { className: "text-muted-foreground mt-3 flex items-center justify-between border-t border-gray-100 pt-3 text-xs", children: [_jsxs("span", { children: ["Showing ", page * perPage + 1, "-", Math.min((page + 1) * perPage, topContent.length), " of", ' ', topContent.length] }), _jsxs("div", { className: "flex items-center gap-1", children: [_jsx("button", { onClick: () => setPage(Math.max(0, page - 1)), disabled: page === 0, className: "hover:bg-accent rounded p-1 disabled:opacity-30", children: _jsx(ChevronLeft, { className: "h-3.5 w-3.5" }) }), _jsxs("span", { children: ["Page ", page + 1, " of ", totalPages] }), _jsx("button", { onClick: () => setPage(Math.min(totalPages - 1, page + 1)), disabled: page >= totalPages - 1, className: "hover:bg-accent rounded p-1 disabled:opacity-30", children: _jsx(ChevronRight, { className: "h-3.5 w-3.5" }) })] })] }))] }), _jsxs("div", { className: "p-4 lg:col-span-5", children: [_jsx("h3", { className: "text-foreground mb-3 text-sm font-medium", children: "SEO Issues" }), _jsxs("div", { className: "space-y-3", children: [_jsxs("div", { className: "flex items-center justify-between", children: [_jsxs("div", { className: "flex items-center gap-2", children: [_jsx(FileWarning, { className: "h-4 w-4 text-red-400" }), _jsx("span", { className: "text-foreground text-sm", children: "Missing meta descriptions" })] }), _jsx("span", { className: "text-foreground text-sm font-medium", children: issues.missingMetaDescriptions })] }), _jsxs("div", { className: "flex items-center justify-between", children: [_jsxs("div", { className: "flex items-center gap-2", children: [_jsx(LinkIcon, { className: "h-4 w-4 text-red-400" }), _jsx("span", { className: "text-foreground text-sm", children: "Broken internal links" })] }), _jsx("span", { className: "text-foreground text-sm font-medium", children: issues.brokenInternalLinks })] }), _jsxs("div", { className: "flex items-center justify-between", children: [_jsxs("div", { className: "flex items-center gap-2", children: [_jsx(ImageOff, { className: "h-4 w-4 text-red-400" }), _jsx("span", { className: "text-foreground text-sm", children: "Missing alt text" })] }), _jsx("span", { className: "text-foreground text-sm font-medium", children: issues.missingAltText })] })] }), totalIssues > 0 && (_jsx("button", { onClick: () => onNavigate?.('/seo'), className: "text-primary hover:text-primary/80 mt-4 text-sm font-medium", children: "View All Issues" }))] })] })] }));
28
- }
29
- //# sourceMappingURL=SEOPerformance.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"SEOPerformance.js","sourceRoot":"","sources":["../../src/components/SEOPerformance.tsx"],"names":[],"mappings":"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"}
@@ -1,9 +0,0 @@
1
- type AvatarSize = 'sm' | 'md' | 'lg';
2
- export interface AvatarProps {
3
- src?: string | null;
4
- name?: string;
5
- size?: AvatarSize;
6
- }
7
- export declare function Avatar({ src, name, size }: AvatarProps): import("react/jsx-runtime").JSX.Element;
8
- export {};
9
- //# sourceMappingURL=Avatar.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"Avatar.d.ts","sourceRoot":"","sources":["../../../src/components/ui/Avatar.tsx"],"names":[],"mappings":"AAAA,KAAK,UAAU,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,CAAA;AAEpC,MAAM,WAAW,WAAW;IAC1B,GAAG,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IACnB,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,IAAI,CAAC,EAAE,UAAU,CAAA;CAClB;AAiBD,wBAAgB,MAAM,CAAC,EAAE,GAAG,EAAE,IAAS,EAAE,IAAW,EAAE,EAAE,WAAW,2CAkBlE"}
@@ -1,21 +0,0 @@
1
- import { jsx as _jsx } from "react/jsx-runtime";
2
- const sizeClasses = {
3
- sm: 'h-6 w-6 text-[10px]',
4
- md: 'h-9 w-9 text-xs',
5
- lg: 'h-12 w-12 text-sm',
6
- };
7
- function getInitials(name) {
8
- return name
9
- .split(' ')
10
- .map((part) => part.charAt(0))
11
- .join('')
12
- .toUpperCase()
13
- .slice(0, 2);
14
- }
15
- export function Avatar({ src, name = '', size = 'md' }) {
16
- if (src) {
17
- return (_jsx("img", { src: src, alt: name, className: `inline-block shrink-0 rounded-full object-cover ${sizeClasses[size]}` }));
18
- }
19
- return (_jsx("span", { className: `inline-flex shrink-0 items-center justify-center rounded-full bg-[var(--primary)] font-medium text-[var(--primary-foreground)] ${sizeClasses[size]}`, children: getInitials(name) || '?' }));
20
- }
21
- //# sourceMappingURL=Avatar.js.map
@@ -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":"AAAA,OAAO,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,aAAa,CAAA;AACpD,YAAY,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,aAAa,CAAA;AAC9D,OAAO,EAAE,KAAK,EAAE,aAAa,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,YAAY,CAAA;AAC5E,YAAY,EAAE,UAAU,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,YAAY,CAAA;AAC3E,OAAO,EACL,IAAI,EACJ,UAAU,EACV,SAAS,EACT,eAAe,EACf,WAAW,EACX,UAAU,EACV,YAAY,GACb,MAAM,WAAW,CAAA;AAClB,YAAY,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,WAAW,CAAA;AACxD,OAAO,EAAE,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAA;AACjD,YAAY,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,YAAY,CAAA;AAC3D,OAAO,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,aAAa,CAAA;AACpD,YAAY,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,aAAa,CAAA;AAC9D,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAA;AACpC,YAAY,EAAE,WAAW,EAAE,MAAM,aAAa,CAAA;AAC9C,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAA;AAC5C,YAAY,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAA;AACtD,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAA;AACxC,YAAY,EAAE,aAAa,EAAE,MAAM,eAAe,CAAA;AAClD,OAAO,EAAE,QAAQ,EAAE,cAAc,EAAE,MAAM,YAAY,CAAA;AACrD,YAAY,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAA;AACrD,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAA;AAClC,YAAY,EAAE,UAAU,EAAE,MAAM,YAAY,CAAA;AAC5C,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAA;AAClD,YAAY,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAA;AAC5D,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAA;AAChD,YAAY,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAA;AAC1D,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAA;AAC1C,YAAY,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAA;AACpD,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAA;AAC5C,YAAY,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAA;AACtD,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAA;AAC9C,YAAY,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAA;AACxD,OAAO,EAAE,MAAM,EAAE,mBAAmB,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAA;AAC9E,YAAY,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,aAAa,CAAA;AAC9D,OAAO,EAAE,WAAW,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAA;AACnE,YAAY,EAAE,gBAAgB,EAAE,mBAAmB,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAA;AAC9F,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAA;AAC5C,YAAY,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAA;AACtD,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAA;AACxC,YAAY,EAAE,aAAa,EAAE,MAAM,eAAe,CAAA;AAClD,OAAO,EAAE,UAAU,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAA;AAC7D,YAAY,EAAE,oBAAoB,EAAE,MAAM,iBAAiB,CAAA;AAC3D,OAAO,EACL,eAAe,EACf,aAAa,EACb,aAAa,EACb,mBAAmB,EACnB,iBAAiB,EACjB,oBAAoB,EACpB,mBAAmB,GACpB,MAAM,oBAAoB,CAAA;AAC3B,YAAY,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAA;AAC5D,OAAO,EAAE,eAAe,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAA;AACrE,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAA;AACpD,YAAY,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAA"}
@@ -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"}