@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.
Files changed (94) hide show
  1. package/dist/atoms/index.cjs.map +1 -1
  2. package/dist/atoms/index.js +2 -2
  3. package/dist/atoms/pagination.cjs.map +1 -1
  4. package/dist/atoms/pagination.js +2 -2
  5. package/dist/chunk-5727WFTZ.js +340 -0
  6. package/dist/chunk-5727WFTZ.js.map +1 -0
  7. package/dist/chunk-6UGS5IDT.js +313 -0
  8. package/dist/chunk-6UGS5IDT.js.map +1 -0
  9. package/dist/chunk-AT43BHDX.js +340 -0
  10. package/dist/chunk-AT43BHDX.js.map +1 -0
  11. package/dist/chunk-B4OBVVY3.js +338 -0
  12. package/dist/chunk-B4OBVVY3.js.map +1 -0
  13. package/dist/chunk-BSXB4GUN.js +313 -0
  14. package/dist/chunk-BSXB4GUN.js.map +1 -0
  15. package/dist/chunk-BVA3AK5G.js +320 -0
  16. package/dist/chunk-BVA3AK5G.js.map +1 -0
  17. package/dist/chunk-DDCFN3P4.js +169 -0
  18. package/dist/chunk-DDCFN3P4.js.map +1 -0
  19. package/dist/chunk-E6PYYPLJ.js +340 -0
  20. package/dist/chunk-E6PYYPLJ.js.map +1 -0
  21. package/dist/chunk-EJGR7XIP.js +340 -0
  22. package/dist/chunk-EJGR7XIP.js.map +1 -0
  23. package/dist/chunk-FIBZDLEV.js +97 -0
  24. package/dist/chunk-FIBZDLEV.js.map +1 -0
  25. package/dist/chunk-FUFW4U2M.js +123 -0
  26. package/dist/chunk-FUFW4U2M.js.map +1 -0
  27. package/dist/chunk-GN35VNXA.js +340 -0
  28. package/dist/chunk-GN35VNXA.js.map +1 -0
  29. package/dist/chunk-GQ356XUU.js +340 -0
  30. package/dist/chunk-GQ356XUU.js.map +1 -0
  31. package/dist/chunk-HKJCOTEC.js +340 -0
  32. package/dist/chunk-HKJCOTEC.js.map +1 -0
  33. package/dist/chunk-KDEE2GKD.js +321 -0
  34. package/dist/chunk-KDEE2GKD.js.map +1 -0
  35. package/dist/chunk-N7LPOMB6.js +169 -0
  36. package/dist/chunk-N7LPOMB6.js.map +1 -0
  37. package/dist/chunk-OGNXJEFF.js +340 -0
  38. package/dist/chunk-OGNXJEFF.js.map +1 -0
  39. package/dist/chunk-OMWKQSGG.js +301 -0
  40. package/dist/chunk-OMWKQSGG.js.map +1 -0
  41. package/dist/chunk-PS3AW24D.js +130 -0
  42. package/dist/chunk-PS3AW24D.js.map +1 -0
  43. package/dist/chunk-SGV677GX.js +313 -0
  44. package/dist/chunk-SGV677GX.js.map +1 -0
  45. package/dist/chunk-U4ESLEOX.js +169 -0
  46. package/dist/chunk-U4ESLEOX.js.map +1 -0
  47. package/dist/chunk-U6ZJC6YG.js +320 -0
  48. package/dist/chunk-U6ZJC6YG.js.map +1 -0
  49. package/dist/chunk-V2ACXQA5.js +71 -0
  50. package/dist/chunk-V2ACXQA5.js.map +1 -0
  51. package/dist/chunk-VA4SUB72.js +340 -0
  52. package/dist/chunk-VA4SUB72.js.map +1 -0
  53. package/dist/chunk-VLENFHWP.js +304 -0
  54. package/dist/chunk-VLENFHWP.js.map +1 -0
  55. package/dist/chunk-WL2KNN6Q.js +320 -0
  56. package/dist/chunk-WL2KNN6Q.js.map +1 -0
  57. package/dist/chunk-XFPHKGAU.js +340 -0
  58. package/dist/chunk-XFPHKGAU.js.map +1 -0
  59. package/dist/chunk-XLJ4PRKX.js +317 -0
  60. package/dist/chunk-XLJ4PRKX.js.map +1 -0
  61. package/dist/chunk-YDXUNJVV.js +320 -0
  62. package/dist/chunk-YDXUNJVV.js.map +1 -0
  63. package/dist/chunk-ZPTZUP5Q.js +304 -0
  64. package/dist/chunk-ZPTZUP5Q.js.map +1 -0
  65. package/dist/icon.cjs +2 -0
  66. package/dist/icon.cjs.map +1 -1
  67. package/dist/icon.d.cts +1 -1
  68. package/dist/icon.d.ts +1 -1
  69. package/dist/icon.js +3 -1
  70. package/dist/index.cjs +43 -5
  71. package/dist/index.cjs.map +1 -1
  72. package/dist/index.css +8 -3
  73. package/dist/index.css.map +1 -1
  74. package/dist/index.d.cts +1 -1
  75. package/dist/index.d.ts +1 -1
  76. package/dist/index.js +7 -5
  77. package/dist/molecules/date-picker/index.cjs.map +1 -1
  78. package/dist/molecules/date-picker/index.js +2 -2
  79. package/dist/molecules/expand-table/index.js +2 -2
  80. package/dist/molecules/expand-table/row.js +2 -2
  81. package/dist/molecules/index.cjs +41 -5
  82. package/dist/molecules/index.cjs.map +1 -1
  83. package/dist/molecules/index.js +5 -5
  84. package/dist/molecules/navigation.js +2 -2
  85. package/dist/molecules/stepper.cjs.map +1 -1
  86. package/dist/molecules/stepper.js +2 -2
  87. package/dist/molecules/tag-selector.cjs +114 -53
  88. package/dist/molecules/tag-selector.cjs.map +1 -1
  89. package/dist/molecules/tag-selector.d.cts +1 -0
  90. package/dist/molecules/tag-selector.d.ts +1 -0
  91. package/dist/molecules/tag-selector.js +3 -3
  92. package/package.json +1 -1
  93. package/src/icon.ts +1 -0
  94. 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,yBAgCO;","names":[]}
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-AW44EUZH.js";
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
- }, 100);
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,