@flamingo-stack/openframe-frontend-core 0.0.538 → 0.0.539-snapshot.20260814140351
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-C6NKOHFW.js → chunk-2BKR65LQ.js} +2 -2
- package/dist/{chunk-PFGRHRBO.cjs → chunk-4PZEGH6E.cjs} +5 -5
- package/dist/{chunk-PFGRHRBO.cjs.map → chunk-4PZEGH6E.cjs.map} +1 -1
- package/dist/{chunk-F4QOOHZL.cjs → chunk-4RXV54PY.cjs} +11 -11
- package/dist/{chunk-F4QOOHZL.cjs.map → chunk-4RXV54PY.cjs.map} +1 -1
- package/dist/{chunk-ZBRKTF6S.js → chunk-5W4R3BUR.js} +2 -2
- package/dist/{chunk-LJW7B6GY.cjs → chunk-5ZRO72K4.cjs} +9 -9
- package/dist/{chunk-LJW7B6GY.cjs.map → chunk-5ZRO72K4.cjs.map} +1 -1
- package/dist/{chunk-YO5BWF4L.cjs → chunk-6PBD57IZ.cjs} +14 -14
- package/dist/{chunk-YO5BWF4L.cjs.map → chunk-6PBD57IZ.cjs.map} +1 -1
- package/dist/{chunk-56QT3JBZ.js → chunk-6WUUZ43M.js} +2 -2
- package/dist/{chunk-QQ3HUSDJ.cjs → chunk-75W6ETMW.cjs} +408 -404
- package/dist/chunk-75W6ETMW.cjs.map +1 -0
- package/dist/{chunk-73W4L656.js → chunk-AQO2DWL2.js} +2 -2
- package/dist/{chunk-C6776X43.cjs → chunk-DC23N4XW.cjs} +26 -26
- package/dist/{chunk-C6776X43.cjs.map → chunk-DC23N4XW.cjs.map} +1 -1
- package/dist/{chunk-ZHW5VLHY.js → chunk-F5R4IMRF.js} +2 -2
- package/dist/{chunk-ZNWW4WAT.cjs → chunk-GRU75FOX.cjs} +26 -26
- package/dist/{chunk-ZNWW4WAT.cjs.map → chunk-GRU75FOX.cjs.map} +1 -1
- package/dist/{chunk-TWVRCPWY.cjs → chunk-IHGRWAUC.cjs} +61 -61
- package/dist/{chunk-TWVRCPWY.cjs.map → chunk-IHGRWAUC.cjs.map} +1 -1
- package/dist/{chunk-EH6LNTOT.js → chunk-IP4IZ4PB.js} +5 -5
- package/dist/{chunk-QU6P2U2Q.cjs → chunk-IRTAZKWK.cjs} +3 -3
- package/dist/{chunk-QU6P2U2Q.cjs.map → chunk-IRTAZKWK.cjs.map} +1 -1
- package/dist/{chunk-4BK5Z763.js → chunk-MKDOZF4C.js} +2 -2
- package/dist/{chunk-NUHDE7CB.cjs → chunk-MXKY67SV.cjs} +37 -37
- package/dist/{chunk-NUHDE7CB.cjs.map → chunk-MXKY67SV.cjs.map} +1 -1
- package/dist/{chunk-MGYNZ7SA.cjs → chunk-N24ZUZZZ.cjs} +31 -31
- package/dist/{chunk-MGYNZ7SA.cjs.map → chunk-N24ZUZZZ.cjs.map} +1 -1
- package/dist/{chunk-RBBWKSRC.js → chunk-NQSGY5HW.js} +20 -16
- package/dist/{chunk-RBBWKSRC.js.map → chunk-NQSGY5HW.js.map} +1 -1
- package/dist/{chunk-BUKQ6B65.cjs → chunk-PV6L6F3T.cjs} +87 -87
- package/dist/{chunk-BUKQ6B65.cjs.map → chunk-PV6L6F3T.cjs.map} +1 -1
- package/dist/{chunk-NE67LT3B.cjs → chunk-TBMMC4GS.cjs} +7 -7
- package/dist/{chunk-NE67LT3B.cjs.map → chunk-TBMMC4GS.cjs.map} +1 -1
- package/dist/{chunk-BNF6FZLP.js → chunk-VUVKZBDO.js} +4 -4
- package/dist/{chunk-7CBQWZAH.js → chunk-VYQLCGFR.js} +4 -4
- package/dist/{chunk-67CKAX7Z.js → chunk-WA3IEPEY.js} +2 -2
- package/dist/{chunk-KUKHUECE.js → chunk-X5VMEFIA.js} +2 -2
- package/dist/{chunk-QK4SQAYG.js → chunk-XPGB6J75.js} +6 -6
- package/dist/{chunk-UBEVU6LS.js → chunk-Y5TDZNWA.js} +2 -2
- package/dist/{chunk-R3XO2KO4.cjs → chunk-YPTOQDCY.cjs} +4 -4
- package/dist/{chunk-R3XO2KO4.cjs.map → chunk-YPTOQDCY.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/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 +132 -132
- package/dist/components/index.js +11 -11
- 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/navigation/mobile-burger-menu.d.ts.map +1 -1
- package/dist/components/navigation/navigation-sidebar.d.ts.map +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/index.cjs +2 -2
- package/dist/components/ui/index.js +1 -1
- package/dist/components/ui/reopen-ticket-modal.d.ts +6 -5
- package/dist/components/ui/reopen-ticket-modal.d.ts.map +1 -1
- package/dist/index.cjs +2 -2
- package/dist/index.js +1 -1
- package/dist/types/navigation.d.ts +25 -0
- package/dist/types/navigation.d.ts.map +1 -1
- package/package.json +1 -1
- package/src/components/navigation/mobile-burger-menu.tsx +5 -0
- package/src/components/navigation/navigation-sidebar.tsx +26 -19
- package/src/components/ui/reopen-ticket-modal.tsx +9 -8
- package/src/stories/ReopenTicketModal.stories.tsx +8 -8
- package/src/types/navigation.ts +23 -0
- package/dist/chunk-QQ3HUSDJ.cjs.map +0 -1
- /package/dist/{chunk-C6NKOHFW.js.map → chunk-2BKR65LQ.js.map} +0 -0
- /package/dist/{chunk-ZBRKTF6S.js.map → chunk-5W4R3BUR.js.map} +0 -0
- /package/dist/{chunk-56QT3JBZ.js.map → chunk-6WUUZ43M.js.map} +0 -0
- /package/dist/{chunk-73W4L656.js.map → chunk-AQO2DWL2.js.map} +0 -0
- /package/dist/{chunk-ZHW5VLHY.js.map → chunk-F5R4IMRF.js.map} +0 -0
- /package/dist/{chunk-EH6LNTOT.js.map → chunk-IP4IZ4PB.js.map} +0 -0
- /package/dist/{chunk-4BK5Z763.js.map → chunk-MKDOZF4C.js.map} +0 -0
- /package/dist/{chunk-BNF6FZLP.js.map → chunk-VUVKZBDO.js.map} +0 -0
- /package/dist/{chunk-7CBQWZAH.js.map → chunk-VYQLCGFR.js.map} +0 -0
- /package/dist/{chunk-67CKAX7Z.js.map → chunk-WA3IEPEY.js.map} +0 -0
- /package/dist/{chunk-KUKHUECE.js.map → chunk-X5VMEFIA.js.map} +0 -0
- /package/dist/{chunk-QK4SQAYG.js.map → chunk-XPGB6J75.js.map} +0 -0
- /package/dist/{chunk-UBEVU6LS.js.map → chunk-Y5TDZNWA.js.map} +0 -0
|
@@ -19,8 +19,7 @@ const REASON_MAX_LENGTH = 1000;
|
|
|
19
19
|
|
|
20
20
|
export interface ReopenTicketSelection {
|
|
21
21
|
statusId: string;
|
|
22
|
-
|
|
23
|
-
assigneeId: string | null;
|
|
22
|
+
assigneeId: string;
|
|
24
23
|
/** Trimmed; `null` when the field was left blank. */
|
|
25
24
|
reason: string | null;
|
|
26
25
|
}
|
|
@@ -39,8 +38,9 @@ export interface ReopenTicketModalProps {
|
|
|
39
38
|
assigneesLoading?: boolean;
|
|
40
39
|
/** Pre-selected status; falls back to the first status option. */
|
|
41
40
|
initialStatusId?: string | null;
|
|
42
|
-
/** Pre-selected assignee
|
|
43
|
-
*
|
|
41
|
+
/** Pre-selected assignee (the design default restores the ticket's previous
|
|
42
|
+
* assignee). No fallback — with none selected the CTA stays locked, same
|
|
43
|
+
* as Take Over: both Status and Assigned are required to confirm. */
|
|
44
44
|
initialAssigneeId?: string | null;
|
|
45
45
|
/** Confirm in-flight: buttons lock and the modal refuses to close. */
|
|
46
46
|
isPending?: boolean;
|
|
@@ -50,7 +50,8 @@ export interface ReopenTicketModalProps {
|
|
|
50
50
|
/**
|
|
51
51
|
* Reopen Ticket dialog (Figma openframe---tickets 8456-17581): shown when a
|
|
52
52
|
* technician reopens a Resolved/Archived ticket. Same Status + Assigned pair
|
|
53
|
-
* as {@link TakeOverTicketModal}
|
|
53
|
+
* as {@link TakeOverTicketModal} — both REQUIRED before the CTA unlocks —
|
|
54
|
+
* plus an optional free-text reason.
|
|
54
55
|
* Presentational — the consumer supplies the option lists, their ordering and
|
|
55
56
|
* default selections, and performs the actual reopen in `onConfirm`.
|
|
56
57
|
*
|
|
@@ -86,11 +87,11 @@ export function ReopenTicketModal({
|
|
|
86
87
|
const selectedAssignee = assigneeOptions.find(o => o.value === assigneeId);
|
|
87
88
|
|
|
88
89
|
const handleConfirm = () => {
|
|
89
|
-
if (!selectedStatusId || isPending) return;
|
|
90
|
+
if (!selectedStatusId || !assigneeId || isPending) return;
|
|
90
91
|
const trimmedReason = reason.trim();
|
|
91
92
|
onConfirm({
|
|
92
93
|
statusId: selectedStatusId,
|
|
93
|
-
assigneeId
|
|
94
|
+
assigneeId,
|
|
94
95
|
reason: trimmedReason ? trimmedReason.slice(0, REASON_MAX_LENGTH) : null,
|
|
95
96
|
});
|
|
96
97
|
};
|
|
@@ -163,7 +164,7 @@ export function ReopenTicketModal({
|
|
|
163
164
|
variant="accent"
|
|
164
165
|
onClick={handleConfirm}
|
|
165
166
|
loading={isPending}
|
|
166
|
-
disabled={!selectedStatusId}
|
|
167
|
+
disabled={!selectedStatusId || !assigneeId}
|
|
167
168
|
className="flex-1"
|
|
168
169
|
>
|
|
169
170
|
Reopen Ticket
|
|
@@ -17,10 +17,10 @@ const meta = {
|
|
|
17
17
|
description: {
|
|
18
18
|
component:
|
|
19
19
|
'Reopen Ticket dialog (Figma openframe---tickets 8456-17581): shown when a technician reopens a ' +
|
|
20
|
-
'Resolved/Archived ticket. Same Status + Assigned pair as TakeOverTicketModal
|
|
21
|
-
'
|
|
22
|
-
'
|
|
23
|
-
'
|
|
20
|
+
'Resolved/Archived ticket. Same Status + Assigned pair as TakeOverTicketModal - both required before ' +
|
|
21
|
+
'the CTA unlocks - plus an optional free-text reason. Presentational - the consumer supplies option ' +
|
|
22
|
+
'lists (design default pre-selects Tech Required), default selections, and performs the actual reopen ' +
|
|
23
|
+
'in onConfirm.',
|
|
24
24
|
},
|
|
25
25
|
},
|
|
26
26
|
},
|
|
@@ -98,11 +98,11 @@ export const Default: Story = {
|
|
|
98
98
|
};
|
|
99
99
|
|
|
100
100
|
/**
|
|
101
|
-
* No assignee - the
|
|
102
|
-
*
|
|
103
|
-
*
|
|
101
|
+
* No assignee pre-selected (e.g. the ticket was unassigned): the CTA stays
|
|
102
|
+
* locked until a technician is chosen - both fields are required, matching
|
|
103
|
+
* Take Over.
|
|
104
104
|
*/
|
|
105
|
-
export const
|
|
105
|
+
export const NoDefaultAssignee: Story = {
|
|
106
106
|
args: { ...Default.args, initialAssigneeId: null },
|
|
107
107
|
render: args => <ControlledModal {...args} />,
|
|
108
108
|
};
|
package/src/types/navigation.ts
CHANGED
|
@@ -126,6 +126,29 @@ export interface NavigationSidebarConfig {
|
|
|
126
126
|
* expects so the placeholder and the loaded nav are the same height.
|
|
127
127
|
*/
|
|
128
128
|
loadingRows?: { primary?: number; secondary?: number }
|
|
129
|
+
/**
|
|
130
|
+
* Host-owned content rendered above the primary navigation — an action that
|
|
131
|
+
* belongs in the nav's position but is not a nav entry, such as the desktop
|
|
132
|
+
* shell's "an update is ready" button.
|
|
133
|
+
*
|
|
134
|
+
* Kept out of `items` deliberately: an entry there is a row in the primary
|
|
135
|
+
* `<nav>` landmark, styled as one and announced as one, and none of that is
|
|
136
|
+
* true of an action that navigates nowhere. It also renders in every surface
|
|
137
|
+
* that takes this config — the sidebar AND the mobile burger menu — so a host
|
|
138
|
+
* passes it once and gets both.
|
|
139
|
+
*
|
|
140
|
+
* A render prop rather than a node because the two surfaces are different
|
|
141
|
+
* widths and only this component knows which: the 56px rail has room for a
|
|
142
|
+
* glyph and nothing else, while the burger menu is always full width. A host
|
|
143
|
+
* cannot derive `minimized` itself — it is the sidebar's own state, resolved
|
|
144
|
+
* from a persisted preference, the tablet breakpoint and any open overlay —
|
|
145
|
+
* and a container query would have to be authored in the HOST's Tailwind
|
|
146
|
+
* scan to emit anything.
|
|
147
|
+
*
|
|
148
|
+
* Rendered regardless of `loading`: it comes from host state that has nothing
|
|
149
|
+
* to do with whether the nav entries have resolved.
|
|
150
|
+
*/
|
|
151
|
+
topSlot?: (state: { minimized: boolean }) => React.ReactNode
|
|
129
152
|
minimized?: boolean
|
|
130
153
|
onNavigate?: (path: string) => void
|
|
131
154
|
onToggleMinimized?: () => void
|