@flanksource/clicky-ui 0.2.3 → 0.2.5
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.
- package/dist/components/Combobox.cjs +291 -0
- package/dist/components/Combobox.cjs.map +1 -0
- package/dist/components/Combobox.d.ts +59 -0
- package/dist/components/Combobox.d.ts.map +1 -0
- package/dist/components/Combobox.js +291 -0
- package/dist/components/Combobox.js.map +1 -0
- package/dist/components/FilterBar.cjs +153 -124
- package/dist/components/FilterBar.cjs.map +1 -1
- package/dist/components/FilterBar.d.ts +25 -1
- package/dist/components/FilterBar.d.ts.map +1 -1
- package/dist/components/FilterBar.js +153 -124
- package/dist/components/FilterBar.js.map +1 -1
- package/dist/components/FormatOptionsDropdown.cjs +62 -0
- package/dist/components/FormatOptionsDropdown.cjs.map +1 -0
- package/dist/components/FormatOptionsDropdown.d.ts +37 -0
- package/dist/components/FormatOptionsDropdown.d.ts.map +1 -0
- package/dist/components/FormatOptionsDropdown.js +62 -0
- package/dist/components/FormatOptionsDropdown.js.map +1 -0
- package/dist/components/SplitButton.cjs +87 -0
- package/dist/components/SplitButton.cjs.map +1 -0
- package/dist/components/SplitButton.d.ts +32 -0
- package/dist/components/SplitButton.d.ts.map +1 -0
- package/dist/components/SplitButton.js +87 -0
- package/dist/components/SplitButton.js.map +1 -0
- package/dist/components/icon-menu-picker.cjs +14 -3
- package/dist/components/icon-menu-picker.cjs.map +1 -1
- package/dist/components/icon-menu-picker.d.ts.map +1 -1
- package/dist/components/icon-menu-picker.js +15 -4
- package/dist/components/icon-menu-picker.js.map +1 -1
- package/dist/components.cjs +7 -0
- package/dist/components.cjs.map +1 -1
- package/dist/components.d.ts +3 -0
- package/dist/components.d.ts.map +1 -1
- package/dist/components.js +7 -0
- package/dist/components.js.map +1 -1
- package/dist/data/Badge.d.ts +1 -1
- package/dist/data/ProgressBar.cjs +4 -2
- package/dist/data/ProgressBar.cjs.map +1 -1
- package/dist/data/ProgressBar.d.ts +1 -1
- package/dist/data/ProgressBar.d.ts.map +1 -1
- package/dist/data/ProgressBar.js +4 -2
- package/dist/data/ProgressBar.js.map +1 -1
- package/dist/data/TaskManager.cjs +162 -0
- package/dist/data/TaskManager.cjs.map +1 -0
- package/dist/data/TaskManager.d.ts +21 -0
- package/dist/data/TaskManager.d.ts.map +1 -0
- package/dist/data/TaskManager.js +162 -0
- package/dist/data/TaskManager.js.map +1 -0
- package/dist/data/TaskProgress.cjs +125 -0
- package/dist/data/TaskProgress.cjs.map +1 -0
- package/dist/data/TaskProgress.d.ts +20 -0
- package/dist/data/TaskProgress.d.ts.map +1 -0
- package/dist/data/TaskProgress.js +125 -0
- package/dist/data/TaskProgress.js.map +1 -0
- package/dist/data/TaskSnapshot.cjs +23 -0
- package/dist/data/TaskSnapshot.cjs.map +1 -0
- package/dist/data/TaskSnapshot.d.ts +49 -0
- package/dist/data/TaskSnapshot.d.ts.map +1 -0
- package/dist/data/TaskSnapshot.js +23 -0
- package/dist/data/TaskSnapshot.js.map +1 -0
- package/dist/data/TimeseriesPanel.axes.cjs +39 -0
- package/dist/data/TimeseriesPanel.axes.cjs.map +1 -0
- package/dist/data/TimeseriesPanel.axes.d.ts +28 -0
- package/dist/data/TimeseriesPanel.axes.d.ts.map +1 -0
- package/dist/data/TimeseriesPanel.axes.js +39 -0
- package/dist/data/TimeseriesPanel.axes.js.map +1 -0
- package/dist/data/TimeseriesPanel.cjs +324 -0
- package/dist/data/TimeseriesPanel.cjs.map +1 -0
- package/dist/data/TimeseriesPanel.d.ts +141 -0
- package/dist/data/TimeseriesPanel.d.ts.map +1 -0
- package/dist/data/TimeseriesPanel.js +324 -0
- package/dist/data/TimeseriesPanel.js.map +1 -0
- package/dist/data/Tree.cjs.map +1 -1
- package/dist/data/Tree.d.ts.map +1 -1
- package/dist/data/Tree.js.map +1 -1
- package/dist/data/TreeNode.cjs +44 -7
- package/dist/data/TreeNode.cjs.map +1 -1
- package/dist/data/TreeNode.d.ts +19 -1
- package/dist/data/TreeNode.d.ts.map +1 -1
- package/dist/data/TreeNode.js +44 -7
- package/dist/data/TreeNode.js.map +1 -1
- package/dist/data/diagnostics/DiagnosticsDetailPanel.cjs +66 -44
- package/dist/data/diagnostics/DiagnosticsDetailPanel.cjs.map +1 -1
- package/dist/data/diagnostics/DiagnosticsDetailPanel.d.ts +21 -1
- package/dist/data/diagnostics/DiagnosticsDetailPanel.d.ts.map +1 -1
- package/dist/data/diagnostics/DiagnosticsDetailPanel.js +65 -43
- package/dist/data/diagnostics/DiagnosticsDetailPanel.js.map +1 -1
- package/dist/data/diagnostics/DiagnosticsTree.cjs +2 -1
- package/dist/data/diagnostics/DiagnosticsTree.cjs.map +1 -1
- package/dist/data/diagnostics/DiagnosticsTree.js +2 -1
- package/dist/data/diagnostics/DiagnosticsTree.js.map +1 -1
- package/dist/data/diagnostics/FrameSourceWindow.cjs +37 -0
- package/dist/data/diagnostics/FrameSourceWindow.cjs.map +1 -0
- package/dist/data/diagnostics/FrameSourceWindow.d.ts +15 -0
- package/dist/data/diagnostics/FrameSourceWindow.d.ts.map +1 -0
- package/dist/data/diagnostics/FrameSourceWindow.js +37 -0
- package/dist/data/diagnostics/FrameSourceWindow.js.map +1 -0
- package/dist/data/diagnostics/JvmStackTrace.cjs +25 -12
- package/dist/data/diagnostics/JvmStackTrace.cjs.map +1 -1
- package/dist/data/diagnostics/JvmStackTrace.d.ts +8 -1
- package/dist/data/diagnostics/JvmStackTrace.d.ts.map +1 -1
- package/dist/data/diagnostics/JvmStackTrace.js +26 -13
- package/dist/data/diagnostics/JvmStackTrace.js.map +1 -1
- package/dist/data/diagnostics/ThreadCard.cjs +9 -2
- package/dist/data/diagnostics/ThreadCard.cjs.map +1 -1
- package/dist/data/diagnostics/ThreadCard.d.ts +3 -1
- package/dist/data/diagnostics/ThreadCard.d.ts.map +1 -1
- package/dist/data/diagnostics/ThreadCard.js +9 -2
- package/dist/data/diagnostics/ThreadCard.js.map +1 -1
- package/dist/data/diagnostics/jvm-stacktrace.cjs +10 -1
- package/dist/data/diagnostics/jvm-stacktrace.cjs.map +1 -1
- package/dist/data/diagnostics/jvm-stacktrace.d.ts.map +1 -1
- package/dist/data/diagnostics/jvm-stacktrace.js +10 -1
- package/dist/data/diagnostics/jvm-stacktrace.js.map +1 -1
- package/dist/data/diagnostics/utils.cjs +0 -12
- package/dist/data/diagnostics/utils.cjs.map +1 -1
- package/dist/data/diagnostics/utils.d.ts +1 -1
- package/dist/data/diagnostics/utils.d.ts.map +1 -1
- package/dist/data/diagnostics/utils.js +0 -12
- package/dist/data/diagnostics/utils.js.map +1 -1
- package/dist/data/task-status.cjs +108 -0
- package/dist/data/task-status.cjs.map +1 -0
- package/dist/data/task-status.d.ts +21 -0
- package/dist/data/task-status.d.ts.map +1 -0
- package/dist/data/task-status.js +108 -0
- package/dist/data/task-status.js.map +1 -0
- package/dist/data.cjs +21 -0
- package/dist/data.cjs.map +1 -1
- package/dist/data.d.ts +7 -1
- package/dist/data.d.ts.map +1 -1
- package/dist/data.js +21 -0
- package/dist/data.js.map +1 -1
- package/dist/hooks/use-task-run.cjs +137 -0
- package/dist/hooks/use-task-run.cjs.map +1 -0
- package/dist/hooks/use-task-run.d.ts +35 -0
- package/dist/hooks/use-task-run.d.ts.map +1 -0
- package/dist/hooks/use-task-run.js +137 -0
- package/dist/hooks/use-task-run.js.map +1 -0
- package/dist/hooks.cjs +3 -0
- package/dist/hooks.cjs.map +1 -1
- package/dist/hooks.d.ts +1 -0
- package/dist/hooks.d.ts.map +1 -1
- package/dist/hooks.js +3 -0
- package/dist/hooks.js.map +1 -1
- package/dist/index.cjs +37 -0
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +37 -0
- package/dist/index.js.map +1 -1
- package/dist/lib/color.cjs +33 -0
- package/dist/lib/color.cjs.map +1 -0
- package/dist/lib/color.d.ts +10 -0
- package/dist/lib/color.d.ts.map +1 -0
- package/dist/lib/color.js +33 -0
- package/dist/lib/color.js.map +1 -0
- package/dist/lib/format.cjs +77 -0
- package/dist/lib/format.cjs.map +1 -0
- package/dist/lib/format.d.ts +30 -0
- package/dist/lib/format.d.ts.map +1 -0
- package/dist/lib/format.js +77 -0
- package/dist/lib/format.js.map +1 -0
- package/dist/overlay/DropdownMenu.cjs +18 -2
- package/dist/overlay/DropdownMenu.cjs.map +1 -1
- package/dist/overlay/DropdownMenu.d.ts +3 -1
- package/dist/overlay/DropdownMenu.d.ts.map +1 -1
- package/dist/overlay/DropdownMenu.js +18 -2
- package/dist/overlay/DropdownMenu.js.map +1 -1
- package/dist/rpc/types.cjs.map +1 -1
- package/dist/rpc/types.d.ts +4 -0
- package/dist/rpc/types.d.ts.map +1 -1
- package/dist/rpc/types.js.map +1 -1
- package/dist/styles.css +1 -1
- package/dist/utils.cjs +6 -0
- package/dist/utils.cjs.map +1 -1
- package/dist/utils.d.ts +1 -0
- package/dist/utils.d.ts.map +1 -1
- package/dist/utils.js +6 -0
- package/dist/utils.js.map +1 -1
- package/package.json +4 -1
|
@@ -74,6 +74,15 @@ export type FilterBarLookupMultiFilter = {
|
|
|
74
74
|
options: FilterBarLookupOption[];
|
|
75
75
|
onChange: (value: string[]) => void;
|
|
76
76
|
placeholder?: string;
|
|
77
|
+
/**
|
|
78
|
+
* Optional async search invoked (debounced) as the user types; the consumer
|
|
79
|
+
* fetches matching options and feeds them back via `options`. When set, the
|
|
80
|
+
* typeahead is server-driven (results replace the list); when absent it
|
|
81
|
+
* filters the static `options` client-side.
|
|
82
|
+
*/
|
|
83
|
+
onSearch?: (query: string) => void;
|
|
84
|
+
/** Shows a loading indicator while a search is in flight. */
|
|
85
|
+
loading?: boolean;
|
|
77
86
|
disabled?: boolean;
|
|
78
87
|
className?: string;
|
|
79
88
|
};
|
|
@@ -86,9 +95,24 @@ export type FilterBarMultiFilter = {
|
|
|
86
95
|
description?: string;
|
|
87
96
|
/** Map of option value to include/exclude state. */
|
|
88
97
|
value: Record<string, FilterBarMultiFilterMode>;
|
|
89
|
-
/** Available chip options. */
|
|
98
|
+
/** Available chip options. When `truncated`, this is only the head set. */
|
|
90
99
|
options: MultiSelectOption[];
|
|
91
100
|
onChange: (value: Record<string, FilterBarMultiFilterMode>) => void;
|
|
101
|
+
/**
|
|
102
|
+
* True when more options exist than are in `options` (the option set was
|
|
103
|
+
* capped server-side). Renders an "… and N more" hint and, with `onSearch`,
|
|
104
|
+
* lets the user search the full set.
|
|
105
|
+
*/
|
|
106
|
+
truncated?: boolean;
|
|
107
|
+
/** True distinct count behind a truncated option set; drives the "N more" label. */
|
|
108
|
+
total?: number;
|
|
109
|
+
/**
|
|
110
|
+
* Optional async fetch invoked (debounced) as the user types in the option
|
|
111
|
+
* search box. Returns the options matching the query, which are merged into
|
|
112
|
+
* the displayed list so values beyond the head become selectable. When
|
|
113
|
+
* absent, the search box filters the static `options` client-side only.
|
|
114
|
+
*/
|
|
115
|
+
onSearch?: (query: string) => Promise<MultiSelectOption[]> | void;
|
|
92
116
|
disabled?: boolean;
|
|
93
117
|
className?: string;
|
|
94
118
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FilterBar.d.ts","sourceRoot":"","sources":["../../src/components/FilterBar.tsx"],"names":[],"mappings":"AAAA,OAAO,EASL,KAAK,SAAS,EAEf,MAAM,OAAO,CAAC;AACf,OAAO,EAAc,KAAK,UAAU,EAAE,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"FilterBar.d.ts","sourceRoot":"","sources":["../../src/components/FilterBar.tsx"],"names":[],"mappings":"AAAA,OAAO,EASL,KAAK,SAAS,EAEf,MAAM,OAAO,CAAC;AACf,OAAO,EAAc,KAAK,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAOjE,OAAO,EAAe,KAAK,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAGpE,OAAO,EAAa,KAAK,oBAAoB,EAAE,MAAM,aAAa,CAAC;AAcnE,MAAM,MAAM,oBAAoB,GAAG;IACjC,8BAA8B;IAC9B,KAAK,EAAE,MAAM,CAAC;IACd,6EAA6E;IAC7E,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAClC,6CAA6C;IAC7C,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,6CAA6C;IAC7C,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,2CAA2C;IAC3C,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,CAAC;AAEF,MAAM,MAAM,mBAAmB,GAAG;IAChC,qEAAqE;IACrE,GAAG,EAAE,MAAM,CAAC;IACZ,iCAAiC;IACjC,IAAI,EAAE,MAAM,CAAC;IACb,yCAAyC;IACzC,KAAK,EAAE,MAAM,CAAC;IACd,qDAAqD;IACrD,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,8BAA8B;IAC9B,KAAK,EAAE,MAAM,CAAC;IACd,wCAAwC;IACxC,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAClC,sCAAsC;IACtC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,4BAA4B;IAC5B,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,8CAA8C;IAC9C,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,CAAC;AAEF,MAAM,MAAM,qBAAqB,GAAG;IAClC,4CAA4C;IAC5C,KAAK,EAAE,MAAM,CAAC;IACd,qDAAqD;IACrD,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,oCAAoC;IACpC,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,gCAAgC;IAChC,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,CAAC;AAEF,MAAM,MAAM,wBAAwB,GAAG,MAAM,GAAG,QAAQ,GAAG,MAAM,CAAC;AAElE,MAAM,MAAM,qBAAqB,GAAG;IAClC,GAAG,EAAE,MAAM,CAAC;IACZ,8DAA8D;IAC9D,IAAI,EAAE,QAAQ,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,0CAA0C;IAC1C,KAAK,EAAE,MAAM,CAAC;IACd,wCAAwC;IACxC,OAAO,EAAE,qBAAqB,EAAE,CAAC;IACjC,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAClC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,8CAA8C;IAC9C,SAAS,CAAC,EAAE,wBAAwB,CAAC;IACrC,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,CAAC;AAEF,MAAM,MAAM,0BAA0B,GAAG;IACvC,GAAG,EAAE,MAAM,CAAC;IACZ,2CAA2C;IAC3C,IAAI,EAAE,cAAc,CAAC;IACrB,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,kCAAkC;IAClC,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,wCAAwC;IACxC,OAAO,EAAE,qBAAqB,EAAE,CAAC;IACjC,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,IAAI,CAAC;IACpC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB;;;;;OAKG;IACH,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACnC,6DAA6D;IAC7D,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,CAAC;AAEF,MAAM,MAAM,wBAAwB,GAAG,OAAO,CAAC,UAAU,EAAE,SAAS,GAAG,SAAS,CAAC,CAAC;AAElF,MAAM,MAAM,oBAAoB,GAAG;IACjC,GAAG,EAAE,MAAM,CAAC;IACZ,qDAAqD;IACrD,IAAI,EAAE,OAAO,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,oDAAoD;IACpD,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,wBAAwB,CAAC,CAAC;IAChD,2EAA2E;IAC3E,OAAO,EAAE,iBAAiB,EAAE,CAAC;IAC7B,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,wBAAwB,CAAC,KAAK,IAAI,CAAC;IACpE;;;;OAIG;IACH,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,oFAAoF;IACpF,KAAK,CAAC,EAAE,MAAM,CAAC;IACf;;;;;OAKG;IACH,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,OAAO,CAAC,iBAAiB,EAAE,CAAC,GAAG,IAAI,CAAC;IAClE,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,CAAC;AAEF,MAAM,MAAM,yBAAyB,GAAG;IACtC,uBAAuB;IACvB,QAAQ,EAAE,MAAM,CAAC;IACjB,oCAAoC;IACpC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,6BAA6B;IAC7B,OAAO,EAAE,iBAAiB,EAAE,CAAC;CAC9B,CAAC;AAEF,MAAM,MAAM,0BAA0B,GAAG;IACvC,GAAG,EAAE,MAAM,CAAC;IACZ,6CAA6C;IAC7C,IAAI,EAAE,cAAc,CAAC;IACrB,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;IAGrB,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,wBAAwB,CAAC,CAAC;IAChD,MAAM,EAAE,yBAAyB,EAAE,CAAC;IACpC,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,wBAAwB,CAAC,KAAK,IAAI,CAAC;IACpE,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,CAAC;AAEF,MAAM,MAAM,0BAA0B,GAAG;IACvC,GAAG,EAAE,MAAM,CAAC;IACZ,+CAA+C;IAC/C,IAAI,EAAE,cAAc,CAAC;IACrB,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,kCAAkC;IAClC,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,kCAAkC;IAClC,OAAO,EAAE,iBAAiB,EAAE,CAAC;IAC7B,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,IAAI,CAAC;IACpC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,CAAC;AAEF,MAAM,MAAM,oBAAoB,GAAG;IACjC,qEAAqE;IACrE,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,qEAAqE;IACrE,GAAG,CAAC,EAAE,MAAM,CAAC;CACd,CAAC;AAEF,MAAM,MAAM,qBAAqB,GAAG;IAClC,GAAG,EAAE,MAAM,CAAC;IACZ,+CAA+C;IAC/C,IAAI,EAAE,QAAQ,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,gCAAgC;IAChC,KAAK,EAAE,oBAAoB,CAAC;IAC5B,QAAQ,EAAE,CAAC,KAAK,EAAE,oBAAoB,KAAK,IAAI,CAAC;IAChD,qDAAqD;IACrD,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,qDAAqD;IACrD,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,uDAAuD;IACvD,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,wCAAwC;IACxC,WAAW,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,MAAM,CAAC;IACxC,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,CAAC;AAEF,MAAM,MAAM,mBAAmB,GAAG;IAChC,GAAG,EAAE,MAAM,CAAC;IACZ,wCAAwC;IACxC,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,iCAAiC;IACjC,KAAK,EAAE,MAAM,CAAC;IACd,8BAA8B;IAC9B,OAAO,EAAE,KAAK,CAAC;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAClD,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAClC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,CAAC;AAEF,MAAM,MAAM,sBAAsB,GAAG;IACnC,GAAG,EAAE,MAAM,CAAC;IACZ,gCAAgC;IAChC,IAAI,EAAE,SAAS,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,gCAAgC;IAChC,KAAK,EAAE,OAAO,CAAC;IACf,QAAQ,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,IAAI,CAAC;IACnC,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,CAAC;AAEF,MAAM,MAAM,eAAe,GACvB,mBAAmB,GACnB,qBAAqB,GACrB,0BAA0B,GAC1B,oBAAoB,GACpB,0BAA0B,GAC1B,0BAA0B,GAC1B,qBAAqB,GACrB,mBAAmB,GACnB,sBAAsB,CAAC;AAE3B,MAAM,MAAM,oBAAoB,GAAG;IACjC,4BAA4B;IAC5B,KAAK,EAAE,MAAM,CAAC;IACd,yCAAyC;IACzC,IAAI,EAAE,MAAM,CAAC;IACb,uCAAuC;IACvC,EAAE,EAAE,MAAM,CAAC;CACZ,CAAC;AAEF,MAAM,MAAM,mBAAmB,GAAG;IAChC,2BAA2B;IAC3B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,yBAAyB;IACzB,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,8CAA8C;IAC9C,OAAO,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,KAAK,IAAI,CAAC;IAC5C,yDAAyD;IACzD,OAAO,CAAC,EAAE,KAAK,CAAC,oBAAoB,GAAG,oBAAoB,CAAC,CAAC;IAC7D,uDAAuD;IACvD,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,yBAAyB;IACzB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,kCAAkC;IAClC,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;IACrB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,CAAC;AAEF,MAAM,MAAM,cAAc,GAAG;IAC3B,kDAAkD;IAClD,MAAM,CAAC,EAAE,oBAAoB,CAAC;IAC9B,gDAAgD;IAChD,OAAO,CAAC,EAAE,eAAe,EAAE,CAAC;IAC5B,+BAA+B;IAC/B,SAAS,CAAC,EAAE,mBAAmB,CAAC;IAChC,+BAA+B;IAC/B,SAAS,CAAC,EAAE,mBAAmB,CAAC;IAChC,qDAAqD;IACrD,QAAQ,CAAC,EAAE,SAAS,CAAC;IACrB,kDAAkD;IAClD,OAAO,CAAC,EAAE,SAAS,CAAC;IACpB,8CAA8C;IAC9C,QAAQ,CAAC,EAAE,SAAS,CAAC;IACrB,uCAAuC;IACvC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB;;;OAGG;IACH,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,6DAA6D;IAC7D,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;IACrB,kCAAkC;IAClC,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,iDAAiD;IACjD,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,yFAAyF;IACzF,YAAY,CAAC,EAAE,YAAY,GAAG,MAAM,CAAC;CACtC,CAAC;AAEF,wBAAgB,SAAS,CAAC,EACxB,MAAM,EACN,OAAO,EACP,SAAS,EACT,SAAS,EACT,QAAQ,EACR,OAAO,EACP,QAAQ,EACR,SAAS,EACT,UAAiB,EACjB,OAAO,EACP,UAAoB,EACpB,SAAiB,EACjB,YAA2B,GAC5B,EAAE,cAAc,2CAuLhB;AAED,KAAK,0BAA0B,GAAG,MAAM,GAAG,UAAU,CAAC;AAEtD,wBAAgB,oBAAoB,CAAC,EACnC,MAAM,EACN,MAAe,EACf,UAAiB,GAClB,EAAE;IACD,MAAM,EAAE,eAAe,CAAC;IACxB,MAAM,CAAC,EAAE,0BAA0B,CAAC;IACpC,UAAU,CAAC,EAAE,OAAO,CAAC;CACtB,2CAQA;AAuaD,wBAAgB,mBAAmB,CAAC,EAClC,IAAI,EACJ,KAAK,EACL,IAAS,EACT,EAAO,EACP,OAAO,EACP,OAAO,EACP,WAAW,EACX,QAAQ,EACR,SAAS,EACT,eAAe,EACf,aAAa,EACb,UAAU,GACX,EAAE,mBAAmB,GAAG;IAAE,IAAI,EAAE,MAAM,GAAG,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,2CAqBhE;AAghDD,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,eAAe,QAsB3D;AAED,wBAAgB,uBAAuB,CAAC,MAAM,EAAE,eAAe,WAc9D"}
|
|
@@ -4,6 +4,7 @@ import { FilterPill } from "../data/FilterPill.js";
|
|
|
4
4
|
import { Icon } from "../data/Icon.js";
|
|
5
5
|
import { cn } from "../lib/utils.js";
|
|
6
6
|
import { Button } from "./button.js";
|
|
7
|
+
import { Combobox } from "./Combobox.js";
|
|
7
8
|
import { DateTimePicker } from "./DateTimePicker.js";
|
|
8
9
|
import { MultiSelect } from "./MultiSelect.js";
|
|
9
10
|
import { RangeSlider } from "./RangeSlider.js";
|
|
@@ -447,6 +448,13 @@ function FilterBarKeyValueControl({ filter }) {
|
|
|
447
448
|
function filterInputId(filter) {
|
|
448
449
|
return `filterbar-overflow-${filter.key}`;
|
|
449
450
|
}
|
|
451
|
+
function lookupOptionsToCombobox(options) {
|
|
452
|
+
return options.map((option) => ({
|
|
453
|
+
value: option.value,
|
|
454
|
+
label: option.label ?? option.value,
|
|
455
|
+
...option.disabled !== void 0 ? { disabled: option.disabled } : {}
|
|
456
|
+
}));
|
|
457
|
+
}
|
|
450
458
|
function valueInputClassName(disabled) {
|
|
451
459
|
return cn(
|
|
452
460
|
"h-8 w-full rounded-md border border-input bg-background px-2 text-sm text-foreground outline-none placeholder:text-muted-foreground focus-visible:ring-2 focus-visible:ring-ring",
|
|
@@ -471,7 +479,6 @@ function TextFilterValueControl({ filter }) {
|
|
|
471
479
|
}
|
|
472
480
|
function LookupFilterValueControl({ filter }) {
|
|
473
481
|
const [draft, setDraft] = useDebouncedTextDraft(filter.value, filter.onChange);
|
|
474
|
-
const listId = `${filter.key}-overflow-lookup-options`;
|
|
475
482
|
if (filter.inputType === "date") {
|
|
476
483
|
return /* @__PURE__ */ jsx(
|
|
477
484
|
DateTimePicker,
|
|
@@ -481,56 +488,55 @@ function LookupFilterValueControl({ filter }) {
|
|
|
481
488
|
className: "w-full",
|
|
482
489
|
inputClassName: valueInputClassName(filter.disabled),
|
|
483
490
|
buttonClassName: "right-1",
|
|
484
|
-
placeholder: filter.placeholder
|
|
491
|
+
placeholder: filter.placeholder,
|
|
485
492
|
value: draft,
|
|
486
|
-
list: listId,
|
|
487
493
|
disabled: filter.disabled,
|
|
488
494
|
onChange: setDraft
|
|
489
495
|
}
|
|
490
496
|
);
|
|
491
497
|
}
|
|
492
|
-
|
|
493
|
-
/* @__PURE__ */ jsx(
|
|
498
|
+
if (filter.inputType === "number") {
|
|
499
|
+
return /* @__PURE__ */ jsx(
|
|
494
500
|
"input",
|
|
495
501
|
{
|
|
496
502
|
id: filterInputId(filter),
|
|
497
|
-
type:
|
|
503
|
+
type: "number",
|
|
498
504
|
"aria-label": filter.label,
|
|
499
505
|
className: valueInputClassName(filter.disabled),
|
|
500
|
-
placeholder: filter.placeholder
|
|
506
|
+
placeholder: filter.placeholder,
|
|
501
507
|
value: draft,
|
|
502
|
-
list: listId,
|
|
503
508
|
disabled: filter.disabled,
|
|
504
509
|
onChange: (event) => setDraft(event.target.value)
|
|
505
510
|
}
|
|
506
|
-
)
|
|
507
|
-
|
|
508
|
-
|
|
509
|
-
|
|
510
|
-
|
|
511
|
-
|
|
512
|
-
|
|
513
|
-
|
|
514
|
-
|
|
515
|
-
|
|
516
|
-
|
|
511
|
+
);
|
|
512
|
+
}
|
|
513
|
+
return /* @__PURE__ */ jsx(
|
|
514
|
+
Combobox,
|
|
515
|
+
{
|
|
516
|
+
id: filterInputId(filter),
|
|
517
|
+
options: lookupOptionsToCombobox(filter.options),
|
|
518
|
+
value: filter.value,
|
|
519
|
+
onChange: filter.onChange,
|
|
520
|
+
allowCustomValue: false,
|
|
521
|
+
className: "w-full",
|
|
522
|
+
...filter.placeholder !== void 0 ? { placeholder: filter.placeholder } : {},
|
|
523
|
+
...filter.disabled !== void 0 ? { disabled: filter.disabled } : {}
|
|
524
|
+
}
|
|
525
|
+
);
|
|
517
526
|
}
|
|
518
527
|
function LookupMultiFilterValueControl({ filter }) {
|
|
519
528
|
return /* @__PURE__ */ jsx(
|
|
520
|
-
|
|
529
|
+
Combobox,
|
|
521
530
|
{
|
|
522
|
-
|
|
523
|
-
|
|
524
|
-
|
|
525
|
-
...option.disabled !== void 0 ? { disabled: option.disabled } : {},
|
|
526
|
-
...option.title !== void 0 ? { title: option.title } : {}
|
|
527
|
-
})),
|
|
531
|
+
multiple: true,
|
|
532
|
+
id: filterInputId(filter),
|
|
533
|
+
options: lookupOptionsToCombobox(filter.options),
|
|
528
534
|
value: filter.value,
|
|
529
535
|
onChange: filter.onChange,
|
|
530
|
-
|
|
531
|
-
|
|
532
|
-
|
|
533
|
-
|
|
536
|
+
allowCustomValue: false,
|
|
537
|
+
className: "w-full",
|
|
538
|
+
...filter.placeholder !== void 0 ? { placeholder: filter.placeholder } : {},
|
|
539
|
+
...filter.disabled !== void 0 ? { disabled: filter.disabled } : {}
|
|
534
540
|
}
|
|
535
541
|
);
|
|
536
542
|
}
|
|
@@ -729,57 +735,63 @@ function TextFilterField({ filter, grow }) {
|
|
|
729
735
|
}
|
|
730
736
|
);
|
|
731
737
|
}
|
|
738
|
+
function lookupFieldWidthClass(grow) {
|
|
739
|
+
return grow ? "min-w-[12rem] max-w-[18rem] flex-1" : "min-w-[11rem] max-w-[15rem] shrink-0";
|
|
740
|
+
}
|
|
732
741
|
function LookupFilterField({ filter, grow }) {
|
|
733
742
|
const [draft, setDraft] = useDebouncedTextDraft(filter.value, filter.onChange);
|
|
734
|
-
|
|
735
|
-
|
|
736
|
-
|
|
737
|
-
|
|
738
|
-
|
|
739
|
-
|
|
740
|
-
|
|
741
|
-
|
|
742
|
-
|
|
743
|
-
|
|
744
|
-
),
|
|
745
|
-
children: [
|
|
746
|
-
/* @__PURE__ */ jsx("span", { className: "whitespace-nowrap font-medium uppercase tracking-wide text-muted-foreground", children: filter.label }),
|
|
747
|
-
filter.inputType === "date" ? /* @__PURE__ */ jsx(
|
|
748
|
-
DateTimePicker,
|
|
749
|
-
{
|
|
750
|
-
"aria-label": filter.label,
|
|
751
|
-
className: "w-full",
|
|
752
|
-
inputClassName: "w-full min-w-0 border-0 bg-transparent px-0 pr-6 text-sm text-foreground shadow-none focus-visible:ring-0",
|
|
753
|
-
buttonClassName: "right-0",
|
|
754
|
-
placeholder: filter.placeholder ?? "Filter…",
|
|
755
|
-
value: draft,
|
|
756
|
-
list: listId,
|
|
757
|
-
disabled: filter.disabled,
|
|
758
|
-
onChange: setDraft
|
|
759
|
-
}
|
|
760
|
-
) : /* @__PURE__ */ jsx(
|
|
761
|
-
"input",
|
|
762
|
-
{
|
|
763
|
-
type: filter.inputType === "number" ? "number" : "text",
|
|
764
|
-
"aria-label": filter.label,
|
|
765
|
-
className: "w-full min-w-0 bg-transparent text-sm text-foreground outline-none placeholder:text-muted-foreground disabled:cursor-not-allowed",
|
|
766
|
-
placeholder: filter.placeholder ?? "Filter…",
|
|
767
|
-
value: draft,
|
|
768
|
-
list: listId,
|
|
769
|
-
disabled: filter.disabled,
|
|
770
|
-
onChange: (event) => setDraft(event.target.value)
|
|
771
|
-
}
|
|
743
|
+
if (filter.inputType === "date" || filter.inputType === "number") {
|
|
744
|
+
return /* @__PURE__ */ jsxs(
|
|
745
|
+
"label",
|
|
746
|
+
{
|
|
747
|
+
title: filter.description,
|
|
748
|
+
className: cn(
|
|
749
|
+
"flex h-8 items-center gap-2 rounded-md border border-input bg-muted/30 pl-2 pr-2 text-xs",
|
|
750
|
+
lookupFieldWidthClass(grow),
|
|
751
|
+
filter.disabled && "opacity-60",
|
|
752
|
+
filter.className
|
|
772
753
|
),
|
|
773
|
-
|
|
774
|
-
"
|
|
775
|
-
|
|
776
|
-
|
|
777
|
-
|
|
778
|
-
|
|
779
|
-
|
|
780
|
-
|
|
781
|
-
|
|
782
|
-
|
|
754
|
+
children: [
|
|
755
|
+
/* @__PURE__ */ jsx("span", { className: "whitespace-nowrap font-medium uppercase tracking-wide text-muted-foreground", children: filter.label }),
|
|
756
|
+
filter.inputType === "date" ? /* @__PURE__ */ jsx(
|
|
757
|
+
DateTimePicker,
|
|
758
|
+
{
|
|
759
|
+
"aria-label": filter.label,
|
|
760
|
+
className: "w-full",
|
|
761
|
+
inputClassName: "w-full min-w-0 border-0 bg-transparent px-0 pr-6 text-sm text-foreground shadow-none focus-visible:ring-0",
|
|
762
|
+
buttonClassName: "right-0",
|
|
763
|
+
placeholder: filter.placeholder,
|
|
764
|
+
value: draft,
|
|
765
|
+
disabled: filter.disabled,
|
|
766
|
+
onChange: setDraft
|
|
767
|
+
}
|
|
768
|
+
) : /* @__PURE__ */ jsx(
|
|
769
|
+
"input",
|
|
770
|
+
{
|
|
771
|
+
type: "number",
|
|
772
|
+
"aria-label": filter.label,
|
|
773
|
+
className: "w-full min-w-0 bg-transparent text-sm text-foreground outline-none placeholder:text-muted-foreground disabled:cursor-not-allowed",
|
|
774
|
+
placeholder: filter.placeholder,
|
|
775
|
+
value: draft,
|
|
776
|
+
disabled: filter.disabled,
|
|
777
|
+
onChange: (event) => setDraft(event.target.value)
|
|
778
|
+
}
|
|
779
|
+
)
|
|
780
|
+
]
|
|
781
|
+
}
|
|
782
|
+
);
|
|
783
|
+
}
|
|
784
|
+
return /* @__PURE__ */ jsx(
|
|
785
|
+
Combobox,
|
|
786
|
+
{
|
|
787
|
+
label: filter.label,
|
|
788
|
+
options: lookupOptionsToCombobox(filter.options),
|
|
789
|
+
value: filter.value,
|
|
790
|
+
onChange: filter.onChange,
|
|
791
|
+
allowCustomValue: false,
|
|
792
|
+
className: cn(lookupFieldWidthClass(grow), filter.className),
|
|
793
|
+
...filter.placeholder !== void 0 ? { placeholder: filter.placeholder } : {},
|
|
794
|
+
...filter.disabled !== void 0 ? { disabled: filter.disabled } : {}
|
|
783
795
|
}
|
|
784
796
|
);
|
|
785
797
|
}
|
|
@@ -787,46 +799,20 @@ function LookupMultiFilterField({
|
|
|
787
799
|
filter,
|
|
788
800
|
grow
|
|
789
801
|
}) {
|
|
790
|
-
|
|
791
|
-
|
|
792
|
-
(next) => filter.onChange(parseLookupMultiValue(next))
|
|
793
|
-
);
|
|
794
|
-
const listId = `${filter.key}-lookup-options`;
|
|
795
|
-
return /* @__PURE__ */ jsxs(
|
|
796
|
-
"label",
|
|
802
|
+
return /* @__PURE__ */ jsx(
|
|
803
|
+
Combobox,
|
|
797
804
|
{
|
|
798
|
-
|
|
799
|
-
|
|
800
|
-
|
|
801
|
-
|
|
802
|
-
|
|
803
|
-
|
|
804
|
-
),
|
|
805
|
-
|
|
806
|
-
|
|
807
|
-
|
|
808
|
-
|
|
809
|
-
{
|
|
810
|
-
type: "text",
|
|
811
|
-
"aria-label": filter.label,
|
|
812
|
-
className: "w-full min-w-0 bg-transparent text-sm text-foreground outline-none placeholder:text-muted-foreground disabled:cursor-not-allowed",
|
|
813
|
-
placeholder: filter.placeholder ?? "value-1, value-2",
|
|
814
|
-
value: draft,
|
|
815
|
-
list: listId,
|
|
816
|
-
disabled: filter.disabled,
|
|
817
|
-
onChange: (event) => setDraft(event.target.value)
|
|
818
|
-
}
|
|
819
|
-
),
|
|
820
|
-
/* @__PURE__ */ jsx("datalist", { id: listId, children: filter.options.map((option) => /* @__PURE__ */ jsx(
|
|
821
|
-
"option",
|
|
822
|
-
{
|
|
823
|
-
value: option.value,
|
|
824
|
-
label: option.label ?? option.value,
|
|
825
|
-
disabled: option.disabled
|
|
826
|
-
},
|
|
827
|
-
option.value
|
|
828
|
-
)) })
|
|
829
|
-
]
|
|
805
|
+
multiple: true,
|
|
806
|
+
label: filter.label,
|
|
807
|
+
options: lookupOptionsToCombobox(filter.options),
|
|
808
|
+
value: filter.value,
|
|
809
|
+
onChange: filter.onChange,
|
|
810
|
+
allowCustomValue: false,
|
|
811
|
+
className: cn(lookupFieldWidthClass(grow), filter.className),
|
|
812
|
+
...filter.placeholder !== void 0 ? { placeholder: filter.placeholder } : {},
|
|
813
|
+
...filter.onSearch !== void 0 ? { onSearch: filter.onSearch } : {},
|
|
814
|
+
...filter.loading !== void 0 ? { loading: filter.loading } : {},
|
|
815
|
+
...filter.disabled !== void 0 ? { disabled: filter.disabled } : {}
|
|
830
816
|
}
|
|
831
817
|
);
|
|
832
818
|
}
|
|
@@ -1072,17 +1058,45 @@ function MultiFilterField({ filter, grow }) {
|
|
|
1072
1058
|
const triggerRef = useRef(null);
|
|
1073
1059
|
const [open, setOpen] = useState(false);
|
|
1074
1060
|
const [optionQuery, setOptionQuery] = useState("");
|
|
1061
|
+
const [searchOptions, setSearchOptions] = useState([]);
|
|
1075
1062
|
const [draft, setDraft] = useDebouncedMultiDraft(filter.value, filter.onChange);
|
|
1076
1063
|
useDismissablePopup(open, rootRef, triggerRef, () => setOpen(false));
|
|
1064
|
+
const onSearch = filter.onSearch;
|
|
1065
|
+
useEffect(() => {
|
|
1066
|
+
if (!onSearch) return;
|
|
1067
|
+
const query = optionQuery.trim();
|
|
1068
|
+
if (!query) {
|
|
1069
|
+
setSearchOptions([]);
|
|
1070
|
+
return;
|
|
1071
|
+
}
|
|
1072
|
+
let cancelled = false;
|
|
1073
|
+
const handle = setTimeout(() => {
|
|
1074
|
+
Promise.resolve(onSearch(query)).then((opts) => {
|
|
1075
|
+
if (!cancelled && Array.isArray(opts)) setSearchOptions(opts);
|
|
1076
|
+
}).catch(() => {
|
|
1077
|
+
if (!cancelled) setSearchOptions([]);
|
|
1078
|
+
});
|
|
1079
|
+
}, 250);
|
|
1080
|
+
return () => {
|
|
1081
|
+
cancelled = true;
|
|
1082
|
+
clearTimeout(handle);
|
|
1083
|
+
};
|
|
1084
|
+
}, [onSearch, optionQuery]);
|
|
1077
1085
|
const summary = summarizeMultiFilter(filter.label, draft);
|
|
1078
|
-
const showOptionFilter = filter.options.length > 7;
|
|
1086
|
+
const showOptionFilter = filter.truncated || Boolean(onSearch) || filter.options.length > 7;
|
|
1079
1087
|
const visibleOptions = useMemo(() => {
|
|
1080
|
-
const query = optionQuery.trim()
|
|
1088
|
+
const query = optionQuery.trim();
|
|
1081
1089
|
if (!query) return filter.options;
|
|
1090
|
+
if (onSearch) {
|
|
1091
|
+
const selectedHead = filter.options.filter((o) => draft[o.value] !== void 0);
|
|
1092
|
+
return mergeMultiSelectOptions(selectedHead, searchOptions);
|
|
1093
|
+
}
|
|
1094
|
+
const lowered = query.toLowerCase();
|
|
1082
1095
|
return filter.options.filter(
|
|
1083
|
-
(option) => multiSelectOptionText(option).toLowerCase().includes(
|
|
1096
|
+
(option) => multiSelectOptionText(option).toLowerCase().includes(lowered)
|
|
1084
1097
|
);
|
|
1085
|
-
}, [filter.options, optionQuery]);
|
|
1098
|
+
}, [filter.options, searchOptions, optionQuery, onSearch, draft]);
|
|
1099
|
+
const moreCount = filter.truncated && filter.total ? Math.max(filter.total - filter.options.length, 0) : 0;
|
|
1086
1100
|
return /* @__PURE__ */ jsxs(
|
|
1087
1101
|
"div",
|
|
1088
1102
|
{
|
|
@@ -1180,12 +1194,30 @@ function MultiFilterField({ filter, grow }) {
|
|
|
1180
1194
|
);
|
|
1181
1195
|
}),
|
|
1182
1196
|
visibleOptions.length === 0 && /* @__PURE__ */ jsx("div", { className: "px-2 py-3 text-sm text-muted-foreground", children: "No options found" })
|
|
1197
|
+
] }),
|
|
1198
|
+
moreCount > 0 && !optionQuery.trim() && /* @__PURE__ */ jsxs("div", { className: "mt-2 px-1.5 text-[11px] text-muted-foreground", children: [
|
|
1199
|
+
"… and ",
|
|
1200
|
+
moreCount.toLocaleString(),
|
|
1201
|
+
" more",
|
|
1202
|
+
onSearch ? " — type to search all" : ""
|
|
1183
1203
|
] })
|
|
1184
1204
|
] })
|
|
1185
1205
|
]
|
|
1186
1206
|
}
|
|
1187
1207
|
);
|
|
1188
1208
|
}
|
|
1209
|
+
function mergeMultiSelectOptions(head, extra) {
|
|
1210
|
+
if (extra.length === 0) return head;
|
|
1211
|
+
const seen = new Set(head.map((o) => o.value));
|
|
1212
|
+
const merged = [...head];
|
|
1213
|
+
for (const option of extra) {
|
|
1214
|
+
if (!seen.has(option.value)) {
|
|
1215
|
+
seen.add(option.value);
|
|
1216
|
+
merged.push(option);
|
|
1217
|
+
}
|
|
1218
|
+
}
|
|
1219
|
+
return merged;
|
|
1220
|
+
}
|
|
1189
1221
|
function MultiFilterPanel({
|
|
1190
1222
|
filter,
|
|
1191
1223
|
chrome = "full"
|
|
@@ -1779,9 +1811,6 @@ function summarizeMultiFilter(label, value) {
|
|
|
1779
1811
|
].filter(Boolean);
|
|
1780
1812
|
return `${label} ${counts.join(" ")}`;
|
|
1781
1813
|
}
|
|
1782
|
-
function parseLookupMultiValue(value) {
|
|
1783
|
-
return value.split(",").map((item) => item.trim()).filter(Boolean);
|
|
1784
|
-
}
|
|
1785
1814
|
function useDebouncedMultiDraft(value, onChange) {
|
|
1786
1815
|
const { autoSubmit } = useContext(FilterBarContext);
|
|
1787
1816
|
const [draft, setDraft] = useState(value);
|