@sesionario/blocks 1.41.0-rc.5 → 1.41.0-rc.7

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/index.cjs CHANGED
@@ -5618,6 +5618,7 @@ function matchesQuery(entry, query, getOptionKeywords) {
5618
5618
  function SearchablePicker(props) {
5619
5619
  const {
5620
5620
  options,
5621
+ selectedItems: selectedItemsProp,
5621
5622
  fetchOptions,
5622
5623
  getOptionValue,
5623
5624
  getOptionLabel,
@@ -5676,11 +5677,16 @@ function SearchablePicker(props) {
5676
5677
  },
5677
5678
  [getOptionValue]
5678
5679
  );
5680
+ if (options?.length) rememberItems(options);
5681
+ if (selectedItemsProp?.length) rememberItems(selectedItemsProp);
5682
+ if (pinned?.recommended?.length) rememberItems(pinned.recommended);
5683
+ if (pinned?.recent?.length) rememberItems(pinned.recent);
5679
5684
  React2.useEffect(() => {
5680
5685
  if (options) rememberItems(options);
5686
+ if (selectedItemsProp) rememberItems(selectedItemsProp);
5681
5687
  if (pinned?.recommended) rememberItems(pinned.recommended);
5682
5688
  if (pinned?.recent) rememberItems(pinned.recent);
5683
- }, [options, pinned, rememberItems]);
5689
+ }, [options, selectedItemsProp, pinned, rememberItems]);
5684
5690
  React2.useEffect(() => {
5685
5691
  if (!open) {
5686
5692
  setQuery("");
@@ -5728,7 +5734,7 @@ function SearchablePicker(props) {
5728
5734
  const selectedItems = React2.useMemo(() => {
5729
5735
  const values = mode === "multiple" ? selectedValueKey ? selectedValueKey.split("\0") : [] : selectedValueKey ? [selectedValueKey] : [];
5730
5736
  return values.map((value) => knownItemsRef.current.get(value)).filter((item) => item !== void 0);
5731
- }, [mode, selectedValueKey, options, pinned, remoteItems]);
5737
+ }, [mode, selectedValueKey, options, selectedItemsProp, pinned, remoteItems]);
5732
5738
  const queryForFilter = query.trim();
5733
5739
  const recommended = React2.useMemo(() => {
5734
5740
  if (queryForFilter) return [];
@@ -5832,13 +5838,27 @@ function SearchablePicker(props) {
5832
5838
  );
5833
5839
  const handleLoadMore = React2.useCallback(async () => {
5834
5840
  if (!onLoadMore || isLoadingMore) return;
5841
+ const requestId = requestIdRef.current;
5835
5842
  setIsLoadingMore(true);
5836
5843
  try {
5837
- await onLoadMore();
5844
+ const more = await onLoadMore();
5845
+ if (requestIdRef.current !== requestId || !Array.isArray(more)) return;
5846
+ setRemoteItems((prev) => {
5847
+ const seen = new Set(prev.map((item) => getOptionValue(item)));
5848
+ const next = [...prev];
5849
+ for (const item of more) {
5850
+ const value = getOptionValue(item);
5851
+ if (seen.has(value)) continue;
5852
+ seen.add(value);
5853
+ next.push(item);
5854
+ }
5855
+ return next;
5856
+ });
5857
+ rememberItems(more);
5838
5858
  } finally {
5839
- setIsLoadingMore(false);
5859
+ if (requestIdRef.current === requestId) setIsLoadingMore(false);
5840
5860
  }
5841
- }, [onLoadMore, isLoadingMore]);
5861
+ }, [onLoadMore, isLoadingMore, getOptionValue, rememberItems]);
5842
5862
  const triggerLabel = React2.useMemo(() => {
5843
5863
  if (renderValue) {
5844
5864
  if (mode === "multiple") {
@@ -5972,7 +5992,7 @@ function SearchablePicker(props) {
5972
5992
  ] });
5973
5993
  }
5974
5994
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: cn("flex w-full items-center gap-1", className), children: [
5975
- /* @__PURE__ */ jsxRuntime.jsx("div", { className: "min-w-0 flex-1", children: /* @__PURE__ */ jsxRuntime.jsxs(Popover, { open, onOpenChange: setOpen, modal: true, children: [
5995
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: "min-w-0 flex-1", children: /* @__PURE__ */ jsxRuntime.jsxs(Popover, { open, onOpenChange: setOpen, modal: false, children: [
5976
5996
  /* @__PURE__ */ jsxRuntime.jsx(PopoverTrigger, { asChild: true, children: triggerButton }),
5977
5997
  /* @__PURE__ */ jsxRuntime.jsx(
5978
5998
  PopoverContent,
@@ -7398,6 +7418,9 @@ var MessageComposer = React2__namespace.forwardRef(function MessageComposer2({
7398
7418
  event.preventDefault();
7399
7419
  if (!canSubmit) return;
7400
7420
  onSubmit(event);
7421
+ requestAnimationFrame(() => {
7422
+ fieldRef.current?.focus({ preventScroll: true });
7423
+ });
7401
7424
  },
7402
7425
  [canSubmit, onSubmit]
7403
7426
  );
@@ -7472,6 +7495,10 @@ var MessageComposer = React2__namespace.forwardRef(function MessageComposer2({
7472
7495
  size: sendButtonSize,
7473
7496
  disabled: !canSubmit,
7474
7497
  className: sendButtonClassName,
7498
+ onPointerDown: (event) => {
7499
+ if (event.button !== 0) return;
7500
+ event.preventDefault();
7501
+ },
7475
7502
  children: sendLabel
7476
7503
  }
7477
7504
  )
@@ -7729,7 +7756,7 @@ function ThreadPanel({
7729
7756
  sendLabel: labels.send,
7730
7757
  placeholder: labels.placeholder,
7731
7758
  "aria-label": labels.placeholder,
7732
- disabled: loading || sending,
7759
+ disabled: loading,
7733
7760
  sendDisabled: loading || sending,
7734
7761
  maxLength: 2e3,
7735
7762
  rows: 2