@avenue-ticketing/ui 0.11.0 → 0.12.0-beta.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +47 -0
- package/dist/badge-types-B67wcd4m.d.ts +22 -0
- package/dist/react/app-store-buttons-outline.d.ts +17 -0
- package/dist/react/app-store-buttons-outline.js +582 -0
- package/dist/react/app-store-buttons-outline.js.map +1 -0
- package/dist/react/app-store-buttons.d.ts +20 -0
- package/dist/react/app-store-buttons.js +817 -0
- package/dist/react/app-store-buttons.js.map +1 -0
- package/dist/react/avatar-label-group.d.ts +14 -0
- package/dist/react/avatar-label-group.js +183 -0
- package/dist/react/avatar-label-group.js.map +1 -0
- package/dist/react/avatar-profile-photo.d.ts +9 -0
- package/dist/react/avatar-profile-photo.js +202 -0
- package/dist/react/avatar-profile-photo.js.map +1 -0
- package/dist/react/avatar.d.ts +66 -40
- package/dist/react/avatar.js +159 -149
- package/dist/react/avatar.js.map +1 -1
- package/dist/react/badge-groups.d.ts +25 -0
- package/dist/react/badge-groups.js +162 -0
- package/dist/react/badge-groups.js.map +1 -0
- package/dist/react/badge.d.ts +123 -59
- package/dist/react/badge.js +314 -86
- package/dist/react/badge.js.map +1 -1
- package/dist/react/button-group.d.ts +43 -0
- package/dist/react/button-group.js +108 -0
- package/dist/react/button-group.js.map +1 -0
- package/dist/react/button-utility.d.ts +47 -0
- package/dist/react/button-utility.js +158 -0
- package/dist/react/button-utility.js.map +1 -0
- package/dist/react/button.d.ts +112 -37
- package/dist/react/button.js +270 -55
- package/dist/react/button.js.map +1 -1
- package/dist/react/checkbox.d.ts +25 -8
- package/dist/react/checkbox.js +112 -110
- package/dist/react/checkbox.js.map +1 -1
- package/dist/react/close-button.d.ts +25 -0
- package/dist/react/close-button.js +54 -0
- package/dist/react/close-button.js.map +1 -0
- package/dist/react/combobox.d.ts +17 -0
- package/dist/react/combobox.js +322 -0
- package/dist/react/combobox.js.map +1 -0
- package/dist/react/dialog.d.ts +15 -15
- package/dist/react/dialog.js +43 -108
- package/dist/react/dialog.js.map +1 -1
- package/dist/react/dropdown-account-breadcrumb.d.ts +5 -0
- package/dist/react/dropdown-account-breadcrumb.js +319 -0
- package/dist/react/dropdown-account-breadcrumb.js.map +1 -0
- package/dist/react/dropdown-account-button.d.ts +5 -0
- package/dist/react/dropdown-account-button.js +773 -0
- package/dist/react/dropdown-account-button.js.map +1 -0
- package/dist/react/dropdown-account-card-md.d.ts +5 -0
- package/dist/react/dropdown-account-card-md.js +549 -0
- package/dist/react/dropdown-account-card-md.js.map +1 -0
- package/dist/react/dropdown-account-card-sm.d.ts +5 -0
- package/dist/react/dropdown-account-card-sm.js +527 -0
- package/dist/react/dropdown-account-card-sm.js.map +1 -0
- package/dist/react/dropdown-account-card-xs.d.ts +5 -0
- package/dist/react/dropdown-account-card-xs.js +507 -0
- package/dist/react/dropdown-account-card-xs.js.map +1 -0
- package/dist/react/dropdown-avatar.d.ts +5 -0
- package/dist/react/dropdown-avatar.js +790 -0
- package/dist/react/dropdown-avatar.js.map +1 -0
- package/dist/react/dropdown-button-advanced.d.ts +5 -0
- package/dist/react/dropdown-button-advanced.js +799 -0
- package/dist/react/dropdown-button-advanced.js.map +1 -0
- package/dist/react/dropdown-button-link.d.ts +5 -0
- package/dist/react/dropdown-button-link.js +501 -0
- package/dist/react/dropdown-button-link.js.map +1 -0
- package/dist/react/dropdown-button-simple.d.ts +5 -0
- package/dist/react/dropdown-button-simple.js +754 -0
- package/dist/react/dropdown-button-simple.js.map +1 -0
- package/dist/react/dropdown-icon-advanced.d.ts +5 -0
- package/dist/react/dropdown-icon-advanced.js +543 -0
- package/dist/react/dropdown-icon-advanced.js.map +1 -0
- package/dist/react/dropdown-icon-simple.d.ts +5 -0
- package/dist/react/dropdown-icon-simple.js +505 -0
- package/dist/react/dropdown-icon-simple.js.map +1 -0
- package/dist/react/dropdown-integration.d.ts +5 -0
- package/dist/react/dropdown-integration.js +1325 -0
- package/dist/react/dropdown-integration.js.map +1 -0
- package/dist/react/dropdown-search-advanced.d.ts +5 -0
- package/dist/react/dropdown-search-advanced.js +998 -0
- package/dist/react/dropdown-search-advanced.js.map +1 -0
- package/dist/react/dropdown-search-simple.d.ts +5 -0
- package/dist/react/dropdown-search-simple.js +960 -0
- package/dist/react/dropdown-search-simple.js.map +1 -0
- package/dist/react/dropdown.d.ts +32 -133
- package/dist/react/dropdown.js +404 -1351
- package/dist/react/dropdown.js.map +1 -1
- package/dist/react/file-upload-trigger.d.ts +34 -0
- package/dist/react/file-upload-trigger.js +39 -0
- package/dist/react/file-upload-trigger.js.map +1 -0
- package/dist/react/form.d.ts +10 -0
- package/dist/react/form.js +11 -0
- package/dist/react/form.js.map +1 -0
- package/dist/react/hint-text.d.ts +17 -0
- package/dist/react/hint-text.js +36 -0
- package/dist/react/hint-text.js.map +1 -0
- package/dist/react/hook-form.d.ts +35 -0
- package/dist/react/hook-form.js +50 -0
- package/dist/react/hook-form.js.map +1 -0
- package/dist/react/input-date.d.ts +43 -0
- package/dist/react/input-date.js +306 -0
- package/dist/react/input-date.js.map +1 -0
- package/dist/react/input-file.d.ts +45 -0
- package/dist/react/input-file.js +748 -0
- package/dist/react/input-file.js.map +1 -0
- package/dist/react/input-group.d.ts +37 -0
- package/dist/react/input-group.js +251 -0
- package/dist/react/input-group.js.map +1 -0
- package/dist/react/input-number.d.ts +32 -0
- package/dist/react/input-number.js +553 -0
- package/dist/react/input-number.js.map +1 -0
- package/dist/react/input-payment.d.ts +16 -0
- package/dist/react/input-payment.js +593 -0
- package/dist/react/input-payment.js.map +1 -0
- package/dist/react/input-tags-outer.d.ts +53 -0
- package/dist/react/input-tags-outer.js +607 -0
- package/dist/react/input-tags-outer.js.map +1 -0
- package/dist/react/input-tags.d.ts +53 -0
- package/dist/react/input-tags.js +565 -0
- package/dist/react/input-tags.js.map +1 -0
- package/dist/react/input.d.ts +71 -22
- package/dist/react/input.js +332 -45
- package/dist/react/input.js.map +1 -1
- package/dist/react/label.d.ts +18 -0
- package/dist/react/label.js +112 -0
- package/dist/react/label.js.map +1 -0
- package/dist/react/multi-select.d.ts +89 -0
- package/dist/react/multi-select.js +1036 -0
- package/dist/react/multi-select.js.map +1 -0
- package/dist/react/pin-input.d.ts +59 -0
- package/dist/react/pin-input.js +229 -0
- package/dist/react/pin-input.js.map +1 -0
- package/dist/react/popover.d.ts +7 -73
- package/dist/react/popover.js +23 -569
- package/dist/react/popover.js.map +1 -1
- package/dist/react/progress-circle.d.ts +9 -0
- package/dist/react/progress-circle.js +36 -0
- package/dist/react/progress-circle.js.map +1 -0
- package/dist/react/progress-circles.d.ts +14 -0
- package/dist/react/progress-circles.js +160 -0
- package/dist/react/progress-circles.js.map +1 -0
- package/dist/react/progress-indicators.d.ts +52 -0
- package/dist/react/progress-indicators.js +78 -0
- package/dist/react/progress-indicators.js.map +1 -0
- package/dist/react/radio-buttons.d.ts +35 -0
- package/dist/react/radio-buttons.js +116 -0
- package/dist/react/radio-buttons.js.map +1 -0
- package/dist/react/scroll-header.d.ts +6 -0
- package/dist/react/scroll-header.js +42 -61
- package/dist/react/scroll-header.js.map +1 -1
- package/dist/react/scroll-wheel.d.ts +4 -5
- package/dist/react/scroll-wheel.js +19 -15
- package/dist/react/scroll-wheel.js.map +1 -1
- package/dist/react/select-item.d.ts +13 -0
- package/dist/react/select-item.js +336 -0
- package/dist/react/select-item.js.map +1 -0
- package/dist/react/select-native.d.ts +17 -0
- package/dist/react/select-native.js +203 -0
- package/dist/react/select-native.js.map +1 -0
- package/dist/react/select.d.ts +18 -61
- package/dist/react/select.js +625 -923
- package/dist/react/select.js.map +1 -1
- package/dist/react/sheet.d.ts +19 -19
- package/dist/react/sheet.js +97 -219
- package/dist/react/sheet.js.map +1 -1
- package/dist/react/slider.d.ts +15 -0
- package/dist/react/slider.js +66 -0
- package/dist/react/slider.js.map +1 -0
- package/dist/react/social-button.d.ts +55 -0
- package/dist/react/social-button.js +263 -0
- package/dist/react/social-button.js.map +1 -0
- package/dist/react/social-logos.d.ts +20 -0
- package/dist/react/social-logos.js +131 -0
- package/dist/react/social-logos.js.map +1 -0
- package/dist/react/switch.d.ts +21 -36
- package/dist/react/switch.js +121 -109
- package/dist/react/switch.js.map +1 -1
- package/dist/react/tag-select.d.ts +44 -0
- package/dist/react/tag-select.js +1062 -0
- package/dist/react/tag-select.js.map +1 -0
- package/dist/react/tags.d.ts +30 -0
- package/dist/react/tags.js +228 -0
- package/dist/react/tags.js.map +1 -0
- package/dist/react/textarea.d.ts +40 -4
- package/dist/react/textarea.js +193 -27
- package/dist/react/textarea.js.map +1 -1
- package/dist/react/tooltip.d.ts +30 -43
- package/dist/react/tooltip.js +65 -521
- package/dist/react/tooltip.js.map +1 -1
- package/dist/select-shared-B3Y5SMXU.d.ts +62 -0
- package/package.json +28 -21
- package/source.css +2 -13
- package/theme.css +883 -79
- package/dist/react/calendar.d.ts +0 -13
- package/dist/react/calendar.js +0 -4639
- package/dist/react/calendar.js.map +0 -1
- package/dist/react/card.d.ts +0 -11
- package/dist/react/card.js +0 -113
- package/dist/react/card.js.map +0 -1
- package/dist/react/datetime-picker.d.ts +0 -21
- package/dist/react/datetime-picker.js +0 -6142
- package/dist/react/datetime-picker.js.map +0 -1
- package/dist/react/pagination.d.ts +0 -28
- package/dist/react/pagination.js +0 -262
- package/dist/react/pagination.js.map +0 -1
- package/dist/react/table-pagination.d.ts +0 -15
- package/dist/react/table-pagination.js +0 -1247
- package/dist/react/table-pagination.js.map +0 -1
- package/dist/react/table-view/column-menu.d.ts +0 -15
- package/dist/react/table-view/column-menu.js +0 -1049
- package/dist/react/table-view/column-menu.js.map +0 -1
- package/dist/react/table-view/index.d.ts +0 -70
- package/dist/react/table-view/index.js +0 -2284
- package/dist/react/table-view/index.js.map +0 -1
- package/dist/react/table.d.ts +0 -86
- package/dist/react/table.js +0 -414
- package/dist/react/table.js.map +0 -1
- package/dist/react/tabs.d.ts +0 -34
- package/dist/react/tabs.js +0 -423
- package/dist/react/tabs.js.map +0 -1
- package/dist/react/time-picker.d.ts +0 -22
- package/dist/react/time-picker.js +0 -856
- package/dist/react/time-picker.js.map +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../../node_modules/react-stately/dist/private/data/packages/react-stately/src/data/useListData.ts","../../../../utils/cx.ts","../../../../components/base/tooltip/tooltip.tsx","../../../../components/base/avatar/base-components/avatar-online-indicator.tsx","../../../../components/base/avatar/base-components/verified-tick.tsx","../../../../components/base/avatar/base-components/avatar-count.tsx","../../../../components/base/avatar/avatar.tsx","../../../../components/base/input/hint-text.tsx","../../../../components/base/input/label.tsx","../../../../components/base/select/popover.tsx","../../../../components/base/select/select-shared.tsx","../../../../components/base/tags/base-components/tag-close-x.tsx","../../../../hooks/use-resize-observer.ts","../../../../components/base/input/input.tsx","../../../../components/base/checkbox/checkbox.tsx","../../../../utils/is-react-component.ts","../../../../components/base/select/select-item.tsx","../../../../components/base/select/tag-select.tsx"],"names":["$3Jrml$useState","$3Jrml$useMemo","item","key","AriaTooltipTrigger","AriaTooltip","AriaOverlayArrow","AriaButton","jsx","jsxs","sizes","User01","AriaText","AriaLabel","HelpCircle","AriaPopover","styles","XClose","createContext","useContext","AriaListBoxItem","Check","useRef","useState","AriaComboBox","Fragment","AriaListBox","AriaInput","SearchLg","AriaGroup"],"mappings":"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","file":"tag-select.js","sourcesContent":["/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */\n\nimport {Key, Selection} from '@react-types/shared';\nimport {useMemo, useState} from 'react';\n\nexport interface ListOptions<T> {\n /** Initial items in the list. */\n initialItems?: T[];\n /** The keys for the initially selected items. */\n initialSelectedKeys?: 'all' | Iterable<Key>;\n /** The initial text to filter the list by. */\n initialFilterText?: string;\n /** A function that returns a unique key for an item object. */\n getKey?: (item: T) => Key;\n /** A function that returns whether a item matches the current filter text. */\n filter?: (item: T, filterText: string) => boolean;\n}\n\nexport interface ListData<T> {\n /** The items in the list. */\n items: T[];\n\n /** The keys of the currently selected items in the list. */\n selectedKeys: Selection;\n\n /** Sets the selected keys. */\n setSelectedKeys(keys: Selection): void;\n\n /** Adds the given keys to the current selected keys. */\n addKeysToSelection(keys: Selection): void;\n\n /** Removes the given keys from the current selected keys. */\n removeKeysFromSelection(keys: Selection): void;\n\n /** The current filter text. */\n filterText: string;\n\n /** Sets the filter text. */\n setFilterText(filterText: string): void;\n\n /**\n * Gets an item from the list by key.\n *\n * @param key - The key of the item to retrieve.\n */\n getItem(key: Key): T | undefined;\n\n /**\n * Inserts items into the list at the given index.\n *\n * @param index - The index to insert into.\n * @param values - The values to insert.\n */\n insert(index: number, ...values: T[]): void;\n\n /**\n * Inserts items into the list before the item at the given key.\n *\n * @param key - The key of the item to insert before.\n * @param values - The values to insert.\n */\n insertBefore(key: Key, ...values: T[]): void;\n\n /**\n * Inserts items into the list after the item at the given key.\n *\n * @param key - The key of the item to insert after.\n * @param values - The values to insert.\n */\n insertAfter(key: Key, ...values: T[]): void;\n\n /**\n * Appends items to the list.\n *\n * @param values - The values to insert.\n */\n append(...values: T[]): void;\n\n /**\n * Prepends items to the list.\n *\n * @param value - The value to insert.\n */\n prepend(...values: T[]): void;\n\n /**\n * Removes items from the list by their keys.\n *\n * @param keys - The keys of the item to remove.\n */\n remove(...keys: Key[]): void;\n\n /**\n * Removes all items from the list that are currently\n * in the set of selected items.\n */\n removeSelectedItems(): void;\n\n /**\n * Moves an item within the list.\n *\n * @param key - The key of the item to move.\n * @param toIndex - The index to move the item to.\n */\n move(key: Key, toIndex: number): void;\n\n /**\n * Moves one or more items before a given key.\n *\n * @param key - The key of the item to move the items before.\n * @param keys - The keys of the items to move.\n */\n moveBefore(key: Key, keys: Iterable<Key>): void;\n\n /**\n * Moves one or more items after a given key.\n *\n * @param key - The key of the item to move the items after.\n * @param keys - The keys of the items to move.\n */\n moveAfter(key: Key, keys: Iterable<Key>): void;\n\n /**\n * Updates an item in the list.\n *\n * @param key - The key of the item to update.\n * @param newValue - The new value for the item, or a function that returns the new value based on\n * the previous value.\n */\n update(key: Key, newValue: T | ((prev: T) => T)): void;\n}\n\nexport interface ListState<T> {\n items: T[];\n selectedKeys: Selection;\n filterText: string;\n}\n\ninterface CreateListOptions<T, C> extends ListOptions<T> {\n cursor?: C;\n}\n\n/**\n * Manages state for an immutable list data structure, and provides convenience methods to\n * update the data over time.\n */\nexport function useListData<T>(options: ListOptions<T>): ListData<T> {\n let {\n initialItems = [],\n initialSelectedKeys,\n getKey = (item: any) => item.id ?? item.key,\n filter,\n initialFilterText = ''\n } = options;\n\n // Store both items and filteredItems in state so we can go back to the unfiltered list\n let [state, setState] = useState<ListState<T>>({\n items: initialItems,\n selectedKeys: initialSelectedKeys === 'all' ? 'all' : new Set(initialSelectedKeys || []),\n filterText: initialFilterText\n });\n\n let filteredItems = useMemo(\n () => (filter ? state.items.filter(item => filter(item, state.filterText)) : state.items),\n [state.items, state.filterText, filter]\n );\n\n return {\n ...state,\n items: filteredItems,\n ...createListActions({getKey}, setState),\n getItem(key: Key) {\n return state.items.find(item => getKey(item) === key);\n }\n };\n}\n\nexport function createListActions<T, C>(\n opts: CreateListOptions<T, C>,\n dispatch: (updater: (state: ListState<T>) => ListState<T>) => void\n): Omit<ListData<T>, 'items' | 'selectedKeys' | 'getItem' | 'filterText'> {\n let {cursor, getKey} = opts;\n return {\n setSelectedKeys(selectedKeys: Selection) {\n dispatch(state => ({\n ...state,\n selectedKeys\n }));\n },\n addKeysToSelection(selectedKeys: Selection) {\n dispatch(state => {\n if (state.selectedKeys === 'all') {\n return state;\n }\n if (selectedKeys === 'all') {\n return {\n ...state,\n selectedKeys: 'all'\n };\n }\n\n return {\n ...state,\n selectedKeys: new Set([...state.selectedKeys, ...selectedKeys])\n };\n });\n },\n removeKeysFromSelection(selectedKeys: Selection) {\n dispatch(state => {\n if (selectedKeys === 'all') {\n return {\n ...state,\n selectedKeys: new Set()\n };\n }\n\n let selection: Selection =\n state.selectedKeys === 'all'\n ? new Set(state.items.map(getKey!))\n : new Set(state.selectedKeys);\n for (let key of selectedKeys) {\n selection.delete(key);\n }\n return {\n ...state,\n selectedKeys: selection\n };\n });\n },\n setFilterText(filterText: string) {\n dispatch(state => ({\n ...state,\n filterText\n }));\n },\n insert(index: number, ...values: T[]) {\n dispatch(state => insert(state, index, ...values));\n },\n insertBefore(key: Key, ...values: T[]) {\n dispatch(state => {\n let index = state.items.findIndex(item => getKey?.(item) === key);\n if (index === -1) {\n if (state.items.length === 0) {\n index = 0;\n } else {\n return state;\n }\n }\n\n return insert(state, index, ...values);\n });\n },\n insertAfter(key: Key, ...values: T[]) {\n dispatch(state => {\n let index = state.items.findIndex(item => getKey?.(item) === key);\n if (index === -1) {\n if (state.items.length === 0) {\n index = 0;\n } else {\n return state;\n }\n }\n\n return insert(state, index + 1, ...values);\n });\n },\n prepend(...values: T[]) {\n dispatch(state => insert(state, 0, ...values));\n },\n append(...values: T[]) {\n dispatch(state => insert(state, state.items.length, ...values));\n },\n remove(...keys: Key[]) {\n dispatch(state => {\n let keySet = new Set(keys);\n let items = state.items.filter(item => !keySet.has(getKey!(item)));\n\n let selection: Selection = 'all';\n if (state.selectedKeys !== 'all') {\n selection = new Set(state.selectedKeys);\n for (let key of keys) {\n selection.delete(key);\n }\n }\n if (cursor == null && items.length === 0) {\n selection = new Set();\n }\n\n return {\n ...state,\n items,\n selectedKeys: selection\n };\n });\n },\n removeSelectedItems() {\n dispatch(state => {\n if (state.selectedKeys === 'all') {\n return {\n ...state,\n items: [],\n selectedKeys: new Set()\n };\n }\n\n let selectedKeys = state.selectedKeys;\n let items = state.items.filter(item => !selectedKeys.has(getKey!(item)));\n return {\n ...state,\n items,\n selectedKeys: new Set()\n };\n });\n },\n move(key: Key, toIndex: number) {\n dispatch(state => {\n let index = state.items.findIndex(item => getKey!(item) === key);\n if (index === -1) {\n return state;\n }\n\n let copy = state.items.slice();\n let [item] = copy.splice(index, 1);\n copy.splice(toIndex, 0, item);\n return {\n ...state,\n items: copy\n };\n });\n },\n moveBefore(key: Key, keys: Iterable<Key>) {\n dispatch(state => {\n let toIndex = state.items.findIndex(item => getKey!(item) === key);\n if (toIndex === -1) {\n return state;\n }\n\n // Find indices of keys to move. Sort them so that the order in the list is retained.\n let keyArray = Array.isArray(keys) ? keys : [...keys];\n let indices = keyArray\n .map(key => state.items.findIndex(item => getKey!(item) === key))\n .sort((a, b) => a - b);\n return move(state, indices, toIndex);\n });\n },\n moveAfter(key: Key, keys: Iterable<Key>) {\n dispatch(state => {\n let toIndex = state.items.findIndex(item => getKey!(item) === key);\n if (toIndex === -1) {\n return state;\n }\n\n let keyArray = Array.isArray(keys) ? keys : [...keys];\n let indices = keyArray\n .map(key => state.items.findIndex(item => getKey!(item) === key))\n .sort((a, b) => a - b);\n return move(state, indices, toIndex + 1);\n });\n },\n update(key: Key, newValue: T | ((prev: T) => T)) {\n dispatch(state => {\n let index = state.items.findIndex(item => getKey!(item) === key);\n if (index === -1) {\n return state;\n }\n\n let updatedValue: T;\n if (typeof newValue === 'function') {\n updatedValue = (newValue as (prev: T) => T)(state.items[index]);\n } else {\n updatedValue = newValue;\n }\n\n return {\n ...state,\n items: [...state.items.slice(0, index), updatedValue, ...state.items.slice(index + 1)]\n };\n });\n }\n };\n}\n\nfunction insert<T>(state: ListState<T>, index: number, ...values: T[]): ListState<T> {\n return {\n ...state,\n items: [...state.items.slice(0, index), ...values, ...state.items.slice(index)]\n };\n}\n\nfunction move<T>(state: ListState<T>, indices: number[], toIndex: number): ListState<T> {\n // Shift the target down by the number of items being moved from before the target\n toIndex -= indices.filter(index => index < toIndex).length;\n\n let moves = indices.map(from => ({\n from,\n to: toIndex++\n }));\n\n // Shift later from indices down if they have a larger index\n for (let i = 0; i < moves.length; i++) {\n let a = moves[i].from;\n for (let j = i; j < moves.length; j++) {\n let b = moves[j].from;\n\n if (b > a) {\n moves[j].from--;\n }\n }\n }\n\n // Interleave the moves so they can be applied one by one rather than all at once\n for (let i = 0; i < moves.length; i++) {\n let a = moves[i];\n for (let j = moves.length - 1; j > i; j--) {\n let b = moves[j];\n\n if (b.from < a.to) {\n a.to++;\n } else {\n b.from++;\n }\n }\n }\n\n let copy = state.items.slice();\n for (let move of moves) {\n let [item] = copy.splice(move.from, 1);\n copy.splice(move.to, 0, item);\n }\n\n return {\n ...state,\n items: copy\n };\n}\n","import { extendTailwindMerge } from \"tailwind-merge\";\n\nconst twMerge = extendTailwindMerge({\n extend: {\n theme: {\n text: [\"display-xs\", \"display-sm\", \"display-md\", \"display-lg\", \"display-xl\", \"display-2xl\"],\n },\n },\n});\n\n/**\n * This function is a wrapper around the twMerge function.\n * It is used to merge the classes inside style objects.\n */\nexport const cx = twMerge;\n\n/**\n * This function does nothing besides helping us to be able to\n * sort the classes inside style objects which is not supported\n * by the Tailwind IntelliSense by default.\n */\nexport function sortCx<T extends Record<string, string | number | Record<string, string | number | Record<string, string | number>>>>(classes: T): T {\n return classes;\n}\n","\"use client\";\n\n/** Figma: Tooltip (1052:485) */\n\nimport type { ReactNode } from \"react\";\nimport type {\n ButtonProps as AriaButtonProps,\n TooltipProps as AriaTooltipProps,\n TooltipTriggerComponentProps as AriaTooltipTriggerComponentProps,\n} from \"react-aria-components\";\nimport { Button as AriaButton, OverlayArrow as AriaOverlayArrow, Tooltip as AriaTooltip, TooltipTrigger as AriaTooltipTrigger } from \"react-aria-components\";\nimport { cx } from \"@/utils/cx\";\n\ninterface TooltipProps extends AriaTooltipTriggerComponentProps, Omit<AriaTooltipProps, \"children\"> {\n /**\n * The title of the tooltip.\n */\n title: ReactNode;\n /**\n * The description of the tooltip.\n */\n description?: ReactNode;\n /**\n * Whether to show the arrow on the tooltip.\n *\n * @default false\n */\n arrow?: boolean;\n /**\n * Delay in milliseconds before the tooltip is shown on first hover.\n *\n * @default 100\n */\n delay?: number;\n}\n\nexport const Tooltip = ({\n title,\n description,\n children,\n arrow = false,\n delay = 100,\n closeDelay = 0,\n trigger,\n isDisabled,\n isOpen,\n defaultOpen,\n offset = 6,\n crossOffset,\n placement = \"top\",\n onOpenChange,\n ...tooltipProps\n}: TooltipProps) => {\n const isTopOrBottomLeft = [\"top left\", \"top end\", \"bottom left\", \"bottom end\"].includes(placement);\n const isTopOrBottomRight = [\"top right\", \"top start\", \"bottom right\", \"bottom start\"].includes(placement);\n // Set negative cross offset for left and right placement to visually balance the tooltip.\n const calculatedCrossOffset = isTopOrBottomLeft ? -12 : isTopOrBottomRight ? 12 : 0;\n\n return (\n <AriaTooltipTrigger {...{ trigger, delay, closeDelay, isDisabled, isOpen, defaultOpen, onOpenChange }}>\n {children}\n\n <AriaTooltip\n {...tooltipProps}\n offset={offset}\n placement={placement}\n crossOffset={crossOffset ?? calculatedCrossOffset}\n className={({ isEntering, isExiting }) => cx(isEntering && \"ease-out animate-in\", isExiting && \"ease-in animate-out\")}\n >\n {({ isEntering, isExiting }) => (\n <div\n className={cx(\n \"z-50 flex max-w-xs origin-(--trigger-anchor-point) flex-col items-start gap-1 rounded-lg bg-primary-solid px-3 shadow-lg will-change-transform\",\n description ? \"py-3\" : \"py-2\",\n\n isEntering &&\n \"ease-out animate-in fade-in zoom-in-95 in-placement-left:slide-in-from-right-0.5 in-placement-right:slide-in-from-left-0.5 in-placement-top:slide-in-from-bottom-0.5 in-placement-bottom:slide-in-from-top-0.5\",\n isExiting &&\n \"ease-in animate-out fade-out zoom-out-95 in-placement-left:slide-out-to-right-0.5 in-placement-right:slide-out-to-left-0.5 in-placement-top:slide-out-to-bottom-0.5 in-placement-bottom:slide-out-to-top-0.5\",\n )}\n >\n <span className=\"text-xs font-semibold text-white\">{title}</span>\n\n {description && <span className=\"text-xs font-medium text-tooltip-supporting-text\">{description}</span>}\n\n {arrow && (\n <AriaOverlayArrow>\n <svg\n viewBox=\"0 0 100 100\"\n className=\"size-2.5 fill-bg-primary-solid in-placement-left:-rotate-90 in-placement-right:rotate-90 in-placement-top:rotate-0 in-placement-bottom:rotate-180\"\n >\n <path d=\"M0,0 L35.858,35.858 Q50,50 64.142,35.858 L100,0 Z\" />\n </svg>\n </AriaOverlayArrow>\n )}\n </div>\n )}\n </AriaTooltip>\n </AriaTooltipTrigger>\n );\n};\n\ninterface TooltipTriggerProps extends AriaButtonProps {}\n\nexport const TooltipTrigger = ({ children, className, ...buttonProps }: TooltipTriggerProps) => {\n return (\n <AriaButton {...buttonProps} className={(values) => cx(\"h-max w-max outline-hidden\", typeof className === \"function\" ? className(values) : className)}>\n {children}\n </AriaButton>\n );\n};\n","\"use client\";\n\nimport { cx } from \"@/utils/cx\";\n\nconst sizes = {\n xs: \"size-1.5\",\n sm: \"size-2\",\n md: \"size-2.5\",\n lg: \"size-3\",\n xl: \"size-3.5\",\n \"2xl\": \"size-4\",\n \"3xl\": \"size-4.5\",\n \"4xl\": \"size-5\",\n};\n\ninterface AvatarOnlineIndicatorProps {\n size: \"xs\" | \"sm\" | \"md\" | \"lg\" | \"xl\" | \"2xl\" | \"3xl\" | \"4xl\";\n status: \"online\" | \"offline\";\n className?: string;\n}\n\nexport const AvatarOnlineIndicator = ({ size, status, className }: AvatarOnlineIndicatorProps) => (\n <span\n className={cx(\n \"absolute right-0 bottom-0 flex justify-center rounded-full ring-[1.5px] ring-bg-primary\",\n status === \"online\" ? \"bg-fg-success-secondary\" : \"bg-utility-neutral-300\",\n sizes[size],\n className,\n )}\n style={{\n backgroundImage:\n \"radial-gradient(43.75% 43.75% at 50% 28.75%, rgba(255, 255, 255, 0.05) 0%, rgba(255, 255, 255, 0.00) 100%), radial-gradient(50% 50% at 50% 50%, rgba(255, 255, 255, 0.00) 74.66%, rgba(255, 255, 255, 0.18) 100%), radial-gradient(75% 75% at 50% 0%, rgba(255, 255, 255, 0.00) 0%, rgba(255, 255, 255, 0.00) 50%, rgba(255, 255, 255, 0.08) 99%, rgba(255, 255, 255, 0.00) 100%)\",\n }}\n >\n {/* Reflection */}\n <svg viewBox=\"0 0 7.2 2.85\" fill=\"none\" className=\"mt-[10%] h-[20%] w-[60%]\">\n <path\n d=\"M7.2 1.83107C7.2 2.84235 5.58823 2.19729 3.6 2.19729C1.61177 2.19729 0 2.84235 0 1.83107C0 0.8198 1.61177 0 3.6 0C5.58823 0 7.2 0.8198 7.2 1.83107Z\"\n fill=\"url(#reflection-gradient)\"\n fillOpacity=\"0.4\"\n />\n <defs>\n <linearGradient id=\"reflection-gradient\" x1=\"3.6\" y1=\"0\" x2=\"3.6\" y2=\"2.4\" gradientUnits=\"userSpaceOnUse\">\n <stop stopColor=\"white\" />\n <stop offset=\"1\" stopColor=\"white\" stopOpacity=\"0.1\" />\n </linearGradient>\n </defs>\n </svg>\n </span>\n);\n","\"use client\";\n\nimport { cx } from \"@/utils/cx\";\n\nconst sizes = {\n xs: \"size-2.5\",\n sm: \"size-3\",\n md: \"size-3.5\",\n lg: \"size-4\",\n xl: \"size-4.5\",\n \"2xl\": \"size-5\",\n \"3xl\": \"size-6\",\n \"4xl\": \"size-8\",\n};\n\ninterface VerifiedTickProps {\n size: \"xs\" | \"sm\" | \"md\" | \"lg\" | \"xl\" | \"2xl\" | \"3xl\" | \"4xl\";\n className?: string;\n}\n\nexport const VerifiedTick = ({ size, className }: VerifiedTickProps) => (\n <svg className={cx(\"z-10 text-utility-blue-500\", sizes[size], className)} viewBox=\"0 0 10 10\" fill=\"none\">\n <path\n d=\"M7.72237 1.77098C7.81734 2.00068 7.99965 2.18326 8.2292 2.27858L9.03413 2.61199C9.26384 2.70714 9.44635 2.88965 9.5415 3.11936C9.63665 3.34908 9.63665 3.60718 9.5415 3.83689L9.20833 4.64125C9.11313 4.87106 9.113 5.12943 9.20863 5.35913L9.54122 6.16325C9.58839 6.27702 9.61268 6.39897 9.6127 6.52214C9.61272 6.6453 9.58847 6.76726 9.54134 6.88105C9.4942 6.99484 9.42511 7.09823 9.33801 7.18531C9.2509 7.27238 9.14749 7.34144 9.03369 7.38854L8.22934 7.72171C7.99964 7.81669 7.81706 7.99899 7.72174 8.22855L7.38833 9.03348C7.29318 9.26319 7.11067 9.4457 6.88096 9.54085C6.65124 9.636 6.39314 9.636 6.16343 9.54085L5.35907 9.20767C5.12935 9.11276 4.87134 9.11295 4.64177 9.20821L3.83684 9.54115C3.60725 9.63608 3.34937 9.636 3.11984 9.54092C2.89032 9.44585 2.70791 9.26356 2.6127 9.03409L2.27918 8.22892C2.18421 7.99923 2.0019 7.81665 1.77235 7.72133L0.967421 7.38792C0.737807 7.29281 0.555355 7.11041 0.460169 6.88083C0.364983 6.65125 0.364854 6.39327 0.45981 6.16359L0.792984 5.35924C0.8879 5.12952 0.887707 4.87151 0.792445 4.64193L0.459749 3.83642C0.41258 3.72265 0.388291 3.60069 0.388272 3.47753C0.388252 3.35436 0.412501 3.2324 0.459634 3.11861C0.506767 3.00482 0.57586 2.90144 0.662965 2.81436C0.75007 2.72728 0.853479 2.65822 0.967283 2.61113L1.77164 2.27795C2.00113 2.18306 2.1836 2.00099 2.27899 1.7717L2.6124 0.966768C2.70755 0.737054 2.89006 0.554547 3.11978 0.459397C3.34949 0.364246 3.60759 0.364246 3.83731 0.459397L4.64166 0.792571C4.87138 0.887487 5.12939 0.887293 5.35897 0.792031L6.16424 0.459913C6.39392 0.364816 6.65197 0.364836 6.88164 0.459968C7.11131 0.555099 7.29379 0.737554 7.38895 0.967208L7.72247 1.77238L7.72237 1.77098Z\"\n className=\"fill-current\"\n />\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M6.95829 3.68932C7.02509 3.58439 7.04747 3.45723 7.02051 3.3358C6.99356 3.21437 6.91946 3.10862 6.81454 3.04182C6.70961 2.97502 6.58245 2.95264 6.46102 2.97959C6.33959 3.00655 6.23384 3.08064 6.16704 3.18557L4.33141 6.06995L3.49141 5.01995C3.41375 4.92281 3.30069 4.8605 3.17709 4.84673C3.05349 4.83296 2.92949 4.86885 2.83235 4.94651C2.73522 5.02417 2.67291 5.13723 2.65914 5.26083C2.64536 5.38443 2.68125 5.50843 2.75891 5.60557L4.00891 7.16807C4.0555 7.22638 4.11533 7.27271 4.18344 7.30323C4.25154 7.33375 4.32595 7.34757 4.40047 7.34353C4.47499 7.3395 4.54747 7.31773 4.61188 7.28004C4.67629 7.24234 4.73077 7.18981 4.77079 7.12682L6.95829 3.68932Z\"\n fill=\"white\"\n />\n </svg>\n);\n","\"use client\";\n\nimport { cx } from \"@/utils/cx\";\n\ninterface AvatarCountProps {\n count: number;\n className?: string;\n}\n\nexport const AvatarCount = ({ count, className }: AvatarCountProps) => (\n <div className={cx(\"absolute right-0 bottom-0 p-px\", className)}>\n <div className=\"flex size-3.5 items-center justify-center rounded-full bg-fg-error-primary text-center text-[10px] leading-[13px] font-bold text-white\">\n {count}\n </div>\n </div>\n);\n","\"use client\";\n\n/** Figma: Avatar (18:1350) */\n\nimport { type FC, type ReactNode, useState } from \"react\";\nimport { UserIcon as User01 } from \"@phosphor-icons/react/dist/csr/User\";\nimport { cx } from \"@/utils/cx\";\nimport { AvatarOnlineIndicator, VerifiedTick } from \"./base-components\";\nimport { AvatarCount } from \"./base-components/avatar-count\";\n\nexport interface AvatarProps {\n size?: \"xs\" | \"sm\" | \"md\" | \"lg\" | \"xl\" | \"2xl\";\n className?: string;\n /**\n * The class name for the main child of the avatar.\n */\n contentClassName?: string;\n src?: string | null;\n alt?: string;\n /**\n * Display an inner contrast border around the avatar image.\n */\n contrastBorder?: boolean;\n /**\n * Whether the avatar should be rounded.\n * @default true\n */\n rounded?: boolean;\n /**\n * Display an outer border around the avatar.\n */\n border?: boolean;\n /**\n * Display a badge (i.e. company logo).\n */\n badge?: ReactNode;\n /**\n * Display a status indicator.\n */\n status?: \"online\" | \"offline\";\n /**\n * Display a verified tick icon.\n *\n * @default false\n */\n verified?: boolean;\n /**\n * Display a count badge.\n */\n count?: number;\n /**\n * The initials of the user to display if no image is available.\n */\n initials?: string;\n /**\n * An icon to display if no image is available.\n */\n placeholderIcon?: FC<{ className?: string }>;\n /**\n * A placeholder to display if no image is available.\n */\n placeholder?: ReactNode;\n\n /**\n * Whether the avatar should show a focus ring when the parent group is in focus.\n * For example, when the avatar is wrapped inside a link.\n *\n * @default false\n */\n focusable?: boolean;\n}\n\nconst styles = {\n xs: { root: \"size-6\", rootWithBorder: \"p-px\", initials: \"text-xs font-semibold\", icon: \"size-4\" },\n sm: { root: \"size-8\", rootWithBorder: \"p-px\", initials: \"text-sm font-semibold\", icon: \"size-5\" },\n md: { root: \"size-10\", rootWithBorder: \"p-px\", initials: \"text-md font-semibold\", icon: \"size-6\" },\n lg: { root: \"size-12\", rootWithBorder: \"p-[1.5px]\", initials: \"text-lg font-semibold\", icon: \"size-7\" },\n xl: { root: \"size-14\", rootWithBorder: \"p-0.5\", initials: \"text-xl font-semibold\", icon: \"size-8\" },\n \"2xl\": { root: \"size-16\", rootWithBorder: \"p-0.5\", initials: \"text-display-xs font-semibold\", icon: \"size-8\" },\n};\n\nexport const Avatar = ({\n size = \"md\",\n src,\n alt,\n initials,\n placeholder,\n placeholderIcon: PlaceholderIcon,\n border,\n badge,\n status,\n verified,\n count,\n focusable = false,\n rounded = true,\n className,\n contentClassName,\n}: AvatarProps) => {\n const [isFailed, setIsFailed] = useState(false);\n\n const canShowImage = src && !isFailed;\n\n const renderMainContent = () => {\n if (canShowImage) {\n return <img data-avatar-img className=\"size-full object-cover\" src={src} alt={alt} onError={() => setIsFailed(true)} />;\n }\n\n if (initials) {\n return <span className={cx(\"text-quaternary\", styles[size].initials)}>{initials}</span>;\n }\n\n if (PlaceholderIcon) {\n return <PlaceholderIcon className={cx(\"text-fg-quaternary\", styles[size].icon)} />;\n }\n\n return placeholder || <User01 className={cx(\"text-fg-quaternary\", styles[size].icon)} />;\n };\n\n const renderBadgeContent = () => {\n if (status) {\n return <AvatarOnlineIndicator status={status} size={size} />;\n }\n\n if (verified) {\n return <VerifiedTick size={size} className={cx(\"absolute right-0 bottom-0\", size === \"xs\" && \"-right-px -bottom-px\")} />;\n }\n\n if (count) {\n return <AvatarCount count={count} />;\n }\n\n return badge;\n };\n\n return (\n <div\n data-avatar\n className={cx(\n \"relative inline-flex shrink-0 rounded-[7px]\",\n rounded && \"rounded-full\",\n // Focus styles\n focusable &&\n \"outline-none group-focus-visible:[box-shadow:0px_0px_0px_2px_var(--color-bg-primary),0px_0px_0px_4px_var(--color-focus-ring)]\",\n border && \"ring-1 ring-secondary_alt\",\n border && styles[size].rootWithBorder,\n styles[size].root,\n className,\n )}\n >\n <div\n className={cx(\n \"relative inline-flex size-full shrink-0 items-center justify-center overflow-hidden rounded-md bg-tertiary outline-[0.5px] -outline-offset-[0.5px] outline-black/16 before:inset-[0.5px]\",\n rounded && \"rounded-full\",\n canShowImage &&\n size !== \"xs\" &&\n \"before:absolute before:inset-0 before:rounded-[inherit] before:border before:border-white/32 before:mask-[linear-gradient(to_bottom,black_0%,transparent_25%,transparent_75%,black_100%)]\",\n contentClassName,\n )}\n >\n {renderMainContent()}\n </div>\n {renderBadgeContent()}\n </div>\n );\n};\n","\"use client\";\n\nimport type { ReactNode, Ref } from \"react\";\nimport type { TextProps as AriaTextProps } from \"react-aria-components\";\nimport { Text as AriaText } from \"react-aria-components\";\nimport { cx } from \"@/utils/cx\";\n\ninterface HintTextProps extends AriaTextProps {\n /** Indicates that the hint text is an error message. */\n isInvalid?: boolean;\n ref?: Ref<HTMLElement>;\n size?: \"sm\" | \"md\";\n children: ReactNode;\n}\n\nexport const HintText = ({ isInvalid, className, size = \"md\", ...props }: HintTextProps) => {\n return (\n <AriaText\n {...props}\n slot={isInvalid ? \"errorMessage\" : \"description\"}\n className={cx(\n \"text-sm text-tertiary\",\n\n // Size\n size === \"sm\" && \"text-xs\",\n \"in-data-[input-size=sm]:text-xs\",\n\n // Invalid state\n isInvalid && \"text-error-primary\",\n \"group-invalid:text-error-primary\",\n\n className,\n )}\n />\n );\n};\n\nHintText.displayName = \"HintText\";\n","\"use client\";\n\nimport type { ReactNode, Ref } from \"react\";\nimport { QuestionIcon as HelpCircle } from \"@phosphor-icons/react/dist/csr/Question\";\nimport type { LabelProps as AriaLabelProps } from \"react-aria-components\";\nimport { Label as AriaLabel } from \"react-aria-components\";\nimport { Tooltip, TooltipTrigger } from \"@/components/base/tooltip/tooltip\";\nimport { cx } from \"@/utils/cx\";\n\ninterface LabelProps extends AriaLabelProps {\n children: ReactNode;\n isInvalid?: boolean;\n isRequired?: boolean;\n tooltip?: string;\n tooltipDescription?: string;\n ref?: Ref<HTMLLabelElement>;\n}\n\nexport const Label = ({ isInvalid, isRequired, tooltip, tooltipDescription, className, ...props }: LabelProps) => {\n return (\n <AriaLabel\n // Used for conditionally hiding/showing the label element via CSS:\n // <Input label=\"Visible only on mobile\" className=\"lg:**:data-label:hidden\" />\n // or\n // <Input label=\"Visible only on mobile\" className=\"lg:label:hidden\" />\n data-label=\"true\"\n {...props}\n className={cx(\"flex cursor-default items-center gap-0.5 text-sm font-medium text-secondary\", className)}\n >\n {props.children}\n\n <span\n className={cx(\n \"hidden text-brand-tertiary\",\n isRequired && \"block\",\n typeof isRequired === \"undefined\" && \"group-required:block\",\n\n isInvalid && \"text-error-primary\",\n typeof isInvalid === \"undefined\" && \"group-invalid:text-error-primary\",\n )}\n >\n *\n </span>\n\n {tooltip && (\n <Tooltip title={tooltip} description={tooltipDescription} placement=\"top\">\n <TooltipTrigger\n // `TooltipTrigger` inherits the disabled state from the parent form field\n // but we don't that. We want the tooltip be enabled even if the parent\n // field is disabled.\n isDisabled={false}\n className=\"cursor-pointer text-fg-quaternary transition duration-200 hover:text-fg-quaternary_hover focus:text-fg-quaternary_hover\"\n >\n <HelpCircle className=\"size-4\" />\n </TooltipTrigger>\n </Tooltip>\n )}\n </AriaLabel>\n );\n};\n\nLabel.displayName = \"Label\";\n","\"use client\";\n\n/** Figma: Select menu popover (11132:11643) — floating menu border + shadow. */\n\nimport type { RefAttributes } from \"react\";\nimport type { PopoverProps as AriaPopoverProps } from \"react-aria-components\";\nimport { Popover as AriaPopover } from \"react-aria-components\";\nimport { cx } from \"@/utils/cx\";\n\ninterface PopoverProps extends AriaPopoverProps, RefAttributes<HTMLElement> {\n size: \"sm\" | \"md\" | \"lg\";\n}\n\nexport const Popover = (props: PopoverProps) => {\n return (\n <AriaPopover\n placement=\"bottom\"\n containerPadding={0}\n offset={4}\n {...props}\n className={(state) =>\n cx(\n \"w-(--trigger-width) origin-(--trigger-anchor-point) overflow-x-hidden overflow-y-auto rounded-lg bg-primary py-1 shadow-lg ring-1 ring-secondary_alt outline-hidden will-change-transform\",\n\n state.isEntering &&\n \"duration-150 ease-out animate-in fade-in placement-right:slide-in-from-left-0.5 placement-top:slide-in-from-bottom-0.5 placement-bottom:slide-in-from-top-0.5\",\n state.isExiting &&\n \"duration-100 ease-in animate-out fade-out placement-right:slide-out-to-left-0.5 placement-top:slide-out-to-bottom-0.5 placement-bottom:slide-out-to-top-0.5\",\n\n props.size === \"sm\" && \"max-h-56!\",\n props.size === \"md\" && \"max-h-64!\",\n props.size === \"lg\" && \"max-h-80!\",\n\n typeof props.className === \"function\" ? props.className(state) : props.className,\n )\n }\n />\n );\n};\n","\"use client\";\n\nimport type { FC, ReactNode } from \"react\";\nimport { createContext } from \"react\";\n\nexport type SelectItemType = {\n /** Unique identifier for the item. */\n id: string | number;\n /** The primary display text. */\n label?: string;\n /** Avatar image URL. */\n avatarUrl?: string;\n /** Whether the item is disabled. */\n isDisabled?: boolean;\n /** Secondary text displayed alongside the label. */\n supportingText?: string;\n /** Leading icon component or element. */\n icon?: FC | ReactNode;\n};\n\nexport interface CommonProps {\n /** Helper text displayed below the input. */\n hint?: string;\n /** Field label displayed above the input. */\n label?: string;\n /** Tooltip text for the help icon next to the label. */\n tooltip?: string;\n /**\n * The size of the component.\n * @default \"md\"\n */\n size?: \"sm\" | \"md\" | \"lg\";\n /** Placeholder text when no value is selected. */\n placeholder?: string;\n /** Whether to hide the required indicator from the label. */\n hideRequiredIndicator?: boolean;\n}\n\nexport const sizes = {\n sm: {\n root: \"py-2 pl-3 pr-2.5 gap-2 *:data-icon:size-4 *:data-icon:stroke-[2.25px]\",\n withIcon: \"\",\n text: \"text-sm\",\n textContainer: \"gap-x-1.5\",\n shortcut: \"pr-2.5\",\n },\n md: { root: \"py-2 px-3 gap-2 *:data-icon:size-5\", withIcon: \"\", text: \"text-md\", textContainer: \"gap-x-1.5\", shortcut: \"pr-2.5\" },\n lg: { root: \"py-2.5 px-3.5 gap-2 *:data-icon:size-5\", withIcon: \"\", text: \"text-md\", textContainer: \"gap-x-1.5\", shortcut: \"pr-3\" },\n};\n\nexport const SelectContext = createContext<{ size: \"sm\" | \"md\" | \"lg\" }>({ size: \"md\" });\n","\"use client\";\n\nimport type { RefAttributes } from \"react\";\nimport { XIcon as XClose } from \"@phosphor-icons/react/dist/csr/X\";\nimport { Button as AriaButton, type ButtonProps as AriaButtonProps } from \"react-aria-components\";\nimport { cx } from \"@/utils/cx\";\n\n/**\n * Figma: _Tag close X (3307:417672)\n * Total hit target: sm 14px, md 16px, lg 20px (padding + icon).\n */\n\nconst focusShadowPlain =\n \"focus-visible:outline-none focus-visible:[box-shadow:0px_0px_0px_2px_var(--color-bg-primary),0px_0px_0px_4px_var(--color-focus-ring)]\";\n\ninterface TagCloseXProps extends AriaButtonProps, RefAttributes<HTMLButtonElement> {\n size?: \"sm\" | \"md\" | \"lg\";\n className?: string;\n}\n\nconst styles = {\n sm: { root: \"p-0.5\", icon: \"size-2.5\" },\n md: { root: \"p-0.5\", icon: \"size-3\" },\n lg: { root: \"p-[3px]\", icon: \"size-3.5\" },\n};\n\nexport const TagCloseX = ({ size = \"md\", className, ...otherProps }: TagCloseXProps) => {\n return (\n <AriaButton\n slot=\"remove\"\n aria-label=\"Remove this tag\"\n className={cx(\n \"flex cursor-pointer rounded-[3px] text-fg-quaternary outline-transparent transition duration-100 ease-linear hover:bg-primary_hover focus-visible:rounded-[3px] disabled:cursor-not-allowed disabled:opacity-50\",\n focusShadowPlain,\n styles[size].root,\n className,\n )}\n {...otherProps}\n >\n <XClose className={cx(\"shrink-0 transition-inherit-all\", styles[size].icon)} />\n </AriaButton>\n );\n};\n","import { useEffect } from \"react\";\nimport type { RefObject } from \"@react-types/shared\";\n\n/**\n * Checks if the ResizeObserver API is supported.\n * @returns True if the ResizeObserver API is supported, false otherwise.\n */\nfunction hasResizeObserver() {\n return typeof window.ResizeObserver !== \"undefined\";\n}\n\n/**\n * The options for the useResizeObserver hook.\n */\ntype useResizeObserverOptionsType<T> = {\n /**\n * The ref to the element to observe.\n */\n ref: RefObject<T | undefined | null> | undefined;\n /**\n * The box to observe.\n */\n box?: ResizeObserverBoxOptions;\n /**\n * The callback function to call when the size changes.\n */\n onResize: () => void;\n};\n\n/**\n * A hook that observes the size of an element and calls a callback function when the size changes.\n * @param options - The options for the hook.\n */\nexport function useResizeObserver<T extends Element>(options: useResizeObserverOptionsType<T>) {\n const { ref, box, onResize } = options;\n\n useEffect(() => {\n const element = ref?.current;\n if (!element) {\n return;\n }\n\n if (!hasResizeObserver()) {\n window.addEventListener(\"resize\", onResize, false);\n\n return () => {\n window.removeEventListener(\"resize\", onResize, false);\n };\n } else {\n const resizeObserverInstance = new window.ResizeObserver((entries) => {\n if (!entries.length) {\n return;\n }\n\n onResize();\n });\n\n resizeObserverInstance.observe(element, { box });\n\n return () => {\n if (element) {\n resizeObserverInstance.unobserve(element);\n }\n };\n }\n }, [onResize, ref, box]);\n}\n","\"use client\";\n\nimport { type ComponentType, type HTMLAttributes, type ReactNode, type Ref, createContext, useContext, useState } from \"react\";\nimport { EyeIcon as Eye } from \"@phosphor-icons/react/dist/csr/Eye\";\nimport { EyeSlashIcon as EyeOff } from \"@phosphor-icons/react/dist/csr/EyeSlash\";\nimport { QuestionIcon as HelpCircle } from \"@phosphor-icons/react/dist/csr/Question\";\nimport { InfoIcon as InfoCircle } from \"@phosphor-icons/react/dist/csr/Info\";\nimport type { InputProps as AriaInputProps, TextFieldProps as AriaTextFieldProps } from \"react-aria-components\";\nimport { Button as AriaButton, Group as AriaGroup, Input as AriaInput, TextField as AriaTextField } from \"react-aria-components\";\nimport { HintText } from \"@/components/base/input/hint-text\";\nimport { Label } from \"@/components/base/input/label\";\nimport { Tooltip, TooltipTrigger } from \"@/components/base/tooltip/tooltip\";\nimport { cx, sortCx } from \"@/utils/cx\";\n\n/**\n * Figma: Inputs (85:1269)\n *\n * Default: border (1px) border-primary + shadow-xs.\n * Focus: 1px border-brand + inset ring-brand (2px visual, no layout shift from border-2).\n * Error default: border-error_subtle; error focus: border-error + inset ring-error.\n */\nexport const inputFocusRingShadow = \"border-brand ring-1 ring-inset ring-brand\";\nexport const inputErrorFocusRingShadow = \"border-error ring-1 ring-inset ring-error\";\n/** Shell focus overlay — border + inset ring on one ::after above children (no host border-brand; avoids double-ring gap). */\nexport const inputFocusRingShellOverlay =\n \"after:pointer-events-none after:absolute after:-inset-px after:z-10 after:rounded-lg after:border after:border-solid after:border-brand after:ring-1 after:ring-inset after:ring-brand after:content-['']\";\nexport const inputErrorFocusRingShellOverlay =\n \"after:pointer-events-none after:absolute after:-inset-px after:z-10 after:rounded-lg after:border after:border-solid after:border-error after:ring-1 after:ring-inset after:ring-error after:content-['']\";\nexport const inputErrorFocusRingGroupInvalidShellOverlay =\n \"group-invalid:focus-within:after:pointer-events-none group-invalid:focus-within:after:absolute group-invalid:focus-within:after:-inset-px group-invalid:focus-within:after:z-10 group-invalid:focus-within:after:rounded-lg group-invalid:focus-within:after:border group-invalid:focus-within:after:border-solid group-invalid:focus-within:after:border-error group-invalid:focus-within:after:ring-1 group-invalid:focus-within:after:ring-inset group-invalid:focus-within:after:ring-error group-invalid:focus-within:after:content-['']\";\nexport const inputFocusVisibleRingShadow =\n \"focus-visible:outline-none focus-visible:border-brand focus-visible:ring-1 focus-visible:ring-inset focus-visible:ring-brand\";\nexport const inputErrorFocusVisibleRingShadow =\n \"focus-visible:outline-none focus-visible:border-error focus-visible:ring-1 focus-visible:ring-inset focus-visible:ring-error\";\n\nexport interface InputBaseProps extends Omit<AriaInputProps, \"size\"> {\n /** Tooltip message on hover. */\n tooltip?: string;\n /** Whether the input is invalid. */\n isInvalid?: boolean;\n /** Whether the input is disabled. */\n isDisabled?: boolean;\n /** Whether the input is required. */\n isRequired?: boolean;\n /**\n * Input size.\n * @default \"sm\"\n */\n size?: \"sm\" | \"md\" | \"lg\";\n /** Placeholder text. */\n placeholder?: string;\n /** Class name for the icon. */\n iconClassName?: string;\n /** Class name for the input. */\n inputClassName?: string;\n /** Class name for the input wrapper. */\n wrapperClassName?: string;\n /** Class name for the tooltip. */\n tooltipClassName?: string;\n /** Keyboard shortcut to display. */\n shortcut?: string | boolean;\n ref?: Ref<HTMLInputElement>;\n groupRef?: Ref<HTMLDivElement>;\n /** Icon component to display on the left side of the input. */\n icon?: ComponentType<HTMLAttributes<HTMLOrSVGElement>>;\n}\n\nexport const InputBase = ({\n ref,\n tooltip,\n shortcut,\n groupRef,\n size = \"md\",\n isInvalid,\n isDisabled,\n isRequired,\n icon: Icon,\n placeholder,\n wrapperClassName,\n tooltipClassName,\n inputClassName,\n iconClassName,\n type = \"text\",\n ...inputProps\n}: InputBaseProps) => {\n const [isPasswordVisible, setIsPasswordVisible] = useState(false);\n\n // Check if the input has a leading icon or tooltip\n const hasTrailingIcon = tooltip || isInvalid;\n const hasLeadingIcon = Icon;\n\n // If the input is inside a `TextFieldContext`, use its context to simplify applying styles\n const context = useContext(TextFieldContext);\n\n const inputSize = context?.size || size;\n\n const sizes = sortCx({\n sm: {\n root: cx(\"px-3 py-2 text-sm\", hasLeadingIcon && \"pl-9\", hasTrailingIcon && \"pr-9\"),\n iconLeading: \"left-3 size-4 stroke-[2.25px]\",\n iconTrailing: \"right-3\",\n shortcut: \"pr-1.5\",\n },\n md: {\n root: cx(\"px-3 py-2 text-md\", hasLeadingIcon && \"pl-10\", hasTrailingIcon && \"pr-9\"),\n iconLeading: \"left-3 size-5\",\n iconTrailing: \"right-3\",\n shortcut: \"pr-2\",\n },\n lg: {\n root: cx(\"px-3.5 py-2.5 text-md\", hasLeadingIcon && \"pl-10.5\", hasTrailingIcon && \"pr-9.5\"),\n iconLeading: \"left-3.5 size-5\",\n iconTrailing: \"right-3.5\",\n shortcut: \"pr-2.5\",\n },\n });\n\n return (\n <AriaGroup\n {...{ isDisabled, isInvalid }}\n ref={groupRef}\n className={({ isFocusWithin, isDisabled, isInvalid }) =>\n cx(\n \"group/input relative flex w-full flex-row place-content-center place-items-center rounded-lg border border-solid border-primary bg-primary shadow-xs transition-[border-color,box-shadow] duration-100 ease-linear\",\n\n isFocusWithin && !isDisabled && !isInvalid && inputFocusRingShadow,\n\n // Disabled state styles\n isDisabled && \"cursor-not-allowed opacity-50\",\n \"group-disabled:cursor-not-allowed group-disabled:opacity-50\",\n\n // Invalid state styles\n isInvalid && !isFocusWithin && \"border-error_subtle\",\n \"group-invalid:border-error_subtle\",\n \"group-invalid:focus-within:border-error group-invalid:focus-within:ring-1 group-invalid:focus-within:ring-inset group-invalid:focus-within:ring-error\",\n\n // Invalid + focus — darker error stroke (not brand)\n isInvalid && isFocusWithin && inputErrorFocusRingShadow,\n\n context?.wrapperClassName,\n wrapperClassName,\n )\n }\n >\n {/* Leading icon and Payment icon */}\n {Icon && (\n <Icon className={cx(\"pointer-events-none absolute text-fg-quaternary\", sizes[inputSize].iconLeading, context?.iconClassName, iconClassName)} />\n )}\n\n {/* Input field */}\n <AriaInput\n {...(inputProps as AriaInputProps)}\n ref={ref}\n required={isRequired}\n type={type === \"password\" && isPasswordVisible ? \"text\" : type}\n placeholder={placeholder}\n className={cx(\n \"m-0 w-full bg-transparent text-primary ring-0 outline-hidden placeholder:text-placeholder autofill:rounded-lg autofill:text-primary disabled:cursor-not-allowed\",\n sizes[inputSize].root,\n context?.inputClassName,\n inputClassName,\n )}\n />\n\n {/* Tooltip and help icon */}\n {tooltip && type !== \"password\" && (\n <Tooltip title={tooltip} placement=\"top\">\n <TooltipTrigger\n className={cx(\n \"absolute cursor-pointer text-fg-quaternary transition duration-100 ease-linear group-invalid/input:hidden hover:text-fg-quaternary_hover focus:text-fg-quaternary_hover\",\n sizes[inputSize].iconTrailing,\n context?.tooltipClassName,\n tooltipClassName,\n )}\n >\n <HelpCircle className=\"size-4 stroke-[2.25px]\" />\n </TooltipTrigger>\n </Tooltip>\n )}\n\n {/* Invalid icon */}\n {type !== \"password\" && (\n <InfoCircle\n className={cx(\n \"pointer-events-none absolute hidden size-4 stroke-[2.25px] text-fg-error-secondary group-invalid/input:block\",\n sizes[inputSize].iconTrailing,\n context?.tooltipClassName,\n tooltipClassName,\n )}\n />\n )}\n\n {/* Password visibility toggle */}\n {type === \"password\" && (\n <AriaButton\n aria-label=\"Toggle password visibility\"\n onClick={() => setIsPasswordVisible(!isPasswordVisible)}\n className={cx(\n \"absolute flex cursor-pointer items-center justify-center text-fg-quaternary transition duration-100 ease-linear hover:text-fg-quaternary_hover focus:text-fg-quaternary_hover focus:outline-hidden\",\n sizes[inputSize].iconTrailing,\n )}\n >\n {isPasswordVisible ? <EyeOff className=\"size-4 stroke-[2.25px]\" /> : <Eye className=\"size-4 stroke-[2.25px]\" />}\n </AriaButton>\n )}\n\n {/* Shortcut */}\n {shortcut && (\n <div\n className={cx(\n \"pointer-events-none absolute inset-y-0.5 right-0.5 z-10 hidden items-center rounded-r-[inherit] bg-linear-to-r from-transparent to-bg-primary to-40% pl-8 md:flex\",\n sizes[inputSize].shortcut,\n )}\n >\n <span\n aria-hidden=\"true\"\n className=\"pointer-events-none rounded px-1 py-px text-xs font-medium text-quaternary ring-1 ring-secondary select-none ring-inset\"\n >\n {typeof shortcut === \"string\" ? shortcut : \"⌘K\"}\n </span>\n </div>\n )}\n </AriaGroup>\n );\n};\n\nInputBase.displayName = \"InputBase\";\n\ninterface TextFieldContextProps extends Partial<Pick<InputBaseProps, \"size\" | \"wrapperClassName\" | \"inputClassName\" | \"iconClassName\" | \"tooltipClassName\">> {}\n\nconst TextFieldContext = createContext<TextFieldContextProps>({});\n\nexport interface TextFieldProps extends AriaTextFieldProps, TextFieldContextProps {}\n\nexport const TextField = ({ className, size = \"md\", inputClassName, wrapperClassName, iconClassName, tooltipClassName, ...props }: TextFieldProps) => {\n return (\n <TextFieldContext.Provider value={{ inputClassName, wrapperClassName, iconClassName, tooltipClassName, size }}>\n <AriaTextField\n {...props}\n data-input-wrapper\n data-input-size={size}\n className={(state) =>\n cx(\"group flex h-max w-full flex-col items-start justify-start gap-1.5\", typeof className === \"function\" ? className(state) : className)\n }\n />\n </TextFieldContext.Provider>\n );\n};\n\nTextField.displayName = \"TextField\";\n\nexport interface InputProps\n extends\n AriaTextFieldProps,\n Pick<\n InputBaseProps,\n | \"ref\"\n | \"placeholder\"\n | \"icon\"\n | \"shortcut\"\n | \"tooltip\"\n | \"groupRef\"\n | \"size\"\n | \"wrapperClassName\"\n | \"inputClassName\"\n | \"iconClassName\"\n | \"tooltipClassName\"\n > {\n /** Label text for the input */\n label?: string;\n /** Helper text displayed below the input */\n hint?: ReactNode;\n /** Whether to hide required indicator from label */\n hideRequiredIndicator?: boolean;\n}\n\nexport const Input = ({\n size = \"md\",\n placeholder,\n icon: Icon,\n label,\n hint,\n shortcut,\n hideRequiredIndicator,\n className,\n ref,\n groupRef,\n tooltip,\n iconClassName,\n inputClassName,\n wrapperClassName,\n tooltipClassName,\n type = \"text\",\n ...props\n}: InputProps) => {\n return (\n <TextField aria-label={!label ? placeholder : undefined} {...props} size={size} className={className}>\n {({ isRequired, isInvalid }) => (\n <>\n {label && (\n <Label isRequired={hideRequiredIndicator ? !hideRequiredIndicator : isRequired} isInvalid={isInvalid}>\n {label}\n </Label>\n )}\n\n <InputBase\n {...{\n ref,\n groupRef,\n size,\n placeholder,\n icon: Icon,\n shortcut,\n iconClassName,\n inputClassName,\n wrapperClassName,\n tooltipClassName,\n tooltip,\n type,\n isInvalid,\n }}\n />\n\n {hint && <HintText isInvalid={isInvalid}>{hint}</HintText>}\n </>\n )}\n </TextField>\n );\n};\n\nInput.displayName = \"Input\";\n","\"use client\";\n\nimport { useLayoutEffect, useRef, type ReactNode, type Ref } from \"react\";\nimport { Checkbox as AriaCheckbox, type CheckboxProps as AriaCheckboxProps } from \"react-aria-components\";\nimport { cx } from \"@/utils/cx\";\n\nconst CHECKBOX_TICK_DELAY_MS = 60;\nconst CHECKBOX_TICK_DRAW_MS = 100;\n\n/** Draw-on-check tick animation — remounts when checked so it replays each time. */\nfunction CheckboxAnimatedCheckMark({ className }: { className?: string }) {\n const pathRef = useRef<SVGPathElement>(null);\n\n useLayoutEffect(() => {\n const path = pathRef.current;\n if (!path || typeof path.getTotalLength !== \"function\") return;\n const len = path.getTotalLength();\n if (len <= 0) return;\n\n path.style.strokeDasharray = `${len}`;\n path.style.strokeDashoffset = `${len}`;\n\n if (typeof path.animate !== \"function\") {\n path.style.strokeDashoffset = \"0\";\n return;\n }\n\n const anim = path.animate([{ strokeDashoffset: len }, { strokeDashoffset: 0 }], {\n duration: CHECKBOX_TICK_DRAW_MS,\n delay: CHECKBOX_TICK_DELAY_MS,\n easing: \"cubic-bezier(0.45, 0, 0.2, 1)\",\n fill: \"forwards\",\n });\n return () => anim.cancel();\n }, []);\n\n return (\n <svg aria-hidden=\"true\" viewBox=\"0 0 14 14\" fill=\"none\" className={cx(\"block shrink-0\", className)}>\n <path\n ref={pathRef}\n d=\"M2.33325 7L5.24992 9.91667L11.6666 3.5\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n );\n}\n\n/** Figma Focus rings/focus-ring — 2px surface gap + 4px brand ring (matches Button). */\nconst focusRingShadow =\n \"outline-none [box-shadow:0px_0px_0px_2px_var(--color-bg-primary),0px_0px_0px_4px_var(--color-focus-ring)]\";\n\nexport interface CheckboxBaseProps {\n size?: \"sm\" | \"md\";\n className?: string;\n isFocusVisible?: boolean;\n isSelected?: boolean;\n isDisabled?: boolean;\n isIndeterminate?: boolean;\n}\n\nexport const CheckboxBase = ({ className, isSelected, isDisabled, isIndeterminate, size = \"sm\", isFocusVisible = false }: CheckboxBaseProps) => {\n const isChecked = isSelected || isIndeterminate;\n const iconClassName = size === \"sm\" ? \"size-2.5\" : \"size-3.5\";\n\n return (\n <div\n className={cx(\n \"relative flex shrink-0 cursor-pointer appearance-none items-center justify-center border border-solid border-primary\",\n size === \"sm\" ? \"size-4 rounded-xs\" : \"size-5 rounded-sm\",\n isChecked ? \"border-transparent bg-brand-solid\" : \"bg-primary\",\n isDisabled && \"cursor-not-allowed opacity-50\",\n isDisabled && !isChecked && \"bg-tertiary\",\n isFocusVisible && !isDisabled && focusRingShadow,\n className,\n )}\n >\n {isIndeterminate && (\n <svg\n aria-hidden=\"true\"\n viewBox=\"0 0 14 14\"\n fill=\"none\"\n className={cx(\"pointer-events-none block shrink-0 text-fg-white\", iconClassName)}\n >\n <path d=\"M2.91675 7H11.0834\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n </svg>\n )}\n\n {isSelected && !isIndeterminate && (\n <CheckboxAnimatedCheckMark className={cx(\"pointer-events-none text-fg-white\", iconClassName)} />\n )}\n </div>\n );\n};\nCheckboxBase.displayName = \"CheckboxBase\";\n\ninterface CheckboxProps extends AriaCheckboxProps {\n ref?: Ref<HTMLLabelElement>;\n size?: \"sm\" | \"md\";\n label?: ReactNode;\n hint?: ReactNode;\n}\n\nexport const Checkbox = ({ label, hint, size = \"sm\", className, ...ariaCheckboxProps }: CheckboxProps) => {\n const sizes = {\n sm: {\n root: \"gap-2\",\n textWrapper: \"\",\n label: \"text-sm font-medium\",\n hint: \"text-sm\",\n },\n md: {\n root: \"gap-3\",\n textWrapper: \"gap-0.5 break-words\",\n label: \"text-md font-medium\",\n hint: \"text-md\",\n },\n };\n\n return (\n <AriaCheckbox\n {...ariaCheckboxProps}\n className={(state) =>\n cx(\n \"relative flex items-start\",\n state.isDisabled && \"cursor-not-allowed\",\n sizes[size].root,\n typeof className === \"function\" ? className(state) : className,\n )\n }\n >\n {({ isSelected, isIndeterminate, isDisabled, isFocusVisible }) => (\n <>\n <CheckboxBase\n size={size}\n isSelected={isSelected}\n isIndeterminate={isIndeterminate}\n isDisabled={isDisabled}\n isFocusVisible={isFocusVisible}\n className={label || hint ? \"mt-0.5\" : \"\"}\n />\n {(label || hint) && (\n <div className={cx(\"inline-flex flex-col\", sizes[size].textWrapper)}>\n {label && <p className={cx(\"text-secondary select-none\", sizes[size].label)}>{label}</p>}\n {hint && (\n <span className={cx(\"text-tertiary\", sizes[size].hint)} onClick={(event) => event.stopPropagation()}>\n {hint}\n </span>\n )}\n </div>\n )}\n </>\n )}\n </AriaCheckbox>\n );\n};\nCheckbox.displayName = \"Checkbox\";\n","/* We cannot use type `unknown` instead of `any` here because it will break the type assertion `isReactComponent` function is providing. */\n/* eslint-disable @typescript-eslint/no-explicit-any */\nimport type React from \"react\";\n\ntype ReactComponent = React.FC<any> | React.ComponentClass<any, any>;\n\n/**\n * Checks if a given value is a function component.\n */\nexport const isFunctionComponent = (component: any): component is React.FC<any> => {\n return typeof component === \"function\";\n};\n\n/**\n * Checks if a given value is a class component.\n */\nexport const isClassComponent = (component: any): component is React.ComponentClass<any, any> => {\n return typeof component === \"function\" && component.prototype && (!!component.prototype.isReactComponent || !!component.prototype.render);\n};\n\n/**\n * Checks if a given value is a forward ref component.\n */\nexport const isForwardRefComponent = (component: any): component is React.ForwardRefExoticComponent<any> => {\n return typeof component === \"object\" && component !== null && component.$$typeof.toString() === \"Symbol(react.forward_ref)\";\n};\n\n/**\n * Checks if a given value is a valid React component.\n */\nexport const isReactComponent = (component: any): component is ReactComponent => {\n return isFunctionComponent(component) || isForwardRefComponent(component) || isClassComponent(component);\n};\n","\"use client\";\n\n/** Figma: Select item (11132:11643) — hover/focus use bg-primary_hover; checkbox uses CheckboxBase. */\n\nimport { isValidElement, useContext } from \"react\";\nimport { CheckIcon as Check } from \"@phosphor-icons/react/dist/csr/Check\";\nimport type { ListBoxItemProps as AriaListBoxItemProps } from \"react-aria-components\";\nimport { ListBoxItem as AriaListBoxItem, Text as AriaText } from \"react-aria-components\";\nimport { Avatar } from \"@/components/base/avatar/avatar\";\nimport { CheckboxBase } from \"@/components/base/checkbox/checkbox\";\nimport { cx } from \"@/utils/cx\";\nimport { isReactComponent } from \"@/utils/is-react-component\";\nimport type { SelectItemType } from \"./select-shared\";\nimport { SelectContext } from \"./select-shared\";\n\nconst sizes = {\n sm: {\n root: \"p-2 pr-2.5 gap-2 *:data-icon:size-4 *:data-icon:stroke-[2.25px]\",\n text: \"text-sm\",\n textContainer: \"gap-x-1.5\",\n check: \"size-4 stroke-[2.25px]\",\n checkbox: \"sm\" as const,\n },\n md: {\n root: \"p-2 pr-2.5 gap-2 *:data-icon:size-5\",\n text: \"text-md\",\n textContainer: \"gap-x-2\",\n check: \"size-5\",\n checkbox: \"sm\" as const,\n },\n lg: {\n root: \"p-2.5 pl-2 gap-2 *:data-icon:size-5\",\n text: \"text-md\",\n textContainer: \"gap-x-2\",\n check: \"size-5\",\n checkbox: \"md\" as const,\n },\n};\n\ninterface SelectItemProps extends Omit<AriaListBoxItemProps<SelectItemType>, \"id\">, SelectItemType {\n /** The selection indicator to be displayed on the item. */\n selectionIndicator?: \"checkmark\" | \"checkbox\" | \"none\";\n /** The alignment of the selection indicator. */\n selectionIndicatorAlign?: \"left\" | \"right\";\n}\n\nexport const SelectItem = ({\n label,\n id,\n value,\n avatarUrl,\n supportingText,\n isDisabled,\n icon: Icon,\n className,\n children,\n selectionIndicator = \"checkmark\",\n selectionIndicatorAlign = \"right\",\n ...props\n}: SelectItemProps) => {\n const { size } = useContext(SelectContext);\n\n const labelOrChildren = label || (typeof children === \"string\" ? children : \"\");\n const textValue = supportingText ? labelOrChildren + \" \" + supportingText : labelOrChildren;\n\n const isLeft = selectionIndicatorAlign === \"left\";\n\n return (\n <AriaListBoxItem\n id={id}\n value={\n value ?? {\n id,\n label: labelOrChildren,\n avatarUrl,\n supportingText,\n isDisabled,\n icon: Icon,\n }\n }\n textValue={textValue}\n isDisabled={isDisabled}\n {...props}\n className={(state) =>\n cx(\"w-full py-px outline-hidden\", size === \"sm\" ? \"px-1\" : \"px-1.5\", typeof className === \"function\" ? className(state) : className)\n }\n >\n {(state) => (\n <div\n className={cx(\n \"flex cursor-pointer items-center rounded-md outline-hidden select-none\",\n (state.isFocused || state.isHovered || (state.isSelected && selectionIndicator !== \"checkbox\")) && \"bg-primary_hover\",\n state.isDisabled && \"cursor-not-allowed opacity-50\",\n\n // Icon styles\n \"*:data-icon:shrink-0 *:data-icon:text-fg-quaternary\",\n\n sizes[size].root,\n )}\n >\n {isLeft && selectionIndicator === \"checkbox\" && (\n <CheckboxBase size={sizes[size].checkbox} isSelected={state.isSelected} isDisabled={state.isDisabled} />\n )}\n\n {avatarUrl ? (\n <Avatar aria-hidden=\"true\" size=\"xs\" src={avatarUrl} alt={label} className={cx(size === \"sm\" && \"size-5\")} />\n ) : isReactComponent(Icon) ? (\n <Icon data-icon aria-hidden=\"true\" />\n ) : isValidElement(Icon) ? (\n Icon\n ) : null}\n\n <div className={cx(\"flex w-full min-w-0 flex-1 flex-wrap\", sizes[size].textContainer)}>\n <AriaText slot=\"label\" className={cx(\"truncate font-medium whitespace-nowrap text-primary\", sizes[size].text)}>\n {label || (typeof children === \"function\" ? children(state) : children)}\n </AriaText>\n\n {supportingText && (\n <AriaText slot=\"description\" className={cx(\"whitespace-nowrap text-tertiary\", sizes[size].text)}>\n {supportingText}\n </AriaText>\n )}\n </div>\n\n {state.isSelected && selectionIndicator === \"checkmark\" && (\n <Check aria-hidden=\"true\" className={cx(\"ml-auto text-fg-brand-primary\", sizes[size].check)} />\n )}\n\n {!isLeft && selectionIndicator === \"checkbox\" && (\n <CheckboxBase size={sizes[size].checkbox} isSelected={state.isSelected} isDisabled={state.isDisabled} className=\"ml-auto\" />\n )}\n </div>\n )}\n </AriaListBoxItem>\n );\n};\n","\"use client\";\n\n/** Figma: Tag select (11132:11643) */\n\nimport type { FocusEventHandler, KeyboardEvent, PointerEventHandler, RefAttributes, RefObject } from \"react\";\nimport React, { createContext, useCallback, useContext, useRef, useState } from \"react\";\nimport { MagnifyingGlassIcon as SearchLg } from \"@phosphor-icons/react/dist/csr/MagnifyingGlass\";\nimport { FocusScope, useFilter, useFocusManager } from \"react-aria\";\nimport type { ComboBoxProps as AriaComboBoxProps, GroupProps as AriaGroupProps, ListBoxProps as AriaListBoxProps, Key } from \"react-aria-components\";\nimport { ComboBox as AriaComboBox, Group as AriaGroup, Input as AriaInput, ListBox as AriaListBox, ComboBoxStateContext } from \"react-aria-components\";\nimport type { ListData } from \"react-stately\";\nimport { useListData } from \"react-stately\";\nimport { Avatar } from \"@/components/base/avatar/avatar\";\nimport type { IconComponentType } from \"@/components/base/badges/badge-types\";\nimport { HintText } from \"@/components/base/input/hint-text\";\nimport { Label } from \"@/components/base/input/label\";\nimport { Popover } from \"@/components/base/select/popover\";\nimport { type SelectItemType, sizes } from \"@/components/base/select/select-shared\";\nimport { TagCloseX } from \"@/components/base/tags/base-components/tag-close-x\";\nimport { useResizeObserver } from \"@/hooks/use-resize-observer\";\nimport { cx } from \"@/utils/cx\";\nimport { inputErrorFocusRingShadow, inputFocusRingShadow } from \"@/components/base/input/input\";\nimport { SelectItem } from \"./select-item\";\n\ninterface TagSelectValueProps extends AriaGroupProps {\n size: \"sm\" | \"md\" | \"lg\";\n shortcut?: boolean;\n isDisabled?: boolean;\n placeholder?: string;\n shortcutClassName?: string;\n icon?: IconComponentType | null;\n ref?: RefObject<HTMLDivElement | null>;\n onFocus?: FocusEventHandler;\n onPointerEnter?: PointerEventHandler;\n}\n\nconst TagSelectContext = createContext<{\n size: \"sm\" | \"md\" | \"lg\";\n selectedKeys: Key[];\n selectedItems: ListData<SelectItemType>;\n onRemove: (keys: Set<Key>) => void;\n onInputChange: (value: string) => void;\n valueFormatter?: (item: SelectItemType) => string;\n}>({\n size: \"sm\",\n selectedKeys: [],\n selectedItems: {} as ListData<SelectItemType>,\n onRemove: () => {},\n onInputChange: () => {},\n});\n\ninterface TagSelectProps extends Omit<AriaComboBoxProps<SelectItemType>, \"children\" | \"items\">, RefAttributes<HTMLDivElement> {\n hint?: string;\n label?: string;\n tooltip?: string;\n size?: \"sm\" | \"md\" | \"lg\";\n placeholder?: string;\n shortcut?: boolean;\n items?: SelectItemType[];\n popoverClassName?: string;\n shortcutClassName?: string;\n selectedItems: ListData<SelectItemType>;\n icon?: IconComponentType | null;\n children: AriaListBoxProps<SelectItemType>[\"children\"];\n onItemCleared?: (key: Key) => void;\n onItemInserted?: (key: Key) => void;\n valueFormatter?: (item: SelectItemType) => string;\n}\n\nexport const TagSelectBase = ({\n items,\n children,\n size = \"sm\",\n selectedItems,\n onItemCleared,\n onItemInserted,\n valueFormatter,\n shortcut,\n placeholder = \"Search\",\n icon,\n // Omit name to avoid conflicts with the `Select` component\n name: _name,\n className,\n ...props\n}: TagSelectProps) => {\n const { contains } = useFilter({ sensitivity: \"base\" });\n const selectedKeys = selectedItems.items.map((item) => item.id);\n\n const filter = useCallback(\n (item: SelectItemType, filterText: string) => {\n return !selectedKeys.includes(item.id) && contains(item.label || item.supportingText || \"\", filterText);\n },\n [contains, selectedKeys],\n );\n\n const accessibleList = useListData({\n initialItems: items,\n filter,\n });\n\n const onRemove = useCallback(\n (keys: Set<Key>) => {\n const key = keys.values().next().value;\n\n if (!key) return;\n\n selectedItems.remove(key);\n onItemCleared?.(key);\n },\n [selectedItems, onItemCleared],\n );\n\n const onSelectionChange = (id: Key | null) => {\n if (!id) {\n return;\n }\n\n const item = accessibleList.getItem(id);\n\n if (!item) {\n return;\n }\n\n if (!selectedKeys.includes(id as string)) {\n selectedItems.append(item);\n onItemInserted?.(id);\n }\n\n accessibleList.setFilterText(\"\");\n };\n\n const onInputChange = (value: string) => {\n accessibleList.setFilterText(value);\n };\n\n const placeholderRef = useRef<HTMLDivElement>(null);\n const [popoverWidth, setPopoverWidth] = useState(\"\");\n\n // Resize observer for popover width\n const onResize = useCallback(() => {\n if (!placeholderRef.current) return;\n let divRect = placeholderRef.current?.getBoundingClientRect();\n setPopoverWidth(divRect.width + \"px\");\n }, [placeholderRef, setPopoverWidth]);\n\n useResizeObserver({\n ref: placeholderRef,\n onResize: onResize,\n box: \"border-box\",\n });\n\n return (\n <TagSelectContext.Provider\n value={{\n size,\n selectedKeys,\n selectedItems,\n onInputChange,\n onRemove,\n valueFormatter,\n }}\n >\n <AriaComboBox\n allowsEmptyCollection\n menuTrigger=\"focus\"\n items={accessibleList.items}\n onInputChange={onInputChange}\n inputValue={accessibleList.filterText}\n // This keeps the combobox popover open and the input value unchanged when an item is selected.\n value={null}\n onChange={onSelectionChange}\n className={(state) => cx(\"flex flex-col gap-1.5\", typeof className === \"function\" ? className(state) : className)}\n {...props}\n >\n {(state) => (\n <>\n {props.label && (\n <Label isRequired={state.isRequired} tooltip={props.tooltip}>\n {props.label}\n </Label>\n )}\n\n <TagSelectTagsValue\n size={size}\n shortcut={shortcut}\n ref={placeholderRef}\n placeholder={placeholder}\n icon={icon}\n // This is a workaround to correctly calculating the trigger width\n // while using ResizeObserver wasn't 100% reliable.\n onFocus={onResize}\n onPointerEnter={onResize}\n />\n\n <Popover size={size} triggerRef={placeholderRef} style={{ width: popoverWidth }} className={props?.popoverClassName}>\n <AriaListBox selectionMode=\"multiple\" className=\"size-full outline-hidden\">\n {children}\n </AriaListBox>\n </Popover>\n\n {props.hint && (\n <HintText isInvalid={state.isInvalid} className={cx(size === \"sm\" && \"text-xs\")}>\n {props.hint}\n </HintText>\n )}\n </>\n )}\n </AriaComboBox>\n </TagSelectContext.Provider>\n );\n};\n\nconst InnerTagSelect = ({ isDisabled, shortcut, shortcutClassName, placeholder, size = \"sm\" }: Omit<TagSelectProps, \"selectedItems\" | \"children\">) => {\n const focusManager = useFocusManager();\n const tagSelectContext = useContext(TagSelectContext);\n const comboBoxStateContext = useContext(ComboBoxStateContext);\n\n const handleInputKeyDown = (event: KeyboardEvent<HTMLInputElement>) => {\n const isCaretAtStart = event.currentTarget.selectionStart === 0 && event.currentTarget.selectionEnd === 0;\n\n if (!isCaretAtStart && event.currentTarget.value !== \"\") {\n return;\n }\n\n switch (event.key) {\n case \"Backspace\":\n case \"ArrowLeft\":\n focusManager?.focusPrevious({ wrap: false, tabbable: false });\n break;\n case \"ArrowRight\":\n focusManager?.focusNext({ wrap: false, tabbable: false });\n break;\n }\n };\n\n // Ensure dropdown opens on click even if input is already focused\n const handleInputMouseDown = (_event: React.MouseEvent<HTMLInputElement>) => {\n if (comboBoxStateContext && !comboBoxStateContext.isOpen) {\n comboBoxStateContext.open();\n }\n };\n\n const handleTagKeyDown = (event: KeyboardEvent<HTMLButtonElement>, value: Key) => {\n // Do nothing when tab is clicked to move focus from the tag to the input element.\n if (event.key === \"Tab\") {\n return;\n }\n\n event.preventDefault();\n\n const isFirstTag = tagSelectContext?.selectedItems?.items?.[0]?.id === value;\n\n switch (event.key) {\n case \" \":\n case \"Enter\":\n case \"Backspace\":\n if (isFirstTag) {\n focusManager?.focusNext({ wrap: false, tabbable: false });\n } else {\n focusManager?.focusPrevious({ wrap: false, tabbable: false });\n }\n\n tagSelectContext.onRemove(new Set([value]));\n break;\n\n case \"ArrowLeft\":\n focusManager?.focusPrevious({ wrap: false, tabbable: false });\n break;\n case \"ArrowRight\":\n focusManager?.focusNext({ wrap: false, tabbable: false });\n break;\n case \"Escape\":\n comboBoxStateContext?.close();\n break;\n }\n };\n\n const isSelectionEmpty = tagSelectContext?.selectedItems?.items?.length === 0;\n\n return (\n <div className=\"relative flex w-full min-w-0 flex-1 flex-row flex-wrap items-center justify-start gap-1.5\">\n {!isSelectionEmpty &&\n tagSelectContext?.selectedItems?.items?.map((value) => (\n <span\n key={value.id}\n className={cx(\n \"flex min-w-0 items-center rounded-md border border-solid border-primary bg-primary\",\n size === \"sm\" ? \"px-1 py-0.75\" : \"py-0.5 pr-1 pl-1.25\",\n )}\n >\n <Avatar size=\"xs\" alt={value?.label} src={value?.avatarUrl} className=\"size-4\" />\n\n <p\n className={cx(\n \"truncate font-medium whitespace-nowrap text-secondary select-none\",\n size === \"sm\" ? \"ml-1 text-xs\" : \"ml-1.25 text-sm\",\n )}\n >\n {tagSelectContext.valueFormatter ? tagSelectContext.valueFormatter(value) : value?.label}\n </p>\n\n <TagCloseX\n size={size === \"sm\" ? \"sm\" : \"md\"}\n isDisabled={isDisabled}\n className=\"ml-0.75\"\n // For workaround, onKeyDown is added to the button\n onKeyDown={(event) => handleTagKeyDown(event, value.id)}\n onPress={() => tagSelectContext.onRemove(new Set([value.id]))}\n />\n </span>\n ))}\n\n <div className={cx(\"relative flex min-w-12 flex-1 flex-row items-center\", !isSelectionEmpty && \"ml-0.5\", shortcut && \"min-w-[30%]\")}>\n <AriaInput\n placeholder={placeholder}\n onKeyDown={handleInputKeyDown}\n onMouseDown={handleInputMouseDown}\n className={cx(\n \"w-full flex-[1_0_0] appearance-none bg-transparent text-ellipsis text-primary caret-alpha-black/90 outline-hidden placeholder:text-placeholder focus:outline-hidden disabled:cursor-not-allowed\",\n sizes[size].text,\n )}\n />\n\n {shortcut && (\n <div\n aria-hidden=\"true\"\n className={cx(\n \"absolute inset-y-0.5 right-0.5 z-10 hidden items-center rounded-r-[inherit] bg-linear-to-r from-transparent to-bg-primary to-40% pl-8 md:flex\",\n shortcutClassName,\n sizes[size].shortcut,\n )}\n >\n <span\n className={cx(\n \"pointer-events-none rounded px-1 py-px text-xs font-medium text-quaternary ring-1 ring-secondary select-none ring-inset\",\n isDisabled && \"bg-transparent\",\n )}\n >\n ⌘K\n </span>\n </div>\n )}\n </div>\n </div>\n );\n};\n\nexport const TagSelectTagsValue = ({\n size = \"sm\",\n shortcut,\n placeholder,\n shortcutClassName,\n icon: Icon = SearchLg,\n // Omit this prop to avoid invalid HTML attribute warning\n isDisabled: _isDisabled,\n ...otherProps\n}: TagSelectValueProps) => {\n const tagSelectContext = useContext(TagSelectContext);\n\n const selectedItemsCount = tagSelectContext.selectedKeys.length;\n\n return (\n <AriaGroup\n {...otherProps}\n className={({ isFocusWithin, isDisabled, isInvalid }) =>\n cx(\n \"relative flex w-full items-center rounded-lg border border-solid border-primary bg-primary shadow-xs outline-hidden transition-[border-color,box-shadow] duration-100 ease-linear\",\n isDisabled && \"cursor-not-allowed opacity-50\",\n !isInvalid && isFocusWithin && inputFocusRingShadow,\n isInvalid && !isFocusWithin && \"border-error_subtle\",\n isInvalid && isFocusWithin && inputErrorFocusRingShadow,\n\n // Icon styles\n \"*:data-icon:shrink-0 *:data-icon:text-fg-quaternary\",\n\n sizes[size].root,\n\n // Overwrite vertical padding for small size when there are selected items\n // to prevent height jump because the tags are taller than the input text.\n size === \"sm\" && selectedItemsCount > 0 && \"py-1.5\",\n )\n }\n >\n {({ isDisabled }) => (\n <>\n {Icon && <Icon data-icon className=\"pointer-events-none\" />}\n <FocusScope contain={false} autoFocus={false} restoreFocus={false}>\n <InnerTagSelect\n isDisabled={isDisabled}\n size={size}\n shortcut={shortcut}\n shortcutClassName={shortcutClassName}\n placeholder={placeholder}\n />\n </FocusScope>\n </>\n )}\n </AriaGroup>\n );\n};\n\nconst TagSelect = TagSelectBase as typeof TagSelectBase & {\n Item: typeof SelectItem;\n};\n\nTagSelect.Item = SelectItem;\n\nexport { TagSelect };\n"]}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import * as react_aria_components from 'react-aria-components';
|
|
2
|
+
import { TagProps as TagProps$1, TagGroupProps as TagGroupProps$1 } from 'react-aria-components';
|
|
3
|
+
import * as react from 'react';
|
|
4
|
+
import { PropsWithChildren, RefAttributes, ImgHTMLAttributes } from 'react';
|
|
5
|
+
|
|
6
|
+
declare const TagAvatar: ({ src, alt, contrastBorder, className }: ImgHTMLAttributes<HTMLImageElement> & {
|
|
7
|
+
contrastBorder?: boolean;
|
|
8
|
+
}) => react.JSX.Element;
|
|
9
|
+
interface TagItem {
|
|
10
|
+
id: string;
|
|
11
|
+
label: string;
|
|
12
|
+
count?: number;
|
|
13
|
+
avatarSrc?: string;
|
|
14
|
+
avatarContrastBorder?: boolean;
|
|
15
|
+
dot?: boolean;
|
|
16
|
+
dotClassName?: string;
|
|
17
|
+
isDisabled?: boolean;
|
|
18
|
+
onClose?: (id: string) => void;
|
|
19
|
+
}
|
|
20
|
+
interface TagGroupProps extends TagGroupProps$1, RefAttributes<HTMLDivElement> {
|
|
21
|
+
label: string;
|
|
22
|
+
size?: "sm" | "md" | "lg";
|
|
23
|
+
}
|
|
24
|
+
declare const TagGroup: ({ label, selectionMode, size, children, ...otherProps }: TagGroupProps) => react.JSX.Element;
|
|
25
|
+
declare const TagList: <T>(props: react_aria_components.TagListProps<T> & React.RefAttributes<HTMLDivElement>) => React.ReactElement<unknown, string | React.JSXElementConstructor<any>> | null;
|
|
26
|
+
interface TagProps extends TagProps$1, RefAttributes<object>, Omit<TagItem, "label" | "id"> {
|
|
27
|
+
}
|
|
28
|
+
declare const Tag: ({ id, avatarSrc, avatarContrastBorder, dot, dotClassName, isDisabled, count, className, children, onClose, }: PropsWithChildren<TagProps>) => react.JSX.Element;
|
|
29
|
+
|
|
30
|
+
export { Tag, TagAvatar, TagGroup, type TagItem, TagList };
|
|
@@ -0,0 +1,228 @@
|
|
|
1
|
+
import { createContext, useState, useContext, useRef, useLayoutEffect } from 'react';
|
|
2
|
+
import { UserIcon } from '@phosphor-icons/react/dist/csr/User';
|
|
3
|
+
import { TagList as TagList$1, TagGroup as TagGroup$1, Tag as Tag$1, Button } from 'react-aria-components';
|
|
4
|
+
import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
|
|
5
|
+
import { extendTailwindMerge } from 'tailwind-merge';
|
|
6
|
+
import { XIcon } from '@phosphor-icons/react/dist/csr/X';
|
|
7
|
+
|
|
8
|
+
var sizes = {
|
|
9
|
+
sm: {
|
|
10
|
+
wh: 8,
|
|
11
|
+
c: 4,
|
|
12
|
+
r: 2.5
|
|
13
|
+
},
|
|
14
|
+
md: {
|
|
15
|
+
wh: 10,
|
|
16
|
+
c: 5,
|
|
17
|
+
r: 4
|
|
18
|
+
}
|
|
19
|
+
};
|
|
20
|
+
var Dot = ({ size = "md", ...props }) => {
|
|
21
|
+
return /* @__PURE__ */ jsx("svg", { width: sizes[size].wh, height: sizes[size].wh, viewBox: `0 0 ${sizes[size].wh} ${sizes[size].wh}`, fill: "none", ...props, children: /* @__PURE__ */ jsx("circle", { cx: sizes[size].c, cy: sizes[size].c, r: sizes[size].r, fill: "currentColor", stroke: "currentColor" }) });
|
|
22
|
+
};
|
|
23
|
+
var twMerge = extendTailwindMerge({
|
|
24
|
+
extend: {
|
|
25
|
+
theme: {
|
|
26
|
+
text: ["display-xs", "display-sm", "display-md", "display-lg", "display-xl", "display-2xl"]
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
});
|
|
30
|
+
var cx = twMerge;
|
|
31
|
+
var CHECKBOX_TICK_DELAY_MS = 60;
|
|
32
|
+
var CHECKBOX_TICK_DRAW_MS = 100;
|
|
33
|
+
var focusRingShadow = "outline-none [box-shadow:0px_0px_0px_2px_var(--color-bg-primary),0px_0px_0px_4px_var(--color-focus-ring)]";
|
|
34
|
+
var sizes2 = {
|
|
35
|
+
sm: { box: "size-3.5 rounded-xs", inset: "inset-[14.29%]" },
|
|
36
|
+
md: { box: "size-4 rounded-xs", inset: "inset-[12.5%]" },
|
|
37
|
+
lg: { box: "size-4.5 rounded-xs", inset: "inset-[13.89%]" }
|
|
38
|
+
};
|
|
39
|
+
function TagCheckboxAnimatedCheckMark({ className }) {
|
|
40
|
+
const pathRef = useRef(null);
|
|
41
|
+
useLayoutEffect(() => {
|
|
42
|
+
const path = pathRef.current;
|
|
43
|
+
if (!path || typeof path.getTotalLength !== "function") return;
|
|
44
|
+
const len = path.getTotalLength();
|
|
45
|
+
if (len <= 0) return;
|
|
46
|
+
path.style.strokeDasharray = `${len}`;
|
|
47
|
+
path.style.strokeDashoffset = `${len}`;
|
|
48
|
+
if (typeof path.animate !== "function") {
|
|
49
|
+
path.style.strokeDashoffset = "0";
|
|
50
|
+
return;
|
|
51
|
+
}
|
|
52
|
+
const anim = path.animate([{ strokeDashoffset: len }, { strokeDashoffset: 0 }], {
|
|
53
|
+
duration: CHECKBOX_TICK_DRAW_MS,
|
|
54
|
+
delay: CHECKBOX_TICK_DELAY_MS,
|
|
55
|
+
easing: "cubic-bezier(0.45, 0, 0.2, 1)",
|
|
56
|
+
fill: "forwards"
|
|
57
|
+
});
|
|
58
|
+
return () => anim.cancel();
|
|
59
|
+
}, []);
|
|
60
|
+
return /* @__PURE__ */ jsx("svg", { "aria-hidden": "true", viewBox: "0 0 14 14", fill: "none", className, children: /* @__PURE__ */ jsx(
|
|
61
|
+
"path",
|
|
62
|
+
{
|
|
63
|
+
ref: pathRef,
|
|
64
|
+
d: "M2.33325 7L5.24992 9.91667L11.6666 3.5",
|
|
65
|
+
stroke: "currentColor",
|
|
66
|
+
strokeWidth: "2",
|
|
67
|
+
strokeLinecap: "round",
|
|
68
|
+
strokeLinejoin: "round"
|
|
69
|
+
}
|
|
70
|
+
) });
|
|
71
|
+
}
|
|
72
|
+
var TagCheckbox = ({ className, isFocused, isSelected, isDisabled, size = "sm" }) => {
|
|
73
|
+
const { box, inset } = sizes2[size];
|
|
74
|
+
return /* @__PURE__ */ jsx(
|
|
75
|
+
"div",
|
|
76
|
+
{
|
|
77
|
+
className: cx(
|
|
78
|
+
"relative flex shrink-0 cursor-pointer appearance-none items-center justify-center overflow-clip border border-solid border-primary",
|
|
79
|
+
box,
|
|
80
|
+
isSelected ? "border-transparent bg-brand-solid" : "bg-primary",
|
|
81
|
+
isDisabled && "cursor-not-allowed opacity-50",
|
|
82
|
+
isDisabled && !isSelected && "bg-tertiary",
|
|
83
|
+
isFocused && !isDisabled && focusRingShadow,
|
|
84
|
+
className
|
|
85
|
+
),
|
|
86
|
+
children: isSelected && /* @__PURE__ */ jsx(TagCheckboxAnimatedCheckMark, { className: cx("pointer-events-none absolute text-fg-white", inset) })
|
|
87
|
+
}
|
|
88
|
+
);
|
|
89
|
+
};
|
|
90
|
+
TagCheckbox.displayName = "TagCheckbox";
|
|
91
|
+
var focusShadowPlain = "focus-visible:outline-none focus-visible:[box-shadow:0px_0px_0px_2px_var(--color-bg-primary),0px_0px_0px_4px_var(--color-focus-ring)]";
|
|
92
|
+
var styles = {
|
|
93
|
+
sm: { root: "p-0.5", icon: "size-2.5" },
|
|
94
|
+
md: { root: "p-0.5", icon: "size-3" },
|
|
95
|
+
lg: { root: "p-[3px]", icon: "size-3.5" }
|
|
96
|
+
};
|
|
97
|
+
var TagCloseX = ({ size = "md", className, ...otherProps }) => {
|
|
98
|
+
return /* @__PURE__ */ jsx(
|
|
99
|
+
Button,
|
|
100
|
+
{
|
|
101
|
+
slot: "remove",
|
|
102
|
+
"aria-label": "Remove this tag",
|
|
103
|
+
className: cx(
|
|
104
|
+
"flex cursor-pointer rounded-[3px] text-fg-quaternary outline-transparent transition duration-100 ease-linear hover:bg-primary_hover focus-visible:rounded-[3px] disabled:cursor-not-allowed disabled:opacity-50",
|
|
105
|
+
focusShadowPlain,
|
|
106
|
+
styles[size].root,
|
|
107
|
+
className
|
|
108
|
+
),
|
|
109
|
+
...otherProps,
|
|
110
|
+
children: /* @__PURE__ */ jsx(XIcon, { className: cx("shrink-0 transition-inherit-all", styles[size].icon) })
|
|
111
|
+
}
|
|
112
|
+
);
|
|
113
|
+
};
|
|
114
|
+
var focusShadowPlain2 = "focus-visible:outline-none focus-visible:[box-shadow:0px_0px_0px_2px_var(--color-bg-primary),0px_0px_0px_4px_var(--color-focus-ring)]";
|
|
115
|
+
var TagAvatar = ({ src, alt, contrastBorder = true, className }) => {
|
|
116
|
+
const [isFailed, setIsFailed] = useState(false);
|
|
117
|
+
return /* @__PURE__ */ jsx(
|
|
118
|
+
"div",
|
|
119
|
+
{
|
|
120
|
+
className: cx(
|
|
121
|
+
"relative inline-flex size-4 shrink-0 items-center justify-center overflow-hidden rounded-full bg-tertiary",
|
|
122
|
+
contrastBorder && "outline-[0.5px] -outline-offset-[0.5px] outline-black/16",
|
|
123
|
+
className
|
|
124
|
+
),
|
|
125
|
+
children: src && !isFailed ? /* @__PURE__ */ jsx("img", { "data-avatar-img": true, className: "size-full object-cover", src, alt, onError: () => setIsFailed(true) }) : /* @__PURE__ */ jsx(UserIcon, { className: "size-3 stroke-[2.25px] text-fg-quaternary" })
|
|
126
|
+
}
|
|
127
|
+
);
|
|
128
|
+
};
|
|
129
|
+
var TagGroupContext = createContext({
|
|
130
|
+
selectionMode: "none",
|
|
131
|
+
size: "sm"
|
|
132
|
+
});
|
|
133
|
+
var TagGroup = ({ label, selectionMode = "none", size = "sm", children, ...otherProps }) => {
|
|
134
|
+
return /* @__PURE__ */ jsx(TagGroupContext.Provider, { value: { selectionMode, size }, children: /* @__PURE__ */ jsx(TagGroup$1, { "aria-label": label, selectionMode, disallowEmptySelection: selectionMode === "single", ...otherProps, children }) });
|
|
135
|
+
};
|
|
136
|
+
var TagList = TagList$1;
|
|
137
|
+
var styles2 = {
|
|
138
|
+
sm: {
|
|
139
|
+
root: {
|
|
140
|
+
base: "px-2 py-0.75 text-xs font-medium",
|
|
141
|
+
withCheckbox: "pl-1.25",
|
|
142
|
+
withAvatar: "pl-1",
|
|
143
|
+
withDot: "pl-1.5",
|
|
144
|
+
withCount: "pr-1",
|
|
145
|
+
withClose: "pr-1"
|
|
146
|
+
},
|
|
147
|
+
content: "gap-1",
|
|
148
|
+
count: "px-1 text-xs font-medium"
|
|
149
|
+
},
|
|
150
|
+
md: {
|
|
151
|
+
root: {
|
|
152
|
+
base: "px-2.25 py-0.5 text-sm font-medium",
|
|
153
|
+
withCheckbox: "pl-1",
|
|
154
|
+
withAvatar: "pl-1.25",
|
|
155
|
+
withDot: "pl-1.75",
|
|
156
|
+
withCount: "pr-0.75",
|
|
157
|
+
withClose: "pr-1"
|
|
158
|
+
},
|
|
159
|
+
content: "gap-1.25",
|
|
160
|
+
count: "px-1.25 text-xs font-medium"
|
|
161
|
+
},
|
|
162
|
+
lg: {
|
|
163
|
+
root: {
|
|
164
|
+
base: "px-2.5 py-1 text-sm font-medium",
|
|
165
|
+
withCheckbox: "pl-1.25",
|
|
166
|
+
withAvatar: "pl-1.75",
|
|
167
|
+
withDot: "pl-2.25",
|
|
168
|
+
withCount: "pr-1",
|
|
169
|
+
withClose: "pr-1"
|
|
170
|
+
},
|
|
171
|
+
content: "gap-1.5",
|
|
172
|
+
count: "px-1.5 text-sm font-medium"
|
|
173
|
+
}
|
|
174
|
+
};
|
|
175
|
+
var Tag = ({
|
|
176
|
+
id,
|
|
177
|
+
avatarSrc,
|
|
178
|
+
avatarContrastBorder = true,
|
|
179
|
+
dot,
|
|
180
|
+
dotClassName,
|
|
181
|
+
isDisabled,
|
|
182
|
+
count,
|
|
183
|
+
className,
|
|
184
|
+
children,
|
|
185
|
+
onClose
|
|
186
|
+
}) => {
|
|
187
|
+
const context = useContext(TagGroupContext);
|
|
188
|
+
const leadingContent = avatarSrc ? /* @__PURE__ */ jsx(TagAvatar, { src: avatarSrc, alt: "Avatar", contrastBorder: avatarContrastBorder }) : dot ? /* @__PURE__ */ jsx(Dot, { className: cx("text-fg-success-secondary", dotClassName), size: "sm" }) : null;
|
|
189
|
+
return /* @__PURE__ */ jsx(
|
|
190
|
+
Tag$1,
|
|
191
|
+
{
|
|
192
|
+
id,
|
|
193
|
+
isDisabled,
|
|
194
|
+
textValue: typeof children === "string" ? children : void 0,
|
|
195
|
+
className: (state) => cx(
|
|
196
|
+
"flex cursor-default items-center gap-0.75 rounded-md border border-solid border-primary bg-primary text-secondary transition duration-50 ease-linear",
|
|
197
|
+
focusShadowPlain2,
|
|
198
|
+
styles2[context.size].root.base,
|
|
199
|
+
// With avatar
|
|
200
|
+
avatarSrc && styles2[context.size].root.withAvatar,
|
|
201
|
+
// With X button
|
|
202
|
+
(onClose || state.allowsRemoving) && styles2[context.size].root.withClose,
|
|
203
|
+
// With dot
|
|
204
|
+
dot && styles2[context.size].root.withDot,
|
|
205
|
+
// With count
|
|
206
|
+
typeof count === "number" && styles2[context.size].root.withCount,
|
|
207
|
+
// With checkbox
|
|
208
|
+
context.selectionMode !== "none" && styles2[context.size].root.withCheckbox,
|
|
209
|
+
// Disabled
|
|
210
|
+
isDisabled && "cursor-not-allowed",
|
|
211
|
+
typeof className === "function" ? className(state) : className
|
|
212
|
+
),
|
|
213
|
+
children: ({ isSelected, isDisabled: isDisabled2, allowsRemoving }) => /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
214
|
+
/* @__PURE__ */ jsxs("div", { className: cx("flex items-center gap-1", styles2[context.size].content), children: [
|
|
215
|
+
context.selectionMode !== "none" && /* @__PURE__ */ jsx(TagCheckbox, { size: context.size, isSelected, isDisabled: isDisabled2 }),
|
|
216
|
+
leadingContent,
|
|
217
|
+
children,
|
|
218
|
+
typeof count === "number" && /* @__PURE__ */ jsx("span", { className: cx("flex items-center justify-center rounded-[3px] bg-tertiary text-center", styles2[context.size].count), children: count })
|
|
219
|
+
] }),
|
|
220
|
+
(onClose || allowsRemoving) && /* @__PURE__ */ jsx(TagCloseX, { size: context.size, excludeFromTabOrder: allowsRemoving, onPress: () => id && onClose?.(id.toString()) })
|
|
221
|
+
] })
|
|
222
|
+
}
|
|
223
|
+
);
|
|
224
|
+
};
|
|
225
|
+
|
|
226
|
+
export { Tag, TagAvatar, TagGroup, TagList };
|
|
227
|
+
//# sourceMappingURL=tags.js.map
|
|
228
|
+
//# sourceMappingURL=tags.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../../components/foundations/dot-icon.tsx","../../../../utils/cx.ts","../../../../components/base/tags/base-components/tag-checkbox.tsx","../../../../components/base/tags/base-components/tag-close-x.tsx","../../../../components/base/tags/tags.tsx"],"names":["sizes","jsx","AriaButton","XClose","focusShadowPlain","User01","AriaTagGroup","AriaTagList","styles","AriaTag","isDisabled"],"mappings":"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","file":"tags.js","sourcesContent":["\"use client\";\n\nimport type { HTMLAttributes } from \"react\";\n\nconst sizes = {\n sm: {\n wh: 8,\n c: 4,\n r: 2.5,\n },\n md: {\n wh: 10,\n c: 5,\n r: 4,\n },\n};\n\nexport const Dot = ({ size = \"md\", ...props }: HTMLAttributes<HTMLOrSVGElement> & { size?: \"sm\" | \"md\" }) => {\n return (\n <svg width={sizes[size].wh} height={sizes[size].wh} viewBox={`0 0 ${sizes[size].wh} ${sizes[size].wh}`} fill=\"none\" {...props}>\n <circle cx={sizes[size].c} cy={sizes[size].c} r={sizes[size].r} fill=\"currentColor\" stroke=\"currentColor\" />\n </svg>\n );\n};\n","import { extendTailwindMerge } from \"tailwind-merge\";\n\nconst twMerge = extendTailwindMerge({\n extend: {\n theme: {\n text: [\"display-xs\", \"display-sm\", \"display-md\", \"display-lg\", \"display-xl\", \"display-2xl\"],\n },\n },\n});\n\n/**\n * This function is a wrapper around the twMerge function.\n * It is used to merge the classes inside style objects.\n */\nexport const cx = twMerge;\n\n/**\n * This function does nothing besides helping us to be able to\n * sort the classes inside style objects which is not supported\n * by the Tailwind IntelliSense by default.\n */\nexport function sortCx<T extends Record<string, string | number | Record<string, string | number | Record<string, string | number>>>>(classes: T): T {\n return classes;\n}\n","\"use client\";\n\nimport { useLayoutEffect, useRef } from \"react\";\nimport { cx } from \"@/utils/cx\";\n\nconst CHECKBOX_TICK_DELAY_MS = 60;\nconst CHECKBOX_TICK_DRAW_MS = 100;\n\n/** Figma Focus rings/focus-ring — 2px surface gap + 4px brand ring (matches Checkbox). */\nconst focusRingShadow =\n \"outline-none [box-shadow:0px_0px_0px_2px_var(--color-bg-primary),0px_0px_0px_4px_var(--color-focus-ring)]\";\n\nconst sizes = {\n sm: { box: \"size-3.5 rounded-xs\", inset: \"inset-[14.29%]\" },\n md: { box: \"size-4 rounded-xs\", inset: \"inset-[12.5%]\" },\n lg: { box: \"size-4.5 rounded-xs\", inset: \"inset-[13.89%]\" },\n} as const;\n\n/** Draw-on-check tick animation — remounts when checked so it replays each time. */\nfunction TagCheckboxAnimatedCheckMark({ className }: { className?: string }) {\n const pathRef = useRef<SVGPathElement>(null);\n\n useLayoutEffect(() => {\n const path = pathRef.current;\n if (!path || typeof path.getTotalLength !== \"function\") return;\n const len = path.getTotalLength();\n if (len <= 0) return;\n\n path.style.strokeDasharray = `${len}`;\n path.style.strokeDashoffset = `${len}`;\n\n if (typeof path.animate !== \"function\") {\n path.style.strokeDashoffset = \"0\";\n return;\n }\n\n const anim = path.animate([{ strokeDashoffset: len }, { strokeDashoffset: 0 }], {\n duration: CHECKBOX_TICK_DRAW_MS,\n delay: CHECKBOX_TICK_DELAY_MS,\n easing: \"cubic-bezier(0.45, 0, 0.2, 1)\",\n fill: \"forwards\",\n });\n return () => anim.cancel();\n }, []);\n\n return (\n <svg aria-hidden=\"true\" viewBox=\"0 0 14 14\" fill=\"none\" className={className}>\n <path\n ref={pathRef}\n d=\"M2.33325 7L5.24992 9.91667L11.6666 3.5\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n );\n}\n\ninterface TagCheckboxProps {\n size?: keyof typeof sizes;\n className?: string;\n isFocused?: boolean;\n isSelected?: boolean;\n isDisabled?: boolean;\n}\n\n/** Figma: _Tag checkbox (3308:406033) */\nexport const TagCheckbox = ({ className, isFocused, isSelected, isDisabled, size = \"sm\" }: TagCheckboxProps) => {\n const { box, inset } = sizes[size];\n\n return (\n <div\n className={cx(\n \"relative flex shrink-0 cursor-pointer appearance-none items-center justify-center overflow-clip border border-solid border-primary\",\n box,\n isSelected ? \"border-transparent bg-brand-solid\" : \"bg-primary\",\n isDisabled && \"cursor-not-allowed opacity-50\",\n isDisabled && !isSelected && \"bg-tertiary\",\n isFocused && !isDisabled && focusRingShadow,\n className,\n )}\n >\n {isSelected && <TagCheckboxAnimatedCheckMark className={cx(\"pointer-events-none absolute text-fg-white\", inset)} />}\n </div>\n );\n};\nTagCheckbox.displayName = \"TagCheckbox\";\n","\"use client\";\n\nimport type { RefAttributes } from \"react\";\nimport { XIcon as XClose } from \"@phosphor-icons/react/dist/csr/X\";\nimport { Button as AriaButton, type ButtonProps as AriaButtonProps } from \"react-aria-components\";\nimport { cx } from \"@/utils/cx\";\n\n/**\n * Figma: _Tag close X (3307:417672)\n * Total hit target: sm 14px, md 16px, lg 20px (padding + icon).\n */\n\nconst focusShadowPlain =\n \"focus-visible:outline-none focus-visible:[box-shadow:0px_0px_0px_2px_var(--color-bg-primary),0px_0px_0px_4px_var(--color-focus-ring)]\";\n\ninterface TagCloseXProps extends AriaButtonProps, RefAttributes<HTMLButtonElement> {\n size?: \"sm\" | \"md\" | \"lg\";\n className?: string;\n}\n\nconst styles = {\n sm: { root: \"p-0.5\", icon: \"size-2.5\" },\n md: { root: \"p-0.5\", icon: \"size-3\" },\n lg: { root: \"p-[3px]\", icon: \"size-3.5\" },\n};\n\nexport const TagCloseX = ({ size = \"md\", className, ...otherProps }: TagCloseXProps) => {\n return (\n <AriaButton\n slot=\"remove\"\n aria-label=\"Remove this tag\"\n className={cx(\n \"flex cursor-pointer rounded-[3px] text-fg-quaternary outline-transparent transition duration-100 ease-linear hover:bg-primary_hover focus-visible:rounded-[3px] disabled:cursor-not-allowed disabled:opacity-50\",\n focusShadowPlain,\n styles[size].root,\n className,\n )}\n {...otherProps}\n >\n <XClose className={cx(\"shrink-0 transition-inherit-all\", styles[size].icon)} />\n </AriaButton>\n );\n};\n","\"use client\";\n\n/** Figma: Tags (3306:403749) — shell uses border-primary + spread focus ring. */\n\nimport { type ImgHTMLAttributes, type PropsWithChildren, type RefAttributes, createContext, useContext, useState } from \"react\";\nimport { UserIcon as User01 } from \"@phosphor-icons/react/dist/csr/User\";\nimport {\n Tag as AriaTag,\n TagGroup as AriaTagGroup,\n type TagGroupProps as AriaTagGroupProps,\n TagList as AriaTagList,\n type TagProps as AriaTagProps,\n} from \"react-aria-components\";\nimport { Dot } from \"@/components/foundations/dot-icon\";\nimport { cx } from \"@/utils/cx\";\nimport { TagCheckbox } from \"./base-components/tag-checkbox\";\nimport { TagCloseX } from \"./base-components/tag-close-x\";\n\nconst focusShadowPlain =\n \"focus-visible:outline-none focus-visible:[box-shadow:0px_0px_0px_2px_var(--color-bg-primary),0px_0px_0px_4px_var(--color-focus-ring)]\";\n\nexport const TagAvatar = ({ src, alt, contrastBorder = true, className }: ImgHTMLAttributes<HTMLImageElement> & { contrastBorder?: boolean }) => {\n const [isFailed, setIsFailed] = useState(false);\n\n return (\n <div\n className={cx(\n \"relative inline-flex size-4 shrink-0 items-center justify-center overflow-hidden rounded-full bg-tertiary\",\n contrastBorder && \"outline-[0.5px] -outline-offset-[0.5px] outline-black/16\",\n className,\n )}\n >\n {src && !isFailed ? (\n <img data-avatar-img className=\"size-full object-cover\" src={src} alt={alt} onError={() => setIsFailed(true)} />\n ) : (\n <User01 className=\"size-3 stroke-[2.25px] text-fg-quaternary\" />\n )}\n </div>\n );\n};\n\nexport interface TagItem {\n id: string;\n label: string;\n count?: number;\n avatarSrc?: string;\n avatarContrastBorder?: boolean;\n dot?: boolean;\n dotClassName?: string;\n isDisabled?: boolean;\n onClose?: (id: string) => void;\n}\n\nconst TagGroupContext = createContext<{\n selectionMode: \"none\" | \"single\" | \"multiple\";\n size: \"sm\" | \"md\" | \"lg\";\n}>({\n selectionMode: \"none\",\n size: \"sm\",\n});\n\ninterface TagGroupProps extends AriaTagGroupProps, RefAttributes<HTMLDivElement> {\n label: string;\n size?: \"sm\" | \"md\" | \"lg\";\n}\n\nexport const TagGroup = ({ label, selectionMode = \"none\", size = \"sm\", children, ...otherProps }: TagGroupProps) => {\n return (\n <TagGroupContext.Provider value={{ selectionMode, size }}>\n <AriaTagGroup aria-label={label} selectionMode={selectionMode} disallowEmptySelection={selectionMode === \"single\"} {...otherProps}>\n {children}\n </AriaTagGroup>\n </TagGroupContext.Provider>\n );\n};\n\nexport const TagList = AriaTagList;\n\nconst styles = {\n sm: {\n root: {\n base: \"px-2 py-0.75 text-xs font-medium\",\n withCheckbox: \"pl-1.25\",\n withAvatar: \"pl-1\",\n withDot: \"pl-1.5\",\n withCount: \"pr-1\",\n withClose: \"pr-1\",\n },\n content: \"gap-1\",\n count: \"px-1 text-xs font-medium\",\n },\n md: {\n root: {\n base: \"px-2.25 py-0.5 text-sm font-medium\",\n withCheckbox: \"pl-1\",\n withAvatar: \"pl-1.25\",\n withDot: \"pl-1.75\",\n withCount: \"pr-0.75\",\n withClose: \"pr-1\",\n },\n content: \"gap-1.25\",\n count: \"px-1.25 text-xs font-medium\",\n },\n lg: {\n root: {\n base: \"px-2.5 py-1 text-sm font-medium\",\n withCheckbox: \"pl-1.25\",\n withAvatar: \"pl-1.75\",\n withDot: \"pl-2.25\",\n withCount: \"pr-1\",\n withClose: \"pr-1\",\n },\n content: \"gap-1.5\",\n count: \"px-1.5 text-sm font-medium\",\n },\n};\n\ninterface TagProps extends AriaTagProps, RefAttributes<object>, Omit<TagItem, \"label\" | \"id\"> {}\n\nexport const Tag = ({\n id,\n avatarSrc,\n avatarContrastBorder = true,\n dot,\n dotClassName,\n isDisabled,\n count,\n className,\n children,\n onClose,\n}: PropsWithChildren<TagProps>) => {\n const context = useContext(TagGroupContext);\n\n const leadingContent = avatarSrc ? (\n <TagAvatar src={avatarSrc} alt=\"Avatar\" contrastBorder={avatarContrastBorder} />\n ) : dot ? (\n <Dot className={cx(\"text-fg-success-secondary\", dotClassName)} size=\"sm\" />\n ) : null;\n\n return (\n <AriaTag\n id={id}\n isDisabled={isDisabled}\n textValue={typeof children === \"string\" ? children : undefined}\n className={(state) =>\n cx(\n \"flex cursor-default items-center gap-0.75 rounded-md border border-solid border-primary bg-primary text-secondary transition duration-50 ease-linear\",\n focusShadowPlain,\n styles[context.size].root.base,\n\n // With avatar\n avatarSrc && styles[context.size].root.withAvatar,\n // With X button\n (onClose || state.allowsRemoving) && styles[context.size].root.withClose,\n // With dot\n dot && styles[context.size].root.withDot,\n // With count\n typeof count === \"number\" && styles[context.size].root.withCount,\n // With checkbox\n context.selectionMode !== \"none\" && styles[context.size].root.withCheckbox,\n // Disabled\n isDisabled && \"cursor-not-allowed\",\n\n typeof className === \"function\" ? className(state) : className,\n )\n }\n >\n {({ isSelected, isDisabled, allowsRemoving }) => (\n <>\n <div className={cx(\"flex items-center gap-1\", styles[context.size].content)}>\n {context.selectionMode !== \"none\" && <TagCheckbox size={context.size} isSelected={isSelected} isDisabled={isDisabled} />}\n\n {leadingContent}\n\n {children}\n\n {typeof count === \"number\" && (\n <span className={cx(\"flex items-center justify-center rounded-[3px] bg-tertiary text-center\", styles[context.size].count)}>\n {count}\n </span>\n )}\n </div>\n\n {(onClose || allowsRemoving) && (\n <TagCloseX size={context.size} excludeFromTabOrder={allowsRemoving} onPress={() => id && onClose?.(id.toString())} />\n )}\n </>\n )}\n </AriaTag>\n );\n};\n"]}
|