@mendylanda/ui 0.1.0 → 0.1.2

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,2 +1,9 @@
1
- /** Preserve unfinished edits until the application's committed value changes. */
2
- export declare function useValueDraft<V, D>(value: V, createDraft: (value: V) => D): readonly [D, (draft: D) => void];
1
+ interface SavedDraft {
2
+ value: unknown;
3
+ draft: unknown;
4
+ }
5
+ export type DraftCache = Map<string, SavedDraft>;
6
+ export declare const FilterDraftCache: import("react").Context<DraftCache | null>;
7
+ /** Keep a menu-session draft until its committed value changes. Outside a menu, state stays local. */
8
+ export declare function useValueDraft<V, D>(value: V, createDraft: (value: V) => D, key?: string): readonly [D, (draft: D) => void];
9
+ export {};
@@ -1,16 +1,31 @@
1
1
  "use client";
2
- import { useState } from "react";
2
+ import { createContext, useContext, useLayoutEffect, useState } from "react";
3
3
  import { equalValues } from "./filter-definition.js";
4
- /** Preserve unfinished edits until the application's committed value changes. */
5
- export function useValueDraft(value, createDraft) {
6
- const [state, setState] = useState(() => ({ value, draft: createDraft(value) }));
4
+ export const FilterDraftCache = createContext(null);
5
+ /** Keep a menu-session draft until its committed value changes. Outside a menu, state stays local. */
6
+ export function useValueDraft(value, createDraft, key) {
7
+ const cache = useContext(FilterDraftCache);
8
+ const [state, setState] = useState(() => {
9
+ const saved = key ? cache?.get(key) : undefined;
10
+ return {
11
+ value,
12
+ draft: saved && equalValues(saved.value, value) ? saved.draft : createDraft(value),
13
+ };
14
+ });
7
15
  let current = state;
8
16
  if (!equalValues(state.value, value)) {
9
17
  current = { value, draft: createDraft(value) };
10
18
  setState(current);
11
19
  }
20
+ useLayoutEffect(() => {
21
+ if (key)
22
+ cache?.set(key, current);
23
+ });
12
24
  function setDraft(draft) {
13
- setState({ value, draft });
25
+ const next = { value, draft };
26
+ if (key)
27
+ cache?.set(key, next);
28
+ setState(next);
14
29
  }
15
30
  return [current.draft, setDraft];
16
31
  }
@@ -35,7 +35,7 @@ function Calendar({ className, classNames, showOutsideDays = true, captionLayout
35
35
  range_start: cn("mui-10c0bae8cba9 mui-292affc1f780", defaultClassNames.range_start),
36
36
  range_middle: cn("mui-52417259a4f5", defaultClassNames.range_middle),
37
37
  range_end: cn("mui-34bbd346e74c mui-292affc1f780", defaultClassNames.range_end),
38
- today: cn("mui-3fa8c572949b mui-292affc1f780 mui-cc209238d847 mui-3cc0d07ef843", defaultClassNames.today),
38
+ today: cn("mui-3fa8c572949b mui-cc310a330231 mui-b7ff49878425 mui-d9bdd2c94504 mui-3cc0d07ef843", defaultClassNames.today),
39
39
  outside: cn("mui-35f35c41d134 mui-7d900a71e5ba", defaultClassNames.outside),
40
40
  disabled: cn("mui-35f35c41d134 mui-0b5a4d1257ab", defaultClassNames.disabled),
41
41
  hidden: cn("mui-b75af7ef6c4d", defaultClassNames.hidden),
@@ -70,6 +70,6 @@ function CalendarDayButton({ className, day, modifiers, ...props }) {
70
70
  return (_jsx(Button, { ref: ref, variant: "ghost", size: "icon", "data-day": format(day.date, "yyyy-MM-dd"), "data-selected-single": modifiers.selected &&
71
71
  !modifiers.range_start &&
72
72
  !modifiers.range_end &&
73
- !modifiers.range_middle, "data-range-start": modifiers.range_start, "data-range-end": modifiers.range_end, "data-range-middle": modifiers.range_middle, className: cn("mui-222f930b8752 mui-129d6f9b1e07 mui-4dad94bd15e3 mui-58d0413dd93c mui-1458e495e3ae mui-302c0d124a94 mui-19e97f3f40e6 mui-761cdb81bddb mui-52101fc7d8bb mui-60052b901494 mui-3f96bf138f7b mui-d39eb62b8363 mui-47cbd20a4dc0 mui-4eb7d653ae35 mui-96308b55e0d6 mui-a55dbe6f3eec mui-714051e55e8e mui-c764cebcd540 mui-05ec0700cd48 mui-5fb598fb06f4 mui-0813905aa141 mui-8020e31bff67 mui-ab65911baf1d mui-f5460d79341c mui-421a7d3e6631 mui-a39af81d518c mui-b6991ab170de mui-b2786f463a62 mui-ba417cf466b0 mui-829c8ef4f9c5", defaultClassNames.day, className), ...props }));
73
+ !modifiers.range_middle, "data-range-start": modifiers.range_start, "data-range-end": modifiers.range_end, "data-range-middle": modifiers.range_middle, className: cn("mui-222f930b8752 mui-129d6f9b1e07 mui-4dad94bd15e3 mui-58d0413dd93c mui-1458e495e3ae mui-302c0d124a94 mui-19e97f3f40e6 mui-761cdb81bddb mui-52101fc7d8bb mui-60052b901494 mui-3f96bf138f7b mui-d39eb62b8363 mui-5892a880410a mui-31b75c623c06 mui-96308b55e0d6 mui-a55dbe6f3eec mui-714051e55e8e mui-c764cebcd540 mui-05ec0700cd48 mui-5fb598fb06f4 mui-0813905aa141 mui-8020e31bff67 mui-ab65911baf1d mui-f5460d79341c mui-421a7d3e6631 mui-a39af81d518c mui-b6991ab170de mui-b2786f463a62 mui-ba417cf466b0 mui-829c8ef4f9c5", defaultClassNames.day, className), ...props }));
74
74
  }
75
75
  export { Calendar, CalendarDayButton };
@@ -25,13 +25,13 @@ function DropdownMenuItem({ className, inset, variant = "default", ...props }) {
25
25
  return (_jsx(DropdownMenuPrimitive.Item, { "data-mendy-ui": "", "data-slot": "dropdown-menu-item", "data-inset": inset, "data-variant": variant, className: cn("mui-d2d9e1f13413 mui-222f930b8752 mui-d343f41ba73e mui-71556df3b421 mui-074569488cca mui-02e603944040 mui-e7e01cc7f4df mui-a8c1dfb1d4ef mui-c74ab393b96d mui-59edd3d33673 mui-78905c9e865c mui-a8c1861c5d03 mui-a85c4c5d7465 mui-397f5ba426a0 mui-9beb654fcb0d mui-6fa6a8ade7c4 mui-f3f7a9c5e1b3 mui-e2bb4ac97190 mui-353a727facfd mui-98a28c2293f7 mui-bcae9d37090c mui-040e748a3fa0 mui-eb5ef2dbc2d4 mui-8637dfd54fbb mui-82b114bbff3d", className), ...props }));
26
26
  }
27
27
  function DropdownMenuCheckboxItem({ className, children, checked, ...props }) {
28
- return (_jsxs(DropdownMenuPrimitive.CheckboxItem, { "data-mendy-ui": "", "data-slot": "dropdown-menu-checkbox-item", className: cn("mui-d2d9e1f13413 mui-222f930b8752 mui-d343f41ba73e mui-71556df3b421 mui-074569488cca mui-02e603944040 mui-a8c1dfb1d4ef mui-98a5b6fff1d2 mui-75b27e813dcc mui-c74ab393b96d mui-59edd3d33673 mui-78905c9e865c mui-a8c1861c5d03 mui-a85c4c5d7465 mui-397f5ba426a0 mui-9beb654fcb0d mui-bcae9d37090c mui-040e748a3fa0 mui-eb5ef2dbc2d4", className), checked: checked, ...props, children: [_jsx("span", { className: "mui-33228ff7d583 mui-747355bdc2a2 mui-5b9fdf1819c4 mui-222f930b8752 mui-61c000c8a98a mui-71556df3b421 mui-a503dd374cca", children: _jsx(DropdownMenuPrimitive.ItemIndicator, { children: _jsx(CheckIcon, { className: "mui-100c22d5776b" }) }) }), children] }));
28
+ return (_jsxs(DropdownMenuPrimitive.CheckboxItem, { "data-mendy-ui": "", "data-slot": "dropdown-menu-checkbox-item", className: cn("mui-d2d9e1f13413 mui-222f930b8752 mui-d343f41ba73e mui-71556df3b421 mui-074569488cca mui-02e603944040 mui-a8c1dfb1d4ef mui-05d4103bd67f mui-078d945937da mui-c74ab393b96d mui-59edd3d33673 mui-78905c9e865c mui-a8c1861c5d03 mui-a85c4c5d7465 mui-397f5ba426a0 mui-9beb654fcb0d mui-bcae9d37090c mui-040e748a3fa0 mui-eb5ef2dbc2d4", className), checked: checked, ...props, children: [_jsx("span", { className: "mui-33228ff7d583 mui-747355bdc2a2 mui-207bd0b3f259 mui-222f930b8752 mui-61c000c8a98a mui-71556df3b421 mui-a503dd374cca", children: _jsx(DropdownMenuPrimitive.ItemIndicator, { children: _jsx(CheckIcon, { className: "mui-100c22d5776b" }) }) }), children] }));
29
29
  }
30
30
  function DropdownMenuRadioGroup({ ...props }) {
31
31
  return (_jsx(DropdownMenuPrimitive.RadioGroup, { "data-mendy-ui": "", "data-slot": "dropdown-menu-radio-group", ...props }));
32
32
  }
33
33
  function DropdownMenuRadioItem({ className, children, ...props }) {
34
- return (_jsxs(DropdownMenuPrimitive.RadioItem, { "data-mendy-ui": "", "data-slot": "dropdown-menu-radio-item", className: cn("mui-d2d9e1f13413 mui-222f930b8752 mui-d343f41ba73e mui-71556df3b421 mui-074569488cca mui-02e603944040 mui-a8c1dfb1d4ef mui-98a5b6fff1d2 mui-75b27e813dcc mui-c74ab393b96d mui-59edd3d33673 mui-78905c9e865c mui-a8c1861c5d03 mui-a85c4c5d7465 mui-397f5ba426a0 mui-9beb654fcb0d mui-bcae9d37090c mui-040e748a3fa0 mui-eb5ef2dbc2d4", className), ...props, children: [_jsx("span", { className: "mui-33228ff7d583 mui-747355bdc2a2 mui-5b9fdf1819c4 mui-222f930b8752 mui-61c000c8a98a mui-71556df3b421 mui-a503dd374cca", children: _jsx(DropdownMenuPrimitive.ItemIndicator, { children: _jsx(CircleIcon, { className: "mui-9e7600197f38 mui-717b342c2d01" }) }) }), children] }));
34
+ return (_jsxs(DropdownMenuPrimitive.RadioItem, { "data-mendy-ui": "", "data-slot": "dropdown-menu-radio-item", className: cn("mui-d2d9e1f13413 mui-222f930b8752 mui-d343f41ba73e mui-71556df3b421 mui-074569488cca mui-02e603944040 mui-a8c1dfb1d4ef mui-05d4103bd67f mui-078d945937da mui-c74ab393b96d mui-59edd3d33673 mui-78905c9e865c mui-a8c1861c5d03 mui-a85c4c5d7465 mui-397f5ba426a0 mui-9beb654fcb0d mui-bcae9d37090c mui-040e748a3fa0 mui-eb5ef2dbc2d4", className), ...props, children: [_jsx("span", { className: "mui-33228ff7d583 mui-747355bdc2a2 mui-207bd0b3f259 mui-222f930b8752 mui-61c000c8a98a mui-71556df3b421 mui-a503dd374cca", children: _jsx(DropdownMenuPrimitive.ItemIndicator, { children: _jsx(CircleIcon, { className: "mui-9e7600197f38 mui-717b342c2d01" }) }) }), children] }));
35
35
  }
36
36
  function DropdownMenuLabel({ className, inset, ...props }) {
37
37
  return (_jsx(DropdownMenuPrimitive.Label, { "data-mendy-ui": "", "data-slot": "dropdown-menu-label", "data-inset": inset, className: cn("mui-e7e01cc7f4df mui-a8c1dfb1d4ef mui-c74ab393b96d mui-daaac3fbf55e mui-6fa6a8ade7c4", className), ...props }));