@flamingo-stack/openframe-frontend-core 0.0.512 → 0.0.513-1642.4228.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/dist/{chunk-VVXUUBML.cjs → chunk-2B4GFIZR.cjs} +26 -26
- package/dist/{chunk-VVXUUBML.cjs.map → chunk-2B4GFIZR.cjs.map} +1 -1
- package/dist/{chunk-XG7FLAKQ.js → chunk-2M2XTLLU.js} +2 -2
- package/dist/{chunk-SG25J6LV.cjs → chunk-3DOS3NN3.cjs} +87 -87
- package/dist/{chunk-SG25J6LV.cjs.map → chunk-3DOS3NN3.cjs.map} +1 -1
- package/dist/{chunk-WVZHCDB5.cjs → chunk-3HUYWTDH.cjs} +11 -11
- package/dist/{chunk-WVZHCDB5.cjs.map → chunk-3HUYWTDH.cjs.map} +1 -1
- package/dist/{chunk-FI35LJ3L.js → chunk-3PAWTYGX.js} +2 -2
- package/dist/{chunk-2WWDZR4D.cjs → chunk-6NUWOSJ2.cjs} +31 -31
- package/dist/{chunk-2WWDZR4D.cjs.map → chunk-6NUWOSJ2.cjs.map} +1 -1
- package/dist/{chunk-5JBDT2MQ.cjs → chunk-7TWV3RQF.cjs} +7 -7
- package/dist/{chunk-5JBDT2MQ.cjs.map → chunk-7TWV3RQF.cjs.map} +1 -1
- package/dist/{chunk-F2YI5N7E.cjs → chunk-AFVPKV2V.cjs} +13 -13
- package/dist/{chunk-F2YI5N7E.cjs.map → chunk-AFVPKV2V.cjs.map} +1 -1
- package/dist/{chunk-JOFGJYIT.js → chunk-C7EEPMMS.js} +2 -2
- package/dist/{chunk-IK2WRYVA.js → chunk-CPR3LS3G.js} +4 -4
- package/dist/{chunk-7VBEOGCR.cjs → chunk-EDEHY73L.cjs} +61 -61
- package/dist/{chunk-7VBEOGCR.cjs.map → chunk-EDEHY73L.cjs.map} +1 -1
- package/dist/{chunk-VZX3SSFL.js → chunk-F5JG5KXZ.js} +2 -2
- package/dist/{chunk-OT4RV6WY.js → chunk-GIYB77AH.js} +6 -6
- package/dist/{chunk-HGZPH7S5.js → chunk-HQTKEWJQ.js} +2 -2
- package/dist/{chunk-6LMTBNLN.js → chunk-J2IHMVWH.js} +2 -2
- package/dist/{chunk-JO3NPEK6.js → chunk-L6BZVJMU.js} +2 -2
- package/dist/{chunk-V5WLIFKN.js → chunk-LIUGDM6D.js} +2888 -2841
- package/dist/chunk-LIUGDM6D.js.map +1 -0
- package/dist/{chunk-ZIQMVAGA.js → chunk-LWNPUXEW.js} +2 -2
- package/dist/{chunk-RJXI25TJ.cjs → chunk-O57VWXJ6.cjs} +26 -26
- package/dist/{chunk-RJXI25TJ.cjs.map → chunk-O57VWXJ6.cjs.map} +1 -1
- package/dist/{chunk-IHNUMRMU.js → chunk-PDFXMFQM.js} +2 -2
- package/dist/{chunk-DQDPDUI3.cjs → chunk-PZOWHJVO.cjs} +4 -4
- package/dist/{chunk-DQDPDUI3.cjs.map → chunk-PZOWHJVO.cjs.map} +1 -1
- package/dist/{chunk-JIW5JI3E.cjs → chunk-REITDNP6.cjs} +3 -3
- package/dist/{chunk-JIW5JI3E.cjs.map → chunk-REITDNP6.cjs.map} +1 -1
- package/dist/{chunk-AWLFJMOJ.cjs → chunk-UX3QT5QM.cjs} +37 -37
- package/dist/{chunk-AWLFJMOJ.cjs.map → chunk-UX3QT5QM.cjs.map} +1 -1
- package/dist/{chunk-67YDSTH7.cjs → chunk-VNW62WLX.cjs} +9 -9
- package/dist/{chunk-67YDSTH7.cjs.map → chunk-VNW62WLX.cjs.map} +1 -1
- package/dist/{chunk-JKAX5K7C.js → chunk-XMUEU55V.js} +5 -5
- package/dist/{chunk-4NFDSMB5.js → chunk-XOVSXNLV.js} +4 -4
- package/dist/{chunk-GOFTC2HV.cjs → chunk-XQGBMU5W.cjs} +66 -19
- package/dist/chunk-XQGBMU5W.cjs.map +1 -0
- package/dist/{chunk-2XL7UK5Y.cjs → chunk-ZGRBMHHW.cjs} +5 -5
- package/dist/{chunk-2XL7UK5Y.cjs.map → chunk-ZGRBMHHW.cjs.map} +1 -1
- package/dist/components/case-studies/index.cjs +8 -8
- package/dist/components/case-studies/index.js +2 -2
- package/dist/components/chat/index.cjs +2 -2
- package/dist/components/chat/index.js +1 -1
- package/dist/components/contact/index.cjs +3 -3
- package/dist/components/contact/index.js +2 -2
- package/dist/components/docs/index.cjs +5 -5
- package/dist/components/docs/index.js +4 -4
- package/dist/components/embeds/index.cjs +3 -3
- package/dist/components/embeds/index.js +2 -2
- package/dist/components/faq/index.cjs +3 -3
- package/dist/components/faq/index.js +2 -2
- package/dist/components/features/board/ticket-card.d.ts.map +1 -1
- package/dist/components/features/board/types.d.ts +2 -0
- package/dist/components/features/board/types.d.ts.map +1 -1
- package/dist/components/features/index.cjs +2 -2
- package/dist/components/features/index.js +1 -1
- package/dist/components/help-center-pages/index.cjs +22 -22
- package/dist/components/help-center-pages/index.js +13 -13
- package/dist/components/index.cjs +134 -132
- package/dist/components/index.cjs.map +1 -1
- package/dist/components/index.js +13 -11
- package/dist/components/index.js.map +1 -1
- package/dist/components/meeting-scheduler/index.cjs +34 -34
- package/dist/components/meeting-scheduler/index.js +3 -3
- package/dist/components/navigation/index.cjs +2 -2
- package/dist/components/navigation/index.js +1 -1
- package/dist/components/onboarding-guides/index.cjs +5 -5
- package/dist/components/onboarding-guides/index.js +4 -4
- package/dist/components/related-content/index.cjs +3 -3
- package/dist/components/related-content/index.js +2 -2
- package/dist/components/tickets/index.cjs +6 -6
- package/dist/components/tickets/index.js +5 -5
- package/dist/components/ui/assignee-dropdown.d.ts +2 -0
- package/dist/components/ui/assignee-dropdown.d.ts.map +1 -1
- package/dist/components/ui/deleted-user-avatar.d.ts +27 -0
- package/dist/components/ui/deleted-user-avatar.d.ts.map +1 -0
- package/dist/components/ui/index.cjs +4 -2
- package/dist/components/ui/index.cjs.map +1 -1
- package/dist/components/ui/index.d.ts +1 -0
- package/dist/components/ui/index.d.ts.map +1 -1
- package/dist/components/ui/index.js +3 -1
- package/dist/components/ui/ticket-info-section.d.ts +2 -0
- package/dist/components/ui/ticket-info-section.d.ts.map +1 -1
- package/dist/index.cjs +4 -2
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +3 -1
- package/package.json +1 -1
- package/src/components/features/board/.ticket-card.md +1 -1
- package/src/components/features/board/.types.md +3 -2
- package/src/components/features/board/ticket-card.tsx +15 -10
- package/src/components/features/board/types.ts +2 -0
- package/src/components/ui/.assignee-dropdown.md +3 -2
- package/src/components/ui/.deleted-user-avatar.md +20 -0
- package/src/components/ui/.ticket-info-section.md +3 -2
- package/src/components/ui/assignee-dropdown.tsx +46 -24
- package/src/components/ui/deleted-user-avatar.tsx +52 -0
- package/src/components/ui/index.ts +1 -0
- package/src/components/ui/ticket-info-section.tsx +2 -0
- package/dist/chunk-GOFTC2HV.cjs.map +0 -1
- package/dist/chunk-V5WLIFKN.js.map +0 -1
- /package/dist/{chunk-XG7FLAKQ.js.map → chunk-2M2XTLLU.js.map} +0 -0
- /package/dist/{chunk-FI35LJ3L.js.map → chunk-3PAWTYGX.js.map} +0 -0
- /package/dist/{chunk-JOFGJYIT.js.map → chunk-C7EEPMMS.js.map} +0 -0
- /package/dist/{chunk-IK2WRYVA.js.map → chunk-CPR3LS3G.js.map} +0 -0
- /package/dist/{chunk-VZX3SSFL.js.map → chunk-F5JG5KXZ.js.map} +0 -0
- /package/dist/{chunk-OT4RV6WY.js.map → chunk-GIYB77AH.js.map} +0 -0
- /package/dist/{chunk-HGZPH7S5.js.map → chunk-HQTKEWJQ.js.map} +0 -0
- /package/dist/{chunk-6LMTBNLN.js.map → chunk-J2IHMVWH.js.map} +0 -0
- /package/dist/{chunk-JO3NPEK6.js.map → chunk-L6BZVJMU.js.map} +0 -0
- /package/dist/{chunk-ZIQMVAGA.js.map → chunk-LWNPUXEW.js.map} +0 -0
- /package/dist/{chunk-IHNUMRMU.js.map → chunk-PDFXMFQM.js.map} +0 -0
- /package/dist/{chunk-JKAX5K7C.js.map → chunk-XMUEU55V.js.map} +0 -0
- /package/dist/{chunk-4NFDSMB5.js.map → chunk-XOVSXNLV.js.map} +0 -0
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
<!-- source-hash: 2f3d376de06fcf7bbf7f975bb94674e9 -->
|
|
2
|
+
Red round user-x placeholder rendered instead of an avatar for deleted user accounts (statuses `DELETED` / `SELF_DELETED`).
|
|
3
|
+
|
|
4
|
+
## Key Components
|
|
5
|
+
|
|
6
|
+
### `DeletedUserAvatar`
|
|
7
|
+
|
|
8
|
+
**Props (`DeletedUserAvatarProps`):**
|
|
9
|
+
|
|
10
|
+
| Prop | Type | Description |
|
|
11
|
+
|---|---|---|
|
|
12
|
+
| `size` | `'sm' \| 'md' \| 'lg'` | Mirrors `SquareAvatar` size buckets (32 / 40 / 48px). Default `'md'`. |
|
|
13
|
+
| `className` | `string` | Extra classes (e.g. `h-6 w-6` for the dropdown-option size). |
|
|
14
|
+
| `accessibleLabel` | `string` | Accessible name; pass the user identity when known (e.g. "Deleted user: Jane Doe"). Defaults to "Deleted user". |
|
|
15
|
+
|
|
16
|
+
## Notes
|
|
17
|
+
|
|
18
|
+
- A dedicated component — not a `SquareAvatar` prop — because `SquareAvatar`'s only fallback is text initials, and initials for a deleted account is exactly what the design replaces.
|
|
19
|
+
- Styling: `bg-ods-error/20` circle + `text-ods-error` `UserXmarkIcon`.
|
|
20
|
+
- Consumed by `AssigneeDropdown` and the board `TicketCardBody` via the `deleted` flag on their assignee shapes; app repos also use it directly for their own user cells.
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
<!-- source-hash:
|
|
1
|
+
<!-- source-hash: 64199a542faa0b43a2d1edd2ca00d745 -->
|
|
2
2
|
A collapsible ticket information panel that displays key ticket metadata (organization, assignee, device, status) in a compact header row, with an expandable section revealing description, attachments, tags, and notes.
|
|
3
3
|
|
|
4
4
|
## Key Components
|
|
@@ -48,4 +48,5 @@ import { TicketInfoSection } from "./ticket-info-section"
|
|
|
48
48
|
|
|
49
49
|
## Source
|
|
50
50
|
|
|
51
|
-
[`ticket-info-section.tsx`](https://github.com/flamingo-stack/openframe-oss-lib/blob/main/ticket-info-section.tsx)
|
|
51
|
+
[`ticket-info-section.tsx`](https://github.com/flamingo-stack/openframe-oss-lib/blob/main/ticket-info-section.tsx)
|
|
52
|
+
- `assigned.currentAssignee.deleted` — forwarded to `AssigneeDropdown`: deleted accounts render the red user-x placeholder + red name.
|
|
@@ -4,6 +4,7 @@ import * as React from 'react'
|
|
|
4
4
|
import { PenEditIcon, UserIcon, UserPlusIcon } from '../icons-v2-generated'
|
|
5
5
|
import { cn } from '../../utils/cn'
|
|
6
6
|
import { Autocomplete, type AutocompleteOption } from './autocomplete'
|
|
7
|
+
import { DeletedUserAvatar } from './deleted-user-avatar'
|
|
7
8
|
import { SearchableSelect, type SearchableSelectOption } from './searchable-select'
|
|
8
9
|
import { SquareAvatar } from './square-avatar'
|
|
9
10
|
|
|
@@ -18,6 +19,8 @@ export interface AssigneeDropdownProps {
|
|
|
18
19
|
id: string
|
|
19
20
|
name: string
|
|
20
21
|
avatarSrc?: string
|
|
22
|
+
/** Deleted account (DELETED / SELF_DELETED) — renders the red user-x placeholder + red name. */
|
|
23
|
+
deleted?: boolean
|
|
21
24
|
}
|
|
22
25
|
options: TicketAssigneeOption[]
|
|
23
26
|
isLoading?: boolean
|
|
@@ -79,13 +82,17 @@ function CompactAssigneeDropdown({
|
|
|
79
82
|
className,
|
|
80
83
|
)}
|
|
81
84
|
>
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
85
|
+
{currentAssignee.deleted ? (
|
|
86
|
+
<DeletedUserAvatar size="sm" accessibleLabel={`Deleted user: ${currentAssignee.name || currentAssignee.id}`} />
|
|
87
|
+
) : (
|
|
88
|
+
<SquareAvatar
|
|
89
|
+
src={currentAssignee.avatarSrc}
|
|
90
|
+
alt={currentAssignee.name}
|
|
91
|
+
fallback={currentAssignee.name || 'User'}
|
|
92
|
+
size="sm"
|
|
93
|
+
variant="round"
|
|
94
|
+
/>
|
|
95
|
+
)}
|
|
89
96
|
</button>
|
|
90
97
|
) : (
|
|
91
98
|
<button
|
|
@@ -159,14 +166,22 @@ function DefaultAssigneeDropdown({
|
|
|
159
166
|
showChevron={false}
|
|
160
167
|
startAdornment={
|
|
161
168
|
hasAssignee ? (
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
169
|
+
currentAssignee!.deleted ? (
|
|
170
|
+
<DeletedUserAvatar
|
|
171
|
+
size="sm"
|
|
172
|
+
className="h-6 w-6"
|
|
173
|
+
accessibleLabel={`Deleted user: ${currentAssignee!.name || currentAssignee!.id}`}
|
|
174
|
+
/>
|
|
175
|
+
) : (
|
|
176
|
+
<SquareAvatar
|
|
177
|
+
src={currentAssignee!.avatarSrc}
|
|
178
|
+
alt={currentAssignee!.name}
|
|
179
|
+
fallback={currentAssignee!.name || 'User'}
|
|
180
|
+
size="sm"
|
|
181
|
+
variant="round"
|
|
182
|
+
className="h-6 w-6"
|
|
183
|
+
/>
|
|
184
|
+
)
|
|
170
185
|
) : (
|
|
171
186
|
<UserIcon className="size-5 text-ods-text-secondary" />
|
|
172
187
|
)
|
|
@@ -181,14 +196,18 @@ function DefaultAssigneeDropdown({
|
|
|
181
196
|
if (hasAssignee) {
|
|
182
197
|
return (
|
|
183
198
|
<div className={cn('flex items-center gap-[var(--spacing-system-xs)] min-w-0', className)}>
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
199
|
+
{currentAssignee!.deleted ? (
|
|
200
|
+
<DeletedUserAvatar size="md" accessibleLabel={`Deleted user: ${currentAssignee!.name || currentAssignee!.id}`} />
|
|
201
|
+
) : (
|
|
202
|
+
<SquareAvatar
|
|
203
|
+
src={currentAssignee!.avatarSrc}
|
|
204
|
+
alt={currentAssignee!.name}
|
|
205
|
+
fallback={currentAssignee!.name || 'User'}
|
|
206
|
+
size="md"
|
|
207
|
+
variant="round"
|
|
208
|
+
className="shrink-0"
|
|
209
|
+
/>
|
|
210
|
+
)}
|
|
192
211
|
<div className="flex-1 min-w-0 overflow-hidden">
|
|
193
212
|
<div className="flex flex-col justify-center">
|
|
194
213
|
<div className="flex items-center gap-[var(--spacing-system-xxs)] w-full min-w-0">
|
|
@@ -198,7 +217,10 @@ function DefaultAssigneeDropdown({
|
|
|
198
217
|
className="flex items-center gap-[var(--spacing-system-xxs)] cursor-pointer group text-left"
|
|
199
218
|
>
|
|
200
219
|
<PenEditIcon className="size-4 shrink-0 text-ods-text-secondary group-hover:text-ods-accent transition-colors" />
|
|
201
|
-
<span
|
|
220
|
+
<span
|
|
221
|
+
className={cn('text-h4 truncate', currentAssignee!.deleted ? 'text-ods-error' : 'text-ods-text-primary')}
|
|
222
|
+
title={currentAssignee!.name}
|
|
223
|
+
>{currentAssignee!.name}</span>
|
|
202
224
|
</button>
|
|
203
225
|
</div>
|
|
204
226
|
<span className="text-h6 text-ods-text-secondary truncate">Assigned</span>
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
'use client'
|
|
2
|
+
|
|
3
|
+
import * as React from 'react'
|
|
4
|
+
import { UserXmarkIcon } from '../icons-v2-generated'
|
|
5
|
+
import { cn } from '../../utils/cn'
|
|
6
|
+
|
|
7
|
+
/** Mirrors SquareAvatar's size buckets (sm 32 / md 40 / lg 48). */
|
|
8
|
+
const SIZE_CLASSES = {
|
|
9
|
+
sm: 'h-8 w-8',
|
|
10
|
+
md: 'h-10 w-10',
|
|
11
|
+
lg: 'h-12 w-12',
|
|
12
|
+
} as const
|
|
13
|
+
|
|
14
|
+
const ICON_CLASSES = {
|
|
15
|
+
sm: 'w-4 h-4',
|
|
16
|
+
md: 'w-5 h-5',
|
|
17
|
+
lg: 'w-6 h-6',
|
|
18
|
+
} as const
|
|
19
|
+
|
|
20
|
+
export interface DeletedUserAvatarProps {
|
|
21
|
+
size?: keyof typeof SIZE_CLASSES
|
|
22
|
+
className?: string
|
|
23
|
+
/**
|
|
24
|
+
* Accessible name for the placeholder. Pass the user's identity when known
|
|
25
|
+
* (e.g. "Deleted user: Jane Doe") so assistive technology doesn't lose who
|
|
26
|
+
* the row refers to. Falls back to the generic "Deleted user".
|
|
27
|
+
*/
|
|
28
|
+
accessibleLabel?: string
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
/**
|
|
32
|
+
* Red round user-x placeholder shown instead of the avatar for deleted users
|
|
33
|
+
* (accounts with status DELETED / SELF_DELETED). A dedicated component — not a
|
|
34
|
+
* `SquareAvatar` prop — because `SquareAvatar`'s only fallback is text
|
|
35
|
+
* initials, and initials for a deleted account is exactly what the design
|
|
36
|
+
* replaces.
|
|
37
|
+
*/
|
|
38
|
+
export function DeletedUserAvatar({ size = 'md', className, accessibleLabel }: DeletedUserAvatarProps) {
|
|
39
|
+
return (
|
|
40
|
+
<span
|
|
41
|
+
role="img"
|
|
42
|
+
aria-label={accessibleLabel || 'Deleted user'}
|
|
43
|
+
className={cn(
|
|
44
|
+
'flex items-center justify-center rounded-full bg-ods-error/20 shrink-0',
|
|
45
|
+
SIZE_CLASSES[size],
|
|
46
|
+
className,
|
|
47
|
+
)}
|
|
48
|
+
>
|
|
49
|
+
<UserXmarkIcon className={cn('text-ods-error', ICON_CLASSES[size])} />
|
|
50
|
+
</span>
|
|
51
|
+
)
|
|
52
|
+
}
|
|
@@ -103,6 +103,7 @@ export * from './page-actions'
|
|
|
103
103
|
export * from './service-card'
|
|
104
104
|
export * from './slider'
|
|
105
105
|
export * from './avatar-stack'
|
|
106
|
+
export * from './deleted-user-avatar'
|
|
106
107
|
export * from './square-avatar'
|
|
107
108
|
export * from './tab-selector'
|
|
108
109
|
export * from './tag'
|
|
@@ -57,6 +57,8 @@ export interface TicketInfoSectionProps {
|
|
|
57
57
|
id: string
|
|
58
58
|
name: string
|
|
59
59
|
avatarSrc?: string
|
|
60
|
+
/** Deleted account (DELETED / SELF_DELETED) — renders the red user-x placeholder + red name. */
|
|
61
|
+
deleted?: boolean
|
|
60
62
|
}
|
|
61
63
|
options: TicketAssigneeOption[]
|
|
62
64
|
isLoading?: boolean
|