@flamingo-stack/openframe-frontend-core 0.0.327-snapshot.20260626171732 → 0.0.327
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/{chunk-DCIB6AK3.cjs → chunk-27IO7V3P.cjs} +9 -9
- package/dist/{chunk-DCIB6AK3.cjs.map → chunk-27IO7V3P.cjs.map} +1 -1
- package/dist/{chunk-PZKEQNNK.cjs → chunk-3AXH7BDM.cjs} +29 -29
- package/dist/{chunk-PZKEQNNK.cjs.map → chunk-3AXH7BDM.cjs.map} +1 -1
- package/dist/{chunk-Z2TB777W.js → chunk-3UVR2JIB.js} +3 -3
- package/dist/{chunk-TAIMKJE6.js → chunk-46GJFN4V.js} +5 -5
- package/dist/{chunk-UZTGDV6N.js → chunk-4MD2TPFY.js} +2 -2
- package/dist/{chunk-5W6MKTGR.cjs → chunk-4ZHA24HS.cjs} +40 -40
- package/dist/{chunk-5W6MKTGR.cjs.map → chunk-4ZHA24HS.cjs.map} +1 -1
- package/dist/{chunk-B3YEMD6H.js → chunk-5WDRXBM3.js} +3 -3
- package/dist/{chunk-KS3NQFKW.js → chunk-62O2VTR2.js} +2 -2
- package/dist/{chunk-6SGZOIOQ.cjs → chunk-7FY2OM5W.cjs} +39 -39
- package/dist/{chunk-6SGZOIOQ.cjs.map → chunk-7FY2OM5W.cjs.map} +1 -1
- package/dist/{chunk-SWGXCGQ3.js → chunk-7KZJV4MP.js} +2 -2
- package/dist/{chunk-65VXW6GZ.js → chunk-A6NBGRGZ.js} +2 -2
- package/dist/{chunk-TAKXDI7B.cjs → chunk-BWWUHOE3.cjs} +73 -73
- package/dist/{chunk-TAKXDI7B.cjs.map → chunk-BWWUHOE3.cjs.map} +1 -1
- package/dist/{chunk-M43DVC6A.cjs → chunk-CRHOAKG5.cjs} +70 -70
- package/dist/{chunk-M43DVC6A.cjs.map → chunk-CRHOAKG5.cjs.map} +1 -1
- package/dist/{chunk-22VBCVLJ.js → chunk-CWXO6VCD.js} +3948 -4142
- package/dist/chunk-CWXO6VCD.js.map +1 -0
- package/dist/{chunk-SD36MNVP.cjs → chunk-GABTFTDE.cjs} +624 -818
- package/dist/chunk-GABTFTDE.cjs.map +1 -0
- package/dist/{chunk-CCG4DARM.cjs → chunk-GXRWE7NB.cjs} +2 -2
- package/dist/{chunk-CCG4DARM.cjs.map → chunk-GXRWE7NB.cjs.map} +1 -1
- package/dist/{chunk-7OZROCY7.cjs → chunk-HQ6BILVP.cjs} +31 -31
- package/dist/{chunk-7OZROCY7.cjs.map → chunk-HQ6BILVP.cjs.map} +1 -1
- package/dist/{chunk-OQPMYUZX.cjs → chunk-I4OFXYJR.cjs} +19 -19
- package/dist/{chunk-OQPMYUZX.cjs.map → chunk-I4OFXYJR.cjs.map} +1 -1
- package/dist/{chunk-F4WJ6G64.js → chunk-IDMM6DVL.js} +4 -4
- package/dist/{chunk-YV4PUSAJ.js → chunk-J4HHXHMC.js} +6 -6
- package/dist/{chunk-SY37FQHF.cjs → chunk-K5HBVPJ5.cjs} +3 -3
- package/dist/{chunk-SY37FQHF.cjs.map → chunk-K5HBVPJ5.cjs.map} +1 -1
- package/dist/{chunk-SC543SO2.js → chunk-LESTX5DM.js} +3 -3
- package/dist/{chunk-RVSR3M7Y.js → chunk-MJUYWNQB.js} +3 -3
- package/dist/{chunk-7FDLIPBP.cjs → chunk-MWAEG3XK.cjs} +12 -12
- package/dist/{chunk-7FDLIPBP.cjs.map → chunk-MWAEG3XK.cjs.map} +1 -1
- package/dist/{chunk-Z6WEY45X.cjs → chunk-NROSNR5J.cjs} +15 -15
- package/dist/{chunk-Z6WEY45X.cjs.map → chunk-NROSNR5J.cjs.map} +1 -1
- package/dist/{chunk-LM2P7UWU.cjs → chunk-PGFQ6WQR.cjs} +13 -13
- package/dist/{chunk-LM2P7UWU.cjs.map → chunk-PGFQ6WQR.cjs.map} +1 -1
- package/dist/{chunk-XGEF6MVM.js → chunk-QF4XERYJ.js} +2 -2
- package/dist/{chunk-P4XUTN2Z.js → chunk-U7GDY7Y3.js} +5 -5
- package/dist/{chunk-Y6AD3GJG.js → chunk-UHHJIHUZ.js} +6 -6
- package/dist/{chunk-WVIBC2M5.cjs → chunk-XDNQJQGP.cjs} +5 -5
- package/dist/{chunk-WVIBC2M5.cjs.map → chunk-XDNQJQGP.cjs.map} +1 -1
- package/dist/components/case-studies/index.cjs +10 -10
- package/dist/components/case-studies/index.js +4 -4
- package/dist/components/chat/index.cjs +4 -4
- package/dist/components/chat/index.js +3 -3
- package/dist/components/contact/index.cjs +5 -5
- package/dist/components/contact/index.js +4 -4
- package/dist/components/docs/index.cjs +7 -7
- package/dist/components/docs/index.js +6 -6
- package/dist/components/embeds/index.cjs +5 -5
- package/dist/components/embeds/index.js +4 -4
- package/dist/components/faq/index.cjs +6 -6
- package/dist/components/faq/index.js +5 -5
- package/dist/components/features/index.cjs +4 -4
- package/dist/components/features/index.js +3 -3
- package/dist/components/help-center-pages/index.cjs +23 -23
- package/dist/components/help-center-pages/index.js +14 -14
- package/dist/components/icons-v2-generated/index.cjs +2 -2
- package/dist/components/icons-v2-generated/index.js +1 -1
- package/dist/components/index.cjs +125 -127
- package/dist/components/index.cjs.map +1 -1
- package/dist/components/index.js +12 -14
- package/dist/components/index.js.map +1 -1
- package/dist/components/navigation/index.cjs +4 -4
- package/dist/components/navigation/index.js +3 -3
- package/dist/components/onboarding-guides/index.cjs +8 -8
- package/dist/components/onboarding-guides/index.js +7 -7
- package/dist/components/related-content/index.cjs +6 -6
- package/dist/components/related-content/index.js +5 -5
- package/dist/components/tickets/index.cjs +7 -7
- package/dist/components/tickets/index.js +6 -6
- package/dist/components/ui/autocomplete.d.ts +0 -5
- package/dist/components/ui/autocomplete.d.ts.map +1 -1
- package/dist/components/ui/file-upload.d.ts +1 -3
- package/dist/components/ui/file-upload.d.ts.map +1 -1
- package/dist/components/ui/index.cjs +4 -6
- package/dist/components/ui/index.cjs.map +1 -1
- package/dist/components/ui/index.d.ts +0 -1
- package/dist/components/ui/index.d.ts.map +1 -1
- package/dist/components/ui/index.js +3 -5
- package/dist/hooks/index.cjs +3 -3
- package/dist/hooks/index.js +2 -2
- package/dist/index.cjs +4 -6
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +3 -5
- package/package.json +1 -1
- package/src/components/ui/autocomplete.tsx +18 -50
- package/src/components/ui/file-upload.tsx +76 -74
- package/src/components/ui/index.ts +0 -1
- package/dist/chunk-22VBCVLJ.js.map +0 -1
- package/dist/chunk-SD36MNVP.cjs.map +0 -1
- package/dist/components/ui/tag-select-dropdown.d.ts +0 -36
- package/dist/components/ui/tag-select-dropdown.d.ts.map +0 -1
- package/src/components/ui/tag-select-dropdown.tsx +0 -220
- /package/dist/{chunk-Z2TB777W.js.map → chunk-3UVR2JIB.js.map} +0 -0
- /package/dist/{chunk-TAIMKJE6.js.map → chunk-46GJFN4V.js.map} +0 -0
- /package/dist/{chunk-UZTGDV6N.js.map → chunk-4MD2TPFY.js.map} +0 -0
- /package/dist/{chunk-B3YEMD6H.js.map → chunk-5WDRXBM3.js.map} +0 -0
- /package/dist/{chunk-KS3NQFKW.js.map → chunk-62O2VTR2.js.map} +0 -0
- /package/dist/{chunk-SWGXCGQ3.js.map → chunk-7KZJV4MP.js.map} +0 -0
- /package/dist/{chunk-65VXW6GZ.js.map → chunk-A6NBGRGZ.js.map} +0 -0
- /package/dist/{chunk-F4WJ6G64.js.map → chunk-IDMM6DVL.js.map} +0 -0
- /package/dist/{chunk-YV4PUSAJ.js.map → chunk-J4HHXHMC.js.map} +0 -0
- /package/dist/{chunk-SC543SO2.js.map → chunk-LESTX5DM.js.map} +0 -0
- /package/dist/{chunk-RVSR3M7Y.js.map → chunk-MJUYWNQB.js.map} +0 -0
- /package/dist/{chunk-XGEF6MVM.js.map → chunk-QF4XERYJ.js.map} +0 -0
- /package/dist/{chunk-P4XUTN2Z.js.map → chunk-U7GDY7Y3.js.map} +0 -0
- /package/dist/{chunk-Y6AD3GJG.js.map → chunk-UHHJIHUZ.js.map} +0 -0
|
@@ -1,36 +0,0 @@
|
|
|
1
|
-
import * as React from 'react';
|
|
2
|
-
export interface TagSelectOption {
|
|
3
|
-
id: string;
|
|
4
|
-
label: string;
|
|
5
|
-
}
|
|
6
|
-
export interface TagSelectDropdownProps {
|
|
7
|
-
/** All selectable tags. */
|
|
8
|
-
options: TagSelectOption[];
|
|
9
|
-
/** IDs of the currently selected tags. */
|
|
10
|
-
selectedIds: string[];
|
|
11
|
-
/** Called with the next full selection whenever a tag is toggled. */
|
|
12
|
-
onChange: (ids: string[]) => void;
|
|
13
|
-
/** Called when the inline "Create" row is chosen. Omit to disable creation. */
|
|
14
|
-
onCreate?: (name: string) => void;
|
|
15
|
-
/** Max length for a newly created tag name. Omit for no limit. */
|
|
16
|
-
maxCreateLength?: number;
|
|
17
|
-
/** Called when a row's hover trash button is clicked. Omit to hide delete. */
|
|
18
|
-
onDelete?: (id: string) => void;
|
|
19
|
-
isCreating?: boolean;
|
|
20
|
-
isDeleting?: boolean;
|
|
21
|
-
/** Trigger button label. */
|
|
22
|
-
triggerLabel?: string;
|
|
23
|
-
searchPlaceholder?: string;
|
|
24
|
-
disabled?: boolean;
|
|
25
|
-
align?: 'start' | 'center' | 'end';
|
|
26
|
-
/** Forwarded to the trigger button. */
|
|
27
|
-
className?: string;
|
|
28
|
-
}
|
|
29
|
-
/**
|
|
30
|
-
* Multi-select tag picker rendered as a button-triggered dropdown (the
|
|
31
|
-
* multi-select sibling of the compact `AssigneeDropdown`): a trigger opens a
|
|
32
|
-
* popover with an internal search field, a checkable option list, and an
|
|
33
|
-
* inline "Create" row. Selected chips are rendered by the caller.
|
|
34
|
-
*/
|
|
35
|
-
export declare function TagSelectDropdown({ options, selectedIds, onChange, onCreate, maxCreateLength, onDelete, isCreating, isDeleting, triggerLabel, searchPlaceholder, disabled, align, className, }: TagSelectDropdownProps): React.JSX.Element;
|
|
36
|
-
//# sourceMappingURL=tag-select-dropdown.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"tag-select-dropdown.d.ts","sourceRoot":"","sources":["../../../src/components/ui/tag-select-dropdown.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAM9B,MAAM,WAAW,eAAe;IAC9B,EAAE,EAAE,MAAM,CAAA;IACV,KAAK,EAAE,MAAM,CAAA;CACd;AAED,MAAM,WAAW,sBAAsB;IACrC,2BAA2B;IAC3B,OAAO,EAAE,eAAe,EAAE,CAAA;IAC1B,0CAA0C;IAC1C,WAAW,EAAE,MAAM,EAAE,CAAA;IACrB,qEAAqE;IACrE,QAAQ,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,IAAI,CAAA;IACjC,+EAA+E;IAC/E,QAAQ,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAA;IACjC,kEAAkE;IAClE,eAAe,CAAC,EAAE,MAAM,CAAA;IACxB,8EAA8E;IAC9E,QAAQ,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,IAAI,CAAA;IAC/B,UAAU,CAAC,EAAE,OAAO,CAAA;IACpB,UAAU,CAAC,EAAE,OAAO,CAAA;IACpB,4BAA4B;IAC5B,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,iBAAiB,CAAC,EAAE,MAAM,CAAA;IAC1B,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,KAAK,CAAC,EAAE,OAAO,GAAG,QAAQ,GAAG,KAAK,CAAA;IAClC,uCAAuC;IACvC,SAAS,CAAC,EAAE,MAAM,CAAA;CACnB;AAED;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAAC,EAChC,OAAO,EACP,WAAW,EACX,QAAQ,EACR,QAAQ,EACR,eAAe,EACf,QAAQ,EACR,UAAkB,EAClB,UAAkB,EAClB,YAAyB,EACzB,iBAA8C,EAC9C,QAAgB,EAChB,KAAe,EACf,SAAS,GACV,EAAE,sBAAsB,qBAiKxB"}
|
|
@@ -1,220 +0,0 @@
|
|
|
1
|
-
'use client'
|
|
2
|
-
|
|
3
|
-
import * as PopoverPrimitive from '@radix-ui/react-popover'
|
|
4
|
-
import * as React from 'react'
|
|
5
|
-
import { cn } from '../../utils/cn'
|
|
6
|
-
import { CheckIcon, PlusIcon, SearchIcon, TrashIcon } from '../icons-v2-generated'
|
|
7
|
-
import { Button } from './button'
|
|
8
|
-
import { Input } from './input'
|
|
9
|
-
|
|
10
|
-
export interface TagSelectOption {
|
|
11
|
-
id: string
|
|
12
|
-
label: string
|
|
13
|
-
}
|
|
14
|
-
|
|
15
|
-
export interface TagSelectDropdownProps {
|
|
16
|
-
/** All selectable tags. */
|
|
17
|
-
options: TagSelectOption[]
|
|
18
|
-
/** IDs of the currently selected tags. */
|
|
19
|
-
selectedIds: string[]
|
|
20
|
-
/** Called with the next full selection whenever a tag is toggled. */
|
|
21
|
-
onChange: (ids: string[]) => void
|
|
22
|
-
/** Called when the inline "Create" row is chosen. Omit to disable creation. */
|
|
23
|
-
onCreate?: (name: string) => void
|
|
24
|
-
/** Max length for a newly created tag name. Omit for no limit. */
|
|
25
|
-
maxCreateLength?: number
|
|
26
|
-
/** Called when a row's hover trash button is clicked. Omit to hide delete. */
|
|
27
|
-
onDelete?: (id: string) => void
|
|
28
|
-
isCreating?: boolean
|
|
29
|
-
isDeleting?: boolean
|
|
30
|
-
/** Trigger button label. */
|
|
31
|
-
triggerLabel?: string
|
|
32
|
-
searchPlaceholder?: string
|
|
33
|
-
disabled?: boolean
|
|
34
|
-
align?: 'start' | 'center' | 'end'
|
|
35
|
-
/** Forwarded to the trigger button. */
|
|
36
|
-
className?: string
|
|
37
|
-
}
|
|
38
|
-
|
|
39
|
-
/**
|
|
40
|
-
* Multi-select tag picker rendered as a button-triggered dropdown (the
|
|
41
|
-
* multi-select sibling of the compact `AssigneeDropdown`): a trigger opens a
|
|
42
|
-
* popover with an internal search field, a checkable option list, and an
|
|
43
|
-
* inline "Create" row. Selected chips are rendered by the caller.
|
|
44
|
-
*/
|
|
45
|
-
export function TagSelectDropdown({
|
|
46
|
-
options,
|
|
47
|
-
selectedIds,
|
|
48
|
-
onChange,
|
|
49
|
-
onCreate,
|
|
50
|
-
maxCreateLength,
|
|
51
|
-
onDelete,
|
|
52
|
-
isCreating = false,
|
|
53
|
-
isDeleting = false,
|
|
54
|
-
triggerLabel = 'Add Tags',
|
|
55
|
-
searchPlaceholder = 'Search or create tags...',
|
|
56
|
-
disabled = false,
|
|
57
|
-
align = 'start',
|
|
58
|
-
className,
|
|
59
|
-
}: TagSelectDropdownProps) {
|
|
60
|
-
const [isOpen, setIsOpen] = React.useState(false)
|
|
61
|
-
const [search, setSearch] = React.useState('')
|
|
62
|
-
|
|
63
|
-
React.useEffect(() => {
|
|
64
|
-
if (!isOpen) setSearch('')
|
|
65
|
-
}, [isOpen])
|
|
66
|
-
|
|
67
|
-
const query = search.trim()
|
|
68
|
-
const filtered = React.useMemo(() => {
|
|
69
|
-
const q = query.toLowerCase()
|
|
70
|
-
if (!q) return options
|
|
71
|
-
return options.filter(o => o.label.toLowerCase().includes(q))
|
|
72
|
-
}, [options, query])
|
|
73
|
-
|
|
74
|
-
// Selected tags float to the top of the list.
|
|
75
|
-
const ordered = React.useMemo(() => {
|
|
76
|
-
const selected = filtered.filter(o => selectedIds.includes(o.id))
|
|
77
|
-
const rest = filtered.filter(o => !selectedIds.includes(o.id))
|
|
78
|
-
return [...selected, ...rest]
|
|
79
|
-
}, [filtered, selectedIds])
|
|
80
|
-
|
|
81
|
-
const showCreate = !!onCreate && !!query && !options.some(o => o.label.toLowerCase() === query.toLowerCase())
|
|
82
|
-
const isCreateTooLong = maxCreateLength != null && query.length > maxCreateLength
|
|
83
|
-
const canCreate = showCreate && !isCreateTooLong
|
|
84
|
-
|
|
85
|
-
const toggle = (id: string) => {
|
|
86
|
-
onChange(selectedIds.includes(id) ? selectedIds.filter(i => i !== id) : [...selectedIds, id])
|
|
87
|
-
}
|
|
88
|
-
|
|
89
|
-
const handleCreate = () => {
|
|
90
|
-
if (!onCreate || !canCreate) return
|
|
91
|
-
onCreate(query)
|
|
92
|
-
setSearch('')
|
|
93
|
-
}
|
|
94
|
-
|
|
95
|
-
return (
|
|
96
|
-
<PopoverPrimitive.Root open={isOpen} onOpenChange={setIsOpen} modal={false}>
|
|
97
|
-
<PopoverPrimitive.Trigger asChild>
|
|
98
|
-
<Button
|
|
99
|
-
type="button"
|
|
100
|
-
variant="outline"
|
|
101
|
-
size="small"
|
|
102
|
-
leftIcon={<PlusIcon />}
|
|
103
|
-
disabled={disabled}
|
|
104
|
-
className={cn('w-fit focus-visible:ring-0', className)}
|
|
105
|
-
>
|
|
106
|
-
{triggerLabel}
|
|
107
|
-
</Button>
|
|
108
|
-
</PopoverPrimitive.Trigger>
|
|
109
|
-
<PopoverPrimitive.Portal>
|
|
110
|
-
<PopoverPrimitive.Content
|
|
111
|
-
align={align}
|
|
112
|
-
sideOffset={6}
|
|
113
|
-
className={cn(
|
|
114
|
-
'z-50 w-72 bg-ods-card border border-ods-border rounded-[6px] shadow-lg overflow-hidden',
|
|
115
|
-
'data-[state=open]:animate-in data-[state=closed]:animate-out',
|
|
116
|
-
'data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0',
|
|
117
|
-
'data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95',
|
|
118
|
-
'data-[side=bottom]:slide-in-from-top-2 data-[side=top]:slide-in-from-bottom-2',
|
|
119
|
-
)}
|
|
120
|
-
>
|
|
121
|
-
<div className="border-b border-ods-border">
|
|
122
|
-
<Input
|
|
123
|
-
autoFocus
|
|
124
|
-
value={search}
|
|
125
|
-
onChange={e => setSearch(e.target.value)}
|
|
126
|
-
onKeyDown={e => {
|
|
127
|
-
if (e.key === 'Enter' && canCreate) {
|
|
128
|
-
e.preventDefault()
|
|
129
|
-
handleCreate()
|
|
130
|
-
}
|
|
131
|
-
}}
|
|
132
|
-
placeholder={searchPlaceholder}
|
|
133
|
-
startAdornment={<SearchIcon className="size-4 text-ods-text-secondary" />}
|
|
134
|
-
className="rounded-none border-0"
|
|
135
|
-
/>
|
|
136
|
-
</div>
|
|
137
|
-
<div className="max-h-72 overflow-y-auto py-[var(--spacing-system-xs)]" role="listbox">
|
|
138
|
-
{ordered.map(opt => {
|
|
139
|
-
const isSelected = selectedIds.includes(opt.id)
|
|
140
|
-
return (
|
|
141
|
-
<div
|
|
142
|
-
key={opt.id}
|
|
143
|
-
role="option"
|
|
144
|
-
aria-selected={isSelected}
|
|
145
|
-
tabIndex={0}
|
|
146
|
-
onClick={() => toggle(opt.id)}
|
|
147
|
-
onKeyDown={e => {
|
|
148
|
-
if (e.key === 'Enter' || e.key === ' ') {
|
|
149
|
-
e.preventDefault()
|
|
150
|
-
toggle(opt.id)
|
|
151
|
-
}
|
|
152
|
-
}}
|
|
153
|
-
className={cn(
|
|
154
|
-
'group/item flex items-center gap-[var(--spacing-system-xs)] w-full cursor-pointer text-left',
|
|
155
|
-
'px-[var(--spacing-system-sf)] py-[var(--spacing-system-xs)]',
|
|
156
|
-
'hover:bg-ods-bg-hover transition-colors',
|
|
157
|
-
isSelected && 'bg-ods-bg-hover',
|
|
158
|
-
)}
|
|
159
|
-
>
|
|
160
|
-
<span
|
|
161
|
-
className={cn('flex-1 truncate text-h4', isSelected ? 'text-ods-accent' : 'text-ods-text-primary')}
|
|
162
|
-
title={opt.label}
|
|
163
|
-
>
|
|
164
|
-
{opt.label}
|
|
165
|
-
</span>
|
|
166
|
-
{isSelected && <CheckIcon className="size-4 shrink-0 text-ods-accent" />}
|
|
167
|
-
{onDelete && !isSelected && (
|
|
168
|
-
<button
|
|
169
|
-
type="button"
|
|
170
|
-
aria-label={`Delete tag ${opt.label}`}
|
|
171
|
-
onClick={e => {
|
|
172
|
-
e.stopPropagation()
|
|
173
|
-
onDelete(opt.id)
|
|
174
|
-
}}
|
|
175
|
-
disabled={isDeleting}
|
|
176
|
-
className={cn(
|
|
177
|
-
'shrink-0 opacity-0 transition-opacity group-hover/item:opacity-100 focus-visible:opacity-100',
|
|
178
|
-
'disabled:opacity-50 disabled:pointer-events-none',
|
|
179
|
-
)}
|
|
180
|
-
>
|
|
181
|
-
<TrashIcon className="size-4 text-ods-error" />
|
|
182
|
-
</button>
|
|
183
|
-
)}
|
|
184
|
-
</div>
|
|
185
|
-
)
|
|
186
|
-
})}
|
|
187
|
-
|
|
188
|
-
{showCreate &&
|
|
189
|
-
(isCreateTooLong ? (
|
|
190
|
-
<div className="flex items-center gap-[var(--spacing-system-xs)] w-full px-[var(--spacing-system-sf)] py-[var(--spacing-system-xs)] text-h5 text-ods-error">
|
|
191
|
-
Maximum {maxCreateLength} characters
|
|
192
|
-
</div>
|
|
193
|
-
) : (
|
|
194
|
-
<button
|
|
195
|
-
type="button"
|
|
196
|
-
onClick={handleCreate}
|
|
197
|
-
disabled={isCreating}
|
|
198
|
-
className={cn(
|
|
199
|
-
'flex items-center gap-[var(--spacing-system-xs)] w-full px-[var(--spacing-system-sf)] py-[var(--spacing-system-xs)] text-left',
|
|
200
|
-
'hover:bg-ods-bg-hover transition-colors disabled:opacity-50 disabled:pointer-events-none',
|
|
201
|
-
)}
|
|
202
|
-
>
|
|
203
|
-
<PlusIcon className="size-4 shrink-0 text-ods-accent" />
|
|
204
|
-
<span className="flex-1 truncate text-h4 text-ods-accent" title={`Create "${query}"`}>
|
|
205
|
-
Create “{query}”
|
|
206
|
-
</span>
|
|
207
|
-
</button>
|
|
208
|
-
))}
|
|
209
|
-
|
|
210
|
-
{filtered.length === 0 && !showCreate && (
|
|
211
|
-
<div className="px-[var(--spacing-system-sf)] py-[var(--spacing-system-s)] text-h5 text-ods-text-secondary">
|
|
212
|
-
No tags found
|
|
213
|
-
</div>
|
|
214
|
-
)}
|
|
215
|
-
</div>
|
|
216
|
-
</PopoverPrimitive.Content>
|
|
217
|
-
</PopoverPrimitive.Portal>
|
|
218
|
-
</PopoverPrimitive.Root>
|
|
219
|
-
)
|
|
220
|
-
}
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|