@polpo-ai/dashboard 0.15.142 → 0.15.144

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 (80) hide show
  1. package/README.md +23 -3
  2. package/dist/host.d.ts +1 -0
  3. package/dist/host.d.ts.map +1 -1
  4. package/dist/host.js.map +1 -1
  5. package/dist/index.d.ts +1 -0
  6. package/dist/index.d.ts.map +1 -1
  7. package/dist/index.js +1 -0
  8. package/dist/index.js.map +1 -1
  9. package/dist/v2/data/data-sql-panel.d.ts +15 -0
  10. package/dist/v2/data/data-sql-panel.d.ts.map +1 -0
  11. package/dist/v2/data/data-sql-panel.js +111 -0
  12. package/dist/v2/data/data-sql-panel.js.map +1 -0
  13. package/dist/v2/data/data-ui.d.ts +16 -0
  14. package/dist/v2/data/data-ui.d.ts.map +1 -0
  15. package/dist/v2/data/data-ui.js +27 -0
  16. package/dist/v2/data/data-ui.js.map +1 -0
  17. package/dist/v2/data/data-view.d.ts +5 -0
  18. package/dist/v2/data/data-view.d.ts.map +1 -0
  19. package/dist/v2/data/data-view.js +316 -0
  20. package/dist/v2/data/data-view.js.map +1 -0
  21. package/dist/v2/data/host.d.ts +83 -0
  22. package/dist/v2/data/host.d.ts.map +1 -0
  23. package/dist/v2/data/host.js +39 -0
  24. package/dist/v2/data/host.js.map +1 -0
  25. package/dist/v2/data/pagination.d.ts +3 -0
  26. package/dist/v2/data/pagination.d.ts.map +1 -0
  27. package/dist/v2/data/pagination.js +6 -0
  28. package/dist/v2/data/pagination.js.map +1 -0
  29. package/dist/v2/shell/dashboard-shell.d.ts.map +1 -1
  30. package/dist/v2/shell/dashboard-shell.js +2 -1
  31. package/dist/v2/shell/dashboard-shell.js.map +1 -1
  32. package/dist/v2/ui/bits.d.ts +7 -0
  33. package/dist/v2/ui/bits.d.ts.map +1 -1
  34. package/dist/v2/ui/bits.js +3 -0
  35. package/dist/v2/ui/bits.js.map +1 -1
  36. package/dist/v2/ui/code-editor.d.ts +2 -1
  37. package/dist/v2/ui/code-editor.d.ts.map +1 -1
  38. package/dist/v2/ui/code-editor.js +2 -1
  39. package/dist/v2/ui/code-editor.js.map +1 -1
  40. package/dist/v2/ui/copy-id.d.ts +15 -0
  41. package/dist/v2/ui/copy-id.d.ts.map +1 -0
  42. package/dist/v2/ui/copy-id.js +32 -0
  43. package/dist/v2/ui/copy-id.js.map +1 -0
  44. package/dist/v2/ui/data-table.d.ts +12 -1
  45. package/dist/v2/ui/data-table.d.ts.map +1 -1
  46. package/dist/v2/ui/data-table.js +39 -12
  47. package/dist/v2/ui/data-table.js.map +1 -1
  48. package/dist/v2/ui/refresh-button.d.ts +2 -1
  49. package/dist/v2/ui/refresh-button.d.ts.map +1 -1
  50. package/dist/v2/ui/refresh-button.js +2 -2
  51. package/dist/v2/ui/refresh-button.js.map +1 -1
  52. package/dist/v2/ui/search-input.d.ts +19 -0
  53. package/dist/v2/ui/search-input.d.ts.map +1 -0
  54. package/dist/v2/ui/search-input.js +17 -0
  55. package/dist/v2/ui/search-input.js.map +1 -0
  56. package/dist/v2/ui/select-field.d.ts +81 -0
  57. package/dist/v2/ui/select-field.d.ts.map +1 -0
  58. package/dist/v2/ui/select-field.js +89 -0
  59. package/dist/v2/ui/select-field.js.map +1 -0
  60. package/dist/v2/ui/select.d.ts +12 -1
  61. package/dist/v2/ui/select.d.ts.map +1 -1
  62. package/dist/v2/ui/select.js +14 -2
  63. package/dist/v2/ui/select.js.map +1 -1
  64. package/dist/v2/ui/table-row-actions.d.ts +15 -0
  65. package/dist/v2/ui/table-row-actions.d.ts.map +1 -0
  66. package/dist/v2/ui/table-row-actions.js +22 -0
  67. package/dist/v2/ui/table-row-actions.js.map +1 -0
  68. package/dist/v2/ui/tabs.d.ts +40 -0
  69. package/dist/v2/ui/tabs.d.ts.map +1 -0
  70. package/dist/v2/ui/tabs.js +46 -0
  71. package/dist/v2/ui/tabs.js.map +1 -0
  72. package/dist/v2/ui/tooltip.d.ts +7 -0
  73. package/dist/v2/ui/tooltip.d.ts.map +1 -0
  74. package/dist/v2/ui/tooltip.js +18 -0
  75. package/dist/v2/ui/tooltip.js.map +1 -0
  76. package/dist/v2/views/data.d.ts +2 -0
  77. package/dist/v2/views/data.d.ts.map +1 -0
  78. package/dist/v2/views/data.js +11 -0
  79. package/dist/v2/views/data.js.map +1 -0
  80. package/package.json +4 -3
@@ -15,4 +15,7 @@ export function EmptyBox({ children }) {
15
15
  export function Toggle({ checked, onChange, disabled, label, }) {
16
16
  return (_jsx("button", { type: "button", role: "switch", "aria-checked": checked, "aria-label": label, disabled: disabled, onClick: onChange, className: `relative inline-flex h-[18px] w-[30px] shrink-0 items-center rounded-full transition-colors disabled:opacity-40 ${checked ? "bg-brand" : "bg-secondary"}`, children: _jsx("span", { className: `inline-block h-3.5 w-3.5 transform rounded-full bg-background shadow-sm transition-transform ${checked ? "translate-x-[13px]" : "translate-x-[2px]"}` }) }));
17
17
  }
18
+ export function EmptyState({ icon, title, children, action, }) {
19
+ return (_jsxs("div", { className: "flex flex-col items-center gap-3 rounded-lg border border-dashed border-border px-3.5 py-12 text-center", children: [_jsx("span", { className: "grid h-11 w-11 place-items-center rounded-lg border border-border bg-secondary text-muted-foreground", children: icon }), _jsxs("div", { children: [_jsx("div", { className: "text-sm font-medium text-foreground", children: title }), children && (_jsx("div", { className: "mx-auto mt-1 max-w-md text-[13px] leading-5 text-muted-foreground", children: children }))] }), action] }));
20
+ }
18
21
  //# sourceMappingURL=bits.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"bits.js","sourceRoot":"","sources":["../../../src/v2/ui/bits.tsx"],"names":[],"mappings":";AAEA,sDAAsD;AACtD,MAAM,UAAU,OAAO,CAAC,EACtB,KAAK,EACL,KAAK,EACL,MAAM,EACN,QAAQ,GAMT;IACC,OAAO,CACL,mBAAS,SAAS,EAAC,iBAAiB,aACjC,CAAC,KAAK,IAAI,KAAK,KAAK,SAAS,IAAI,MAAM,CAAC,IAAI,CAC3C,eAAK,SAAS,EAAC,gDAAgD,aAC7D,eAAK,SAAS,EAAC,2BAA2B,aACvC,KAAK,IAAI,CACR,aAAI,SAAS,EAAC,yCAAyC,YACpD,KAAK,GACH,CACN,EACA,KAAK,KAAK,SAAS,IAAI,CACtB,eACE,SAAS,EAAC,sCAAsC,kCAG/C,KAAK,GACD,CACR,IACG,EACL,MAAM,IACH,CACP,EACA,QAAQ,IACD,CACX,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,IAAI,CAAC,EACnB,QAAQ,EACR,KAAK,GAIN;IACC,OAAO,CACL,eACE,SAAS,EAAE,6EACT,KAAK;YACH,CAAC,CAAC,wCAAwC;YAC1C,CAAC,CAAC,qDACN,EAAE,YAED,QAAQ,GACJ,CACR,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,QAAQ,CAAC,EAAE,QAAQ,EAA2B;IAC5D,OAAO,CACL,cAAK,SAAS,EAAC,gGAAgG,YAC5G,QAAQ,GACL,CACP,CAAC;AACJ,CAAC;AAED,sDAAsD;AACtD,MAAM,UAAU,MAAM,CAAC,EACrB,OAAO,EACP,QAAQ,EACR,QAAQ,EACR,KAAK,GAMN;IACC,OAAO,CACL,iBACE,IAAI,EAAC,QAAQ,EACb,IAAI,EAAC,QAAQ,kBACC,OAAO,gBACT,KAAK,EACjB,QAAQ,EAAE,QAAQ,EAClB,OAAO,EAAE,QAAQ,EACjB,SAAS,EAAE,mHACT,OAAO,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,cACzB,EAAE,YAEF,eACE,SAAS,EAAE,gGACT,OAAO,CAAC,CAAC,CAAC,oBAAoB,CAAC,CAAC,CAAC,mBACnC,EAAE,GACF,GACK,CACV,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"bits.js","sourceRoot":"","sources":["../../../src/v2/ui/bits.tsx"],"names":[],"mappings":";AAEA,sDAAsD;AACtD,MAAM,UAAU,OAAO,CAAC,EACtB,KAAK,EACL,KAAK,EACL,MAAM,EACN,QAAQ,GAMT;IACC,OAAO,CACL,mBAAS,SAAS,EAAC,iBAAiB,aACjC,CAAC,KAAK,IAAI,KAAK,KAAK,SAAS,IAAI,MAAM,CAAC,IAAI,CAC3C,eAAK,SAAS,EAAC,gDAAgD,aAC7D,eAAK,SAAS,EAAC,2BAA2B,aACvC,KAAK,IAAI,CACR,aAAI,SAAS,EAAC,yCAAyC,YACpD,KAAK,GACH,CACN,EACA,KAAK,KAAK,SAAS,IAAI,CACtB,eACE,SAAS,EAAC,sCAAsC,kCAG/C,KAAK,GACD,CACR,IACG,EACL,MAAM,IACH,CACP,EACA,QAAQ,IACD,CACX,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,IAAI,CAAC,EACnB,QAAQ,EACR,KAAK,GAIN;IACC,OAAO,CACL,eACE,SAAS,EAAE,6EACT,KAAK;YACH,CAAC,CAAC,wCAAwC;YAC1C,CAAC,CAAC,qDACN,EAAE,YAED,QAAQ,GACJ,CACR,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,QAAQ,CAAC,EAAE,QAAQ,EAA2B;IAC5D,OAAO,CACL,cAAK,SAAS,EAAC,gGAAgG,YAC5G,QAAQ,GACL,CACP,CAAC;AACJ,CAAC;AAED,sDAAsD;AACtD,MAAM,UAAU,MAAM,CAAC,EACrB,OAAO,EACP,QAAQ,EACR,QAAQ,EACR,KAAK,GAMN;IACC,OAAO,CACL,iBACE,IAAI,EAAC,QAAQ,EACb,IAAI,EAAC,QAAQ,kBACC,OAAO,gBACT,KAAK,EACjB,QAAQ,EAAE,QAAQ,EAClB,OAAO,EAAE,QAAQ,EACjB,SAAS,EAAE,mHACT,OAAO,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,cACzB,EAAE,YAEF,eACE,SAAS,EAAE,gGACT,OAAO,CAAC,CAAC,CAAC,oBAAoB,CAAC,CAAC,CAAC,mBACnC,EAAE,GACF,GACK,CACV,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,EACzB,IAAI,EACJ,KAAK,EACL,QAAQ,EACR,MAAM,GAOP;IACC,OAAO,CACL,eAAK,SAAS,EAAC,yGAAyG,aACtH,eAAM,SAAS,EAAC,sGAAsG,YACnH,IAAI,GACA,EACP,0BACE,cAAK,SAAS,EAAC,qCAAqC,YAAE,KAAK,GAAO,EACjE,QAAQ,IAAI,CACX,cAAK,SAAS,EAAC,mEAAmE,YAC/E,QAAQ,GACL,CACP,IACG,EACL,MAAM,IACH,CACP,CAAC;AACJ,CAAC"}
@@ -1,9 +1,10 @@
1
- export declare function CodeEditor({ value, onChange, language, height, readOnly, placeholder, }: {
1
+ export declare function CodeEditor({ value, onChange, language, height, readOnly, placeholder, ariaLabel, }: {
2
2
  value: string;
3
3
  onChange: (value: string) => void;
4
4
  language: string;
5
5
  height?: string | number;
6
6
  readOnly?: boolean;
7
7
  placeholder?: string;
8
+ ariaLabel?: string;
8
9
  }): import("react/jsx-runtime").JSX.Element;
9
10
  //# sourceMappingURL=code-editor.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"code-editor.d.ts","sourceRoot":"","sources":["../../../src/v2/ui/code-editor.tsx"],"names":[],"mappings":"AAkBA,wBAAgB,UAAU,CAAC,EACzB,KAAK,EACL,QAAQ,EACR,QAAQ,EACR,MAAY,EACZ,QAAgB,EAChB,WAAW,GACZ,EAAE;IACD,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAClC,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IACzB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB,2CA+BA"}
1
+ {"version":3,"file":"code-editor.d.ts","sourceRoot":"","sources":["../../../src/v2/ui/code-editor.tsx"],"names":[],"mappings":"AAkBA,wBAAgB,UAAU,CAAC,EACzB,KAAK,EACL,QAAQ,EACR,QAAQ,EACR,MAAY,EACZ,QAAgB,EAChB,WAAW,EACX,SAAS,GACV,EAAE;IACD,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAClC,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IACzB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,2CAgCA"}
@@ -7,10 +7,11 @@ const Editor = lazy(() => import("@monaco-editor/react").then((module) => ({ def
7
7
  function EditorLoading() {
8
8
  return (_jsxs("div", { className: "flex h-full min-h-[80px] items-center justify-center text-sm text-muted-foreground", children: [_jsx(CircleNotch, { className: "mr-2 h-4 w-4 animate-spin" }), " Loading editor\u2026"] }));
9
9
  }
10
- export function CodeEditor({ value, onChange, language, height = 200, readOnly = false, placeholder, }) {
10
+ export function CodeEditor({ value, onChange, language, height = 200, readOnly = false, placeholder, ariaLabel, }) {
11
11
  const { resolvedTheme } = useTheme();
12
12
  return (_jsx("div", { className: "overflow-hidden rounded-lg border border-border", style: { height }, children: _jsx(Suspense, { fallback: _jsx(EditorLoading, {}), children: _jsx(Editor, { height: "100%", language: language, theme: resolvedTheme === "light" ? "vs" : "vs-dark", value: value, onChange: (next) => onChange(next ?? ""), options: {
13
13
  readOnly,
14
+ ariaLabel,
14
15
  placeholder,
15
16
  minimap: { enabled: false },
16
17
  fontSize: 12.5,
@@ -1 +1 @@
1
- {"version":3,"file":"code-editor.js","sourceRoot":"","sources":["../../../src/v2/ui/code-editor.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAC;;AAEb,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AACvC,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AACvC,OAAO,EAAE,WAAW,EAAE,MAAM,gCAAgC,CAAC;AAE7D,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,EAAE,CACvB,MAAM,CAAC,sBAAsB,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,MAAM,CAAC,OAAO,EAAE,CAAC,CAAC,CAC/E,CAAC;AAEF,SAAS,aAAa;IACpB,OAAO,CACL,eAAK,SAAS,EAAC,oFAAoF,aACjG,KAAC,WAAW,IAAC,SAAS,EAAC,2BAA2B,GAAG,6BACjD,CACP,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,EACzB,KAAK,EACL,QAAQ,EACR,QAAQ,EACR,MAAM,GAAG,GAAG,EACZ,QAAQ,GAAG,KAAK,EAChB,WAAW,GAQZ;IACC,MAAM,EAAE,aAAa,EAAE,GAAG,QAAQ,EAAE,CAAC;IAErC,OAAO,CACL,cACE,SAAS,EAAC,iDAAiD,EAC3D,KAAK,EAAE,EAAE,MAAM,EAAE,YAEjB,KAAC,QAAQ,IAAC,QAAQ,EAAE,KAAC,aAAa,KAAG,YACnC,KAAC,MAAM,IACL,MAAM,EAAC,MAAM,EACb,QAAQ,EAAE,QAAQ,EAClB,KAAK,EAAE,aAAa,KAAK,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,EACnD,KAAK,EAAE,KAAK,EACZ,QAAQ,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,QAAQ,CAAC,IAAI,IAAI,EAAE,CAAC,EACxC,OAAO,EAAE;oBACP,QAAQ;oBACR,WAAW;oBACX,OAAO,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE;oBAC3B,QAAQ,EAAE,IAAI;oBACd,WAAW,EAAE,IAAI;oBACjB,oBAAoB,EAAE,KAAK;oBAC3B,QAAQ,EAAE,IAAI;oBACd,eAAe,EAAE,IAAI;oBACrB,OAAO,EAAE,CAAC;oBACV,OAAO,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE;iBACjC,GACD,GACO,GACP,CACP,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"code-editor.js","sourceRoot":"","sources":["../../../src/v2/ui/code-editor.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAC;;AAEb,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AACvC,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AACvC,OAAO,EAAE,WAAW,EAAE,MAAM,gCAAgC,CAAC;AAE7D,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,EAAE,CACvB,MAAM,CAAC,sBAAsB,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,MAAM,CAAC,OAAO,EAAE,CAAC,CAAC,CAC/E,CAAC;AAEF,SAAS,aAAa;IACpB,OAAO,CACL,eAAK,SAAS,EAAC,oFAAoF,aACjG,KAAC,WAAW,IAAC,SAAS,EAAC,2BAA2B,GAAG,6BACjD,CACP,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,EACzB,KAAK,EACL,QAAQ,EACR,QAAQ,EACR,MAAM,GAAG,GAAG,EACZ,QAAQ,GAAG,KAAK,EAChB,WAAW,EACX,SAAS,GASV;IACC,MAAM,EAAE,aAAa,EAAE,GAAG,QAAQ,EAAE,CAAC;IAErC,OAAO,CACL,cACE,SAAS,EAAC,iDAAiD,EAC3D,KAAK,EAAE,EAAE,MAAM,EAAE,YAEjB,KAAC,QAAQ,IAAC,QAAQ,EAAE,KAAC,aAAa,KAAG,YACnC,KAAC,MAAM,IACL,MAAM,EAAC,MAAM,EACb,QAAQ,EAAE,QAAQ,EAClB,KAAK,EAAE,aAAa,KAAK,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,EACnD,KAAK,EAAE,KAAK,EACZ,QAAQ,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,QAAQ,CAAC,IAAI,IAAI,EAAE,CAAC,EACxC,OAAO,EAAE;oBACP,QAAQ;oBACR,SAAS;oBACT,WAAW;oBACX,OAAO,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE;oBAC3B,QAAQ,EAAE,IAAI;oBACd,WAAW,EAAE,IAAI;oBACjB,oBAAoB,EAAE,KAAK;oBAC3B,QAAQ,EAAE,IAAI;oBACd,eAAe,EAAE,IAAI;oBACrB,OAAO,EAAE,CAAC;oBACV,OAAO,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE;iBACjC,GACD,GACO,GACP,CACP,CAAC;AACJ,CAAC"}
@@ -0,0 +1,15 @@
1
+ /**
2
+ * An inline, copyable identifier — the raw id you need to grep a log or call
3
+ * the API, labelled so it reads as an id rather than a stray string.
4
+ *
5
+ * The copy affordance is a bare icon that only appears on hover: at rest the
6
+ * id itself is the content, and a permanently-visible bordered button would
7
+ * outweigh it. `focus-visible` keeps it reachable without a mouse.
8
+ */
9
+ export declare function CopyId({ id, label, className, }: {
10
+ id: string;
11
+ /** Overrides the leading label (e.g. "run id"). */
12
+ label?: string;
13
+ className?: string;
14
+ }): import("react/jsx-runtime").JSX.Element;
15
+ //# sourceMappingURL=copy-id.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"copy-id.d.ts","sourceRoot":"","sources":["../../../src/v2/ui/copy-id.tsx"],"names":[],"mappings":"AAWA;;;;;;;GAOG;AACH,wBAAgB,MAAM,CAAC,EACrB,EAAE,EACF,KAAY,EACZ,SAAS,GACV,EAAE;IACD,EAAE,EAAE,MAAM,CAAC;IACX,mDAAmD;IACnD,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,2CAmDA"}
@@ -0,0 +1,32 @@
1
+ "use client";
2
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
+ import { useState } from "react";
4
+ import { Copy, Check } from "@phosphor-icons/react/dist/ssr";
5
+ import { Tooltip, TooltipContent, TooltipTrigger, } from "./tooltip.js";
6
+ import { cn } from "../utils.js";
7
+ /**
8
+ * An inline, copyable identifier — the raw id you need to grep a log or call
9
+ * the API, labelled so it reads as an id rather than a stray string.
10
+ *
11
+ * The copy affordance is a bare icon that only appears on hover: at rest the
12
+ * id itself is the content, and a permanently-visible bordered button would
13
+ * outweigh it. `focus-visible` keeps it reachable without a mouse.
14
+ */
15
+ export function CopyId({ id, label = "id", className, }) {
16
+ const [copied, setCopied] = useState(false);
17
+ const copy = async () => {
18
+ try {
19
+ await navigator.clipboard.writeText(id);
20
+ setCopied(true);
21
+ setTimeout(() => setCopied(false), 1500);
22
+ }
23
+ catch {
24
+ /* clipboard blocked — nothing useful to say */
25
+ }
26
+ };
27
+ // The whole thing is the target — the icon is an affordance, not the hit
28
+ // area. A 24px icon would be a needlessly small thing to aim at when the
29
+ // id right next to it means the same "copy me".
30
+ return (_jsxs(Tooltip, { children: [_jsx(TooltipTrigger, { render: _jsxs("button", { type: "button", onClick: copy, "aria-label": copied ? "Copied" : `Copy ${label}`, className: cn("group/copyid inline-flex min-w-0 items-center gap-1.5 rounded text-left", className), children: [_jsx("span", { className: "shrink-0 font-mono text-[10px] uppercase tracking-[0.14em] text-muted-foreground/50", children: label }), _jsx("span", { className: "truncate font-mono text-[12px] text-muted-foreground transition-colors group-hover/copyid:text-foreground", children: id }), _jsx("span", { "aria-hidden": true, className: "grid size-5 shrink-0 place-items-center text-muted-foreground opacity-0 transition-opacity group-hover/copyid:opacity-100 group-focus-visible/copyid:opacity-100", children: copied ? (_jsx(Check, { size: 12, weight: "bold", className: "text-brand" })) : (_jsx(Copy, { size: 12 })) })] }) }), _jsx(TooltipContent, { children: copied ? "Copied" : `Copy ${label}` })] }));
31
+ }
32
+ //# sourceMappingURL=copy-id.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"copy-id.js","sourceRoot":"","sources":["../../../src/v2/ui/copy-id.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAC;;AAEb,OAAO,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AACjC,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,gCAAgC,CAAC;AAC7D,OAAO,EACL,OAAO,EACP,cAAc,EACd,cAAc,GACf,MAAM,cAAc,CAAC;AACtB,OAAO,EAAE,EAAE,EAAE,MAAM,aAAa,CAAC;AAEjC;;;;;;;GAOG;AACH,MAAM,UAAU,MAAM,CAAC,EACrB,EAAE,EACF,KAAK,GAAG,IAAI,EACZ,SAAS,GAMV;IACC,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;IAE5C,MAAM,IAAI,GAAG,KAAK,IAAI,EAAE;QACtB,IAAI,CAAC;YACH,MAAM,SAAS,CAAC,SAAS,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC;YACxC,SAAS,CAAC,IAAI,CAAC,CAAC;YAChB,UAAU,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE,IAAI,CAAC,CAAC;QAC3C,CAAC;QAAC,MAAM,CAAC;YACP,+CAA+C;QACjD,CAAC;IACH,CAAC,CAAC;IAEF,yEAAyE;IACzE,yEAAyE;IACzE,gDAAgD;IAChD,OAAO,CACL,MAAC,OAAO,eACN,KAAC,cAAc,IACb,MAAM,EACJ,kBACE,IAAI,EAAC,QAAQ,EACb,OAAO,EAAE,IAAI,gBACD,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,KAAK,EAAE,EAC/C,SAAS,EAAE,EAAE,CACX,yEAAyE,EACzE,SAAS,CACV,aAED,eAAM,SAAS,EAAC,qFAAqF,YAClG,KAAK,GACD,EACP,eAAM,SAAS,EAAC,2GAA2G,YACxH,EAAE,GACE,EACP,oCAEE,SAAS,EAAC,kKAAkK,YAE3K,MAAM,CAAC,CAAC,CAAC,CACR,KAAC,KAAK,IAAC,IAAI,EAAE,EAAE,EAAE,MAAM,EAAC,MAAM,EAAC,SAAS,EAAC,YAAY,GAAG,CACzD,CAAC,CAAC,CAAC,CACF,KAAC,IAAI,IAAC,IAAI,EAAE,EAAE,GAAI,CACnB,GACI,IACA,GAEX,EACF,KAAC,cAAc,cAAE,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,KAAK,EAAE,GAAkB,IAC9D,CACX,CAAC;AACJ,CAAC"}
@@ -29,12 +29,23 @@ export type DataTableProps<T> = {
29
29
  filters?: ReactNode;
30
30
  /** Right-aligned toolbar slot (e.g. a refresh control). */
31
31
  rightSlot?: ReactNode;
32
+ /** Keep the table within its container instead of allowing horizontal scroll. */
33
+ fitWidth?: boolean;
32
34
  pageSize?: number;
33
35
  initialSorting?: SortingState;
36
+ /** A server-owned page. Keeps the shared footer without paginating a page again. */
37
+ pagination?: {
38
+ pageIndex: number;
39
+ pageSize: number;
40
+ rowCount: number;
41
+ hasNextPage: boolean;
42
+ disabled?: boolean;
43
+ onPageChange: (pageIndex: number) => void;
44
+ };
34
45
  /** Empty state when there is no data at all. */
35
46
  empty?: ReactNode;
36
47
  /** Empty state when filters/search exclude everything. */
37
48
  emptyFiltered?: ReactNode;
38
49
  };
39
- export declare function DataTable<T>({ columns, data, getRowId, rowHref, rowOnClick, renderExpandedRow, isRowExpanded, searchPlaceholder, searchFn, filters, rightSlot, pageSize, initialSorting, empty, emptyFiltered, }: DataTableProps<T>): import("react/jsx-runtime").JSX.Element;
50
+ export declare function DataTable<T>({ columns, data, getRowId, rowHref, rowOnClick, renderExpandedRow, isRowExpanded, searchPlaceholder, searchFn, filters, rightSlot, fitWidth, pageSize, initialSorting, pagination, empty, emptyFiltered, }: DataTableProps<T>): import("react/jsx-runtime").JSX.Element;
40
51
  //# sourceMappingURL=data-table.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"data-table.d.ts","sourceRoot":"","sources":["../../../src/v2/ui/data-table.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAsB,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AAC3D,OAAO,EACL,KAAK,SAAS,EACd,KAAK,YAAY,EAQlB,MAAM,uBAAuB,CAAC;AAW/B,gEAAgE;AAChE,MAAM,MAAM,UAAU,GAAG;IACvB,KAAK,CAAC,EAAE,MAAM,GAAG,OAAO,GAAG,QAAQ,CAAC;IACpC,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,yCAAyC;IACzC,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,CAAC;AAEF,MAAM,MAAM,cAAc,CAAC,CAAC,IAAI;IAC9B,OAAO,EAAE,SAAS,CAAC,CAAC,EAAE,OAAO,CAAC,EAAE,CAAC;IACjC,IAAI,EAAE,CAAC,EAAE,CAAC;IACV,yCAAyC;IACzC,QAAQ,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,KAAK,MAAM,CAAC;IAC9B,wEAAwE;IACxE,OAAO,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,KAAK,MAAM,CAAC;IAC7B,+CAA+C;IAC/C,UAAU,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,KAAK,IAAI,CAAC;IAC9B,iFAAiF;IACjF,iBAAiB,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,KAAK,SAAS,CAAC;IAC1C,wDAAwD;IACxD,aAAa,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,KAAK,OAAO,CAAC;IACpC,uCAAuC;IACvC,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,+EAA+E;IAC/E,QAAQ,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,EAAE,KAAK,EAAE,MAAM,KAAK,OAAO,CAAC;IAC9C,6DAA6D;IAC7D,OAAO,CAAC,EAAE,SAAS,CAAC;IACpB,2DAA2D;IAC3D,SAAS,CAAC,EAAE,SAAS,CAAC;IACtB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,cAAc,CAAC,EAAE,YAAY,CAAC;IAC9B,gDAAgD;IAChD,KAAK,CAAC,EAAE,SAAS,CAAC;IAClB,0DAA0D;IAC1D,aAAa,CAAC,EAAE,SAAS,CAAC;CAC3B,CAAC;AAEF,wBAAgB,SAAS,CAAC,CAAC,EAAE,EAC3B,OAAO,EACP,IAAI,EACJ,QAAQ,EACR,OAAO,EACP,UAAU,EACV,iBAAiB,EACjB,aAAa,EACb,iBAAiB,EACjB,QAAQ,EACR,OAAO,EACP,SAAS,EACT,QAAa,EACb,cAAmB,EACnB,KAAK,EACL,aAAa,GACd,EAAE,cAAc,CAAC,CAAC,CAAC,2CAsOnB"}
1
+ {"version":3,"file":"data-table.d.ts","sourceRoot":"","sources":["../../../src/v2/ui/data-table.tsx"],"names":[],"mappings":"AAGA,OAAO,EAAsB,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AAE3D,OAAO,EACL,KAAK,SAAS,EACd,KAAK,YAAY,EAQlB,MAAM,uBAAuB,CAAC;AAS/B,gEAAgE;AAChE,MAAM,MAAM,UAAU,GAAG;IACvB,KAAK,CAAC,EAAE,MAAM,GAAG,OAAO,GAAG,QAAQ,CAAC;IACpC,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,yCAAyC;IACzC,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,CAAC;AAEF,MAAM,MAAM,cAAc,CAAC,CAAC,IAAI;IAC9B,OAAO,EAAE,SAAS,CAAC,CAAC,EAAE,OAAO,CAAC,EAAE,CAAC;IACjC,IAAI,EAAE,CAAC,EAAE,CAAC;IACV,yCAAyC;IACzC,QAAQ,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,KAAK,MAAM,CAAC;IAC9B,wEAAwE;IACxE,OAAO,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,KAAK,MAAM,CAAC;IAC7B,+CAA+C;IAC/C,UAAU,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,KAAK,IAAI,CAAC;IAC9B,iFAAiF;IACjF,iBAAiB,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,KAAK,SAAS,CAAC;IAC1C,wDAAwD;IACxD,aAAa,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,KAAK,OAAO,CAAC;IACpC,uCAAuC;IACvC,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,+EAA+E;IAC/E,QAAQ,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,EAAE,KAAK,EAAE,MAAM,KAAK,OAAO,CAAC;IAC9C,6DAA6D;IAC7D,OAAO,CAAC,EAAE,SAAS,CAAC;IACpB,2DAA2D;IAC3D,SAAS,CAAC,EAAE,SAAS,CAAC;IACtB,iFAAiF;IACjF,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,cAAc,CAAC,EAAE,YAAY,CAAC;IAC9B,oFAAoF;IACpF,UAAU,CAAC,EAAE;QACX,SAAS,EAAE,MAAM,CAAC;QAClB,QAAQ,EAAE,MAAM,CAAC;QACjB,QAAQ,EAAE,MAAM,CAAC;QACjB,WAAW,EAAE,OAAO,CAAC;QACrB,QAAQ,CAAC,EAAE,OAAO,CAAC;QACnB,YAAY,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,IAAI,CAAC;KAC3C,CAAC;IACF,gDAAgD;IAChD,KAAK,CAAC,EAAE,SAAS,CAAC;IAClB,0DAA0D;IAC1D,aAAa,CAAC,EAAE,SAAS,CAAC;CAC3B,CAAC;AAEF,wBAAgB,SAAS,CAAC,CAAC,EAAE,EAC3B,OAAO,EACP,IAAI,EACJ,QAAQ,EACR,OAAO,EACP,UAAU,EACV,iBAAiB,EACjB,aAAa,EACb,iBAAiB,EACjB,QAAQ,EACR,OAAO,EACP,SAAS,EACT,QAAgB,EAChB,QAAa,EACb,cAAmB,EACnB,UAAU,EACV,KAAK,EACL,aAAa,GACd,EAAE,cAAc,CAAC,CAAC,CAAC,2CAoRnB"}
@@ -1,10 +1,11 @@
1
1
  "use client";
2
2
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
+ import { SearchInput } from "./search-input.js";
3
4
  import { Fragment, useState } from "react";
4
- import { flexRender, getCoreRowModel, getSortedRowModel, getFilteredRowModel, getPaginationRowModel, useReactTable, } from "@tanstack/react-table";
5
- import { MagnifyingGlass, CaretUp, CaretDown, CaretUpDown, CaretLeft, CaretRight, } from "@phosphor-icons/react/dist/ssr";
6
5
  import { useDashboardHost } from "../../host.js";
7
- export function DataTable({ columns, data, getRowId, rowHref, rowOnClick, renderExpandedRow, isRowExpanded, searchPlaceholder, searchFn, filters, rightSlot, pageSize = 12, initialSorting = [], empty, emptyFiltered, }) {
6
+ import { flexRender, getCoreRowModel, getSortedRowModel, getFilteredRowModel, getPaginationRowModel, useReactTable, } from "@tanstack/react-table";
7
+ import { CaretUp, CaretDown, CaretUpDown, CaretLeft, CaretRight, } from "@phosphor-icons/react/dist/ssr";
8
+ export function DataTable({ columns, data, getRowId, rowHref, rowOnClick, renderExpandedRow, isRowExpanded, searchPlaceholder, searchFn, filters, rightSlot, fitWidth = false, pageSize = 12, initialSorting = [], pagination, empty, emptyFiltered, }) {
8
9
  const host = useDashboardHost();
9
10
  const [sorting, setSorting] = useState(initialSorting);
10
11
  const [globalFilter, setGlobalFilter] = useState("");
@@ -14,12 +15,27 @@ export function DataTable({ columns, data, getRowId, rowHref, rowOnClick, render
14
15
  return true;
15
16
  if (searchFn)
16
17
  return searchFn(row.original, q);
17
- return Object.values(row.original).some((v) => String(v ?? "").toLowerCase().includes(q));
18
+ return Object.values(row.original).some((v) => String(v ?? "")
19
+ .toLowerCase()
20
+ .includes(q));
18
21
  };
19
22
  const table = useReactTable({
20
23
  data,
21
24
  columns,
22
- state: { sorting, globalFilter },
25
+ state: {
26
+ sorting,
27
+ globalFilter,
28
+ ...(pagination
29
+ ? {
30
+ pagination: {
31
+ pageIndex: pagination.pageIndex,
32
+ pageSize: pagination.pageSize,
33
+ },
34
+ }
35
+ : {}),
36
+ },
37
+ manualPagination: !!pagination,
38
+ rowCount: pagination?.rowCount,
23
39
  onSortingChange: setSorting,
24
40
  onGlobalFilterChange: setGlobalFilter,
25
41
  globalFilterFn,
@@ -27,14 +43,19 @@ export function DataTable({ columns, data, getRowId, rowHref, rowOnClick, render
27
43
  getCoreRowModel: getCoreRowModel(),
28
44
  getSortedRowModel: getSortedRowModel(),
29
45
  getFilteredRowModel: getFilteredRowModel(),
30
- getPaginationRowModel: getPaginationRowModel(),
46
+ getPaginationRowModel: pagination ? undefined : getPaginationRowModel(),
31
47
  initialState: { pagination: { pageSize } },
32
48
  });
33
49
  const rows = table.getRowModel().rows;
34
50
  const filteredCount = table.getFilteredRowModel().rows.length;
35
51
  const showToolbar = searchPlaceholder || filters || rightSlot;
36
- const showPagination = table.getPageCount() > 1;
37
- return (_jsxs("div", { className: "flex flex-col gap-3", children: [showToolbar && (_jsxs("div", { className: "flex flex-wrap items-center gap-2", children: [searchPlaceholder && (_jsxs("div", { className: "relative", children: [_jsx(MagnifyingGlass, { size: 14, className: "pointer-events-none absolute left-2.5 top-1/2 -translate-y-1/2 text-muted-foreground" }), _jsx("input", { value: globalFilter, onChange: (e) => setGlobalFilter(e.target.value), placeholder: searchPlaceholder, className: "h-8 w-56 rounded-md border border-border bg-transparent pl-8 pr-3 text-[13px] text-foreground placeholder:text-muted-foreground/50 focus:border-ring/50 focus:outline-none" })] })), filters, _jsx("div", { className: "ml-auto flex items-center gap-3", children: rightSlot })] })), _jsxs("div", { className: "overflow-hidden rounded-lg border border-border bg-card", children: [_jsx("div", { className: "overflow-x-auto", children: _jsxs("table", { className: "w-full border-collapse text-sm", children: [_jsx("thead", { children: table.getHeaderGroups().map((hg) => (_jsx("tr", { className: "border-b border-border", children: hg.headers.map((header) => {
52
+ const showPagination = pagination
53
+ ? pagination.rowCount > pagination.pageSize || pagination.pageIndex > 0
54
+ : table.getPageCount() > 1;
55
+ const displayedPageSize = pagination?.pageSize ?? pageSize;
56
+ const totalCount = pagination?.rowCount ?? filteredCount;
57
+ const pageStart = table.getState().pagination.pageIndex * displayedPageSize;
58
+ return (_jsxs("div", { className: "flex flex-col gap-3", children: [showToolbar && (_jsxs("div", { className: "flex flex-wrap items-center gap-2", children: [searchPlaceholder && (_jsx(SearchInput, { value: globalFilter, onChange: setGlobalFilter, placeholder: searchPlaceholder })), filters, _jsx("div", { className: "ml-auto flex items-center gap-3", children: rightSlot })] })), _jsxs("div", { className: "overflow-hidden rounded-lg border border-border bg-card", children: [_jsx("div", { className: fitWidth ? "overflow-hidden" : "overflow-x-auto", children: _jsxs("table", { className: `w-full border-collapse text-sm ${fitWidth ? "table-fixed" : ""}`, children: [_jsx("thead", { children: table.getHeaderGroups().map((hg) => (_jsx("tr", { className: "border-b border-border", children: hg.headers.map((header) => {
38
59
  const meta = header.column.columnDef.meta;
39
60
  const canSort = header.column.getCanSort();
40
61
  const sorted = header.column.getIsSorted();
@@ -42,9 +63,7 @@ export function DataTable({ columns, data, getRowId, rowHref, rowOnClick, render
42
63
  ? "text-right"
43
64
  : meta?.align === "center"
44
65
  ? "text-center"
45
- : "text-left"} ${meta?.headerClassName ?? ""}`, children: header.isPlaceholder ? null : canSort ? (_jsxs("button", { type: "button", onClick: header.column.getToggleSortingHandler(), className: `inline-flex items-center gap-1 transition-colors hover:text-foreground ${meta?.align === "right"
46
- ? "flex-row-reverse"
47
- : ""}`, children: [flexRender(header.column.columnDef.header, header.getContext()), sorted === "asc" ? (_jsx(CaretUp, { size: 11, weight: "bold", className: "text-foreground" })) : sorted === "desc" ? (_jsx(CaretDown, { size: 11, weight: "bold", className: "text-foreground" })) : (_jsx(CaretUpDown, { size: 11, className: "text-muted-foreground/40" }))] })) : (flexRender(header.column.columnDef.header, header.getContext())) }, header.id));
66
+ : "text-left"} ${meta?.headerClassName ?? ""}`, children: header.isPlaceholder ? null : canSort ? (_jsxs("button", { type: "button", onClick: header.column.getToggleSortingHandler(), className: `inline-flex items-center gap-1 transition-colors hover:text-foreground ${meta?.align === "right" ? "flex-row-reverse" : ""}`, children: [flexRender(header.column.columnDef.header, header.getContext()), sorted === "asc" ? (_jsx(CaretUp, { size: 11, weight: "bold", className: "text-foreground" })) : sorted === "desc" ? (_jsx(CaretDown, { size: 11, weight: "bold", className: "text-foreground" })) : (_jsx(CaretUpDown, { size: 11, className: "text-muted-foreground/40" }))] })) : (flexRender(header.column.columnDef.header, header.getContext())) }, header.id));
48
67
  }) }, hg.id))) }), _jsxs("tbody", { children: [rows.map((row) => {
49
68
  const href = rowHref?.(row.original);
50
69
  const clickable = !!href || !!rowOnClick;
@@ -77,7 +96,15 @@ export function DataTable({ columns, data, getRowId, rowHref, rowOnClick, render
77
96
  }) }), expanded && (_jsx("tr", { className: "border-b border-border last:border-0", children: _jsx("td", { colSpan: columns.length, className: "bg-background p-3", children: renderExpandedRow(row.original) }) }))] }, row.id));
78
97
  }), rows.length === 0 && (_jsx("tr", { children: _jsx("td", { colSpan: columns.length, className: "px-3.5 py-14 text-center", children: data.length === 0
79
98
  ? (empty ?? (_jsx("span", { className: "text-sm text-muted-foreground", children: "Nothing here yet." })))
80
- : (emptyFiltered ?? (_jsx("span", { className: "text-sm text-muted-foreground", children: "No matches." }))) }) }))] })] }) }), showPagination && (_jsxs("div", { className: "flex items-center justify-between border-t border-border px-3.5 py-2", children: [_jsxs("span", { className: "text-xs text-muted-foreground", "data-tabular": true, children: [table.getState().pagination.pageIndex * pageSize + 1, "\u2013", Math.min((table.getState().pagination.pageIndex + 1) * pageSize, filteredCount), " ", "of ", filteredCount] }), _jsxs("div", { className: "flex items-center gap-1", children: [_jsx(PagerButton, { disabled: !table.getCanPreviousPage(), onClick: () => table.previousPage(), label: "Previous page", children: _jsx(CaretLeft, { size: 13 }) }), _jsx(PagerButton, { disabled: !table.getCanNextPage(), onClick: () => table.nextPage(), label: "Next page", children: _jsx(CaretRight, { size: 13 }) })] })] }))] })] }));
99
+ : (emptyFiltered ?? (_jsx("span", { className: "text-sm text-muted-foreground", children: "No matches." }))) }) }))] })] }) }), showPagination && (_jsxs("div", { className: "flex items-center justify-between border-t border-border px-3.5 py-2", children: [_jsxs("span", { className: "text-xs text-muted-foreground", "data-tabular": true, children: [rows.length ? pageStart + 1 : 0, "\u2013", rows.length ? Math.min(pageStart + rows.length, totalCount) : 0, " of ", totalCount] }), _jsxs("div", { className: "flex items-center gap-1", children: [_jsx(PagerButton, { disabled: pagination
100
+ ? pagination.disabled || pagination.pageIndex === 0
101
+ : !table.getCanPreviousPage(), onClick: () => pagination
102
+ ? pagination.onPageChange(pagination.pageIndex - 1)
103
+ : table.previousPage(), label: "Previous page", children: _jsx(CaretLeft, { size: 13 }) }), _jsx(PagerButton, { disabled: pagination
104
+ ? pagination.disabled || !pagination.hasNextPage
105
+ : !table.getCanNextPage(), onClick: () => pagination
106
+ ? pagination.onPageChange(pagination.pageIndex + 1)
107
+ : table.nextPage(), label: "Next page", children: _jsx(CaretRight, { size: 13 }) })] })] }))] })] }));
81
108
  }
82
109
  function PagerButton({ children, disabled, onClick, label, }) {
83
110
  return (_jsx("button", { type: "button", onClick: onClick, disabled: disabled, "aria-label": label, className: "grid h-7 w-7 place-items-center rounded-md border border-border text-muted-foreground transition-colors hover:bg-secondary hover:text-foreground disabled:pointer-events-none disabled:opacity-30", children: children }));
@@ -1 +1 @@
1
- {"version":3,"file":"data-table.js","sourceRoot":"","sources":["../../../src/v2/ui/data-table.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"data-table.js","sourceRoot":"","sources":["../../../src/v2/ui/data-table.tsx"],"names":[],"mappings":"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"}
@@ -1,5 +1,6 @@
1
- export declare function RefreshButton({ onClick, busy }: {
1
+ export declare function RefreshButton({ onClick, busy, disabled }: {
2
2
  onClick: () => void;
3
3
  busy?: boolean;
4
+ disabled?: boolean;
4
5
  }): import("react/jsx-runtime").JSX.Element;
5
6
  //# sourceMappingURL=refresh-button.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"refresh-button.d.ts","sourceRoot":"","sources":["../../../src/v2/ui/refresh-button.tsx"],"names":[],"mappings":"AAIA,wBAAgB,aAAa,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,EAAE;IAAE,OAAO,EAAE,MAAM,IAAI,CAAC;IAAC,IAAI,CAAC,EAAE,OAAO,CAAA;CAAE,2CAYvF"}
1
+ {"version":3,"file":"refresh-button.d.ts","sourceRoot":"","sources":["../../../src/v2/ui/refresh-button.tsx"],"names":[],"mappings":"AAIA,wBAAgB,aAAa,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE;IAAE,OAAO,EAAE,MAAM,IAAI,CAAC;IAAC,IAAI,CAAC,EAAE,OAAO,CAAC;IAAC,QAAQ,CAAC,EAAE,OAAO,CAAA;CAAE,2CAYrH"}
@@ -1,7 +1,7 @@
1
1
  "use client";
2
2
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
3
  import { ArrowClockwise } from "@phosphor-icons/react/dist/ssr";
4
- export function RefreshButton({ onClick, busy }) {
5
- return (_jsxs("button", { type: "button", onClick: onClick, disabled: busy, className: "flex items-center gap-1.5 text-[13px] text-muted-foreground transition-colors hover:text-foreground disabled:opacity-50", children: [_jsx(ArrowClockwise, { size: 14, className: busy ? "animate-spin" : "" }), "Refresh"] }));
4
+ export function RefreshButton({ onClick, busy, disabled }) {
5
+ return (_jsxs("button", { type: "button", onClick: onClick, disabled: busy || disabled, className: "flex items-center gap-1.5 text-[13px] text-muted-foreground transition-colors hover:text-foreground disabled:opacity-50", children: [_jsx(ArrowClockwise, { size: 14, className: busy ? "animate-spin" : "" }), "Refresh"] }));
6
6
  }
7
7
  //# sourceMappingURL=refresh-button.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"refresh-button.js","sourceRoot":"","sources":["../../../src/v2/ui/refresh-button.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAC;;AAEb,OAAO,EAAE,cAAc,EAAE,MAAM,gCAAgC,CAAC;AAEhE,MAAM,UAAU,aAAa,CAAC,EAAE,OAAO,EAAE,IAAI,EAA2C;IACtF,OAAO,CACL,kBACE,IAAI,EAAC,QAAQ,EACb,OAAO,EAAE,OAAO,EAChB,QAAQ,EAAE,IAAI,EACd,SAAS,EAAC,yHAAyH,aAEnI,KAAC,cAAc,IAAC,IAAI,EAAE,EAAE,EAAE,SAAS,EAAE,IAAI,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,EAAE,GAAI,eAE5D,CACV,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"refresh-button.js","sourceRoot":"","sources":["../../../src/v2/ui/refresh-button.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAC;;AAEb,OAAO,EAAE,cAAc,EAAE,MAAM,gCAAgC,CAAC;AAEhE,MAAM,UAAU,aAAa,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAA+D;IACpH,OAAO,CACL,kBACE,IAAI,EAAC,QAAQ,EACb,OAAO,EAAE,OAAO,EAChB,QAAQ,EAAE,IAAI,IAAI,QAAQ,EAC1B,SAAS,EAAC,yHAAyH,aAEnI,KAAC,cAAc,IAAC,IAAI,EAAE,EAAE,EAAE,SAAS,EAAE,IAAI,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,EAAE,GAAI,eAE5D,CACV,CAAC;AACJ,CAAC"}
@@ -0,0 +1,19 @@
1
+ /**
2
+ * The one search field.
3
+ *
4
+ * Fourteen surfaces had hand-rolled "magnifier absolutely positioned inside a
5
+ * bordered box", and they had drifted: `bg-transparent` here, `bg-background`
6
+ * there, a hairline focus in one place and the brand ring in another. The
7
+ * icon placement is the only thing worth repeating, so it lives here and the
8
+ * field underneath is the shared `Input`.
9
+ */
10
+ export declare function SearchInput({ value, onChange, placeholder, disabled, className, "aria-label": ariaLabel, }: {
11
+ value: string;
12
+ onChange: (value: string) => void;
13
+ placeholder?: string;
14
+ disabled?: boolean;
15
+ /** Sizing only — the surface comes from `Input`. */
16
+ className?: string;
17
+ "aria-label"?: string;
18
+ }): import("react/jsx-runtime").JSX.Element;
19
+ //# sourceMappingURL=search-input.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"search-input.d.ts","sourceRoot":"","sources":["../../../src/v2/ui/search-input.tsx"],"names":[],"mappings":"AAKA;;;;;;;;GAQG;AACH,wBAAgB,WAAW,CAAC,EAC1B,KAAK,EACL,QAAQ,EACR,WAAuB,EACvB,QAAQ,EACR,SAAkB,EAClB,YAAY,EAAE,SAAS,GACxB,EAAE;IACD,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAClC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,oDAAoD;IACpD,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB,2CAkBA"}
@@ -0,0 +1,17 @@
1
+ "use client";
2
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
+ import { MagnifyingGlass } from "@phosphor-icons/react/dist/ssr";
4
+ import { Input } from "./input.js";
5
+ /**
6
+ * The one search field.
7
+ *
8
+ * Fourteen surfaces had hand-rolled "magnifier absolutely positioned inside a
9
+ * bordered box", and they had drifted: `bg-transparent` here, `bg-background`
10
+ * there, a hairline focus in one place and the brand ring in another. The
11
+ * icon placement is the only thing worth repeating, so it lives here and the
12
+ * field underneath is the shared `Input`.
13
+ */
14
+ export function SearchInput({ value, onChange, placeholder = "Search…", disabled, className = "w-56", "aria-label": ariaLabel, }) {
15
+ return (_jsxs("div", { className: `relative ${className}`, children: [_jsx(MagnifyingGlass, { size: 14, className: "pointer-events-none absolute top-1/2 left-2.5 -translate-y-1/2 text-muted-foreground" }), _jsx(Input, { type: "search", value: value, onChange: (event) => onChange(event.target.value), placeholder: placeholder, disabled: disabled, "aria-label": ariaLabel ?? placeholder, className: "pl-8 text-[13px] [&::-webkit-search-cancel-button]:appearance-none" })] }));
16
+ }
17
+ //# sourceMappingURL=search-input.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"search-input.js","sourceRoot":"","sources":["../../../src/v2/ui/search-input.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAC;;AAEb,OAAO,EAAE,eAAe,EAAE,MAAM,gCAAgC,CAAC;AACjE,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AAEnC;;;;;;;;GAQG;AACH,MAAM,UAAU,WAAW,CAAC,EAC1B,KAAK,EACL,QAAQ,EACR,WAAW,GAAG,SAAS,EACvB,QAAQ,EACR,SAAS,GAAG,MAAM,EAClB,YAAY,EAAE,SAAS,GASxB;IACC,OAAO,CACL,eAAK,SAAS,EAAE,YAAY,SAAS,EAAE,aACrC,KAAC,eAAe,IACd,IAAI,EAAE,EAAE,EACR,SAAS,EAAC,sFAAsF,GAChG,EACF,KAAC,KAAK,IACJ,IAAI,EAAC,QAAQ,EACb,KAAK,EAAE,KAAK,EACZ,QAAQ,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,EACjD,WAAW,EAAE,WAAW,EACxB,QAAQ,EAAE,QAAQ,gBACN,SAAS,IAAI,WAAW,EACpC,SAAS,EAAC,oEAAoE,GAC9E,IACE,CACP,CAAC;AACJ,CAAC"}
@@ -0,0 +1,81 @@
1
+ import { type ReactNode } from "react";
2
+ export type SelectOption<T extends string> = {
3
+ value: T;
4
+ label: string;
5
+ disabled?: boolean;
6
+ /**
7
+ * Rendered before the label — on the closed trigger as well as in the
8
+ * list, so the chosen option looks the same in both places. A meter, a
9
+ * provider icon, a status dot.
10
+ */
11
+ leading?: ReactNode;
12
+ /** Second line in the list: what picking this one actually costs you. */
13
+ hint?: string;
14
+ };
15
+ /**
16
+ * Options-driven wrapper over the shared Select.
17
+ *
18
+ * The point is to make the styled control cheaper to reach for than a native
19
+ * `<select>`: those render their list in OS chrome, which ignores the v2
20
+ * popover tokens and the 6px radius and looks different on every platform.
21
+ *
22
+ * It is also the only place a select is composed. Every hand-rolled
23
+ * Trigger/Content/Item stack drifted a little — a different height here, a
24
+ * `text-[12px]` there, an icon on the trigger that the list did not repeat —
25
+ * and the drift is invisible until two of them end up on one screen.
26
+ */
27
+ export declare function SelectField<T extends string>({ value, onChange, options, disabled, className, placeholder, size, variant, align, mono, contentClassName, ...aria }: {
28
+ /** `null` shows the placeholder — an empty string would render blank. */
29
+ value: T | null;
30
+ onChange: (value: T) => void;
31
+ options: ReadonlyArray<SelectOption<T>>;
32
+ disabled?: boolean;
33
+ className?: string;
34
+ placeholder?: string;
35
+ size?: "sm" | "default";
36
+ /** `card` matches the model selector; `field` (default) the form fields. */
37
+ variant?: "field" | "card";
38
+ /** Where the list hangs off the trigger. */
39
+ align?: "start" | "center" | "end";
40
+ /** For identifier-ish values — alias names, channel ids, model ids. */
41
+ mono?: boolean;
42
+ contentClassName?: string;
43
+ "aria-label"?: string;
44
+ "aria-invalid"?: boolean;
45
+ "aria-describedby"?: string;
46
+ id?: string;
47
+ "data-testid"?: string;
48
+ }): import("react/jsx-runtime").JSX.Element;
49
+ /** Multiple choices using the same trigger, popup and items as SelectField. */
50
+ export declare function MultiSelectField<T extends string>({ value, onChange, options, disabled, className, placeholder, size, variant, ...aria }: {
51
+ value: T[];
52
+ onChange: (value: T[]) => void;
53
+ options: ReadonlyArray<SelectOption<T>>;
54
+ disabled?: boolean;
55
+ className?: string;
56
+ placeholder?: string;
57
+ size?: "sm" | "default";
58
+ variant?: "field" | "card";
59
+ "aria-label"?: string;
60
+ id?: string;
61
+ }): import("react/jsx-runtime").JSX.Element;
62
+ /**
63
+ * A select you can type into. For lists long enough that scrolling is not a
64
+ * real way to find anything — the ~400 IANA timezones being the case this
65
+ * was written for.
66
+ */
67
+ export declare function SearchableSelect<T extends string>({ value, onChange, options, disabled, className, placeholder, emptyLabel, triggerLabel, ...aria }: {
68
+ value: T | "";
69
+ onChange: (value: T) => void;
70
+ options: ReadonlyArray<SelectOption<T>>;
71
+ disabled?: boolean;
72
+ className?: string;
73
+ placeholder?: string;
74
+ emptyLabel?: string;
75
+ /** Shown when nothing is selected. */
76
+ triggerLabel?: string;
77
+ "aria-label"?: string;
78
+ "aria-invalid"?: boolean;
79
+ "aria-describedby"?: string;
80
+ }): import("react/jsx-runtime").JSX.Element;
81
+ //# sourceMappingURL=select-field.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"select-field.d.ts","sourceRoot":"","sources":["../../../src/v2/ui/select-field.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,89 @@
1
+ "use client";
2
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
+ import { useEffect, useMemo, useRef, useState } from "react";
4
+ import { CaretDown, Check, MagnifyingGlass, } from "@phosphor-icons/react/dist/ssr";
5
+ import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue, } from "./select.js";
6
+ /**
7
+ * Options-driven wrapper over the shared Select.
8
+ *
9
+ * The point is to make the styled control cheaper to reach for than a native
10
+ * `<select>`: those render their list in OS chrome, which ignores the v2
11
+ * popover tokens and the 6px radius and looks different on every platform.
12
+ *
13
+ * It is also the only place a select is composed. Every hand-rolled
14
+ * Trigger/Content/Item stack drifted a little — a different height here, a
15
+ * `text-[12px]` there, an icon on the trigger that the list did not repeat —
16
+ * and the drift is invisible until two of them end up on one screen.
17
+ */
18
+ export function SelectField({ value, onChange, options, disabled, className = "", placeholder, size = "sm", variant, align, mono = false, contentClassName, ...aria }) {
19
+ // The trigger only needs the custom renderer when an option carries
20
+ // something the default text rendering would drop.
21
+ const decorated = options.some((option) => option.leading != null);
22
+ const monoClass = mono ? "font-mono" : "";
23
+ return (_jsxs(Select, { value: value, items: options.map(({ value, label }) => ({ value, label })), disabled: disabled, onValueChange: (next) => {
24
+ if (next != null)
25
+ onChange(next);
26
+ }, children: [_jsx(SelectTrigger, { size: size, variant: variant, className: className, ...aria, children: decorated ? (_jsx(SelectValue, { placeholder: placeholder, children: (current) => {
27
+ const option = options.find((entry) => entry.value === current);
28
+ if (!option) {
29
+ return (_jsx("span", { className: "text-muted-foreground", children: placeholder }));
30
+ }
31
+ return (_jsxs("span", { className: "flex min-w-0 items-center gap-2", children: [option.leading, _jsx("span", { className: `truncate ${monoClass}`, children: option.label })] }));
32
+ } })) : (_jsx(SelectValue, { placeholder: placeholder, className: monoClass })) }), _jsx(SelectContent, { align: align ?? "start", alignItemWithTrigger: false, className: `v2 ${contentClassName ?? ""}`, children: options.map((option) => (_jsx(SelectItem, { value: option.value, disabled: option.disabled, children: _jsxs("span", { className: "flex min-w-0 items-center gap-2", children: [option.leading, _jsxs("span", { className: "flex min-w-0 flex-col", children: [_jsx("span", { className: monoClass, children: option.label }), option.hint ? (_jsx("span", { className: "text-[12px] leading-snug text-muted-foreground", children: option.hint })) : null] })] }) }, option.value))) })] }));
33
+ }
34
+ /** Multiple choices using the same trigger, popup and items as SelectField. */
35
+ export function MultiSelectField({ value, onChange, options, disabled, className = "", placeholder = "Select…", size = "sm", variant, ...aria }) {
36
+ return (_jsxs(Select, { multiple: true, value: value, items: options.map(({ value, label }) => ({ value, label })), disabled: disabled, onValueChange: (next) => onChange(next), children: [_jsx(SelectTrigger, { size: size, variant: variant, className: className, ...aria, children: _jsx(SelectValue, { placeholder: placeholder, children: () => value.length === 0 ? (_jsx("span", { className: "text-muted-foreground", children: placeholder })) : value.length === 1 ? ((options.find((option) => option.value === value[0])?.label ??
37
+ value[0])) : (`${value.length} selected`) }) }), _jsx(SelectContent, { align: "start", alignItemWithTrigger: false, className: "v2", children: options.map((option) => (_jsx(SelectItem, { value: option.value, disabled: option.disabled, children: option.label }, option.value))) })] }));
38
+ }
39
+ /**
40
+ * A select you can type into. For lists long enough that scrolling is not a
41
+ * real way to find anything — the ~400 IANA timezones being the case this
42
+ * was written for.
43
+ */
44
+ export function SearchableSelect({ value, onChange, options, disabled, className = "", placeholder = "Search…", emptyLabel = "No matches", triggerLabel, ...aria }) {
45
+ const [open, setOpen] = useState(false);
46
+ const [query, setQuery] = useState("");
47
+ const rootRef = useRef(null);
48
+ const inputRef = useRef(null);
49
+ useEffect(() => {
50
+ if (!open)
51
+ return;
52
+ inputRef.current?.focus();
53
+ const onDoc = (event) => {
54
+ if (rootRef.current && !rootRef.current.contains(event.target)) {
55
+ setOpen(false);
56
+ }
57
+ };
58
+ const onKey = (event) => {
59
+ if (event.key === "Escape")
60
+ setOpen(false);
61
+ };
62
+ document.addEventListener("mousedown", onDoc);
63
+ document.addEventListener("keydown", onKey);
64
+ return () => {
65
+ document.removeEventListener("mousedown", onDoc);
66
+ document.removeEventListener("keydown", onKey);
67
+ };
68
+ }, [open]);
69
+ const matches = useMemo(() => {
70
+ const needle = query.trim().toLowerCase();
71
+ if (!needle)
72
+ return options;
73
+ return options.filter((option) => option.label.toLowerCase().includes(needle));
74
+ }, [options, query]);
75
+ const selected = options.find((option) => option.value === value);
76
+ function toggleOpen() {
77
+ if (open) {
78
+ setOpen(false);
79
+ return;
80
+ }
81
+ setQuery("");
82
+ setOpen(true);
83
+ }
84
+ return (_jsxs("div", { ref: rootRef, className: `relative ${className}`, children: [_jsxs("button", { type: "button", disabled: disabled, "aria-expanded": open, "aria-haspopup": "listbox", onClick: toggleOpen, ...aria, className: "flex h-8 w-full items-center justify-between gap-1.5 rounded-md border border-input bg-transparent pr-2 pl-2.5 text-sm transition-colors outline-none select-none disabled:cursor-not-allowed disabled:opacity-50 aria-invalid:border-destructive", children: [_jsx("span", { className: `truncate ${selected ? "text-foreground" : "text-muted-foreground"}`, children: selected?.label ?? triggerLabel ?? placeholder }), _jsx(CaretDown, { size: 12, className: "shrink-0 text-muted-foreground" })] }), open && (_jsxs("div", { className: "absolute z-50 mt-1 w-full overflow-hidden rounded-md border border-border bg-popover shadow-md", children: [_jsxs("div", { className: "flex items-center gap-1.5 border-b border-border px-2", children: [_jsx(MagnifyingGlass, { size: 13, className: "shrink-0 text-muted-foreground" }), _jsx("input", { ref: inputRef, value: query, onChange: (event) => setQuery(event.target.value), placeholder: placeholder, className: "h-8 w-full bg-transparent text-[13px] text-foreground placeholder:text-muted-foreground/60 focus:outline-none" })] }), _jsx("div", { role: "listbox", className: "max-h-60 overflow-y-auto p-1", children: matches.length === 0 ? (_jsx("div", { className: "px-2 py-3 text-center text-[12px] text-muted-foreground", children: emptyLabel })) : (matches.map((option) => (_jsxs("button", { type: "button", role: "option", "aria-selected": option.value === value, disabled: option.disabled, onClick: () => {
85
+ onChange(option.value);
86
+ setOpen(false);
87
+ }, className: "flex w-full items-center justify-between gap-2 rounded px-2 py-1.5 text-left text-[13px] text-foreground transition-colors hover:bg-accent disabled:opacity-40", children: [_jsx("span", { className: "truncate", children: option.label }), option.value === value && (_jsx(Check, { size: 13, className: "shrink-0 text-brand" }))] }, option.value)))) })] }))] }));
88
+ }
89
+ //# sourceMappingURL=select-field.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"select-field.js","sourceRoot":"","sources":["../../../src/v2/ui/select-field.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAC;;AAEb,OAAO,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAkB,MAAM,OAAO,CAAC;AAC7E,OAAO,EACL,SAAS,EACT,KAAK,EACL,eAAe,GAChB,MAAM,gCAAgC,CAAC;AACxC,OAAO,EACL,MAAM,EACN,aAAa,EACb,UAAU,EACV,aAAa,EACb,WAAW,GACZ,MAAM,aAAa,CAAC;AAgBrB;;;;;;;;;;;GAWG;AACH,MAAM,UAAU,WAAW,CAAmB,EAC5C,KAAK,EACL,QAAQ,EACR,OAAO,EACP,QAAQ,EACR,SAAS,GAAG,EAAE,EACd,WAAW,EACX,IAAI,GAAG,IAAI,EACX,OAAO,EACP,KAAK,EACL,IAAI,GAAG,KAAK,EACZ,gBAAgB,EAChB,GAAG,IAAI,EAsBR;IACC,oEAAoE;IACpE,mDAAmD;IACnD,MAAM,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,OAAO,IAAI,IAAI,CAAC,CAAC;IACnE,MAAM,SAAS,GAAG,IAAI,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,CAAC;IAE1C,OAAO,CACL,MAAC,MAAM,IACL,KAAK,EAAE,KAAK,EACZ,KAAK,EAAE,OAAO,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAAC,EAC5D,QAAQ,EAAE,QAAQ,EAClB,aAAa,EAAE,CAAC,IAAI,EAAE,EAAE;YACtB,IAAI,IAAI,IAAI,IAAI;gBAAE,QAAQ,CAAC,IAAS,CAAC,CAAC;QACxC,CAAC,aAED,KAAC,aAAa,IACZ,IAAI,EAAE,IAAI,EACV,OAAO,EAAE,OAAO,EAChB,SAAS,EAAE,SAAS,KAChB,IAAI,YAEP,SAAS,CAAC,CAAC,CAAC,CACX,KAAC,WAAW,IAAC,WAAW,EAAE,WAAW,YAClC,CAAC,OAAO,EAAE,EAAE;wBACX,MAAM,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,KAAK,KAAK,OAAO,CAAC,CAAC;wBAChE,IAAI,CAAC,MAAM,EAAE,CAAC;4BACZ,OAAO,CACL,eAAM,SAAS,EAAC,uBAAuB,YAAE,WAAW,GAAQ,CAC7D,CAAC;wBACJ,CAAC;wBACD,OAAO,CACL,gBAAM,SAAS,EAAC,iCAAiC,aAC9C,MAAM,CAAC,OAAO,EACf,eAAM,SAAS,EAAE,YAAY,SAAS,EAAE,YACrC,MAAM,CAAC,KAAK,GACR,IACF,CACR,CAAC;oBACJ,CAAC,GACW,CACf,CAAC,CAAC,CAAC,CACF,KAAC,WAAW,IAAC,WAAW,EAAE,WAAW,EAAE,SAAS,EAAE,SAAS,GAAI,CAChE,GACa,EAChB,KAAC,aAAa,IAAC,KAAK,EAAE,KAAK,IAAI,OAAO,EAAE,oBAAoB,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,gBAAgB,IAAI,EAAE,EAAE,YAC3G,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CACvB,KAAC,UAAU,IAET,KAAK,EAAE,MAAM,CAAC,KAAK,EACnB,QAAQ,EAAE,MAAM,CAAC,QAAQ,YAEzB,gBAAM,SAAS,EAAC,iCAAiC,aAC9C,MAAM,CAAC,OAAO,EACf,gBAAM,SAAS,EAAC,uBAAuB,aACrC,eAAM,SAAS,EAAE,SAAS,YAAG,MAAM,CAAC,KAAK,GAAQ,EAChD,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CACb,eAAM,SAAS,EAAC,gDAAgD,YAC7D,MAAM,CAAC,IAAI,GACP,CACR,CAAC,CAAC,CAAC,IAAI,IACH,IACF,IAdF,MAAM,CAAC,KAAK,CAeN,CACd,CAAC,GACY,IACT,CACV,CAAC;AACJ,CAAC;AAED,+EAA+E;AAC/E,MAAM,UAAU,gBAAgB,CAAmB,EACjD,KAAK,EACL,QAAQ,EACR,OAAO,EACP,QAAQ,EACR,SAAS,GAAG,EAAE,EACd,WAAW,GAAG,SAAS,EACvB,IAAI,GAAG,IAAI,EACX,OAAO,EACP,GAAG,IAAI,EAYR;IACC,OAAO,CACL,MAAC,MAAM,IACL,QAAQ,QACR,KAAK,EAAE,KAAK,EACZ,KAAK,EAAE,OAAO,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAAC,EAC5D,QAAQ,EAAE,QAAQ,EAClB,aAAa,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,QAAQ,CAAC,IAAW,CAAC,aAE9C,KAAC,aAAa,IACZ,IAAI,EAAE,IAAI,EACV,OAAO,EAAE,OAAO,EAChB,SAAS,EAAE,SAAS,KAChB,IAAI,YAER,KAAC,WAAW,IAAC,WAAW,EAAE,WAAW,YAClC,GAAG,EAAE,CACJ,KAAK,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,CACnB,eAAM,SAAS,EAAC,uBAAuB,YAAE,WAAW,GAAQ,CAC7D,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,CACvB,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,KAAK,KAAK,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK;wBAC3D,KAAK,CAAC,CAAC,CAAC,CAAC,CACV,CAAC,CAAC,CAAC,CACF,GAAG,KAAK,CAAC,MAAM,WAAW,CAC3B,GAES,GACA,EAChB,KAAC,aAAa,IAAC,KAAK,EAAC,OAAO,EAAC,oBAAoB,EAAE,KAAK,EAAE,SAAS,EAAC,IAAI,YACrE,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CACvB,KAAC,UAAU,IAET,KAAK,EAAE,MAAM,CAAC,KAAK,EACnB,QAAQ,EAAE,MAAM,CAAC,QAAQ,YAExB,MAAM,CAAC,KAAK,IAJR,MAAM,CAAC,KAAK,CAKN,CACd,CAAC,GACY,IACT,CACV,CAAC;AACJ,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,gBAAgB,CAAmB,EACjD,KAAK,EACL,QAAQ,EACR,OAAO,EACP,QAAQ,EACR,SAAS,GAAG,EAAE,EACd,WAAW,GAAG,SAAS,EACvB,UAAU,GAAG,YAAY,EACzB,YAAY,EACZ,GAAG,IAAI,EAcR;IACC,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;IACxC,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,QAAQ,CAAC,EAAE,CAAC,CAAC;IACvC,MAAM,OAAO,GAAG,MAAM,CAAiB,IAAI,CAAC,CAAC;IAC7C,MAAM,QAAQ,GAAG,MAAM,CAAmB,IAAI,CAAC,CAAC;IAEhD,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,CAAC,IAAI;YAAE,OAAO;QAClB,QAAQ,CAAC,OAAO,EAAE,KAAK,EAAE,CAAC;QAC1B,MAAM,KAAK,GAAG,CAAC,KAAiB,EAAE,EAAE;YAClC,IAAI,OAAO,CAAC,OAAO,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC,MAAc,CAAC,EAAE,CAAC;gBACvE,OAAO,CAAC,KAAK,CAAC,CAAC;YACjB,CAAC;QACH,CAAC,CAAC;QACF,MAAM,KAAK,GAAG,CAAC,KAAoB,EAAE,EAAE;YACrC,IAAI,KAAK,CAAC,GAAG,KAAK,QAAQ;gBAAE,OAAO,CAAC,KAAK,CAAC,CAAC;QAC7C,CAAC,CAAC;QACF,QAAQ,CAAC,gBAAgB,CAAC,WAAW,EAAE,KAAK,CAAC,CAAC;QAC9C,QAAQ,CAAC,gBAAgB,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;QAC5C,OAAO,GAAG,EAAE;YACV,QAAQ,CAAC,mBAAmB,CAAC,WAAW,EAAE,KAAK,CAAC,CAAC;YACjD,QAAQ,CAAC,mBAAmB,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;QACjD,CAAC,CAAC;IACJ,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC;IAEX,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,EAAE;QAC3B,MAAM,MAAM,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;QAC1C,IAAI,CAAC,MAAM;YAAE,OAAO,OAAO,CAAC;QAC5B,OAAO,OAAO,CAAC,MAAM,CAAC,CAAC,MAAM,EAAE,EAAE,CAC/B,MAAM,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,MAAM,CAAC,CAC5C,CAAC;IACJ,CAAC,EAAE,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC,CAAC;IAErB,MAAM,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,KAAK,KAAK,KAAK,CAAC,CAAC;IAElE,SAAS,UAAU;QACjB,IAAI,IAAI,EAAE,CAAC;YACT,OAAO,CAAC,KAAK,CAAC,CAAC;YACf,OAAO;QACT,CAAC;QACD,QAAQ,CAAC,EAAE,CAAC,CAAC;QACb,OAAO,CAAC,IAAI,CAAC,CAAC;IAChB,CAAC;IAED,OAAO,CACL,eAAK,GAAG,EAAE,OAAO,EAAE,SAAS,EAAE,YAAY,SAAS,EAAE,aACnD,kBACE,IAAI,EAAC,QAAQ,EACb,QAAQ,EAAE,QAAQ,mBACH,IAAI,mBACL,SAAS,EACvB,OAAO,EAAE,UAAU,KACf,IAAI,EACR,SAAS,EAAC,mPAAmP,aAE7P,eACE,SAAS,EAAE,YAAY,QAAQ,CAAC,CAAC,CAAC,iBAAiB,CAAC,CAAC,CAAC,uBAAuB,EAAE,YAE9E,QAAQ,EAAE,KAAK,IAAI,YAAY,IAAI,WAAW,GAC1C,EACP,KAAC,SAAS,IAAC,IAAI,EAAE,EAAE,EAAE,SAAS,EAAC,gCAAgC,GAAG,IAC3D,EAER,IAAI,IAAI,CACP,eAAK,SAAS,EAAC,gGAAgG,aAC7G,eAAK,SAAS,EAAC,uDAAuD,aACpE,KAAC,eAAe,IACd,IAAI,EAAE,EAAE,EACR,SAAS,EAAC,gCAAgC,GAC1C,EACF,gBACE,GAAG,EAAE,QAAQ,EACb,KAAK,EAAE,KAAK,EACZ,QAAQ,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,EACjD,WAAW,EAAE,WAAW,EACxB,SAAS,EAAC,+GAA+G,GACzH,IACE,EACN,cAAK,IAAI,EAAC,SAAS,EAAC,SAAS,EAAC,8BAA8B,YACzD,OAAO,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,CACtB,cAAK,SAAS,EAAC,yDAAyD,YACrE,UAAU,GACP,CACP,CAAC,CAAC,CAAC,CACF,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CACtB,kBAEE,IAAI,EAAC,QAAQ,EACb,IAAI,EAAC,QAAQ,mBACE,MAAM,CAAC,KAAK,KAAK,KAAK,EACrC,QAAQ,EAAE,MAAM,CAAC,QAAQ,EACzB,OAAO,EAAE,GAAG,EAAE;gCACZ,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;gCACvB,OAAO,CAAC,KAAK,CAAC,CAAC;4BACjB,CAAC,EACD,SAAS,EAAC,gKAAgK,aAE1K,eAAM,SAAS,EAAC,UAAU,YAAE,MAAM,CAAC,KAAK,GAAQ,EAC/C,MAAM,CAAC,KAAK,KAAK,KAAK,IAAI,CACzB,KAAC,KAAK,IAAC,IAAI,EAAE,EAAE,EAAE,SAAS,EAAC,qBAAqB,GAAG,CACpD,KAdI,MAAM,CAAC,KAAK,CAeV,CACV,CAAC,CACH,GACG,IACF,CACP,IACG,CACP,CAAC;AACJ,CAAC"}