@thewrong/ui 0.1.0 → 0.2.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/dist/_virtual/_rolldown/runtime.cjs.js +1 -0
- package/dist/components/_shared/form-size-tokens.cjs.js +1 -0
- package/dist/components/_shared/form-size-tokens.esm.js +29 -0
- package/dist/components/action-toast/ActionToast.cjs.js +1 -0
- package/dist/components/action-toast/ActionToast.esm.js +228 -0
- package/dist/components/animated-height/AnimatedHeight.cjs.js +1 -0
- package/dist/components/animated-height/AnimatedHeight.esm.js +36 -0
- package/dist/components/badge/Badge.cjs.js +1 -0
- package/dist/components/badge/Badge.esm.js +30 -0
- package/dist/components/badge/utils.cjs.js +1 -0
- package/dist/components/badge/utils.esm.js +38 -0
- package/dist/components/button/Button.cjs.js +1 -0
- package/dist/components/button/Button.esm.js +84 -0
- package/dist/components/button/utils.cjs.js +1 -0
- package/dist/components/button/utils.esm.js +38 -0
- package/dist/components/checkbox/Checkbox.cjs.js +1 -0
- package/dist/components/checkbox/Checkbox.esm.js +68 -0
- package/dist/components/checkbox/utils.cjs.js +1 -0
- package/dist/components/checkbox/utils.esm.js +44 -0
- package/dist/components/collapsible/Collapsible.cjs.js +1 -0
- package/dist/components/collapsible/Collapsible.esm.js +19 -0
- package/dist/components/date-input/DateInput.cjs.js +1 -0
- package/dist/components/date-input/DateInput.esm.js +39 -0
- package/dist/components/date-picker/date-picker.cjs.js +1 -0
- package/dist/components/date-picker/date-picker.esm.js +231 -0
- package/dist/components/date-picker/date-range-picker.cjs.js +1 -0
- package/dist/components/date-picker/date-range-picker.esm.js +287 -0
- package/dist/components/date-picker/month-picker.cjs.js +1 -0
- package/dist/components/date-picker/month-picker.esm.js +147 -0
- package/dist/components/drawer/Drawer.cjs.js +1 -0
- package/dist/components/drawer/Drawer.esm.js +113 -0
- package/dist/components/info-tooltip/InfoTooltip.cjs.js +1 -0
- package/dist/components/info-tooltip/InfoTooltip.esm.js +24 -0
- package/dist/components/input/Input.cjs.js +1 -0
- package/dist/components/input/Input.esm.js +95 -0
- package/dist/components/input/PasswordInput.cjs.js +1 -0
- package/dist/components/input/PasswordInput.esm.js +29 -0
- package/dist/components/input/format.cjs.js +1 -0
- package/dist/components/input/format.esm.js +33 -0
- package/dist/components/input/utils.cjs.js +1 -0
- package/dist/components/input/utils.esm.js +23 -0
- package/dist/components/loading-spinner/LoadingSpinner.cjs.js +1 -0
- package/dist/components/loading-spinner/LoadingSpinner.esm.js +47 -0
- package/dist/components/modal/Modal.cjs.js +1 -0
- package/dist/components/modal/Modal.esm.js +137 -0
- package/dist/components/modal/ModalSubView.cjs.js +1 -0
- package/dist/components/modal/ModalSubView.esm.js +91 -0
- package/dist/components/modal/StandardModal.cjs.js +1 -0
- package/dist/components/modal/StandardModal.esm.js +54 -0
- package/dist/components/page-title/PageTitle.cjs.js +1 -0
- package/dist/components/page-title/PageTitle.esm.js +16 -0
- package/dist/components/popover/Popover.cjs.js +1 -0
- package/dist/components/popover/Popover.esm.js +57 -0
- package/dist/components/search-box/ExactMatchToggle.cjs.js +1 -0
- package/dist/components/search-box/ExactMatchToggle.esm.js +27 -0
- package/dist/components/search-box/SearchBox.cjs.js +1 -0
- package/dist/components/search-box/SearchBox.esm.js +154 -0
- package/dist/components/search-box/SearchBoxChips.cjs.js +1 -0
- package/dist/components/search-box/SearchBoxChips.esm.js +36 -0
- package/dist/components/search-box/SearchBoxDateRange.cjs.js +1 -0
- package/dist/components/search-box/SearchBoxDateRange.esm.js +57 -0
- package/dist/components/search-box/SearchBoxDateSingle.cjs.js +1 -0
- package/dist/components/search-box/SearchBoxDateSingle.esm.js +37 -0
- package/dist/components/search-box/SearchBoxField.cjs.js +1 -0
- package/dist/components/search-box/SearchBoxField.esm.js +48 -0
- package/dist/components/search-box/SearchBoxFloatingInput.cjs.js +1 -0
- package/dist/components/search-box/SearchBoxFloatingInput.esm.js +38 -0
- package/dist/components/search-box/SearchBoxFloatingSelect.cjs.js +1 -0
- package/dist/components/search-box/SearchBoxFloatingSelect.esm.js +74 -0
- package/dist/components/search-box/SearchBoxMonth.cjs.js +1 -0
- package/dist/components/search-box/SearchBoxMonth.esm.js +35 -0
- package/dist/components/search-box/SearchBoxMultiSelect.cjs.js +1 -0
- package/dist/components/search-box/SearchBoxMultiSelect.esm.js +78 -0
- package/dist/components/search-box/SearchBoxSheetContext.cjs.js +1 -0
- package/dist/components/search-box/SearchBoxSheetContext.esm.js +5 -0
- package/dist/components/search-box/dateRangePresets.cjs.js +1 -0
- package/dist/components/search-box/dateRangePresets.esm.js +59 -0
- package/dist/components/search-box/parseDateRange.cjs.js +1 -0
- package/dist/components/search-box/parseDateRange.esm.js +21 -0
- package/dist/components/search-box/parseSearchValues.cjs.js +1 -0
- package/dist/components/search-box/parseSearchValues.esm.js +15 -0
- package/dist/components/search-box/useSearchBoxState.cjs.js +1 -0
- package/dist/components/search-box/useSearchBoxState.esm.js +87 -0
- package/dist/components/select/MultiSelect.cjs.js +1 -0
- package/dist/components/select/MultiSelect.esm.js +277 -0
- package/dist/components/select/Select.cjs.js +1 -0
- package/dist/components/select/Select.esm.js +308 -0
- package/dist/components/select/loading-dots.cjs.js +1 -0
- package/dist/components/select/loading-dots.esm.js +23 -0
- package/dist/components/switch/Switch.cjs.js +1 -0
- package/dist/components/switch/Switch.esm.js +36 -0
- package/dist/components/switch/utils.cjs.js +1 -0
- package/dist/components/switch/utils.esm.js +39 -0
- package/dist/components/table/accordion-table.cjs.js +1 -0
- package/dist/components/table/accordion-table.esm.js +418 -0
- package/dist/components/table/column-group-utils.cjs.js +1 -0
- package/dist/components/table/column-group-utils.esm.js +53 -0
- package/dist/components/table/components/ColumnPresetSelector.cjs.js +1 -0
- package/dist/components/table/components/ColumnPresetSelector.esm.js +165 -0
- package/dist/components/table/components/ColumnSettingsTable.cjs.js +4 -0
- package/dist/components/table/components/ColumnSettingsTable.esm.js +196 -0
- package/dist/components/table/components/KeyboardNavButton.cjs.js +1 -0
- package/dist/components/table/components/KeyboardNavButton.esm.js +24 -0
- package/dist/components/table/components/PageJumpInput.cjs.js +1 -0
- package/dist/components/table/components/PageJumpInput.esm.js +53 -0
- package/dist/components/table/components/Pagination.cjs.js +1 -0
- package/dist/components/table/components/Pagination.esm.js +162 -0
- package/dist/components/table/components/PaginationFooter.cjs.js +1 -0
- package/dist/components/table/components/PaginationFooter.esm.js +80 -0
- package/dist/components/table/components/SortableHeaderCell.cjs.js +1 -0
- package/dist/components/table/components/SortableHeaderCell.esm.js +30 -0
- package/dist/components/table/hooks/useColumnPresets.cjs.js +1 -0
- package/dist/components/table/hooks/useColumnPresets.esm.js +165 -0
- package/dist/components/table/hooks/useColumnResize.cjs.js +1 -0
- package/dist/components/table/hooks/useColumnResize.esm.js +106 -0
- package/dist/components/table/hooks/useFillEmptyRows.cjs.js +1 -0
- package/dist/components/table/hooks/useFillEmptyRows.esm.js +49 -0
- package/dist/components/table/hooks/useInfiniteScroll.cjs.js +1 -0
- package/dist/components/table/hooks/useInfiniteScroll.esm.js +32 -0
- package/dist/components/table/hooks/useTableColumnState.cjs.js +1 -0
- package/dist/components/table/hooks/useTableColumnState.esm.js +46 -0
- package/dist/components/table/hooks/useTableDragSelection.cjs.js +1 -0
- package/dist/components/table/hooks/useTableDragSelection.esm.js +76 -0
- package/dist/components/table/hooks/useTableSort.cjs.js +1 -0
- package/dist/components/table/hooks/useTableSort.esm.js +30 -0
- package/dist/components/table/hooks/useVirtualTable.cjs.js +1 -0
- package/dist/components/table/hooks/useVirtualTable.esm.js +18 -0
- package/dist/components/table/mini-table.cjs.js +1 -0
- package/dist/components/table/mini-table.esm.js +126 -0
- package/dist/components/table/paginated-mini-table.cjs.js +1 -0
- package/dist/components/table/paginated-mini-table.esm.js +31 -0
- package/dist/components/table/paginated-table.cjs.js +1 -0
- package/dist/components/table/paginated-table.esm.js +31 -0
- package/dist/components/table/table.cjs.js +1 -0
- package/dist/components/table/table.esm.js +342 -0
- package/dist/components/table/utils.cjs.js +37 -0
- package/dist/components/table/utils.esm.js +16 -0
- package/dist/components/table-checkbox/TableCheckbox.cjs.js +1 -0
- package/dist/components/table-checkbox/TableCheckbox.esm.js +39 -0
- package/dist/components/table-page-layout/TablePageLayout.cjs.js +1 -0
- package/dist/components/table-page-layout/TablePageLayout.esm.js +37 -0
- package/dist/components/textarea/Textarea.cjs.js +1 -0
- package/dist/components/textarea/Textarea.esm.js +62 -0
- package/dist/components/toast/ToastProvider.cjs.js +1 -0
- package/dist/components/toast/ToastProvider.esm.js +82 -0
- package/dist/components/toast/index.esm.js +3 -0
- package/dist/components/toolbar/Toolbar.cjs.js +1 -0
- package/dist/components/toolbar/Toolbar.esm.js +148 -0
- package/dist/components/tooltip/Tooltip.cjs.js +1 -0
- package/dist/components/tooltip/Tooltip.esm.js +39 -0
- package/dist/hooks/useBottomSheetDrag.cjs.js +1 -0
- package/dist/hooks/useBottomSheetDrag.esm.js +17 -0
- package/dist/hooks/useClickOutside.cjs.js +1 -0
- package/dist/hooks/useClickOutside.esm.js +20 -0
- package/dist/hooks/useMediaQuery.cjs.js +1 -0
- package/dist/hooks/useMediaQuery.esm.js +15 -0
- package/dist/hooks/useScrollLock.cjs.js +1 -0
- package/dist/hooks/useScrollLock.esm.js +16 -0
- package/dist/hooks.cjs.js +1 -0
- package/dist/hooks.esm.js +5 -0
- package/dist/index.cjs.js +1 -40
- package/dist/index.esm.js +58 -0
- package/dist/lib/Portal.cjs.js +1 -0
- package/dist/lib/Portal.esm.js +11 -0
- package/dist/lib/column-preset-storage.cjs.js +1 -0
- package/dist/lib/column-preset-storage.esm.js +123 -0
- package/dist/lib/overlay-stack.cjs.js +1 -0
- package/dist/lib/overlay-stack.esm.js +28 -0
- package/dist/lib/utils.cjs.js +1 -0
- package/dist/lib/utils.esm.js +11 -0
- package/dist/node_modules/clsx/dist/clsx.cjs.js +1 -0
- package/dist/node_modules/clsx/dist/clsx.esm.js +16 -0
- package/dist/node_modules/lucide-react/dist/esm/Icon.cjs.js +1 -0
- package/dist/node_modules/lucide-react/dist/esm/Icon.esm.js +23 -0
- package/dist/node_modules/lucide-react/dist/esm/context.cjs.js +1 -0
- package/dist/node_modules/lucide-react/dist/esm/context.esm.js +6 -0
- package/dist/node_modules/lucide-react/dist/esm/createLucideIcon.cjs.js +1 -0
- package/dist/node_modules/lucide-react/dist/esm/createLucideIcon.esm.js +17 -0
- package/dist/node_modules/lucide-react/dist/esm/defaultAttributes.cjs.js +1 -0
- package/dist/node_modules/lucide-react/dist/esm/defaultAttributes.esm.js +14 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/arrow-left.cjs.js +1 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/arrow-left.esm.js +10 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/calendar.cjs.js +1 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/calendar.esm.js +25 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/check.cjs.js +1 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/check.esm.js +7 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/chevron-down.cjs.js +1 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/chevron-down.esm.js +7 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/chevron-left.cjs.js +1 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/chevron-left.esm.js +7 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/chevron-right.cjs.js +1 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/chevron-right.esm.js +7 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/chevrons-left.cjs.js +1 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/chevrons-left.esm.js +10 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/chevrons-right.cjs.js +1 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/chevrons-right.esm.js +10 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/circle-check.cjs.js +1 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/circle-check.esm.js +12 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/circle-x.cjs.js +1 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/circle-x.esm.js +19 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/eye-off.cjs.js +1 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/eye-off.esm.js +21 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/eye.cjs.js +1 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/eye.esm.js +12 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/grip-vertical.cjs.js +1 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/grip-vertical.esm.js +41 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/info.cjs.js +1 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/info.esm.js +19 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/keyboard.cjs.js +1 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/keyboard.esm.js +45 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/list-filter.cjs.js +1 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/list-filter.esm.js +17 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/loader-circle.cjs.js +1 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/loader-circle.esm.js +7 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/minus.cjs.js +1 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/minus.esm.js +7 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/rotate-ccw.cjs.js +1 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/rotate-ccw.esm.js +10 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/save.cjs.js +1 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/save.esm.js +17 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/search.cjs.js +1 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/search.esm.js +12 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/settings.cjs.js +1 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/settings.esm.js +12 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/triangle-alert.cjs.js +1 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/triangle-alert.esm.js +17 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/wrench.cjs.js +1 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/wrench.esm.js +7 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/x.cjs.js +1 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/x.esm.js +10 -0
- package/dist/node_modules/lucide-react/dist/esm/shared/src/utils/hasA11yProp.cjs.js +1 -0
- package/dist/node_modules/lucide-react/dist/esm/shared/src/utils/hasA11yProp.esm.js +7 -0
- package/dist/node_modules/lucide-react/dist/esm/shared/src/utils/mergeClasses.cjs.js +1 -0
- package/dist/node_modules/lucide-react/dist/esm/shared/src/utils/mergeClasses.esm.js +4 -0
- package/dist/node_modules/lucide-react/dist/esm/shared/src/utils/toCamelCase.cjs.js +1 -0
- package/dist/node_modules/lucide-react/dist/esm/shared/src/utils/toCamelCase.esm.js +4 -0
- package/dist/node_modules/lucide-react/dist/esm/shared/src/utils/toKebabCase.cjs.js +1 -0
- package/dist/node_modules/lucide-react/dist/esm/shared/src/utils/toKebabCase.esm.js +4 -0
- package/dist/node_modules/lucide-react/dist/esm/shared/src/utils/toPascalCase.cjs.js +1 -0
- package/dist/node_modules/lucide-react/dist/esm/shared/src/utils/toPascalCase.esm.js +8 -0
- package/dist/node_modules/tailwind-merge/dist/bundle-mjs.cjs.js +1 -0
- package/dist/node_modules/tailwind-merge/dist/bundle-mjs.esm.js +1714 -0
- package/dist/node_modules/use-debounce/dist/index.module.cjs.js +1 -0
- package/dist/node_modules/use-debounce/dist/index.module.esm.js +70 -0
- package/dist/src/components/action-toast/ActionToast.d.ts +6 -1
- package/dist/src/components/button/Button.d.ts +16 -0
- package/dist/src/components/drawer/Drawer.d.ts +6 -1
- package/dist/src/components/info-tooltip/InfoTooltip.d.ts +7 -0
- package/dist/src/components/loading-spinner/LoadingSpinner.d.ts +7 -0
- package/dist/src/components/modal/Modal.d.ts +7 -1
- package/dist/src/components/popover/Popover.d.ts +19 -1
- package/dist/src/components/tooltip/Tooltip.d.ts +10 -0
- package/dist/ui.css +1 -1
- package/llms.txt +91 -0
- package/package.json +10 -4
- package/dist/index.es.js +0 -8066
|
@@ -0,0 +1,277 @@
|
|
|
1
|
+
import { Check as e } from "../../node_modules/lucide-react/dist/esm/icons/check.esm.js";
|
|
2
|
+
import { ChevronDown as t } from "../../node_modules/lucide-react/dist/esm/icons/chevron-down.esm.js";
|
|
3
|
+
import { CircleX as n } from "../../node_modules/lucide-react/dist/esm/icons/circle-x.esm.js";
|
|
4
|
+
import { Search as r } from "../../node_modules/lucide-react/dist/esm/icons/search.esm.js";
|
|
5
|
+
import { CHEVRON_SIZE_CLASS as i, SLOT_BADGE_TEXT_CLASS as a, SLOT_CHILD_ICON_CLASS as ee, SLOT_GAP_CLASS as te, SLOT_ICON_SIZE_CLASS as ne } from "../_shared/form-size-tokens.esm.js";
|
|
6
|
+
import { getInputContainerClasses as re, getInputHelpClasses as ie, getInputLabelClasses as ae, getInputTrailingIconColor as oe, getInputVariantClasses as se } from "../input/utils.esm.js";
|
|
7
|
+
import { LoadingDots as ce } from "./loading-dots.esm.js";
|
|
8
|
+
import { forwardRef as o, useEffect as s, useId as le, useLayoutEffect as ue, useMemo as c, useRef as l, useState as u } from "react";
|
|
9
|
+
import { jsx as d, jsxs as f } from "react/jsx-runtime";
|
|
10
|
+
import { FloatingFocusManager as de, FloatingPortal as fe, autoUpdate as pe, flip as me, offset as he, shift as ge, size as _e, useClick as ve, useDismiss as ye, useFloating as be, useInteractions as xe, useListNavigation as Se, useRole as Ce } from "@floating-ui/react";
|
|
11
|
+
//#region src/components/select/MultiSelect.tsx
|
|
12
|
+
var we = (e) => e.length === 0 ? "" : e.map((e) => e.label).join(", "), Te = (e) => e.length === 0 ? "" : `${e.length}개 선택`, p = o(function({ options: o, value: p, onChange: m, variant: Ee, selectSize: h = "medium", label: g, labelOption: _ = "appear", help: v, placeholder: De = "선택해주세요", hasError: y = !1, disabled: b = !1, suffix: x, trailingIcon: S, clearable: C = !1, badge: w, searchable: T = !1, searchPlaceholder: Oe = "검색...", onSearchChange: E, isSearchLoading: D = !1, containerProps: ke, containerRef: Ae, className: je = "", panelClassName: Me = "", formatTrigger: Ne = we, formatCollapsed: Pe = Te, disableAutoCollapse: O = !1, showSelectAll: Fe = !1, id: k, name: A, "data-testid": Ie }, j) {
|
|
13
|
+
let [M, Le] = u(!1), [N, P] = u(null), [F, I] = u(""), [Re, L] = u(!1), R = l([]), z = l(null), B = l(null), V = l(null), H = le(), ze = (e) => `${H}-opt-${e}`, Be = N === null ? void 0 : ze(N), U = typeof E == "function", W = c(() => {
|
|
14
|
+
if (!T || U || F.length === 0) return o;
|
|
15
|
+
let e = F.toLowerCase();
|
|
16
|
+
return o.filter((t) => t.label.toLowerCase().includes(e));
|
|
17
|
+
}, [
|
|
18
|
+
o,
|
|
19
|
+
T,
|
|
20
|
+
U,
|
|
21
|
+
F
|
|
22
|
+
]), G = c(() => new Set(p), [p]), K = c(() => o.filter((e) => G.has(String(e.value))), [o, G]), { refs: Ve, floatingStyles: He, context: q } = be({
|
|
23
|
+
open: M,
|
|
24
|
+
onOpenChange: Le,
|
|
25
|
+
placement: "bottom-start",
|
|
26
|
+
whileElementsMounted: pe,
|
|
27
|
+
middleware: [
|
|
28
|
+
he(4),
|
|
29
|
+
me({ padding: 8 }),
|
|
30
|
+
ge({ padding: 8 }),
|
|
31
|
+
_e({
|
|
32
|
+
apply({ rects: e, elements: t, availableHeight: n }) {
|
|
33
|
+
Object.assign(t.floating.style, {
|
|
34
|
+
minWidth: `${e.reference.width}px`,
|
|
35
|
+
maxHeight: `${Math.min(n, 320)}px`
|
|
36
|
+
});
|
|
37
|
+
},
|
|
38
|
+
padding: 8
|
|
39
|
+
})
|
|
40
|
+
]
|
|
41
|
+
}), { getReferenceProps: Ue, getFloatingProps: We, getItemProps: Ge } = xe([
|
|
42
|
+
ve(q, { enabled: !b }),
|
|
43
|
+
ye(q),
|
|
44
|
+
Ce(q, { role: "listbox" }),
|
|
45
|
+
Se(q, {
|
|
46
|
+
listRef: R,
|
|
47
|
+
activeIndex: N,
|
|
48
|
+
onNavigate: P,
|
|
49
|
+
virtual: T,
|
|
50
|
+
loop: !0
|
|
51
|
+
})
|
|
52
|
+
]);
|
|
53
|
+
s(() => {
|
|
54
|
+
M || (I(""), P(null), U && E(""));
|
|
55
|
+
}, [
|
|
56
|
+
M,
|
|
57
|
+
U,
|
|
58
|
+
E
|
|
59
|
+
]), s(() => {
|
|
60
|
+
M && T && z.current && z.current.focus();
|
|
61
|
+
}, [M, T]), ue(() => {
|
|
62
|
+
if (O) {
|
|
63
|
+
L(!1);
|
|
64
|
+
return;
|
|
65
|
+
}
|
|
66
|
+
let e = B.current, t = V.current;
|
|
67
|
+
if (!e || !t) return;
|
|
68
|
+
let n = () => {
|
|
69
|
+
let n = t.scrollWidth, r = e.clientWidth;
|
|
70
|
+
L(n > r - 1);
|
|
71
|
+
};
|
|
72
|
+
n();
|
|
73
|
+
let r = new ResizeObserver(() => {
|
|
74
|
+
requestAnimationFrame(n);
|
|
75
|
+
});
|
|
76
|
+
return r.observe(e), () => r.disconnect();
|
|
77
|
+
}, [O, p.join(",")]);
|
|
78
|
+
let J = (e) => {
|
|
79
|
+
let t = new Set(G);
|
|
80
|
+
t.has(e) ? t.delete(e) : t.add(e), m(o.filter((e) => t.has(String(e.value))).map((e) => String(e.value)));
|
|
81
|
+
}, Ke = (e) => {
|
|
82
|
+
e.stopPropagation(), m([]);
|
|
83
|
+
}, Y = W.filter((e) => !e.disabled).map((e) => String(e.value)), qe = Y.length > 0 && Y.every((e) => G.has(e)), Je = () => {
|
|
84
|
+
if (qe) {
|
|
85
|
+
let e = new Set(Y);
|
|
86
|
+
m(p.filter((t) => !e.has(t)));
|
|
87
|
+
} else {
|
|
88
|
+
let e = new Set([...p, ...Y]);
|
|
89
|
+
m(o.filter((t) => e.has(String(t.value))).map((e) => String(e.value)));
|
|
90
|
+
}
|
|
91
|
+
}, Ye = (e) => {
|
|
92
|
+
!C || b || p.length === 0 || M || (e.key === "Backspace" || e.key === "Delete") && (e.preventDefault(), m([]));
|
|
93
|
+
}, Xe = (e) => {
|
|
94
|
+
let t = e.target.value;
|
|
95
|
+
I(t), U && E(t);
|
|
96
|
+
}, Ze = (e) => {
|
|
97
|
+
if (!e.nativeEvent.isComposing && e.key === "Enter" && N !== null) {
|
|
98
|
+
e.preventDefault();
|
|
99
|
+
let t = W[N];
|
|
100
|
+
t && !t.disabled && J(String(t.value));
|
|
101
|
+
}
|
|
102
|
+
}, X = K.length > 0, Qe = _ === "sustain" || _ === "appear" && X, $e = X ? Ne(K) : "", et = X ? Pe(K) : "", tt = X ? Re ? et : $e : De, nt = te[h], Z = ee[h], rt = a[h], it = ne[h], at = i[h], ot = se(Ee, y, b, h), Q = oe(y, b, X || M), $ = h === "mini" ? "text-xs" : h === "large" ? "text-base" : "text-sm", st = b ? "text-text-disabled" : y ? "text-text-danger" : X ? "text-text-primary" : "text-text-tertiary";
|
|
103
|
+
return /* @__PURE__ */ f("div", {
|
|
104
|
+
ref: Ae,
|
|
105
|
+
className: re(),
|
|
106
|
+
...ke,
|
|
107
|
+
children: [
|
|
108
|
+
!O && X && /* @__PURE__ */ d("span", {
|
|
109
|
+
ref: V,
|
|
110
|
+
"aria-hidden": !0,
|
|
111
|
+
className: `pointer-events-none fixed left-0 -top-[9999px] whitespace-nowrap ${$}`,
|
|
112
|
+
children: $e
|
|
113
|
+
}),
|
|
114
|
+
Qe && g && /* @__PURE__ */ d("label", {
|
|
115
|
+
className: ae(Ee, y),
|
|
116
|
+
htmlFor: k,
|
|
117
|
+
children: g
|
|
118
|
+
}),
|
|
119
|
+
/* @__PURE__ */ f("button", {
|
|
120
|
+
ref: (e) => {
|
|
121
|
+
Ve.setReference(e), typeof j == "function" ? j(e) : j && (j.current = e);
|
|
122
|
+
},
|
|
123
|
+
id: k,
|
|
124
|
+
type: "button",
|
|
125
|
+
disabled: b,
|
|
126
|
+
"aria-haspopup": "listbox",
|
|
127
|
+
"aria-expanded": M,
|
|
128
|
+
"aria-controls": M ? H : void 0,
|
|
129
|
+
"aria-activedescendant": Be,
|
|
130
|
+
"data-testid": Ie,
|
|
131
|
+
...Ue({ onKeyDown: Ye }),
|
|
132
|
+
className: `${ot} flex w-full items-center ${nt} ${b ? "cursor-not-allowed" : "cursor-pointer"} ${je}`.trim().replace(/\s+/g, " "),
|
|
133
|
+
children: [
|
|
134
|
+
/* @__PURE__ */ d("span", {
|
|
135
|
+
ref: B,
|
|
136
|
+
className: `flex-1 truncate text-left ${$} ${st}`,
|
|
137
|
+
children: tt
|
|
138
|
+
}),
|
|
139
|
+
x && /* @__PURE__ */ d("span", {
|
|
140
|
+
className: `shrink-0 whitespace-nowrap ${$} ${Q}`,
|
|
141
|
+
children: x
|
|
142
|
+
}),
|
|
143
|
+
S && /* @__PURE__ */ d("span", {
|
|
144
|
+
className: `flex shrink-0 items-center ${Q} ${Z}`,
|
|
145
|
+
children: S
|
|
146
|
+
}),
|
|
147
|
+
C && !b && X && /* @__PURE__ */ d("span", {
|
|
148
|
+
role: "button",
|
|
149
|
+
tabIndex: -1,
|
|
150
|
+
onClick: Ke,
|
|
151
|
+
"aria-label": "선택 모두 지우기",
|
|
152
|
+
className: `flex shrink-0 cursor-pointer items-center ${Q} hover:text-text-primary`,
|
|
153
|
+
children: /* @__PURE__ */ d(n, {
|
|
154
|
+
className: it,
|
|
155
|
+
strokeWidth: 1.5,
|
|
156
|
+
"aria-hidden": !0
|
|
157
|
+
})
|
|
158
|
+
}),
|
|
159
|
+
w && /* @__PURE__ */ d("span", {
|
|
160
|
+
className: `flex shrink-0 items-center ${Z} ${rt}`,
|
|
161
|
+
children: w
|
|
162
|
+
}),
|
|
163
|
+
/* @__PURE__ */ d(t, {
|
|
164
|
+
className: `shrink-0 transition-transform ${at} ${Q} ${M ? "rotate-180" : ""}`,
|
|
165
|
+
strokeWidth: 1.5,
|
|
166
|
+
"aria-hidden": !0
|
|
167
|
+
})
|
|
168
|
+
]
|
|
169
|
+
}),
|
|
170
|
+
A && /* @__PURE__ */ d("input", {
|
|
171
|
+
type: "hidden",
|
|
172
|
+
name: A,
|
|
173
|
+
value: p.join(",")
|
|
174
|
+
}),
|
|
175
|
+
M && /* @__PURE__ */ d(fe, { children: /* @__PURE__ */ d(de, {
|
|
176
|
+
context: q,
|
|
177
|
+
modal: !1,
|
|
178
|
+
initialFocus: T ? -1 : 0,
|
|
179
|
+
children: /* @__PURE__ */ f("div", {
|
|
180
|
+
ref: Ve.setFloating,
|
|
181
|
+
id: H,
|
|
182
|
+
style: He,
|
|
183
|
+
...We(),
|
|
184
|
+
className: `z-9999 overflow-hidden rounded-lg border border-border-tertiary bg-bg-white shadow-lg dark:border-border-secondary dark:bg-neutral-800 ${Me}`,
|
|
185
|
+
children: [
|
|
186
|
+
T && /* @__PURE__ */ f("div", {
|
|
187
|
+
className: "flex items-center gap-2 border-b border-border-tertiary px-3 py-2 dark:border-border-secondary",
|
|
188
|
+
children: [
|
|
189
|
+
/* @__PURE__ */ d(r, {
|
|
190
|
+
className: "h-4 w-4 shrink-0 text-icon-tertiary",
|
|
191
|
+
"aria-hidden": !0
|
|
192
|
+
}),
|
|
193
|
+
/* @__PURE__ */ d("input", {
|
|
194
|
+
ref: z,
|
|
195
|
+
type: "text",
|
|
196
|
+
value: F,
|
|
197
|
+
onChange: Xe,
|
|
198
|
+
onKeyDown: Ze,
|
|
199
|
+
placeholder: Oe,
|
|
200
|
+
className: "flex-1 bg-transparent text-sm outline-hidden placeholder:text-text-tertiary"
|
|
201
|
+
}),
|
|
202
|
+
D && /* @__PURE__ */ d(ce, { className: "h-4 w-4 shrink-0 text-icon-tertiary" })
|
|
203
|
+
]
|
|
204
|
+
}),
|
|
205
|
+
Fe && W.length > 0 && /* @__PURE__ */ f("button", {
|
|
206
|
+
type: "button",
|
|
207
|
+
onClick: Je,
|
|
208
|
+
className: "flex w-full items-center justify-between border-b border-border-tertiary px-3 py-2 text-xs text-text-secondary transition-colors hover:bg-neutral-50 dark:border-border-secondary dark:hover:bg-neutral-700",
|
|
209
|
+
children: [/* @__PURE__ */ d("span", { children: qe ? "전체 해제" : "전체 선택" }), /* @__PURE__ */ f("span", {
|
|
210
|
+
className: "text-text-tertiary",
|
|
211
|
+
children: [Y.length, "개"]
|
|
212
|
+
})]
|
|
213
|
+
}),
|
|
214
|
+
/* @__PURE__ */ d("div", {
|
|
215
|
+
className: "max-h-72 overflow-y-auto py-1",
|
|
216
|
+
children: W.length === 0 ? /* @__PURE__ */ d("div", {
|
|
217
|
+
className: "px-3 py-4 text-center text-sm text-text-tertiary",
|
|
218
|
+
children: D ? "검색 중..." : "옵션이 없어요"
|
|
219
|
+
}) : W.map((t, n) => {
|
|
220
|
+
let r = String(t.value), i = G.has(r), a = N === n;
|
|
221
|
+
return /* @__PURE__ */ f("div", {
|
|
222
|
+
id: ze(n),
|
|
223
|
+
ref: (e) => {
|
|
224
|
+
R.current[n] = e;
|
|
225
|
+
},
|
|
226
|
+
role: "option",
|
|
227
|
+
"aria-selected": i,
|
|
228
|
+
"aria-disabled": t.disabled || void 0,
|
|
229
|
+
tabIndex: a ? 0 : -1,
|
|
230
|
+
...Ge({
|
|
231
|
+
onClick: () => {
|
|
232
|
+
t.disabled || J(r);
|
|
233
|
+
},
|
|
234
|
+
onKeyDown: (e) => {
|
|
235
|
+
t.disabled || (e.key === "Enter" || e.key === " ") && (e.preventDefault(), J(r));
|
|
236
|
+
}
|
|
237
|
+
}),
|
|
238
|
+
className: `flex cursor-pointer items-start gap-3 px-3 py-2 text-sm transition-colors ${t.disabled ? "cursor-not-allowed text-text-disabled" : a ? "bg-neutral-100 text-text-primary dark:bg-neutral-700" : "text-text-primary hover:bg-neutral-50 dark:hover:bg-neutral-700"}`,
|
|
239
|
+
children: [
|
|
240
|
+
/* @__PURE__ */ d("span", {
|
|
241
|
+
className: `mt-0.5 flex h-4 w-4 shrink-0 items-center justify-center rounded border ${i ? "border-primary-500 bg-primary-500 text-white" : "border-border-tertiary dark:border-border-secondary"}`,
|
|
242
|
+
"aria-hidden": !0,
|
|
243
|
+
children: i && /* @__PURE__ */ d(e, {
|
|
244
|
+
className: "h-3 w-3",
|
|
245
|
+
strokeWidth: 3
|
|
246
|
+
})
|
|
247
|
+
}),
|
|
248
|
+
/* @__PURE__ */ f("div", {
|
|
249
|
+
className: "min-w-0 flex-1",
|
|
250
|
+
children: [/* @__PURE__ */ d("div", {
|
|
251
|
+
className: `truncate ${i ? "font-medium" : ""}`,
|
|
252
|
+
children: t.label
|
|
253
|
+
}), t.description && /* @__PURE__ */ d("div", {
|
|
254
|
+
className: "mt-0.5 truncate text-xs text-text-tertiary",
|
|
255
|
+
children: t.description
|
|
256
|
+
})]
|
|
257
|
+
}),
|
|
258
|
+
t.trailing && /* @__PURE__ */ d("span", {
|
|
259
|
+
className: "shrink-0 text-xs text-text-tertiary",
|
|
260
|
+
children: t.trailing
|
|
261
|
+
})
|
|
262
|
+
]
|
|
263
|
+
}, r);
|
|
264
|
+
})
|
|
265
|
+
})
|
|
266
|
+
]
|
|
267
|
+
})
|
|
268
|
+
}) }),
|
|
269
|
+
v && /* @__PURE__ */ d("div", {
|
|
270
|
+
className: ie(y),
|
|
271
|
+
children: v
|
|
272
|
+
})
|
|
273
|
+
]
|
|
274
|
+
});
|
|
275
|
+
});
|
|
276
|
+
//#endregion
|
|
277
|
+
export { p as MultiSelect };
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
const e=require("../../node_modules/lucide-react/dist/esm/icons/chevron-down.cjs.js"),t=require("../../node_modules/lucide-react/dist/esm/icons/circle-x.cjs.js"),n=require("../_shared/form-size-tokens.cjs.js"),r=require("../input/utils.cjs.js"),ee=require("../../node_modules/use-debounce/dist/index.module.cjs.js"),i=require("./loading-dots.cjs.js");let a=require("react"),o=require("react/jsx-runtime"),s=require("@floating-ui/react");var c=(0,a.forwardRef)(function({options:c,value:l,onChange:u,variant:te,selectSize:d=`medium`,label:f,labelOption:p=`appear`,help:ne,placeholder:re=`선택해주세요`,hasError:m=!1,disabled:h=!1,suffix:g,trailingIcon:_,clearable:v=!1,badge:y,searchable:b=!1,searchPlaceholder:ie=`검색...`,onSearchChange:x,isSearchLoading:S=!1,containerProps:ae,containerRef:oe,className:se=``,panelClassName:ce=``,id:C,name:w,onLoadMore:T,hasMore:E=!1,searchDebounceMs:D=300,"data-testid":le},O){let[k,A]=(0,a.useState)(!1),[j,M]=(0,a.useState)(null),[N,P]=(0,a.useState)(``),ue=(0,a.useRef)([]),de=(0,a.useRef)(null),[F,fe]=(0,a.useState)(null),[I,pe]=(0,a.useState)(null),L=(0,a.useId)(),R=e=>`${L}-opt-${e}`,z=j===null?void 0:R(j),B=typeof x==`function`,V=D===!1||D<=0?0:D,H=ee.c(e=>{x?.(e)},V),U=(e,t)=>{B&&(t||V===0?(H.cancel(),x(e)):H(e))},W=c.find(e=>String(e.value)===l),me=b&&(W!==void 0&&N===W.label||W===void 0&&l!==``&&N!==``),G=(0,a.useMemo)(()=>{if(!b||B||N.length===0||me)return c;let e=N.toLowerCase();return c.filter(t=>t.label.toLowerCase().includes(e))},[c,b,B,N,me]),{refs:K,floatingStyles:he,context:q}=(0,s.useFloating)({open:k,onOpenChange:A,placement:`bottom-start`,whileElementsMounted:s.autoUpdate,middleware:[(0,s.offset)(4),(0,s.flip)({padding:8}),(0,s.shift)({padding:8}),(0,s.size)({apply({rects:e,elements:t,availableHeight:n}){Object.assign(t.floating.style,{minWidth:`${e.reference.width}px`,maxHeight:`${Math.min(n,320)}px`})},padding:8})]}),{getReferenceProps:ge,getFloatingProps:_e,getItemProps:ve}=(0,s.useInteractions)([(0,s.useClick)(q,{enabled:!h&&!b}),(0,s.useDismiss)(q),(0,s.useRole)(q,{role:`listbox`}),(0,s.useListNavigation)(q,{listRef:ue,activeIndex:j,onNavigate:M,virtual:b,loop:!0}),(0,s.useTypeahead)(q,{listRef:{current:G.map(e=>e.label)},activeIndex:j,onMatch:M,enabled:!b})]),ye=(0,a.useRef)(!1);(0,a.useEffect)(()=>{if(k){if(ye.current=!0,b){let e=W?.label??``;P(e),e!==``&&requestAnimationFrame(()=>{de.current?.select()})}}else P(``),M(null),ye.current&&U(``,!0)},[k,b,B,x]),(0,a.useEffect)(()=>{if(!k||!T||!E||!F||!I)return;let e=new IntersectionObserver(e=>{for(let t of e)t.isIntersecting&&!S&&T()},{root:I,rootMargin:`0px 0px 80px 0px`});return e.observe(F),()=>e.disconnect()},[k,T,E,S,F,I]);let J=e=>{u(e),A(!1)},be=e=>{e.stopPropagation(),u(``),P(``)},xe=e=>{b||!v||h||!Y||k||(e.key===`Backspace`||e.key===`Delete`)&&(e.preventDefault(),u(``))},Se=e=>{let t=e.target.value;P(t),U(t,!1),k||A(!0)},Ce=e=>{if(!e.nativeEvent.isComposing){if(e.key===`Enter`&&j!==null){e.preventDefault();let t=G[j];t&&!t.disabled&&J(String(t.value));return}(e.key===`Backspace`||e.key===`Delete`)&&W&&(!k||N===``)&&(e.preventDefault(),u(``))}},we=p===`sustain`||p===`appear`&&!!W,Y=!!W,Te=W?W.label:re,Ee=k?N:W?.label??``,De=n.SLOT_GAP_CLASS[d],X=n.SLOT_CHILD_ICON_CLASS[d],Oe=n.SLOT_BADGE_TEXT_CLASS[d],Z=n.SLOT_ICON_SIZE_CLASS[d],ke=n.CHEVRON_SIZE_CLASS[d],Ae=r.getInputVariantClasses(te,m,h,d),Q=r.getInputTrailingIconColor(m,h,Y||k),$=d===`mini`?`text-xs`:d===`large`?`text-base`:`text-sm`,je=h?`text-text-disabled`:m?`text-text-danger`:Y?`text-text-primary`:`text-text-tertiary`;return(0,o.jsxs)(`div`,{ref:oe,className:r.getInputContainerClasses(),...ae,children:[we&&f&&(0,o.jsx)(`label`,{className:r.getInputLabelClasses(te,m),htmlFor:C,children:f}),b?(0,o.jsxs)(`div`,{ref:e=>{K.setReference(e)},...ge(),className:`${Ae} flex w-full items-center ${De} ${h?`cursor-not-allowed`:`cursor-text`} ${se}`.trim().replace(/\s+/g,` `),children:[(0,o.jsx)(`input`,{ref:e=>{de.current=e,typeof O==`function`?O(e):O&&(O.current=e)},id:C,type:`text`,role:`combobox`,readOnly:!k,disabled:h,"aria-haspopup":`listbox`,"aria-expanded":k,"aria-controls":k?L:void 0,"aria-activedescendant":z,"aria-autocomplete":`list`,"data-testid":le,value:Ee,placeholder:W?ie:re,onChange:Se,onKeyDown:Ce,onClick:()=>{h||k||A(!0)},className:`flex-1 bg-transparent text-left outline-hidden ${$} ${je} ${h?`cursor-not-allowed`:``} placeholder:text-text-tertiary`}),g&&(0,o.jsx)(`span`,{className:`shrink-0 whitespace-nowrap ${$} ${Q}`,children:g}),_&&(0,o.jsx)(`span`,{className:`flex shrink-0 items-center ${Q} ${X}`,children:_}),S&&(0,o.jsx)(i.LoadingDots,{className:`shrink-0 text-icon-tertiary ${Z}`}),v&&!h&&Y&&(0,o.jsx)(`button`,{type:`button`,tabIndex:-1,onClick:be,"aria-label":`선택 지우기`,className:`flex shrink-0 cursor-pointer items-center rounded ${Q} hover:text-text-primary focus:outline-hidden focus-visible:ring-2 focus-visible:ring-primary-500/40`,children:(0,o.jsx)(t.CircleX,{className:Z,strokeWidth:1.5,"aria-hidden":!0})}),y&&(0,o.jsx)(`span`,{className:`flex shrink-0 items-center ${X} ${Oe}`,children:y}),(0,o.jsx)(e.ChevronDown,{className:`shrink-0 transition-transform ${ke} ${Q} ${k?`rotate-180`:``}`,strokeWidth:1.5,"aria-hidden":!0})]}):(0,o.jsxs)(`button`,{ref:e=>{K.setReference(e),typeof O==`function`?O(e):O&&(O.current=e)},id:C,type:`button`,disabled:h,"aria-haspopup":`listbox`,"aria-expanded":k,"aria-controls":k?L:void 0,"aria-activedescendant":z,"data-testid":le,...ge({onKeyDown:xe}),className:`${Ae} flex w-full items-center ${De} ${h?`cursor-not-allowed`:`cursor-pointer`} ${se}`.trim().replace(/\s+/g,` `),children:[(0,o.jsx)(`span`,{className:`flex-1 truncate text-left ${$} ${je}`,children:Te}),g&&(0,o.jsx)(`span`,{className:`shrink-0 whitespace-nowrap ${$} ${Q}`,children:g}),_&&(0,o.jsx)(`span`,{className:`flex shrink-0 items-center ${Q} ${X}`,children:_}),v&&!h&&Y&&(0,o.jsx)(`span`,{role:`button`,tabIndex:-1,onClick:be,"aria-label":`선택 지우기`,className:`flex shrink-0 cursor-pointer items-center ${Q} hover:text-text-primary`,children:(0,o.jsx)(t.CircleX,{className:Z,strokeWidth:1.5,"aria-hidden":!0})}),y&&(0,o.jsx)(`span`,{className:`flex shrink-0 items-center ${X} ${Oe}`,children:y}),(0,o.jsx)(e.ChevronDown,{className:`shrink-0 transition-transform ${ke} ${Q} ${k?`rotate-180`:``}`,strokeWidth:1.5,"aria-hidden":!0})]}),w&&(0,o.jsx)(`input`,{type:`hidden`,name:w,value:l}),k&&(0,o.jsx)(s.FloatingPortal,{children:(0,o.jsx)(s.FloatingFocusManager,{context:q,modal:!1,initialFocus:b?-1:0,children:(0,o.jsx)(`div`,{ref:K.setFloating,id:L,style:he,..._e(),className:`z-9999 overflow-hidden rounded-lg border border-border-tertiary bg-bg-white shadow-lg dark:border-border-secondary dark:bg-neutral-800 ${ce}`,children:(0,o.jsxs)(`div`,{ref:pe,className:`max-h-72 overflow-y-auto py-1`,children:[G.length===0?(0,o.jsx)(`div`,{className:`px-3 py-4 text-center text-sm text-text-tertiary`,children:S?`검색 중...`:`옵션이 없어요`}):G.map((e,t)=>{let n=String(e.value)===l,r=j===t;return(0,o.jsxs)(`div`,{id:R(t),ref:e=>{ue.current[t]=e},role:`option`,"aria-selected":n,"aria-disabled":e.disabled||void 0,tabIndex:r?0:-1,...ve({onClick:()=>{e.disabled||J(String(e.value))},onKeyDown:t=>{e.disabled||(t.key===`Enter`||t.key===` `)&&(t.preventDefault(),J(String(e.value)))}}),className:`flex cursor-pointer items-start gap-3 px-3 py-2 text-sm transition-colors ${e.disabled?`cursor-not-allowed text-text-disabled`:n?`font-medium text-primary-600 dark:text-primary-400 ${r?`bg-primary-50 dark:bg-primary-900/30`:`hover:bg-primary-50/60 dark:hover:bg-primary-900/20`}`:r?`bg-neutral-100 text-text-primary dark:bg-neutral-700`:`text-text-primary hover:bg-neutral-50 dark:hover:bg-neutral-700`}`,children:[(0,o.jsxs)(`div`,{className:`min-w-0 flex-1`,children:[(0,o.jsx)(`div`,{className:`truncate`,children:e.label}),e.description&&(0,o.jsx)(`div`,{className:`mt-0.5 truncate text-xs text-text-tertiary`,children:e.description})]}),e.trailing&&(0,o.jsx)(`span`,{className:`shrink-0 text-xs text-text-tertiary`,children:e.trailing})]},String(e.value))}),T&&E&&(0,o.jsx)(`div`,{ref:fe,"aria-hidden":!0,className:`flex items-center justify-center px-3 py-3 text-text-tertiary`,children:S&&(0,o.jsx)(i.LoadingDots,{})})]})})})}),ne&&(0,o.jsx)(`div`,{className:r.getInputHelpClasses(m),children:ne})]})});exports.Select=c;
|
|
@@ -0,0 +1,308 @@
|
|
|
1
|
+
import { ChevronDown as e } from "../../node_modules/lucide-react/dist/esm/icons/chevron-down.esm.js";
|
|
2
|
+
import { CircleX as t } from "../../node_modules/lucide-react/dist/esm/icons/circle-x.esm.js";
|
|
3
|
+
import { CHEVRON_SIZE_CLASS as n, SLOT_BADGE_TEXT_CLASS as r, SLOT_CHILD_ICON_CLASS as ee, SLOT_GAP_CLASS as te, SLOT_ICON_SIZE_CLASS as ne } from "../_shared/form-size-tokens.esm.js";
|
|
4
|
+
import { getInputContainerClasses as re, getInputHelpClasses as ie, getInputLabelClasses as ae, getInputTrailingIconColor as oe, getInputVariantClasses as se } from "../input/utils.esm.js";
|
|
5
|
+
import { c as ce } from "../../node_modules/use-debounce/dist/index.module.esm.js";
|
|
6
|
+
import { LoadingDots as le } from "./loading-dots.esm.js";
|
|
7
|
+
import { forwardRef as i, useEffect as ue, useId as de, useMemo as fe, useRef as a, useState as o } from "react";
|
|
8
|
+
import { jsx as s, jsxs as c } from "react/jsx-runtime";
|
|
9
|
+
import { FloatingFocusManager as pe, FloatingPortal as me, autoUpdate as he, flip as ge, offset as _e, shift as ve, size as ye, useClick as be, useDismiss as xe, useFloating as Se, useInteractions as Ce, useListNavigation as we, useRole as Te, useTypeahead as Ee } from "@floating-ui/react";
|
|
10
|
+
//#region src/components/select/Select.tsx
|
|
11
|
+
var l = i(function({ options: i, value: l, onChange: u, variant: De, selectSize: d = "medium", label: f, labelOption: Oe = "appear", help: ke, placeholder: p = "선택해주세요", hasError: m = !1, disabled: h = !1, suffix: g, trailingIcon: _, clearable: v = !1, badge: y, searchable: b = !1, searchPlaceholder: Ae = "검색...", onSearchChange: x, isSearchLoading: S = !1, containerProps: je, containerRef: Me, className: Ne = "", panelClassName: Pe = "", id: C, name: w, onLoadMore: T, hasMore: E = !1, searchDebounceMs: D = 300, "data-testid": Fe }, O) {
|
|
12
|
+
let [k, A] = o(!1), [j, M] = o(null), [N, P] = o(""), Ie = a([]), Le = a(null), [F, Re] = o(null), [I, ze] = o(null), L = de(), Be = (e) => `${L}-opt-${e}`, Ve = j === null ? void 0 : Be(j), R = typeof x == "function", z = D === !1 || D <= 0 ? 0 : D, B = ce((e) => {
|
|
13
|
+
x?.(e);
|
|
14
|
+
}, z), V = (e, t) => {
|
|
15
|
+
R && (t || z === 0 ? (B.cancel(), x(e)) : B(e));
|
|
16
|
+
}, H = i.find((e) => String(e.value) === l), U = b && (H !== void 0 && N === H.label || H === void 0 && l !== "" && N !== ""), W = fe(() => {
|
|
17
|
+
if (!b || R || N.length === 0 || U) return i;
|
|
18
|
+
let e = N.toLowerCase();
|
|
19
|
+
return i.filter((t) => t.label.toLowerCase().includes(e));
|
|
20
|
+
}, [
|
|
21
|
+
i,
|
|
22
|
+
b,
|
|
23
|
+
R,
|
|
24
|
+
N,
|
|
25
|
+
U
|
|
26
|
+
]), { refs: G, floatingStyles: He, context: K } = Se({
|
|
27
|
+
open: k,
|
|
28
|
+
onOpenChange: A,
|
|
29
|
+
placement: "bottom-start",
|
|
30
|
+
whileElementsMounted: he,
|
|
31
|
+
middleware: [
|
|
32
|
+
_e(4),
|
|
33
|
+
ge({ padding: 8 }),
|
|
34
|
+
ve({ padding: 8 }),
|
|
35
|
+
ye({
|
|
36
|
+
apply({ rects: e, elements: t, availableHeight: n }) {
|
|
37
|
+
Object.assign(t.floating.style, {
|
|
38
|
+
minWidth: `${e.reference.width}px`,
|
|
39
|
+
maxHeight: `${Math.min(n, 320)}px`
|
|
40
|
+
});
|
|
41
|
+
},
|
|
42
|
+
padding: 8
|
|
43
|
+
})
|
|
44
|
+
]
|
|
45
|
+
}), { getReferenceProps: Ue, getFloatingProps: We, getItemProps: Ge } = Ce([
|
|
46
|
+
be(K, { enabled: !h && !b }),
|
|
47
|
+
xe(K),
|
|
48
|
+
Te(K, { role: "listbox" }),
|
|
49
|
+
we(K, {
|
|
50
|
+
listRef: Ie,
|
|
51
|
+
activeIndex: j,
|
|
52
|
+
onNavigate: M,
|
|
53
|
+
virtual: b,
|
|
54
|
+
loop: !0
|
|
55
|
+
}),
|
|
56
|
+
Ee(K, {
|
|
57
|
+
listRef: { current: W.map((e) => e.label) },
|
|
58
|
+
activeIndex: j,
|
|
59
|
+
onMatch: M,
|
|
60
|
+
enabled: !b
|
|
61
|
+
})
|
|
62
|
+
]), Ke = a(!1);
|
|
63
|
+
ue(() => {
|
|
64
|
+
if (k) {
|
|
65
|
+
if (Ke.current = !0, b) {
|
|
66
|
+
let e = H?.label ?? "";
|
|
67
|
+
P(e), e !== "" && requestAnimationFrame(() => {
|
|
68
|
+
Le.current?.select();
|
|
69
|
+
});
|
|
70
|
+
}
|
|
71
|
+
} else P(""), M(null), Ke.current && V("", !0);
|
|
72
|
+
}, [
|
|
73
|
+
k,
|
|
74
|
+
b,
|
|
75
|
+
R,
|
|
76
|
+
x
|
|
77
|
+
]), ue(() => {
|
|
78
|
+
if (!k || !T || !E || !F || !I) return;
|
|
79
|
+
let e = new IntersectionObserver((e) => {
|
|
80
|
+
for (let t of e) t.isIntersecting && !S && T();
|
|
81
|
+
}, {
|
|
82
|
+
root: I,
|
|
83
|
+
rootMargin: "0px 0px 80px 0px"
|
|
84
|
+
});
|
|
85
|
+
return e.observe(F), () => e.disconnect();
|
|
86
|
+
}, [
|
|
87
|
+
k,
|
|
88
|
+
T,
|
|
89
|
+
E,
|
|
90
|
+
S,
|
|
91
|
+
F,
|
|
92
|
+
I
|
|
93
|
+
]);
|
|
94
|
+
let q = (e) => {
|
|
95
|
+
u(e), A(!1);
|
|
96
|
+
}, qe = (e) => {
|
|
97
|
+
e.stopPropagation(), u(""), P("");
|
|
98
|
+
}, Je = (e) => {
|
|
99
|
+
b || !v || h || !J || k || (e.key === "Backspace" || e.key === "Delete") && (e.preventDefault(), u(""));
|
|
100
|
+
}, Ye = (e) => {
|
|
101
|
+
let t = e.target.value;
|
|
102
|
+
P(t), V(t, !1), k || A(!0);
|
|
103
|
+
}, Xe = (e) => {
|
|
104
|
+
if (!e.nativeEvent.isComposing) {
|
|
105
|
+
if (e.key === "Enter" && j !== null) {
|
|
106
|
+
e.preventDefault();
|
|
107
|
+
let t = W[j];
|
|
108
|
+
t && !t.disabled && q(String(t.value));
|
|
109
|
+
return;
|
|
110
|
+
}
|
|
111
|
+
(e.key === "Backspace" || e.key === "Delete") && H && (!k || N === "") && (e.preventDefault(), u(""));
|
|
112
|
+
}
|
|
113
|
+
}, Ze = Oe === "sustain" || Oe === "appear" && !!H, J = !!H, Qe = H ? H.label : p, $e = k ? N : H?.label ?? "", Y = te[d], X = ee[d], et = r[d], Z = ne[d], tt = n[d], nt = se(De, m, h, d), Q = oe(m, h, J || k), $ = d === "mini" ? "text-xs" : d === "large" ? "text-base" : "text-sm", rt = h ? "text-text-disabled" : m ? "text-text-danger" : J ? "text-text-primary" : "text-text-tertiary";
|
|
114
|
+
return /* @__PURE__ */ c("div", {
|
|
115
|
+
ref: Me,
|
|
116
|
+
className: re(),
|
|
117
|
+
...je,
|
|
118
|
+
children: [
|
|
119
|
+
Ze && f && /* @__PURE__ */ s("label", {
|
|
120
|
+
className: ae(De, m),
|
|
121
|
+
htmlFor: C,
|
|
122
|
+
children: f
|
|
123
|
+
}),
|
|
124
|
+
b ? /* @__PURE__ */ c("div", {
|
|
125
|
+
ref: (e) => {
|
|
126
|
+
G.setReference(e);
|
|
127
|
+
},
|
|
128
|
+
...Ue(),
|
|
129
|
+
className: `${nt} flex w-full items-center ${Y} ${h ? "cursor-not-allowed" : "cursor-text"} ${Ne}`.trim().replace(/\s+/g, " "),
|
|
130
|
+
children: [
|
|
131
|
+
/* @__PURE__ */ s("input", {
|
|
132
|
+
ref: (e) => {
|
|
133
|
+
Le.current = e, typeof O == "function" ? O(e) : O && (O.current = e);
|
|
134
|
+
},
|
|
135
|
+
id: C,
|
|
136
|
+
type: "text",
|
|
137
|
+
role: "combobox",
|
|
138
|
+
readOnly: !k,
|
|
139
|
+
disabled: h,
|
|
140
|
+
"aria-haspopup": "listbox",
|
|
141
|
+
"aria-expanded": k,
|
|
142
|
+
"aria-controls": k ? L : void 0,
|
|
143
|
+
"aria-activedescendant": Ve,
|
|
144
|
+
"aria-autocomplete": "list",
|
|
145
|
+
"data-testid": Fe,
|
|
146
|
+
value: $e,
|
|
147
|
+
placeholder: H ? Ae : p,
|
|
148
|
+
onChange: Ye,
|
|
149
|
+
onKeyDown: Xe,
|
|
150
|
+
onClick: () => {
|
|
151
|
+
h || k || A(!0);
|
|
152
|
+
},
|
|
153
|
+
className: `flex-1 bg-transparent text-left outline-hidden ${$} ${rt} ${h ? "cursor-not-allowed" : ""} placeholder:text-text-tertiary`
|
|
154
|
+
}),
|
|
155
|
+
g && /* @__PURE__ */ s("span", {
|
|
156
|
+
className: `shrink-0 whitespace-nowrap ${$} ${Q}`,
|
|
157
|
+
children: g
|
|
158
|
+
}),
|
|
159
|
+
_ && /* @__PURE__ */ s("span", {
|
|
160
|
+
className: `flex shrink-0 items-center ${Q} ${X}`,
|
|
161
|
+
children: _
|
|
162
|
+
}),
|
|
163
|
+
S && /* @__PURE__ */ s(le, { className: `shrink-0 text-icon-tertiary ${Z}` }),
|
|
164
|
+
v && !h && J && /* @__PURE__ */ s("button", {
|
|
165
|
+
type: "button",
|
|
166
|
+
tabIndex: -1,
|
|
167
|
+
onClick: qe,
|
|
168
|
+
"aria-label": "선택 지우기",
|
|
169
|
+
className: `flex shrink-0 cursor-pointer items-center rounded ${Q} hover:text-text-primary focus:outline-hidden focus-visible:ring-2 focus-visible:ring-primary-500/40`,
|
|
170
|
+
children: /* @__PURE__ */ s(t, {
|
|
171
|
+
className: Z,
|
|
172
|
+
strokeWidth: 1.5,
|
|
173
|
+
"aria-hidden": !0
|
|
174
|
+
})
|
|
175
|
+
}),
|
|
176
|
+
y && /* @__PURE__ */ s("span", {
|
|
177
|
+
className: `flex shrink-0 items-center ${X} ${et}`,
|
|
178
|
+
children: y
|
|
179
|
+
}),
|
|
180
|
+
/* @__PURE__ */ s(e, {
|
|
181
|
+
className: `shrink-0 transition-transform ${tt} ${Q} ${k ? "rotate-180" : ""}`,
|
|
182
|
+
strokeWidth: 1.5,
|
|
183
|
+
"aria-hidden": !0
|
|
184
|
+
})
|
|
185
|
+
]
|
|
186
|
+
}) : /* @__PURE__ */ c("button", {
|
|
187
|
+
ref: (e) => {
|
|
188
|
+
G.setReference(e), typeof O == "function" ? O(e) : O && (O.current = e);
|
|
189
|
+
},
|
|
190
|
+
id: C,
|
|
191
|
+
type: "button",
|
|
192
|
+
disabled: h,
|
|
193
|
+
"aria-haspopup": "listbox",
|
|
194
|
+
"aria-expanded": k,
|
|
195
|
+
"aria-controls": k ? L : void 0,
|
|
196
|
+
"aria-activedescendant": Ve,
|
|
197
|
+
"data-testid": Fe,
|
|
198
|
+
...Ue({ onKeyDown: Je }),
|
|
199
|
+
className: `${nt} flex w-full items-center ${Y} ${h ? "cursor-not-allowed" : "cursor-pointer"} ${Ne}`.trim().replace(/\s+/g, " "),
|
|
200
|
+
children: [
|
|
201
|
+
/* @__PURE__ */ s("span", {
|
|
202
|
+
className: `flex-1 truncate text-left ${$} ${rt}`,
|
|
203
|
+
children: Qe
|
|
204
|
+
}),
|
|
205
|
+
g && /* @__PURE__ */ s("span", {
|
|
206
|
+
className: `shrink-0 whitespace-nowrap ${$} ${Q}`,
|
|
207
|
+
children: g
|
|
208
|
+
}),
|
|
209
|
+
_ && /* @__PURE__ */ s("span", {
|
|
210
|
+
className: `flex shrink-0 items-center ${Q} ${X}`,
|
|
211
|
+
children: _
|
|
212
|
+
}),
|
|
213
|
+
v && !h && J && /* @__PURE__ */ s("span", {
|
|
214
|
+
role: "button",
|
|
215
|
+
tabIndex: -1,
|
|
216
|
+
onClick: qe,
|
|
217
|
+
"aria-label": "선택 지우기",
|
|
218
|
+
className: `flex shrink-0 cursor-pointer items-center ${Q} hover:text-text-primary`,
|
|
219
|
+
children: /* @__PURE__ */ s(t, {
|
|
220
|
+
className: Z,
|
|
221
|
+
strokeWidth: 1.5,
|
|
222
|
+
"aria-hidden": !0
|
|
223
|
+
})
|
|
224
|
+
}),
|
|
225
|
+
y && /* @__PURE__ */ s("span", {
|
|
226
|
+
className: `flex shrink-0 items-center ${X} ${et}`,
|
|
227
|
+
children: y
|
|
228
|
+
}),
|
|
229
|
+
/* @__PURE__ */ s(e, {
|
|
230
|
+
className: `shrink-0 transition-transform ${tt} ${Q} ${k ? "rotate-180" : ""}`,
|
|
231
|
+
strokeWidth: 1.5,
|
|
232
|
+
"aria-hidden": !0
|
|
233
|
+
})
|
|
234
|
+
]
|
|
235
|
+
}),
|
|
236
|
+
w && /* @__PURE__ */ s("input", {
|
|
237
|
+
type: "hidden",
|
|
238
|
+
name: w,
|
|
239
|
+
value: l
|
|
240
|
+
}),
|
|
241
|
+
k && /* @__PURE__ */ s(me, { children: /* @__PURE__ */ s(pe, {
|
|
242
|
+
context: K,
|
|
243
|
+
modal: !1,
|
|
244
|
+
initialFocus: b ? -1 : 0,
|
|
245
|
+
children: /* @__PURE__ */ s("div", {
|
|
246
|
+
ref: G.setFloating,
|
|
247
|
+
id: L,
|
|
248
|
+
style: He,
|
|
249
|
+
...We(),
|
|
250
|
+
className: `z-9999 overflow-hidden rounded-lg border border-border-tertiary bg-bg-white shadow-lg dark:border-border-secondary dark:bg-neutral-800 ${Pe}`,
|
|
251
|
+
children: /* @__PURE__ */ c("div", {
|
|
252
|
+
ref: ze,
|
|
253
|
+
className: "max-h-72 overflow-y-auto py-1",
|
|
254
|
+
children: [W.length === 0 ? /* @__PURE__ */ s("div", {
|
|
255
|
+
className: "px-3 py-4 text-center text-sm text-text-tertiary",
|
|
256
|
+
children: S ? "검색 중..." : "옵션이 없어요"
|
|
257
|
+
}) : W.map((e, t) => {
|
|
258
|
+
let n = String(e.value) === l, r = j === t;
|
|
259
|
+
return /* @__PURE__ */ c("div", {
|
|
260
|
+
id: Be(t),
|
|
261
|
+
ref: (e) => {
|
|
262
|
+
Ie.current[t] = e;
|
|
263
|
+
},
|
|
264
|
+
role: "option",
|
|
265
|
+
"aria-selected": n,
|
|
266
|
+
"aria-disabled": e.disabled || void 0,
|
|
267
|
+
tabIndex: r ? 0 : -1,
|
|
268
|
+
...Ge({
|
|
269
|
+
onClick: () => {
|
|
270
|
+
e.disabled || q(String(e.value));
|
|
271
|
+
},
|
|
272
|
+
onKeyDown: (t) => {
|
|
273
|
+
e.disabled || (t.key === "Enter" || t.key === " ") && (t.preventDefault(), q(String(e.value)));
|
|
274
|
+
}
|
|
275
|
+
}),
|
|
276
|
+
className: `flex cursor-pointer items-start gap-3 px-3 py-2 text-sm transition-colors ${e.disabled ? "cursor-not-allowed text-text-disabled" : n ? `font-medium text-primary-600 dark:text-primary-400 ${r ? "bg-primary-50 dark:bg-primary-900/30" : "hover:bg-primary-50/60 dark:hover:bg-primary-900/20"}` : r ? "bg-neutral-100 text-text-primary dark:bg-neutral-700" : "text-text-primary hover:bg-neutral-50 dark:hover:bg-neutral-700"}`,
|
|
277
|
+
children: [/* @__PURE__ */ c("div", {
|
|
278
|
+
className: "min-w-0 flex-1",
|
|
279
|
+
children: [/* @__PURE__ */ s("div", {
|
|
280
|
+
className: "truncate",
|
|
281
|
+
children: e.label
|
|
282
|
+
}), e.description && /* @__PURE__ */ s("div", {
|
|
283
|
+
className: "mt-0.5 truncate text-xs text-text-tertiary",
|
|
284
|
+
children: e.description
|
|
285
|
+
})]
|
|
286
|
+
}), e.trailing && /* @__PURE__ */ s("span", {
|
|
287
|
+
className: "shrink-0 text-xs text-text-tertiary",
|
|
288
|
+
children: e.trailing
|
|
289
|
+
})]
|
|
290
|
+
}, String(e.value));
|
|
291
|
+
}), T && E && /* @__PURE__ */ s("div", {
|
|
292
|
+
ref: Re,
|
|
293
|
+
"aria-hidden": !0,
|
|
294
|
+
className: "flex items-center justify-center px-3 py-3 text-text-tertiary",
|
|
295
|
+
children: S && /* @__PURE__ */ s(le, {})
|
|
296
|
+
})]
|
|
297
|
+
})
|
|
298
|
+
})
|
|
299
|
+
}) }),
|
|
300
|
+
ke && /* @__PURE__ */ s("div", {
|
|
301
|
+
className: ie(m),
|
|
302
|
+
children: ke
|
|
303
|
+
})
|
|
304
|
+
]
|
|
305
|
+
});
|
|
306
|
+
});
|
|
307
|
+
//#endregion
|
|
308
|
+
export { l as Select };
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
let e=require("react/jsx-runtime");var t=({className:t=``})=>(0,e.jsxs)(`span`,{className:`inline-flex items-end gap-0.5 ${t}`,"aria-label":`로딩 중`,role:`status`,children:[(0,e.jsx)(`span`,{className:`block h-1 w-1 animate-pulse rounded-full bg-current`,style:{animationDelay:`0ms`}}),(0,e.jsx)(`span`,{className:`block h-1 w-1 animate-pulse rounded-full bg-current`,style:{animationDelay:`200ms`}}),(0,e.jsx)(`span`,{className:`block h-1 w-1 animate-pulse rounded-full bg-current`,style:{animationDelay:`400ms`}})]});exports.LoadingDots=t;
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { jsx as e, jsxs as t } from "react/jsx-runtime";
|
|
2
|
+
//#region src/components/select/loading-dots.tsx
|
|
3
|
+
var n = ({ className: n = "" }) => /* @__PURE__ */ t("span", {
|
|
4
|
+
className: `inline-flex items-end gap-0.5 ${n}`,
|
|
5
|
+
"aria-label": "로딩 중",
|
|
6
|
+
role: "status",
|
|
7
|
+
children: [
|
|
8
|
+
/* @__PURE__ */ e("span", {
|
|
9
|
+
className: "block h-1 w-1 animate-pulse rounded-full bg-current",
|
|
10
|
+
style: { animationDelay: "0ms" }
|
|
11
|
+
}),
|
|
12
|
+
/* @__PURE__ */ e("span", {
|
|
13
|
+
className: "block h-1 w-1 animate-pulse rounded-full bg-current",
|
|
14
|
+
style: { animationDelay: "200ms" }
|
|
15
|
+
}),
|
|
16
|
+
/* @__PURE__ */ e("span", {
|
|
17
|
+
className: "block h-1 w-1 animate-pulse rounded-full bg-current",
|
|
18
|
+
style: { animationDelay: "400ms" }
|
|
19
|
+
})
|
|
20
|
+
]
|
|
21
|
+
});
|
|
22
|
+
//#endregion
|
|
23
|
+
export { n as LoadingDots };
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
const e=require("./utils.cjs.js");let t=require("react"),n=require("react/jsx-runtime");var r=(0,t.forwardRef)(({size:t=`medium`,label:r,className:i=``,disabled:a=!1,onCheckedChange:o,onChange:s,...c},l)=>(0,n.jsxs)(`label`,{className:`inline-flex items-center gap-2 ${a?`cursor-not-allowed`:`cursor-pointer`} ${i}`,children:[(0,n.jsxs)(`span`,{className:`relative inline-flex items-center`,children:[(0,n.jsx)(`input`,{ref:l,type:`checkbox`,className:`peer sr-only`,disabled:a,onChange:e=>{s?.(e),o?.(e.target.checked)},...c}),(0,n.jsx)(`span`,{"aria-hidden":!0,className:e.getSwitchTrackClasses(t,a)}),(0,n.jsx)(`span`,{"aria-hidden":!0,className:e.getSwitchThumbClasses(t)})]}),r&&(0,n.jsx)(`span`,{className:a?`text-sm text-text-disabled`:`text-sm text-text-primary`,children:r})]}));r.displayName=`Switch`,exports.Switch=r;
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import { getSwitchThumbClasses as e, getSwitchTrackClasses as t } from "./utils.esm.js";
|
|
2
|
+
import { forwardRef as n } from "react";
|
|
3
|
+
import { jsx as r, jsxs as i } from "react/jsx-runtime";
|
|
4
|
+
//#region src/components/switch/Switch.tsx
|
|
5
|
+
var a = n(({ size: n = "medium", label: a, className: o = "", disabled: s = !1, onCheckedChange: c, onChange: l, ...u }, d) => /* @__PURE__ */ i("label", {
|
|
6
|
+
className: `inline-flex items-center gap-2 ${s ? "cursor-not-allowed" : "cursor-pointer"} ${o}`,
|
|
7
|
+
children: [/* @__PURE__ */ i("span", {
|
|
8
|
+
className: "relative inline-flex items-center",
|
|
9
|
+
children: [
|
|
10
|
+
/* @__PURE__ */ r("input", {
|
|
11
|
+
ref: d,
|
|
12
|
+
type: "checkbox",
|
|
13
|
+
className: "peer sr-only",
|
|
14
|
+
disabled: s,
|
|
15
|
+
onChange: (e) => {
|
|
16
|
+
l?.(e), c?.(e.target.checked);
|
|
17
|
+
},
|
|
18
|
+
...u
|
|
19
|
+
}),
|
|
20
|
+
/* @__PURE__ */ r("span", {
|
|
21
|
+
"aria-hidden": !0,
|
|
22
|
+
className: t(n, s)
|
|
23
|
+
}),
|
|
24
|
+
/* @__PURE__ */ r("span", {
|
|
25
|
+
"aria-hidden": !0,
|
|
26
|
+
className: e(n)
|
|
27
|
+
})
|
|
28
|
+
]
|
|
29
|
+
}), a && /* @__PURE__ */ r("span", {
|
|
30
|
+
className: s ? "text-sm text-text-disabled" : "text-sm text-text-primary",
|
|
31
|
+
children: a
|
|
32
|
+
})]
|
|
33
|
+
}));
|
|
34
|
+
a.displayName = "Switch";
|
|
35
|
+
//#endregion
|
|
36
|
+
export { a as Switch };
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
var e={small:{track:`h-5 w-9`,thumb:`h-3.5 w-3.5`,translate:`peer-checked:translate-x-4`},medium:{track:`h-6 w-11`,thumb:`h-4.5 w-4.5`,translate:`peer-checked:translate-x-5`}};function t(t,n){let{track:r}=e[t];return n?[`relative inline-flex shrink-0 items-center rounded-full`,r,`bg-bg-disabled cursor-not-allowed`].join(` `):[`relative inline-flex shrink-0 items-center rounded-full cursor-pointer`,r,`bg-neutral-200 dark:bg-neutral-700`,`peer-checked:bg-primary-500`,`peer-focus-visible:ring-2 peer-focus-visible:ring-primary-300 peer-focus-visible:ring-offset-2 peer-focus-visible:ring-offset-bg-card`,`transition-colors duration-200 ease-out`].join(` `)}function n(t){let{thumb:n,translate:r}=e[t];return[`pointer-events-none absolute left-[3px] top-[3px] inline-block rounded-full bg-white shadow-sm`,n,r,`transition-transform duration-200 ease-out`].join(` `)}exports.getSwitchThumbClasses=n,exports.getSwitchTrackClasses=t;
|