opus-toolkit-components 1.9.3 → 1.9.4

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/lib/main.js CHANGED
@@ -1624,122 +1624,544 @@ function Dropdown(_ref) {
1624
1624
 
1625
1625
  /***/ },
1626
1626
 
1627
- /***/ 79963
1627
+ /***/ 80754
1628
1628
  (__unused_webpack_module, __webpack_exports__, __webpack_require__) {
1629
1629
 
1630
1630
  __webpack_require__.r(__webpack_exports__);
1631
1631
  /* harmony export */ __webpack_require__.d(__webpack_exports__, {
1632
- /* harmony export */ "default": () => (/* binding */ FilterPopover)
1632
+ /* harmony export */ "default": () => (/* binding */ SearchDropdown)
1633
1633
  /* harmony export */ });
1634
1634
  /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(9206);
1635
1635
  /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);
1636
- /* harmony import */ var clsx__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(34164);
1637
- /* harmony import */ var _heroicons_react_24_outline__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(58964);
1638
- /* harmony import */ var _Buttons_Button__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(74670);
1639
- /* harmony import */ var _Checkbox_Checkbox__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(56067);
1640
- /* harmony import */ var _Inputs_Input__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(38014);
1641
- /* harmony import */ var _IconButton_IconButton__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(43155);
1642
- /* harmony import */ var _Text_Text__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(21111);
1643
- /* harmony import */ var _utils_getDataCy__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(67339);
1644
- /* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(94178);
1645
- /* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_9___default = /*#__PURE__*/__webpack_require__.n(react_jsx_runtime__WEBPACK_IMPORTED_MODULE_9__);
1636
+ /* harmony import */ var _Text_Text__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(21111);
1637
+ /* harmony import */ var _headlessui_react__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(39788);
1638
+ /* harmony import */ var _heroicons_react_20_solid__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(29257);
1639
+ /* harmony import */ var _utils_getDataCy__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(67339);
1640
+ /* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(94178);
1641
+ /* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__);
1646
1642
 
1647
1643
 
1648
1644
 
1649
1645
 
1650
1646
 
1651
1647
 
1648
+ /**
1649
+ * @typedef {Object} SearchDropdownItem
1650
+ * @property {string} label
1651
+ * @property {string|number} value
1652
+ */
1652
1653
 
1654
+ /**
1655
+ * @typedef {(props: React.SVGProps<SVGSVGElement>) => JSX.Element} IconComponent
1656
+ */
1653
1657
 
1658
+ /**
1659
+ * @typedef {{ target: { name: string, value: string|number } }} SearchDropdownChangeEvent
1660
+ */
1654
1661
 
1662
+ /**
1663
+ * @typedef {Object} SearchDropdownProps
1664
+ * @property {SearchDropdownItem[]} [items]
1665
+ * @property {string} [label]
1666
+ * @property {boolean} [isValid]
1667
+ * @property {boolean} [required]
1668
+ * @property {string} [placeholder]
1669
+ * @property {string} [searchPlaceholder]
1670
+ * @property {string} [name]
1671
+ * @property {string} [className]
1672
+ * @property {string} [title]
1673
+ * @property {string|number} [tabIndex]
1674
+ * @property {(event: SearchDropdownChangeEvent) => void} [onChange]
1675
+ * @property {string|number} [value]
1676
+ * @property {IconComponent} [Icon]
1677
+ * @property {string} [errorMessage]
1678
+ * @property {boolean} [disabled]
1679
+ * @property {string} [noResultsText]
1680
+ * @property {string} [dataCy]
1681
+ */
1655
1682
 
1656
- /**
1657
- * @typedef {Object} FilterPopoverOption
1658
- * @property {string} label
1659
- * @property {string} value
1683
+ /**
1684
+ * @param {SearchDropdownProps & React.HTMLAttributes<HTMLDivElement>} props
1660
1685
  */
1661
1686
 
1662
- /**
1663
- * @typedef {Object} FilterPopoverProps
1664
- * @property {FilterPopoverOption[]} options
1665
- * @property {string[]} [selectedValues]
1666
- * @property {(values: string[]) => void} [onApply]
1667
- * @property {string} [placeholder]
1668
- * @property {React.ReactNode} [buttonLabel]
1669
- * @property {React.ReactNode} [icon]
1670
- * @property {React.ReactNode | ((context: FilterPopoverRenderContext) => React.ReactNode)} [children]
1671
- * @property {React.ReactNode | ((context: FilterPopoverRenderContext) => React.ReactNode)} [footer]
1672
- * @property {string} [panelClassName]
1673
- * @property {string} [bodyClassName]
1674
- * @property {string} [className]
1675
- * @property {string} [dataCy]
1676
- * @property {string} [name]
1687
+ function SearchDropdown(_ref) {
1688
+ let {
1689
+ items = [],
1690
+ label = "Test Label",
1691
+ isValid = true,
1692
+ required = false,
1693
+ placeholder = "Example Placeholder",
1694
+ searchPlaceholder = "Search",
1695
+ name,
1696
+ className = "",
1697
+ title = "",
1698
+ tabIndex = "",
1699
+ onChange,
1700
+ value,
1701
+ Icon,
1702
+ errorMessage = "This field is required",
1703
+ disabled = false,
1704
+ noResultsText = "No options found",
1705
+ dataCy,
1706
+ ...rest
1707
+ } = _ref;
1708
+ const [selectedItem, setSelectedItem] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(null);
1709
+ const [searchTerm, setSearchTerm] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)("");
1710
+ (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {
1711
+ const newSelectedItem = items.find(item => item.value === value) || null;
1712
+ setSelectedItem(newSelectedItem);
1713
+ }, [value, items]);
1714
+ const filteredItems = (0,react__WEBPACK_IMPORTED_MODULE_0__.useMemo)(() => {
1715
+ const normalizedSearchTerm = searchTerm.trim().toLowerCase();
1716
+ if (!normalizedSearchTerm) {
1717
+ return items;
1718
+ }
1719
+ return items.filter(item => item.label.toLowerCase().includes(normalizedSearchTerm));
1720
+ }, [items, searchTerm]);
1721
+ const inputClasses = `inline-flex w-full justify-between items-center rounded-md bg-[--color-input-bg] text-md font-normal border p-2 text-[--color-text-strong] ${isValid ? "border-[--color-stroke]" : "border-utilRed1000"} ${disabled ? "opacity-50 cursor-not-allowed" : ""}`;
1722
+ const handleSelect = (item, close) => {
1723
+ if (disabled) return;
1724
+ setSelectedItem(item);
1725
+ setSearchTerm("");
1726
+ onChange?.({
1727
+ target: {
1728
+ name,
1729
+ value: item.value
1730
+ }
1731
+ });
1732
+ close();
1733
+ };
1734
+ return /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsxs)("div", {
1735
+ className: `mb-4 flex flex-col ${className}`,
1736
+ ...rest,
1737
+ children: [/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsxs)(_Text_Text__WEBPACK_IMPORTED_MODULE_1__["default"], {
1738
+ as: "label",
1739
+ variant: "label",
1740
+ className: "mb-1",
1741
+ htmlFor: name,
1742
+ children: [label, required && /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsx)("span", {
1743
+ className: "ml-1 text-[--color-util-red]",
1744
+ children: "*"
1745
+ })]
1746
+ }), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsx)(_headlessui_react__WEBPACK_IMPORTED_MODULE_2__.Menu, {
1747
+ children: _ref2 => {
1748
+ let {
1749
+ open,
1750
+ close
1751
+ } = _ref2;
1752
+ return /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsxs)("div", {
1753
+ className: "relative",
1754
+ children: [/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsxs)(_headlessui_react__WEBPACK_IMPORTED_MODULE_2__.MenuButton, {
1755
+ id: name,
1756
+ name: name,
1757
+ title: title,
1758
+ "aria-invalid": !isValid,
1759
+ "aria-describedby": !isValid ? `${name}-error` : undefined,
1760
+ tabIndex: tabIndex,
1761
+ disabled: disabled,
1762
+ "data-cy": (0,_utils_getDataCy__WEBPACK_IMPORTED_MODULE_4__.getDataCy)({
1763
+ name,
1764
+ dataCy
1765
+ }),
1766
+ className: inputClasses,
1767
+ children: [/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsxs)("div", {
1768
+ className: "flex items-center gap-2",
1769
+ children: [Icon && /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsx)(Icon, {
1770
+ className: "h-5 w-5 text-[--color-text-weak]"
1771
+ }), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsx)("span", {
1772
+ children: selectedItem ? selectedItem.label : placeholder
1773
+ })]
1774
+ }), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsx)(_heroicons_react_20_solid__WEBPACK_IMPORTED_MODULE_3__.ChevronDownIcon, {
1775
+ "aria-hidden": "true",
1776
+ className: `ml-3 mr-1 h-5 w-5 bg-transparent text-[--color-text-strong] transition-transform duration-200 ${open ? "rotate-180" : "rotate-0"}`
1777
+ })]
1778
+ }), !disabled && /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsxs)(_headlessui_react__WEBPACK_IMPORTED_MODULE_2__.MenuItems, {
1779
+ className: "ring-opacity-1 absolute left-0 z-10 mt-2 w-[100%] origin-top-right rounded-md bg-[--color-primary-bg] shadow-lg ring-1 ring-[--color-stroke] focus:outline-none",
1780
+ children: [/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsx)("div", {
1781
+ className: "border-b border-[--color-stroke] p-2",
1782
+ children: /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsx)("input", {
1783
+ type: "text",
1784
+ value: searchTerm,
1785
+ onChange: event => setSearchTerm(event.target.value),
1786
+ placeholder: searchPlaceholder,
1787
+ className: "w-full rounded-md border border-[--color-stroke] bg-[--color-input-bg] px-3 py-2 text-sm text-[--color-text-strong] focus:outline-none",
1788
+ "data-cy": dataCy ? `${dataCy}-search` : undefined
1789
+ })
1790
+ }), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsxs)("div", {
1791
+ className: "max-h-48 overflow-y-auto py-1",
1792
+ children: [filteredItems.length === 0 && /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsx)("div", {
1793
+ className: "px-4 py-2 text-sm text-[--color-text-weak]",
1794
+ children: noResultsText
1795
+ }), filteredItems.map((item, index) => /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsx)(_headlessui_react__WEBPACK_IMPORTED_MODULE_2__.MenuItem, {
1796
+ children: _ref3 => {
1797
+ let {
1798
+ active
1799
+ } = _ref3;
1800
+ return /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsx)("button", {
1801
+ type: "button",
1802
+ onClick: () => handleSelect(item, close),
1803
+ className: `block w-full px-4 py-2 text-left text-sm text-[--color-text-strong] ${active ? "bg-[--color-input-bg]" : ""}`,
1804
+ children: item.label
1805
+ });
1806
+ }
1807
+ }, `${item.value}-${index}`))]
1808
+ })]
1809
+ })]
1810
+ });
1811
+ }
1812
+ }), !isValid && /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsx)(_Text_Text__WEBPACK_IMPORTED_MODULE_1__["default"], {
1813
+ as: "span",
1814
+ variant: "small",
1815
+ id: `${name}-error`,
1816
+ className: "mt-1 text-[--color-util-red]",
1817
+ children: errorMessage
1818
+ })]
1819
+ });
1820
+ }
1821
+
1822
+ /***/ },
1823
+
1824
+ /***/ 38333
1825
+ (__unused_webpack_module, __webpack_exports__, __webpack_require__) {
1826
+
1827
+ __webpack_require__.r(__webpack_exports__);
1828
+ /* harmony export */ __webpack_require__.d(__webpack_exports__, {
1829
+ /* harmony export */ "default": () => (/* binding */ SearchMultiSelectDropdown)
1830
+ /* harmony export */ });
1831
+ /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(9206);
1832
+ /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);
1833
+ /* harmony import */ var _Text_Text__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(21111);
1834
+ /* harmony import */ var _Buttons_Button__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(74670);
1835
+ /* harmony import */ var _headlessui_react__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(39788);
1836
+ /* harmony import */ var _heroicons_react_20_solid__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(29257);
1837
+ /* harmony import */ var _utils_getDataCy__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(67339);
1838
+ /* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(94178);
1839
+ /* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_6___default = /*#__PURE__*/__webpack_require__.n(react_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__);
1840
+
1841
+
1842
+
1843
+
1844
+
1845
+
1846
+
1847
+ /**
1848
+ * @typedef {Object} SearchMultiSelectDropdownItem
1849
+ * @property {string} label
1850
+ * @property {string|number} value
1677
1851
  */
1678
1852
 
1679
- /**
1680
- * @typedef {Object} FilterPopoverRenderContext
1681
- * @property {boolean} isOpen
1682
- * @property {string[]} selectedValues
1683
- * @property {(values: string[] | ((currentValues: string[]) => string[])) => void} setSelectedValues
1684
- * @property {(value: string) => void} toggleValue
1685
- * @property {string} searchTerm
1686
- * @property {(value: string) => void} setSearchTerm
1687
- * @property {FilterPopoverOption[]} filteredOptions
1688
- * @property {() => void} closePopover
1853
+ /**
1854
+ * @typedef {(props: React.SVGProps<SVGSVGElement>) => JSX.Element} IconComponent
1689
1855
  */
1690
1856
 
1691
- /**
1692
- * @param {FilterPopoverProps & React.HTMLAttributes<HTMLDivElement>} props
1857
+ /**
1858
+ * @typedef {{ target: { name: string, value: Array<string|number> } }} SearchMultiSelectDropdownChangeEvent
1693
1859
  */
1694
1860
 
1695
- function FilterPopover(_ref) {
1861
+ /**
1862
+ * @typedef {Object} SearchMultiSelectDropdownProps
1863
+ * @property {SearchMultiSelectDropdownItem[]} [items]
1864
+ * @property {string} [label]
1865
+ * @property {boolean} [isValid]
1866
+ * @property {boolean} [required]
1867
+ * @property {string} [placeholder]
1868
+ * @property {string} [searchPlaceholder]
1869
+ * @property {string} [name]
1870
+ * @property {string} [className]
1871
+ * @property {string} [title]
1872
+ * @property {string|number} [tabIndex]
1873
+ * @property {(event: SearchMultiSelectDropdownChangeEvent) => void} [onChange]
1874
+ * @property {(event: SearchMultiSelectDropdownChangeEvent) => void} [onApply]
1875
+ * @property {Array<string|number>} [value]
1876
+ * @property {IconComponent} [Icon]
1877
+ * @property {string} [errorMessage]
1878
+ * @property {boolean} [disabled]
1879
+ * @property {string} [noResultsText]
1880
+ * @property {string} [applyButtonText]
1881
+ * @property {React.ReactNode | ((context: {
1882
+ * close: () => void,
1883
+ * searchTerm: string,
1884
+ * filteredItems: SearchMultiSelectDropdownItem[],
1885
+ * selectedItems: SearchMultiSelectDropdownItem[],
1886
+ * selectedValues: Array<string|number>,
1887
+ * applySelection: () => void
1888
+ * }) => React.ReactNode)} [footer]
1889
+ * @property {string} [dataCy]
1890
+ */
1891
+
1892
+ /**
1893
+ * @param {SearchMultiSelectDropdownProps & React.HTMLAttributes<HTMLDivElement>} props
1894
+ */
1895
+
1896
+ function SearchMultiSelectDropdown(_ref) {
1696
1897
  let {
1697
- options = [],
1698
- selectedValues = [],
1898
+ items = [],
1899
+ label = "Test Label",
1900
+ isValid = true,
1901
+ required = false,
1902
+ placeholder = "Select options",
1903
+ searchPlaceholder = "Search",
1904
+ name,
1905
+ className = "",
1906
+ title = "",
1907
+ tabIndex = "",
1908
+ onChange,
1699
1909
  onApply,
1700
- placeholder = "Search",
1701
- buttonLabel = "Apply filters",
1910
+ value = [],
1911
+ Icon,
1912
+ errorMessage = "This field is required",
1913
+ disabled = false,
1914
+ noResultsText = "No options found",
1915
+ applyButtonText = "Apply",
1916
+ footer,
1917
+ dataCy,
1918
+ ...rest
1919
+ } = _ref;
1920
+ const [searchTerm, setSearchTerm] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)("");
1921
+ const [localSelectedValues, setLocalSelectedValues] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(value);
1922
+ (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {
1923
+ setLocalSelectedValues(value);
1924
+ }, [value]);
1925
+ const filteredItems = (0,react__WEBPACK_IMPORTED_MODULE_0__.useMemo)(() => {
1926
+ const normalizedSearchTerm = searchTerm.trim().toLowerCase();
1927
+ if (!normalizedSearchTerm) {
1928
+ return items;
1929
+ }
1930
+ return items.filter(item => item.label.toLowerCase().includes(normalizedSearchTerm));
1931
+ }, [items, searchTerm]);
1932
+ const selectedItems = (0,react__WEBPACK_IMPORTED_MODULE_0__.useMemo)(() => items.filter(item => localSelectedValues.includes(item.value)), [items, localSelectedValues]);
1933
+ const selectedLabel = selectedItems.length > 0 ? `${selectedItems.length} selected` : placeholder;
1934
+ const inputClasses = `inline-flex w-full justify-between items-center rounded-md bg-[--color-input-bg] text-md font-normal border p-2 text-[--color-text-strong] ${isValid ? "border-[--color-stroke]" : "border-utilRed1000"} ${disabled ? "opacity-50 cursor-not-allowed" : ""}`;
1935
+ const emitChange = (nextValues, callback) => {
1936
+ callback?.({
1937
+ target: {
1938
+ name,
1939
+ value: nextValues
1940
+ }
1941
+ });
1942
+ };
1943
+ const toggleValue = itemValue => {
1944
+ if (disabled) return;
1945
+ setLocalSelectedValues(currentValues => {
1946
+ const nextValues = currentValues.includes(itemValue) ? currentValues.filter(currentValue => currentValue !== itemValue) : [...currentValues, itemValue];
1947
+ emitChange(nextValues, onChange);
1948
+ return nextValues;
1949
+ });
1950
+ };
1951
+ const applySelection = close => {
1952
+ emitChange(localSelectedValues, onApply);
1953
+ close();
1954
+ };
1955
+ const resolveFooter = close => typeof footer === "function" ? footer({
1956
+ close,
1957
+ searchTerm,
1958
+ filteredItems,
1959
+ selectedItems,
1960
+ selectedValues: localSelectedValues,
1961
+ applySelection: () => applySelection(close)
1962
+ }) : footer;
1963
+ return /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.jsxs)("div", {
1964
+ className: `mb-4 flex flex-col ${className}`,
1965
+ ...rest,
1966
+ children: [/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.jsxs)(_Text_Text__WEBPACK_IMPORTED_MODULE_1__["default"], {
1967
+ as: "label",
1968
+ variant: "label",
1969
+ className: "mb-1",
1970
+ htmlFor: name,
1971
+ children: [label, required && /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.jsx)("span", {
1972
+ className: "ml-1 text-[--color-util-red]",
1973
+ children: "*"
1974
+ })]
1975
+ }), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.jsx)(_headlessui_react__WEBPACK_IMPORTED_MODULE_3__.Menu, {
1976
+ children: _ref2 => {
1977
+ let {
1978
+ open,
1979
+ close
1980
+ } = _ref2;
1981
+ return /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.jsxs)("div", {
1982
+ className: "relative",
1983
+ children: [/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.jsxs)(_headlessui_react__WEBPACK_IMPORTED_MODULE_3__.MenuButton, {
1984
+ id: name,
1985
+ name: name,
1986
+ title: title,
1987
+ "aria-invalid": !isValid,
1988
+ "aria-describedby": !isValid ? `${name}-error` : undefined,
1989
+ tabIndex: tabIndex,
1990
+ disabled: disabled,
1991
+ "data-cy": (0,_utils_getDataCy__WEBPACK_IMPORTED_MODULE_5__.getDataCy)({
1992
+ name,
1993
+ dataCy
1994
+ }),
1995
+ className: inputClasses,
1996
+ children: [/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.jsxs)("div", {
1997
+ className: "flex items-center gap-2",
1998
+ children: [Icon && /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.jsx)(Icon, {
1999
+ className: "h-5 w-5 text-[--color-text-weak]"
2000
+ }), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.jsx)("span", {
2001
+ children: selectedLabel
2002
+ })]
2003
+ }), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.jsx)(_heroicons_react_20_solid__WEBPACK_IMPORTED_MODULE_4__.ChevronDownIcon, {
2004
+ "aria-hidden": "true",
2005
+ className: `ml-3 mr-1 h-5 w-5 bg-transparent text-[--color-text-strong] transition-transform duration-200 ${open ? "rotate-180" : "rotate-0"}`
2006
+ })]
2007
+ }), !disabled && /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.jsxs)(_headlessui_react__WEBPACK_IMPORTED_MODULE_3__.MenuItems, {
2008
+ className: "ring-opacity-1 absolute left-0 z-10 mt-2 w-[100%] origin-top-right rounded-md bg-[--color-primary-bg] shadow-lg ring-1 ring-[--color-stroke] focus:outline-none",
2009
+ children: [/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.jsx)("div", {
2010
+ className: "border-b border-[--color-stroke] p-2",
2011
+ children: /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.jsx)("input", {
2012
+ type: "text",
2013
+ value: searchTerm,
2014
+ onChange: event => setSearchTerm(event.target.value),
2015
+ placeholder: searchPlaceholder,
2016
+ className: "w-full rounded-md border border-[--color-stroke] bg-[--color-input-bg] px-3 py-2 text-sm text-[--color-text-strong] focus:outline-none",
2017
+ "data-cy": dataCy ? `${dataCy}-search` : undefined
2018
+ })
2019
+ }), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.jsxs)("div", {
2020
+ className: "max-h-48 overflow-y-auto py-1",
2021
+ children: [filteredItems.length === 0 && /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.jsx)("div", {
2022
+ className: "px-4 py-2 text-sm text-[--color-text-weak]",
2023
+ children: noResultsText
2024
+ }), filteredItems.map((item, index) => {
2025
+ const isSelected = localSelectedValues.includes(item.value);
2026
+ return /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.jsxs)("button", {
2027
+ type: "button",
2028
+ onClick: () => toggleValue(item.value),
2029
+ className: "flex w-full items-center gap-3 px-4 py-2 text-left text-sm text-[--color-text-strong] hover:bg-[--color-input-bg]",
2030
+ children: [/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.jsx)("input", {
2031
+ type: "checkbox",
2032
+ checked: isSelected,
2033
+ readOnly: true,
2034
+ className: "pointer-events-none",
2035
+ style: {
2036
+ accentColor: "var(--color-primary-btn)"
2037
+ }
2038
+ }), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.jsx)("span", {
2039
+ children: item.label
2040
+ })]
2041
+ }, `${item.value}-${index}`);
2042
+ })]
2043
+ }), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.jsx)("div", {
2044
+ className: "border-t border-[--color-stroke] p-2",
2045
+ children: footer ? resolveFooter(close) : /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.jsx)("div", {
2046
+ className: "flex justify-end",
2047
+ children: /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.jsx)(_Buttons_Button__WEBPACK_IMPORTED_MODULE_2__["default"], {
2048
+ text: applyButtonText,
2049
+ onClick: () => applySelection(close)
2050
+ })
2051
+ })
2052
+ })]
2053
+ })]
2054
+ });
2055
+ }
2056
+ }), !isValid && /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.jsx)(_Text_Text__WEBPACK_IMPORTED_MODULE_1__["default"], {
2057
+ as: "span",
2058
+ variant: "small",
2059
+ id: `${name}-error`,
2060
+ className: "mt-1 text-[--color-util-red]",
2061
+ children: errorMessage
2062
+ })]
2063
+ });
2064
+ }
2065
+
2066
+ /***/ },
2067
+
2068
+ /***/ 79963
2069
+ (__unused_webpack_module, __webpack_exports__, __webpack_require__) {
2070
+
2071
+ __webpack_require__.r(__webpack_exports__);
2072
+ /* harmony export */ __webpack_require__.d(__webpack_exports__, {
2073
+ /* harmony export */ "default": () => (/* binding */ Popover)
2074
+ /* harmony export */ });
2075
+ /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(9206);
2076
+ /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);
2077
+ /* harmony import */ var clsx__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(34164);
2078
+ /* harmony import */ var _heroicons_react_24_outline__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(58964);
2079
+ /* harmony import */ var _IconButton_IconButton__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(43155);
2080
+ /* harmony import */ var _utils_getDataCy__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(67339);
2081
+ /* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(94178);
2082
+ /* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__);
2083
+
2084
+
2085
+
2086
+
2087
+
2088
+
2089
+ /**
2090
+ * @typedef {Object} PopoverRenderContext
2091
+ * @property {boolean} isOpen
2092
+ * @property {() => void} openPopover
2093
+ * @property {() => void} closePopover
2094
+ * @property {() => void} togglePopover
2095
+ */
2096
+
2097
+ /**
2098
+ * @typedef {Object} PopoverProps
2099
+ * @property {React.ReactNode} [icon]
2100
+ * @property {string} [triggerTitle]
2101
+ * @property {React.ReactNode} [header]
2102
+ * @property {boolean} [hideHeader]
2103
+ * @property {React.ReactNode | ((context: PopoverRenderContext) => React.ReactNode)} [body]
2104
+ * @property {React.ReactNode | ((context: PopoverRenderContext) => React.ReactNode)} [footer]
2105
+ * @property {boolean} [hideFooter]
2106
+ * @property {React.ReactNode | ((context: PopoverRenderContext) => React.ReactNode)} [children]
2107
+ * @property {string} [panelClassName]
2108
+ * @property {string} [headerClassName]
2109
+ * @property {string} [bodyClassName]
2110
+ * @property {string} [footerClassName]
2111
+ * @property {string} [className]
2112
+ * @property {string} [dataCy]
2113
+ * @property {string} [name]
2114
+ */
2115
+
2116
+ /**
2117
+ * @param {PopoverProps & React.HTMLAttributes<HTMLDivElement>} props
2118
+ */
2119
+
2120
+ function Popover(_ref) {
2121
+ let {
1702
2122
  icon,
1703
- children,
2123
+ triggerTitle = "Open popover",
2124
+ header,
2125
+ hideHeader = false,
2126
+ body,
1704
2127
  footer,
2128
+ hideFooter = false,
2129
+ children,
1705
2130
  panelClassName = "",
2131
+ headerClassName = "",
1706
2132
  bodyClassName = "",
2133
+ footerClassName = "",
1707
2134
  className = "",
1708
2135
  dataCy,
1709
- name = "filterPopover",
2136
+ name = "popover",
1710
2137
  ...rest
1711
2138
  } = _ref;
1712
2139
  const [isOpen, setIsOpen] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(false);
1713
- const [searchTerm, setSearchTerm] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)("");
1714
- const [localSelectedValues, setLocalSelectedValues] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(selectedValues);
1715
2140
  const containerRef = (0,react__WEBPACK_IMPORTED_MODULE_0__.useRef)(null);
1716
2141
  const triggerRef = (0,react__WEBPACK_IMPORTED_MODULE_0__.useRef)(null);
1717
- const searchInputRef = (0,react__WEBPACK_IMPORTED_MODULE_0__.useRef)(null);
1718
2142
  const panelRef = (0,react__WEBPACK_IMPORTED_MODULE_0__.useRef)(null);
1719
- const optionRefs = (0,react__WEBPACK_IMPORTED_MODULE_0__.useRef)([]);
1720
2143
  const generatedId = (0,react__WEBPACK_IMPORTED_MODULE_0__.useId)();
1721
2144
  const panelId = `${name}-${generatedId}-panel`;
1722
- const listboxId = `${name}-${generatedId}-listbox`;
1723
- const hasCustomContent = typeof children !== "undefined";
1724
- const panelClasses = (0,clsx__WEBPACK_IMPORTED_MODULE_1__["default"])("ring-opacity-1 absolute right-0 top-full z-20 mt-2 overflow-hidden rounded-md bg-[--color-primary-bg] shadow-lg ring-1 ring-[--color-stroke] focus:outline-none", hasCustomContent ? "w-[30rem]" : "w-72", panelClassName);
1725
- const triggerIcon = icon || /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_9__.jsx)(_heroicons_react_24_outline__WEBPACK_IMPORTED_MODULE_2__.FunnelIcon, {
2145
+ const triggerIcon = icon || /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsx)(_heroicons_react_24_outline__WEBPACK_IMPORTED_MODULE_2__.FunnelIcon, {
1726
2146
  className: "h-5 w-5"
1727
2147
  });
1728
- (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {
1729
- setLocalSelectedValues(selectedValues);
1730
- }, [selectedValues]);
2148
+ const openPopover = () => {
2149
+ setIsOpen(true);
2150
+ };
2151
+ const closePopover = () => {
2152
+ setIsOpen(false);
2153
+ triggerRef.current?.focus();
2154
+ };
2155
+ const togglePopover = () => {
2156
+ setIsOpen(currentValue => !currentValue);
2157
+ };
1731
2158
  (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {
1732
2159
  if (!isOpen) {
1733
- setSearchTerm("");
1734
2160
  return undefined;
1735
2161
  }
1736
- if (!hasCustomContent) {
1737
- searchInputRef.current?.focus();
1738
- } else {
1739
- const firstFocusableElement = panelRef.current?.querySelector('button, [href], input, select, textarea, [tabindex]:not([tabindex="-1"])');
1740
- if (firstFocusableElement && typeof firstFocusableElement.focus === "function") {
1741
- firstFocusableElement.focus();
1742
- }
2162
+ const firstFocusableElement = panelRef.current?.querySelector('button, [href], input, select, textarea, [tabindex]:not([tabindex="-1"])');
2163
+ if (firstFocusableElement && typeof firstFocusableElement.focus === "function") {
2164
+ firstFocusableElement.focus();
1743
2165
  }
1744
2166
  const handlePointerDown = event => {
1745
2167
  if (!containerRef.current?.contains(event.target)) {
@@ -1748,8 +2170,7 @@ function FilterPopover(_ref) {
1748
2170
  };
1749
2171
  const handleEscape = event => {
1750
2172
  if (event.key === "Escape") {
1751
- setIsOpen(false);
1752
- triggerRef.current?.focus();
2173
+ closePopover();
1753
2174
  }
1754
2175
  };
1755
2176
  document.addEventListener("mousedown", handlePointerDown);
@@ -1758,116 +2179,37 @@ function FilterPopover(_ref) {
1758
2179
  document.removeEventListener("mousedown", handlePointerDown);
1759
2180
  document.removeEventListener("keydown", handleEscape);
1760
2181
  };
1761
- }, [hasCustomContent, isOpen]);
1762
- const filteredOptions = (0,react__WEBPACK_IMPORTED_MODULE_0__.useMemo)(() => {
1763
- const normalizedSearch = searchTerm.trim().toLowerCase();
1764
- if (!normalizedSearch) {
1765
- return options;
1766
- }
1767
- return options.filter(option => option.label.toLowerCase().includes(normalizedSearch));
1768
- }, [options, searchTerm]);
1769
- const setOptionRef = (index, node) => {
1770
- optionRefs.current[index] = node;
1771
- };
1772
- const focusOption = index => {
1773
- optionRefs.current[index]?.focus();
1774
- };
1775
- const togglePopover = () => {
1776
- setIsOpen(previous => {
1777
- const nextIsOpen = !previous;
1778
- if (nextIsOpen) {
1779
- setLocalSelectedValues(selectedValues);
1780
- }
1781
- return nextIsOpen;
1782
- });
1783
- };
1784
- const toggleValue = value => {
1785
- setLocalSelectedValues(currentValues => currentValues.includes(value) ? currentValues.filter(currentValue => currentValue !== value) : [...currentValues, value]);
1786
- };
2182
+ }, [isOpen]);
1787
2183
  const handleTriggerKeyDown = event => {
1788
2184
  if (event.key === "ArrowDown") {
1789
2185
  event.preventDefault();
1790
- if (!isOpen) {
1791
- setLocalSelectedValues(selectedValues);
1792
- setIsOpen(true);
1793
- return;
1794
- }
1795
- if (filteredOptions.length > 0) {
1796
- focusOption(0);
1797
- }
1798
- }
1799
- };
1800
- const handleSearchKeyDown = event => {
1801
- if (event.key === "ArrowDown" && filteredOptions.length > 0) {
1802
- event.preventDefault();
1803
- focusOption(0);
1804
- }
1805
- };
1806
- const handleOptionKeyDown = (event, index) => {
1807
- if (event.key === "ArrowDown" && filteredOptions.length > 0) {
1808
- event.preventDefault();
1809
- focusOption((index + 1) % filteredOptions.length);
1810
- }
1811
- if (event.key === "ArrowUp") {
1812
- event.preventDefault();
1813
- if (index === 0) {
1814
- searchInputRef.current?.focus();
1815
- return;
1816
- }
1817
- focusOption(index - 1);
1818
- }
1819
- if (event.key === "Home") {
1820
- event.preventDefault();
1821
- focusOption(0);
1822
- }
1823
- if (event.key === "End") {
1824
- event.preventDefault();
1825
- focusOption(filteredOptions.length - 1);
1826
- }
1827
- if (event.key === "Escape") {
1828
- event.preventDefault();
1829
- setIsOpen(false);
1830
- triggerRef.current?.focus();
1831
- }
1832
- };
1833
- const handleApply = () => {
1834
- if (localSelectedValues.length === 0) {
1835
- return;
2186
+ openPopover();
1836
2187
  }
1837
- onApply?.(localSelectedValues);
1838
- setIsOpen(false);
1839
- triggerRef.current?.focus();
1840
- };
1841
- const closePopover = () => {
1842
- setIsOpen(false);
1843
- triggerRef.current?.focus();
1844
2188
  };
1845
2189
  const renderContext = {
1846
2190
  isOpen,
1847
- selectedValues: localSelectedValues,
1848
- setSelectedValues: setLocalSelectedValues,
1849
- toggleValue,
1850
- searchTerm,
1851
- setSearchTerm,
1852
- filteredOptions,
1853
- closePopover
2191
+ openPopover,
2192
+ closePopover,
2193
+ togglePopover
1854
2194
  };
1855
- const resolvedChildren = typeof children === "function" ? children(renderContext) : children;
2195
+ const resolvedBodySource = typeof body !== "undefined" ? body : children;
2196
+ const resolvedBody = typeof resolvedBodySource === "function" ? resolvedBodySource(renderContext) : resolvedBodySource;
1856
2197
  const resolvedFooter = typeof footer === "function" ? footer(renderContext) : footer;
1857
- return /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_9__.jsxs)("div", {
2198
+ return /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsxs)("div", {
1858
2199
  ref: containerRef,
1859
2200
  className: (0,clsx__WEBPACK_IMPORTED_MODULE_1__["default"])("relative inline-flex", className),
1860
- "data-cy": (0,_utils_getDataCy__WEBPACK_IMPORTED_MODULE_8__.getDataCy)({
2201
+ "data-cy": (0,_utils_getDataCy__WEBPACK_IMPORTED_MODULE_4__.getDataCy)({
1861
2202
  name,
1862
2203
  dataCy
1863
2204
  }),
1864
2205
  ...rest,
1865
- children: [/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_9__.jsx)(_IconButton_IconButton__WEBPACK_IMPORTED_MODULE_6__["default"], {
2206
+ children: [/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsx)(_IconButton_IconButton__WEBPACK_IMPORTED_MODULE_3__["default"], {
1866
2207
  ref: triggerRef,
1867
2208
  type: "button",
1868
2209
  rank: isOpen ? "primary" : "outline",
1869
- title: "Open filters",
1870
- "aria-label": "Open filters",
2210
+ className: "h-11 w-11 shrink-0 [&_svg]:block",
2211
+ title: triggerTitle,
2212
+ "aria-label": triggerTitle,
1871
2213
  "aria-haspopup": "dialog",
1872
2214
  "aria-expanded": isOpen,
1873
2215
  "aria-controls": panelId,
@@ -1877,80 +2219,23 @@ function FilterPopover(_ref) {
1877
2219
  iconName: "",
1878
2220
  onClick: togglePopover,
1879
2221
  onKeyDown: handleTriggerKeyDown
1880
- }), isOpen && /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_9__.jsx)("div", {
2222
+ }), isOpen && /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsxs)("div", {
1881
2223
  ref: panelRef,
1882
2224
  id: panelId,
1883
2225
  role: "dialog",
1884
2226
  "aria-modal": "false",
1885
- "aria-label": "Filter options",
1886
- className: panelClasses,
1887
- children: hasCustomContent ? /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_9__.jsxs)(react_jsx_runtime__WEBPACK_IMPORTED_MODULE_9__.Fragment, {
1888
- children: [/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_9__.jsx)("div", {
1889
- className: (0,clsx__WEBPACK_IMPORTED_MODULE_1__["default"])("p-4", bodyClassName),
1890
- children: resolvedChildren
1891
- }), resolvedFooter && /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_9__.jsx)("div", {
1892
- className: "border-t border-[--color-stroke] p-4",
1893
- children: resolvedFooter
1894
- })]
1895
- }) : /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_9__.jsxs)(react_jsx_runtime__WEBPACK_IMPORTED_MODULE_9__.Fragment, {
1896
- children: [/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_9__.jsx)("div", {
1897
- className: "border-b border-[--color-stroke] p-4 pb-0",
1898
- children: /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_9__.jsx)(_Inputs_Input__WEBPACK_IMPORTED_MODULE_5__["default"], {
1899
- ref: searchInputRef,
1900
- label: "Search",
1901
- hideLabel: true,
1902
- type: "search",
1903
- name: `${name}-search`,
1904
- placeholder: placeholder,
1905
- value: searchTerm,
1906
- onChange: event => setSearchTerm(event.target.value),
1907
- dataCy: dataCy ? `${dataCy}-search` : undefined,
1908
- className: "mb-0",
1909
- onKeyDown: handleSearchKeyDown
1910
- })
1911
- }), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_9__.jsx)("div", {
1912
- className: "border-b border-[--color-stroke] p-4 pt-4",
1913
- children: /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_9__.jsxs)("div", {
1914
- id: listboxId,
1915
- role: "listbox",
1916
- "aria-multiselectable": "true",
1917
- className: "max-h-60 space-y-1 overflow-y-auto pr-1",
1918
- children: [filteredOptions.length === 0 && /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_9__.jsx)(_Text_Text__WEBPACK_IMPORTED_MODULE_7__["default"], {
1919
- variant: "small",
1920
- className: "px-3 py-2 text-[--color-text-weak]",
1921
- children: "No options found."
1922
- }), filteredOptions.map((option, index) => {
1923
- const isSelected = localSelectedValues.includes(option.value);
1924
- return /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_9__.jsx)("button", {
1925
- ref: node => setOptionRef(index, node),
1926
- type: "button",
1927
- role: "option",
1928
- "aria-selected": isSelected,
1929
- className: "flex w-full items-center gap-3 rounded-md px-3 py-2 text-left focus:outline-none",
1930
- "data-cy": dataCy ? `${dataCy}-option-${option.value}` : undefined,
1931
- onClick: () => toggleValue(option.value),
1932
- onKeyDown: event => handleOptionKeyDown(event, index),
1933
- children: /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_9__.jsx)(_Checkbox_Checkbox__WEBPACK_IMPORTED_MODULE_4__["default"], {
1934
- label: option.label,
1935
- name: `${name}-${option.value}`,
1936
- value: isSelected,
1937
- className: "pointer-events-none mb-0",
1938
- dataCy: dataCy ? `${dataCy}-checkbox-${option.value}` : undefined
1939
- })
1940
- }, option.value);
1941
- })]
1942
- })
1943
- }), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_9__.jsx)("div", {
1944
- className: "p-4 pt-4",
1945
- children: /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_9__.jsx)(_Buttons_Button__WEBPACK_IMPORTED_MODULE_3__["default"], {
1946
- text: buttonLabel,
1947
- isFullWidth: true,
1948
- state: localSelectedValues.length > 0 ? "default" : "disabled",
1949
- onClick: handleApply,
1950
- dataCy: dataCy ? `${dataCy}-apply` : undefined
1951
- })
1952
- })]
1953
- })
2227
+ "aria-label": triggerTitle,
2228
+ className: (0,clsx__WEBPACK_IMPORTED_MODULE_1__["default"])("ring-opacity-1 absolute right-0 top-full z-20 mt-2 min-w-[30rem] overflow-hidden rounded-md bg-[--color-primary-bg] shadow-lg ring-1 ring-[--color-stroke] focus:outline-none", panelClassName),
2229
+ children: [!hideHeader && header && /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsx)("div", {
2230
+ className: (0,clsx__WEBPACK_IMPORTED_MODULE_1__["default"])("border-b border-[--color-stroke] p-4 text-[--color-text-strong]", headerClassName),
2231
+ children: header
2232
+ }), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsx)("div", {
2233
+ className: (0,clsx__WEBPACK_IMPORTED_MODULE_1__["default"])("p-4", bodyClassName),
2234
+ children: resolvedBody
2235
+ }), !hideFooter && resolvedFooter && /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsx)("div", {
2236
+ className: (0,clsx__WEBPACK_IMPORTED_MODULE_1__["default"])("border-t border-[--color-stroke] p-4", footerClassName),
2237
+ children: resolvedFooter
2238
+ })]
1954
2239
  })]
1955
2240
  });
1956
2241
  }
@@ -2217,6 +2502,9 @@ __webpack_require__.r(__webpack_exports__);
2217
2502
  *
2218
2503
  * @property {boolean} [required]
2219
2504
  *
2505
+ * @property {boolean} [hideLabel]
2506
+ * Hides the visible group label while keeping it available to assistive technology.
2507
+ *
2220
2508
  * @property {string} [dataCy]
2221
2509
  *
2222
2510
  * @property {boolean} [disabled]
@@ -2251,6 +2539,7 @@ const RadioButton = _ref => {
2251
2539
  isValid = true,
2252
2540
  errorMessage = `${label} is required`,
2253
2541
  required = false,
2542
+ hideLabel = false,
2254
2543
  dataCy,
2255
2544
  disabled = false,
2256
2545
  ...rest
@@ -2272,7 +2561,7 @@ const RadioButton = _ref => {
2272
2561
  children: [/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsxs)(_Text_Text__WEBPACK_IMPORTED_MODULE_1__["default"], {
2273
2562
  as: "label",
2274
2563
  variant: "label",
2275
- className: "mb-2 flex items-center text-[--color-text-strong]",
2564
+ className: hideLabel ? "sr-only" : "mb-2 flex items-center text-[--color-text-strong]",
2276
2565
  children: [label, required && /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(_Text_Text__WEBPACK_IMPORTED_MODULE_1__["default"], {
2277
2566
  as: "span",
2278
2567
  variant: "small",
@@ -65430,34 +65719,36 @@ var __webpack_exports__ = {};
65430
65719
  __webpack_require__.r(__webpack_exports__);
65431
65720
  /* harmony export */ __webpack_require__.d(__webpack_exports__, {
65432
65721
  /* harmony export */ Accordion: () => (/* reexport safe */ _components_Accordions_Accordion__WEBPACK_IMPORTED_MODULE_0__["default"]),
65433
- /* harmony export */ BarLayout: () => (/* reexport safe */ _components_BarLayout_BarLayout__WEBPACK_IMPORTED_MODULE_27__["default"]),
65722
+ /* harmony export */ BarLayout: () => (/* reexport safe */ _components_BarLayout_BarLayout__WEBPACK_IMPORTED_MODULE_29__["default"]),
65434
65723
  /* harmony export */ Button: () => (/* reexport safe */ _components_Buttons_Button__WEBPACK_IMPORTED_MODULE_1__["default"]),
65435
65724
  /* harmony export */ Callout: () => (/* reexport safe */ _components_Callout_Callout__WEBPACK_IMPORTED_MODULE_5__["default"]),
65436
65725
  /* harmony export */ Card: () => (/* reexport safe */ _components_Cards_Card__WEBPACK_IMPORTED_MODULE_2__["default"]),
65437
65726
  /* harmony export */ CardItem: () => (/* reexport safe */ _components_Cards_CardItem__WEBPACK_IMPORTED_MODULE_3__["default"]),
65438
65727
  /* harmony export */ Checkbox: () => (/* reexport safe */ _components_Forms_Checkbox_Checkbox__WEBPACK_IMPORTED_MODULE_10__["default"]),
65439
- /* harmony export */ CookieBanner: () => (/* reexport safe */ _components_Cookie_Cookie__WEBPACK_IMPORTED_MODULE_19__["default"]),
65728
+ /* harmony export */ CookieBanner: () => (/* reexport safe */ _components_Cookie_Cookie__WEBPACK_IMPORTED_MODULE_21__["default"]),
65440
65729
  /* harmony export */ DatePicker: () => (/* reexport safe */ _components_Forms_Datepickers_DatePicker__WEBPACK_IMPORTED_MODULE_7__["default"]),
65441
65730
  /* harmony export */ Dropdown: () => (/* reexport safe */ _components_Forms_Dropdowns_Dropdown__WEBPACK_IMPORTED_MODULE_13__["default"]),
65442
65731
  /* harmony export */ FileUploadCard: () => (/* reexport safe */ _components_Cards_FileUploadCard__WEBPACK_IMPORTED_MODULE_4__["default"]),
65443
- /* harmony export */ FilterPopover: () => (/* reexport safe */ _components_Forms_FilterPopover_FilterPopover__WEBPACK_IMPORTED_MODULE_11__["default"]),
65444
- /* harmony export */ Footer: () => (/* reexport safe */ _components_Footer_Footer__WEBPACK_IMPORTED_MODULE_24__["default"]),
65445
- /* harmony export */ FooterLogo: () => (/* reexport safe */ _components_FooterLogo_FooterLogo__WEBPACK_IMPORTED_MODULE_25__["default"]),
65446
- /* harmony export */ Header: () => (/* reexport safe */ _components_Header_Header__WEBPACK_IMPORTED_MODULE_22__["default"]),
65447
- /* harmony export */ Icon: () => (/* reexport safe */ _components_Icon_Icon__WEBPACK_IMPORTED_MODULE_23__["default"]),
65448
- /* harmony export */ IconButton: () => (/* reexport safe */ _components_IconButton_IconButton__WEBPACK_IMPORTED_MODULE_29__["default"]),
65732
+ /* harmony export */ Footer: () => (/* reexport safe */ _components_Footer_Footer__WEBPACK_IMPORTED_MODULE_26__["default"]),
65733
+ /* harmony export */ FooterLogo: () => (/* reexport safe */ _components_FooterLogo_FooterLogo__WEBPACK_IMPORTED_MODULE_27__["default"]),
65734
+ /* harmony export */ Header: () => (/* reexport safe */ _components_Header_Header__WEBPACK_IMPORTED_MODULE_24__["default"]),
65735
+ /* harmony export */ Icon: () => (/* reexport safe */ _components_Icon_Icon__WEBPACK_IMPORTED_MODULE_25__["default"]),
65736
+ /* harmony export */ IconButton: () => (/* reexport safe */ _components_IconButton_IconButton__WEBPACK_IMPORTED_MODULE_31__["default"]),
65449
65737
  /* harmony export */ Input: () => (/* reexport safe */ _components_Forms_Inputs_Input__WEBPACK_IMPORTED_MODULE_6__["default"]),
65450
- /* harmony export */ Loader: () => (/* reexport safe */ _components_Loader_Loader__WEBPACK_IMPORTED_MODULE_16__["default"]),
65451
- /* harmony export */ Modal: () => (/* reexport safe */ _components_Modals_Modal__WEBPACK_IMPORTED_MODULE_15__["default"]),
65452
- /* harmony export */ Navbar: () => (/* reexport safe */ _components_Navbar_Navbar__WEBPACK_IMPORTED_MODULE_14__["default"]),
65453
- /* harmony export */ PageTemplate: () => (/* reexport safe */ _components_PageTemplate_PageTemplate__WEBPACK_IMPORTED_MODULE_26__["default"]),
65454
- /* harmony export */ Pill: () => (/* reexport safe */ _components_Pills_Pill__WEBPACK_IMPORTED_MODULE_17__["default"]),
65455
- /* harmony export */ PillButton: () => (/* reexport safe */ _components_Pills_PillButton__WEBPACK_IMPORTED_MODULE_18__["default"]),
65456
- /* harmony export */ ProfileCard: () => (/* reexport safe */ _components_Profile_ProfileCard_ProfileCard__WEBPACK_IMPORTED_MODULE_28__["default"]),
65738
+ /* harmony export */ Loader: () => (/* reexport safe */ _components_Loader_Loader__WEBPACK_IMPORTED_MODULE_18__["default"]),
65739
+ /* harmony export */ Modal: () => (/* reexport safe */ _components_Modals_Modal__WEBPACK_IMPORTED_MODULE_17__["default"]),
65740
+ /* harmony export */ Navbar: () => (/* reexport safe */ _components_Navbar_Navbar__WEBPACK_IMPORTED_MODULE_16__["default"]),
65741
+ /* harmony export */ PageTemplate: () => (/* reexport safe */ _components_PageTemplate_PageTemplate__WEBPACK_IMPORTED_MODULE_28__["default"]),
65742
+ /* harmony export */ Pill: () => (/* reexport safe */ _components_Pills_Pill__WEBPACK_IMPORTED_MODULE_19__["default"]),
65743
+ /* harmony export */ PillButton: () => (/* reexport safe */ _components_Pills_PillButton__WEBPACK_IMPORTED_MODULE_20__["default"]),
65744
+ /* harmony export */ Popover: () => (/* reexport safe */ _components_Forms_FilterPopover_FilterPopover__WEBPACK_IMPORTED_MODULE_11__["default"]),
65745
+ /* harmony export */ ProfileCard: () => (/* reexport safe */ _components_Profile_ProfileCard_ProfileCard__WEBPACK_IMPORTED_MODULE_30__["default"]),
65457
65746
  /* harmony export */ RadioButton: () => (/* reexport safe */ _components_Forms_Radios_RadioButton__WEBPACK_IMPORTED_MODULE_9__["default"]),
65458
- /* harmony export */ Sidebar: () => (/* reexport safe */ _components_Sidebar_Sidebar__WEBPACK_IMPORTED_MODULE_21__["default"]),
65747
+ /* harmony export */ SearchDropdown: () => (/* reexport safe */ _components_Forms_Dropdowns_SearchDropdown__WEBPACK_IMPORTED_MODULE_14__["default"]),
65748
+ /* harmony export */ SearchMultiSelectDropdown: () => (/* reexport safe */ _components_Forms_Dropdowns_SearchMultiSelectDropdown__WEBPACK_IMPORTED_MODULE_15__["default"]),
65749
+ /* harmony export */ Sidebar: () => (/* reexport safe */ _components_Sidebar_Sidebar__WEBPACK_IMPORTED_MODULE_23__["default"]),
65459
65750
  /* harmony export */ Table: () => (/* reexport safe */ _components_Tables_Table__WEBPACK_IMPORTED_MODULE_12__["default"]),
65460
- /* harmony export */ Text: () => (/* reexport safe */ _components_Text_Text__WEBPACK_IMPORTED_MODULE_20__["default"]),
65751
+ /* harmony export */ Text: () => (/* reexport safe */ _components_Text_Text__WEBPACK_IMPORTED_MODULE_22__["default"]),
65461
65752
  /* harmony export */ ToggleSwitch: () => (/* reexport safe */ _components_Forms_ToggleSwitch_ToggleSwitch__WEBPACK_IMPORTED_MODULE_8__["default"])
65462
65753
  /* harmony export */ });
65463
65754
  /* harmony import */ var _components_Accordions_Accordion__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(43614);
@@ -65474,22 +65765,26 @@ __webpack_require__.r(__webpack_exports__);
65474
65765
  /* harmony import */ var _components_Forms_FilterPopover_FilterPopover__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(79963);
65475
65766
  /* harmony import */ var _components_Tables_Table__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(28966);
65476
65767
  /* harmony import */ var _components_Forms_Dropdowns_Dropdown__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(85894);
65477
- /* harmony import */ var _components_Navbar_Navbar__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(21097);
65478
- /* harmony import */ var _components_Modals_Modal__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(50548);
65479
- /* harmony import */ var _components_Loader_Loader__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(77695);
65480
- /* harmony import */ var _components_Pills_Pill__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(89714);
65481
- /* harmony import */ var _components_Pills_PillButton__WEBPACK_IMPORTED_MODULE_18__ = __webpack_require__(97670);
65482
- /* harmony import */ var _components_Cookie_Cookie__WEBPACK_IMPORTED_MODULE_19__ = __webpack_require__(44609);
65483
- /* harmony import */ var _components_Text_Text__WEBPACK_IMPORTED_MODULE_20__ = __webpack_require__(21111);
65484
- /* harmony import */ var _components_Sidebar_Sidebar__WEBPACK_IMPORTED_MODULE_21__ = __webpack_require__(11775);
65485
- /* harmony import */ var _components_Header_Header__WEBPACK_IMPORTED_MODULE_22__ = __webpack_require__(38195);
65486
- /* harmony import */ var _components_Icon_Icon__WEBPACK_IMPORTED_MODULE_23__ = __webpack_require__(57739);
65487
- /* harmony import */ var _components_Footer_Footer__WEBPACK_IMPORTED_MODULE_24__ = __webpack_require__(3047);
65488
- /* harmony import */ var _components_FooterLogo_FooterLogo__WEBPACK_IMPORTED_MODULE_25__ = __webpack_require__(49465);
65489
- /* harmony import */ var _components_PageTemplate_PageTemplate__WEBPACK_IMPORTED_MODULE_26__ = __webpack_require__(3179);
65490
- /* harmony import */ var _components_BarLayout_BarLayout__WEBPACK_IMPORTED_MODULE_27__ = __webpack_require__(7779);
65491
- /* harmony import */ var _components_Profile_ProfileCard_ProfileCard__WEBPACK_IMPORTED_MODULE_28__ = __webpack_require__(64977);
65492
- /* harmony import */ var _components_IconButton_IconButton__WEBPACK_IMPORTED_MODULE_29__ = __webpack_require__(43155);
65768
+ /* harmony import */ var _components_Forms_Dropdowns_SearchDropdown__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(80754);
65769
+ /* harmony import */ var _components_Forms_Dropdowns_SearchMultiSelectDropdown__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(38333);
65770
+ /* harmony import */ var _components_Navbar_Navbar__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(21097);
65771
+ /* harmony import */ var _components_Modals_Modal__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(50548);
65772
+ /* harmony import */ var _components_Loader_Loader__WEBPACK_IMPORTED_MODULE_18__ = __webpack_require__(77695);
65773
+ /* harmony import */ var _components_Pills_Pill__WEBPACK_IMPORTED_MODULE_19__ = __webpack_require__(89714);
65774
+ /* harmony import */ var _components_Pills_PillButton__WEBPACK_IMPORTED_MODULE_20__ = __webpack_require__(97670);
65775
+ /* harmony import */ var _components_Cookie_Cookie__WEBPACK_IMPORTED_MODULE_21__ = __webpack_require__(44609);
65776
+ /* harmony import */ var _components_Text_Text__WEBPACK_IMPORTED_MODULE_22__ = __webpack_require__(21111);
65777
+ /* harmony import */ var _components_Sidebar_Sidebar__WEBPACK_IMPORTED_MODULE_23__ = __webpack_require__(11775);
65778
+ /* harmony import */ var _components_Header_Header__WEBPACK_IMPORTED_MODULE_24__ = __webpack_require__(38195);
65779
+ /* harmony import */ var _components_Icon_Icon__WEBPACK_IMPORTED_MODULE_25__ = __webpack_require__(57739);
65780
+ /* harmony import */ var _components_Footer_Footer__WEBPACK_IMPORTED_MODULE_26__ = __webpack_require__(3047);
65781
+ /* harmony import */ var _components_FooterLogo_FooterLogo__WEBPACK_IMPORTED_MODULE_27__ = __webpack_require__(49465);
65782
+ /* harmony import */ var _components_PageTemplate_PageTemplate__WEBPACK_IMPORTED_MODULE_28__ = __webpack_require__(3179);
65783
+ /* harmony import */ var _components_BarLayout_BarLayout__WEBPACK_IMPORTED_MODULE_29__ = __webpack_require__(7779);
65784
+ /* harmony import */ var _components_Profile_ProfileCard_ProfileCard__WEBPACK_IMPORTED_MODULE_30__ = __webpack_require__(64977);
65785
+ /* harmony import */ var _components_IconButton_IconButton__WEBPACK_IMPORTED_MODULE_31__ = __webpack_require__(43155);
65786
+
65787
+
65493
65788
 
65494
65789
 
65495
65790