@tipp/ui 1.2.2 → 1.2.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/atoms/index.cjs.map +1 -1
- package/dist/atoms/index.js +2 -2
- package/dist/atoms/pagination.cjs.map +1 -1
- package/dist/atoms/pagination.js +2 -2
- package/dist/chunk-5727WFTZ.js +340 -0
- package/dist/chunk-5727WFTZ.js.map +1 -0
- package/dist/chunk-6UGS5IDT.js +313 -0
- package/dist/chunk-6UGS5IDT.js.map +1 -0
- package/dist/chunk-AT43BHDX.js +340 -0
- package/dist/chunk-AT43BHDX.js.map +1 -0
- package/dist/chunk-B4OBVVY3.js +338 -0
- package/dist/chunk-B4OBVVY3.js.map +1 -0
- package/dist/chunk-BSXB4GUN.js +313 -0
- package/dist/chunk-BSXB4GUN.js.map +1 -0
- package/dist/chunk-BVA3AK5G.js +320 -0
- package/dist/chunk-BVA3AK5G.js.map +1 -0
- package/dist/chunk-DDCFN3P4.js +169 -0
- package/dist/chunk-DDCFN3P4.js.map +1 -0
- package/dist/chunk-E6PYYPLJ.js +340 -0
- package/dist/chunk-E6PYYPLJ.js.map +1 -0
- package/dist/chunk-EJGR7XIP.js +340 -0
- package/dist/chunk-EJGR7XIP.js.map +1 -0
- package/dist/chunk-FIBZDLEV.js +97 -0
- package/dist/chunk-FIBZDLEV.js.map +1 -0
- package/dist/chunk-FUFW4U2M.js +123 -0
- package/dist/chunk-FUFW4U2M.js.map +1 -0
- package/dist/chunk-GN35VNXA.js +340 -0
- package/dist/chunk-GN35VNXA.js.map +1 -0
- package/dist/chunk-GQ356XUU.js +340 -0
- package/dist/chunk-GQ356XUU.js.map +1 -0
- package/dist/chunk-HKJCOTEC.js +340 -0
- package/dist/chunk-HKJCOTEC.js.map +1 -0
- package/dist/chunk-KDEE2GKD.js +321 -0
- package/dist/chunk-KDEE2GKD.js.map +1 -0
- package/dist/chunk-N7LPOMB6.js +169 -0
- package/dist/chunk-N7LPOMB6.js.map +1 -0
- package/dist/chunk-OGNXJEFF.js +340 -0
- package/dist/chunk-OGNXJEFF.js.map +1 -0
- package/dist/chunk-OMWKQSGG.js +301 -0
- package/dist/chunk-OMWKQSGG.js.map +1 -0
- package/dist/chunk-PS3AW24D.js +130 -0
- package/dist/chunk-PS3AW24D.js.map +1 -0
- package/dist/chunk-SGV677GX.js +313 -0
- package/dist/chunk-SGV677GX.js.map +1 -0
- package/dist/chunk-U4ESLEOX.js +169 -0
- package/dist/chunk-U4ESLEOX.js.map +1 -0
- package/dist/chunk-U6ZJC6YG.js +320 -0
- package/dist/chunk-U6ZJC6YG.js.map +1 -0
- package/dist/chunk-V2ACXQA5.js +71 -0
- package/dist/chunk-V2ACXQA5.js.map +1 -0
- package/dist/chunk-VA4SUB72.js +340 -0
- package/dist/chunk-VA4SUB72.js.map +1 -0
- package/dist/chunk-VLENFHWP.js +304 -0
- package/dist/chunk-VLENFHWP.js.map +1 -0
- package/dist/chunk-WL2KNN6Q.js +320 -0
- package/dist/chunk-WL2KNN6Q.js.map +1 -0
- package/dist/chunk-XFPHKGAU.js +340 -0
- package/dist/chunk-XFPHKGAU.js.map +1 -0
- package/dist/chunk-XLJ4PRKX.js +317 -0
- package/dist/chunk-XLJ4PRKX.js.map +1 -0
- package/dist/chunk-YDXUNJVV.js +320 -0
- package/dist/chunk-YDXUNJVV.js.map +1 -0
- package/dist/chunk-ZPTZUP5Q.js +304 -0
- package/dist/chunk-ZPTZUP5Q.js.map +1 -0
- package/dist/icon.cjs +2 -0
- package/dist/icon.cjs.map +1 -1
- package/dist/icon.d.cts +1 -1
- package/dist/icon.d.ts +1 -1
- package/dist/icon.js +3 -1
- package/dist/index.cjs +43 -5
- package/dist/index.cjs.map +1 -1
- package/dist/index.css +8 -3
- package/dist/index.css.map +1 -1
- package/dist/index.d.cts +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.js +7 -5
- package/dist/molecules/date-picker/index.cjs.map +1 -1
- package/dist/molecules/date-picker/index.js +2 -2
- package/dist/molecules/expand-table/index.js +2 -2
- package/dist/molecules/expand-table/row.js +2 -2
- package/dist/molecules/index.cjs +41 -5
- package/dist/molecules/index.cjs.map +1 -1
- package/dist/molecules/index.js +5 -5
- package/dist/molecules/navigation.js +2 -2
- package/dist/molecules/stepper.cjs.map +1 -1
- package/dist/molecules/stepper.js +2 -2
- package/dist/molecules/tag-selector.cjs +114 -53
- package/dist/molecules/tag-selector.cjs.map +1 -1
- package/dist/molecules/tag-selector.d.cts +1 -0
- package/dist/molecules/tag-selector.d.ts +1 -0
- package/dist/molecules/tag-selector.js +3 -3
- package/package.json +1 -1
- package/src/icon.ts +1 -0
- package/src/molecules/tag-selector.tsx +52 -5
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/molecules/tag-selector.tsx"],"sourcesContent":["import React, {\n useCallback,\n useEffect,\n useMemo,\n useRef,\n useState,\n} from 'react';\nimport {\n ChevronRightIcon,\n Cross1Icon,\n MagnifyingGlassIcon,\n} from '@radix-ui/react-icons';\nimport { Popover } from '../atoms/popover';\nimport { Flex } from '../atoms/flex';\nimport { Button } from '../atoms/button';\nimport { Badge } from '../atoms/badge';\nimport { CheckIcon } from '../icon';\nimport { ScrollArea } from '../atoms/scroll-area';\nimport { Grid } from '../atoms/grid';\nimport { AutoSizingInput, Typo } from '../atoms';\n\ntype ID = string;\ninterface Item {\n name: string;\n id: ID;\n}\n\nconst OPTION_HEIGHT = 32;\n\nexport interface TagSelectorProps<T extends Item> {\n options?: T[];\n selected?: ID[];\n placeholder?: string;\n disabled?: boolean;\n maxCount?: number;\n style?: React.CSSProperties;\n\n onChange?: (selected: ID[]) => void;\n tagRender?: (item: T) => React.ReactElement;\n DropdownContainer?: DropdownContainer<T>;\n}\ntype DropdownContainer<T> = (props: {\n items: T[];\n children: React.ReactElement;\n currentItem?: T;\n}) => React.ReactElement;\n\nconst DefaultDropdownContainer = (props: {\n children: React.ReactElement;\n}): React.ReactElement => {\n return props.children;\n};\n\nexport function TagSelector<T extends Item>(\n props: TagSelectorProps<T>\n): React.ReactElement {\n const {\n options = [],\n tagRender,\n placeholder,\n maxCount = 0,\n DropdownContainer = DefaultDropdownContainer,\n } = props;\n const [selected, setSelected] = useState<string[]>(props.selected || []);\n const [value, setValue] = useState<string>('');\n const [focusIndex, setFocusIndex] = useState<number | null>(null);\n const [open, setOpen] = useState(false);\n const [focus, setFocus] = useState(false);\n\n const fieldRef = useRef<HTMLInputElement>(null);\n const scrollRef = useRef<HTMLDivElement>(null);\n\n const closeRef = useRef<number>(0);\n\n const onFocus = useCallback(() => {\n clearTimeout(closeRef.current);\n setFocus(true);\n setOpen(true);\n }, []);\n\n const onBlur = useCallback(() => {\n closeRef.current = setTimeout(() => {\n setFocus(false);\n setOpen(false);\n setTimeout(() => {\n setValue('');\n }, 100);\n }, 100);\n }, []);\n\n const onChangeValue = useCallback<React.ChangeEventHandler<HTMLInputElement>>(\n (e) => {\n setValue(e.target.value);\n },\n []\n );\n\n const filteredOptions = useMemo<T[]>(() => {\n return options.filter((option) => {\n return option.name.includes(value);\n });\n }, [options, value]);\n\n const selectedItem = useMemo<T[]>(() => {\n const result = [] as T[];\n selected.forEach((id) => {\n const maybeItem = options.find((option) => option.id === id);\n if (maybeItem) result.push(maybeItem);\n });\n return result;\n }, [options, selected]);\n\n const onDelete = useCallback((id: string) => {\n setSelected((prev) => prev.filter((el) => el !== id));\n }, []);\n\n const onSelect = useCallback(\n (id: string) => {\n if (maxCount && selected.length + 1 > maxCount) return;\n setSelected((prev) => [...prev, id]);\n },\n [maxCount, selected]\n );\n\n const toggleItem = useCallback(\n (id: string) => {\n if (selected.includes(id)) {\n onDelete(id);\n } else {\n onSelect(id);\n }\n },\n [onDelete, onSelect, selected]\n );\n\n const setScroll = useCallback((index: number): void => {\n if (scrollRef.current) {\n const scrollTop = scrollRef.current.scrollTop;\n const clientHeight = scrollRef.current.clientHeight;\n const focusTop = index * OPTION_HEIGHT;\n if (focusTop < scrollTop) {\n scrollRef.current.scrollTop = focusTop;\n } else if (focusTop + OPTION_HEIGHT > scrollTop + clientHeight) {\n scrollRef.current.scrollTop = focusTop + OPTION_HEIGHT - clientHeight;\n }\n }\n }, []);\n\n const handleKeyDown = useCallback(\n (e: React.KeyboardEvent) => {\n const key = e.key;\n\n switch (key) {\n case 'ArrowDown': {\n e.preventDefault();\n let newFocus = 0;\n if (typeof focusIndex === 'number') {\n newFocus = focusIndex + 1 >= options.length ? 0 : focusIndex + 1;\n }\n setFocusIndex(newFocus);\n setScroll(newFocus);\n break;\n }\n\n case 'ArrowUp': {\n e.preventDefault();\n let newFocus = 0;\n if (typeof focusIndex === 'number') {\n newFocus = focusIndex - 1 < 0 ? options.length - 1 : focusIndex - 1;\n }\n setFocusIndex(newFocus);\n setScroll(newFocus);\n break;\n }\n\n case 'Enter':\n setValue('');\n if (focusIndex !== null) {\n toggleItem(filteredOptions[focusIndex]?.id);\n }\n break;\n\n case 'Backspace':\n if (value.length === 0) {\n setSelected((prev) => prev.slice(0, -1));\n }\n break;\n\n case 'Escape':\n setOpen(false);\n break;\n }\n },\n [\n focusIndex,\n value.length,\n setScroll,\n options.length,\n toggleItem,\n filteredOptions,\n ]\n );\n\n useEffect(() => {\n setFocusIndex(null);\n }, [open]);\n\n useEffect(() => {\n setFocusIndex(0);\n }, [filteredOptions]);\n\n return (\n <Popover.Root open={Boolean(filteredOptions.length) && open}>\n <Popover.Trigger>\n <Grid\n align=\"center\"\n className={`tag-selector ${focus ? 'focused' : ''}`}\n columns=\"1fr auto\"\n gap=\"1\"\n onClick={() => fieldRef.current?.focus()}\n >\n <Flex\n align=\"center\"\n gap=\"1\"\n maxWidth=\"100%\"\n overflow=\"hidden\"\n wrap=\"wrap\"\n >\n {selectedItem.map((item) => {\n return tagRender ? (\n tagRender(item)\n ) : (\n <Badge key={item.id}>\n {item.name}\n <Button\n onClick={() => {\n onDelete(item.id);\n }}\n variant=\"transparent\"\n >\n <Cross1Icon />\n </Button>\n </Badge>\n );\n })}\n {value.length < 1 && <Typo>{placeholder}</Typo>}\n <AutoSizingInput\n onBlur={onBlur}\n onChange={onChangeValue}\n onFocus={onFocus}\n onKeyDown={handleKeyDown}\n ref={fieldRef}\n value={value}\n />\n </Flex>\n {focus ? <MagnifyingGlassIcon /> : <ChevronRightIcon />}\n </Grid>\n </Popover.Trigger>\n\n <Popover.Content\n onOpenAutoFocus={(e) => {\n e.preventDefault();\n }}\n >\n <DropdownContainer\n currentItem={filteredOptions[focusIndex || 0]}\n items={filteredOptions}\n >\n <ScrollArea\n ref={scrollRef}\n scrollbars=\"vertical\"\n style={{ height: OPTION_HEIGHT * 8 }}\n type=\"auto\"\n >\n <Flex direction=\"column\">\n {filteredOptions.map((item, i) => {\n const isSelected = Boolean(\n selected.find((el) => el === item.id)\n );\n const isFocus = i === focusIndex;\n\n return (\n <Button\n key={item.id}\n onClick={() => {\n toggleItem(item.id);\n fieldRef.current?.focus();\n }}\n onMouseEnter={() => {\n setFocusIndex(i);\n }}\n style={{\n width: '100%',\n background: isFocus ? 'var(--accent-a3)' : undefined,\n color: 'var(--gray-12)',\n fontWeight: 400,\n boxShadow: 'none',\n }}\n variant={isSelected ? 'soft' : 'outline'}\n >\n <Flex justify=\"between\" width=\"100%\">\n {item.name}\n {isSelected ? <CheckIcon /> : null}\n </Flex>\n </Button>\n );\n })}\n </Flex>\n </ScrollArea>\n </DropdownContainer>\n </Popover.Content>\n </Popover.Root>\n );\n}\n"],"mappings":"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","names":[]}
|
package/dist/icon.cjs
CHANGED
|
@@ -50,6 +50,7 @@ __export(icon_exports, {
|
|
|
50
50
|
Pencil1Icon: () => import_react_icons.Pencil1Icon,
|
|
51
51
|
PersonIcon: () => import_react_icons.PersonIcon,
|
|
52
52
|
PlusIcon: () => import_react_icons.PlusIcon,
|
|
53
|
+
RowsIcon: () => import_react_icons.RowsIcon,
|
|
53
54
|
TrashIcon: () => import_react_icons.TrashIcon
|
|
54
55
|
});
|
|
55
56
|
module.exports = __toCommonJS(icon_exports);
|
|
@@ -86,6 +87,7 @@ var import_react_icons = require("@radix-ui/react-icons");
|
|
|
86
87
|
Pencil1Icon,
|
|
87
88
|
PersonIcon,
|
|
88
89
|
PlusIcon,
|
|
90
|
+
RowsIcon,
|
|
89
91
|
TrashIcon
|
|
90
92
|
});
|
|
91
93
|
//# sourceMappingURL=icon.cjs.map
|
package/dist/icon.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/icon.ts"],"sourcesContent":["export {\n BookmarkIcon,\n ExitIcon,\n InfoCircledIcon,\n ExclamationTriangleIcon,\n MagnifyingGlassIcon,\n DotsHorizontalIcon,\n ChatBubbleIcon,\n PlusIcon,\n BookmarkFilledIcon,\n MixerHorizontalIcon,\n ChevronLeftIcon,\n ChevronRightIcon,\n ClipboardIcon,\n BarChartIcon,\n PersonIcon,\n GearIcon,\n DotsVerticalIcon,\n Pencil1Icon,\n Cross1Icon,\n Link2Icon,\n ChevronUpIcon,\n ChevronDownIcon,\n FileIcon,\n TrashIcon,\n DoubleArrowLeftIcon,\n DoubleArrowRightIcon,\n GlobeIcon,\n BackpackIcon,\n CalendarIcon,\n CheckIcon,\n ArchiveIcon,\n} from '@radix-ui/react-icons';\n"],"mappings":";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,
|
|
1
|
+
{"version":3,"sources":["../src/icon.ts"],"sourcesContent":["export {\n BookmarkIcon,\n ExitIcon,\n InfoCircledIcon,\n ExclamationTriangleIcon,\n MagnifyingGlassIcon,\n DotsHorizontalIcon,\n ChatBubbleIcon,\n PlusIcon,\n BookmarkFilledIcon,\n MixerHorizontalIcon,\n ChevronLeftIcon,\n ChevronRightIcon,\n ClipboardIcon,\n BarChartIcon,\n PersonIcon,\n GearIcon,\n DotsVerticalIcon,\n Pencil1Icon,\n Cross1Icon,\n Link2Icon,\n ChevronUpIcon,\n ChevronDownIcon,\n FileIcon,\n TrashIcon,\n DoubleArrowLeftIcon,\n DoubleArrowRightIcon,\n GlobeIcon,\n BackpackIcon,\n CalendarIcon,\n CheckIcon,\n ArchiveIcon,\n RowsIcon,\n} from '@radix-ui/react-icons';\n"],"mappings":";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,yBAiCO;","names":[]}
|
package/dist/icon.d.cts
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
export { ArchiveIcon, BackpackIcon, BarChartIcon, BookmarkFilledIcon, BookmarkIcon, CalendarIcon, ChatBubbleIcon, CheckIcon, ChevronDownIcon, ChevronLeftIcon, ChevronRightIcon, ChevronUpIcon, ClipboardIcon, Cross1Icon, DotsHorizontalIcon, DotsVerticalIcon, DoubleArrowLeftIcon, DoubleArrowRightIcon, ExclamationTriangleIcon, ExitIcon, FileIcon, GearIcon, GlobeIcon, InfoCircledIcon, Link2Icon, MagnifyingGlassIcon, MixerHorizontalIcon, Pencil1Icon, PersonIcon, PlusIcon, TrashIcon } from '@radix-ui/react-icons';
|
|
1
|
+
export { ArchiveIcon, BackpackIcon, BarChartIcon, BookmarkFilledIcon, BookmarkIcon, CalendarIcon, ChatBubbleIcon, CheckIcon, ChevronDownIcon, ChevronLeftIcon, ChevronRightIcon, ChevronUpIcon, ClipboardIcon, Cross1Icon, DotsHorizontalIcon, DotsVerticalIcon, DoubleArrowLeftIcon, DoubleArrowRightIcon, ExclamationTriangleIcon, ExitIcon, FileIcon, GearIcon, GlobeIcon, InfoCircledIcon, Link2Icon, MagnifyingGlassIcon, MixerHorizontalIcon, Pencil1Icon, PersonIcon, PlusIcon, RowsIcon, TrashIcon } from '@radix-ui/react-icons';
|
|
2
2
|
import '@radix-ui/themes';
|
|
3
3
|
import '@radix-ui/themes/dist/cjs/props/index.js';
|
package/dist/icon.d.ts
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
export { ArchiveIcon, BackpackIcon, BarChartIcon, BookmarkFilledIcon, BookmarkIcon, CalendarIcon, ChatBubbleIcon, CheckIcon, ChevronDownIcon, ChevronLeftIcon, ChevronRightIcon, ChevronUpIcon, ClipboardIcon, Cross1Icon, DotsHorizontalIcon, DotsVerticalIcon, DoubleArrowLeftIcon, DoubleArrowRightIcon, ExclamationTriangleIcon, ExitIcon, FileIcon, GearIcon, GlobeIcon, InfoCircledIcon, Link2Icon, MagnifyingGlassIcon, MixerHorizontalIcon, Pencil1Icon, PersonIcon, PlusIcon, TrashIcon } from '@radix-ui/react-icons';
|
|
1
|
+
export { ArchiveIcon, BackpackIcon, BarChartIcon, BookmarkFilledIcon, BookmarkIcon, CalendarIcon, ChatBubbleIcon, CheckIcon, ChevronDownIcon, ChevronLeftIcon, ChevronRightIcon, ChevronUpIcon, ClipboardIcon, Cross1Icon, DotsHorizontalIcon, DotsVerticalIcon, DoubleArrowLeftIcon, DoubleArrowRightIcon, ExclamationTriangleIcon, ExitIcon, FileIcon, GearIcon, GlobeIcon, InfoCircledIcon, Link2Icon, MagnifyingGlassIcon, MixerHorizontalIcon, Pencil1Icon, PersonIcon, PlusIcon, RowsIcon, TrashIcon } from '@radix-ui/react-icons';
|
|
2
2
|
import '@radix-ui/themes';
|
|
3
3
|
import '@radix-ui/themes/dist/cjs/props/index.js';
|
package/dist/icon.js
CHANGED
|
@@ -29,8 +29,9 @@ import {
|
|
|
29
29
|
Pencil1Icon,
|
|
30
30
|
PersonIcon,
|
|
31
31
|
PlusIcon,
|
|
32
|
+
RowsIcon,
|
|
32
33
|
TrashIcon
|
|
33
|
-
} from "./chunk-
|
|
34
|
+
} from "./chunk-V2ACXQA5.js";
|
|
34
35
|
import "./chunk-N552FDTV.js";
|
|
35
36
|
export {
|
|
36
37
|
ArchiveIcon,
|
|
@@ -63,6 +64,7 @@ export {
|
|
|
63
64
|
Pencil1Icon,
|
|
64
65
|
PersonIcon,
|
|
65
66
|
PlusIcon,
|
|
67
|
+
RowsIcon,
|
|
66
68
|
TrashIcon
|
|
67
69
|
};
|
|
68
70
|
//# sourceMappingURL=icon.js.map
|
package/dist/index.cjs
CHANGED
|
@@ -136,6 +136,7 @@ __export(src_exports, {
|
|
|
136
136
|
RadioCards: () => import_themes33.RadioCards,
|
|
137
137
|
RadioGroup: () => import_themes34.RadioGroup,
|
|
138
138
|
Root: () => Root4,
|
|
139
|
+
RowsIcon: () => import_react_icons2.RowsIcon,
|
|
139
140
|
ScrollArea: () => import_themes35.ScrollArea,
|
|
140
141
|
Section: () => import_themes36.Section,
|
|
141
142
|
SegmentedControl: () => import_themes37.SegmentedControl,
|
|
@@ -1581,7 +1582,9 @@ function TagSelector(props) {
|
|
|
1581
1582
|
tagRender,
|
|
1582
1583
|
placeholder,
|
|
1583
1584
|
maxCount = 0,
|
|
1584
|
-
DropdownContainer = DefaultDropdownContainer
|
|
1585
|
+
DropdownContainer = DefaultDropdownContainer,
|
|
1586
|
+
onChange,
|
|
1587
|
+
size = "medium"
|
|
1585
1588
|
} = props;
|
|
1586
1589
|
const [selected, setSelected] = (0, import_react24.useState)(props.selected || []);
|
|
1587
1590
|
const [value, setValue] = (0, import_react24.useState)("");
|
|
@@ -1603,7 +1606,7 @@ function TagSelector(props) {
|
|
|
1603
1606
|
setTimeout(() => {
|
|
1604
1607
|
setValue("");
|
|
1605
1608
|
}, 100);
|
|
1606
|
-
},
|
|
1609
|
+
}, 300);
|
|
1607
1610
|
}, []);
|
|
1608
1611
|
const onChangeValue = (0, import_react24.useCallback)(
|
|
1609
1612
|
(e) => {
|
|
@@ -1708,18 +1711,52 @@ function TagSelector(props) {
|
|
|
1708
1711
|
filteredOptions
|
|
1709
1712
|
]
|
|
1710
1713
|
);
|
|
1714
|
+
const placeholderVisible = (0, import_react24.useMemo)(() => {
|
|
1715
|
+
if (selectedItem.length)
|
|
1716
|
+
return false;
|
|
1717
|
+
if (value)
|
|
1718
|
+
return false;
|
|
1719
|
+
if (focus)
|
|
1720
|
+
return false;
|
|
1721
|
+
return true;
|
|
1722
|
+
}, [focus, selectedItem.length, value]);
|
|
1723
|
+
(0, import_react24.useEffect)(() => {
|
|
1724
|
+
onChange == null ? void 0 : onChange(selected);
|
|
1725
|
+
}, [[...selected].sort().join(",")]);
|
|
1726
|
+
(0, import_react24.useEffect)(() => {
|
|
1727
|
+
setSelected(props.selected || []);
|
|
1728
|
+
}, [[...props.selected || []].sort().join(",")]);
|
|
1711
1729
|
(0, import_react24.useEffect)(() => {
|
|
1712
1730
|
setFocusIndex(null);
|
|
1713
1731
|
}, [open]);
|
|
1714
1732
|
(0, import_react24.useEffect)(() => {
|
|
1715
1733
|
setFocusIndex(0);
|
|
1716
1734
|
}, [filteredOptions]);
|
|
1735
|
+
const badgeSize = (0, import_react24.useMemo)(() => {
|
|
1736
|
+
switch (size) {
|
|
1737
|
+
case "large":
|
|
1738
|
+
return "large";
|
|
1739
|
+
case "medium":
|
|
1740
|
+
case "small":
|
|
1741
|
+
default:
|
|
1742
|
+
return "small";
|
|
1743
|
+
}
|
|
1744
|
+
}, [size]);
|
|
1745
|
+
const placeholderVariant = (0, import_react24.useMemo)(() => {
|
|
1746
|
+
switch (size) {
|
|
1747
|
+
case "large":
|
|
1748
|
+
return "subtitle";
|
|
1749
|
+
case "medium":
|
|
1750
|
+
default:
|
|
1751
|
+
return "body";
|
|
1752
|
+
}
|
|
1753
|
+
}, [size]);
|
|
1717
1754
|
return /* @__PURE__ */ (0, import_jsx_runtime30.jsxs)(import_themes29.Popover.Root, { open: Boolean(filteredOptions.length) && open, children: [
|
|
1718
1755
|
/* @__PURE__ */ (0, import_jsx_runtime30.jsx)(import_themes29.Popover.Trigger, { children: /* @__PURE__ */ (0, import_jsx_runtime30.jsxs)(
|
|
1719
1756
|
import_themes20.Grid,
|
|
1720
1757
|
{
|
|
1721
1758
|
align: "center",
|
|
1722
|
-
className: `tag-selector ${focus ? "focused" : ""}`,
|
|
1759
|
+
className: `tag-selector ${focus ? "focused" : ""} ${size}`,
|
|
1723
1760
|
columns: "1fr auto",
|
|
1724
1761
|
gap: "1",
|
|
1725
1762
|
onClick: () => {
|
|
@@ -1737,7 +1774,7 @@ function TagSelector(props) {
|
|
|
1737
1774
|
wrap: "wrap",
|
|
1738
1775
|
children: [
|
|
1739
1776
|
selectedItem.map((item) => {
|
|
1740
|
-
return tagRender ? tagRender(item) : /* @__PURE__ */ (0, import_jsx_runtime30.jsxs)(Badge, { children: [
|
|
1777
|
+
return tagRender ? tagRender(item) : /* @__PURE__ */ (0, import_jsx_runtime30.jsxs)(Badge, { size: badgeSize, children: [
|
|
1741
1778
|
item.name,
|
|
1742
1779
|
/* @__PURE__ */ (0, import_jsx_runtime30.jsx)(
|
|
1743
1780
|
Button,
|
|
@@ -1751,6 +1788,7 @@ function TagSelector(props) {
|
|
|
1751
1788
|
)
|
|
1752
1789
|
] }, item.id);
|
|
1753
1790
|
}),
|
|
1791
|
+
placeholderVisible ? /* @__PURE__ */ (0, import_jsx_runtime30.jsx)(Typo, { color: "gray", variant: placeholderVariant, children: placeholder }) : null,
|
|
1754
1792
|
/* @__PURE__ */ (0, import_jsx_runtime30.jsx)(
|
|
1755
1793
|
AutoSizingInput,
|
|
1756
1794
|
{
|
|
@@ -1758,7 +1796,6 @@ function TagSelector(props) {
|
|
|
1758
1796
|
onChange: onChangeValue,
|
|
1759
1797
|
onFocus,
|
|
1760
1798
|
onKeyDown: handleKeyDown,
|
|
1761
|
-
placeholder,
|
|
1762
1799
|
ref: fieldRef,
|
|
1763
1800
|
value
|
|
1764
1801
|
}
|
|
@@ -2125,6 +2162,7 @@ function scrollTo(element, targetPosition, duration) {
|
|
|
2125
2162
|
RadioCards,
|
|
2126
2163
|
RadioGroup,
|
|
2127
2164
|
Root,
|
|
2165
|
+
RowsIcon,
|
|
2128
2166
|
ScrollArea,
|
|
2129
2167
|
Section,
|
|
2130
2168
|
SegmentedControl,
|