@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.
Files changed (113) hide show
  1. package/dist/{chunk-DCIB6AK3.cjs → chunk-27IO7V3P.cjs} +9 -9
  2. package/dist/{chunk-DCIB6AK3.cjs.map → chunk-27IO7V3P.cjs.map} +1 -1
  3. package/dist/{chunk-PZKEQNNK.cjs → chunk-3AXH7BDM.cjs} +29 -29
  4. package/dist/{chunk-PZKEQNNK.cjs.map → chunk-3AXH7BDM.cjs.map} +1 -1
  5. package/dist/{chunk-Z2TB777W.js → chunk-3UVR2JIB.js} +3 -3
  6. package/dist/{chunk-TAIMKJE6.js → chunk-46GJFN4V.js} +5 -5
  7. package/dist/{chunk-UZTGDV6N.js → chunk-4MD2TPFY.js} +2 -2
  8. package/dist/{chunk-5W6MKTGR.cjs → chunk-4ZHA24HS.cjs} +40 -40
  9. package/dist/{chunk-5W6MKTGR.cjs.map → chunk-4ZHA24HS.cjs.map} +1 -1
  10. package/dist/{chunk-B3YEMD6H.js → chunk-5WDRXBM3.js} +3 -3
  11. package/dist/{chunk-KS3NQFKW.js → chunk-62O2VTR2.js} +2 -2
  12. package/dist/{chunk-6SGZOIOQ.cjs → chunk-7FY2OM5W.cjs} +39 -39
  13. package/dist/{chunk-6SGZOIOQ.cjs.map → chunk-7FY2OM5W.cjs.map} +1 -1
  14. package/dist/{chunk-SWGXCGQ3.js → chunk-7KZJV4MP.js} +2 -2
  15. package/dist/{chunk-65VXW6GZ.js → chunk-A6NBGRGZ.js} +2 -2
  16. package/dist/{chunk-TAKXDI7B.cjs → chunk-BWWUHOE3.cjs} +73 -73
  17. package/dist/{chunk-TAKXDI7B.cjs.map → chunk-BWWUHOE3.cjs.map} +1 -1
  18. package/dist/{chunk-M43DVC6A.cjs → chunk-CRHOAKG5.cjs} +70 -70
  19. package/dist/{chunk-M43DVC6A.cjs.map → chunk-CRHOAKG5.cjs.map} +1 -1
  20. package/dist/{chunk-22VBCVLJ.js → chunk-CWXO6VCD.js} +3948 -4142
  21. package/dist/chunk-CWXO6VCD.js.map +1 -0
  22. package/dist/{chunk-SD36MNVP.cjs → chunk-GABTFTDE.cjs} +624 -818
  23. package/dist/chunk-GABTFTDE.cjs.map +1 -0
  24. package/dist/{chunk-CCG4DARM.cjs → chunk-GXRWE7NB.cjs} +2 -2
  25. package/dist/{chunk-CCG4DARM.cjs.map → chunk-GXRWE7NB.cjs.map} +1 -1
  26. package/dist/{chunk-7OZROCY7.cjs → chunk-HQ6BILVP.cjs} +31 -31
  27. package/dist/{chunk-7OZROCY7.cjs.map → chunk-HQ6BILVP.cjs.map} +1 -1
  28. package/dist/{chunk-OQPMYUZX.cjs → chunk-I4OFXYJR.cjs} +19 -19
  29. package/dist/{chunk-OQPMYUZX.cjs.map → chunk-I4OFXYJR.cjs.map} +1 -1
  30. package/dist/{chunk-F4WJ6G64.js → chunk-IDMM6DVL.js} +4 -4
  31. package/dist/{chunk-YV4PUSAJ.js → chunk-J4HHXHMC.js} +6 -6
  32. package/dist/{chunk-SY37FQHF.cjs → chunk-K5HBVPJ5.cjs} +3 -3
  33. package/dist/{chunk-SY37FQHF.cjs.map → chunk-K5HBVPJ5.cjs.map} +1 -1
  34. package/dist/{chunk-SC543SO2.js → chunk-LESTX5DM.js} +3 -3
  35. package/dist/{chunk-RVSR3M7Y.js → chunk-MJUYWNQB.js} +3 -3
  36. package/dist/{chunk-7FDLIPBP.cjs → chunk-MWAEG3XK.cjs} +12 -12
  37. package/dist/{chunk-7FDLIPBP.cjs.map → chunk-MWAEG3XK.cjs.map} +1 -1
  38. package/dist/{chunk-Z6WEY45X.cjs → chunk-NROSNR5J.cjs} +15 -15
  39. package/dist/{chunk-Z6WEY45X.cjs.map → chunk-NROSNR5J.cjs.map} +1 -1
  40. package/dist/{chunk-LM2P7UWU.cjs → chunk-PGFQ6WQR.cjs} +13 -13
  41. package/dist/{chunk-LM2P7UWU.cjs.map → chunk-PGFQ6WQR.cjs.map} +1 -1
  42. package/dist/{chunk-XGEF6MVM.js → chunk-QF4XERYJ.js} +2 -2
  43. package/dist/{chunk-P4XUTN2Z.js → chunk-U7GDY7Y3.js} +5 -5
  44. package/dist/{chunk-Y6AD3GJG.js → chunk-UHHJIHUZ.js} +6 -6
  45. package/dist/{chunk-WVIBC2M5.cjs → chunk-XDNQJQGP.cjs} +5 -5
  46. package/dist/{chunk-WVIBC2M5.cjs.map → chunk-XDNQJQGP.cjs.map} +1 -1
  47. package/dist/components/case-studies/index.cjs +10 -10
  48. package/dist/components/case-studies/index.js +4 -4
  49. package/dist/components/chat/index.cjs +4 -4
  50. package/dist/components/chat/index.js +3 -3
  51. package/dist/components/contact/index.cjs +5 -5
  52. package/dist/components/contact/index.js +4 -4
  53. package/dist/components/docs/index.cjs +7 -7
  54. package/dist/components/docs/index.js +6 -6
  55. package/dist/components/embeds/index.cjs +5 -5
  56. package/dist/components/embeds/index.js +4 -4
  57. package/dist/components/faq/index.cjs +6 -6
  58. package/dist/components/faq/index.js +5 -5
  59. package/dist/components/features/index.cjs +4 -4
  60. package/dist/components/features/index.js +3 -3
  61. package/dist/components/help-center-pages/index.cjs +23 -23
  62. package/dist/components/help-center-pages/index.js +14 -14
  63. package/dist/components/icons-v2-generated/index.cjs +2 -2
  64. package/dist/components/icons-v2-generated/index.js +1 -1
  65. package/dist/components/index.cjs +125 -127
  66. package/dist/components/index.cjs.map +1 -1
  67. package/dist/components/index.js +12 -14
  68. package/dist/components/index.js.map +1 -1
  69. package/dist/components/navigation/index.cjs +4 -4
  70. package/dist/components/navigation/index.js +3 -3
  71. package/dist/components/onboarding-guides/index.cjs +8 -8
  72. package/dist/components/onboarding-guides/index.js +7 -7
  73. package/dist/components/related-content/index.cjs +6 -6
  74. package/dist/components/related-content/index.js +5 -5
  75. package/dist/components/tickets/index.cjs +7 -7
  76. package/dist/components/tickets/index.js +6 -6
  77. package/dist/components/ui/autocomplete.d.ts +0 -5
  78. package/dist/components/ui/autocomplete.d.ts.map +1 -1
  79. package/dist/components/ui/file-upload.d.ts +1 -3
  80. package/dist/components/ui/file-upload.d.ts.map +1 -1
  81. package/dist/components/ui/index.cjs +4 -6
  82. package/dist/components/ui/index.cjs.map +1 -1
  83. package/dist/components/ui/index.d.ts +0 -1
  84. package/dist/components/ui/index.d.ts.map +1 -1
  85. package/dist/components/ui/index.js +3 -5
  86. package/dist/hooks/index.cjs +3 -3
  87. package/dist/hooks/index.js +2 -2
  88. package/dist/index.cjs +4 -6
  89. package/dist/index.cjs.map +1 -1
  90. package/dist/index.js +3 -5
  91. package/package.json +1 -1
  92. package/src/components/ui/autocomplete.tsx +18 -50
  93. package/src/components/ui/file-upload.tsx +76 -74
  94. package/src/components/ui/index.ts +0 -1
  95. package/dist/chunk-22VBCVLJ.js.map +0 -1
  96. package/dist/chunk-SD36MNVP.cjs.map +0 -1
  97. package/dist/components/ui/tag-select-dropdown.d.ts +0 -36
  98. package/dist/components/ui/tag-select-dropdown.d.ts.map +0 -1
  99. package/src/components/ui/tag-select-dropdown.tsx +0 -220
  100. /package/dist/{chunk-Z2TB777W.js.map → chunk-3UVR2JIB.js.map} +0 -0
  101. /package/dist/{chunk-TAIMKJE6.js.map → chunk-46GJFN4V.js.map} +0 -0
  102. /package/dist/{chunk-UZTGDV6N.js.map → chunk-4MD2TPFY.js.map} +0 -0
  103. /package/dist/{chunk-B3YEMD6H.js.map → chunk-5WDRXBM3.js.map} +0 -0
  104. /package/dist/{chunk-KS3NQFKW.js.map → chunk-62O2VTR2.js.map} +0 -0
  105. /package/dist/{chunk-SWGXCGQ3.js.map → chunk-7KZJV4MP.js.map} +0 -0
  106. /package/dist/{chunk-65VXW6GZ.js.map → chunk-A6NBGRGZ.js.map} +0 -0
  107. /package/dist/{chunk-F4WJ6G64.js.map → chunk-IDMM6DVL.js.map} +0 -0
  108. /package/dist/{chunk-YV4PUSAJ.js.map → chunk-J4HHXHMC.js.map} +0 -0
  109. /package/dist/{chunk-SC543SO2.js.map → chunk-LESTX5DM.js.map} +0 -0
  110. /package/dist/{chunk-RVSR3M7Y.js.map → chunk-MJUYWNQB.js.map} +0 -0
  111. /package/dist/{chunk-XGEF6MVM.js.map → chunk-QF4XERYJ.js.map} +0 -0
  112. /package/dist/{chunk-P4XUTN2Z.js.map → chunk-U7GDY7Y3.js.map} +0 -0
  113. /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 &ldquo;{query}&rdquo;
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
- }