@mlw-packages/react-components 1.10.27 → 1.10.28

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 (3) hide show
  1. package/dist/index.js +47 -106
  2. package/dist/index.mjs +47 -106
  3. package/package.json +1 -1
package/dist/index.js CHANGED
@@ -22487,9 +22487,14 @@ function useCommandPalette({
22487
22487
  const [query, setQuery] = React32__namespace.useState("");
22488
22488
  const [activeIndex, setActiveIndex] = React32__namespace.useState(0);
22489
22489
  const [page, setPage] = React32__namespace.useState(0);
22490
- const [selectedItemIds, setSelectedItemIds] = React32__namespace.useState(
22491
- /* @__PURE__ */ new Set()
22492
- );
22490
+ const [selectedItemIds, setSelectedItemIds] = React32__namespace.useState(/* @__PURE__ */ new Set());
22491
+ const stateRef = React32.useRef({
22492
+ activeIndex,
22493
+ page,
22494
+ flatItems: [],
22495
+ query,
22496
+ selectedItems: []
22497
+ });
22493
22498
  const toggleSelection = React32.useCallback((id) => {
22494
22499
  setSelectedItemIds((prev) => {
22495
22500
  const next = new Set(prev);
@@ -22499,10 +22504,7 @@ function useCommandPalette({
22499
22504
  });
22500
22505
  }, []);
22501
22506
  const clearSelection = React32.useCallback(() => setSelectedItemIds(/* @__PURE__ */ new Set()), []);
22502
- const baseGroups = React32.useMemo(
22503
- () => normaliseGroups(items, groups),
22504
- [items, groups]
22505
- );
22507
+ const baseGroups = React32.useMemo(() => normaliseGroups(items, groups), [items, groups]);
22506
22508
  React32.useEffect(() => {
22507
22509
  if (open) {
22508
22510
  setQuery("");
@@ -22518,29 +22520,11 @@ function useCommandPalette({
22518
22520
  }, [query, multiSearch]);
22519
22521
  const allMatchedGroups = React32.useMemo(() => {
22520
22522
  if (!query.trim()) {
22521
- if (recentItems.length > 0) {
22522
- return [
22523
- {
22524
- id: "__recent__",
22525
- label: "Recent",
22526
- icon: React32__namespace.createElement(react.ClockCounterClockwiseIcon),
22527
- items: recentItems,
22528
- priority: 999
22529
- },
22530
- ...baseGroups
22531
- ];
22532
- }
22533
- return baseGroups;
22534
- }
22535
- if (searchTerms.length > 1 || multiSearch && searchTerms.length > 0) {
22536
- return unionGroups(baseGroups, searchTerms);
22523
+ return recentItems.length > 0 ? [{ id: "__recent__", label: "Recent", icon: React32__namespace.createElement(react.ClockCounterClockwiseIcon), items: recentItems, priority: 999 }, ...baseGroups] : baseGroups;
22537
22524
  }
22538
- return filterAndScore(baseGroups, query);
22525
+ return searchTerms.length > 1 || multiSearch && searchTerms.length > 0 ? unionGroups(baseGroups, searchTerms) : filterAndScore(baseGroups, query);
22539
22526
  }, [query, baseGroups, recentItems, multiSearch, searchTerms]);
22540
- const allFlatItems = React32.useMemo(
22541
- () => allMatchedGroups.flatMap((g) => g.items),
22542
- [allMatchedGroups]
22543
- );
22527
+ const allFlatItems = React32.useMemo(() => allMatchedGroups.flatMap((g) => g.items), [allMatchedGroups]);
22544
22528
  const totalItems = allFlatItems.length;
22545
22529
  const totalPages = Math.max(1, Math.ceil(totalItems / PAGE_SIZE));
22546
22530
  React32.useEffect(() => {
@@ -22562,115 +22546,72 @@ function useCommandPalette({
22562
22546
  count++;
22563
22547
  if (count >= end) break;
22564
22548
  }
22565
- if (slicedItems.length > 0) {
22566
- result.push({ ...group, items: slicedItems });
22567
- }
22549
+ if (slicedItems.length > 0) result.push({ ...group, items: slicedItems });
22568
22550
  if (count >= end) break;
22569
22551
  }
22570
22552
  return result;
22571
22553
  }, [allMatchedGroups, page]);
22572
- const flatItems = React32.useMemo(
22573
- () => displayedGroups.flatMap((g) => g.items),
22574
- [displayedGroups]
22575
- );
22576
- const selectedItems = React32.useMemo(
22577
- () => allFlatItems.filter((i) => selectedItemIds.has(i.id)),
22578
- [allFlatItems, selectedItemIds]
22579
- );
22580
- const pageItemCount = flatItems.length;
22554
+ const flatItems = React32.useMemo(() => displayedGroups.flatMap((g) => g.items), [displayedGroups]);
22555
+ const selectedItems = React32.useMemo(() => allFlatItems.filter((i) => selectedItemIds.has(i.id)), [allFlatItems, selectedItemIds]);
22581
22556
  React32.useEffect(() => {
22582
- setActiveIndex((i) => Math.min(i, Math.max(pageItemCount - 1, 0)));
22583
- }, [pageItemCount]);
22557
+ stateRef.current = { activeIndex, page, flatItems, query, selectedItems };
22558
+ }, [activeIndex, page, flatItems, query, selectedItems]);
22584
22559
  const executeBulkAction = React32.useCallback(() => {
22585
22560
  if (!onSelectMultiple || selectedItems.length === 0) return;
22586
22561
  onSelectMultiple(selectedItems);
22587
22562
  onOpenChange?.(false);
22588
22563
  }, [onSelectMultiple, selectedItems, onOpenChange]);
22589
- const handleSelect = React32.useCallback(
22590
- (item, event) => {
22591
- if (!item) return;
22592
- if (multiSelect) {
22593
- const isCmdKey = event && ("ctrlKey" in event || "metaKey" in event || "shiftKey" in event) && (event.ctrlKey || event.metaKey || event.shiftKey);
22594
- if (isCmdKey) {
22595
- toggleSelection(item.id);
22596
- return;
22597
- }
22598
- if (selectedItems.length > 0) {
22599
- const finalItems = selectedItemIds.has(item.id) ? selectedItems : [...selectedItems, item];
22600
- onSelectMultiple?.(finalItems);
22601
- onOpenChange?.(false);
22602
- return;
22603
- }
22564
+ const handleSelect = React32.useCallback((item, event) => {
22565
+ if (!item) return;
22566
+ if (multiSelect) {
22567
+ const isCmdKey = event && ("ctrlKey" in event || "metaKey" in event || "shiftKey" in event) && (event.ctrlKey || event.metaKey || event.shiftKey);
22568
+ if (isCmdKey) {
22569
+ toggleSelection(item.id);
22570
+ return;
22604
22571
  }
22605
- item.onSelect();
22606
- onOpenChange?.(false);
22607
- if (onRecentItemsChange) {
22608
- const next = [
22609
- item,
22610
- ...recentItems.filter((r) => r.id !== item.id)
22611
- ].slice(0, maxRecentItems);
22612
- onRecentItemsChange(next);
22572
+ if (selectedItems.length > 0) {
22573
+ const finalItems = selectedItemIds.has(item.id) ? selectedItems : [...selectedItems, item];
22574
+ onSelectMultiple?.(finalItems);
22575
+ onOpenChange?.(false);
22576
+ return;
22613
22577
  }
22614
- },
22615
- [
22616
- multiSelect,
22617
- selectedItems,
22618
- selectedItemIds,
22619
- onSelectMultiple,
22620
- onOpenChange,
22621
- onRecentItemsChange,
22622
- recentItems,
22623
- maxRecentItems,
22624
- toggleSelection
22625
- ]
22626
- );
22578
+ }
22579
+ item.onSelect();
22580
+ onOpenChange?.(false);
22581
+ if (onRecentItemsChange) {
22582
+ const next = [item, ...recentItems.filter((r) => r.id !== item.id)].slice(0, maxRecentItems);
22583
+ onRecentItemsChange(next);
22584
+ }
22585
+ }, [multiSelect, selectedItems, selectedItemIds, onSelectMultiple, onOpenChange, onRecentItemsChange, recentItems, maxRecentItems, toggleSelection]);
22627
22586
  React32.useEffect(() => {
22628
22587
  if (!open) return;
22629
22588
  const handler = (e) => {
22589
+ const { activeIndex: curIdx, flatItems: curItems, query: curQuery, selectedItems: curSelected } = stateRef.current;
22630
22590
  if (e.key === "ArrowDown") {
22631
22591
  e.preventDefault();
22632
- if (activeIndex === pageItemCount - 1 && page < totalPages - 1) {
22633
- setPage((p) => p + 1);
22634
- } else {
22635
- setActiveIndex((i) => (i + 1) % Math.max(pageItemCount, 1));
22636
- }
22592
+ if (curIdx === curItems.length - 1 && page < totalPages - 1) setPage((p) => p + 1);
22593
+ else setActiveIndex((i) => (i + 1) % Math.max(curItems.length, 1));
22637
22594
  } else if (e.key === "ArrowUp") {
22638
22595
  e.preventDefault();
22639
- if (activeIndex === 0 && page > 0) {
22596
+ if (curIdx === 0 && page > 0) {
22640
22597
  setPage((p) => p - 1);
22641
22598
  setActiveIndex(PAGE_SIZE - 1);
22642
- } else {
22643
- setActiveIndex(
22644
- (i) => (i - 1 + Math.max(pageItemCount, 1)) % Math.max(pageItemCount, 1)
22645
- );
22646
- }
22599
+ } else setActiveIndex((i) => (i - 1 + Math.max(curItems.length, 1)) % Math.max(curItems.length, 1));
22647
22600
  } else if (e.key === "Enter") {
22648
22601
  e.preventDefault();
22649
- if (multiSearch && query.includes(",")) {
22602
+ if (multiSearch && curQuery.includes(",") && curSelected.length === 0) {
22650
22603
  return;
22651
22604
  }
22652
22605
  if (multiSelect && (e.ctrlKey || e.metaKey)) {
22653
22606
  executeBulkAction();
22654
22607
  return;
22655
22608
  }
22656
- handleSelect(flatItems[activeIndex], e);
22609
+ handleSelect(curItems[curIdx], e);
22657
22610
  }
22658
22611
  };
22659
- document.addEventListener("keydown", handler);
22660
- return () => document.removeEventListener("keydown", handler);
22661
- }, [
22662
- open,
22663
- flatItems,
22664
- activeIndex,
22665
- pageItemCount,
22666
- page,
22667
- totalPages,
22668
- query,
22669
- multiSearch,
22670
- multiSelect,
22671
- executeBulkAction,
22672
- handleSelect
22673
- ]);
22612
+ window.addEventListener("keydown", handler);
22613
+ return () => window.removeEventListener("keydown", handler);
22614
+ }, [open, page, totalPages, multiSearch, multiSelect, handleSelect, executeBulkAction]);
22674
22615
  return {
22675
22616
  query,
22676
22617
  setQuery,
package/dist/index.mjs CHANGED
@@ -22445,9 +22445,14 @@ function useCommandPalette({
22445
22445
  const [query, setQuery] = React32.useState("");
22446
22446
  const [activeIndex, setActiveIndex] = React32.useState(0);
22447
22447
  const [page, setPage] = React32.useState(0);
22448
- const [selectedItemIds, setSelectedItemIds] = React32.useState(
22449
- /* @__PURE__ */ new Set()
22450
- );
22448
+ const [selectedItemIds, setSelectedItemIds] = React32.useState(/* @__PURE__ */ new Set());
22449
+ const stateRef = useRef({
22450
+ activeIndex,
22451
+ page,
22452
+ flatItems: [],
22453
+ query,
22454
+ selectedItems: []
22455
+ });
22451
22456
  const toggleSelection = useCallback((id) => {
22452
22457
  setSelectedItemIds((prev) => {
22453
22458
  const next = new Set(prev);
@@ -22457,10 +22462,7 @@ function useCommandPalette({
22457
22462
  });
22458
22463
  }, []);
22459
22464
  const clearSelection = useCallback(() => setSelectedItemIds(/* @__PURE__ */ new Set()), []);
22460
- const baseGroups = useMemo(
22461
- () => normaliseGroups(items, groups),
22462
- [items, groups]
22463
- );
22465
+ const baseGroups = useMemo(() => normaliseGroups(items, groups), [items, groups]);
22464
22466
  useEffect(() => {
22465
22467
  if (open) {
22466
22468
  setQuery("");
@@ -22476,29 +22478,11 @@ function useCommandPalette({
22476
22478
  }, [query, multiSearch]);
22477
22479
  const allMatchedGroups = useMemo(() => {
22478
22480
  if (!query.trim()) {
22479
- if (recentItems.length > 0) {
22480
- return [
22481
- {
22482
- id: "__recent__",
22483
- label: "Recent",
22484
- icon: React32.createElement(ClockCounterClockwiseIcon),
22485
- items: recentItems,
22486
- priority: 999
22487
- },
22488
- ...baseGroups
22489
- ];
22490
- }
22491
- return baseGroups;
22492
- }
22493
- if (searchTerms.length > 1 || multiSearch && searchTerms.length > 0) {
22494
- return unionGroups(baseGroups, searchTerms);
22481
+ return recentItems.length > 0 ? [{ id: "__recent__", label: "Recent", icon: React32.createElement(ClockCounterClockwiseIcon), items: recentItems, priority: 999 }, ...baseGroups] : baseGroups;
22495
22482
  }
22496
- return filterAndScore(baseGroups, query);
22483
+ return searchTerms.length > 1 || multiSearch && searchTerms.length > 0 ? unionGroups(baseGroups, searchTerms) : filterAndScore(baseGroups, query);
22497
22484
  }, [query, baseGroups, recentItems, multiSearch, searchTerms]);
22498
- const allFlatItems = useMemo(
22499
- () => allMatchedGroups.flatMap((g) => g.items),
22500
- [allMatchedGroups]
22501
- );
22485
+ const allFlatItems = useMemo(() => allMatchedGroups.flatMap((g) => g.items), [allMatchedGroups]);
22502
22486
  const totalItems = allFlatItems.length;
22503
22487
  const totalPages = Math.max(1, Math.ceil(totalItems / PAGE_SIZE));
22504
22488
  useEffect(() => {
@@ -22520,115 +22504,72 @@ function useCommandPalette({
22520
22504
  count++;
22521
22505
  if (count >= end) break;
22522
22506
  }
22523
- if (slicedItems.length > 0) {
22524
- result.push({ ...group, items: slicedItems });
22525
- }
22507
+ if (slicedItems.length > 0) result.push({ ...group, items: slicedItems });
22526
22508
  if (count >= end) break;
22527
22509
  }
22528
22510
  return result;
22529
22511
  }, [allMatchedGroups, page]);
22530
- const flatItems = useMemo(
22531
- () => displayedGroups.flatMap((g) => g.items),
22532
- [displayedGroups]
22533
- );
22534
- const selectedItems = useMemo(
22535
- () => allFlatItems.filter((i) => selectedItemIds.has(i.id)),
22536
- [allFlatItems, selectedItemIds]
22537
- );
22538
- const pageItemCount = flatItems.length;
22512
+ const flatItems = useMemo(() => displayedGroups.flatMap((g) => g.items), [displayedGroups]);
22513
+ const selectedItems = useMemo(() => allFlatItems.filter((i) => selectedItemIds.has(i.id)), [allFlatItems, selectedItemIds]);
22539
22514
  useEffect(() => {
22540
- setActiveIndex((i) => Math.min(i, Math.max(pageItemCount - 1, 0)));
22541
- }, [pageItemCount]);
22515
+ stateRef.current = { activeIndex, page, flatItems, query, selectedItems };
22516
+ }, [activeIndex, page, flatItems, query, selectedItems]);
22542
22517
  const executeBulkAction = useCallback(() => {
22543
22518
  if (!onSelectMultiple || selectedItems.length === 0) return;
22544
22519
  onSelectMultiple(selectedItems);
22545
22520
  onOpenChange?.(false);
22546
22521
  }, [onSelectMultiple, selectedItems, onOpenChange]);
22547
- const handleSelect = useCallback(
22548
- (item, event) => {
22549
- if (!item) return;
22550
- if (multiSelect) {
22551
- const isCmdKey = event && ("ctrlKey" in event || "metaKey" in event || "shiftKey" in event) && (event.ctrlKey || event.metaKey || event.shiftKey);
22552
- if (isCmdKey) {
22553
- toggleSelection(item.id);
22554
- return;
22555
- }
22556
- if (selectedItems.length > 0) {
22557
- const finalItems = selectedItemIds.has(item.id) ? selectedItems : [...selectedItems, item];
22558
- onSelectMultiple?.(finalItems);
22559
- onOpenChange?.(false);
22560
- return;
22561
- }
22522
+ const handleSelect = useCallback((item, event) => {
22523
+ if (!item) return;
22524
+ if (multiSelect) {
22525
+ const isCmdKey = event && ("ctrlKey" in event || "metaKey" in event || "shiftKey" in event) && (event.ctrlKey || event.metaKey || event.shiftKey);
22526
+ if (isCmdKey) {
22527
+ toggleSelection(item.id);
22528
+ return;
22562
22529
  }
22563
- item.onSelect();
22564
- onOpenChange?.(false);
22565
- if (onRecentItemsChange) {
22566
- const next = [
22567
- item,
22568
- ...recentItems.filter((r) => r.id !== item.id)
22569
- ].slice(0, maxRecentItems);
22570
- onRecentItemsChange(next);
22530
+ if (selectedItems.length > 0) {
22531
+ const finalItems = selectedItemIds.has(item.id) ? selectedItems : [...selectedItems, item];
22532
+ onSelectMultiple?.(finalItems);
22533
+ onOpenChange?.(false);
22534
+ return;
22571
22535
  }
22572
- },
22573
- [
22574
- multiSelect,
22575
- selectedItems,
22576
- selectedItemIds,
22577
- onSelectMultiple,
22578
- onOpenChange,
22579
- onRecentItemsChange,
22580
- recentItems,
22581
- maxRecentItems,
22582
- toggleSelection
22583
- ]
22584
- );
22536
+ }
22537
+ item.onSelect();
22538
+ onOpenChange?.(false);
22539
+ if (onRecentItemsChange) {
22540
+ const next = [item, ...recentItems.filter((r) => r.id !== item.id)].slice(0, maxRecentItems);
22541
+ onRecentItemsChange(next);
22542
+ }
22543
+ }, [multiSelect, selectedItems, selectedItemIds, onSelectMultiple, onOpenChange, onRecentItemsChange, recentItems, maxRecentItems, toggleSelection]);
22585
22544
  useEffect(() => {
22586
22545
  if (!open) return;
22587
22546
  const handler = (e) => {
22547
+ const { activeIndex: curIdx, flatItems: curItems, query: curQuery, selectedItems: curSelected } = stateRef.current;
22588
22548
  if (e.key === "ArrowDown") {
22589
22549
  e.preventDefault();
22590
- if (activeIndex === pageItemCount - 1 && page < totalPages - 1) {
22591
- setPage((p) => p + 1);
22592
- } else {
22593
- setActiveIndex((i) => (i + 1) % Math.max(pageItemCount, 1));
22594
- }
22550
+ if (curIdx === curItems.length - 1 && page < totalPages - 1) setPage((p) => p + 1);
22551
+ else setActiveIndex((i) => (i + 1) % Math.max(curItems.length, 1));
22595
22552
  } else if (e.key === "ArrowUp") {
22596
22553
  e.preventDefault();
22597
- if (activeIndex === 0 && page > 0) {
22554
+ if (curIdx === 0 && page > 0) {
22598
22555
  setPage((p) => p - 1);
22599
22556
  setActiveIndex(PAGE_SIZE - 1);
22600
- } else {
22601
- setActiveIndex(
22602
- (i) => (i - 1 + Math.max(pageItemCount, 1)) % Math.max(pageItemCount, 1)
22603
- );
22604
- }
22557
+ } else setActiveIndex((i) => (i - 1 + Math.max(curItems.length, 1)) % Math.max(curItems.length, 1));
22605
22558
  } else if (e.key === "Enter") {
22606
22559
  e.preventDefault();
22607
- if (multiSearch && query.includes(",")) {
22560
+ if (multiSearch && curQuery.includes(",") && curSelected.length === 0) {
22608
22561
  return;
22609
22562
  }
22610
22563
  if (multiSelect && (e.ctrlKey || e.metaKey)) {
22611
22564
  executeBulkAction();
22612
22565
  return;
22613
22566
  }
22614
- handleSelect(flatItems[activeIndex], e);
22567
+ handleSelect(curItems[curIdx], e);
22615
22568
  }
22616
22569
  };
22617
- document.addEventListener("keydown", handler);
22618
- return () => document.removeEventListener("keydown", handler);
22619
- }, [
22620
- open,
22621
- flatItems,
22622
- activeIndex,
22623
- pageItemCount,
22624
- page,
22625
- totalPages,
22626
- query,
22627
- multiSearch,
22628
- multiSelect,
22629
- executeBulkAction,
22630
- handleSelect
22631
- ]);
22570
+ window.addEventListener("keydown", handler);
22571
+ return () => window.removeEventListener("keydown", handler);
22572
+ }, [open, page, totalPages, multiSearch, multiSelect, handleSelect, executeBulkAction]);
22632
22573
  return {
22633
22574
  query,
22634
22575
  setQuery,
package/package.json CHANGED
@@ -5,7 +5,7 @@
5
5
  "access": "public",
6
6
  "type": "module"
7
7
  },
8
- "version": "1.10.27",
8
+ "version": "1.10.28",
9
9
  "homepage": "https://main--68e80310a069c2f10b546ef3.chromatic.com/",
10
10
  "repository": {
11
11
  "type": "git",