@motor-hero/ui-kit 0.44.1 → 0.45.0

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 +1 @@
1
- {"version":3,"file":"combobox.d.ts","sourceRoot":"","sources":["../../src/components/combobox.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAM/B,MAAM,WAAW,cAAc;IAC9B,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB;kEAC8D;IAC9D,IAAI,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;CACvB;AAED,MAAM,WAAW,aAAa;IAC7B,OAAO,EAAE,cAAc,EAAE,CAAC;IAC1B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAClC,oDAAoD;IACpD,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,oCAAoC;IACpC,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,+CAA+C;IAC/C,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,cAAc,CAAC,EAAE,OAAO,GAAG,MAAM,GAAG,OAAO,CAAC;IAC5C,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B;qEACiE;IACjE,cAAc,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,CAAC;IAC1C,0DAA0D;IAC1D,UAAU,CAAC,EAAE,MAAM,IAAI,CAAC;IACxB,uEAAuE;IACvE,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,yDAAyD;IACzD,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB;wDACoD;IACpD,cAAc,CAAC,EAAE,cAAc,CAAC;IAChC;;yDAEqD;IACrD,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,4DAA4D;IAC5D,iBAAiB,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,MAAM,CAAC;IAC/C;mFAC+E;IAC/E,YAAY,CAAC,EAAE,OAAO,CAAC;CACvB;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,QAAQ,CAAC,EACxB,OAAO,EACP,KAAK,EACL,QAAQ,EACR,WAA4B,EAC5B,iBAA+B,EAC/B,YAA6C,EAC7C,QAAQ,EACR,EAAE,EACF,SAAS,EACT,cAAc,EAAE,WAAW,EAC3B,kBAAkB,EAAE,eAAe,EACnC,cAAc,EACd,UAAU,EACV,OAAO,EACP,OAAO,EACP,cAAc,EACd,SAAS,EACT,iBAAiB,EACjB,YAAY,GACZ,EAAE,aAAa,qBAuKf"}
1
+ {"version":3,"file":"combobox.d.ts","sourceRoot":"","sources":["../../src/components/combobox.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAM/B,MAAM,WAAW,cAAc;IAC9B,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB;kEAC8D;IAC9D,IAAI,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;CACvB;AAED,MAAM,WAAW,aAAa;IAC7B,OAAO,EAAE,cAAc,EAAE,CAAC;IAC1B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAClC,oDAAoD;IACpD,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,oCAAoC;IACpC,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,+CAA+C;IAC/C,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,cAAc,CAAC,EAAE,OAAO,GAAG,MAAM,GAAG,OAAO,CAAC;IAC5C,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B;qEACiE;IACjE,cAAc,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,CAAC;IAC1C,0DAA0D;IAC1D,UAAU,CAAC,EAAE,MAAM,IAAI,CAAC;IACxB,uEAAuE;IACvE,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,yDAAyD;IACzD,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB;wDACoD;IACpD,cAAc,CAAC,EAAE,cAAc,CAAC;IAChC;;yDAEqD;IACrD,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,4DAA4D;IAC5D,iBAAiB,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,MAAM,CAAC;IAC/C;mFAC+E;IAC/E,YAAY,CAAC,EAAE,OAAO,CAAC;CACvB;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,QAAQ,CAAC,EACxB,OAAO,EACP,KAAK,EACL,QAAQ,EACR,WAA4B,EAC5B,iBAA+B,EAC/B,YAA6C,EAC7C,QAAQ,EACR,EAAE,EACF,SAAS,EACT,cAAc,EAAE,WAAW,EAC3B,kBAAkB,EAAE,eAAe,EACnC,cAAc,EACd,UAAU,EACV,OAAO,EACP,OAAO,EACP,cAAc,EACd,SAAS,EACT,iBAAiB,EACjB,YAAY,GACZ,EAAE,aAAa,qBAsLf"}
@@ -1 +1 @@
1
- {"version":3,"file":"multi-combobox.d.ts","sourceRoot":"","sources":["../../src/components/multi-combobox.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAK9B,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,YAAY,CAAA;AAEhD,MAAM,WAAW,kBAAkB;IACjC,OAAO,EAAE,cAAc,EAAE,CAAA;IACzB,KAAK,EAAE,MAAM,EAAE,CAAA;IACf,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,IAAI,CAAA;IACnC,oDAAoD;IACpD,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,oCAAoC;IACpC,iBAAiB,CAAC,EAAE,MAAM,CAAA;IAC1B,+CAA+C;IAC/C,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,EAAE,CAAC,EAAE,MAAM,CAAA;IACX,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,cAAc,CAAC,EAAE,OAAO,GAAG,MAAM,GAAG,OAAO,CAAA;IAC3C,kBAAkB,CAAC,EAAE,MAAM,CAAA;IAC3B;qEACiE;IACjE,cAAc,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,CAAA;IACzC,0DAA0D;IAC1D,UAAU,CAAC,EAAE,MAAM,IAAI,CAAA;IACvB,uEAAuE;IACvE,OAAO,CAAC,EAAE,OAAO,CAAA;IACjB,yDAAyD;IACzD,OAAO,CAAC,EAAE,OAAO,CAAA;IACjB;+DAC2D;IAC3D,eAAe,CAAC,EAAE,cAAc,EAAE,CAAA;CACnC;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,aAAa,CAAC,EAC5B,OAAO,EACP,KAAK,EACL,QAAQ,EACR,WAA4B,EAC5B,iBAA+B,EAC/B,YAA6C,EAC7C,QAAQ,EACR,EAAE,EACF,SAAS,EACT,cAAc,EAAE,WAAW,EAC3B,kBAAkB,EAAE,eAAe,EACnC,cAAc,EACd,UAAU,EACV,OAAO,EACP,OAAO,EACP,eAAe,GAChB,EAAE,kBAAkB,qBA6KpB"}
1
+ {"version":3,"file":"multi-combobox.d.ts","sourceRoot":"","sources":["../../src/components/multi-combobox.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAK9B,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,YAAY,CAAA;AAEhD,MAAM,WAAW,kBAAkB;IACjC,OAAO,EAAE,cAAc,EAAE,CAAA;IACzB,KAAK,EAAE,MAAM,EAAE,CAAA;IACf,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,IAAI,CAAA;IACnC,oDAAoD;IACpD,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,oCAAoC;IACpC,iBAAiB,CAAC,EAAE,MAAM,CAAA;IAC1B,+CAA+C;IAC/C,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,EAAE,CAAC,EAAE,MAAM,CAAA;IACX,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,cAAc,CAAC,EAAE,OAAO,GAAG,MAAM,GAAG,OAAO,CAAA;IAC3C,kBAAkB,CAAC,EAAE,MAAM,CAAA;IAC3B;qEACiE;IACjE,cAAc,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,CAAA;IACzC,0DAA0D;IAC1D,UAAU,CAAC,EAAE,MAAM,IAAI,CAAA;IACvB,uEAAuE;IACvE,OAAO,CAAC,EAAE,OAAO,CAAA;IACjB,yDAAyD;IACzD,OAAO,CAAC,EAAE,OAAO,CAAA;IACjB;+DAC2D;IAC3D,eAAe,CAAC,EAAE,cAAc,EAAE,CAAA;CACnC;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,aAAa,CAAC,EAC5B,OAAO,EACP,KAAK,EACL,QAAQ,EACR,WAA4B,EAC5B,iBAA+B,EAC/B,YAA6C,EAC7C,QAAQ,EACR,EAAE,EACF,SAAS,EACT,cAAc,EAAE,WAAW,EAC3B,kBAAkB,EAAE,eAAe,EACnC,cAAc,EACd,UAAU,EACV,OAAO,EACP,OAAO,EACP,eAAe,GAChB,EAAE,kBAAkB,qBA6LpB"}
@@ -1,16 +1,24 @@
1
- import * as React from "react";
2
1
  /**
3
- * Dispara `onLoadMore` quando o `sentinelRef` entra na viewport do `listRef`
4
- * (raiz = a lista rolável, não a janela — a lista rola por dentro do Popover/
5
- * Drawer). Usa refs "latest" para `loading`/`onLoadMore` e evita reassinar o
6
- * observer a cada render.
2
+ * Dispara `onLoadMore` quando o sentinela entra na viewport da lista rolável
3
+ * (raiz = a lista, não a janela — ela rola por dentro do Popover/Drawer). Usa
4
+ * refs "latest" para `loading`/`onLoadMore` e não reassina o observer a cada
5
+ * render.
6
+ *
7
+ * Os nós entram como **estado** (callback refs), não como `useRef`: lista e
8
+ * sentinela vivem dentro do Portal do Popover/Drawer e só existem no DOM com o
9
+ * dropdown aberto, o que acontece bem depois de `enabled` virar `true`. Com
10
+ * `useRef` + deps `[enabled]` o efeito rodava uma única vez, com o dropdown
11
+ * fechado e os dois refs `null`, e o observer nunca chegava a ser registrado —
12
+ * a paginação por scroll simplesmente não acontecia. Guardar os nós em estado
13
+ * também refaz a assinatura quando o sentinela desmonta e remonta (`hasMore`
14
+ * oscilando), em vez de deixar o observer preso a um nó já destacado.
7
15
  */
8
16
  export declare function useInfiniteScrollSentinel({ enabled, loading, onLoadMore, }: {
9
17
  enabled: boolean;
10
18
  loading?: boolean;
11
19
  onLoadMore?: () => void;
12
20
  }): {
13
- listRef: React.RefObject<HTMLDivElement | null>;
14
- sentinelRef: React.RefObject<HTMLDivElement | null>;
21
+ listRef: (node: HTMLDivElement | null) => void;
22
+ sentinelRef: (node: HTMLDivElement | null) => void;
15
23
  };
16
24
  //# sourceMappingURL=use-infinite-scroll-sentinel.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"use-infinite-scroll-sentinel.d.ts","sourceRoot":"","sources":["../../src/hooks/use-infinite-scroll-sentinel.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAE9B;;;;;GAKG;AACH,wBAAgB,yBAAyB,CAAC,EACxC,OAAO,EACP,OAAO,EACP,UAAU,GACX,EAAE;IACD,OAAO,EAAE,OAAO,CAAA;IAChB,OAAO,CAAC,EAAE,OAAO,CAAA;IACjB,UAAU,CAAC,EAAE,MAAM,IAAI,CAAA;CACxB;;;EA8BA"}
1
+ {"version":3,"file":"use-infinite-scroll-sentinel.d.ts","sourceRoot":"","sources":["../../src/hooks/use-infinite-scroll-sentinel.ts"],"names":[],"mappings":"AAEA;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,yBAAyB,CAAC,EACxC,OAAO,EACP,OAAO,EACP,UAAU,GACX,EAAE;IACD,OAAO,EAAE,OAAO,CAAA;IAChB,OAAO,CAAC,EAAE,OAAO,CAAA;IACjB,UAAU,CAAC,EAAE,MAAM,IAAI,CAAA;CACxB;oBAU0C,cAAc,GAAG,IAAI;wBAGjB,cAAc,GAAG,IAAI;EAyBnE"}
package/dist/index.cjs CHANGED
@@ -749,30 +749,35 @@ function useInfiniteScrollSentinel({
749
749
  loading,
750
750
  onLoadMore
751
751
  }) {
752
- const listRef = React4.useRef(null);
753
- const sentinelRef = React4.useRef(null);
752
+ const [listNode, setListNode] = React4.useState(null);
753
+ const [sentinelNode, setSentinelNode] = React4.useState(
754
+ null
755
+ );
754
756
  const loadingRef = React4.useRef(loading);
755
757
  const onLoadMoreRef = React4.useRef(onLoadMore);
758
+ const listRef = React4.useCallback((node) => {
759
+ setListNode(node);
760
+ }, []);
761
+ const sentinelRef = React4.useCallback((node) => {
762
+ setSentinelNode(node);
763
+ }, []);
756
764
  React4.useEffect(() => {
757
765
  loadingRef.current = loading;
758
766
  onLoadMoreRef.current = onLoadMore;
759
767
  });
760
768
  React4.useEffect(() => {
761
- if (!enabled) return;
762
- const root = listRef.current;
763
- const sentinel = sentinelRef.current;
764
- if (!root || !sentinel) return;
769
+ if (!enabled || !listNode || !sentinelNode) return;
765
770
  const observer = new IntersectionObserver(
766
771
  (entries) => {
767
772
  if (entries[0]?.isIntersecting && !loadingRef.current) {
768
773
  onLoadMoreRef.current?.();
769
774
  }
770
775
  },
771
- { root, rootMargin: "0px 0px 100px 0px" }
776
+ { root: listNode, rootMargin: "0px 0px 100px 0px" }
772
777
  );
773
- observer.observe(sentinel);
778
+ observer.observe(sentinelNode);
774
779
  return () => observer.disconnect();
775
- }, [enabled]);
780
+ }, [enabled, listNode, sentinelNode]);
776
781
  return { listRef, sentinelRef };
777
782
  }
778
783
 
@@ -803,7 +808,14 @@ function Combobox({
803
808
  const [search, setSearch] = React5.useState("");
804
809
  const isDesktop = useIsDesktop();
805
810
  const isServer = onSearchChange !== void 0;
806
- const selected = selectedOption?.value === value ? selectedOption : options.find((option) => option.value === value) ?? (creatable && value ? { value, label: value } : void 0);
811
+ const labelCache = React5.useRef(/* @__PURE__ */ new Map());
812
+ const fromPage = selectedOption?.value === value ? selectedOption : options.find((option) => option.value === value);
813
+ React5.useEffect(() => {
814
+ for (const option of options) labelCache.current.set(option.value, option);
815
+ if (selectedOption)
816
+ labelCache.current.set(selectedOption.value, selectedOption);
817
+ });
818
+ const selected = fromPage ?? (value ? labelCache.current.get(value) : void 0) ?? (creatable && value ? { value, label: value } : void 0);
807
819
  const handleOpenChange = (next) => {
808
820
  setOpen(next);
809
821
  if (!next) setSearch("");
@@ -1847,12 +1859,14 @@ function MultiCombobox({
1847
1859
  const [open, setOpen] = React8.useState(false);
1848
1860
  const isDesktop = useIsDesktop();
1849
1861
  const isServer = onSearchChange !== void 0;
1850
- const seen = /* @__PURE__ */ new Set();
1851
- const selected = [...selectedOptions ?? [], ...options].filter((option) => {
1852
- if (!value.includes(option.value) || seen.has(option.value)) return false;
1853
- seen.add(option.value);
1854
- return true;
1862
+ const labelCache = React8.useRef(/* @__PURE__ */ new Map());
1863
+ const byValue = /* @__PURE__ */ new Map();
1864
+ for (const option of options) byValue.set(option.value, option);
1865
+ for (const option of selectedOptions ?? []) byValue.set(option.value, option);
1866
+ React8.useEffect(() => {
1867
+ for (const [key, option] of byValue) labelCache.current.set(key, option);
1855
1868
  });
1869
+ const selected = value.map((v) => byValue.get(v) ?? labelCache.current.get(v)).filter((option) => option !== void 0);
1856
1870
  const { listRef, sentinelRef } = useInfiniteScrollSentinel({
1857
1871
  enabled: isServer && !!hasMore,
1858
1872
  loading,