@flamingo-stack/openframe-frontend-core 0.0.313 → 0.0.314-snapshot.20260624043952
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-SQQXCVZZ.cjs → chunk-2JPSWDSM.cjs} +77 -58
- package/dist/chunk-2JPSWDSM.cjs.map +1 -0
- package/dist/{chunk-SPFGSUNE.js → chunk-2MLMZAK4.js} +3 -3
- package/dist/{chunk-6FZD5KFP.js → chunk-47JZOP7Y.js} +3 -3
- package/dist/{chunk-OZYAAJHM.js → chunk-4D37W55K.js} +5 -5
- package/dist/{chunk-G56GYN7Z.cjs → chunk-5ATH263N.cjs} +4 -1
- package/dist/chunk-5ATH263N.cjs.map +1 -0
- package/dist/{chunk-YI2ACYRX.js → chunk-6W54MBU2.js} +2 -2
- package/dist/{chunk-66JU4VP2.js → chunk-7U4YFQX2.js} +27 -8
- package/dist/{chunk-66JU4VP2.js.map → chunk-7U4YFQX2.js.map} +1 -1
- package/dist/{chunk-DDLJTRF4.cjs → chunk-A2H6TFS4.cjs} +29 -29
- package/dist/{chunk-DDLJTRF4.cjs.map → chunk-A2H6TFS4.cjs.map} +1 -1
- package/dist/{chunk-YSMKPNYZ.cjs → chunk-BSAFGQVW.cjs} +7 -7
- package/dist/{chunk-YSMKPNYZ.cjs.map → chunk-BSAFGQVW.cjs.map} +1 -1
- package/dist/{chunk-JQ2EYXWR.js → chunk-E4CQ4RUG.js} +4 -1
- package/dist/chunk-E4CQ4RUG.js.map +1 -0
- package/dist/{chunk-DE2BQKQV.cjs → chunk-HATCNFQL.cjs} +12 -12
- package/dist/{chunk-DE2BQKQV.cjs.map → chunk-HATCNFQL.cjs.map} +1 -1
- package/dist/{chunk-FXTT7K3A.js → chunk-MOOV4ORG.js} +3 -3
- package/dist/{chunk-REHUG3RH.cjs → chunk-OSEKWT6X.cjs} +19 -19
- package/dist/{chunk-REHUG3RH.cjs.map → chunk-OSEKWT6X.cjs.map} +1 -1
- package/dist/{chunk-XHGE5XBH.cjs → chunk-QW6OL4NY.cjs} +5 -5
- package/dist/{chunk-XHGE5XBH.cjs.map → chunk-QW6OL4NY.cjs.map} +1 -1
- package/dist/{chunk-E6BHNYTA.js → chunk-TK6OABYF.js} +4 -4
- package/dist/{chunk-BFNTSETG.cjs → chunk-TQ7CMFSY.cjs} +14 -14
- package/dist/{chunk-BFNTSETG.cjs.map → chunk-TQ7CMFSY.cjs.map} +1 -1
- package/dist/{chunk-JQLC2FVM.js → chunk-TRSDXD23.js} +2 -2
- package/dist/{chunk-GHK2FCIM.cjs → chunk-TVNILN2F.cjs} +40 -40
- package/dist/{chunk-GHK2FCIM.cjs.map → chunk-TVNILN2F.cjs.map} +1 -1
- package/dist/{chunk-BVDHLEP2.js → chunk-VFIWQGJZ.js} +2 -2
- package/dist/{chunk-RM3M3SZ6.js → chunk-VY5YF4B7.js} +2 -2
- package/dist/{chunk-BFSKFC6S.cjs → chunk-WFHNXCI3.cjs} +38 -38
- package/dist/{chunk-BFSKFC6S.cjs.map → chunk-WFHNXCI3.cjs.map} +1 -1
- package/dist/{chunk-2ZHDP22R.cjs → chunk-ZPK5HW7B.cjs} +3 -3
- package/dist/{chunk-2ZHDP22R.cjs.map → chunk-ZPK5HW7B.cjs.map} +1 -1
- package/dist/components/case-studies/index.cjs +9 -9
- package/dist/components/case-studies/index.js +3 -3
- package/dist/components/chat/index.cjs +3 -3
- package/dist/components/chat/index.js +2 -2
- package/dist/components/contact/index.cjs +4 -4
- package/dist/components/contact/index.js +3 -3
- package/dist/components/docs/index.cjs +6 -6
- package/dist/components/docs/index.js +5 -5
- package/dist/components/embeds/index.cjs +4 -4
- package/dist/components/embeds/index.js +3 -3
- package/dist/components/faq/index.cjs +5 -5
- package/dist/components/faq/index.js +4 -4
- package/dist/components/features/index.cjs +3 -3
- package/dist/components/features/index.js +2 -2
- package/dist/components/features/push-button-selector.d.ts +1 -0
- package/dist/components/features/push-button-selector.d.ts.map +1 -1
- package/dist/components/index.cjs +190 -188
- package/dist/components/index.cjs.map +1 -1
- package/dist/components/index.js +12 -10
- package/dist/components/index.js.map +1 -1
- package/dist/components/layout/page-layout.d.ts +1 -1
- package/dist/components/layout/page-layout.d.ts.map +1 -1
- package/dist/components/layout/title-block.d.ts +10 -0
- package/dist/components/layout/title-block.d.ts.map +1 -1
- package/dist/components/navigation/index.cjs +3 -3
- package/dist/components/navigation/index.js +2 -2
- package/dist/components/onboarding-guides/index.cjs +29 -29
- package/dist/components/onboarding-guides/index.js +5 -5
- package/dist/components/related-content/index.cjs +5 -5
- package/dist/components/related-content/index.js +4 -4
- package/dist/components/tickets/help-center-list.d.ts +5 -1
- package/dist/components/tickets/help-center-list.d.ts.map +1 -1
- package/dist/components/tickets/index.cjs +84 -73
- package/dist/components/tickets/index.cjs.map +1 -1
- package/dist/components/tickets/index.js +21 -10
- package/dist/components/tickets/index.js.map +1 -1
- package/dist/components/tool-icon.d.ts.map +1 -1
- package/dist/components/ui/index.cjs +5 -3
- package/dist/components/ui/index.cjs.map +1 -1
- package/dist/components/ui/index.js +4 -2
- package/dist/hooks/index.cjs +2 -2
- package/dist/hooks/index.js +1 -1
- package/dist/index.cjs +5 -3
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +4 -2
- package/dist/types/index.cjs +2 -0
- package/dist/types/index.cjs.map +1 -1
- package/dist/types/index.js +2 -0
- package/dist/types/index.js.map +1 -1
- package/dist/types/tool.types.d.ts +1 -0
- package/dist/types/tool.types.d.ts.map +1 -1
- package/dist/utils/index.cjs +11 -0
- package/dist/utils/index.cjs.map +1 -1
- package/dist/utils/index.js +11 -0
- package/dist/utils/index.js.map +1 -1
- package/dist/utils/tool-utils.d.ts.map +1 -1
- package/package.json +1 -1
- package/src/components/features/push-button-selector.tsx +21 -3
- package/src/components/layout/page-layout.tsx +1 -1
- package/src/components/layout/title-block.tsx +12 -1
- package/src/components/tickets/help-center-list.tsx +16 -4
- package/src/components/tool-icon.tsx +1 -0
- package/src/types/tool.types.ts +2 -0
- package/src/utils/tool-utils.ts +11 -0
- package/dist/chunk-G56GYN7Z.cjs.map +0 -1
- package/dist/chunk-JQ2EYXWR.js.map +0 -1
- package/dist/chunk-SQQXCVZZ.cjs.map +0 -1
- /package/dist/{chunk-SPFGSUNE.js.map → chunk-2MLMZAK4.js.map} +0 -0
- /package/dist/{chunk-6FZD5KFP.js.map → chunk-47JZOP7Y.js.map} +0 -0
- /package/dist/{chunk-OZYAAJHM.js.map → chunk-4D37W55K.js.map} +0 -0
- /package/dist/{chunk-YI2ACYRX.js.map → chunk-6W54MBU2.js.map} +0 -0
- /package/dist/{chunk-FXTT7K3A.js.map → chunk-MOOV4ORG.js.map} +0 -0
- /package/dist/{chunk-E6BHNYTA.js.map → chunk-TK6OABYF.js.map} +0 -0
- /package/dist/{chunk-JQLC2FVM.js.map → chunk-TRSDXD23.js.map} +0 -0
- /package/dist/{chunk-BVDHLEP2.js.map → chunk-VFIWQGJZ.js.map} +0 -0
- /package/dist/{chunk-RM3M3SZ6.js.map → chunk-VY5YF4B7.js.map} +0 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tool-utils.d.ts","sourceRoot":"","sources":["../../src/utils/tool-utils.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,QAAQ,EAAc,MAAM,qBAAqB,CAAA;
|
|
1
|
+
{"version":3,"file":"tool-utils.d.ts","sourceRoot":"","sources":["../../src/utils/tool-utils.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,QAAQ,EAAc,MAAM,qBAAqB,CAAA;AAsF1D;;;;;;;;;;;GAWG;AACH,wBAAgB,iBAAiB,CAAC,KAAK,CAAC,EAAE,MAAM,GAAG,QAAQ,GAAG,SAAS,CAgBtE;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,6BAA6B,CAAC,KAAK,CAAC,EAAE,MAAM,GAAG,QAAQ,CAEtE;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,WAAW,CAAC,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,CASlD;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,eAAe,CAAC,KAAK,CAAC,EAAE,MAAM,GAAG,OAAO,CAEvD;AAED;;;;;;GAMG;AACH,wBAAgB,kBAAkB,CAAC,QAAQ,EAAE,QAAQ,GAAG,MAAM,EAAE,CAI/D;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,QAAQ,EAAE,QAAQ,GAAG,MAAM,CAEvD"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
|
|
3
3
|
import { Button, Badge } from "../ui";
|
|
4
|
+
import { Tooltip, TooltipContent, TooltipProvider, TooltipTrigger } from "../ui/tooltip";
|
|
4
5
|
import { Check } from 'lucide-react';
|
|
5
6
|
import React from 'react';
|
|
6
7
|
|
|
@@ -15,6 +16,7 @@ export interface SelectableOption {
|
|
|
15
16
|
icon?: React.ReactNode;
|
|
16
17
|
color?: string;
|
|
17
18
|
disabled?: boolean; // If true, option is shown grayed out and not selectable
|
|
19
|
+
disabledReason?: string; // Tooltip shown on hover when disabled — explains WHY it's unavailable
|
|
18
20
|
section?: string; // Optional section ID to group options
|
|
19
21
|
}
|
|
20
22
|
|
|
@@ -151,19 +153,21 @@ export function PushButtonSelector({
|
|
|
151
153
|
const renderOption = (option: SelectableOption) => {
|
|
152
154
|
const isSelected = validSelectedIds.includes(option.id);
|
|
153
155
|
|
|
154
|
-
|
|
156
|
+
const optionEl = (
|
|
155
157
|
<div
|
|
156
158
|
key={option.id}
|
|
157
159
|
className={`
|
|
158
160
|
p-4 rounded-lg border transition-all duration-200 group
|
|
159
161
|
${option.disabled
|
|
160
|
-
? 'cursor-not-allowed opacity-40 bg-ods-card border-ods-border
|
|
162
|
+
? `${isSelected ? 'cursor-pointer' : 'cursor-not-allowed'} opacity-40 bg-ods-card border-ods-border`
|
|
161
163
|
: isSelected
|
|
162
164
|
? 'cursor-pointer bg-ods-bg-secondary border-ods-accent shadow-sm'
|
|
163
165
|
: 'cursor-pointer bg-ods-bg-primary border-ods-border hover:border-ods-border-hover hover:bg-ods-bg-hover'
|
|
164
166
|
}
|
|
165
167
|
`}
|
|
166
|
-
|
|
168
|
+
// Disabled options can't be newly SELECTED, but an already-selected one
|
|
169
|
+
// (e.g. it later became unavailable) must still be removable.
|
|
170
|
+
onClick={() => (!option.disabled || isSelected) && toggleSelection(option.id)}
|
|
167
171
|
>
|
|
168
172
|
<div className="flex items-center justify-between gap-4">
|
|
169
173
|
<div className="flex items-center gap-3 flex-1 min-w-0">
|
|
@@ -199,6 +203,18 @@ export function PushButtonSelector({
|
|
|
199
203
|
</div>
|
|
200
204
|
</div>
|
|
201
205
|
);
|
|
206
|
+
|
|
207
|
+
// Disabled options explain WHY on hover via the unified Tooltip.
|
|
208
|
+
if (option.disabled && option.disabledReason) {
|
|
209
|
+
return (
|
|
210
|
+
<Tooltip key={option.id}>
|
|
211
|
+
<TooltipTrigger asChild>{optionEl}</TooltipTrigger>
|
|
212
|
+
<TooltipContent className="max-w-xs">{option.disabledReason}</TooltipContent>
|
|
213
|
+
</Tooltip>
|
|
214
|
+
);
|
|
215
|
+
}
|
|
216
|
+
|
|
217
|
+
return optionEl;
|
|
202
218
|
};
|
|
203
219
|
|
|
204
220
|
// Group options by section if sections are provided
|
|
@@ -271,6 +287,7 @@ export function PushButtonSelector({
|
|
|
271
287
|
};
|
|
272
288
|
|
|
273
289
|
return (
|
|
290
|
+
<TooltipProvider delayDuration={150}>
|
|
274
291
|
<div className={`space-y-4 ${className}`}>
|
|
275
292
|
{title && (
|
|
276
293
|
<h3 className="text-h5 text-ods-text-primary">
|
|
@@ -319,5 +336,6 @@ export function PushButtonSelector({
|
|
|
319
336
|
</div>
|
|
320
337
|
)}
|
|
321
338
|
</div>
|
|
339
|
+
</TooltipProvider>
|
|
322
340
|
);
|
|
323
341
|
}
|
|
@@ -99,6 +99,6 @@ export function PageLayout({
|
|
|
99
99
|
}
|
|
100
100
|
|
|
101
101
|
export type { PageActionButton } from '../ui/page-actions'
|
|
102
|
-
export { TitleBlock } from './title-block'
|
|
102
|
+
export { TitleBlock, TITLE_BLOCK_MIN_HEIGHT } from './title-block'
|
|
103
103
|
export type { TitleBlockProps } from './title-block'
|
|
104
104
|
export default PageLayout
|
|
@@ -31,6 +31,17 @@ import { EntityImage } from '../ui/entity-image'
|
|
|
31
31
|
import { PageActions, type PageActionButton } from '../ui/page-actions'
|
|
32
32
|
import { BackButton } from './back-button'
|
|
33
33
|
|
|
34
|
+
/**
|
|
35
|
+
* Minimum height of the title block's content column, matched to the action
|
|
36
|
+
* button height: the icon button on mobile (`h-11` → 44px) and the default
|
|
37
|
+
* button on desktop (`md:h-12` → 48px). Applied to the inner title column (which
|
|
38
|
+
* has no padding) rather than the root — the root's `pt`/`mb` are box-sizing
|
|
39
|
+
* border-box and would otherwise absorb the floor. Keeps the header a consistent
|
|
40
|
+
* height across pages whether or not they render action buttons, so the content
|
|
41
|
+
* below starts at the same baseline. Exported so other page chrome can reuse it.
|
|
42
|
+
*/
|
|
43
|
+
export const TITLE_BLOCK_MIN_HEIGHT = 'min-h-11 md:min-h-12'
|
|
44
|
+
|
|
34
45
|
export interface TitleBlockProps {
|
|
35
46
|
title?: string
|
|
36
47
|
subtitle?: string
|
|
@@ -83,7 +94,7 @@ export function TitleBlock({
|
|
|
83
94
|
className,
|
|
84
95
|
)}
|
|
85
96
|
>
|
|
86
|
-
<div className=
|
|
97
|
+
<div className={cn('flex flex-col justify-center gap-[var(--spacing-system-xs)] flex-1 min-w-0', TITLE_BLOCK_MIN_HEIGHT)}>
|
|
87
98
|
{backButton && (
|
|
88
99
|
<BackButton
|
|
89
100
|
onClick={backButton.onClick}
|
|
@@ -55,9 +55,13 @@ export interface HelpCenterListProps {
|
|
|
55
55
|
* to hide). Omit ⇒ `DevSectionPage`'s default (`Back to home` → `/`), which
|
|
56
56
|
* embedders whose home isn't `/` MUST override. */
|
|
57
57
|
backButton?: { label?: string; href?: string } | false
|
|
58
|
+
/** Override the hero title (forwarded to `DevSectionPage.title`). Defaults to
|
|
59
|
+
* the `tickets` section copy ("Help Center"). Set this to brand the surface
|
|
60
|
+
* for an embed that wants its own label (e.g. "Support Tickets"). */
|
|
61
|
+
title?: string
|
|
58
62
|
}
|
|
59
63
|
|
|
60
|
-
export function HelpCenterList({ toast = defaultToast, backButton }: HelpCenterListProps = {}) {
|
|
64
|
+
export function HelpCenterList({ toast = defaultToast, backButton, title }: HelpCenterListProps = {}) {
|
|
61
65
|
const identity = useChatIdentity()
|
|
62
66
|
const searchParams = useSearchParams()
|
|
63
67
|
const router = useRouter()
|
|
@@ -85,14 +89,19 @@ export function HelpCenterList({ toast = defaultToast, backButton }: HelpCenterL
|
|
|
85
89
|
// mounts in the `preControls` slot.
|
|
86
90
|
if (identity.isLoading) {
|
|
87
91
|
return (
|
|
88
|
-
<DevSectionPage
|
|
92
|
+
<DevSectionPage
|
|
93
|
+
sectionKey="tickets"
|
|
94
|
+
backButton={backButton}
|
|
95
|
+
title={title}
|
|
96
|
+
preControls={<HelpCenterCreateFormSkeleton />}
|
|
97
|
+
>
|
|
89
98
|
<DevCardRowSkeletonList />
|
|
90
99
|
</DevSectionPage>
|
|
91
100
|
)
|
|
92
101
|
}
|
|
93
102
|
if (identity.authTier === 'anon' || !identity.user?.email) {
|
|
94
103
|
return (
|
|
95
|
-
<DevSectionPage sectionKey="tickets" backButton={backButton}>
|
|
104
|
+
<DevSectionPage sectionKey="tickets" backButton={backButton} title={title}>
|
|
96
105
|
<EmptyState
|
|
97
106
|
type="generic"
|
|
98
107
|
title="Sign in to manage tickets"
|
|
@@ -128,6 +137,7 @@ export function HelpCenterList({ toast = defaultToast, backButton }: HelpCenterL
|
|
|
128
137
|
sessionName={sessionName}
|
|
129
138
|
sessionEmail={sessionEmail}
|
|
130
139
|
backButton={backButton}
|
|
140
|
+
title={title}
|
|
131
141
|
/>
|
|
132
142
|
)
|
|
133
143
|
}
|
|
@@ -145,6 +155,7 @@ interface AuthedProps {
|
|
|
145
155
|
sessionName: string
|
|
146
156
|
sessionEmail: string
|
|
147
157
|
backButton?: { label?: string; href?: string } | false
|
|
158
|
+
title?: string
|
|
148
159
|
}
|
|
149
160
|
|
|
150
161
|
function HelpCenterListAuthed({
|
|
@@ -159,6 +170,7 @@ function HelpCenterListAuthed({
|
|
|
159
170
|
sessionName,
|
|
160
171
|
sessionEmail,
|
|
161
172
|
backButton,
|
|
173
|
+
title,
|
|
162
174
|
}: AuthedProps) {
|
|
163
175
|
const queryClient = useQueryClient()
|
|
164
176
|
const [optimisticTickets, setOptimisticTickets] = useState<OptimisticTicket[]>([])
|
|
@@ -386,7 +398,7 @@ function HelpCenterListAuthed({
|
|
|
386
398
|
)
|
|
387
399
|
|
|
388
400
|
return (
|
|
389
|
-
<DevSectionPage sectionKey="tickets" backButton={backButton} preControls={form}>
|
|
401
|
+
<DevSectionPage sectionKey="tickets" backButton={backButton} title={title} preControls={form}>
|
|
390
402
|
{body}
|
|
391
403
|
</DevSectionPage>
|
|
392
404
|
)
|
|
@@ -25,6 +25,7 @@ const toolIconMap: Record<ToolType, (size: number, className?: string) => React.
|
|
|
25
25
|
[ToolTypeValues.OPENFRAME]: renderOpenFrameLogo,
|
|
26
26
|
[ToolTypeValues.OPENFRAME_CHAT]: renderOpenFrameLogo,
|
|
27
27
|
[ToolTypeValues.OPENFRAME_CLIENT]: renderOpenFrameLogo,
|
|
28
|
+
[ToolTypeValues.OPENFRAME_RMM]: renderOpenFrameLogo,
|
|
28
29
|
[ToolTypeValues.AUTHENTIK]: (size, className) => <AuthentikLogoGreyIcon size={size} className={className} />,
|
|
29
30
|
[ToolTypeValues.OSQUERY]: (size, className) => <OsqueryLogoGreyIcon size={size} className={className} />,
|
|
30
31
|
[ToolTypeValues.SYSTEM]: () => null,
|
package/src/types/tool.types.ts
CHANGED
|
@@ -13,6 +13,7 @@ export const ToolTypeValues = {
|
|
|
13
13
|
OPENFRAME: 'OPENFRAME',
|
|
14
14
|
OPENFRAME_CHAT: 'OPENFRAME_CHAT',
|
|
15
15
|
OPENFRAME_CLIENT: 'OPENFRAME_CLIENT',
|
|
16
|
+
OPENFRAME_RMM: 'OPENFRAME_RMM',
|
|
16
17
|
OSQUERY: 'OSQUERY',
|
|
17
18
|
SYSTEM: 'SYSTEM'
|
|
18
19
|
} as const
|
|
@@ -30,6 +31,7 @@ export const toolLabels: Record<ToolType, string> = {
|
|
|
30
31
|
OPENFRAME: 'OpenFrame',
|
|
31
32
|
OPENFRAME_CHAT: 'OpenFrame Chat',
|
|
32
33
|
OPENFRAME_CLIENT: 'OpenFrame Client',
|
|
34
|
+
OPENFRAME_RMM: 'OpenFrame RMM',
|
|
33
35
|
OSQUERY: 'Osquery',
|
|
34
36
|
SYSTEM: 'System'
|
|
35
37
|
}
|
package/src/utils/tool-utils.ts
CHANGED
|
@@ -73,6 +73,17 @@ const toolAliasMap: Record<string, ToolType> = {
|
|
|
73
73
|
'openframe-client': 'OPENFRAME_CLIENT',
|
|
74
74
|
'openframeclient': 'OPENFRAME_CLIENT',
|
|
75
75
|
|
|
76
|
+
// OpenFrame RMM
|
|
77
|
+
'RMM': 'OPENFRAME_RMM',
|
|
78
|
+
'rmm': 'OPENFRAME_RMM',
|
|
79
|
+
'OPENFRAME_RMM': 'OPENFRAME_RMM',
|
|
80
|
+
'OPENFRAME-RMM': 'OPENFRAME_RMM',
|
|
81
|
+
'OPENFRAMERMM': 'OPENFRAME_RMM',
|
|
82
|
+
'openframe_rmm': 'OPENFRAME_RMM',
|
|
83
|
+
'openframe-rmm': 'OPENFRAME_RMM',
|
|
84
|
+
'openframermm': 'OPENFRAME_RMM',
|
|
85
|
+
'openframe-rmm-agent': 'OPENFRAME_RMM',
|
|
86
|
+
|
|
76
87
|
// OSQUERY
|
|
77
88
|
'OSQUERY': 'OSQUERY',
|
|
78
89
|
|