@krak-stack/registry 0.1.5 → 0.1.8
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/README.md +24 -0
- package/dist/components/ui/data-table.js +78 -28
- package/dist/components/ui/editing-locale-switcher.js +8 -0
- package/dist/components/ui/effect-form.js +71 -21
- package/dist/components/ui/file-picker.js +8 -0
- package/dist/components/ui/form.js +71 -21
- package/dist/components/ui/google-map.js +8 -0
- package/dist/components/ui/icon-input.js +71 -21
- package/dist/components/ui/loading.js +8 -0
- package/dist/components/ui/locale-switcher.js +8 -0
- package/dist/components/ui/pagination.js +8 -0
- package/dist/components/ui/search-menu.js +8 -0
- package/dist/components/ui/theme-switcher.js +8 -0
- package/dist/components/ui/virtualized-combobox.d.ts +3 -0
- package/dist/components/ui/virtualized-combobox.js +71 -21
- package/dist/lib/docs-ai.d.ts +3 -3
- package/dist/lib/docs-ai.js +2 -1
- package/dist/lib/docs-core.d.ts +32 -27
- package/dist/lib/docs-core.js +134 -35
- package/dist/lib/seo.d.ts +88 -0
- package/dist/lib/seo.js +104 -0
- package/dist/services/agent/client/index.js +22 -15
- package/dist/services/agent/client/widget.d.ts +0 -1
- package/dist/services/agent/index.d.ts +2 -2
- package/dist/services/agent/index.js +0 -9
- package/dist/services/agent/schema.d.ts +3 -3
- package/dist/services/agent/schema.js +1 -6
- package/package.json +5 -13
- package/dist/services/embedding.d.ts +0 -2
- package/dist/services/embedding.js +0 -23
- package/dist/services/opentelemetry.d.ts +0 -8
- package/dist/services/opentelemetry.js +0 -23
|
@@ -470,6 +470,14 @@ var routeStrategies = [
|
|
|
470
470
|
{
|
|
471
471
|
match: "/api/:path(.*)?",
|
|
472
472
|
exclude: true
|
|
473
|
+
},
|
|
474
|
+
{
|
|
475
|
+
match: "/sitemap.xml",
|
|
476
|
+
exclude: true
|
|
477
|
+
},
|
|
478
|
+
{
|
|
479
|
+
match: "/llms.txt",
|
|
480
|
+
exclude: true
|
|
473
481
|
}
|
|
474
482
|
];
|
|
475
483
|
var urlPatterns = [
|
|
@@ -1320,9 +1328,10 @@ function Badge({
|
|
|
1320
1328
|
// ../../src/components/ui/virtualized-combobox.tsx
|
|
1321
1329
|
import { Combobox as ComboboxPrimitive } from "@base-ui/react";
|
|
1322
1330
|
import { useVirtualizer } from "@tanstack/react-virtual";
|
|
1323
|
-
import { Check, ChevronsUpDown } from "lucide-react";
|
|
1331
|
+
import { Check, ChevronsUpDown, X } from "lucide-react";
|
|
1324
1332
|
import {
|
|
1325
1333
|
useCallback,
|
|
1334
|
+
useEffect as useEffect2,
|
|
1326
1335
|
useImperativeHandle,
|
|
1327
1336
|
useRef as useRef2
|
|
1328
1337
|
} from "react";
|
|
@@ -1376,11 +1385,13 @@ import { jsx as jsx13, jsxs as jsxs5 } from "react/jsx-runtime";
|
|
|
1376
1385
|
"use client";
|
|
1377
1386
|
var messages2 = {
|
|
1378
1387
|
en: {
|
|
1388
|
+
clear: "Clear selection",
|
|
1379
1389
|
search: "Search...",
|
|
1380
1390
|
selected: (count) => `${count} selected`,
|
|
1381
1391
|
selectMore: "Select more"
|
|
1382
1392
|
},
|
|
1383
1393
|
fr: {
|
|
1394
|
+
clear: "Effacer la sélection",
|
|
1384
1395
|
search: "Rechercher...",
|
|
1385
1396
|
selected: (count) => `${count} sélectionnés`,
|
|
1386
1397
|
selectMore: "Sélectionner davantage"
|
|
@@ -1394,6 +1405,7 @@ var optionEquals = (item, selected) => item.value === selected.value;
|
|
|
1394
1405
|
var VirtualizedComboboxList = ({
|
|
1395
1406
|
emptyLabel,
|
|
1396
1407
|
groupSelections,
|
|
1408
|
+
itemIndexRef,
|
|
1397
1409
|
messages: messageOverrides,
|
|
1398
1410
|
renderItem,
|
|
1399
1411
|
selectedValues,
|
|
@@ -1401,22 +1413,29 @@ var VirtualizedComboboxList = ({
|
|
|
1401
1413
|
}) => {
|
|
1402
1414
|
const filteredItems = ComboboxPrimitive.useFilteredItems();
|
|
1403
1415
|
const labels = virtualizedComboboxMessages(messageOverrides);
|
|
1404
|
-
const
|
|
1405
|
-
|
|
1406
|
-
|
|
1407
|
-
|
|
1408
|
-
|
|
1409
|
-
|
|
1410
|
-
|
|
1411
|
-
|
|
1416
|
+
const itemEntries = filteredItems.map((item, index) => ({
|
|
1417
|
+
kind: "item",
|
|
1418
|
+
item,
|
|
1419
|
+
index
|
|
1420
|
+
}));
|
|
1421
|
+
const selectedEntries = itemEntries.filter(({ item }) => selectedValues.has(item.value));
|
|
1422
|
+
const availableEntries = itemEntries.filter(({ item }) => !selectedValues.has(item.value));
|
|
1423
|
+
const entries = groupSelections ? [
|
|
1424
|
+
...selectedEntries.length > 0 ? [
|
|
1412
1425
|
{
|
|
1413
1426
|
kind: "group",
|
|
1414
|
-
key:
|
|
1415
|
-
label:
|
|
1427
|
+
key: "selected",
|
|
1428
|
+
label: labels.selected(selectedValues.size)
|
|
1416
1429
|
},
|
|
1417
|
-
|
|
1418
|
-
] : [
|
|
1419
|
-
|
|
1430
|
+
...selectedEntries
|
|
1431
|
+
] : [],
|
|
1432
|
+
{
|
|
1433
|
+
kind: "group",
|
|
1434
|
+
key: "available",
|
|
1435
|
+
label: labels.selectMore
|
|
1436
|
+
},
|
|
1437
|
+
...availableEntries
|
|
1438
|
+
] : itemEntries;
|
|
1420
1439
|
const scrollRef = useRef2(null);
|
|
1421
1440
|
const virtualizer = useVirtualizer({
|
|
1422
1441
|
count: entries.length,
|
|
@@ -1428,6 +1447,9 @@ var VirtualizedComboboxList = ({
|
|
|
1428
1447
|
estimateSize: () => 36,
|
|
1429
1448
|
overscan: 8
|
|
1430
1449
|
});
|
|
1450
|
+
useEffect2(() => {
|
|
1451
|
+
itemIndexRef.current = new Map(entries.flatMap((entry, index) => entry.kind === "item" ? [[entry.index, index]] : []));
|
|
1452
|
+
});
|
|
1431
1453
|
useImperativeHandle(virtualizerRef, () => virtualizer, [virtualizer]);
|
|
1432
1454
|
const handleScrollElementRef = useCallback((element) => {
|
|
1433
1455
|
scrollRef.current = element;
|
|
@@ -1499,6 +1521,7 @@ var VirtualizedComboboxContent = ({
|
|
|
1499
1521
|
contentClassName,
|
|
1500
1522
|
emptyLabel,
|
|
1501
1523
|
groupSelections,
|
|
1524
|
+
itemIndexRef,
|
|
1502
1525
|
messages: messageOverrides,
|
|
1503
1526
|
renderItem,
|
|
1504
1527
|
selectedValues,
|
|
@@ -1527,6 +1550,7 @@ var VirtualizedComboboxContent = ({
|
|
|
1527
1550
|
/* @__PURE__ */ jsx13(VirtualizedComboboxList, {
|
|
1528
1551
|
emptyLabel,
|
|
1529
1552
|
groupSelections,
|
|
1553
|
+
itemIndexRef,
|
|
1530
1554
|
messages: messageOverrides,
|
|
1531
1555
|
renderItem,
|
|
1532
1556
|
selectedValues,
|
|
@@ -1547,7 +1571,7 @@ var defaultTrigger = (ariaLabel, ariaInvalid, disabled, label, triggerId) => /*
|
|
|
1547
1571
|
variant: "outline",
|
|
1548
1572
|
children: [
|
|
1549
1573
|
/* @__PURE__ */ jsx13("span", {
|
|
1550
|
-
className: "min-w-0 truncate text-left",
|
|
1574
|
+
className: "min-w-0 flex-1 truncate pr-7 text-left",
|
|
1551
1575
|
children: label
|
|
1552
1576
|
}),
|
|
1553
1577
|
/* @__PURE__ */ jsx13(ChevronsUpDown, {
|
|
@@ -1555,6 +1579,14 @@ var defaultTrigger = (ariaLabel, ariaInvalid, disabled, label, triggerId) => /*
|
|
|
1555
1579
|
})
|
|
1556
1580
|
]
|
|
1557
1581
|
});
|
|
1582
|
+
var defaultClear = (label) => /* @__PURE__ */ jsx13(ComboboxPrimitive.Clear, {
|
|
1583
|
+
"aria-label": label,
|
|
1584
|
+
className: "text-muted-foreground hover:bg-muted hover:text-foreground focus-visible:border-ring focus-visible:ring-ring/50 absolute top-1/2 right-7 z-10 flex size-6 -translate-y-1/2 items-center justify-center rounded-sm outline-none focus-visible:border focus-visible:ring-3",
|
|
1585
|
+
type: "button",
|
|
1586
|
+
children: /* @__PURE__ */ jsx13(X, {
|
|
1587
|
+
className: "size-3.5"
|
|
1588
|
+
})
|
|
1589
|
+
});
|
|
1558
1590
|
var selectedLabel = (value, placeholder) => {
|
|
1559
1591
|
if (Array.isArray(value)) {
|
|
1560
1592
|
return value.length > 0 ? value.map(({ label }) => label).join(", ") : placeholder;
|
|
@@ -1567,6 +1599,8 @@ var useComboboxVirtualizerRef = (providedRef) => {
|
|
|
1567
1599
|
};
|
|
1568
1600
|
var VirtualizedComboboxSingle = (props) => {
|
|
1569
1601
|
const virtualizerRef = useComboboxVirtualizerRef(props.virtualizerRef);
|
|
1602
|
+
const itemIndexRef = useRef2(new Map);
|
|
1603
|
+
const labels = virtualizedComboboxMessages(props.messages);
|
|
1570
1604
|
return /* @__PURE__ */ jsxs5(ComboboxPrimitive.Root, {
|
|
1571
1605
|
disabled: props.disabled,
|
|
1572
1606
|
inputValue: props.searchValue,
|
|
@@ -1576,7 +1610,7 @@ var VirtualizedComboboxSingle = (props) => {
|
|
|
1576
1610
|
onInputValueChange: (value) => props.onSearchValueChange?.(value),
|
|
1577
1611
|
onItemHighlighted: (_, { index, reason }) => {
|
|
1578
1612
|
if (reason === "keyboard" && index >= 0) {
|
|
1579
|
-
virtualizerRef.current?.scrollToIndex(index, { align: "auto" });
|
|
1613
|
+
virtualizerRef.current?.scrollToIndex(itemIndexRef.current.get(index) ?? index, { align: "auto" });
|
|
1580
1614
|
}
|
|
1581
1615
|
},
|
|
1582
1616
|
onOpenChange: (open) => props.onOpenChange?.(open),
|
|
@@ -1585,12 +1619,19 @@ var VirtualizedComboboxSingle = (props) => {
|
|
|
1585
1619
|
value: props.value,
|
|
1586
1620
|
virtualized: true,
|
|
1587
1621
|
children: [
|
|
1588
|
-
/* @__PURE__ */
|
|
1589
|
-
|
|
1622
|
+
/* @__PURE__ */ jsxs5("div", {
|
|
1623
|
+
className: "relative",
|
|
1624
|
+
children: [
|
|
1625
|
+
/* @__PURE__ */ jsx13(ComboboxPrimitive.Trigger, {
|
|
1626
|
+
render: props.trigger ?? defaultTrigger(props.ariaLabel, props.ariaInvalid, props.disabled, selectedLabel(props.value, props.placeholder), props.triggerId)
|
|
1627
|
+
}),
|
|
1628
|
+
props.trigger ? null : defaultClear(labels.clear)
|
|
1629
|
+
]
|
|
1590
1630
|
}),
|
|
1591
1631
|
/* @__PURE__ */ jsx13(VirtualizedComboboxContent, {
|
|
1592
1632
|
...props,
|
|
1593
1633
|
groupSelections: false,
|
|
1634
|
+
itemIndexRef,
|
|
1594
1635
|
selectedValues: new Set(props.value ? [props.value.value] : []),
|
|
1595
1636
|
virtualizerRef
|
|
1596
1637
|
})
|
|
@@ -1599,6 +1640,8 @@ var VirtualizedComboboxSingle = (props) => {
|
|
|
1599
1640
|
};
|
|
1600
1641
|
var VirtualizedComboboxMultiple = (props) => {
|
|
1601
1642
|
const virtualizerRef = useComboboxVirtualizerRef(props.virtualizerRef);
|
|
1643
|
+
const itemIndexRef = useRef2(new Map);
|
|
1644
|
+
const labels = virtualizedComboboxMessages(props.messages);
|
|
1602
1645
|
return /* @__PURE__ */ jsxs5(ComboboxPrimitive.Root, {
|
|
1603
1646
|
disabled: props.disabled,
|
|
1604
1647
|
inputValue: props.searchValue,
|
|
@@ -1609,7 +1652,7 @@ var VirtualizedComboboxMultiple = (props) => {
|
|
|
1609
1652
|
onInputValueChange: (value) => props.onSearchValueChange?.(value),
|
|
1610
1653
|
onItemHighlighted: (_, { index, reason }) => {
|
|
1611
1654
|
if (reason === "keyboard" && index >= 0) {
|
|
1612
|
-
virtualizerRef.current?.scrollToIndex(index, { align: "auto" });
|
|
1655
|
+
virtualizerRef.current?.scrollToIndex(itemIndexRef.current.get(index) ?? index, { align: "auto" });
|
|
1613
1656
|
}
|
|
1614
1657
|
},
|
|
1615
1658
|
onOpenChange: (open) => props.onOpenChange?.(open),
|
|
@@ -1618,12 +1661,19 @@ var VirtualizedComboboxMultiple = (props) => {
|
|
|
1618
1661
|
value: [...props.value],
|
|
1619
1662
|
virtualized: true,
|
|
1620
1663
|
children: [
|
|
1621
|
-
/* @__PURE__ */
|
|
1622
|
-
|
|
1664
|
+
/* @__PURE__ */ jsxs5("div", {
|
|
1665
|
+
className: "relative",
|
|
1666
|
+
children: [
|
|
1667
|
+
/* @__PURE__ */ jsx13(ComboboxPrimitive.Trigger, {
|
|
1668
|
+
render: props.trigger ?? defaultTrigger(props.ariaLabel, props.ariaInvalid, props.disabled, selectedLabel(props.value, props.placeholder), props.triggerId)
|
|
1669
|
+
}),
|
|
1670
|
+
props.trigger ? null : defaultClear(labels.clear)
|
|
1671
|
+
]
|
|
1623
1672
|
}),
|
|
1624
1673
|
/* @__PURE__ */ jsx13(VirtualizedComboboxContent, {
|
|
1625
1674
|
...props,
|
|
1626
1675
|
groupSelections: true,
|
|
1676
|
+
itemIndexRef,
|
|
1627
1677
|
selectedValues: new Set(props.value.map(({ value }) => value)),
|
|
1628
1678
|
virtualizerRef
|
|
1629
1679
|
})
|
|
@@ -67,9 +67,10 @@ function Button({
|
|
|
67
67
|
// ../../src/components/ui/virtualized-combobox.tsx
|
|
68
68
|
import { Combobox as ComboboxPrimitive } from "@base-ui/react";
|
|
69
69
|
import { useVirtualizer } from "@tanstack/react-virtual";
|
|
70
|
-
import { Check, ChevronsUpDown } from "lucide-react";
|
|
70
|
+
import { Check, ChevronsUpDown, X } from "lucide-react";
|
|
71
71
|
import {
|
|
72
72
|
useCallback,
|
|
73
|
+
useEffect,
|
|
73
74
|
useImperativeHandle,
|
|
74
75
|
useRef
|
|
75
76
|
} from "react";
|
|
@@ -153,6 +154,14 @@ var routeStrategies = [
|
|
|
153
154
|
{
|
|
154
155
|
match: "/api/:path(.*)?",
|
|
155
156
|
exclude: true
|
|
157
|
+
},
|
|
158
|
+
{
|
|
159
|
+
match: "/sitemap.xml",
|
|
160
|
+
exclude: true
|
|
161
|
+
},
|
|
162
|
+
{
|
|
163
|
+
match: "/llms.txt",
|
|
164
|
+
exclude: true
|
|
156
165
|
}
|
|
157
166
|
];
|
|
158
167
|
var urlPatterns = [
|
|
@@ -568,11 +577,13 @@ import { jsx as jsx5, jsxs } from "react/jsx-runtime";
|
|
|
568
577
|
"use client";
|
|
569
578
|
var messages = {
|
|
570
579
|
en: {
|
|
580
|
+
clear: "Clear selection",
|
|
571
581
|
search: "Search...",
|
|
572
582
|
selected: (count) => `${count} selected`,
|
|
573
583
|
selectMore: "Select more"
|
|
574
584
|
},
|
|
575
585
|
fr: {
|
|
586
|
+
clear: "Effacer la sélection",
|
|
576
587
|
search: "Rechercher...",
|
|
577
588
|
selected: (count) => `${count} sélectionnés`,
|
|
578
589
|
selectMore: "Sélectionner davantage"
|
|
@@ -586,6 +597,7 @@ var optionEquals = (item, selected) => item.value === selected.value;
|
|
|
586
597
|
var VirtualizedComboboxList = ({
|
|
587
598
|
emptyLabel,
|
|
588
599
|
groupSelections,
|
|
600
|
+
itemIndexRef,
|
|
589
601
|
messages: messageOverrides,
|
|
590
602
|
renderItem,
|
|
591
603
|
selectedValues,
|
|
@@ -593,22 +605,29 @@ var VirtualizedComboboxList = ({
|
|
|
593
605
|
}) => {
|
|
594
606
|
const filteredItems = ComboboxPrimitive.useFilteredItems();
|
|
595
607
|
const labels = virtualizedComboboxMessages(messageOverrides);
|
|
596
|
-
const
|
|
597
|
-
|
|
598
|
-
|
|
599
|
-
|
|
600
|
-
|
|
601
|
-
|
|
602
|
-
|
|
603
|
-
|
|
608
|
+
const itemEntries = filteredItems.map((item, index) => ({
|
|
609
|
+
kind: "item",
|
|
610
|
+
item,
|
|
611
|
+
index
|
|
612
|
+
}));
|
|
613
|
+
const selectedEntries = itemEntries.filter(({ item }) => selectedValues.has(item.value));
|
|
614
|
+
const availableEntries = itemEntries.filter(({ item }) => !selectedValues.has(item.value));
|
|
615
|
+
const entries = groupSelections ? [
|
|
616
|
+
...selectedEntries.length > 0 ? [
|
|
604
617
|
{
|
|
605
618
|
kind: "group",
|
|
606
|
-
key:
|
|
607
|
-
label:
|
|
619
|
+
key: "selected",
|
|
620
|
+
label: labels.selected(selectedValues.size)
|
|
608
621
|
},
|
|
609
|
-
|
|
610
|
-
] : [
|
|
611
|
-
|
|
622
|
+
...selectedEntries
|
|
623
|
+
] : [],
|
|
624
|
+
{
|
|
625
|
+
kind: "group",
|
|
626
|
+
key: "available",
|
|
627
|
+
label: labels.selectMore
|
|
628
|
+
},
|
|
629
|
+
...availableEntries
|
|
630
|
+
] : itemEntries;
|
|
612
631
|
const scrollRef = useRef(null);
|
|
613
632
|
const virtualizer = useVirtualizer({
|
|
614
633
|
count: entries.length,
|
|
@@ -620,6 +639,9 @@ var VirtualizedComboboxList = ({
|
|
|
620
639
|
estimateSize: () => 36,
|
|
621
640
|
overscan: 8
|
|
622
641
|
});
|
|
642
|
+
useEffect(() => {
|
|
643
|
+
itemIndexRef.current = new Map(entries.flatMap((entry, index) => entry.kind === "item" ? [[entry.index, index]] : []));
|
|
644
|
+
});
|
|
623
645
|
useImperativeHandle(virtualizerRef, () => virtualizer, [virtualizer]);
|
|
624
646
|
const handleScrollElementRef = useCallback((element) => {
|
|
625
647
|
scrollRef.current = element;
|
|
@@ -691,6 +713,7 @@ var VirtualizedComboboxContent = ({
|
|
|
691
713
|
contentClassName,
|
|
692
714
|
emptyLabel,
|
|
693
715
|
groupSelections,
|
|
716
|
+
itemIndexRef,
|
|
694
717
|
messages: messageOverrides,
|
|
695
718
|
renderItem,
|
|
696
719
|
selectedValues,
|
|
@@ -719,6 +742,7 @@ var VirtualizedComboboxContent = ({
|
|
|
719
742
|
/* @__PURE__ */ jsx5(VirtualizedComboboxList, {
|
|
720
743
|
emptyLabel,
|
|
721
744
|
groupSelections,
|
|
745
|
+
itemIndexRef,
|
|
722
746
|
messages: messageOverrides,
|
|
723
747
|
renderItem,
|
|
724
748
|
selectedValues,
|
|
@@ -739,7 +763,7 @@ var defaultTrigger = (ariaLabel, ariaInvalid, disabled, label, triggerId) => /*
|
|
|
739
763
|
variant: "outline",
|
|
740
764
|
children: [
|
|
741
765
|
/* @__PURE__ */ jsx5("span", {
|
|
742
|
-
className: "min-w-0 truncate text-left",
|
|
766
|
+
className: "min-w-0 flex-1 truncate pr-7 text-left",
|
|
743
767
|
children: label
|
|
744
768
|
}),
|
|
745
769
|
/* @__PURE__ */ jsx5(ChevronsUpDown, {
|
|
@@ -747,6 +771,14 @@ var defaultTrigger = (ariaLabel, ariaInvalid, disabled, label, triggerId) => /*
|
|
|
747
771
|
})
|
|
748
772
|
]
|
|
749
773
|
});
|
|
774
|
+
var defaultClear = (label) => /* @__PURE__ */ jsx5(ComboboxPrimitive.Clear, {
|
|
775
|
+
"aria-label": label,
|
|
776
|
+
className: "text-muted-foreground hover:bg-muted hover:text-foreground focus-visible:border-ring focus-visible:ring-ring/50 absolute top-1/2 right-7 z-10 flex size-6 -translate-y-1/2 items-center justify-center rounded-sm outline-none focus-visible:border focus-visible:ring-3",
|
|
777
|
+
type: "button",
|
|
778
|
+
children: /* @__PURE__ */ jsx5(X, {
|
|
779
|
+
className: "size-3.5"
|
|
780
|
+
})
|
|
781
|
+
});
|
|
750
782
|
var selectedLabel = (value, placeholder) => {
|
|
751
783
|
if (Array.isArray(value)) {
|
|
752
784
|
return value.length > 0 ? value.map(({ label }) => label).join(", ") : placeholder;
|
|
@@ -759,6 +791,8 @@ var useComboboxVirtualizerRef = (providedRef) => {
|
|
|
759
791
|
};
|
|
760
792
|
var VirtualizedComboboxSingle = (props) => {
|
|
761
793
|
const virtualizerRef = useComboboxVirtualizerRef(props.virtualizerRef);
|
|
794
|
+
const itemIndexRef = useRef(new Map);
|
|
795
|
+
const labels = virtualizedComboboxMessages(props.messages);
|
|
762
796
|
return /* @__PURE__ */ jsxs(ComboboxPrimitive.Root, {
|
|
763
797
|
disabled: props.disabled,
|
|
764
798
|
inputValue: props.searchValue,
|
|
@@ -768,7 +802,7 @@ var VirtualizedComboboxSingle = (props) => {
|
|
|
768
802
|
onInputValueChange: (value) => props.onSearchValueChange?.(value),
|
|
769
803
|
onItemHighlighted: (_, { index, reason }) => {
|
|
770
804
|
if (reason === "keyboard" && index >= 0) {
|
|
771
|
-
virtualizerRef.current?.scrollToIndex(index, { align: "auto" });
|
|
805
|
+
virtualizerRef.current?.scrollToIndex(itemIndexRef.current.get(index) ?? index, { align: "auto" });
|
|
772
806
|
}
|
|
773
807
|
},
|
|
774
808
|
onOpenChange: (open) => props.onOpenChange?.(open),
|
|
@@ -777,12 +811,19 @@ var VirtualizedComboboxSingle = (props) => {
|
|
|
777
811
|
value: props.value,
|
|
778
812
|
virtualized: true,
|
|
779
813
|
children: [
|
|
780
|
-
/* @__PURE__ */
|
|
781
|
-
|
|
814
|
+
/* @__PURE__ */ jsxs("div", {
|
|
815
|
+
className: "relative",
|
|
816
|
+
children: [
|
|
817
|
+
/* @__PURE__ */ jsx5(ComboboxPrimitive.Trigger, {
|
|
818
|
+
render: props.trigger ?? defaultTrigger(props.ariaLabel, props.ariaInvalid, props.disabled, selectedLabel(props.value, props.placeholder), props.triggerId)
|
|
819
|
+
}),
|
|
820
|
+
props.trigger ? null : defaultClear(labels.clear)
|
|
821
|
+
]
|
|
782
822
|
}),
|
|
783
823
|
/* @__PURE__ */ jsx5(VirtualizedComboboxContent, {
|
|
784
824
|
...props,
|
|
785
825
|
groupSelections: false,
|
|
826
|
+
itemIndexRef,
|
|
786
827
|
selectedValues: new Set(props.value ? [props.value.value] : []),
|
|
787
828
|
virtualizerRef
|
|
788
829
|
})
|
|
@@ -791,6 +832,8 @@ var VirtualizedComboboxSingle = (props) => {
|
|
|
791
832
|
};
|
|
792
833
|
var VirtualizedComboboxMultiple = (props) => {
|
|
793
834
|
const virtualizerRef = useComboboxVirtualizerRef(props.virtualizerRef);
|
|
835
|
+
const itemIndexRef = useRef(new Map);
|
|
836
|
+
const labels = virtualizedComboboxMessages(props.messages);
|
|
794
837
|
return /* @__PURE__ */ jsxs(ComboboxPrimitive.Root, {
|
|
795
838
|
disabled: props.disabled,
|
|
796
839
|
inputValue: props.searchValue,
|
|
@@ -801,7 +844,7 @@ var VirtualizedComboboxMultiple = (props) => {
|
|
|
801
844
|
onInputValueChange: (value) => props.onSearchValueChange?.(value),
|
|
802
845
|
onItemHighlighted: (_, { index, reason }) => {
|
|
803
846
|
if (reason === "keyboard" && index >= 0) {
|
|
804
|
-
virtualizerRef.current?.scrollToIndex(index, { align: "auto" });
|
|
847
|
+
virtualizerRef.current?.scrollToIndex(itemIndexRef.current.get(index) ?? index, { align: "auto" });
|
|
805
848
|
}
|
|
806
849
|
},
|
|
807
850
|
onOpenChange: (open) => props.onOpenChange?.(open),
|
|
@@ -810,12 +853,19 @@ var VirtualizedComboboxMultiple = (props) => {
|
|
|
810
853
|
value: [...props.value],
|
|
811
854
|
virtualized: true,
|
|
812
855
|
children: [
|
|
813
|
-
/* @__PURE__ */
|
|
814
|
-
|
|
856
|
+
/* @__PURE__ */ jsxs("div", {
|
|
857
|
+
className: "relative",
|
|
858
|
+
children: [
|
|
859
|
+
/* @__PURE__ */ jsx5(ComboboxPrimitive.Trigger, {
|
|
860
|
+
render: props.trigger ?? defaultTrigger(props.ariaLabel, props.ariaInvalid, props.disabled, selectedLabel(props.value, props.placeholder), props.triggerId)
|
|
861
|
+
}),
|
|
862
|
+
props.trigger ? null : defaultClear(labels.clear)
|
|
863
|
+
]
|
|
815
864
|
}),
|
|
816
865
|
/* @__PURE__ */ jsx5(VirtualizedComboboxContent, {
|
|
817
866
|
...props,
|
|
818
867
|
groupSelections: true,
|
|
868
|
+
itemIndexRef,
|
|
819
869
|
selectedValues: new Set(props.value.map(({ value }) => value)),
|
|
820
870
|
virtualizerRef
|
|
821
871
|
})
|
|
@@ -1,16 +1,19 @@
|
|
|
1
1
|
import { useVirtualizer } from "@tanstack/react-virtual";
|
|
2
2
|
import { type ReactElement, type ReactNode, type RefObject } from "react";
|
|
3
3
|
export interface VirtualizedComboboxMessages {
|
|
4
|
+
clear: string;
|
|
4
5
|
search: string;
|
|
5
6
|
selected: (count: number) => string;
|
|
6
7
|
selectMore: string;
|
|
7
8
|
}
|
|
8
9
|
export type VirtualizedComboboxMessageOverrides = Partial<VirtualizedComboboxMessages>;
|
|
9
10
|
export declare const virtualizedComboboxMessages: (overrides?: VirtualizedComboboxMessageOverrides) => {
|
|
11
|
+
clear: string;
|
|
10
12
|
search: string;
|
|
11
13
|
selected: (count: number) => string;
|
|
12
14
|
selectMore: string;
|
|
13
15
|
} | {
|
|
16
|
+
clear: string;
|
|
14
17
|
search: string;
|
|
15
18
|
selected: (count: number) => string;
|
|
16
19
|
selectMore: string;
|