@vuu-ui/vuu-ui-controls 4.0.0-alpha.3 → 4.0.0-alpha.30

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 (63) hide show
  1. package/package.json +17 -15
  2. package/src/drag-drop/Draggable.css.js +2 -2
  3. package/src/drag-drop/useDragDrop.js +7 -1
  4. package/src/expando-input/ExpandoInput.css.js +1 -1
  5. package/src/hover-overlay/HoverOverlay.css.js +8 -0
  6. package/src/hover-overlay/HoverOverlay.js +87 -38
  7. package/src/icon-button/ToggleIconButton.css.js +1 -1
  8. package/src/index.js +1 -2
  9. package/src/instrument-picker/TablePicker.css.js +1 -0
  10. package/src/item-picker/ItemPicker.css.js +1 -1
  11. package/src/item-picker/useItemPicker.js +5 -1
  12. package/src/price-ticker/PriceTicker.css.js +4 -4
  13. package/src/prompt/Prompt.css.js +1 -0
  14. package/src/split-pane/SplitPane.css.js +82 -0
  15. package/src/split-pane/SplitPane.js +60 -0
  16. package/src/split-pane/Splitter.js +82 -0
  17. package/src/split-pane/index.js +1 -0
  18. package/src/split-pane/useSplitPane.js +101 -0
  19. package/src/table-search/SearchCell.css.js +4 -2
  20. package/src/table-search/SearchCell.js +3 -2
  21. package/src/table-search/TableSearch.css.js +4 -0
  22. package/src/table-search/TableSearch.js +3 -1
  23. package/src/table-search/useTableSearch.js +14 -6
  24. package/src/tabstrip/Tab.css.js +3 -3
  25. package/src/tabstrip/Tabstrip.css.js +2 -2
  26. package/src/time-input/MaskedInput.js +176 -156
  27. package/src/time-input/TimeInput.css.js +41 -18
  28. package/src/time-input/TimeInput.js +25 -14
  29. package/src/time-input/useTimeInput.js +57 -47
  30. package/src/toolbar/Toolbar.css.js +1 -1
  31. package/src/vuu-date-picker/VuuDatePicker.js +46 -52
  32. package/src/vuu-time-picker/VuuTimePicker.js +6 -5
  33. package/types/context-panel-provider/ContextPanelProvider.d.ts +1 -1
  34. package/types/drag-drop/DragDropProvider.d.ts +1 -1
  35. package/types/hover-overlay/HoverOverlay.d.ts +7 -1
  36. package/types/icon-button/Icon.d.ts +1 -1
  37. package/types/icon-button/ToggleIconButton.d.ts +1 -1
  38. package/types/index.d.ts +5 -5
  39. package/types/instrument-picker/SearchCell.d.ts +1 -1
  40. package/types/instrument-picker/TablePicker.d.ts +1 -1
  41. package/types/item-picker/useItemPicker.d.ts +2 -2
  42. package/types/modal-provider/ModalProvider.d.ts +1 -1
  43. package/types/price-ticker/PriceTicker.d.ts +1 -1
  44. package/types/prompt/Prompt.d.ts +3 -3
  45. package/types/sortable-list/SortableList.d.ts +2 -2
  46. package/types/split-button/useSplitButton.d.ts +12 -12
  47. package/types/split-pane/SplitPane.d.ts +44 -0
  48. package/types/split-pane/Splitter.d.ts +10 -0
  49. package/types/split-pane/index.d.ts +2 -0
  50. package/types/split-pane/useSplitPane.d.ts +18 -0
  51. package/types/table-search/SearchCell.d.ts +1 -1
  52. package/types/table-search/TableSearch.d.ts +2 -1
  53. package/types/table-search/useTableSearch.d.ts +2 -2
  54. package/types/tabstrip/TabMenu.d.ts +1 -1
  55. package/types/tabstrip/Tabstrip.d.ts +1 -2
  56. package/types/time-input/MaskedInput.d.ts +60 -10
  57. package/types/time-input/TimeInput.d.ts +4 -3
  58. package/types/time-input/useTimeInput.d.ts +24 -5
  59. package/types/toolbar/Toolbar.d.ts +1 -2
  60. package/types/vuu-date-picker/VuuDatePicker.d.ts +19 -3
  61. package/types/vuu-time-picker/VuuTimePicker.d.ts +8 -6
  62. package/types/vuu-typeahead-input/VuuTypeaheadInput.d.ts +1 -1
  63. package/src/modal-provider/ModalProvider.js +0 -147
@@ -1,75 +1,85 @@
1
- import { isValidTimeString } from "@vuu-ui/vuu-utils";
2
- import { useCallback, useMemo, useRef } from "react";
1
+ import { isValidTimeString, isValidTimeStringMillis } from "@vuu-ui/vuu-utils";
2
+ import { useCallback, useRef } from "react";
3
3
  import { MaskedInput } from "./MaskedInput.js";
4
4
  const isDigit = (char)=>1 === char.length && /[0-9]/.test(char);
5
- const useTimeInput = ({ defaultValue, onChange, onCommit, value })=>{
5
+ const useTimeInput = ({ defaultValue, milliseconds = false, onChange, onCommit: onCommitProp, value })=>{
6
+ const onCommit = onCommitProp;
6
7
  const mousedDownRef = useRef(false);
8
+ const onChangeRef = useRef(onChange);
9
+ onChangeRef.current = onChange;
7
10
  const maskedInputRef = useRef(void 0);
8
- useMemo(()=>{
9
- if (void 0 === maskedInputRef.current) {
10
- maskedInputRef.current = new MaskedInput(defaultValue, null);
11
- maskedInputRef.current.on("change", (e)=>{
12
- onChange?.(e);
13
- });
14
- }
15
- if (value && value !== maskedInputRef.current.value) maskedInputRef.current.value = value;
11
+ if (void 0 === maskedInputRef.current || maskedInputRef.current.milliseconds !== milliseconds) {
12
+ maskedInputRef.current = new MaskedInput(value ?? maskedInputRef.current?.value ?? defaultValue, null, {
13
+ milliseconds
14
+ });
15
+ maskedInputRef.current.on("change", (e)=>{
16
+ onChangeRef.current?.(e);
17
+ });
18
+ }
19
+ const maskedInput = maskedInputRef.current;
20
+ if (void 0 !== value) maskedInput.value = value;
21
+ const setInputEl = useCallback((el)=>{
22
+ maskedInput.input = el;
16
23
  }, [
17
- defaultValue,
18
- onChange,
19
- value
24
+ maskedInput
20
25
  ]);
21
- const setInputEl = useCallback((el)=>{
22
- if (el && maskedInputRef.current) maskedInputRef.current.input = el;
23
- }, []);
24
- const back = useRef(false);
25
- const commitValue = useCallback((evt, value)=>{
26
- if (isValidTimeString(value)) onCommit(evt, value, "text-input");
27
- else if ("hh:mm:ss" === value) console.log("no value set");
28
- else console.log("value is not valid");
26
+ const commitValue = useCallback((evt)=>{
27
+ if ("" !== evt.currentTarget.value) {
28
+ const { value } = maskedInput;
29
+ if (milliseconds ? isValidTimeStringMillis(value) : isValidTimeString(value)) onCommit(evt, value, "text-input");
30
+ }
29
31
  }, [
32
+ maskedInput,
33
+ milliseconds,
30
34
  onCommit
31
35
  ]);
32
36
  const handleKeyDown = useCallback((e)=>{
33
- const { current: maskedInput } = maskedInputRef;
34
- if (maskedInput) {
35
- if ("Backspace" === e.key) {
36
- maskedInput.backspace();
37
- back.current = true;
38
- } else if (isDigit(e.key)) maskedInput.update(e.key);
39
- else if ("ArrowLeft" === e.key) maskedInput.moveFocus("left");
40
- else if ("ArrowRight" === e.key) maskedInput.moveFocus("right");
41
- else if ("ArrowUp" === e.key) maskedInput.incrementValue();
42
- else if ("ArrowDown" === e.key) maskedInput.decrementValue();
43
- else if ("v" === e.key && e.metaKey) return;
44
- else if ("Tab" === e.key) return;
45
- else if ("Enter" === e.key) commitValue(e, maskedInput.value);
46
- }
37
+ if (e.ctrlKey || e.metaKey || e.altKey || "Tab" === e.key) return;
38
+ if ("Backspace" === e.key) maskedInput.backspace();
39
+ else if (isDigit(e.key)) maskedInput.update(e.key);
40
+ else if ("ArrowLeft" === e.key) maskedInput.moveFocus("left");
41
+ else if ("ArrowRight" === e.key) maskedInput.moveFocus("right");
42
+ else if ("ArrowUp" === e.key) maskedInput.incrementValue();
43
+ else if ("ArrowDown" === e.key) maskedInput.decrementValue();
44
+ else if ("Home" === e.key) maskedInput.selectFirst();
45
+ else if ("End" === e.key) maskedInput.selectLast();
46
+ else if ("Enter" === e.key) commitValue(e);
47
+ else if ("Escape" === e.key) return;
47
48
  e.preventDefault();
48
49
  }, [
49
- commitValue
50
+ commitValue,
51
+ maskedInput
50
52
  ]);
51
53
  const handleDoubleClick = useCallback(()=>{
52
- maskedInputRef.current?.doubleClick();
53
- }, []);
54
+ maskedInput.doubleClick();
55
+ }, [
56
+ maskedInput
57
+ ]);
54
58
  const handlePaste = useCallback((e)=>{
55
- const value = e.clipboardData.getData("text");
56
- if (isValidTimeString(value)) maskedInputRef.current?.pasteValue(value);
57
- }, []);
59
+ e.preventDefault();
60
+ maskedInput.pasteValue(e.clipboardData.getData("text"));
61
+ }, [
62
+ maskedInput
63
+ ]);
58
64
  const handleFocus = useCallback(()=>{
59
65
  if (mousedDownRef.current) mousedDownRef.current = false;
60
- else maskedInputRef.current?.focus();
61
- }, []);
66
+ else maskedInput.focus();
67
+ }, [
68
+ maskedInput
69
+ ]);
62
70
  const handleMouseDown = useCallback(()=>{
63
71
  mousedDownRef.current = true;
64
72
  }, []);
65
73
  const handleMouseUp = useCallback((e)=>{
66
74
  e.preventDefault();
67
- maskedInputRef.current?.click();
68
- }, []);
75
+ maskedInput.click();
76
+ }, [
77
+ maskedInput
78
+ ]);
69
79
  return {
70
80
  inputRef: setInputEl,
71
81
  eventHandlers: {
72
- onBlur: maskedInputRef.current?.blur,
82
+ onBlur: maskedInput.blur,
73
83
  onDoubleClick: handleDoubleClick,
74
84
  onFocus: handleFocus,
75
85
  onKeyDown: handleKeyDown,
@@ -35,7 +35,7 @@ const css = `
35
35
  }
36
36
 
37
37
  .vuuToolbarItem:focus, .vuuToolbarItem:focus-visible {
38
- outline-color: var(--vuuToolbarItem-outlineColor, var(--vuu-color-purple-10));
38
+ outline-color: var(--vuuToolbarItem-outlineColor, var(--vuu-color-purple));
39
39
  outline-offset: 0px;
40
40
  outline-width: 1px;
41
41
  outline-style: dashed;
@@ -1,84 +1,78 @@
1
- import { createElement, useCallback, useRef, useState } from "react";
2
- import { getLocalTimeZone, isSameDay, isSameMonth, isSameYear } from "@internationalized/date";
1
+ import { createElement, useCallback, useMemo, useRef, useState } from "react";
2
+ import { EpochTimestamp, fromDateTimeFields } from "@vuu-ui/vuu-utils";
3
+ import { CalendarDate } from "@internationalized/date";
3
4
  import clsx from "clsx";
4
5
  import { DatePicker } from "../date-picker/index.js";
5
6
  const classBase = "VuuDatePicker";
6
- const isSameDate = (d1, d2)=>void 0 !== d2 && isSameDay(d1, d2) && isSameMonth(d1, d2) && isSameYear(d1, d2);
7
7
  const datePattern = /^\d{1,2} [a-z]{3} \d{4}$/i;
8
- const isValidDate = (value)=>void 0 !== value && value?.match(datePattern) !== null && !Number.isNaN(new Date(value).getDay());
9
- const localTimeZone = getLocalTimeZone();
10
- const toEpochMillis = (date, timezone = getLocalTimeZone())=>date.toDate(timezone).getTime();
11
- const getDates = (selectedDate)=>{
12
- if (selectedDate) return {
13
- datePickerKey: "controlled",
14
- defaultDate: void 0,
15
- selectedDate
16
- };
17
- return {
18
- datePickerKey: "uncontrolled",
19
- defaultDate: void 0,
20
- selectedDate
21
- };
8
+ const isValidDate = (value)=>void 0 !== value && null !== value.match(datePattern) && !Number.isNaN(new Date(value).getDay());
9
+ const isSameDate = (d1, d2)=>void 0 !== d2 && 0 === d1.compare(d2);
10
+ const toCalendarDateInTimeZone = (value, timeZone)=>{
11
+ const timestamp = value instanceof EpochTimestamp ? value : EpochTimestamp.fromWire(value, "epochMillis");
12
+ if (timestamp) {
13
+ const { year, month, day } = timestamp.getFields(timeZone);
14
+ return new CalendarDate(year, month, day);
15
+ }
22
16
  };
23
- const VuuDatePicker = ({ className, onSelectionChange, selectedDate: selectedDateProp, onCommit, preserveFocusOnSelect, ...props })=>{
24
- const [open, _setOpen] = useState(false);
25
- const valueRef = useRef("");
17
+ const startOfDateInTimeZone = (date, timeZone)=>fromDateTimeFields({
18
+ year: date.year,
19
+ month: date.month,
20
+ day: date.day,
21
+ hour: 0,
22
+ minute: 0,
23
+ second: 0,
24
+ millisecond: 0
25
+ }, timeZone);
26
+ const VuuDatePicker = ({ className, onSelectionChange, onCommit, preserveFocusOnSelect, selectedDate: selectedDateProp, timeZone, value, ...props })=>{
27
+ const [open, setOpen] = useState(false);
28
+ const inputValueRef = useRef("");
26
29
  const datePickerRef = useRef(null);
27
- const dateState = useRef(getDates(selectedDateProp));
28
- const setOpen = (o)=>{
29
- console.log(`setOpen ${o}`);
30
- _setOpen(o);
31
- };
30
+ const controlledDate = useMemo(()=>selectedDateProp ?? toCalendarDateInTimeZone(value, timeZone), [
31
+ selectedDateProp,
32
+ timeZone,
33
+ value
34
+ ]);
35
+ const [selectedDate, setSelectedDate] = useState(controlledDate);
36
+ const controlledDateRef = useRef(controlledDate);
37
+ if (void 0 !== controlledDate && (void 0 === controlledDateRef.current || 0 !== controlledDate.compare(controlledDateRef.current))) {
38
+ controlledDateRef.current = controlledDate;
39
+ if (!isSameDate(controlledDate, selectedDate)) setSelectedDate(controlledDate);
40
+ }
32
41
  const commitDateChange = useCallback((e, date)=>{
33
42
  onSelectionChange?.(e, date);
34
43
  setOpen(false);
35
- onCommit?.(e, toEpochMillis(date, localTimeZone));
44
+ onCommit?.(e, startOfDateInTimeZone(date, timeZone));
36
45
  if (preserveFocusOnSelect) requestAnimationFrame(()=>{
37
46
  datePickerRef.current?.querySelector("input")?.focus();
38
47
  });
39
48
  }, [
40
49
  onCommit,
41
50
  onSelectionChange,
42
- preserveFocusOnSelect
51
+ preserveFocusOnSelect,
52
+ timeZone
43
53
  ]);
44
54
  const handleSelectionChange = useCallback((e, date)=>{
45
- const { selectedDate } = dateState.current;
46
- if (date) {
47
- if (void 0 === selectedDate) {
48
- dateState.current = getDates(date);
49
- commitDateChange(e, date);
50
- } else if (!isSameDate(date, selectedDate)) {
51
- dateState.current.selectedDate = date;
52
- commitDateChange(e, date);
53
- }
55
+ if (date && !isSameDate(date, selectedDate)) {
56
+ setSelectedDate(date);
57
+ commitDateChange(e, date);
54
58
  }
55
59
  }, [
56
- commitDateChange
60
+ commitDateChange,
61
+ selectedDate
57
62
  ]);
58
- const handleChange = (evt, value = "")=>{
59
- console.log("handleChange", {
60
- evt,
61
- value
62
- });
63
- valueRef.current = value;
64
- console.log(`is '${value}' a valid date ? ${isValidDate(value)}`);
63
+ const handleChange = (_evt, value = "")=>{
64
+ inputValueRef.current = value;
65
65
  };
66
66
  const handleKeyDown = (e)=>{
67
67
  if ("ArrowDown" === e.key) setOpen(true);
68
68
  };
69
69
  const handleKeyDownCapture = (e)=>{
70
- if ("Enter" === e.key) if (isValidDate(valueRef.current)) console.log(`committayaface (${valueRef.current})`);
71
- else {
72
- console.log(`nice try cowboy, but '${valueRef.current}' is nota valid date`);
73
- e.stopPropagation();
74
- }
70
+ if ("Enter" === e.key && "" !== inputValueRef.current && !isValidDate(inputValueRef.current)) e.stopPropagation();
75
71
  };
76
- const { datePickerKey, defaultDate, selectedDate } = dateState.current;
77
72
  return /*#__PURE__*/ createElement(DatePicker, {
78
73
  ...props,
79
74
  className: clsx(classBase, className),
80
- defaultSelectedDate: defaultDate,
81
- key: datePickerKey,
75
+ key: selectedDate ? "controlled" : "uncontrolled",
82
76
  open: open,
83
77
  onChange: handleChange,
84
78
  onKeyDown: handleKeyDown,
@@ -5,7 +5,7 @@ import clsx from "clsx";
5
5
  import { TimeInput } from "../time-input/TimeInput.js";
6
6
  import VuuTimePicker from "./VuuTimePicker.css";
7
7
  const classBase = "vuuTimePicker";
8
- const VuuTimePicker_VuuTimePicker = ({ className, defaultValue, onChange, onCommit, value, ...htmlAttributes })=>{
8
+ const VuuTimePicker_VuuTimePicker = ({ className, defaultValue, milliseconds, onChange, onCommit, value, ...htmlAttributes })=>{
9
9
  const targetWindow = useWindow();
10
10
  useComponentCssInjection({
11
11
  testId: "vuu-time-picker",
@@ -16,10 +16,11 @@ const VuuTimePicker_VuuTimePicker = ({ className, defaultValue, onChange, onComm
16
16
  ...htmlAttributes,
17
17
  className: clsx(classBase, className),
18
18
  children: /*#__PURE__*/ jsx(TimeInput, {
19
- defaultValue: defaultValue,
20
- onChange: onChange,
21
- onCommit: onCommit,
22
- value: value
19
+ defaultValue,
20
+ milliseconds,
21
+ onChange,
22
+ onCommit,
23
+ value
23
24
  })
24
25
  });
25
26
  };
@@ -9,6 +9,6 @@ export declare const ContextPanelContext: import("react").Context<ContextPanelPr
9
9
  export declare const ContextPanelProvider: ({ children, hideContextPanel: hideContextPanelProp, resolveComponent, showContextPanel: showContextPanelProp, }: Partial<ContextPanelProps> & {
10
10
  children: ReactNode;
11
11
  resolveComponent?: ResolveContextPanelComponent;
12
- }) => import("react").JSX.Element;
12
+ }) => import("react/jsx-runtime").JSX.Element;
13
13
  export declare function useContextPanel(): ShowContextPanel;
14
14
  export declare function useHideContextPanel(): (() => void) | undefined;
@@ -27,7 +27,7 @@ export type MeasuredTarget = {
27
27
  right: number;
28
28
  top: number;
29
29
  };
30
- export declare const DragDropProvider: ({ children, dragSources: dragSourcesProp, }: DragDropProviderProps) => import("react").JSX.Element;
30
+ export declare const DragDropProvider: ({ children, dragSources: dragSourcesProp, }: DragDropProviderProps) => import("react/jsx-runtime").JSX.Element;
31
31
  export interface DragDropProviderResult {
32
32
  isDragSource?: boolean;
33
33
  isDropTarget?: boolean;
@@ -3,6 +3,12 @@ import { ReactNode } from "react";
3
3
  export interface HoverOverlayProps extends Pick<OverlayProps, "placement" | "onOpenChange"> {
4
4
  children: ReactNode;
5
5
  open?: boolean;
6
+ /**
7
+ * hover (default) opens the overlay after a short delay when pointer
8
+ * enters trigger and closes it when pointer leaves both trigger and
9
+ * overlay. click leaves open/close entirely to Salt Overlay.
10
+ */
11
+ openOn?: "hover" | "click";
6
12
  trigger: ReactNode;
7
13
  }
8
- export declare const HoverOverlay: ({ children, open: openProp, onOpenChange, placement, trigger, }: HoverOverlayProps) => import("react").JSX.Element;
14
+ export declare const HoverOverlay: ({ children, open: openProp, onOpenChange, openOn, placement, trigger, }: HoverOverlayProps) => import("react/jsx-runtime").JSX.Element;
@@ -3,4 +3,4 @@ export interface IconProps extends HTMLAttributes<HTMLSpanElement> {
3
3
  name: string;
4
4
  size?: number;
5
5
  }
6
- export declare const Icon: ({ className, name, size, style: styleProp, ...htmlAttributes }: IconProps) => import("react").JSX.Element;
6
+ export declare const Icon: ({ className, name, size, style: styleProp, ...htmlAttributes }: IconProps) => import("react/jsx-runtime").JSX.Element;
@@ -2,4 +2,4 @@ import { IconButtonProps } from "./IconButton";
2
2
  export interface ToggleIconButtonProps extends Omit<IconButtonProps, "icon"> {
3
3
  isExpanded: boolean;
4
4
  }
5
- export declare const ToggleIconButton: ({ className, isExpanded, size, ...props }: ToggleIconButtonProps) => import("react").JSX.Element;
5
+ export declare const ToggleIconButton: ({ className, isExpanded, size, ...props }: ToggleIconButtonProps) => import("react/jsx-runtime").JSX.Element;
package/types/index.d.ts CHANGED
@@ -9,25 +9,25 @@ export * from "./drag-drop";
9
9
  export * from "./editable";
10
10
  export * from "./editable-label";
11
11
  export * from "./expando-input";
12
- export { HoverOverlay } from "./hover-overlay/HoverOverlay";
12
+ export { HoverOverlay, type HoverOverlayProps, } from "./hover-overlay/HoverOverlay";
13
13
  export * from "./icon-button";
14
14
  export * from "./instrument-picker";
15
15
  export { ItemPicker, type ItemPickerProps } from "./item-picker/ItemPicker";
16
- export { type ItemDescriptor, SelectedItemsChangeHandler as SelectedItemChangeHandler } from "./item-picker/useItemPicker";
16
+ export type { ItemDescriptor, SelectedItemsChangeHandler as SelectedItemChangeHandler } from "./item-picker/useItemPicker";
17
17
  export * from "./measured-container";
18
- export { ModalProvider, useModal } from "./modal-provider/ModalProvider";
19
18
  export * from "./overflow-container";
20
19
  export * from "./price-ticker";
21
20
  export { Prompt, type PromptProps } from "./prompt/Prompt";
22
21
  export { SortableList, SortableOption } from "./sortable-list/SortableList";
23
22
  export * from "./split-button";
23
+ export * from "./split-pane";
24
24
  export * from "./table-search";
25
25
  export * from "./tabs-next";
26
26
  export * from "./tabstrip";
27
- export { TimeInput, type TimeInputProps } from "./time-input/TimeInput";
27
+ export { TimeInput, type TimeInputMillisecondsProps, type TimeInputProps, type TimeInputSecondsProps, } from "./time-input/TimeInput";
28
28
  export * from "./toolbar";
29
29
  export * from "./utils";
30
30
  export * from "./vuu-date-picker";
31
31
  export * from "./vuu-input";
32
- export { VuuTimePicker, type VuuTimePickerProps, } from "./vuu-time-picker/VuuTimePicker";
32
+ export { VuuTimePicker, type VuuTimePickerMillisecondsProps, type VuuTimePickerProps, type VuuTimePickerSecondsProps, } from "./vuu-time-picker/VuuTimePicker";
33
33
  export * from "./vuu-typeahead-input";
@@ -1,2 +1,2 @@
1
1
  import { TableCellRendererProps } from "@vuu-ui/vuu-table-types";
2
- export declare const SearchCell: ({ column, dataRow }: TableCellRendererProps) => import("react").JSX.Element;
2
+ export declare const SearchCell: ({ column, dataRow }: TableCellRendererProps) => import("react/jsx-runtime").JSX.Element;
@@ -8,4 +8,4 @@ export interface TablePickerProps extends Omit<HTMLAttributes<HTMLElement>, "onS
8
8
  schema: TableSchema;
9
9
  searchColumns?: string[];
10
10
  }
11
- export declare const TablePicker: ({ TableProps, onSelect, rowToString, schema, searchColumns, ...htmlAttributes }: TablePickerProps) => import("react").JSX.Element;
11
+ export declare const TablePicker: ({ TableProps, onSelect, rowToString, schema, searchColumns, ...htmlAttributes }: TablePickerProps) => import("react/jsx-runtime").JSX.Element;
@@ -1,4 +1,4 @@
1
- import { type ChangeEventHandler, type MouseEventHandler } from "react";
1
+ import { type FormEventHandler, type MouseEventHandler } from "react";
2
2
  export type SelectedItemsChangeHandler = (newSelectedItems: readonly ItemDescriptor[]) => void;
3
3
  /** This is a public description of an Item that can be displayed in the ItemPicker component, defining all the
4
4
  * mandatory and option attributes that can be defined by the client. */
@@ -25,7 +25,7 @@ export declare const useItemPicker: ({ allItems, selectedItems, maxSelections, o
25
25
  selectedItemsFiltered: readonly ItemDescriptor[];
26
26
  availableItemsFiltered: ItemDescriptor[];
27
27
  searchText: string;
28
- onChangeSearchInput: ChangeEventHandler;
28
+ onChangeSearchInput: FormEventHandler;
29
29
  onAddItemToSelectedList: MouseEventHandler<HTMLButtonElement>;
30
30
  onRemoveItemFromSelectedList: MouseEventHandler<HTMLButtonElement>;
31
31
  onReorderSelectedItems: (orderedItemNames: string[]) => void;
@@ -4,7 +4,7 @@ export type ShowDialog = (dialogContent: ReactElement, title: string, dialogActi
4
4
  export type ShowPrompt = (promptContent: ReactElement, promptProps: PromptProps) => void;
5
5
  export declare const ModalProvider: ({ children }: {
6
6
  children: ReactNode;
7
- }) => import("react").JSX.Element;
7
+ }) => import("react/jsx-runtime").JSX.Element;
8
8
  export declare const useModal: () => {
9
9
  showDialog: ShowDialog;
10
10
  closeDialog: () => void;
@@ -4,4 +4,4 @@ export interface PriceTickerProps extends HTMLAttributes<HTMLDivElement> {
4
4
  price?: number;
5
5
  showArrow?: boolean;
6
6
  }
7
- export declare const PriceTicker: import("react").MemoExoticComponent<({ className, decimals, price, showArrow, ...htmlAttributes }: PriceTickerProps) => import("react").JSX.Element>;
7
+ export declare const PriceTicker: import("react").MemoExoticComponent<({ className, decimals, price, showArrow, ...htmlAttributes }: PriceTickerProps) => import("react/jsx-runtime").JSX.Element>;
@@ -1,5 +1,5 @@
1
- import { DialogHeaderProps, DialogProps } from "@salt-ds/core";
2
- import { HTMLAttributes, ReactNode, RefObject } from "react";
1
+ import { type DialogHeaderProps, type DialogProps } from "@salt-ds/core";
2
+ import { type HTMLAttributes, type ReactNode, type RefObject } from "react";
3
3
  /**
4
4
  * Allow fine grained configuration of Prompt buttons
5
5
  * The ref is provided to facilitate programmatic focus.
@@ -50,4 +50,4 @@ export interface PromptProps extends Pick<DialogProps, "disableDismiss" | "onOpe
50
50
  showConfirmButton?: boolean;
51
51
  title: string;
52
52
  }
53
- export declare const Prompt: ({ children, className, cancelButtonLabel, cancelButtonProps, confirmButtonLabel, confirmButtonProps, customAction, disableDismiss, disableAccent, headerTag, icon, initialFocusedItem, onCancel, onClose, onConfirm, onOpenChange, open, showCancelButton, showCloseButton, showConfirmButton, status, title, ...htmlAttributes }: PromptProps) => import("react").JSX.Element;
53
+ export declare const Prompt: ({ children, className, cancelButtonLabel, cancelButtonProps, confirmButtonLabel, confirmButtonProps, customAction, disableDismiss, disableAccent, headerTag, icon, initialFocusedItem, onCancel, onClose, onConfirm, onOpenChange, open, showCancelButton, showCloseButton, showConfirmButton, status, title, ...htmlAttributes }: PromptProps) => import("react/jsx-runtime").JSX.Element;
@@ -2,7 +2,7 @@ import { ListBoxProps, OptionProps } from "@salt-ds/core";
2
2
  export declare const SortableOption: ({ id, index, value, ...optionProps }: OptionProps & {
3
3
  id: string;
4
4
  index: number;
5
- }) => import("react").JSX.Element;
5
+ }) => import("react/jsx-runtime").JSX.Element;
6
6
  export declare const SortableList: ({ children, onReorderListItems, ...listBoxProps }: ListBoxProps & {
7
7
  onReorderListItems?: (listItems: unknown[]) => void;
8
- }) => import("react").JSX.Element;
8
+ }) => import("react/jsx-runtime").JSX.Element;
@@ -27,18 +27,18 @@ export declare const useSplitButton: ({ ButtonProps: ButtonPropsProp, PopupMenuP
27
27
  onFocusCapture?: FocusEventHandler<HTMLButtonElement> | undefined;
28
28
  onBlur?: FocusEventHandler<HTMLButtonElement> | undefined;
29
29
  onBlurCapture?: FocusEventHandler<HTMLButtonElement> | undefined;
30
- onChange?: import("react").ChangeEventHandler<HTMLButtonElement, Element> | undefined;
31
- onChangeCapture?: import("react").ChangeEventHandler<HTMLButtonElement, Element> | undefined;
30
+ onChange?: import("react").FormEventHandler<HTMLButtonElement> | undefined;
31
+ onChangeCapture?: import("react").FormEventHandler<HTMLButtonElement> | undefined;
32
32
  onBeforeInput?: import("react").InputEventHandler<HTMLButtonElement> | undefined;
33
- onBeforeInputCapture?: import("react").InputEventHandler<HTMLButtonElement> | undefined;
34
- onInput?: import("react").InputEventHandler<HTMLButtonElement> | undefined;
35
- onInputCapture?: import("react").InputEventHandler<HTMLButtonElement> | undefined;
36
- onReset?: import("react").ReactEventHandler<HTMLButtonElement> | undefined;
37
- onResetCapture?: import("react").ReactEventHandler<HTMLButtonElement> | undefined;
38
- onSubmit?: import("react").SubmitEventHandler<HTMLButtonElement> | undefined;
39
- onSubmitCapture?: import("react").SubmitEventHandler<HTMLButtonElement> | undefined;
40
- onInvalid?: import("react").ReactEventHandler<HTMLButtonElement> | undefined;
41
- onInvalidCapture?: import("react").ReactEventHandler<HTMLButtonElement> | undefined;
33
+ onBeforeInputCapture?: import("react").FormEventHandler<HTMLButtonElement> | undefined;
34
+ onInput?: import("react").FormEventHandler<HTMLButtonElement> | undefined;
35
+ onInputCapture?: import("react").FormEventHandler<HTMLButtonElement> | undefined;
36
+ onReset?: import("react").FormEventHandler<HTMLButtonElement> | undefined;
37
+ onResetCapture?: import("react").FormEventHandler<HTMLButtonElement> | undefined;
38
+ onSubmit?: import("react").FormEventHandler<HTMLButtonElement> | undefined;
39
+ onSubmitCapture?: import("react").FormEventHandler<HTMLButtonElement> | undefined;
40
+ onInvalid?: import("react").FormEventHandler<HTMLButtonElement> | undefined;
41
+ onInvalidCapture?: import("react").FormEventHandler<HTMLButtonElement> | undefined;
42
42
  onLoad?: import("react").ReactEventHandler<HTMLButtonElement> | undefined;
43
43
  onLoadCapture?: import("react").ReactEventHandler<HTMLButtonElement> | undefined;
44
44
  onError?: import("react").ReactEventHandler<HTMLButtonElement> | undefined;
@@ -277,7 +277,7 @@ export declare const useSplitButton: ({ ButtonProps: ButtonPropsProp, PopupMenuP
277
277
  results?: number | undefined;
278
278
  security?: string | undefined;
279
279
  unselectable?: "on" | "off" | undefined;
280
- popover?: "" | "auto" | "manual" | "hint" | undefined;
280
+ popover?: "" | "auto" | "manual" | undefined;
281
281
  popoverTargetAction?: "toggle" | "show" | "hide" | undefined;
282
282
  popoverTarget?: string | undefined;
283
283
  inert?: boolean | undefined;
@@ -0,0 +1,44 @@
1
+ import { type FlexAlignment, type FlexContentAlignment, type ResponsiveProp } from "@salt-ds/core";
2
+ import { type HTMLAttributes, type ReactElement, type ReactNode } from "react";
3
+ import { type SplitPaneDirection, type SplitterMovedHandler } from "./useSplitPane";
4
+ export interface SplitPaneProps extends Omit<HTMLAttributes<HTMLDivElement>, "children"> {
5
+ /**
6
+ * Defines the default behavior for how flex items are laid out along the cross axis, default is "stretch".
7
+ */
8
+ align?: FlexAlignment | "stretch" | "baseline";
9
+ /**
10
+ * Exactly two children, typically Salt `FlexItem` components. A Splitter
11
+ * will be rendered between them. A single child is also accepted (e.g. when
12
+ * one pane is conditionally rendered), in which case no Splitter is rendered.
13
+ */
14
+ children: ReactElement | [ReactNode, ReactNode];
15
+ /**
16
+ * Establishes the main-axis, defining the direction children are placed. Default is "row".
17
+ */
18
+ direction?: ResponsiveProp<SplitPaneDirection>;
19
+ /**
20
+ * Controls the space between each item and the Splitter, default is 0.
21
+ */
22
+ gap?: ResponsiveProp<number | string>;
23
+ /**
24
+ * Defines the alignment along the main axis, default is "start".
25
+ */
26
+ justify?: FlexContentAlignment;
27
+ /**
28
+ * Defines the margin around the component. It can be specified as a number (which acts as a multiplier) or a string representing the margin value. Default is `0`.
29
+ */
30
+ margin?: ResponsiveProp<number | string>;
31
+ /**
32
+ * Invoked when user has finished moving the Splitter, receives the new sizes (px) of both panes.
33
+ */
34
+ onSplitterMoved?: SplitterMovedHandler;
35
+ /**
36
+ * Defines the padding within the component. It can be specified as a number (which acts as a multiplier) or a string representing the padding value. Default is `0`.
37
+ */
38
+ padding?: ResponsiveProp<number | string>;
39
+ /**
40
+ * Size (thickness) of the Splitter, in px. Default is 3.
41
+ */
42
+ splitterSize?: number;
43
+ }
44
+ export declare const SplitPane: import("react").ForwardRefExoticComponent<SplitPaneProps & import("react").RefAttributes<HTMLDivElement>>;
@@ -0,0 +1,10 @@
1
+ import { type HTMLAttributes } from "react";
2
+ import type { SplitPaneDirection } from "./useSplitPane";
3
+ export interface SplitterProps extends Omit<HTMLAttributes<HTMLDivElement>, "onResize"> {
4
+ direction: SplitPaneDirection;
5
+ onResizeStart: () => boolean;
6
+ onResize: (distance: number) => void;
7
+ onResizeEnd: () => void;
8
+ position?: number;
9
+ }
10
+ export declare const Splitter: ({ className, direction, onResize, onResizeEnd, onResizeStart, position, ...htmlAttributes }: SplitterProps) => import("react/jsx-runtime").JSX.Element;
@@ -0,0 +1,2 @@
1
+ export * from "./SplitPane";
2
+ export type { SplitPaneDirection, SplitPaneSizes, SplitterMovedHandler, } from "./useSplitPane";
@@ -0,0 +1,18 @@
1
+ export type SplitPaneDirection = "row" | "column";
2
+ /**
3
+ * Sizes (in px) of the two panes, measured along the main axis.
4
+ */
5
+ export type SplitPaneSizes = [number, number];
6
+ export type SplitterMovedHandler = (sizes: SplitPaneSizes) => void;
7
+ export interface SplitPaneHookProps {
8
+ direction: SplitPaneDirection;
9
+ onSplitterMoved?: SplitterMovedHandler;
10
+ paneCount: number;
11
+ }
12
+ export declare const useSplitPane: ({ direction, onSplitterMoved, paneCount, }: SplitPaneHookProps) => {
13
+ beginResize: () => boolean;
14
+ endResize: () => void;
15
+ resize: (distance: number) => void;
16
+ rootRef: import("react").RefObject<HTMLDivElement | null>;
17
+ splitterPosition: number | undefined;
18
+ };
@@ -1,2 +1,2 @@
1
1
  import { TableCellRendererProps } from "@vuu-ui/vuu-table-types";
2
- export declare const SearchCell: ({ column, dataRow, searchPattern, }: TableCellRendererProps) => import("react").JSX.Element;
2
+ export declare const SearchCell: ({ column, dataRow, searchPattern, }: TableCellRendererProps) => import("react/jsx-runtime").JSX.Element;
@@ -3,7 +3,8 @@ import { HTMLAttributes } from "react";
3
3
  export interface TableSearchProps extends HTMLAttributes<HTMLDivElement> {
4
4
  TableProps: TableProps;
5
5
  autoFocus?: boolean;
6
+ baseFilter?: string;
6
7
  placeHolder?: string;
7
8
  searchColumns: string[];
8
9
  }
9
- export declare const TableSearch: ({ TableProps: { dataSource: dataSourceProp, ...TableProps }, autoFocus, className, placeHolder, searchColumns, ...htmlAttributes }: TableSearchProps) => import("react").JSX.Element;
10
+ export declare const TableSearch: ({ TableProps: { dataSource: dataSourceProp, ...TableProps }, autoFocus, baseFilter, className, placeHolder, searchColumns, ...htmlAttributes }: TableSearchProps) => import("react/jsx-runtime").JSX.Element;
@@ -1,11 +1,11 @@
1
1
  import { FormEventHandler } from "react";
2
2
  import { TableSearchProps } from "./TableSearch";
3
3
  import { DataSource } from "@vuu-ui/vuu-data-types";
4
- export interface TableSearchHookProps extends Pick<TableSearchProps, "searchColumns"> {
4
+ export interface TableSearchHookProps extends Pick<TableSearchProps, "searchColumns" | "baseFilter"> {
5
5
  dataSource: DataSource;
6
6
  label?: string;
7
7
  }
8
- export declare const useTableSearch: ({ dataSource, searchColumns, }: TableSearchHookProps) => {
8
+ export declare const useTableSearch: ({ baseFilter, dataSource, searchColumns, }: TableSearchHookProps) => {
9
9
  dataSource: DataSource;
10
10
  onChange: FormEventHandler;
11
11
  searchState: {
@@ -20,4 +20,4 @@ export interface TabMenuProps {
20
20
  */
21
21
  controlledComponentTitle?: string;
22
22
  }
23
- export declare const TabMenu: ({ allowClose, allowRename, controlledComponentId, controlledComponentTitle, location, onMenuAction, onMenuClose, index, }: TabMenuProps) => import("react").JSX.Element;
23
+ export declare const TabMenu: ({ allowClose, allowRename, controlledComponentId, controlledComponentTitle, location, onMenuAction, onMenuClose, index, }: TabMenuProps) => import("react/jsx-runtime").JSX.Element;
@@ -1,3 +1,2 @@
1
- import React from "react";
2
1
  import type { TabstripProps } from "./TabsTypes";
3
- export declare const Tabstrip: ({ activeTabIndex: activeTabIndexProp, allowAddTab, allowCloseTab, allowDragDrop, allowRenameTab, animateSelectionThumb, children, className: classNameProp, id: idProp, keyBoardActivation, location, onActiveChange, onAddTab, onCloseTab, onExitEditMode, onMoveTab, orientation, showTabMenuButton, style: styleProp, tabClassName, variant, ...htmlAttributes }: TabstripProps) => React.JSX.Element;
2
+ export declare const Tabstrip: ({ activeTabIndex: activeTabIndexProp, allowAddTab, allowCloseTab, allowDragDrop, allowRenameTab, animateSelectionThumb, children, className: classNameProp, id: idProp, keyBoardActivation, location, onActiveChange, onAddTab, onCloseTab, onExitEditMode, onMoveTab, orientation, showTabMenuButton, style: styleProp, tabClassName, variant, ...htmlAttributes }: TabstripProps) => import("react/jsx-runtime").JSX.Element;