@j2-health/design-system 0.2.0 → 0.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +38 -9
- package/dist/index.cjs +102 -3614
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +54 -3551
- package/dist/index.js.map +1 -1
- package/dist/src/AppConfigProvider.cjs +13 -0
- package/dist/src/AppConfigProvider.cjs.map +1 -0
- package/dist/src/AppConfigProvider.js +13 -0
- package/dist/src/AppConfigProvider.js.map +1 -0
- package/dist/src/appTheme.cjs +268 -0
- package/dist/src/appTheme.cjs.map +1 -0
- package/dist/src/appTheme.js +268 -0
- package/dist/src/appTheme.js.map +1 -0
- package/dist/src/components/alert/Alert.cjs +95 -0
- package/dist/src/components/alert/Alert.cjs.map +1 -0
- package/dist/src/components/alert/Alert.js +78 -0
- package/dist/src/components/alert/Alert.js.map +1 -0
- package/dist/src/components/alert/Alert.module.css.cjs +9 -0
- package/dist/src/components/alert/Alert.module.css.cjs.map +1 -0
- package/dist/src/components/alert/Alert.module.css.js +9 -0
- package/dist/src/components/alert/Alert.module.css.js.map +1 -0
- package/dist/src/components/barchart/BarChart.cjs +155 -0
- package/dist/src/components/barchart/BarChart.cjs.map +1 -0
- package/dist/src/components/barchart/BarChart.js +155 -0
- package/dist/src/components/barchart/BarChart.js.map +1 -0
- package/dist/src/components/barchart/chart.module.css.cjs +9 -0
- package/dist/src/components/barchart/chart.module.css.cjs.map +1 -0
- package/dist/src/components/barchart/chart.module.css.js +9 -0
- package/dist/src/components/barchart/chart.module.css.js.map +1 -0
- package/dist/src/components/breadcrumb/Breadcrumb.cjs +38 -0
- package/dist/src/components/breadcrumb/Breadcrumb.cjs.map +1 -0
- package/dist/src/components/breadcrumb/Breadcrumb.js +21 -0
- package/dist/src/components/breadcrumb/Breadcrumb.js.map +1 -0
- package/dist/src/components/bulkActionBar/BulkActionBar.cjs +81 -0
- package/dist/src/components/bulkActionBar/BulkActionBar.cjs.map +1 -0
- package/dist/src/components/bulkActionBar/BulkActionBar.js +81 -0
- package/dist/src/components/bulkActionBar/BulkActionBar.js.map +1 -0
- package/dist/src/components/button/Button.cjs +21 -0
- package/dist/src/components/button/Button.cjs.map +1 -0
- package/dist/src/components/button/Button.js +21 -0
- package/dist/src/components/button/Button.js.map +1 -0
- package/dist/src/components/card/Card.cjs +36 -0
- package/dist/src/components/card/Card.cjs.map +1 -0
- package/dist/src/components/card/Card.js +36 -0
- package/dist/src/components/card/Card.js.map +1 -0
- package/dist/src/components/checkbox/Checkbox.cjs +10 -0
- package/dist/src/components/checkbox/Checkbox.cjs.map +1 -0
- package/dist/src/components/checkbox/Checkbox.js +10 -0
- package/dist/src/components/checkbox/Checkbox.js.map +1 -0
- package/dist/src/components/checkboxTree/CheckboxTree.cjs +140 -0
- package/dist/src/components/checkboxTree/CheckboxTree.cjs.map +1 -0
- package/dist/src/components/checkboxTree/CheckboxTree.js +140 -0
- package/dist/src/components/checkboxTree/CheckboxTree.js.map +1 -0
- package/dist/src/components/checkboxTree/TreeNode.cjs +92 -0
- package/dist/src/components/checkboxTree/TreeNode.cjs.map +1 -0
- package/dist/src/components/checkboxTree/TreeNode.js +92 -0
- package/dist/src/components/checkboxTree/TreeNode.js.map +1 -0
- package/dist/src/components/checkboxTree/utils.cjs +59 -0
- package/dist/src/components/checkboxTree/utils.cjs.map +1 -0
- package/dist/src/components/checkboxTree/utils.js +59 -0
- package/dist/src/components/checkboxTree/utils.js.map +1 -0
- package/dist/src/components/collapse/Collapse.cjs +81 -0
- package/dist/src/components/collapse/Collapse.cjs.map +1 -0
- package/dist/src/components/collapse/Collapse.js +64 -0
- package/dist/src/components/collapse/Collapse.js.map +1 -0
- package/dist/src/components/collapse/Collapse.module.css.cjs +13 -0
- package/dist/src/components/collapse/Collapse.module.css.cjs.map +1 -0
- package/dist/src/components/collapse/Collapse.module.css.js +13 -0
- package/dist/src/components/collapse/Collapse.module.css.js.map +1 -0
- package/dist/src/components/drawer/Drawer.cjs +39 -0
- package/dist/src/components/drawer/Drawer.cjs.map +1 -0
- package/dist/src/components/drawer/Drawer.js +39 -0
- package/dist/src/components/drawer/Drawer.js.map +1 -0
- package/dist/src/components/dropdown/Dropdown.cjs +58 -0
- package/dist/src/components/dropdown/Dropdown.cjs.map +1 -0
- package/dist/src/components/dropdown/Dropdown.js +58 -0
- package/dist/src/components/dropdown/Dropdown.js.map +1 -0
- package/dist/src/components/filterform/FilterGroup.cjs +64 -0
- package/dist/src/components/filterform/FilterGroup.cjs.map +1 -0
- package/dist/src/components/filterform/FilterGroup.js +64 -0
- package/dist/src/components/filterform/FilterGroup.js.map +1 -0
- package/dist/src/components/filterform/FilterInput.cjs +238 -0
- package/dist/src/components/filterform/FilterInput.cjs.map +1 -0
- package/dist/src/components/filterform/FilterInput.d.ts +1 -0
- package/dist/src/components/filterform/FilterInput.js +221 -0
- package/dist/src/components/filterform/FilterInput.js.map +1 -0
- package/dist/src/components/filterform/FiltersForm.cjs +168 -0
- package/dist/src/components/filterform/FiltersForm.cjs.map +1 -0
- package/dist/src/components/filterform/FiltersForm.js +168 -0
- package/dist/src/components/filterform/FiltersForm.js.map +1 -0
- package/dist/src/components/filterform/FiltersForm.module.css.cjs +21 -0
- package/dist/src/components/filterform/FiltersForm.module.css.cjs.map +1 -0
- package/dist/src/components/filterform/FiltersForm.module.css.js +21 -0
- package/dist/src/components/filterform/FiltersForm.module.css.js.map +1 -0
- package/dist/src/components/filterform/filterHelpers.cjs +71 -0
- package/dist/src/components/filterform/filterHelpers.cjs.map +1 -0
- package/dist/src/components/filterform/filterHelpers.d.ts +18 -4
- package/dist/src/components/filterform/filterHelpers.js +71 -0
- package/dist/src/components/filterform/filterHelpers.js.map +1 -0
- package/dist/src/components/filterform/index.d.ts +3 -1
- package/dist/src/components/filterform/types.d.ts +4 -2
- package/dist/src/components/filterform/useFilterField.cjs +245 -0
- package/dist/src/components/filterform/useFilterField.cjs.map +1 -0
- package/dist/src/components/filterform/useFilterField.d.ts +17 -1
- package/dist/src/components/filterform/useFilterField.js +228 -0
- package/dist/src/components/filterform/useFilterField.js.map +1 -0
- package/dist/src/components/filterform/useFiltersForm.cjs +160 -0
- package/dist/src/components/filterform/useFiltersForm.cjs.map +1 -0
- package/dist/src/components/filterform/useFiltersForm.js +160 -0
- package/dist/src/components/filterform/useFiltersForm.js.map +1 -0
- package/dist/src/components/form/Form.cjs +11 -0
- package/dist/src/components/form/Form.cjs.map +1 -0
- package/dist/src/components/form/Form.js +11 -0
- package/dist/src/components/form/Form.js.map +1 -0
- package/dist/src/components/icons/index.cjs +27 -0
- package/dist/src/components/icons/index.cjs.map +1 -0
- package/dist/src/components/icons/index.js +3 -0
- package/dist/src/components/icons/index.js.map +1 -0
- package/dist/src/components/input/AntdInput.cjs +13 -0
- package/dist/src/components/input/AntdInput.cjs.map +1 -0
- package/dist/src/components/input/AntdInput.js +13 -0
- package/dist/src/components/input/AntdInput.js.map +1 -0
- package/dist/src/components/input/AntdSearchInput.cjs +13 -0
- package/dist/src/components/input/AntdSearchInput.cjs.map +1 -0
- package/dist/src/components/input/AntdSearchInput.js +13 -0
- package/dist/src/components/input/AntdSearchInput.js.map +1 -0
- package/dist/src/components/input/Input.cjs +9 -0
- package/dist/src/components/input/Input.cjs.map +1 -0
- package/dist/src/components/input/Input.js +9 -0
- package/dist/src/components/input/Input.js.map +1 -0
- package/dist/src/components/inputnumber/InputNumber.cjs +32 -0
- package/dist/src/components/inputnumber/InputNumber.cjs.map +1 -0
- package/dist/src/components/inputnumber/InputNumber.js +32 -0
- package/dist/src/components/inputnumber/InputNumber.js.map +1 -0
- package/dist/src/components/inputnumber/InputNumber.module.css.cjs +9 -0
- package/dist/src/components/inputnumber/InputNumber.module.css.cjs.map +1 -0
- package/dist/src/components/inputnumber/InputNumber.module.css.js +9 -0
- package/dist/src/components/inputnumber/InputNumber.module.css.js.map +1 -0
- package/dist/src/components/legacyNavMenu/LegacyNavMenu.cjs +52 -0
- package/dist/src/components/legacyNavMenu/LegacyNavMenu.cjs.map +1 -0
- package/dist/src/components/legacyNavMenu/LegacyNavMenu.js +52 -0
- package/dist/src/components/legacyNavMenu/LegacyNavMenu.js.map +1 -0
- package/dist/src/components/legacyNavMenu/LegacyNavMenu.module.css.cjs +48 -0
- package/dist/src/components/legacyNavMenu/LegacyNavMenu.module.css.cjs.map +1 -0
- package/dist/src/components/legacyNavMenu/LegacyNavMenu.module.css.js +48 -0
- package/dist/src/components/legacyNavMenu/LegacyNavMenu.module.css.js.map +1 -0
- package/dist/src/components/legacyNavMenu/UserProfile.cjs +78 -0
- package/dist/src/components/legacyNavMenu/UserProfile.cjs.map +1 -0
- package/dist/src/components/legacyNavMenu/UserProfile.js +78 -0
- package/dist/src/components/legacyNavMenu/UserProfile.js.map +1 -0
- package/dist/src/components/legacyNavMenu/UserProfile.module.css.cjs +42 -0
- package/dist/src/components/legacyNavMenu/UserProfile.module.css.cjs.map +1 -0
- package/dist/src/components/legacyNavMenu/UserProfile.module.css.js +42 -0
- package/dist/src/components/legacyNavMenu/UserProfile.module.css.js.map +1 -0
- package/dist/src/components/listpopover/ListPopover.cjs +125 -0
- package/dist/src/components/listpopover/ListPopover.cjs.map +1 -0
- package/dist/src/components/listpopover/ListPopover.js +125 -0
- package/dist/src/components/listpopover/ListPopover.js.map +1 -0
- package/dist/src/components/listpopover/ListPopover.module.css.cjs +9 -0
- package/dist/src/components/listpopover/ListPopover.module.css.cjs.map +1 -0
- package/dist/src/components/listpopover/ListPopover.module.css.js +9 -0
- package/dist/src/components/listpopover/ListPopover.module.css.js.map +1 -0
- package/dist/src/components/menu/Menu.cjs +18 -0
- package/dist/src/components/menu/Menu.cjs.map +1 -0
- package/dist/src/components/menu/Menu.js +18 -0
- package/dist/src/components/menu/Menu.js.map +1 -0
- package/dist/src/components/menu/Menu.module.css.cjs +12 -0
- package/dist/src/components/menu/Menu.module.css.cjs.map +1 -0
- package/dist/src/components/menu/Menu.module.css.js +12 -0
- package/dist/src/components/menu/Menu.module.css.js.map +1 -0
- package/dist/src/components/message/Message.module.css.cjs +9 -0
- package/dist/src/components/message/Message.module.css.cjs.map +1 -0
- package/dist/src/components/message/Message.module.css.js +9 -0
- package/dist/src/components/message/Message.module.css.js.map +1 -0
- package/dist/src/components/message/useMessage.cjs +55 -0
- package/dist/src/components/message/useMessage.cjs.map +1 -0
- package/dist/src/components/message/useMessage.js +55 -0
- package/dist/src/components/message/useMessage.js.map +1 -0
- package/dist/src/components/modal/Modal.cjs +32 -0
- package/dist/src/components/modal/Modal.cjs.map +1 -0
- package/dist/src/components/modal/Modal.js +32 -0
- package/dist/src/components/modal/Modal.js.map +1 -0
- package/dist/src/components/navMenu/NavMenu.cjs +132 -0
- package/dist/src/components/navMenu/NavMenu.cjs.map +1 -0
- package/dist/src/components/navMenu/NavMenu.js +115 -0
- package/dist/src/components/navMenu/NavMenu.js.map +1 -0
- package/dist/src/components/navMenu/NavMenu.module.css.cjs +18 -0
- package/dist/src/components/navMenu/NavMenu.module.css.cjs.map +1 -0
- package/dist/src/components/navMenu/NavMenu.module.css.js +18 -0
- package/dist/src/components/navMenu/NavMenu.module.css.js.map +1 -0
- package/dist/src/components/notification/Notification.module.css.cjs +9 -0
- package/dist/src/components/notification/Notification.module.css.cjs.map +1 -0
- package/dist/src/components/notification/Notification.module.css.js +9 -0
- package/dist/src/components/notification/Notification.module.css.js.map +1 -0
- package/dist/src/components/notification/useNotification.cjs +52 -0
- package/dist/src/components/notification/useNotification.cjs.map +1 -0
- package/dist/src/components/notification/useNotification.js +52 -0
- package/dist/src/components/notification/useNotification.js.map +1 -0
- package/dist/src/components/notificationModal/NotifcationModal.module.css.cjs +21 -0
- package/dist/src/components/notificationModal/NotifcationModal.module.css.cjs.map +1 -0
- package/dist/src/components/notificationModal/NotifcationModal.module.css.js +21 -0
- package/dist/src/components/notificationModal/NotifcationModal.module.css.js.map +1 -0
- package/dist/src/components/notificationModal/NotificationModal.cjs +57 -0
- package/dist/src/components/notificationModal/NotificationModal.cjs.map +1 -0
- package/dist/src/components/notificationModal/NotificationModal.js +57 -0
- package/dist/src/components/notificationModal/NotificationModal.js.map +1 -0
- package/dist/src/components/pagination/Pagination.cjs +65 -0
- package/dist/src/components/pagination/Pagination.cjs.map +1 -0
- package/dist/src/components/pagination/Pagination.js +65 -0
- package/dist/src/components/pagination/Pagination.js.map +1 -0
- package/dist/src/components/pagination/Pagination.module.css.cjs +6 -0
- package/dist/src/components/pagination/Pagination.module.css.cjs.map +1 -0
- package/dist/src/components/pagination/Pagination.module.css.js +7 -0
- package/dist/src/components/pagination/Pagination.module.css.js.map +1 -0
- package/dist/src/components/popover/Popover.cjs +41 -0
- package/dist/src/components/popover/Popover.cjs.map +1 -0
- package/dist/src/components/popover/Popover.js +41 -0
- package/dist/src/components/popover/Popover.js.map +1 -0
- package/dist/src/components/popover/Popover.module.css.cjs +33 -0
- package/dist/src/components/popover/Popover.module.css.cjs.map +1 -0
- package/dist/src/components/popover/Popover.module.css.js +33 -0
- package/dist/src/components/popover/Popover.module.css.js.map +1 -0
- package/dist/src/components/progress/Progress.cjs +9 -0
- package/dist/src/components/progress/Progress.cjs.map +1 -0
- package/dist/src/components/progress/Progress.js +9 -0
- package/dist/src/components/progress/Progress.js.map +1 -0
- package/dist/src/components/radio/Radio.cjs +24 -0
- package/dist/src/components/radio/Radio.cjs.map +1 -0
- package/dist/src/components/radio/Radio.js +24 -0
- package/dist/src/components/radio/Radio.js.map +1 -0
- package/dist/src/components/rate/Rate.cjs +22 -0
- package/dist/src/components/rate/Rate.cjs.map +1 -0
- package/dist/src/components/rate/Rate.js +22 -0
- package/dist/src/components/rate/Rate.js.map +1 -0
- package/dist/src/components/select/AntdSelect.cjs +76 -0
- package/dist/src/components/select/AntdSelect.cjs.map +1 -0
- package/dist/src/components/select/AntdSelect.js +60 -0
- package/dist/src/components/select/AntdSelect.js.map +1 -0
- package/dist/src/components/select/Select.cjs +107 -0
- package/dist/src/components/select/Select.cjs.map +1 -0
- package/dist/src/components/select/Select.js +107 -0
- package/dist/src/components/select/Select.js.map +1 -0
- package/dist/src/components/select/SummarizedSelect.cjs +455 -0
- package/dist/src/components/select/SummarizedSelect.cjs.map +1 -0
- package/dist/src/components/select/SummarizedSelect.js +455 -0
- package/dist/src/components/select/SummarizedSelect.js.map +1 -0
- package/dist/src/components/select/SummarizedSelect.module.css.cjs +30 -0
- package/dist/src/components/select/SummarizedSelect.module.css.cjs.map +1 -0
- package/dist/src/components/select/SummarizedSelect.module.css.js +30 -0
- package/dist/src/components/select/SummarizedSelect.module.css.js.map +1 -0
- package/dist/src/components/skeleton/Skeleton.cjs +14 -0
- package/dist/src/components/skeleton/Skeleton.cjs.map +1 -0
- package/dist/src/components/skeleton/Skeleton.js +14 -0
- package/dist/src/components/skeleton/Skeleton.js.map +1 -0
- package/dist/src/components/spinner/Spinner.cjs +20 -0
- package/dist/src/components/spinner/Spinner.cjs.map +1 -0
- package/dist/src/components/spinner/Spinner.js +20 -0
- package/dist/src/components/spinner/Spinner.js.map +1 -0
- package/dist/src/components/steps/Steps.cjs +50 -0
- package/dist/src/components/steps/Steps.cjs.map +1 -0
- package/dist/src/components/steps/Steps.js +50 -0
- package/dist/src/components/steps/Steps.js.map +1 -0
- package/dist/src/components/steps/useSteps.cjs +56 -0
- package/dist/src/components/steps/useSteps.cjs.map +1 -0
- package/dist/src/components/steps/useSteps.js +56 -0
- package/dist/src/components/steps/useSteps.js.map +1 -0
- package/dist/src/components/switch/Switch.cjs +28 -0
- package/dist/src/components/switch/Switch.cjs.map +1 -0
- package/dist/src/components/switch/Switch.js +28 -0
- package/dist/src/components/switch/Switch.js.map +1 -0
- package/dist/src/components/table/Table.cjs +117 -0
- package/dist/src/components/table/Table.cjs.map +1 -0
- package/dist/src/components/table/Table.js +117 -0
- package/dist/src/components/table/Table.js.map +1 -0
- package/dist/src/components/table/Table.module.css.cjs +12 -0
- package/dist/src/components/table/Table.module.css.cjs.map +1 -0
- package/dist/src/components/table/Table.module.css.js +12 -0
- package/dist/src/components/table/Table.module.css.js.map +1 -0
- package/dist/src/components/tabs/Tabs.cjs +10 -0
- package/dist/src/components/tabs/Tabs.cjs.map +1 -0
- package/dist/src/components/tabs/Tabs.js +10 -0
- package/dist/src/components/tabs/Tabs.js.map +1 -0
- package/dist/src/components/tag/Tag.cjs +74 -0
- package/dist/src/components/tag/Tag.cjs.map +1 -0
- package/dist/src/components/tag/Tag.js +57 -0
- package/dist/src/components/tag/Tag.js.map +1 -0
- package/dist/src/components/tooltip/Tooltip.cjs +14 -0
- package/dist/src/components/tooltip/Tooltip.cjs.map +1 -0
- package/dist/src/components/tooltip/Tooltip.js +14 -0
- package/dist/src/components/tooltip/Tooltip.js.map +1 -0
- package/dist/src/components/vennDiagram/VennDiagram.cjs +53 -0
- package/dist/src/components/vennDiagram/VennDiagram.cjs.map +1 -0
- package/dist/src/components/vennDiagram/VennDiagram.js +53 -0
- package/dist/src/components/vennDiagram/VennDiagram.js.map +1 -0
- package/dist/src/svgs/ProgressCircle.svg.cjs +22 -0
- package/dist/src/svgs/ProgressCircle.svg.cjs.map +1 -0
- package/dist/src/svgs/ProgressCircle.svg.js +6 -0
- package/dist/src/svgs/ProgressCircle.svg.js.map +1 -0
- package/dist/src/svgs/j2-logo-menu-collapse.svg.cjs +22 -0
- package/dist/src/svgs/j2-logo-menu-collapse.svg.cjs.map +1 -0
- package/dist/src/svgs/j2-logo-menu-collapse.svg.js +6 -0
- package/dist/src/svgs/j2-logo-menu-collapse.svg.js.map +1 -0
- package/dist/src/svgs/j2-logo-menu.svg.cjs +22 -0
- package/dist/src/svgs/j2-logo-menu.svg.cjs.map +1 -0
- package/dist/src/svgs/j2-logo-menu.svg.js +6 -0
- package/dist/src/svgs/j2-logo-menu.svg.js.map +1 -0
- package/dist/src/svgs/menu-sidebar-collapse.svg.cjs +22 -0
- package/dist/src/svgs/menu-sidebar-collapse.svg.cjs.map +1 -0
- package/dist/src/svgs/menu-sidebar-collapse.svg.js +6 -0
- package/dist/src/svgs/menu-sidebar-collapse.svg.js.map +1 -0
- package/dist/src/svgs/menu-sidebar-expand.svg.cjs +22 -0
- package/dist/src/svgs/menu-sidebar-expand.svg.cjs.map +1 -0
- package/dist/src/svgs/menu-sidebar-expand.svg.js +6 -0
- package/dist/src/svgs/menu-sidebar-expand.svg.js.map +1 -0
- package/dist/style.css +646 -646
- package/package.json +6 -6
|
@@ -0,0 +1,455 @@
|
|
|
1
|
+
import { jsx, jsxs, Fragment } from "react/jsx-runtime";
|
|
2
|
+
import { Dropdown, Typography, Select, Spin, Input } from "antd";
|
|
3
|
+
import { useState, useRef, useMemo, useEffect } from "react";
|
|
4
|
+
import { LoadingOutlined } from "@ant-design/icons";
|
|
5
|
+
import cx from "classnames";
|
|
6
|
+
import styles from "./SummarizedSelect.module.css.js";
|
|
7
|
+
import { Tag } from "../tag/Tag.js";
|
|
8
|
+
import { CaretDownIcon, MagnifyingGlassIcon } from "@phosphor-icons/react";
|
|
9
|
+
const isGroupOption = (option) => {
|
|
10
|
+
return "options" in option;
|
|
11
|
+
};
|
|
12
|
+
const getAllOptions = (options) => {
|
|
13
|
+
if (!options) return [];
|
|
14
|
+
return options.flatMap(
|
|
15
|
+
(option) => isGroupOption(option) ? option.options : [option]
|
|
16
|
+
);
|
|
17
|
+
};
|
|
18
|
+
const filterOptions = (options, searchValue) => {
|
|
19
|
+
if (!options) return [];
|
|
20
|
+
if (!searchValue) return options;
|
|
21
|
+
return options.map((option) => {
|
|
22
|
+
var _a;
|
|
23
|
+
if (isGroupOption(option)) {
|
|
24
|
+
const filteredSubOptions = option.options.filter(
|
|
25
|
+
(subOption) => {
|
|
26
|
+
var _a2;
|
|
27
|
+
return (_a2 = subOption.label) == null ? void 0 : _a2.toString().toLowerCase().includes(searchValue.toLowerCase());
|
|
28
|
+
}
|
|
29
|
+
);
|
|
30
|
+
return filteredSubOptions.length > 0 ? { ...option, options: filteredSubOptions } : null;
|
|
31
|
+
} else {
|
|
32
|
+
return ((_a = option.label) == null ? void 0 : _a.toString().toLowerCase().includes(searchValue.toLowerCase())) ? option : null;
|
|
33
|
+
}
|
|
34
|
+
}).filter((option) => option !== null);
|
|
35
|
+
};
|
|
36
|
+
function SummarizedSelect({
|
|
37
|
+
searchPlaceholder,
|
|
38
|
+
formControlPlaceholder,
|
|
39
|
+
loading,
|
|
40
|
+
multiple,
|
|
41
|
+
value,
|
|
42
|
+
onChange,
|
|
43
|
+
options,
|
|
44
|
+
renderLabel,
|
|
45
|
+
rootClassName,
|
|
46
|
+
popupClassName,
|
|
47
|
+
variant,
|
|
48
|
+
trigger = "select",
|
|
49
|
+
defaultOpen = false,
|
|
50
|
+
...props
|
|
51
|
+
}) {
|
|
52
|
+
const isHeadline = variant === "headlined";
|
|
53
|
+
const antVariant = isHeadline ? "borderless" : variant;
|
|
54
|
+
const [searchValue, setSearchValue] = useState("");
|
|
55
|
+
const [focusTrigger, setFocusTrigger] = useState(defaultOpen ? 1 : 0);
|
|
56
|
+
const [isOpen, setIsOpen] = useState(defaultOpen);
|
|
57
|
+
const inputRef = useRef(null);
|
|
58
|
+
const measureSpanRef = useRef(null);
|
|
59
|
+
const [measuredWidth, setMeasuredWidth] = useState();
|
|
60
|
+
const displayText = useMemo(() => {
|
|
61
|
+
if (multiple && value.length > 0) {
|
|
62
|
+
return renderLabel(value.length);
|
|
63
|
+
}
|
|
64
|
+
if (!multiple && value) {
|
|
65
|
+
const option = getAllOptions(options).find((opt) => opt.value === value);
|
|
66
|
+
return option ? String(option.label) : String(value);
|
|
67
|
+
}
|
|
68
|
+
return formControlPlaceholder ?? "";
|
|
69
|
+
}, [multiple, value, options, renderLabel, formControlPlaceholder]);
|
|
70
|
+
useEffect(() => {
|
|
71
|
+
if (!measureSpanRef.current) return;
|
|
72
|
+
setMeasuredWidth(Math.ceil(measureSpanRef.current.offsetWidth) + 46);
|
|
73
|
+
}, [displayText]);
|
|
74
|
+
useEffect(() => {
|
|
75
|
+
if (focusTrigger > 0) {
|
|
76
|
+
requestAnimationFrame(() => {
|
|
77
|
+
requestAnimationFrame(() => {
|
|
78
|
+
setTimeout(() => {
|
|
79
|
+
var _a;
|
|
80
|
+
(_a = inputRef.current) == null ? void 0 : _a.focus({ cursor: "end" });
|
|
81
|
+
}, 100);
|
|
82
|
+
});
|
|
83
|
+
});
|
|
84
|
+
}
|
|
85
|
+
}, [focusTrigger]);
|
|
86
|
+
const filteredOptions = useMemo(() => {
|
|
87
|
+
return filterOptions(options, searchValue);
|
|
88
|
+
}, [searchValue, options]);
|
|
89
|
+
const flatFilteredOptions = useMemo(() => {
|
|
90
|
+
return getAllOptions(filteredOptions);
|
|
91
|
+
}, [filteredOptions]);
|
|
92
|
+
const allFlatOptions = useMemo(() => {
|
|
93
|
+
return getAllOptions(options);
|
|
94
|
+
}, [options]);
|
|
95
|
+
const handleTagClose = (removedValue) => {
|
|
96
|
+
if (!multiple) return;
|
|
97
|
+
onChange(value.filter((x) => x !== removedValue));
|
|
98
|
+
};
|
|
99
|
+
const handleToggleAll = () => {
|
|
100
|
+
if (!multiple) return;
|
|
101
|
+
const allFilteredValues = getAllOptions(filteredOptions).map(
|
|
102
|
+
(opt) => opt.value
|
|
103
|
+
);
|
|
104
|
+
const someSelected = allFilteredValues.some((val) => value.includes(val));
|
|
105
|
+
if (someSelected) {
|
|
106
|
+
onChange(value.filter((val) => !allFilteredValues.includes(val)));
|
|
107
|
+
}
|
|
108
|
+
};
|
|
109
|
+
const handleSelectFirstOption = () => {
|
|
110
|
+
if (flatFilteredOptions.length === 0) return;
|
|
111
|
+
const firstOption = flatFilteredOptions[0];
|
|
112
|
+
if (!firstOption) return;
|
|
113
|
+
const optionValue = firstOption.value;
|
|
114
|
+
if (multiple) {
|
|
115
|
+
if (value.includes(optionValue)) {
|
|
116
|
+
onChange(value.filter((v) => v !== optionValue));
|
|
117
|
+
} else {
|
|
118
|
+
onChange([...value, optionValue]);
|
|
119
|
+
}
|
|
120
|
+
} else {
|
|
121
|
+
onChange(optionValue);
|
|
122
|
+
setIsOpen(false);
|
|
123
|
+
}
|
|
124
|
+
};
|
|
125
|
+
const handleOptionClick = (optionValue) => {
|
|
126
|
+
if (multiple) {
|
|
127
|
+
if (value.includes(optionValue)) {
|
|
128
|
+
onChange(value.filter((v) => v !== optionValue));
|
|
129
|
+
} else {
|
|
130
|
+
onChange([...value, optionValue]);
|
|
131
|
+
}
|
|
132
|
+
} else {
|
|
133
|
+
onChange(optionValue);
|
|
134
|
+
setIsOpen(false);
|
|
135
|
+
}
|
|
136
|
+
};
|
|
137
|
+
const handleKeyDown = (e) => {
|
|
138
|
+
const navigationKeys = ["ArrowUp", "ArrowDown"];
|
|
139
|
+
if (e.key === "Enter") {
|
|
140
|
+
e.preventDefault();
|
|
141
|
+
e.stopPropagation();
|
|
142
|
+
handleSelectFirstOption();
|
|
143
|
+
return;
|
|
144
|
+
}
|
|
145
|
+
if (e.key === "Escape") {
|
|
146
|
+
e.preventDefault();
|
|
147
|
+
e.stopPropagation();
|
|
148
|
+
setIsOpen(false);
|
|
149
|
+
return;
|
|
150
|
+
}
|
|
151
|
+
if (navigationKeys.includes(e.key)) {
|
|
152
|
+
e.preventDefault();
|
|
153
|
+
return;
|
|
154
|
+
}
|
|
155
|
+
e.stopPropagation();
|
|
156
|
+
};
|
|
157
|
+
const optionRender = (option) => {
|
|
158
|
+
if ("logo" in option.data && option.data.logo) {
|
|
159
|
+
return /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-2", children: [
|
|
160
|
+
/* @__PURE__ */ jsx("div", { className: "h-4 shrink-0", children: option.data.logo }),
|
|
161
|
+
/* @__PURE__ */ jsx("span", { className: "overflow-ellipsis overflow-hidden", children: option.label })
|
|
162
|
+
] });
|
|
163
|
+
}
|
|
164
|
+
return /* @__PURE__ */ jsx("div", { children: option.label });
|
|
165
|
+
};
|
|
166
|
+
const popupRender = (menu) => {
|
|
167
|
+
const valueToLabel = (val) => {
|
|
168
|
+
const option = allFlatOptions.find((opt) => opt.value === val);
|
|
169
|
+
return option ? option.label : val;
|
|
170
|
+
};
|
|
171
|
+
return /* @__PURE__ */ jsxs("div", { children: [
|
|
172
|
+
/* @__PURE__ */ jsx("div", { className: "mb-2 px-2 pb-2 border-b -mx-1 mt-1", children: /* @__PURE__ */ jsx(
|
|
173
|
+
Input,
|
|
174
|
+
{
|
|
175
|
+
ref: inputRef,
|
|
176
|
+
autoFocus: true,
|
|
177
|
+
placeholder: searchPlaceholder || "Search...",
|
|
178
|
+
value: searchValue,
|
|
179
|
+
onChange: (e) => {
|
|
180
|
+
setSearchValue(e.target.value);
|
|
181
|
+
e.stopPropagation();
|
|
182
|
+
e.preventDefault();
|
|
183
|
+
},
|
|
184
|
+
onKeyDown: handleKeyDown,
|
|
185
|
+
onClick: (e) => e.stopPropagation(),
|
|
186
|
+
prefix: /* @__PURE__ */ jsx(
|
|
187
|
+
MagnifyingGlassIcon,
|
|
188
|
+
{
|
|
189
|
+
size: 16,
|
|
190
|
+
className: "text-j2-text-placeholder"
|
|
191
|
+
}
|
|
192
|
+
),
|
|
193
|
+
allowClear: true
|
|
194
|
+
},
|
|
195
|
+
focusTrigger
|
|
196
|
+
) }),
|
|
197
|
+
multiple && value.length > 0 ? /* @__PURE__ */ jsx("div", { className: "px-2 pb-2", children: /* @__PURE__ */ jsx("div", { className: "flex flex-wrap gap-y-1", children: value.map((value2) => /* @__PURE__ */ jsx(
|
|
198
|
+
Tag,
|
|
199
|
+
{
|
|
200
|
+
className: "opacity-100 z-10 flex max-w-full",
|
|
201
|
+
status: "default",
|
|
202
|
+
closable: true,
|
|
203
|
+
onClose: () => handleTagClose(value2),
|
|
204
|
+
children: /* @__PURE__ */ jsx(
|
|
205
|
+
"span",
|
|
206
|
+
{
|
|
207
|
+
className: "overflow-ellipsis overflow-hidden",
|
|
208
|
+
title: valueToLabel(value2),
|
|
209
|
+
children: valueToLabel(value2)
|
|
210
|
+
}
|
|
211
|
+
)
|
|
212
|
+
},
|
|
213
|
+
value2
|
|
214
|
+
)) }) }) : null,
|
|
215
|
+
/* @__PURE__ */ jsx(
|
|
216
|
+
"div",
|
|
217
|
+
{
|
|
218
|
+
className: cx(styles.menuContainer, "rounded-lg", {
|
|
219
|
+
[styles.headlinedMenuContainer]: isHeadline,
|
|
220
|
+
[styles.menuContainerMultiple]: multiple
|
|
221
|
+
}),
|
|
222
|
+
children: menu
|
|
223
|
+
}
|
|
224
|
+
),
|
|
225
|
+
/* @__PURE__ */ jsx("div", { className: "flex justify-between items-center", children: multiple && /* @__PURE__ */ jsx("div", { className: "w-full mt-1 pt-1 border-t border-j2-border-secondary", children: /* @__PURE__ */ jsx(
|
|
226
|
+
"div",
|
|
227
|
+
{
|
|
228
|
+
"aria-selected": "false",
|
|
229
|
+
className: cx(
|
|
230
|
+
"ant-select-item ant-select-item-option w-full",
|
|
231
|
+
styles.clearAllButton
|
|
232
|
+
),
|
|
233
|
+
title: "Clear all",
|
|
234
|
+
onClick: handleToggleAll,
|
|
235
|
+
children: /* @__PURE__ */ jsx("div", { className: "ant-select-item-option-content text-center font-semibold", children: "Clear all" })
|
|
236
|
+
}
|
|
237
|
+
) }) })
|
|
238
|
+
] });
|
|
239
|
+
};
|
|
240
|
+
const handleOpenChange = (open) => {
|
|
241
|
+
setIsOpen(open);
|
|
242
|
+
if (open) {
|
|
243
|
+
setFocusTrigger((prev) => prev + 1);
|
|
244
|
+
} else {
|
|
245
|
+
setSearchValue("");
|
|
246
|
+
}
|
|
247
|
+
};
|
|
248
|
+
const renderDropdownOptionRow = (option) => {
|
|
249
|
+
const optionValue = option.value;
|
|
250
|
+
const isSelected = multiple ? value.includes(optionValue) : value === optionValue;
|
|
251
|
+
const hasLogo = "logo" in option && option.logo;
|
|
252
|
+
return /* @__PURE__ */ jsx(
|
|
253
|
+
"div",
|
|
254
|
+
{
|
|
255
|
+
role: "option",
|
|
256
|
+
"aria-selected": isSelected,
|
|
257
|
+
onClick: () => handleOptionClick(optionValue),
|
|
258
|
+
className: cx(
|
|
259
|
+
"px-3 py-1.5 rounded cursor-pointer text-sm",
|
|
260
|
+
isSelected ? "bg-[var(--j2-color-primary)] text-white hover:bg-[var(--j2-color-primary)]" : "hover:bg-[var(--j2-color-bg-hover)]"
|
|
261
|
+
),
|
|
262
|
+
children: hasLogo ? /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-2", children: [
|
|
263
|
+
/* @__PURE__ */ jsx("div", { className: "h-4 shrink-0", children: option.logo }),
|
|
264
|
+
/* @__PURE__ */ jsx("span", { className: "overflow-hidden overflow-ellipsis", children: option.label })
|
|
265
|
+
] }) : option.label
|
|
266
|
+
},
|
|
267
|
+
optionValue
|
|
268
|
+
);
|
|
269
|
+
};
|
|
270
|
+
const dropdownPopupRender = () => {
|
|
271
|
+
const valueToLabel = (val) => {
|
|
272
|
+
const option = allFlatOptions.find((opt) => opt.value === val);
|
|
273
|
+
return option ? option.label : val;
|
|
274
|
+
};
|
|
275
|
+
return /* @__PURE__ */ jsxs("div", { className: "bg-white rounded-lg shadow-md p-2 min-w-[240px]", children: [
|
|
276
|
+
/* @__PURE__ */ jsx("div", { className: "pb-2 border-b border-j2-border-secondary", children: /* @__PURE__ */ jsx(
|
|
277
|
+
Input,
|
|
278
|
+
{
|
|
279
|
+
ref: inputRef,
|
|
280
|
+
autoFocus: true,
|
|
281
|
+
placeholder: searchPlaceholder || "Search...",
|
|
282
|
+
value: searchValue,
|
|
283
|
+
onChange: (e) => {
|
|
284
|
+
setSearchValue(e.target.value);
|
|
285
|
+
e.stopPropagation();
|
|
286
|
+
},
|
|
287
|
+
onKeyDown: handleKeyDown,
|
|
288
|
+
onClick: (e) => e.stopPropagation(),
|
|
289
|
+
prefix: /* @__PURE__ */ jsx(
|
|
290
|
+
MagnifyingGlassIcon,
|
|
291
|
+
{
|
|
292
|
+
size: 16,
|
|
293
|
+
className: "text-j2-text-placeholder"
|
|
294
|
+
}
|
|
295
|
+
),
|
|
296
|
+
allowClear: true
|
|
297
|
+
},
|
|
298
|
+
focusTrigger
|
|
299
|
+
) }),
|
|
300
|
+
multiple && value.length > 0 && /* @__PURE__ */ jsx("div", { className: "px-1 pt-2", children: /* @__PURE__ */ jsx("div", { className: "flex flex-wrap gap-y-1", children: value.map((v) => /* @__PURE__ */ jsx(
|
|
301
|
+
Tag,
|
|
302
|
+
{
|
|
303
|
+
className: "opacity-100 z-10 flex max-w-full",
|
|
304
|
+
status: "default",
|
|
305
|
+
closable: true,
|
|
306
|
+
onClose: () => handleTagClose(v),
|
|
307
|
+
children: /* @__PURE__ */ jsx(
|
|
308
|
+
"span",
|
|
309
|
+
{
|
|
310
|
+
className: "overflow-ellipsis overflow-hidden",
|
|
311
|
+
title: valueToLabel(v),
|
|
312
|
+
children: valueToLabel(v)
|
|
313
|
+
}
|
|
314
|
+
)
|
|
315
|
+
},
|
|
316
|
+
v
|
|
317
|
+
)) }) }),
|
|
318
|
+
/* @__PURE__ */ jsx(
|
|
319
|
+
"div",
|
|
320
|
+
{
|
|
321
|
+
className: "max-h-72 overflow-y-auto py-1",
|
|
322
|
+
role: "listbox",
|
|
323
|
+
"aria-multiselectable": multiple || void 0,
|
|
324
|
+
children: filteredOptions.length === 0 ? /* @__PURE__ */ jsx("div", { className: "px-3 py-2 text-sm text-[var(--j2-color-text-secondary)]", children: "No options found" }) : filteredOptions.map((opt) => {
|
|
325
|
+
if (isGroupOption(opt)) {
|
|
326
|
+
return /* @__PURE__ */ jsxs("div", { children: [
|
|
327
|
+
/* @__PURE__ */ jsx("div", { className: "px-3 pt-2 pb-1 text-xs font-semibold uppercase tracking-wide text-[var(--j2-color-text-tertiary)]", children: opt.label }),
|
|
328
|
+
opt.options.map(renderDropdownOptionRow)
|
|
329
|
+
] }, `group-${opt.label}`);
|
|
330
|
+
}
|
|
331
|
+
return renderDropdownOptionRow(opt);
|
|
332
|
+
})
|
|
333
|
+
}
|
|
334
|
+
),
|
|
335
|
+
multiple && value.length > 0 && /* @__PURE__ */ jsx("div", { className: "mt-1 pt-1 border-t border-j2-border-secondary", children: /* @__PURE__ */ jsx(
|
|
336
|
+
"div",
|
|
337
|
+
{
|
|
338
|
+
role: "button",
|
|
339
|
+
"aria-label": "Clear all",
|
|
340
|
+
title: "Clear all",
|
|
341
|
+
onClick: handleToggleAll,
|
|
342
|
+
className: cx(
|
|
343
|
+
"text-center font-semibold text-sm py-1.5 rounded cursor-pointer",
|
|
344
|
+
styles.clearAllButton
|
|
345
|
+
),
|
|
346
|
+
children: "Clear all"
|
|
347
|
+
}
|
|
348
|
+
) })
|
|
349
|
+
] });
|
|
350
|
+
};
|
|
351
|
+
if (trigger === "dropdown") {
|
|
352
|
+
const hasSelection = multiple ? value.length > 0 : Boolean(value);
|
|
353
|
+
const triggerContent = /* @__PURE__ */ jsxs("span", { className: "inline-flex items-center gap-1", children: [
|
|
354
|
+
hasSelection ? displayText : formControlPlaceholder ?? "Select",
|
|
355
|
+
loading ? /* @__PURE__ */ jsx(
|
|
356
|
+
Spin,
|
|
357
|
+
{
|
|
358
|
+
indicator: /* @__PURE__ */ jsx(LoadingOutlined, { spin: true }),
|
|
359
|
+
size: "small",
|
|
360
|
+
"data-testid": "loading-spinner"
|
|
361
|
+
}
|
|
362
|
+
) : /* @__PURE__ */ jsx(CaretDownIcon, { weight: "regular", "data-testid": "caret-down" })
|
|
363
|
+
] });
|
|
364
|
+
return /* @__PURE__ */ jsx(
|
|
365
|
+
Dropdown,
|
|
366
|
+
{
|
|
367
|
+
open: isOpen,
|
|
368
|
+
onOpenChange: handleOpenChange,
|
|
369
|
+
trigger: ["click"],
|
|
370
|
+
disabled: props.disabled,
|
|
371
|
+
popupRender: dropdownPopupRender,
|
|
372
|
+
children: /* @__PURE__ */ jsx(
|
|
373
|
+
Typography.Link,
|
|
374
|
+
{
|
|
375
|
+
disabled: props.disabled,
|
|
376
|
+
className: cx("inline-flex", rootClassName),
|
|
377
|
+
children: triggerContent
|
|
378
|
+
}
|
|
379
|
+
)
|
|
380
|
+
}
|
|
381
|
+
);
|
|
382
|
+
}
|
|
383
|
+
return /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
384
|
+
/* @__PURE__ */ jsx(
|
|
385
|
+
"span",
|
|
386
|
+
{
|
|
387
|
+
ref: measureSpanRef,
|
|
388
|
+
"aria-hidden": true,
|
|
389
|
+
style: {
|
|
390
|
+
position: "absolute",
|
|
391
|
+
visibility: "hidden",
|
|
392
|
+
whiteSpace: "nowrap",
|
|
393
|
+
fontSize: "inherit"
|
|
394
|
+
},
|
|
395
|
+
children: displayText
|
|
396
|
+
}
|
|
397
|
+
),
|
|
398
|
+
/* @__PURE__ */ jsx(
|
|
399
|
+
Select,
|
|
400
|
+
{
|
|
401
|
+
open: isOpen,
|
|
402
|
+
showSearch: false,
|
|
403
|
+
style: { width: measuredWidth },
|
|
404
|
+
suffixIcon: loading ? /* @__PURE__ */ jsx(
|
|
405
|
+
Spin,
|
|
406
|
+
{
|
|
407
|
+
indicator: /* @__PURE__ */ jsx(LoadingOutlined, { spin: true }),
|
|
408
|
+
size: "small",
|
|
409
|
+
"data-testid": "loading-spinner"
|
|
410
|
+
}
|
|
411
|
+
) : /* @__PURE__ */ jsx(CaretDownIcon, { size: 14, "data-testid": "caret-down" }),
|
|
412
|
+
placeholder: formControlPlaceholder,
|
|
413
|
+
mode: multiple ? "multiple" : void 0,
|
|
414
|
+
value,
|
|
415
|
+
maxTagCount: 0,
|
|
416
|
+
maxTagPlaceholder: multiple ? () => renderLabel(value.length) : value,
|
|
417
|
+
options: filteredOptions,
|
|
418
|
+
onChange: (val) => {
|
|
419
|
+
if (multiple) {
|
|
420
|
+
if (Array.isArray(val)) {
|
|
421
|
+
onChange(val);
|
|
422
|
+
} else {
|
|
423
|
+
throw new Error("Value should be an array in multiple mode");
|
|
424
|
+
}
|
|
425
|
+
} else {
|
|
426
|
+
if (typeof val === "string") {
|
|
427
|
+
onChange(val);
|
|
428
|
+
} else {
|
|
429
|
+
throw new Error(
|
|
430
|
+
"Value should be a string in single selection mode"
|
|
431
|
+
);
|
|
432
|
+
}
|
|
433
|
+
}
|
|
434
|
+
},
|
|
435
|
+
popupRender,
|
|
436
|
+
optionRender,
|
|
437
|
+
onOpenChange: handleOpenChange,
|
|
438
|
+
classNames: {
|
|
439
|
+
root: cx(rootClassName, styles.summarizedSelect, {
|
|
440
|
+
[styles.hemisphericSelect]: variant !== "underlined" && variant !== "headlined",
|
|
441
|
+
[styles.isActive]: multiple && value.length > 0 && variant !== "underlined" && variant !== "headlined",
|
|
442
|
+
[styles.headlinedSelect]: isHeadline
|
|
443
|
+
}),
|
|
444
|
+
popup: { root: popupClassName }
|
|
445
|
+
},
|
|
446
|
+
variant: antVariant,
|
|
447
|
+
...props
|
|
448
|
+
}
|
|
449
|
+
)
|
|
450
|
+
] });
|
|
451
|
+
}
|
|
452
|
+
export {
|
|
453
|
+
SummarizedSelect
|
|
454
|
+
};
|
|
455
|
+
//# sourceMappingURL=SummarizedSelect.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SummarizedSelect.js","sources":["../../../../src/components/select/SummarizedSelect.tsx"],"sourcesContent":["import {\n Dropdown as AntdDropdown,\n Select,\n Spin,\n Input,\n SelectProps,\n InputRef,\n Typography,\n} from 'antd'\nimport { DefaultOptionType } from 'antd/es/select'\nimport { useState, useMemo, useRef, useEffect } from 'react'\nimport { LoadingOutlined } from '@ant-design/icons'\nimport type { FlattenOptionData } from 'rc-select/lib/interface'\nimport * as icons from '../icons'\nimport { Tag } from '../tag'\nimport cx from 'classnames'\n\nimport styles from './SummarizedSelect.module.css'\n\ntype Option = DefaultOptionType\ntype OptionWithLogo = Option & {\n logo: React.ReactNode\n}\n\ntype GroupOption = {\n label: string\n options: Option[]\n}\n\nexport type SelectOption = Option | GroupOption | OptionWithLogo\n\nexport type SummarizedSelectVariant = SelectProps['variant'] | 'headlined'\n\nexport type SummarizedSelectTrigger = 'select' | 'dropdown'\n\ntype BaseProps = Omit<\n SelectProps<string | string[], SelectOption>,\n 'mode' | 'value' | 'onChange' | 'variant'\n> & {\n searchPlaceholder?: string\n formControlPlaceholder?: string\n rootClassName?: string\n popupClassName?: string\n variant?: SummarizedSelectVariant\n /**\n * Shape of the control that opens the popup.\n * - `'select'` (default): antd Select, styled by `variant`.\n * - `'dropdown'`: antd Dropdown with a `Typography.Link` target (label + caret).\n * Ignores `variant` — the trigger is always a link.\n */\n trigger?: SummarizedSelectTrigger\n defaultOpen?: boolean\n\n loading?: boolean\n}\n\ntype SingleProps = {\n multiple?: false\n renderLabel?: undefined\n value: string | undefined\n onChange: (newValue: string) => void\n}\n\ntype MultiProps = {\n multiple: true\n renderLabel: (count: number) => string\n value: string[]\n onChange: (newValue: string[]) => void\n}\n\nexport type Props = BaseProps & (SingleProps | MultiProps)\n\nconst isGroupOption = (option: SelectOption): option is GroupOption => {\n return 'options' in option\n}\n\nconst getAllOptions = (options: SelectOption[] | undefined): Option[] => {\n if (!options) return []\n\n return options.flatMap((option) =>\n isGroupOption(option) ? option.options : [option]\n )\n}\n\nconst filterOptions = (\n options: SelectOption[] | undefined,\n searchValue: string\n): SelectOption[] => {\n if (!options) return []\n if (!searchValue) return options\n\n return options\n .map((option) => {\n if (isGroupOption(option)) {\n const filteredSubOptions = option.options.filter((subOption) =>\n subOption.label\n ?.toString()\n .toLowerCase()\n .includes(searchValue.toLowerCase())\n )\n return filteredSubOptions.length > 0\n ? { ...option, options: filteredSubOptions }\n : null\n } else {\n return option.label\n ?.toString()\n .toLowerCase()\n .includes(searchValue.toLowerCase())\n ? option\n : null\n }\n })\n .filter((option): option is SelectOption => option !== null)\n}\n\nexport function SummarizedSelect({\n searchPlaceholder,\n formControlPlaceholder,\n loading,\n multiple,\n value,\n onChange,\n options,\n renderLabel,\n rootClassName,\n popupClassName,\n variant,\n trigger = 'select',\n defaultOpen = false,\n ...props\n}: Props) {\n const isHeadline = variant === 'headlined'\n const antVariant = isHeadline ? 'borderless' : variant\n const [searchValue, setSearchValue] = useState('')\n const [focusTrigger, setFocusTrigger] = useState(defaultOpen ? 1 : 0)\n const [isOpen, setIsOpen] = useState(defaultOpen)\n const inputRef = useRef<InputRef>(null)\n const measureSpanRef = useRef<HTMLSpanElement>(null)\n const [measuredWidth, setMeasuredWidth] = useState<number>()\n\n const displayText = useMemo(() => {\n if (multiple && value.length > 0) {\n return renderLabel(value.length)\n }\n if (!multiple && value) {\n const option = getAllOptions(options).find((opt) => opt.value === value)\n return option ? String(option.label) : String(value)\n }\n return formControlPlaceholder ?? ''\n }, [multiple, value, options, renderLabel, formControlPlaceholder])\n\n useEffect(() => {\n if (!measureSpanRef.current) return\n // padding (22px = 11px each side) + arrow (18px) + border (6px)\n setMeasuredWidth(Math.ceil(measureSpanRef.current.offsetWidth) + 46)\n }, [displayText])\n\n useEffect(() => {\n if (focusTrigger > 0) {\n requestAnimationFrame(() => {\n requestAnimationFrame(() => {\n setTimeout(() => {\n inputRef.current?.focus({ cursor: 'end' })\n }, 100)\n })\n })\n }\n }, [focusTrigger])\n\n const filteredOptions = useMemo(() => {\n return filterOptions(options, searchValue)\n }, [searchValue, options])\n\n const flatFilteredOptions = useMemo(() => {\n return getAllOptions(filteredOptions)\n }, [filteredOptions])\n\n const allFlatOptions = useMemo(() => {\n return getAllOptions(options)\n }, [options])\n\n const handleTagClose = (removedValue: string) => {\n if (!multiple) return\n\n onChange(value.filter((x) => x !== removedValue))\n }\n\n const handleToggleAll = () => {\n if (!multiple) return\n\n const allFilteredValues = getAllOptions(filteredOptions).map(\n (opt) => opt.value as string\n )\n const someSelected = allFilteredValues.some((val) => value.includes(val))\n\n if (someSelected) {\n onChange(value.filter((val) => !allFilteredValues.includes(val)))\n }\n }\n\n const handleSelectFirstOption = () => {\n if (flatFilteredOptions.length === 0) return\n\n const firstOption = flatFilteredOptions[0]\n if (!firstOption) return\n\n const optionValue = firstOption.value as string\n\n if (multiple) {\n if (value.includes(optionValue)) {\n onChange(value.filter((v) => v !== optionValue))\n } else {\n onChange([...value, optionValue])\n }\n } else {\n onChange(optionValue)\n setIsOpen(false)\n }\n }\n\n const handleOptionClick = (optionValue: string) => {\n if (multiple) {\n if (value.includes(optionValue)) {\n onChange(value.filter((v) => v !== optionValue))\n } else {\n onChange([...value, optionValue])\n }\n } else {\n onChange(optionValue)\n setIsOpen(false)\n }\n }\n\n const handleKeyDown = (e: React.KeyboardEvent<HTMLInputElement>) => {\n // Allow these navigation keys to bubble up to Select's native keyboard handler\n const navigationKeys = ['ArrowUp', 'ArrowDown']\n\n // Handle Enter - select first filtered option (custom behavior)\n if (e.key === 'Enter') {\n e.preventDefault()\n e.stopPropagation()\n handleSelectFirstOption()\n return\n }\n\n // Handle Escape - close dropdown (custom behavior)\n if (e.key === 'Escape') {\n e.preventDefault()\n e.stopPropagation()\n setIsOpen(false)\n return\n }\n\n // For arrow keys, prevent cursor movement but allow propagation to Select\n if (navigationKeys.includes(e.key)) {\n e.preventDefault() // Prevents cursor from moving to start/end of input text\n // Do NOT call stopPropagation() - let event bubble to Select component\n return\n }\n\n // For all other keys (including Backspace), stop propagation\n // This prevents backspace from removing tags in multiple mode\n e.stopPropagation()\n }\n\n const optionRender = (option: FlattenOptionData<SelectOption>) => {\n if ('logo' in option.data && option.data.logo) {\n return (\n <div className=\"flex items-center gap-2\">\n <div className=\"h-4 shrink-0\">{option.data.logo}</div>\n <span className=\"overflow-ellipsis overflow-hidden\">\n {option.label}\n </span>\n </div>\n )\n }\n return <div>{option.label}</div>\n }\n\n const popupRender = (menu: React.ReactElement) => {\n const valueToLabel = (val: string) => {\n const option = allFlatOptions.find((opt) => opt.value === val)\n return option ? (option.label as string) : val\n }\n\n return (\n <div>\n <div className=\"mb-2 px-2 pb-2 border-b -mx-1 mt-1\">\n <Input\n ref={inputRef}\n key={focusTrigger}\n autoFocus\n placeholder={searchPlaceholder || 'Search...'}\n value={searchValue}\n onChange={(e) => {\n setSearchValue(e.target.value)\n e.stopPropagation()\n e.preventDefault()\n }}\n onKeyDown={handleKeyDown}\n onClick={(e) => e.stopPropagation()}\n prefix={\n <icons.MagnifyingGlassIcon\n size={16}\n className=\"text-j2-text-placeholder\"\n />\n }\n allowClear\n />\n </div>\n {multiple && value.length > 0 ? (\n <div className=\"px-2 pb-2\">\n <div className=\"flex flex-wrap gap-y-1\">\n {(value as string[]).map((value) => (\n <Tag\n className=\"opacity-100 z-10 flex max-w-full\"\n key={value}\n status=\"default\"\n closable\n onClose={() => handleTagClose(value)}\n >\n <span\n className=\"overflow-ellipsis overflow-hidden\"\n title={valueToLabel(value)}\n >\n {valueToLabel(value)}\n </span>\n </Tag>\n ))}\n </div>\n </div>\n ) : null}\n <div\n className={cx(styles.menuContainer, 'rounded-lg', {\n [styles.headlinedMenuContainer]: isHeadline,\n [styles.menuContainerMultiple]: multiple,\n })}\n >\n {menu}\n </div>\n <div className=\"flex justify-between items-center\">\n {multiple && (\n <div className=\"w-full mt-1 pt-1 border-t border-j2-border-secondary\">\n <div\n aria-selected=\"false\"\n className={cx(\n 'ant-select-item ant-select-item-option w-full',\n styles.clearAllButton\n )}\n title=\"Clear all\"\n onClick={handleToggleAll}\n >\n <div className=\"ant-select-item-option-content text-center font-semibold\">\n Clear all\n </div>\n </div>\n </div>\n )}\n </div>\n </div>\n )\n }\n\n const handleOpenChange = (open: boolean) => {\n setIsOpen(open)\n if (open) {\n // Trigger focus by updating the counter\n setFocusTrigger((prev) => prev + 1)\n } else {\n setSearchValue('')\n }\n }\n\n const renderDropdownOptionRow = (option: Option) => {\n const optionValue = option.value as string\n const isSelected = multiple\n ? value.includes(optionValue)\n : value === optionValue\n const hasLogo = 'logo' in option && (option as OptionWithLogo).logo\n return (\n <div\n key={optionValue}\n role=\"option\"\n aria-selected={isSelected}\n onClick={() => handleOptionClick(optionValue)}\n className={cx(\n 'px-3 py-1.5 rounded cursor-pointer text-sm',\n isSelected\n ? 'bg-[var(--j2-color-primary)] text-white hover:bg-[var(--j2-color-primary)]'\n : 'hover:bg-[var(--j2-color-bg-hover)]'\n )}\n >\n {hasLogo ? (\n <div className=\"flex items-center gap-2\">\n <div className=\"h-4 shrink-0\">\n {(option as OptionWithLogo).logo}\n </div>\n <span className=\"overflow-hidden overflow-ellipsis\">\n {option.label}\n </span>\n </div>\n ) : (\n option.label\n )}\n </div>\n )\n }\n\n const dropdownPopupRender = () => {\n const valueToLabel = (val: string) => {\n const option = allFlatOptions.find((opt) => opt.value === val)\n return option ? (option.label as string) : val\n }\n\n return (\n <div className=\"bg-white rounded-lg shadow-md p-2 min-w-[240px]\">\n <div className=\"pb-2 border-b border-j2-border-secondary\">\n <Input\n ref={inputRef}\n key={focusTrigger}\n autoFocus\n placeholder={searchPlaceholder || 'Search...'}\n value={searchValue}\n onChange={(e) => {\n setSearchValue(e.target.value)\n e.stopPropagation()\n }}\n onKeyDown={handleKeyDown}\n onClick={(e) => e.stopPropagation()}\n prefix={\n <icons.MagnifyingGlassIcon\n size={16}\n className=\"text-j2-text-placeholder\"\n />\n }\n allowClear\n />\n </div>\n {multiple && value.length > 0 && (\n <div className=\"px-1 pt-2\">\n <div className=\"flex flex-wrap gap-y-1\">\n {(value as string[]).map((v) => (\n <Tag\n className=\"opacity-100 z-10 flex max-w-full\"\n key={v}\n status=\"default\"\n closable\n onClose={() => handleTagClose(v)}\n >\n <span\n className=\"overflow-ellipsis overflow-hidden\"\n title={valueToLabel(v)}\n >\n {valueToLabel(v)}\n </span>\n </Tag>\n ))}\n </div>\n </div>\n )}\n <div\n className=\"max-h-72 overflow-y-auto py-1\"\n role=\"listbox\"\n aria-multiselectable={multiple || undefined}\n >\n {filteredOptions.length === 0 ? (\n <div className=\"px-3 py-2 text-sm text-[var(--j2-color-text-secondary)]\">\n No options found\n </div>\n ) : (\n filteredOptions.map((opt) => {\n if (isGroupOption(opt)) {\n return (\n <div key={`group-${opt.label}`}>\n <div className=\"px-3 pt-2 pb-1 text-xs font-semibold uppercase tracking-wide text-[var(--j2-color-text-tertiary)]\">\n {opt.label}\n </div>\n {opt.options.map(renderDropdownOptionRow)}\n </div>\n )\n }\n return renderDropdownOptionRow(opt)\n })\n )}\n </div>\n {multiple && value.length > 0 && (\n <div className=\"mt-1 pt-1 border-t border-j2-border-secondary\">\n <div\n role=\"button\"\n aria-label=\"Clear all\"\n title=\"Clear all\"\n onClick={handleToggleAll}\n className={cx(\n 'text-center font-semibold text-sm py-1.5 rounded cursor-pointer',\n styles.clearAllButton\n )}\n >\n Clear all\n </div>\n </div>\n )}\n </div>\n )\n }\n\n if (trigger === 'dropdown') {\n const hasSelection = multiple ? value.length > 0 : Boolean(value)\n const triggerContent = (\n <span className=\"inline-flex items-center gap-1\">\n {hasSelection ? displayText : (formControlPlaceholder ?? 'Select')}\n {loading ? (\n <Spin\n indicator={<LoadingOutlined spin />}\n size=\"small\"\n data-testid=\"loading-spinner\"\n />\n ) : (\n <icons.CaretDownIcon weight=\"regular\" data-testid=\"caret-down\" />\n )}\n </span>\n )\n\n return (\n <AntdDropdown\n open={isOpen}\n onOpenChange={handleOpenChange}\n trigger={['click']}\n disabled={props.disabled}\n popupRender={dropdownPopupRender}\n >\n <Typography.Link\n disabled={props.disabled}\n className={cx('inline-flex', rootClassName)}\n >\n {triggerContent}\n </Typography.Link>\n </AntdDropdown>\n )\n }\n\n return (\n <>\n <span\n ref={measureSpanRef}\n aria-hidden\n style={{\n position: 'absolute',\n visibility: 'hidden',\n whiteSpace: 'nowrap',\n fontSize: 'inherit',\n }}\n >\n {displayText}\n </span>\n <Select<string | string[], SelectOption>\n open={isOpen}\n showSearch={false}\n style={{ width: measuredWidth }}\n suffixIcon={\n loading ? (\n <Spin\n indicator={<LoadingOutlined spin />}\n size=\"small\"\n data-testid=\"loading-spinner\"\n />\n ) : (\n <icons.CaretDownIcon size={14} data-testid=\"caret-down\" />\n )\n }\n placeholder={formControlPlaceholder}\n mode={multiple ? 'multiple' : undefined}\n value={value}\n maxTagCount={0}\n maxTagPlaceholder={multiple ? () => renderLabel(value.length) : value}\n options={filteredOptions}\n onChange={(val) => {\n if (multiple) {\n if (Array.isArray(val)) {\n onChange(val)\n } else {\n throw new Error('Value should be an array in multiple mode')\n }\n } else {\n if (typeof val === 'string') {\n onChange(val)\n } else {\n throw new Error(\n 'Value should be a string in single selection mode'\n )\n }\n }\n }}\n popupRender={popupRender}\n optionRender={optionRender}\n onOpenChange={handleOpenChange}\n classNames={{\n root: cx(rootClassName, styles.summarizedSelect, {\n [styles.hemisphericSelect]:\n variant !== 'underlined' && variant !== 'headlined',\n [styles.isActive]:\n multiple &&\n value.length > 0 &&\n variant !== 'underlined' &&\n variant !== 'headlined',\n [styles.headlinedSelect]: isHeadline,\n }),\n popup: { root: popupClassName },\n }}\n variant={antVariant}\n {...props}\n />\n </>\n )\n}\n"],"names":["_a","icons.MagnifyingGlassIcon","value","icons.CaretDownIcon","AntdDropdown"],"mappings":"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"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperties(exports, { __esModule: { value: true }, [Symbol.toStringTag]: { value: "Module" } });
|
|
3
|
+
const hemisphericSelect = "_hemisphericSelect_2ivoh_1";
|
|
4
|
+
const summarizedSelect = "_summarizedSelect_2ivoh_11";
|
|
5
|
+
const isActive = "_isActive_2ivoh_22";
|
|
6
|
+
const menuContainer = "_menuContainer_2ivoh_36";
|
|
7
|
+
const menuContainerMultiple = "_menuContainerMultiple_2ivoh_46";
|
|
8
|
+
const headlinedSelect = "_headlinedSelect_2ivoh_61";
|
|
9
|
+
const headlinedMenuContainer = "_headlinedMenuContainer_2ivoh_105";
|
|
10
|
+
const clearAllButton = "_clearAllButton_2ivoh_116";
|
|
11
|
+
const styles = {
|
|
12
|
+
hemisphericSelect,
|
|
13
|
+
summarizedSelect,
|
|
14
|
+
isActive,
|
|
15
|
+
menuContainer,
|
|
16
|
+
menuContainerMultiple,
|
|
17
|
+
headlinedSelect,
|
|
18
|
+
headlinedMenuContainer,
|
|
19
|
+
clearAllButton
|
|
20
|
+
};
|
|
21
|
+
exports.clearAllButton = clearAllButton;
|
|
22
|
+
exports.default = styles;
|
|
23
|
+
exports.headlinedMenuContainer = headlinedMenuContainer;
|
|
24
|
+
exports.headlinedSelect = headlinedSelect;
|
|
25
|
+
exports.hemisphericSelect = hemisphericSelect;
|
|
26
|
+
exports.isActive = isActive;
|
|
27
|
+
exports.menuContainer = menuContainer;
|
|
28
|
+
exports.menuContainerMultiple = menuContainerMultiple;
|
|
29
|
+
exports.summarizedSelect = summarizedSelect;
|
|
30
|
+
//# sourceMappingURL=SummarizedSelect.module.css.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SummarizedSelect.module.css.cjs","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
const hemisphericSelect = "_hemisphericSelect_2ivoh_1";
|
|
2
|
+
const summarizedSelect = "_summarizedSelect_2ivoh_11";
|
|
3
|
+
const isActive = "_isActive_2ivoh_22";
|
|
4
|
+
const menuContainer = "_menuContainer_2ivoh_36";
|
|
5
|
+
const menuContainerMultiple = "_menuContainerMultiple_2ivoh_46";
|
|
6
|
+
const headlinedSelect = "_headlinedSelect_2ivoh_61";
|
|
7
|
+
const headlinedMenuContainer = "_headlinedMenuContainer_2ivoh_105";
|
|
8
|
+
const clearAllButton = "_clearAllButton_2ivoh_116";
|
|
9
|
+
const styles = {
|
|
10
|
+
hemisphericSelect,
|
|
11
|
+
summarizedSelect,
|
|
12
|
+
isActive,
|
|
13
|
+
menuContainer,
|
|
14
|
+
menuContainerMultiple,
|
|
15
|
+
headlinedSelect,
|
|
16
|
+
headlinedMenuContainer,
|
|
17
|
+
clearAllButton
|
|
18
|
+
};
|
|
19
|
+
export {
|
|
20
|
+
clearAllButton,
|
|
21
|
+
styles as default,
|
|
22
|
+
headlinedMenuContainer,
|
|
23
|
+
headlinedSelect,
|
|
24
|
+
hemisphericSelect,
|
|
25
|
+
isActive,
|
|
26
|
+
menuContainer,
|
|
27
|
+
menuContainerMultiple,
|
|
28
|
+
summarizedSelect
|
|
29
|
+
};
|
|
30
|
+
//# sourceMappingURL=SummarizedSelect.module.css.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SummarizedSelect.module.css.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
3
|
+
const jsxRuntime = require("react/jsx-runtime");
|
|
4
|
+
const antd = require("antd");
|
|
5
|
+
const Skeleton = (props) => {
|
|
6
|
+
return /* @__PURE__ */ jsxRuntime.jsx(antd.Skeleton, { ...props });
|
|
7
|
+
};
|
|
8
|
+
Skeleton.Node = antd.Skeleton.Node;
|
|
9
|
+
Skeleton.Avatar = antd.Skeleton.Avatar;
|
|
10
|
+
Skeleton.Input = antd.Skeleton.Input;
|
|
11
|
+
Skeleton.Image = antd.Skeleton.Image;
|
|
12
|
+
Skeleton.Button = antd.Skeleton.Button;
|
|
13
|
+
exports.Skeleton = Skeleton;
|
|
14
|
+
//# sourceMappingURL=Skeleton.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Skeleton.cjs","sources":["../../../../src/components/skeleton/Skeleton.tsx"],"sourcesContent":["import {\n Skeleton as AntdSkeleton,\n SkeletonProps as AntdSkeletonProps,\n} from 'antd'\n\ntype SkeletonProps = Expand<AntdSkeletonProps>\n\nconst Skeleton = (props: SkeletonProps) => {\n return <AntdSkeleton {...props} />\n}\n\nSkeleton.Node = AntdSkeleton.Node\nSkeleton.Avatar = AntdSkeleton.Avatar\nSkeleton.Input = AntdSkeleton.Input\nSkeleton.Image = AntdSkeleton.Image\nSkeleton.Button = AntdSkeleton.Button\n\nexport { Skeleton }\n"],"names":["jsx","AntdSkeleton"],"mappings":";;;;AAOA,MAAM,WAAW,CAAC,UAAyB;AACzC,SAAOA,+BAACC,KAAAA,UAAA,EAAc,GAAG,MAAA,CAAO;AAClC;AAEA,SAAS,OAAOA,KAAAA,SAAa;AAC7B,SAAS,SAASA,KAAAA,SAAa;AAC/B,SAAS,QAAQA,KAAAA,SAAa;AAC9B,SAAS,QAAQA,KAAAA,SAAa;AAC9B,SAAS,SAASA,KAAAA,SAAa;;"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { jsx } from "react/jsx-runtime";
|
|
2
|
+
import { Skeleton as Skeleton$1 } from "antd";
|
|
3
|
+
const Skeleton = (props) => {
|
|
4
|
+
return /* @__PURE__ */ jsx(Skeleton$1, { ...props });
|
|
5
|
+
};
|
|
6
|
+
Skeleton.Node = Skeleton$1.Node;
|
|
7
|
+
Skeleton.Avatar = Skeleton$1.Avatar;
|
|
8
|
+
Skeleton.Input = Skeleton$1.Input;
|
|
9
|
+
Skeleton.Image = Skeleton$1.Image;
|
|
10
|
+
Skeleton.Button = Skeleton$1.Button;
|
|
11
|
+
export {
|
|
12
|
+
Skeleton
|
|
13
|
+
};
|
|
14
|
+
//# sourceMappingURL=Skeleton.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Skeleton.js","sources":["../../../../src/components/skeleton/Skeleton.tsx"],"sourcesContent":["import {\n Skeleton as AntdSkeleton,\n SkeletonProps as AntdSkeletonProps,\n} from 'antd'\n\ntype SkeletonProps = Expand<AntdSkeletonProps>\n\nconst Skeleton = (props: SkeletonProps) => {\n return <AntdSkeleton {...props} />\n}\n\nSkeleton.Node = AntdSkeleton.Node\nSkeleton.Avatar = AntdSkeleton.Avatar\nSkeleton.Input = AntdSkeleton.Input\nSkeleton.Image = AntdSkeleton.Image\nSkeleton.Button = AntdSkeleton.Button\n\nexport { Skeleton }\n"],"names":["AntdSkeleton"],"mappings":";;AAOA,MAAM,WAAW,CAAC,UAAyB;AACzC,SAAO,oBAACA,YAAA,EAAc,GAAG,MAAA,CAAO;AAClC;AAEA,SAAS,OAAOA,WAAa;AAC7B,SAAS,SAASA,WAAa;AAC/B,SAAS,QAAQA,WAAa;AAC9B,SAAS,QAAQA,WAAa;AAC9B,SAAS,SAASA,WAAa;"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
3
|
+
const jsxRuntime = require("react/jsx-runtime");
|
|
4
|
+
const antd = require("antd");
|
|
5
|
+
const Icon = require("@ant-design/icons");
|
|
6
|
+
const ProgressCircle = require("../../svgs/ProgressCircle.svg.cjs");
|
|
7
|
+
const SpinIcon = ({ height, width }) => {
|
|
8
|
+
return /* @__PURE__ */ jsxRuntime.jsx(Icon, { spin: true, component: () => /* @__PURE__ */ jsxRuntime.jsx(ProgressCircle, {}), style: { height, width } });
|
|
9
|
+
};
|
|
10
|
+
const Spinner = ({ size = 80, className }) => {
|
|
11
|
+
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
12
|
+
antd.Spin,
|
|
13
|
+
{
|
|
14
|
+
className,
|
|
15
|
+
indicator: /* @__PURE__ */ jsxRuntime.jsx(SpinIcon, { height: size, width: size })
|
|
16
|
+
}
|
|
17
|
+
);
|
|
18
|
+
};
|
|
19
|
+
exports.Spinner = Spinner;
|
|
20
|
+
//# sourceMappingURL=Spinner.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Spinner.cjs","sources":["../../../../src/components/spinner/Spinner.tsx"],"sourcesContent":["import { Spin } from 'antd'\nimport Icon from '@ant-design/icons'\n\nimport ProgressCircle from '../../svgs/ProgressCircle.svg?react'\n\ntype SpinnerProps = {\n size?: number\n className?: string\n}\n\nconst SpinIcon = ({ height, width }: { height?: number; width?: number }) => {\n return (\n <Icon spin component={() => <ProgressCircle />} style={{ height, width }} />\n )\n}\n\nexport const Spinner = ({ size = 80, className }: SpinnerProps) => {\n return (\n <Spin\n className={className}\n indicator={<SpinIcon height={size} width={size} />}\n />\n )\n}\n"],"names":["jsx","Spin"],"mappings":";;;;;;AAUA,MAAM,WAAW,CAAC,EAAE,QAAQ,YAAiD;AAC3E,SACEA,2BAAAA,IAAC,MAAA,EAAK,MAAI,MAAC,WAAW,MAAMA,2BAAAA,IAAC,gBAAA,CAAA,CAAe,GAAI,OAAO,EAAE,QAAQ,QAAM,CAAG;AAE9E;AAEO,MAAM,UAAU,CAAC,EAAE,OAAO,IAAI,gBAA8B;AACjE,SACEA,2BAAAA;AAAAA,IAACC,KAAAA;AAAAA,IAAA;AAAA,MACC;AAAA,MACA,WAAWD,2BAAAA,IAAC,UAAA,EAAS,QAAQ,MAAM,OAAO,KAAA,CAAM;AAAA,IAAA;AAAA,EAAA;AAGtD;;"}
|