impact-nova 1.5.7 → 1.5.8

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.
@@ -1,54 +1,39 @@
1
1
  import * as React from "react";
2
2
  interface DashboardLayoutProps extends React.ComponentProps<"div"> {
3
3
  /**
4
- * The Sidebar component (e.g. <AppSidebar />).
5
- * Will be wrapped in a SidebarProvider automatically.
4
+ * The Sidebar component (e.g. <AppSidebar /> wrapped in its own SidebarProvider).
5
+ * The sidebar should manage its own SidebarProvider internally.
6
6
  */
7
7
  sidebar: React.ReactNode;
8
8
  /**
9
9
  * The Header component (e.g. <Header />).
10
- * Rendered above the main content area, below header it sticks to the top.
10
+ * Rendered above the main content area.
11
11
  */
12
12
  header: React.ReactNode;
13
- /**
14
- * Optional breadcrumb node rendered inside a sticky BreadcrumbHeader bar.
15
- * When provided, the bar is sticky at the top of the scroll area.
16
- */
17
- breadcrumb?: React.ReactNode;
18
- /**
19
- * Optional content rendered on the right side of the breadcrumb header bar
20
- * (e.g. action buttons, view toggles, filter toggle button).
21
- */
22
- breadcrumbRightContent?: React.ReactNode;
23
- /**
24
- * Optional FilterStrip or any content rendered below the BreadcrumbHeader bar
25
- * with a smooth animated collapse/expand behaviour.
26
- * Visibility is controlled by the built-in "Show/Hide Filters" toggle
27
- * when `filterStrip` is provided.
28
- */
29
- filterStrip?: React.ReactNode;
30
- /**
31
- * When true, the filter strip is shown by default. Defaults to `true`.
32
- */
33
- defaultFiltersVisible?: boolean;
34
- /**
35
- * Controlled sidebar open state. When provided, the sidebar becomes fully controlled.
36
- * Use together with `onSidebarOpenChange` for two-way binding.
37
- */
38
- sidebarOpen?: boolean;
39
- /**
40
- * Callback fired when the sidebar open state changes.
41
- * Use together with `sidebarOpen` for controlled mode, or standalone for listening.
42
- */
43
- onSidebarOpenChange?: (open: boolean) => void;
44
- /**
45
- * Default open state for the sidebar (uncontrolled mode). Defaults to `false`.
46
- */
47
- sidebarDefaultOpen?: boolean;
48
13
  /**
49
14
  * Main content (e.g. <Outlet /> or page-level content).
15
+ * Pages should handle their own breadcrumb and filter strip rendering.
50
16
  */
51
17
  children: React.ReactNode;
52
18
  }
53
- export declare function DashboardLayout({ sidebar, header, breadcrumb, breadcrumbRightContent, filterStrip, defaultFiltersVisible, sidebarOpen, onSidebarOpenChange, sidebarDefaultOpen, children, className, ...props }: DashboardLayoutProps): import("react/jsx-runtime").JSX.Element;
19
+ /**
20
+ * A minimal dashboard layout that provides the basic structure:
21
+ * Sidebar | (Header + Main Content)
22
+ *
23
+ * This layout is intentionally simple. Breadcrumbs, filter strips, and other
24
+ * page-specific UI should be handled at the page level, not in the layout.
25
+ *
26
+ * @example
27
+ * ```tsx
28
+ * <DashboardLayout
29
+ * sidebar={<SidebarWrapper />}
30
+ * header={<HeaderWrapper />}
31
+ * >
32
+ * <Suspense fallback={<ModuleLoader />}>
33
+ * <Outlet />
34
+ * </Suspense>
35
+ * </DashboardLayout>
36
+ * ```
37
+ */
38
+ export declare function DashboardLayout({ sidebar, header, children, className, ...props }: DashboardLayoutProps): import("react/jsx-runtime").JSX.Element;
54
39
  export {};
@@ -0,0 +1,16 @@
1
+ import { default as React } from 'react';
2
+ import { ICellEditorParams } from 'ag-grid-community';
3
+ export interface PercentProgressCellEditorProps extends ICellEditorParams {
4
+ min?: number;
5
+ max?: number;
6
+ step?: number;
7
+ className?: string;
8
+ suppressAutoFocus?: boolean;
9
+ /** Injected when `reactiveCustomComponents` is on (default); required for commits to persist. */
10
+ onValueChange?: (value: unknown) => void;
11
+ }
12
+ export declare const PercentProgressCellEditor: React.NamedExoticComponent<PercentProgressCellEditorProps & React.RefAttributes<{
13
+ getValue: () => unknown;
14
+ isCancelBeforeStart: () => boolean;
15
+ isCancelAfterEnd: () => boolean;
16
+ }>>;
@@ -0,0 +1,135 @@
1
+ import { jsx as c, jsxs as F } from "react/jsx-runtime";
2
+ import L, { forwardRef as I, useRef as w, useLayoutEffect as K, useState as T, useCallback as d, useImperativeHandle as U, useEffect as P } from "react";
3
+ import { Slider as H } from "../../../slider.js";
4
+ function A(t) {
5
+ return t && typeof t == "object" && "value" in t ? t.value : t;
6
+ }
7
+ function C(t) {
8
+ if (t == null || t === "") return null;
9
+ if (typeof t == "number") return isNaN(t) ? null : t;
10
+ const i = Number(String(t).replace(/%/g, "").trim());
11
+ return isNaN(i) ? null : i;
12
+ }
13
+ function N(t, i, a) {
14
+ return Math.min(a, Math.max(i, t));
15
+ }
16
+ const D = I((t, i) => {
17
+ const { value: a, colDef: f, className: k, onValueChange: m } = t, o = t.min ?? 0, l = t.max ?? 100, b = t.step ?? 1, p = a != null && typeof a == "object" && "value" in a, g = p ? a.cellMetadata : void 0, x = w(null), y = w(t.stopEditing), s = w(null);
18
+ K(() => {
19
+ y.current = t.stopEditing;
20
+ }, [t.stopEditing]);
21
+ const [v, h] = T(() => {
22
+ const e = A(a);
23
+ return C(e);
24
+ }), u = d(() => {
25
+ const e = s.current?.value;
26
+ let n;
27
+ if (!e || e === "" || e === "-")
28
+ n = null;
29
+ else {
30
+ const r = Number(e);
31
+ n = isNaN(r) ? null : N(r, o, l);
32
+ }
33
+ return p ? {
34
+ value: n,
35
+ ...g !== void 0 && { cellMetadata: g }
36
+ } : n;
37
+ }, [o, l, p, g]);
38
+ U(
39
+ i,
40
+ () => ({
41
+ getValue() {
42
+ return u();
43
+ },
44
+ isCancelBeforeStart() {
45
+ return !1;
46
+ },
47
+ isCancelAfterEnd() {
48
+ return !1;
49
+ }
50
+ }),
51
+ [u]
52
+ ), P(() => {
53
+ const e = s.current;
54
+ if (!e) return;
55
+ const n = A(a), r = C(n);
56
+ e.value = r != null ? String(r) : "", t.suppressAutoFocus || (e.focus(), e.select());
57
+ }, []), P(() => {
58
+ const e = x.current;
59
+ if (!e) return;
60
+ const n = (r) => {
61
+ const E = r.relatedTarget;
62
+ E && e.contains(E) || requestAnimationFrame(() => {
63
+ e.contains(document.activeElement) || y.current?.();
64
+ });
65
+ };
66
+ return e.addEventListener("focusout", n), () => e.removeEventListener("focusout", n);
67
+ }, []);
68
+ const R = v != null ? N(v, o, l) : o, V = d(
69
+ (e) => {
70
+ const n = e[0];
71
+ if (n === void 0) return;
72
+ const r = N(n, o, l);
73
+ h(r), s.current && (s.current.value = String(r)), m?.(u());
74
+ },
75
+ [o, l, m, u]
76
+ ), S = d(() => {
77
+ const e = s.current?.value;
78
+ if (!e || e === "" || e === "-")
79
+ h(null);
80
+ else {
81
+ const n = Number(e);
82
+ h(isNaN(n) ? null : n);
83
+ }
84
+ m?.(u());
85
+ }, [m, u]), j = d((e) => {
86
+ ["ArrowUp", "ArrowDown", "ArrowLeft", "ArrowRight", "Home", "End", "PageUp", "PageDown"].includes(
87
+ e.key
88
+ ) && e.stopPropagation();
89
+ }, []), M = d((e) => {
90
+ e.key === "Enter" || e.key === "Escape" || e.key === "Tab" || ["ArrowUp", "ArrowDown", "ArrowLeft", "ArrowRight"].includes(e.key) && e.stopPropagation();
91
+ }, []);
92
+ return /* @__PURE__ */ c(
93
+ "div",
94
+ {
95
+ ref: x,
96
+ className: `w-full h-full flex items-center ag-cell-inner-padding in-ag-editable-cell-highlight ${k ?? ""}`,
97
+ onPointerDown: (e) => e.stopPropagation(),
98
+ onMouseDown: (e) => e.stopPropagation(),
99
+ children: /* @__PURE__ */ F("div", { className: "flex w-full min-w-0 items-center gap-2", children: [
100
+ /* @__PURE__ */ c("div", { className: "min-w-0 flex-1 py-1", onKeyDown: j, children: /* @__PURE__ */ c(
101
+ H,
102
+ {
103
+ value: [R],
104
+ min: o,
105
+ max: l,
106
+ step: b,
107
+ onValueChange: V,
108
+ "aria-label": typeof f?.headerName == "string" ? `${f.headerName} — slide to adjust` : "Percent — slide to adjust"
109
+ }
110
+ ) }),
111
+ /* @__PURE__ */ c("div", { className: "shrink-0 rounded-full bg-[#e8eaef] px-1.5 py-0.5", children: /* @__PURE__ */ c(
112
+ "input",
113
+ {
114
+ ref: s,
115
+ type: "number",
116
+ inputMode: "decimal",
117
+ min: o,
118
+ max: l,
119
+ step: b,
120
+ onInput: S,
121
+ onKeyDown: M,
122
+ className: "w-11 bg-transparent p-0 text-center text-xs font-medium tabular-nums text-[#4a5568] outline-none [appearance:textfield] [&::-webkit-inner-spin-button]:appearance-none [&::-webkit-outer-spin-button]:appearance-none",
123
+ "aria-label": typeof f?.headerName == "string" ? f.headerName : "Percent"
124
+ }
125
+ ) }),
126
+ /* @__PURE__ */ c("span", { className: "shrink-0 text-xs font-medium text-[#4a5568] tabular-nums", children: "%" })
127
+ ] })
128
+ }
129
+ );
130
+ });
131
+ D.displayName = "PercentProgressCellEditor";
132
+ const q = L.memo(D, () => !0);
133
+ export {
134
+ q as PercentProgressCellEditor
135
+ };
@@ -10,6 +10,8 @@ import { CheckboxDisplayRenderer } from './checkbox-display-renderer';
10
10
  import { SwitchDisplayRenderer } from './switch-display-renderer';
11
11
  import { TextAreaDisplayRenderer } from './textarea-display-renderer';
12
12
  import { DateDisplayRenderer } from './date-display-renderer';
13
+ import { PercentProgressDisplayRenderer } from './percent-progress-display-renderer';
14
+ import { PercentProgressCellEditor } from './editors/percent-progress-cell-editor';
13
15
  import { SelectCellEditor } from './editors/select-cell-editor';
14
16
  import { TextAreaCellEditor } from './editors/textarea-cell-editor';
15
17
  import { DateCellEditor } from './editors/date-cell-editor';
@@ -20,7 +22,7 @@ export declare const AG_CELL_NO_PADDING = "ag-cell-no-padding";
20
22
  export declare const AG_CELL_FULL_CONTROL = "ag-cell-renderer-full-control";
21
23
  /** Design-system inner padding (6px) for custom cell renderer wrappers */
22
24
  export declare const AG_CELL_INNER_PADDING = "ag-cell-inner-padding";
23
- export { EmptyCellRenderer, BadgeCellRenderer, StatusBadgeRenderer, ActionsCellRenderer, LinkCellRenderer, SplitCellRenderer, InputDisplayRenderer, SelectDisplayRenderer, CheckboxDisplayRenderer, SwitchDisplayRenderer, TextAreaDisplayRenderer, DateDisplayRenderer, SelectCellEditor, TextAreaCellEditor, DateCellEditor, SplitCellEditor, };
25
+ export { EmptyCellRenderer, BadgeCellRenderer, StatusBadgeRenderer, ActionsCellRenderer, LinkCellRenderer, SplitCellRenderer, InputDisplayRenderer, SelectDisplayRenderer, CheckboxDisplayRenderer, SwitchDisplayRenderer, TextAreaDisplayRenderer, DateDisplayRenderer, PercentProgressDisplayRenderer, SelectCellEditor, TextAreaCellEditor, DateCellEditor, SplitCellEditor, PercentProgressCellEditor, };
24
26
  export type { BadgeCellRendererProps } from './badge-cell-renderer';
25
27
  export type { StatusBadgeRendererProps } from './status-badge-renderer';
26
28
  export type { ActionsCellRendererProps } from './actions-cell-renderer';
@@ -28,6 +30,8 @@ export type { InputDisplayRendererProps } from './input-display-renderer';
28
30
  export type { SelectDisplayRendererProps } from './select-display-renderer';
29
31
  export type { SplitCellRendererProps } from './split-cell-renderer';
30
32
  export type { InputCellEditorProps } from './editors/input-cell-editor';
33
+ export type { PercentProgressDisplayRendererProps } from './percent-progress-display-renderer';
34
+ export type { PercentProgressCellEditorProps } from './editors/percent-progress-cell-editor';
31
35
  export type { SelectCellEditorProps } from './editors/select-cell-editor';
32
36
  export type { SplitCellEditorProps } from './editors/split-cell-editor';
33
37
  export { type BadgeVariant, type BadgeColor, type SelectOption, type ActionButton, type RightSideIcon, type RightSideBadge, type RightSideContentItem, type RightSideContent, type SplitConfig, type CellMetadata, type RowMetadata, type ValueFormatter, } from './types';
@@ -82,11 +86,20 @@ export declare const AG_GRID_CELL_COMPONENTS: {
82
86
  (props: import('./date-display-renderer').DateDisplayRendererProps): import("react/jsx-runtime").JSX.Element;
83
87
  displayName: string;
84
88
  };
89
+ percentProgressDisplay: {
90
+ (props: import('./percent-progress-display-renderer').PercentProgressDisplayRendererProps): import("react/jsx-runtime").JSX.Element;
91
+ displayName: string;
92
+ };
85
93
  inputEditor: import('react').NamedExoticComponent<import('.').InputCellEditorProps & import('react').RefAttributes<any>>;
86
94
  selectEditor: import('react').ForwardRefExoticComponent<import('.').SelectCellEditorProps & import('react').RefAttributes<unknown>>;
87
95
  textareaEditor: import('react').ForwardRefExoticComponent<import('./editors/textarea-cell-editor').TextAreaCellEditorProps & import('react').RefAttributes<unknown>>;
88
96
  dateEditor: import('react').ForwardRefExoticComponent<import('./editors/date-cell-editor').DateCellEditorProps & import('react').RefAttributes<unknown>>;
89
97
  splitEditor: import('react').ForwardRefExoticComponent<import('.').SplitCellEditorProps & import('react').RefAttributes<unknown>>;
98
+ percentProgressEditor: import('react').NamedExoticComponent<import('.').PercentProgressCellEditorProps & import('react').RefAttributes<{
99
+ getValue: () => unknown;
100
+ isCancelBeforeStart: () => boolean;
101
+ isCancelAfterEnd: () => boolean;
102
+ }>>;
90
103
  };
91
104
  /** String keys accepted by AG_GRID_CELL_COMPONENTS */
92
105
  export type AgGridCellComponentKey = keyof typeof AG_GRID_CELL_COMPONENTS;
@@ -8,16 +8,18 @@ import { InputDisplayRenderer as a } from "./input-display-renderer.js";
8
8
  import { SelectDisplayRenderer as p } from "./select-display-renderer.js";
9
9
  import { CheckboxDisplayRenderer as m } from "./checkbox-display-renderer.js";
10
10
  import { SwitchDisplayRenderer as d } from "./switch-display-renderer.js";
11
- import { TextAreaDisplayRenderer as n } from "./textarea-display-renderer.js";
12
- import { DateDisplayRenderer as s } from "./date-display-renderer.js";
13
- import { InputCellEditor as c } from "./editors/input-cell-editor.js";
14
- import { SelectCellEditor as f } from "./editors/select-cell-editor.js";
15
- import { TextAreaCellEditor as C } from "./editors/textarea-cell-editor.js";
16
- import { DateCellEditor as D } from "./editors/date-cell-editor.js";
17
- import { SplitCellEditor as E } from "./editors/split-cell-editor.js";
18
- import { applyValueFormatter as M, evaluateValidationRules as U, getFieldValue as j, mapBadgeColor as q, mapBadgeVariant as z, resolveCellEditable as H, resolveValueFormatter as J } from "./cell-renderer-utils.js";
19
- import { addRowDataEditableCheck as Q } from "../editable-utils.js";
20
- const V = "ag-cell-no-padding", F = "ag-cell-renderer-full-control", T = "ag-cell-inner-padding", v = {
11
+ import { TextAreaDisplayRenderer as s } from "./textarea-display-renderer.js";
12
+ import { DateDisplayRenderer as n } from "./date-display-renderer.js";
13
+ import { PercentProgressDisplayRenderer as c } from "./percent-progress-display-renderer.js";
14
+ import { InputCellEditor as f } from "./editors/input-cell-editor.js";
15
+ import { PercentProgressCellEditor as D } from "./editors/percent-progress-cell-editor.js";
16
+ import { SelectCellEditor as C } from "./editors/select-cell-editor.js";
17
+ import { TextAreaCellEditor as E } from "./editors/textarea-cell-editor.js";
18
+ import { DateCellEditor as R } from "./editors/date-cell-editor.js";
19
+ import { SplitCellEditor as y } from "./editors/split-cell-editor.js";
20
+ import { applyValueFormatter as z, evaluateValidationRules as H, getFieldValue as J, mapBadgeColor as K, mapBadgeVariant as Q, resolveCellEditable as W, resolveValueFormatter as X } from "./cell-renderer-utils.js";
21
+ import { addRowDataEditableCheck as Z } from "../editable-utils.js";
22
+ const v = "ag-cell-no-padding", w = "ag-cell-renderer-full-control", M = "ag-cell-inner-padding", U = {
21
23
  // Display-only renderers
22
24
  empty: e,
23
25
  badge: r,
@@ -30,42 +32,46 @@ const V = "ag-cell-no-padding", F = "ag-cell-renderer-full-control", T = "ag-cel
30
32
  selectDisplay: p,
31
33
  checkboxDisplay: m,
32
34
  switchDisplay: d,
33
- textareaDisplay: n,
34
- dateDisplay: s,
35
+ textareaDisplay: s,
36
+ dateDisplay: n,
37
+ percentProgressDisplay: c,
35
38
  // Cell editors (real interactive components, mounted on edit)
36
- inputEditor: c,
37
- selectEditor: f,
38
- textareaEditor: C,
39
- dateEditor: D,
40
- splitEditor: E
39
+ inputEditor: f,
40
+ selectEditor: C,
41
+ textareaEditor: E,
42
+ dateEditor: R,
43
+ splitEditor: y,
44
+ percentProgressEditor: D
41
45
  };
42
46
  export {
43
- F as AG_CELL_FULL_CONTROL,
44
- T as AG_CELL_INNER_PADDING,
45
- V as AG_CELL_NO_PADDING,
46
- v as AG_GRID_CELL_COMPONENTS,
47
+ w as AG_CELL_FULL_CONTROL,
48
+ M as AG_CELL_INNER_PADDING,
49
+ v as AG_CELL_NO_PADDING,
50
+ U as AG_GRID_CELL_COMPONENTS,
47
51
  o as ActionsCellRenderer,
48
52
  r as BadgeCellRenderer,
49
53
  m as CheckboxDisplayRenderer,
50
- D as DateCellEditor,
51
- s as DateDisplayRenderer,
54
+ R as DateCellEditor,
55
+ n as DateDisplayRenderer,
52
56
  e as EmptyCellRenderer,
53
57
  a as InputDisplayRenderer,
54
58
  l as LinkCellRenderer,
55
- f as SelectCellEditor,
59
+ D as PercentProgressCellEditor,
60
+ c as PercentProgressDisplayRenderer,
61
+ C as SelectCellEditor,
56
62
  p as SelectDisplayRenderer,
57
- E as SplitCellEditor,
63
+ y as SplitCellEditor,
58
64
  i as SplitCellRenderer,
59
65
  t as StatusBadgeRenderer,
60
66
  d as SwitchDisplayRenderer,
61
- C as TextAreaCellEditor,
62
- n as TextAreaDisplayRenderer,
63
- Q as addRowDataEditableCheck,
64
- M as applyValueFormatter,
65
- U as evaluateValidationRules,
66
- j as getFieldValue,
67
- q as mapBadgeColor,
68
- z as mapBadgeVariant,
69
- H as resolveCellEditable,
70
- J as resolveValueFormatter
67
+ E as TextAreaCellEditor,
68
+ s as TextAreaDisplayRenderer,
69
+ Z as addRowDataEditableCheck,
70
+ z as applyValueFormatter,
71
+ H as evaluateValidationRules,
72
+ J as getFieldValue,
73
+ K as mapBadgeColor,
74
+ Q as mapBadgeVariant,
75
+ W as resolveCellEditable,
76
+ X as resolveValueFormatter
71
77
  };
@@ -0,0 +1,31 @@
1
+ import { ICellRendererParams } from 'ag-grid-enterprise';
2
+ import { BadgeProps } from '../../badge';
3
+ import { ProgressProps } from '../../progress';
4
+ export interface PercentProgressDisplayRendererProps extends ICellRendererParams {
5
+ disabled?: boolean;
6
+ className?: string;
7
+ /** Inclusive min for the scale (default 0) */
8
+ min?: number;
9
+ /** Inclusive max for the scale (default 100) */
10
+ max?: number;
11
+ /** Decimal places for the badge label (default 0) */
12
+ fractionDigits?: number;
13
+ /** Percentage pill — same options as `Badge` (defaults: subtle / neutral / circle) */
14
+ badgeVariant?: BadgeProps['variant'];
15
+ badgeColor?: BadgeProps['color'];
16
+ badgeShape?: BadgeProps['shape'];
17
+ /** Progress track + fill — same options as `ProgressBar` / `Progress` (default: default) */
18
+ progressVariant?: ProgressProps['variant'];
19
+ }
20
+ /**
21
+ * PercentProgressDisplayRenderer — capsule progress bar + percentage pill (display).
22
+ * Pair with `PercentProgressCellEditor` via `cellEditor` for editing.
23
+ *
24
+ * Cell value: number or string like `"25"` / `"25%"`, or `{ value, cellMetadata? }`.
25
+ *
26
+ * Styling via `cellRendererParams`: `badgeVariant`, `badgeColor`, `badgeShape`, `progressVariant`.
27
+ */
28
+ export declare const PercentProgressDisplayRenderer: {
29
+ (props: PercentProgressDisplayRendererProps): import("react/jsx-runtime").JSX.Element;
30
+ displayName: string;
31
+ };
@@ -0,0 +1,63 @@
1
+ import { jsx as o, jsxs as V } from "react/jsx-runtime";
2
+ import { Badge as j } from "../../badge.js";
3
+ import { cn as w } from "../../../../lib/utils.js";
4
+ import { Progress as $ } from "../../progress.js";
5
+ function E(e) {
6
+ return e && typeof e == "object" && "value" in e ? e.value : e;
7
+ }
8
+ function F(e) {
9
+ if (e == null || e === "") return null;
10
+ if (typeof e == "number") return isNaN(e) ? null : e;
11
+ const a = Number(String(e).replace(/%/g, "").trim());
12
+ return isNaN(a) ? null : a;
13
+ }
14
+ function S(e, a, n) {
15
+ return Math.min(n, Math.max(a, e));
16
+ }
17
+ const _ = (e) => {
18
+ const { value: a, disabled: n, colDef: c, className: b, data: s } = e, l = e.min ?? 0, d = e.max ?? 100, u = e.fractionDigits ?? 0, x = e.badgeVariant ?? "subtle", h = e.badgeColor ?? "neutral", p = e.badgeShape ?? "circle", N = e.progressVariant ?? "default", f = a && typeof a == "object" && "cellMetadata" in a ? a.cellMetadata?._isDisabled : void 0, m = s && typeof s == "object" && "rowMetadata" in s ? s.rowMetadata?._isDisabled : void 0;
19
+ let t = !1;
20
+ if (!n) {
21
+ const P = c?._originalEditable;
22
+ c?.editable === !1 ? t = !1 : f === !1 ? t = !0 : f === !0 ? t = !1 : m === !1 ? t = !0 : m === !0 ? t = !1 : t = P === !0 || c?.editable === !0;
23
+ }
24
+ const v = E(a), g = F(v), i = g != null, r = i ? S(g, l, d) : l, y = d - l || 1, D = i ? (r - l) / y * 100 : 0, M = i ? u > 0 ? `${r.toFixed(u)}%` : `${Math.round(r)}%` : "--";
25
+ return /* @__PURE__ */ o(
26
+ "div",
27
+ {
28
+ className: `w-full h-full flex items-center ag-cell-inner-padding ${b ?? ""} ${n ? "opacity-60 cursor-not-allowed" : t ? "in-ag-editable-cell-highlight" : ""}`,
29
+ children: /* @__PURE__ */ V("div", { className: "flex w-full min-w-0 items-center gap-2", children: [
30
+ /* @__PURE__ */ o("div", { className: "min-w-0 flex-1", children: /* @__PURE__ */ o(
31
+ $,
32
+ {
33
+ label: !1,
34
+ variant: N,
35
+ value: D,
36
+ max: 100,
37
+ "aria-valuenow": i ? r : void 0,
38
+ "aria-valuemin": l,
39
+ "aria-valuemax": d,
40
+ className: "h-2.5"
41
+ }
42
+ ) }),
43
+ /* @__PURE__ */ o(
44
+ j,
45
+ {
46
+ variant: x,
47
+ color: h,
48
+ shape: p,
49
+ className: w(
50
+ "shrink-0 tabular-nums px-2 py-0.5 text-xs font-medium leading-none border-0",
51
+ !i && "text-[#dfe2e7]"
52
+ ),
53
+ children: M
54
+ }
55
+ )
56
+ ] })
57
+ }
58
+ );
59
+ };
60
+ _.displayName = "PercentProgressDisplayRenderer";
61
+ export {
62
+ _ as PercentProgressDisplayRenderer
63
+ };
@@ -1,5 +1,5 @@
1
1
  import { ShortcutRegistry, ConflictInfo } from './shortcut-registry';
2
- import { CommandDefinition, KeyBinding, ShortcutScope } from './utils';
2
+ import { CommandDefinition, KeyBinding, ShortcutScope, ShortcutStorageAdapter } from './utils';
3
3
  /**
4
4
  * CommandPaletteProvider — React context that wraps ShortcutRegistry,
5
5
  * manages ⌘K open/close, and provides the API to all descendants.
@@ -44,8 +44,10 @@ export interface CommandPaletteProviderProps {
44
44
  children: React.ReactNode;
45
45
  /** Custom keybinding to open the palette (defaults to ⌘K / Ctrl+K) */
46
46
  openKeybinding?: KeyBinding;
47
+ /** Custom storage adapter for shortcuts and recent commands */
48
+ storage?: ShortcutStorageAdapter;
47
49
  }
48
- export declare function CommandPaletteProvider({ children, openKeybinding, }: CommandPaletteProviderProps): import("react/jsx-runtime").JSX.Element;
50
+ export declare function CommandPaletteProvider({ children, openKeybinding, storage, }: CommandPaletteProviderProps): import("react/jsx-runtime").JSX.Element;
49
51
  export declare namespace CommandPaletteProvider {
50
52
  var displayName: string;
51
53
  }