@asteby/metacore-notifications 24.0.0 → 24.0.2
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/README.md +36 -61
- package/dist/dropdown.d.ts +3 -10
- package/dist/dropdown.d.ts.map +1 -1
- package/dist/dropdown.js +92 -98
- package/dist/dropdown.js.map +1 -1
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +3 -0
- package/dist/index.js.map +1 -1
- package/dist/sse.d.ts +26 -0
- package/dist/sse.d.ts.map +1 -0
- package/dist/sse.js +64 -0
- package/dist/sse.js.map +1 -0
- package/dist/toast.d.ts +58 -0
- package/dist/toast.d.ts.map +1 -0
- package/dist/toast.js +128 -0
- package/dist/toast.js.map +1 -0
- package/dist/types.d.ts +28 -4
- package/dist/types.d.ts.map +1 -1
- package/dist/visual.d.ts +50 -0
- package/dist/visual.d.ts.map +1 -0
- package/dist/visual.js +115 -0
- package/dist/visual.js.map +1 -0
- package/package.json +16 -4
package/README.md
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
# @asteby/metacore-notifications
|
|
2
2
|
|
|
3
|
-
|
|
4
|
-
|
|
3
|
+
Bell dropdown, **unified toast**, dynamic Lucide icons / severity colors /
|
|
4
|
+
module chips, and live ingest over **SSE** (preferred) or WebSocket.
|
|
5
5
|
|
|
6
6
|
## Install
|
|
7
7
|
|
|
@@ -11,76 +11,51 @@ pnpm add @asteby/metacore-notifications \
|
|
|
11
11
|
date-fns lucide-react sonner @tanstack/react-query react react-dom
|
|
12
12
|
```
|
|
13
13
|
|
|
14
|
-
|
|
15
|
-
`peerDependencies` — the consumer installs them once at the app level.
|
|
16
|
-
|
|
17
|
-
## Usage
|
|
14
|
+
## Boot (host app)
|
|
18
15
|
|
|
19
16
|
```tsx
|
|
20
|
-
import {
|
|
21
|
-
import { WebSocketProvider } from '@asteby/metacore-websocket/provider'
|
|
22
|
-
import { api } from '@/lib/api' // your injected axios-compatible client
|
|
23
|
-
import { useNavigate } from '@tanstack/react-router'
|
|
24
|
-
|
|
25
|
-
export function Header() {
|
|
26
|
-
const navigate = useNavigate()
|
|
27
|
-
return (
|
|
28
|
-
<WebSocketProvider url="wss://api.example.com/ws" getToken={getToken}>
|
|
29
|
-
<NotificationsDropdown
|
|
30
|
-
apiClient={api}
|
|
31
|
-
apiBasePath="/data/notifications/me"
|
|
32
|
-
enableBadge
|
|
33
|
-
onNotificationClick={(n) => {
|
|
34
|
-
if (n.link) navigate({ to: n.link })
|
|
35
|
-
else if (n.conversation_id)
|
|
36
|
-
navigate({ to: '/chats', search: { id: n.conversation_id } })
|
|
37
|
-
}}
|
|
38
|
-
/>
|
|
39
|
-
</WebSocketProvider>
|
|
40
|
-
)
|
|
41
|
-
}
|
|
42
|
-
```
|
|
43
|
-
|
|
44
|
-
`apiBasePath` lets each host application point at its own notifications endpoint, for example:
|
|
45
|
-
|
|
46
|
-
- `"/data/notifications/me"`
|
|
47
|
-
- `"/dynamic/notifications/me"`
|
|
17
|
+
import { installUnifiedToasts, registerModuleLabel } from '@asteby/metacore-notifications'
|
|
48
18
|
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|----------------------------|-------------------------------------------|----------|-------|
|
|
53
|
-
| `apiClient` | `NotificationsApiClient` (axios-compatible) | — | Never imported as a singleton — inject it. |
|
|
54
|
-
| `apiBasePath` | `string` | — | e.g. `/data/notifications/me`. |
|
|
55
|
-
| `enableBadge` | `boolean` | `true` | Drives `navigator.setAppBadge()`. |
|
|
56
|
-
| `onNotificationClick` | `(n: NotificationItem) => void` | — | Navigate however you like. |
|
|
57
|
-
| `perPage` | `number` | `20` | Initial fetch size. |
|
|
58
|
-
| `locale` | `date-fns` `Locale` | `es` | Used by `formatDistanceToNow`. |
|
|
59
|
-
| `labels` | `Partial<NotificationsDropdownLabels>` | — | i18n overrides. |
|
|
60
|
-
| `subscribeToNotifications` | `(onMessage) => void \| () => void` | — | Bring-your-own subscription (skips `useWebSocketMessage`). |
|
|
19
|
+
installUnifiedToasts() // every toast.success/info/… → same card as the bell
|
|
20
|
+
registerModuleLabel('team_chat', 'Equipo') // optional extra chips
|
|
21
|
+
```
|
|
61
22
|
|
|
62
|
-
##
|
|
23
|
+
## Dropdown + SSE
|
|
63
24
|
|
|
64
|
-
```
|
|
65
|
-
import {
|
|
25
|
+
```tsx
|
|
26
|
+
import { NotificationsDropdown } from '@asteby/metacore-notifications'
|
|
27
|
+
|
|
28
|
+
<NotificationsDropdown
|
|
29
|
+
apiClient={api}
|
|
30
|
+
apiBasePath="/data/notifications/me"
|
|
31
|
+
sseUrl="/api/notifications/stream"
|
|
32
|
+
sseAccessToken={accessToken}
|
|
33
|
+
preferSse
|
|
34
|
+
showToastOnIngest
|
|
35
|
+
onNotificationClick={(n) => n.link && navigate({ to: n.link })}
|
|
36
|
+
/>
|
|
66
37
|
```
|
|
67
38
|
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
39
|
+
### Live transports
|
|
40
|
+
|
|
41
|
+
| Prop | Role |
|
|
42
|
+
|------|------|
|
|
43
|
+
| `sseUrl` | `EventSource` to host SSE (`event: notification`) |
|
|
44
|
+
| `subscribeToNotifications` | Bring-your-own bus (team-chat bridge, etc.) |
|
|
45
|
+
| built-in WS | Used when neither SSE-prefer nor custom subscribe is set |
|
|
73
46
|
|
|
74
|
-
|
|
47
|
+
### Visual contract (payload / metadata)
|
|
75
48
|
|
|
76
|
-
|
|
49
|
+
- `icon` — Lucide kebab name (`shopping-cart`, `clipboard-list`, …)
|
|
50
|
+
- `type` — `info` \| `success` \| `warning` \| `error` → default colors
|
|
51
|
+
- `metadata.addon_key` / `apartado` — module chip (Inventario, Almacén, POS, …)
|
|
52
|
+
- `metadata.color` — optional CSS/hex override for the icon disc
|
|
77
53
|
|
|
78
|
-
|
|
79
|
-
returning `{ data: { data: NotificationItem[] } }`.
|
|
80
|
-
- `PATCH {apiBasePath}/{id}` with body `{ is_read: true }`.
|
|
54
|
+
## API
|
|
81
55
|
|
|
82
|
-
|
|
83
|
-
|
|
56
|
+
- `GET {apiBasePath}` → `{ data: NotificationItem[] }`
|
|
57
|
+
- `PATCH {apiBasePath}/{id}` `{ is_read: true }`
|
|
58
|
+
- `GET /api/notifications/stream` — SSE (`?access_token=` for EventSource)
|
|
84
59
|
|
|
85
60
|
## License
|
|
86
61
|
|
package/dist/dropdown.d.ts
CHANGED
|
@@ -1,14 +1,7 @@
|
|
|
1
1
|
import type { NotificationsDropdownProps } from './types';
|
|
2
2
|
/**
|
|
3
|
-
* Bell-icon dropdown
|
|
4
|
-
*
|
|
5
|
-
* and streams new items pushed over WebSocket under the `NOTIFICATION`
|
|
6
|
-
* message type.
|
|
7
|
-
*
|
|
8
|
-
* This component is transport-agnostic: the HTTP client is injected via
|
|
9
|
-
* `apiClient`. The collection base path is injected via `apiBasePath` —
|
|
10
|
-
* the component fetches `GET {apiBasePath}?orderBy=created_at&...` and
|
|
11
|
-
* mutates items via `PATCH {apiBasePath}/{id}`.
|
|
3
|
+
* Bell-icon dropdown: REST list + live ingest (SSE preferred, WebSocket
|
|
4
|
+
* fallback) + optional canonical card toast on every new item.
|
|
12
5
|
*/
|
|
13
|
-
export declare function NotificationsDropdown({ apiClient, apiBasePath, enableBadge, onNotificationClick, perPage, locale, labels: labelsOverride, resolveImageUrl, subscribeToNotifications, }: NotificationsDropdownProps): import("react").JSX.Element;
|
|
6
|
+
export declare function NotificationsDropdown({ apiClient, apiBasePath, enableBadge, onNotificationClick, perPage, locale, labels: labelsOverride, resolveImageUrl, subscribeToNotifications, sseUrl, sseAccessToken, preferSse, showToastOnIngest, }: NotificationsDropdownProps): import("react").JSX.Element;
|
|
14
7
|
//# sourceMappingURL=dropdown.d.ts.map
|
package/dist/dropdown.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dropdown.d.ts","sourceRoot":"","sources":["../src/dropdown.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"dropdown.d.ts","sourceRoot":"","sources":["../src/dropdown.tsx"],"names":[],"mappings":"AA0BA,OAAO,KAAK,EAIV,0BAA0B,EAC3B,MAAM,SAAS,CAAA;AAuBhB;;;GAGG;AACH,wBAAgB,qBAAqB,CAAC,EACpC,SAAS,EACT,WAAW,EACX,WAAkB,EAClB,mBAAmB,EACnB,OAAY,EACZ,MAAW,EACX,MAAM,EAAE,cAAc,EACtB,eAAe,EACf,wBAAwB,EACxB,MAAM,EACN,cAAc,EACd,SAAS,EACT,iBAAwB,GACzB,EAAE,0BAA0B,+BAsM5B"}
|
package/dist/dropdown.js
CHANGED
|
@@ -7,11 +7,9 @@ import { formatDistanceToNow } from 'date-fns';
|
|
|
7
7
|
import { es } from 'date-fns/locale';
|
|
8
8
|
import { toast } from 'sonner';
|
|
9
9
|
import { useAppBadge } from './hooks';
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
.map((part) => part.charAt(0).toUpperCase() + part.slice(1))
|
|
14
|
-
.join('');
|
|
10
|
+
import { subscribeNotificationSSE } from './sse';
|
|
11
|
+
import { showNotificationToast } from './toast';
|
|
12
|
+
import { moduleLabelFromMeta, parseNotificationMeta, resolveNotificationIcon, resolveNotificationTone, } from './visual';
|
|
15
13
|
const DEFAULT_LABELS = {
|
|
16
14
|
title: 'Notificaciones',
|
|
17
15
|
newBadge: (count) => `${count} nuevas`,
|
|
@@ -25,56 +23,17 @@ const DEFAULT_LABELS = {
|
|
|
25
23
|
permissionRequired: 'Permisos requeridos',
|
|
26
24
|
srLabel: 'Notificaciones',
|
|
27
25
|
};
|
|
28
|
-
const getIconFor = (notification) => {
|
|
29
|
-
if (notification.icon) {
|
|
30
|
-
const pascalName = toPascalCase(notification.icon);
|
|
31
|
-
const DynamicIcon = LucideIcons[pascalName];
|
|
32
|
-
if (DynamicIcon)
|
|
33
|
-
return DynamicIcon;
|
|
34
|
-
}
|
|
35
|
-
switch (notification.type) {
|
|
36
|
-
case 'warning':
|
|
37
|
-
return LucideIcons.AlertTriangle;
|
|
38
|
-
case 'success':
|
|
39
|
-
return LucideIcons.CheckCircle2;
|
|
40
|
-
case 'error':
|
|
41
|
-
return LucideIcons.XCircle;
|
|
42
|
-
case 'info':
|
|
43
|
-
default:
|
|
44
|
-
return LucideIcons.Info;
|
|
45
|
-
}
|
|
46
|
-
};
|
|
47
|
-
const getStyle = (type) => {
|
|
48
|
-
switch (type) {
|
|
49
|
-
case 'warning':
|
|
50
|
-
return 'bg-amber-500 text-white';
|
|
51
|
-
case 'success':
|
|
52
|
-
return 'bg-emerald-500 text-white';
|
|
53
|
-
case 'error':
|
|
54
|
-
return 'bg-red-500 text-white';
|
|
55
|
-
case 'info':
|
|
56
|
-
default:
|
|
57
|
-
return 'bg-blue-500 text-white';
|
|
58
|
-
}
|
|
59
|
-
};
|
|
60
26
|
/**
|
|
61
|
-
* Bell-icon dropdown
|
|
62
|
-
*
|
|
63
|
-
* and streams new items pushed over WebSocket under the `NOTIFICATION`
|
|
64
|
-
* message type.
|
|
65
|
-
*
|
|
66
|
-
* This component is transport-agnostic: the HTTP client is injected via
|
|
67
|
-
* `apiClient`. The collection base path is injected via `apiBasePath` —
|
|
68
|
-
* the component fetches `GET {apiBasePath}?orderBy=created_at&...` and
|
|
69
|
-
* mutates items via `PATCH {apiBasePath}/{id}`.
|
|
27
|
+
* Bell-icon dropdown: REST list + live ingest (SSE preferred, WebSocket
|
|
28
|
+
* fallback) + optional canonical card toast on every new item.
|
|
70
29
|
*/
|
|
71
|
-
export function NotificationsDropdown({ apiClient, apiBasePath, enableBadge = true, onNotificationClick, perPage = 20, locale = es, labels: labelsOverride, resolveImageUrl, subscribeToNotifications, }) {
|
|
30
|
+
export function NotificationsDropdown({ apiClient, apiBasePath, enableBadge = true, onNotificationClick, perPage = 20, locale = es, labels: labelsOverride, resolveImageUrl, subscribeToNotifications, sseUrl, sseAccessToken, preferSse, showToastOnIngest = true, }) {
|
|
72
31
|
const labels = useMemo(() => ({ ...DEFAULT_LABELS, ...labelsOverride }), [labelsOverride]);
|
|
73
32
|
const [notifications, setNotifications] = useState([]);
|
|
74
33
|
const [unreadCount, setUnreadCount] = useState(0);
|
|
75
34
|
const [, setLoading] = useState(false);
|
|
76
35
|
const { setBadge } = useAppBadge();
|
|
77
|
-
|
|
36
|
+
const seenIdsRef = useRef(new Set());
|
|
78
37
|
const apiClientRef = useRef(apiClient);
|
|
79
38
|
apiClientRef.current = apiClient;
|
|
80
39
|
const basePathRef = useRef(apiBasePath);
|
|
@@ -97,6 +56,7 @@ export function NotificationsDropdown({ apiClient, apiBasePath, enableBadge = tr
|
|
|
97
56
|
const items = response.data?.data ?? [];
|
|
98
57
|
setNotifications(items);
|
|
99
58
|
setUnreadCount(items.filter((n) => !n.is_read).length);
|
|
59
|
+
seenIdsRef.current = new Set(items.map((n) => n.id));
|
|
100
60
|
}
|
|
101
61
|
catch (error) {
|
|
102
62
|
// eslint-disable-next-line no-console
|
|
@@ -109,12 +69,28 @@ export function NotificationsDropdown({ apiClient, apiBasePath, enableBadge = tr
|
|
|
109
69
|
useEffect(() => {
|
|
110
70
|
fetchNotifications();
|
|
111
71
|
}, [fetchNotifications, apiBasePath]);
|
|
112
|
-
// Normalise an incoming WS payload + prepend it to the list.
|
|
113
72
|
const ingestWsPayload = useCallback((payload) => {
|
|
114
|
-
const
|
|
115
|
-
|
|
73
|
+
const id = payload.id ||
|
|
74
|
+
(typeof crypto !== 'undefined' && 'randomUUID' in crypto
|
|
116
75
|
? crypto.randomUUID()
|
|
117
|
-
: `${Date.now()}-${Math.random()}`)
|
|
76
|
+
: `${Date.now()}-${Math.random()}`);
|
|
77
|
+
if (seenIdsRef.current.has(id))
|
|
78
|
+
return;
|
|
79
|
+
seenIdsRef.current.add(id);
|
|
80
|
+
const metaObj = typeof payload.metadata === 'object' && payload.metadata
|
|
81
|
+
? { ...payload.metadata }
|
|
82
|
+
: parseNotificationMeta(typeof payload.metadata === 'string' ? payload.metadata : undefined);
|
|
83
|
+
if (payload.addon_key)
|
|
84
|
+
metaObj.addon_key = payload.addon_key;
|
|
85
|
+
if (payload.apartado)
|
|
86
|
+
metaObj.apartado = payload.apartado;
|
|
87
|
+
if (payload.color)
|
|
88
|
+
metaObj.color = payload.color;
|
|
89
|
+
const metadataStr = typeof payload.metadata === 'string'
|
|
90
|
+
? payload.metadata
|
|
91
|
+
: JSON.stringify(metaObj);
|
|
92
|
+
const newNotification = {
|
|
93
|
+
id,
|
|
118
94
|
title: payload.title,
|
|
119
95
|
message: payload.body || payload.message || payload.description || '',
|
|
120
96
|
type: payload.type || 'info',
|
|
@@ -123,20 +99,43 @@ export function NotificationsDropdown({ apiClient, apiBasePath, enableBadge = tr
|
|
|
123
99
|
link: payload.link,
|
|
124
100
|
icon: payload.icon,
|
|
125
101
|
image: payload.image,
|
|
126
|
-
metadata:
|
|
102
|
+
metadata: metadataStr,
|
|
127
103
|
conversation_id: payload.conversation_id,
|
|
128
104
|
};
|
|
129
105
|
setNotifications((prev) => [newNotification, ...prev]);
|
|
130
106
|
setUnreadCount((prev) => prev + 1);
|
|
107
|
+
// Quiet frames from POST /notifications/me already toasted on the client.
|
|
108
|
+
const skipToast = Boolean(payload.skip_toast) ||
|
|
109
|
+
metaObj.skip_toast === true ||
|
|
110
|
+
metaObj.source === 'toast';
|
|
111
|
+
if (showToastOnIngest && !skipToast) {
|
|
112
|
+
showNotificationToast({
|
|
113
|
+
id,
|
|
114
|
+
title: payload.title,
|
|
115
|
+
body: payload.body || payload.message || payload.description,
|
|
116
|
+
type: payload.type || 'info',
|
|
117
|
+
icon: payload.icon,
|
|
118
|
+
image: payload.image,
|
|
119
|
+
apartado: payload.apartado,
|
|
120
|
+
addonKey: payload.addon_key || metaObj.addon_key,
|
|
121
|
+
metadata: metaObj,
|
|
122
|
+
onClick: () => {
|
|
123
|
+
if (onNotificationClick)
|
|
124
|
+
onNotificationClick(newNotification);
|
|
125
|
+
else if (payload.link?.startsWith('http'))
|
|
126
|
+
window.open(payload.link, '_blank');
|
|
127
|
+
},
|
|
128
|
+
});
|
|
129
|
+
}
|
|
131
130
|
if (typeof window !== 'undefined' &&
|
|
132
131
|
'Notification' in window &&
|
|
133
132
|
Notification.permission !== 'granted') {
|
|
134
133
|
window.dispatchEvent(new CustomEvent('show-notification-prompt'));
|
|
135
134
|
}
|
|
136
|
-
}, []);
|
|
137
|
-
// WebSocket wiring: use provided hook unless caller supplies a custom
|
|
138
|
-
// subscription. We always run one of the two branches exactly once.
|
|
135
|
+
}, [showToastOnIngest, onNotificationClick]);
|
|
139
136
|
const useCustomSubscription = Boolean(subscribeToNotifications);
|
|
137
|
+
const useSse = Boolean(sseUrl);
|
|
138
|
+
const skipBuiltInWs = useCustomSubscription || (useSse && preferSse !== false);
|
|
140
139
|
useEffect(() => {
|
|
141
140
|
if (!useCustomSubscription || !subscribeToNotifications)
|
|
142
141
|
return;
|
|
@@ -146,36 +145,17 @@ export function NotificationsDropdown({ apiClient, apiBasePath, enableBadge = tr
|
|
|
146
145
|
unsub();
|
|
147
146
|
};
|
|
148
147
|
}, [useCustomSubscription, subscribeToNotifications, ingestWsPayload]);
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
}
|
|
161
|
-
catch (error) {
|
|
162
|
-
// eslint-disable-next-line no-console
|
|
163
|
-
console.error('Failed to mark notification as read:', error);
|
|
164
|
-
}
|
|
165
|
-
}, onMarkAllAsRead: async () => {
|
|
166
|
-
const unreadIds = notifications.filter((n) => !n.is_read).map((n) => n.id);
|
|
167
|
-
setNotifications((prev) => prev.map((n) => ({ ...n, is_read: true })));
|
|
168
|
-
setUnreadCount(0);
|
|
169
|
-
try {
|
|
170
|
-
await Promise.all(unreadIds.map((id) => apiClientRef.current.patch(`${basePathRef.current}/${id}`, {
|
|
171
|
-
is_read: true,
|
|
172
|
-
})));
|
|
173
|
-
}
|
|
174
|
-
catch (error) {
|
|
175
|
-
// eslint-disable-next-line no-console
|
|
176
|
-
console.error('Failed to mark all as read:', error);
|
|
177
|
-
}
|
|
178
|
-
}, onNotificationClick: onNotificationClick })) : (_jsx(DropdownWithWebSocket, { labels: labels, locale: locale, notifications: notifications, unreadCount: unreadCount, resolveImageUrl: resolveImageUrl, ingestWsPayload: ingestWsPayload, onMarkAsRead: async (id) => {
|
|
148
|
+
useEffect(() => {
|
|
149
|
+
if (!useSse || !sseUrl)
|
|
150
|
+
return;
|
|
151
|
+
return subscribeNotificationSSE({
|
|
152
|
+
url: sseUrl,
|
|
153
|
+
accessToken: sseAccessToken,
|
|
154
|
+
onMessage: ingestWsPayload,
|
|
155
|
+
});
|
|
156
|
+
}, [useSse, sseUrl, sseAccessToken, ingestWsPayload]);
|
|
157
|
+
const markHandlers = {
|
|
158
|
+
onMarkAsRead: async (id) => {
|
|
179
159
|
setNotifications((prev) => prev.map((n) => (n.id === id ? { ...n, is_read: true } : n)));
|
|
180
160
|
setUnreadCount((prev) => Math.max(0, prev - 1));
|
|
181
161
|
try {
|
|
@@ -187,7 +167,8 @@ export function NotificationsDropdown({ apiClient, apiBasePath, enableBadge = tr
|
|
|
187
167
|
// eslint-disable-next-line no-console
|
|
188
168
|
console.error('Failed to mark notification as read:', error);
|
|
189
169
|
}
|
|
190
|
-
},
|
|
170
|
+
},
|
|
171
|
+
onMarkAllAsRead: async () => {
|
|
191
172
|
const unreadIds = notifications.filter((n) => !n.is_read).map((n) => n.id);
|
|
192
173
|
setNotifications((prev) => prev.map((n) => ({ ...n, is_read: true })));
|
|
193
174
|
setUnreadCount(0);
|
|
@@ -200,7 +181,18 @@ export function NotificationsDropdown({ apiClient, apiBasePath, enableBadge = tr
|
|
|
200
181
|
// eslint-disable-next-line no-console
|
|
201
182
|
console.error('Failed to mark all as read:', error);
|
|
202
183
|
}
|
|
203
|
-
},
|
|
184
|
+
},
|
|
185
|
+
};
|
|
186
|
+
const shellProps = {
|
|
187
|
+
labels,
|
|
188
|
+
locale,
|
|
189
|
+
notifications,
|
|
190
|
+
unreadCount,
|
|
191
|
+
resolveImageUrl,
|
|
192
|
+
onNotificationClick,
|
|
193
|
+
...markHandlers,
|
|
194
|
+
};
|
|
195
|
+
return skipBuiltInWs ? (_jsx(DropdownShell, { ...shellProps })) : (_jsx(DropdownWithWebSocket, { ingestWsPayload: ingestWsPayload, ...shellProps }));
|
|
204
196
|
}
|
|
205
197
|
function DropdownWithWebSocket({ ingestWsPayload, ...rest }) {
|
|
206
198
|
useWebSocketMessage('NOTIFICATION', (message) => {
|
|
@@ -215,10 +207,13 @@ function DropdownShell({ labels, locale, notifications, unreadCount, resolveImag
|
|
|
215
207
|
? Notification.permission
|
|
216
208
|
: null;
|
|
217
209
|
return (_jsxs(DropdownMenu, { children: [_jsx(DropdownMenuTrigger, { asChild: true, children: _jsxs(Button, { variant: 'ghost', size: 'icon', className: 'relative', children: [notificationApiAvailable && permission !== 'granted' ? (_jsxs("div", { className: 'relative', children: [_jsx(LucideIcons.BellOff, { className: 'h-[1.2rem] w-[1.2rem] text-muted-foreground' }), permission === 'default' && (_jsx("span", { className: 'absolute -top-1 -right-1 h-2.5 w-2.5 rounded-full bg-yellow-500 ring-2 ring-background', title: labels.permissionRequired }))] })) : (_jsx(LucideIcons.Bell, { className: 'h-[1.2rem] w-[1.2rem] text-foreground' })), unreadCount > 0 && (_jsxs("span", { className: 'absolute -top-1 -right-1 flex h-5 min-w-5 items-center justify-center rounded-full bg-primary px-1 text-[10px] font-bold text-primary-foreground shadow-sm ring-2 ring-background', children: [unreadCount, _jsx("span", { className: 'animate-ping absolute inline-flex h-full w-full rounded-full bg-primary opacity-75' })] })), _jsx("span", { className: 'sr-only', children: labels.srLabel })] }) }), _jsxs(DropdownMenuContent, { className: 'w-85 sm:w-96 p-0', align: 'end', forceMount: true, children: [_jsx(DropdownMenuLabel, { className: 'p-4 font-normal border-b', children: _jsxs("div", { className: 'flex items-center justify-between', children: [_jsx("p", { className: 'text-sm font-semibold', children: labels.title }), unreadCount > 0 && (_jsx("span", { className: 'rounded-full bg-primary/10 px-2 py-0.5 text-xs font-medium text-primary', children: labels.newBadge(unreadCount) }))] }) }), _jsx(DropdownMenuGroup, { className: 'max-h-[350px] overflow-y-auto', children: notifications.length === 0 ? (_jsx("div", { className: 'p-8 text-center text-muted-foreground text-sm', children: labels.empty })) : (notifications.map((notification) => {
|
|
218
|
-
const
|
|
219
|
-
|
|
210
|
+
const meta = parseNotificationMeta(notification.metadata);
|
|
211
|
+
const Icon = resolveNotificationIcon(notification.icon, notification.type);
|
|
212
|
+
const tone = resolveNotificationTone(notification.type, meta);
|
|
213
|
+
const mod = moduleLabelFromMeta(meta);
|
|
214
|
+
return (_jsx(DropdownMenuItem, { className: `cursor-pointer border-l-2 p-3 focus:bg-muted/50 data-[state=open]:bg-muted/50 sm:p-4 ${tone.rowAccentClass} ${!notification.is_read ? 'bg-primary/[0.03]' : ''}`, onClick: () => {
|
|
220
215
|
if (!notification.is_read)
|
|
221
|
-
onMarkAsRead(notification.id);
|
|
216
|
+
void onMarkAsRead(notification.id);
|
|
222
217
|
if (onNotificationClick) {
|
|
223
218
|
onNotificationClick(notification);
|
|
224
219
|
}
|
|
@@ -226,11 +221,11 @@ function DropdownShell({ labels, locale, notifications, unreadCount, resolveImag
|
|
|
226
221
|
notification.link.startsWith('http')) {
|
|
227
222
|
window.open(notification.link, '_blank');
|
|
228
223
|
}
|
|
229
|
-
}, children: _jsxs("div", { className: 'flex items-start gap-
|
|
224
|
+
}, children: _jsxs("div", { className: 'flex w-full items-start gap-3', children: [_jsx(NotificationAvatar, { notification: notification, Icon: Icon, toneClass: tone.iconClass, customColor: tone.customColor, resolveImageUrl: resolveImageUrl }), _jsxs("div", { className: 'flex min-w-0 w-full flex-col gap-1.5', children: [_jsxs("div", { className: 'flex items-center justify-between gap-2', children: [_jsx("p", { className: `truncate text-sm leading-snug ${!notification.is_read ? 'font-semibold text-foreground' : 'font-medium text-foreground/80'}`, children: notification.title }), _jsx("span", { className: 'shrink-0 whitespace-nowrap text-[10px] text-muted-foreground', children: formatDistanceToNow(new Date(notification.created_at), {
|
|
230
225
|
addSuffix: true,
|
|
231
226
|
locale,
|
|
232
|
-
}) })] }), _jsx("p", { className: 'text-xs text-muted-foreground
|
|
233
|
-
})) }), notifications.length > 0 && (_jsx("div", { className: '
|
|
227
|
+
}) })] }), notification.message ? (_jsx("p", { className: 'line-clamp-2 text-xs leading-relaxed text-muted-foreground', children: notification.message })) : null, mod ? (_jsx("div", { className: 'flex items-center gap-1.5 pt-0.5', children: _jsx("span", { className: 'inline-flex items-center rounded-md bg-muted px-1.5 py-0.5 text-[10px] font-medium capitalize text-muted-foreground', children: mod }) })) : null] }), !notification.is_read && (_jsx("div", { className: 'shrink-0 self-center', children: _jsx("div", { className: 'h-2 w-2 rounded-full bg-primary shadow-sm' }) }))] }) }, notification.id));
|
|
228
|
+
})) }), notifications.length > 0 && (_jsx("div", { className: 'border-t bg-muted/20 p-2', children: _jsx(Button, { variant: 'ghost', size: 'sm', className: 'h-8 w-full text-xs', onClick: () => void onMarkAllAsRead(), children: labels.markAllAsRead }) })), notificationApiAvailable && permission !== 'granted' && (_jsx("div", { className: 'border-t bg-muted/20 p-2', children: _jsxs(Button, { variant: 'outline', size: 'sm', className: 'h-8 w-full gap-2 border-primary/20 bg-primary/10 text-xs text-primary hover:bg-primary/20', onClick: async () => {
|
|
234
229
|
try {
|
|
235
230
|
const next = await Notification.requestPermission();
|
|
236
231
|
if (next === 'granted') {
|
|
@@ -248,15 +243,14 @@ function DropdownShell({ labels, locale, notifications, unreadCount, resolveImag
|
|
|
248
243
|
}
|
|
249
244
|
}, children: [_jsx(LucideIcons.BellRing, { className: 'h-3 w-3' }), labels.enableNotifications] }) }))] })] }));
|
|
250
245
|
}
|
|
251
|
-
|
|
252
|
-
function NotificationAvatar({ notification, Icon, resolveImageUrl, }) {
|
|
246
|
+
function NotificationAvatar({ notification, Icon, toneClass, customColor, resolveImageUrl, }) {
|
|
253
247
|
const [failed, setFailed] = useState(false);
|
|
254
248
|
const raw = (notification.image || '').trim();
|
|
255
249
|
const resolved = raw && !failed ? (resolveImageUrl ? resolveImageUrl(raw) : raw) : '';
|
|
256
250
|
const showPhoto = Boolean(resolved);
|
|
257
251
|
if (showPhoto) {
|
|
258
|
-
return (_jsxs("div", { className: 'relative shrink-0', children: [_jsx("img", { src: resolved, alt: '', className: 'h-10 w-10 rounded-full
|
|
252
|
+
return (_jsxs("div", { className: 'relative shrink-0', children: [_jsx("img", { src: resolved, alt: '', className: 'h-10 w-10 rounded-full border border-muted/40 object-cover shadow-sm', onError: () => setFailed(true) }), _jsx("div", { className: 'absolute -bottom-1 -right-1 flex size-6 items-center justify-center rounded-full bg-background p-1 text-primary shadow-sm ring-1 ring-border', children: _jsx(Icon, { className: 'size-3.5 text-current', strokeWidth: 2.25 }) })] }));
|
|
259
253
|
}
|
|
260
|
-
return (_jsx("div", { className: `flex h-10 w-10 shrink-0 items-center justify-center rounded-full shadow-sm ring-1 ring-inset ring-black/5 ${
|
|
254
|
+
return (_jsx("div", { className: `flex h-10 w-10 shrink-0 items-center justify-center rounded-full shadow-sm ring-1 ring-inset ring-black/5 ${toneClass}`, style: customColor ? { backgroundColor: customColor, color: '#fff' } : undefined, children: _jsx(Icon, { className: 'h-5 w-5', strokeWidth: 2.5 }) }));
|
|
261
255
|
}
|
|
262
256
|
//# sourceMappingURL=dropdown.js.map
|
package/dist/dropdown.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dropdown.js","sourceRoot":"","sources":["../src/dropdown.tsx"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"dropdown.js","sourceRoot":"","sources":["../src/dropdown.tsx"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
|
@@ -1,4 +1,7 @@
|
|
|
1
1
|
export { NotificationsDropdown } from './dropdown';
|
|
2
2
|
export { useAppBadge, useNotifications } from './hooks';
|
|
3
|
+
export { showNotificationToast, installUnifiedToasts, type ShowNotificationToastOptions, type PersistNotificationInput, type InstallUnifiedToastsOptions, } from './toast';
|
|
4
|
+
export { subscribeNotificationSSE, useNotificationSSE, type NotificationStreamOptions, } from './sse';
|
|
5
|
+
export { resolveNotificationVisual, resolveNotificationIcon, resolveNotificationTone, moduleLabelFromMeta, parseNotificationMeta, registerModuleLabel, toPascalCase, type NotificationMeta, type NotificationTone, } from './visual';
|
|
3
6
|
export type { NotificationItem, NotificationType, NotificationsApiClient, NotificationWsPayload, NotificationsDropdownLabels, NotificationsDropdownProps, } from './types';
|
|
4
7
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,qBAAqB,EAAE,MAAM,YAAY,CAAA;AAClD,OAAO,EAAE,WAAW,EAAE,gBAAgB,EAAE,MAAM,SAAS,CAAA;AACvD,YAAY,EACV,gBAAgB,EAChB,gBAAgB,EAChB,sBAAsB,EACtB,qBAAqB,EACrB,2BAA2B,EAC3B,0BAA0B,GAC3B,MAAM,SAAS,CAAA"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,qBAAqB,EAAE,MAAM,YAAY,CAAA;AAClD,OAAO,EAAE,WAAW,EAAE,gBAAgB,EAAE,MAAM,SAAS,CAAA;AACvD,OAAO,EACL,qBAAqB,EACrB,oBAAoB,EACpB,KAAK,4BAA4B,EACjC,KAAK,wBAAwB,EAC7B,KAAK,2BAA2B,GACjC,MAAM,SAAS,CAAA;AAChB,OAAO,EACL,wBAAwB,EACxB,kBAAkB,EAClB,KAAK,yBAAyB,GAC/B,MAAM,OAAO,CAAA;AACd,OAAO,EACL,yBAAyB,EACzB,uBAAuB,EACvB,uBAAuB,EACvB,mBAAmB,EACnB,qBAAqB,EACrB,mBAAmB,EACnB,YAAY,EACZ,KAAK,gBAAgB,EACrB,KAAK,gBAAgB,GACtB,MAAM,UAAU,CAAA;AACjB,YAAY,EACV,gBAAgB,EAChB,gBAAgB,EAChB,sBAAsB,EACtB,qBAAqB,EACrB,2BAA2B,EAC3B,0BAA0B,GAC3B,MAAM,SAAS,CAAA"}
|
package/dist/index.js
CHANGED
|
@@ -1,3 +1,6 @@
|
|
|
1
1
|
export { NotificationsDropdown } from './dropdown';
|
|
2
2
|
export { useAppBadge, useNotifications } from './hooks';
|
|
3
|
+
export { showNotificationToast, installUnifiedToasts, } from './toast';
|
|
4
|
+
export { subscribeNotificationSSE, useNotificationSSE, } from './sse';
|
|
5
|
+
export { resolveNotificationVisual, resolveNotificationIcon, resolveNotificationTone, moduleLabelFromMeta, parseNotificationMeta, registerModuleLabel, toPascalCase, } from './visual';
|
|
3
6
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,qBAAqB,EAAE,MAAM,YAAY,CAAA;AAClD,OAAO,EAAE,WAAW,EAAE,gBAAgB,EAAE,MAAM,SAAS,CAAA"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,qBAAqB,EAAE,MAAM,YAAY,CAAA;AAClD,OAAO,EAAE,WAAW,EAAE,gBAAgB,EAAE,MAAM,SAAS,CAAA;AACvD,OAAO,EACL,qBAAqB,EACrB,oBAAoB,GAIrB,MAAM,SAAS,CAAA;AAChB,OAAO,EACL,wBAAwB,EACxB,kBAAkB,GAEnB,MAAM,OAAO,CAAA;AACd,OAAO,EACL,yBAAyB,EACzB,uBAAuB,EACvB,uBAAuB,EACvB,mBAAmB,EACnB,qBAAqB,EACrB,mBAAmB,EACnB,YAAY,GAGb,MAAM,UAAU,CAAA"}
|
package/dist/sse.d.ts
ADDED
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import type { NotificationWsPayload } from './types';
|
|
2
|
+
export type NotificationStreamOptions = {
|
|
3
|
+
/** Absolute or same-origin URL, e.g. `/api/notifications/stream` */
|
|
4
|
+
url: string;
|
|
5
|
+
/** Bearer token (EventSource cannot set headers — pass as `?access_token=` if needed). */
|
|
6
|
+
accessToken?: string | null;
|
|
7
|
+
/** Called for every `notification` SSE event (and unnamed events with JSON body). */
|
|
8
|
+
onMessage: (payload: NotificationWsPayload) => void;
|
|
9
|
+
/** Optional Last-Event-ID resume cursor (notification id / sequence). */
|
|
10
|
+
lastEventId?: string | null;
|
|
11
|
+
enabled?: boolean;
|
|
12
|
+
};
|
|
13
|
+
/**
|
|
14
|
+
* Subscribe to the host's SSE notification stream (`text/event-stream`).
|
|
15
|
+
* Prefer this over WebSocket for bell fan-out: auto-reconnect, Last-Event-ID,
|
|
16
|
+
* and no socket multiplexing with chat/presence.
|
|
17
|
+
*
|
|
18
|
+
* Returns an unsubscribe function. No-ops when `EventSource` is unavailable.
|
|
19
|
+
*/
|
|
20
|
+
export declare function subscribeNotificationSSE(opts: NotificationStreamOptions): () => void;
|
|
21
|
+
/**
|
|
22
|
+
* React helper: open SSE for the lifetime of the component.
|
|
23
|
+
* Prefer passing a stable `onMessage` (useCallback).
|
|
24
|
+
*/
|
|
25
|
+
export declare function useNotificationSSE(opts: NotificationStreamOptions): void;
|
|
26
|
+
//# sourceMappingURL=sse.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sse.d.ts","sourceRoot":"","sources":["../src/sse.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,SAAS,CAAA;AAEpD,MAAM,MAAM,yBAAyB,GAAG;IACtC,oEAAoE;IACpE,GAAG,EAAE,MAAM,CAAA;IACX,0FAA0F;IAC1F,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IAC3B,qFAAqF;IACrF,SAAS,EAAE,CAAC,OAAO,EAAE,qBAAqB,KAAK,IAAI,CAAA;IACnD,yEAAyE;IACzE,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IAC3B,OAAO,CAAC,EAAE,OAAO,CAAA;CAClB,CAAA;AASD;;;;;;GAMG;AACH,wBAAgB,wBAAwB,CACtC,IAAI,EAAE,yBAAyB,GAC9B,MAAM,IAAI,CAgCZ;AAED;;;GAGG;AACH,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,yBAAyB,GAAG,IAAI,CAWxE"}
|
package/dist/sse.js
ADDED
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
import { useEffect, useRef } from 'react';
|
|
2
|
+
function buildUrl(base, accessToken, lastEventId) {
|
|
3
|
+
const u = new URL(base, typeof window !== 'undefined' ? window.location.origin : 'http://local');
|
|
4
|
+
if (accessToken)
|
|
5
|
+
u.searchParams.set('access_token', accessToken);
|
|
6
|
+
if (lastEventId)
|
|
7
|
+
u.searchParams.set('last_event_id', lastEventId);
|
|
8
|
+
return u.pathname + u.search;
|
|
9
|
+
}
|
|
10
|
+
/**
|
|
11
|
+
* Subscribe to the host's SSE notification stream (`text/event-stream`).
|
|
12
|
+
* Prefer this over WebSocket for bell fan-out: auto-reconnect, Last-Event-ID,
|
|
13
|
+
* and no socket multiplexing with chat/presence.
|
|
14
|
+
*
|
|
15
|
+
* Returns an unsubscribe function. No-ops when `EventSource` is unavailable.
|
|
16
|
+
*/
|
|
17
|
+
export function subscribeNotificationSSE(opts) {
|
|
18
|
+
if (typeof window === 'undefined' || typeof EventSource === 'undefined') {
|
|
19
|
+
return () => { };
|
|
20
|
+
}
|
|
21
|
+
if (opts.enabled === false || !opts.url)
|
|
22
|
+
return () => { };
|
|
23
|
+
const url = buildUrl(opts.url, opts.accessToken, opts.lastEventId);
|
|
24
|
+
const es = new EventSource(url, { withCredentials: true });
|
|
25
|
+
const handle = (ev) => {
|
|
26
|
+
try {
|
|
27
|
+
const data = typeof ev.data === 'string' ? JSON.parse(ev.data) : ev.data;
|
|
28
|
+
if (!data || typeof data !== 'object')
|
|
29
|
+
return;
|
|
30
|
+
// Accept either bare payload or { type, payload } envelope.
|
|
31
|
+
const payload = data.type === 'NOTIFICATION' && data.payload
|
|
32
|
+
? data.payload
|
|
33
|
+
: data.title
|
|
34
|
+
? data
|
|
35
|
+
: null;
|
|
36
|
+
if (payload?.title)
|
|
37
|
+
opts.onMessage(payload);
|
|
38
|
+
}
|
|
39
|
+
catch {
|
|
40
|
+
// ignore malformed frames
|
|
41
|
+
}
|
|
42
|
+
};
|
|
43
|
+
es.addEventListener('notification', handle);
|
|
44
|
+
es.onmessage = handle;
|
|
45
|
+
return () => {
|
|
46
|
+
es.close();
|
|
47
|
+
};
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* React helper: open SSE for the lifetime of the component.
|
|
51
|
+
* Prefer passing a stable `onMessage` (useCallback).
|
|
52
|
+
*/
|
|
53
|
+
export function useNotificationSSE(opts) {
|
|
54
|
+
const onMessageRef = useRef(opts.onMessage);
|
|
55
|
+
onMessageRef.current = opts.onMessage;
|
|
56
|
+
useEffect(() => {
|
|
57
|
+
return subscribeNotificationSSE({
|
|
58
|
+
...opts,
|
|
59
|
+
onMessage: (p) => onMessageRef.current(p),
|
|
60
|
+
});
|
|
61
|
+
// eslint-disable-next-line react-hooks/exhaustive-deps -- url/token/enabled are the live deps
|
|
62
|
+
}, [opts.url, opts.accessToken, opts.lastEventId, opts.enabled]);
|
|
63
|
+
}
|
|
64
|
+
//# sourceMappingURL=sse.js.map
|
package/dist/sse.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sse.js","sourceRoot":"","sources":["../src/sse.ts"],"names":[],"mappings":"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"}
|
package/dist/toast.d.ts
ADDED
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
import type { NotificationType } from './types';
|
|
2
|
+
export type ShowNotificationToastOptions = {
|
|
3
|
+
title: string;
|
|
4
|
+
body?: string;
|
|
5
|
+
type?: NotificationType | string;
|
|
6
|
+
icon?: string;
|
|
7
|
+
image?: string;
|
|
8
|
+
/** Inventario / Almacén / POS — or pass metadata.addon_key */
|
|
9
|
+
apartado?: string;
|
|
10
|
+
metadata?: string | Record<string, unknown>;
|
|
11
|
+
addonKey?: string;
|
|
12
|
+
duration?: number;
|
|
13
|
+
onClick?: () => void;
|
|
14
|
+
/**
|
|
15
|
+
* Stable id so concurrent toasts stack instead of replacing each other.
|
|
16
|
+
* Auto-generated when omitted.
|
|
17
|
+
*/
|
|
18
|
+
id?: string | number;
|
|
19
|
+
};
|
|
20
|
+
export type PersistNotificationInput = {
|
|
21
|
+
title: string;
|
|
22
|
+
body?: string;
|
|
23
|
+
type: NotificationType;
|
|
24
|
+
icon?: string;
|
|
25
|
+
image?: string;
|
|
26
|
+
link?: string;
|
|
27
|
+
apartado?: string;
|
|
28
|
+
addonKey?: string;
|
|
29
|
+
metadata?: Record<string, unknown>;
|
|
30
|
+
};
|
|
31
|
+
export type InstallUnifiedToastsOptions = {
|
|
32
|
+
/**
|
|
33
|
+
* Persist control toasts into the bell inbox (host wires POST /api/notifications/me).
|
|
34
|
+
* Skipped when the caller passes `{ persist: false }`.
|
|
35
|
+
* Default: persist success / info / warning / error (not invoked for SSE ingest —
|
|
36
|
+
* that path uses `showNotificationToast` directly).
|
|
37
|
+
*/
|
|
38
|
+
persist?: (input: PersistNotificationInput) => void | Promise<void>;
|
|
39
|
+
/** Types that auto-persist. Default: all of success|info|warning|error. */
|
|
40
|
+
persistTypes?: NotificationType[];
|
|
41
|
+
};
|
|
42
|
+
/**
|
|
43
|
+
* Canonical in-app notification toast — same card as the bell dropdown
|
|
44
|
+
* (dynamic Lucide icon, severity color, module chip).
|
|
45
|
+
*
|
|
46
|
+
* Uses Sonner `unstyled` so the host Toaster chrome does not paint a second
|
|
47
|
+
* card behind this one.
|
|
48
|
+
*/
|
|
49
|
+
export declare function showNotificationToast(opts: ShowNotificationToastOptions): string | number;
|
|
50
|
+
/**
|
|
51
|
+
* Patch the shared sonner singleton so every `toast.success/info/warning/error`
|
|
52
|
+
* (host + Module Federation remotes) renders the same card as WS/SSE notifications.
|
|
53
|
+
* Call once at app boot (e.g. main.tsx).
|
|
54
|
+
*
|
|
55
|
+
* Pass `persist` so control toasts are written to the bell inbox (audit trail).
|
|
56
|
+
*/
|
|
57
|
+
export declare function installUnifiedToasts(options?: InstallUnifiedToastsOptions): void;
|
|
58
|
+
//# sourceMappingURL=toast.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"toast.d.ts","sourceRoot":"","sources":["../src/toast.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,SAAS,CAAA;AAE/C,MAAM,MAAM,4BAA4B,GAAG;IACzC,KAAK,EAAE,MAAM,CAAA;IACb,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,IAAI,CAAC,EAAE,gBAAgB,GAAG,MAAM,CAAA;IAChC,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,8DAA8D;IAC9D,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,QAAQ,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IAC3C,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,OAAO,CAAC,EAAE,MAAM,IAAI,CAAA;IACpB;;;OAGG;IACH,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,CAAA;CACrB,CAAA;AAED,MAAM,MAAM,wBAAwB,GAAG;IACrC,KAAK,EAAE,MAAM,CAAA;IACb,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,IAAI,EAAE,gBAAgB,CAAA;IACtB,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;CACnC,CAAA;AAED,MAAM,MAAM,2BAA2B,GAAG;IACxC;;;;;OAKG;IACH,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,wBAAwB,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;IACnE,2EAA2E;IAC3E,YAAY,CAAC,EAAE,gBAAgB,EAAE,CAAA;CAClC,CAAA;AAED;;;;;;GAMG;AACH,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,4BAA4B,GAAG,MAAM,GAAG,MAAM,CAwEzF;AAiDD;;;;;;GAMG;AACH,wBAAgB,oBAAoB,CAAC,OAAO,CAAC,EAAE,2BAA2B,GAAG,IAAI,CA4DhF"}
|
package/dist/toast.js
ADDED
|
@@ -0,0 +1,128 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { toast } from 'sonner';
|
|
3
|
+
import { resolveNotificationVisual } from './visual';
|
|
4
|
+
/**
|
|
5
|
+
* Canonical in-app notification toast — same card as the bell dropdown
|
|
6
|
+
* (dynamic Lucide icon, severity color, module chip).
|
|
7
|
+
*
|
|
8
|
+
* Uses Sonner `unstyled` so the host Toaster chrome does not paint a second
|
|
9
|
+
* card behind this one.
|
|
10
|
+
*/
|
|
11
|
+
export function showNotificationToast(opts) {
|
|
12
|
+
const meta = typeof opts.metadata === 'object' && opts.metadata
|
|
13
|
+
? { ...opts.metadata }
|
|
14
|
+
: opts.metadata;
|
|
15
|
+
const { Icon, tone, moduleLabel } = resolveNotificationVisual({
|
|
16
|
+
icon: opts.icon,
|
|
17
|
+
type: opts.type,
|
|
18
|
+
metadata: meta,
|
|
19
|
+
addonKey: opts.addonKey,
|
|
20
|
+
});
|
|
21
|
+
const apartado = (opts.apartado || moduleLabel || '').trim();
|
|
22
|
+
const duration = opts.duration ?? 5000;
|
|
23
|
+
const id = opts.id ??
|
|
24
|
+
(typeof crypto !== 'undefined' && 'randomUUID' in crypto
|
|
25
|
+
? crypto.randomUUID()
|
|
26
|
+
: `ntf-${Date.now()}-${Math.random().toString(36).slice(2, 9)}`);
|
|
27
|
+
toast.custom((tId) => (_jsxs("button", { type: 'button', className: [
|
|
28
|
+
'flex w-full min-w-[280px] max-w-[360px] items-start gap-3 rounded-xl border border-border/60 bg-card p-3 text-left shadow-lg ring-1 ring-black/5',
|
|
29
|
+
opts.onClick ? 'cursor-pointer hover:bg-accent/40' : '',
|
|
30
|
+
]
|
|
31
|
+
.filter(Boolean)
|
|
32
|
+
.join(' '), onClick: () => {
|
|
33
|
+
opts.onClick?.();
|
|
34
|
+
toast.dismiss(tId);
|
|
35
|
+
}, children: [opts.image ? (_jsx("img", { src: opts.image, alt: '', className: 'mt-0.5 h-9 w-9 shrink-0 rounded-full object-cover' })) : (_jsx("span", { className: `mt-0.5 flex h-9 w-9 shrink-0 items-center justify-center rounded-full ${tone.iconClass}`, style: tone.customColor ? { backgroundColor: tone.customColor, color: '#fff' } : undefined, children: _jsx(Icon, { className: 'h-4 w-4', "aria-hidden": true }) })), _jsxs("span", { className: 'min-w-0 flex-1', children: [apartado ? (_jsx("span", { className: 'mb-0.5 inline-flex items-center rounded-md bg-muted px-1.5 py-0.5 text-[10px] font-medium capitalize text-muted-foreground', children: apartado })) : null, _jsx("span", { className: 'block text-sm font-semibold text-foreground', children: opts.title }), opts.body ? (_jsx("span", { className: 'mt-0.5 block text-xs text-muted-foreground line-clamp-2', children: opts.body })) : null] })] })), {
|
|
36
|
+
id,
|
|
37
|
+
duration,
|
|
38
|
+
unstyled: true,
|
|
39
|
+
className: '!bg-transparent !border-0 !shadow-none !p-0 w-auto',
|
|
40
|
+
});
|
|
41
|
+
return id;
|
|
42
|
+
}
|
|
43
|
+
function extract(message, data) {
|
|
44
|
+
const title = typeof message === 'string' ? message : message == null ? 'Notificación' : String(message);
|
|
45
|
+
const body = typeof data?.description === 'string' ? data.description : undefined;
|
|
46
|
+
const meta = typeof data?.metadata === 'object' && data.metadata
|
|
47
|
+
? { ...data.metadata }
|
|
48
|
+
: typeof data?.metadata === 'string'
|
|
49
|
+
? undefined
|
|
50
|
+
: {};
|
|
51
|
+
return {
|
|
52
|
+
title,
|
|
53
|
+
body,
|
|
54
|
+
duration: typeof data?.duration === 'number' ? data.duration : undefined,
|
|
55
|
+
apartado: typeof data?.apartado === 'string' ? data.apartado : undefined,
|
|
56
|
+
icon: typeof data?.icon === 'string' ? data.icon : undefined,
|
|
57
|
+
image: typeof data?.image === 'string' ? data.image : undefined,
|
|
58
|
+
link: typeof data?.link === 'string' ? data.link : undefined,
|
|
59
|
+
metadata: meta,
|
|
60
|
+
addonKey: (typeof data?.addonKey === 'string' && data.addonKey) ||
|
|
61
|
+
(typeof data?.addon_key === 'string' && data.addon_key) ||
|
|
62
|
+
undefined,
|
|
63
|
+
persist: data?.persist,
|
|
64
|
+
id: data?.id,
|
|
65
|
+
};
|
|
66
|
+
}
|
|
67
|
+
let installed = false;
|
|
68
|
+
const DEFAULT_PERSIST_TYPES = ['success', 'info', 'warning', 'error'];
|
|
69
|
+
/**
|
|
70
|
+
* Patch the shared sonner singleton so every `toast.success/info/warning/error`
|
|
71
|
+
* (host + Module Federation remotes) renders the same card as WS/SSE notifications.
|
|
72
|
+
* Call once at app boot (e.g. main.tsx).
|
|
73
|
+
*
|
|
74
|
+
* Pass `persist` so control toasts are written to the bell inbox (audit trail).
|
|
75
|
+
*/
|
|
76
|
+
export function installUnifiedToasts(options) {
|
|
77
|
+
if (installed || typeof window === 'undefined')
|
|
78
|
+
return;
|
|
79
|
+
installed = true;
|
|
80
|
+
const persistTypes = new Set(options?.persistTypes ?? DEFAULT_PERSIST_TYPES);
|
|
81
|
+
const persistFn = options?.persist;
|
|
82
|
+
const wrap = (type, defaultIcon, defaultPersist) => (message, data) => {
|
|
83
|
+
const x = extract(message, data);
|
|
84
|
+
const toastId = showNotificationToast({
|
|
85
|
+
title: x.title,
|
|
86
|
+
body: x.body,
|
|
87
|
+
type,
|
|
88
|
+
icon: x.icon || defaultIcon,
|
|
89
|
+
image: x.image,
|
|
90
|
+
duration: x.duration,
|
|
91
|
+
apartado: x.apartado,
|
|
92
|
+
metadata: x.metadata,
|
|
93
|
+
addonKey: x.addonKey,
|
|
94
|
+
id: x.id,
|
|
95
|
+
});
|
|
96
|
+
const persistFlag = x.persist !== undefined ? x.persist : defaultPersist !== false;
|
|
97
|
+
const shouldPersist = Boolean(persistFn) && persistTypes.has(type) && persistFlag;
|
|
98
|
+
if (shouldPersist && persistFn) {
|
|
99
|
+
const meta = { ...(x.metadata || {}) };
|
|
100
|
+
meta.source = meta.source || 'toast';
|
|
101
|
+
if (x.addonKey)
|
|
102
|
+
meta.addon_key = x.addonKey;
|
|
103
|
+
if (x.apartado)
|
|
104
|
+
meta.apartado = x.apartado;
|
|
105
|
+
void Promise.resolve(persistFn({
|
|
106
|
+
title: x.title,
|
|
107
|
+
body: x.body,
|
|
108
|
+
type,
|
|
109
|
+
icon: x.icon || defaultIcon,
|
|
110
|
+
image: x.image,
|
|
111
|
+
link: x.link,
|
|
112
|
+
apartado: x.apartado,
|
|
113
|
+
addonKey: x.addonKey,
|
|
114
|
+
metadata: meta,
|
|
115
|
+
})).catch(() => {
|
|
116
|
+
/* bell persist is best-effort — never break UX toast */
|
|
117
|
+
});
|
|
118
|
+
}
|
|
119
|
+
return toastId;
|
|
120
|
+
};
|
|
121
|
+
toast.success = wrap('success', 'check-circle-2');
|
|
122
|
+
toast.info = wrap('info', 'info');
|
|
123
|
+
toast.warning = wrap('warning', 'alert-triangle');
|
|
124
|
+
toast.error = wrap('error', 'x-circle');
|
|
125
|
+
// Ephemeral by default (calls, dictation) — pass { persist: true } to archive.
|
|
126
|
+
toast.message = wrap('info', 'bell', false);
|
|
127
|
+
}
|
|
128
|
+
//# sourceMappingURL=toast.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"toast.js","sourceRoot":"","sources":["../src/toast.tsx"],"names":[],"mappings":"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"}
|
package/dist/types.d.ts
CHANGED
|
@@ -19,7 +19,8 @@ export interface NotificationItem {
|
|
|
19
19
|
link?: string;
|
|
20
20
|
icon?: string;
|
|
21
21
|
image?: string;
|
|
22
|
-
|
|
22
|
+
/** JSON string or already-parsed object (addon_key, color, …). */
|
|
23
|
+
metadata?: string | Record<string, unknown>;
|
|
23
24
|
conversation_id?: string;
|
|
24
25
|
}
|
|
25
26
|
/**
|
|
@@ -38,8 +39,7 @@ export interface NotificationsApiClient {
|
|
|
38
39
|
}>;
|
|
39
40
|
}
|
|
40
41
|
/**
|
|
41
|
-
* Shape of a
|
|
42
|
-
* of these fields; the component normalises them into a `NotificationItem`.
|
|
42
|
+
* Shape of a live `NOTIFICATION` payload (WebSocket or SSE).
|
|
43
43
|
*/
|
|
44
44
|
export interface NotificationWsPayload {
|
|
45
45
|
id?: string;
|
|
@@ -51,8 +51,13 @@ export interface NotificationWsPayload {
|
|
|
51
51
|
link?: string;
|
|
52
52
|
icon?: string;
|
|
53
53
|
image?: string;
|
|
54
|
-
metadata?: string
|
|
54
|
+
metadata?: string | Record<string, unknown>;
|
|
55
55
|
conversation_id?: string;
|
|
56
|
+
/** Optional explicit module chip (overrides metadata.addon_key map). */
|
|
57
|
+
apartado?: string;
|
|
58
|
+
addon_key?: string;
|
|
59
|
+
/** Optional CSS/hex colour for the icon disc. */
|
|
60
|
+
color?: string;
|
|
56
61
|
}
|
|
57
62
|
/**
|
|
58
63
|
* Strings used by the dropdown. Overridable for i18n. Defaults to Spanish.
|
|
@@ -106,5 +111,24 @@ export interface NotificationsDropdownProps {
|
|
|
106
111
|
* `onMessage` with every incoming `NOTIFICATION` payload.
|
|
107
112
|
*/
|
|
108
113
|
subscribeToNotifications?: (onMessage: (payload: NotificationWsPayload) => void) => void | (() => void);
|
|
114
|
+
/**
|
|
115
|
+
* Preferred live transport: Server-Sent Events URL
|
|
116
|
+
* (e.g. `/api/notifications/stream`). When set, opens EventSource in
|
|
117
|
+
* addition to (or instead of, when `subscribeToNotifications` is also
|
|
118
|
+
* omitted and `preferSse` is true) the WebSocket path.
|
|
119
|
+
*/
|
|
120
|
+
sseUrl?: string;
|
|
121
|
+
/** Bearer token for SSE (`?access_token=` — EventSource cannot set headers). */
|
|
122
|
+
sseAccessToken?: string | null;
|
|
123
|
+
/**
|
|
124
|
+
* When true (default if `sseUrl` is set), skip the built-in WebSocket hook
|
|
125
|
+
* and rely on SSE (+ optional `subscribeToNotifications`).
|
|
126
|
+
*/
|
|
127
|
+
preferSse?: boolean;
|
|
128
|
+
/**
|
|
129
|
+
* Show the canonical card toast when a live notification arrives.
|
|
130
|
+
* Default true — one visual pipeline for bell + toast.
|
|
131
|
+
*/
|
|
132
|
+
showToastOnIngest?: boolean;
|
|
109
133
|
}
|
|
110
134
|
//# sourceMappingURL=types.d.ts.map
|
package/dist/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,UAAU,CAAA;AAEtC;;;GAGG;AACH,MAAM,MAAM,gBAAgB,GAAG,MAAM,GAAG,SAAS,GAAG,SAAS,GAAG,OAAO,CAAA;AAEvE;;;;GAIG;AACH,MAAM,WAAW,gBAAgB;IAC/B,EAAE,EAAE,MAAM,CAAA;IACV,KAAK,EAAE,MAAM,CAAA;IACb,OAAO,EAAE,MAAM,CAAA;IACf,IAAI,EAAE,gBAAgB,CAAA;IACtB,OAAO,EAAE,OAAO,CAAA;IAChB,UAAU,EAAE,MAAM,CAAA;IAClB,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,QAAQ,CAAC,EAAE,MAAM,CAAA;
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
|
package/dist/visual.d.ts
ADDED
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
import type { LucideIcon } from 'lucide-react';
|
|
2
|
+
import type { NotificationType } from './types';
|
|
3
|
+
/** Convert kebab-case / snake_case to PascalCase ("shopping-cart" → "ShoppingCart"). */
|
|
4
|
+
export declare function toPascalCase(str: string): string;
|
|
5
|
+
/** Hosts can register extra addon keys without forking the package. */
|
|
6
|
+
export declare function registerModuleLabel(addonKey: string, label: string): void;
|
|
7
|
+
export type NotificationMeta = {
|
|
8
|
+
addon_key?: string;
|
|
9
|
+
apartado?: string;
|
|
10
|
+
module?: string;
|
|
11
|
+
model?: string;
|
|
12
|
+
rule?: string;
|
|
13
|
+
source?: string;
|
|
14
|
+
color?: string;
|
|
15
|
+
[key: string]: unknown;
|
|
16
|
+
};
|
|
17
|
+
export declare function parseNotificationMeta(raw?: string | NotificationMeta | null): NotificationMeta;
|
|
18
|
+
/** Chip label for Inventario / Almacén / POS / … */
|
|
19
|
+
export declare function moduleLabelFromMeta(meta: NotificationMeta): string;
|
|
20
|
+
export type NotificationTone = {
|
|
21
|
+
/** Circle behind the Lucide icon */
|
|
22
|
+
iconClass: string;
|
|
23
|
+
/** Left border on list rows */
|
|
24
|
+
rowAccentClass: string;
|
|
25
|
+
/** Optional explicit hex/css color from payload metadata.color */
|
|
26
|
+
customColor?: string;
|
|
27
|
+
};
|
|
28
|
+
export declare function resolveNotificationTone(type?: NotificationType | string | null, meta?: NotificationMeta): NotificationTone;
|
|
29
|
+
export declare function resolveNotificationIcon(icon?: string | null, type?: NotificationType | string | null): LucideIcon;
|
|
30
|
+
/** One-shot resolve for toast + list rows. */
|
|
31
|
+
export declare function resolveNotificationVisual(input: {
|
|
32
|
+
icon?: string | null;
|
|
33
|
+
type?: NotificationType | string | null;
|
|
34
|
+
metadata?: string | NotificationMeta | null;
|
|
35
|
+
addonKey?: string | null;
|
|
36
|
+
}): {
|
|
37
|
+
Icon: LucideIcon;
|
|
38
|
+
tone: NotificationTone;
|
|
39
|
+
moduleLabel: string;
|
|
40
|
+
meta: {
|
|
41
|
+
addon_key?: string;
|
|
42
|
+
apartado?: string;
|
|
43
|
+
module?: string;
|
|
44
|
+
model?: string;
|
|
45
|
+
rule?: string;
|
|
46
|
+
source?: string;
|
|
47
|
+
color?: string;
|
|
48
|
+
};
|
|
49
|
+
};
|
|
50
|
+
//# sourceMappingURL=visual.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"visual.d.ts","sourceRoot":"","sources":["../src/visual.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,cAAc,CAAA;AAE9C,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,SAAS,CAAA;AAE/C,wFAAwF;AACxF,wBAAgB,YAAY,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAMhD;AAmBD,uEAAuE;AACvE,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI,CAIzE;AAED,MAAM,MAAM,gBAAgB,GAAG;IAC7B,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAA;CACvB,CAAA;AAED,wBAAgB,qBAAqB,CAAC,GAAG,CAAC,EAAE,MAAM,GAAG,gBAAgB,GAAG,IAAI,GAAG,gBAAgB,CAS9F;AAED,oDAAoD;AACpD,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,gBAAgB,GAAG,MAAM,CAMlE;AAED,MAAM,MAAM,gBAAgB,GAAG;IAC7B,oCAAoC;IACpC,SAAS,EAAE,MAAM,CAAA;IACjB,+BAA+B;IAC/B,cAAc,EAAE,MAAM,CAAA;IACtB,kEAAkE;IAClE,WAAW,CAAC,EAAE,MAAM,CAAA;CACrB,CAAA;AAyBD,wBAAgB,uBAAuB,CACrC,IAAI,CAAC,EAAE,gBAAgB,GAAG,MAAM,GAAG,IAAI,EACvC,IAAI,CAAC,EAAE,gBAAgB,GACtB,gBAAgB,CAKlB;AAED,wBAAgB,uBAAuB,CACrC,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI,EACpB,IAAI,CAAC,EAAE,gBAAgB,GAAG,MAAM,GAAG,IAAI,GACtC,UAAU,CAgBZ;AAED,8CAA8C;AAC9C,wBAAgB,yBAAyB,CAAC,KAAK,EAAE;IAC/C,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IACpB,IAAI,CAAC,EAAE,gBAAgB,GAAG,MAAM,GAAG,IAAI,CAAA;IACvC,QAAQ,CAAC,EAAE,MAAM,GAAG,gBAAgB,GAAG,IAAI,CAAA;IAC3C,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;CACzB;;;;;oBAnGa,MAAM;mBACP,MAAM;iBACR,MAAM;gBACP,MAAM;eACP,MAAM;iBACJ,MAAM;gBACP,MAAM;;EAwGf"}
|
package/dist/visual.js
ADDED
|
@@ -0,0 +1,115 @@
|
|
|
1
|
+
import * as LucideIcons from 'lucide-react';
|
|
2
|
+
/** Convert kebab-case / snake_case to PascalCase ("shopping-cart" → "ShoppingCart"). */
|
|
3
|
+
export function toPascalCase(str) {
|
|
4
|
+
return str
|
|
5
|
+
.split(/[-_]/)
|
|
6
|
+
.filter(Boolean)
|
|
7
|
+
.map((part) => part.charAt(0).toUpperCase() + part.slice(1))
|
|
8
|
+
.join('');
|
|
9
|
+
}
|
|
10
|
+
/** Known addon → human label (bell chip / toast eyebrow). Hosts may extend via registerModuleLabel. */
|
|
11
|
+
const MODULE_LABELS = {
|
|
12
|
+
inventory: 'Inventario',
|
|
13
|
+
warehouse: 'Almacén',
|
|
14
|
+
customers: 'Clientes',
|
|
15
|
+
pos: 'POS',
|
|
16
|
+
caja: 'Caja',
|
|
17
|
+
fiscal_mexico: 'Fiscal',
|
|
18
|
+
workshop: 'Taller',
|
|
19
|
+
accounting_lite: 'Contabilidad',
|
|
20
|
+
products: 'Productos',
|
|
21
|
+
payroll: 'Nómina',
|
|
22
|
+
hr: 'RRHH',
|
|
23
|
+
vehicles: 'Vehículos',
|
|
24
|
+
tires_inventory: 'Llantas',
|
|
25
|
+
};
|
|
26
|
+
/** Hosts can register extra addon keys without forking the package. */
|
|
27
|
+
export function registerModuleLabel(addonKey, label) {
|
|
28
|
+
const k = addonKey.trim();
|
|
29
|
+
if (!k || !label.trim())
|
|
30
|
+
return;
|
|
31
|
+
MODULE_LABELS[k] = label.trim();
|
|
32
|
+
}
|
|
33
|
+
export function parseNotificationMeta(raw) {
|
|
34
|
+
if (!raw)
|
|
35
|
+
return {};
|
|
36
|
+
if (typeof raw === 'object')
|
|
37
|
+
return raw;
|
|
38
|
+
try {
|
|
39
|
+
const v = JSON.parse(raw);
|
|
40
|
+
return v && typeof v === 'object' ? v : {};
|
|
41
|
+
}
|
|
42
|
+
catch {
|
|
43
|
+
return {};
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
/** Chip label for Inventario / Almacén / POS / … */
|
|
47
|
+
export function moduleLabelFromMeta(meta) {
|
|
48
|
+
if (typeof meta.apartado === 'string' && meta.apartado.trim())
|
|
49
|
+
return meta.apartado.trim();
|
|
50
|
+
if (typeof meta.module === 'string' && meta.module.trim())
|
|
51
|
+
return meta.module.trim();
|
|
52
|
+
const key = (meta.addon_key || '').trim();
|
|
53
|
+
if (!key)
|
|
54
|
+
return '';
|
|
55
|
+
return MODULE_LABELS[key] || key.replace(/_/g, ' ');
|
|
56
|
+
}
|
|
57
|
+
const TONES = {
|
|
58
|
+
success: {
|
|
59
|
+
iconClass: 'bg-emerald-500 text-white',
|
|
60
|
+
rowAccentClass: 'border-l-emerald-500',
|
|
61
|
+
},
|
|
62
|
+
warning: {
|
|
63
|
+
iconClass: 'bg-amber-500 text-white',
|
|
64
|
+
rowAccentClass: 'border-l-amber-500',
|
|
65
|
+
},
|
|
66
|
+
error: {
|
|
67
|
+
iconClass: 'bg-red-500 text-white',
|
|
68
|
+
rowAccentClass: 'border-l-red-500',
|
|
69
|
+
},
|
|
70
|
+
info: {
|
|
71
|
+
iconClass: 'bg-primary text-primary-foreground',
|
|
72
|
+
rowAccentClass: 'border-l-primary',
|
|
73
|
+
},
|
|
74
|
+
default: {
|
|
75
|
+
iconClass: 'bg-primary text-primary-foreground',
|
|
76
|
+
rowAccentClass: 'border-l-primary',
|
|
77
|
+
},
|
|
78
|
+
};
|
|
79
|
+
export function resolveNotificationTone(type, meta) {
|
|
80
|
+
const base = TONES[type || 'info'] || TONES.default;
|
|
81
|
+
const custom = typeof meta?.color === 'string' && meta.color.trim() ? meta.color.trim() : undefined;
|
|
82
|
+
return custom ? { ...base, customColor: custom } : base;
|
|
83
|
+
}
|
|
84
|
+
export function resolveNotificationIcon(icon, type) {
|
|
85
|
+
if (icon) {
|
|
86
|
+
const Dynamic = LucideIcons[toPascalCase(icon)];
|
|
87
|
+
if (Dynamic)
|
|
88
|
+
return Dynamic;
|
|
89
|
+
}
|
|
90
|
+
switch (type) {
|
|
91
|
+
case 'warning':
|
|
92
|
+
return LucideIcons.AlertTriangle;
|
|
93
|
+
case 'success':
|
|
94
|
+
return LucideIcons.CheckCircle2;
|
|
95
|
+
case 'error':
|
|
96
|
+
return LucideIcons.XCircle;
|
|
97
|
+
case 'info':
|
|
98
|
+
default:
|
|
99
|
+
return LucideIcons.Bell;
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
/** One-shot resolve for toast + list rows. */
|
|
103
|
+
export function resolveNotificationVisual(input) {
|
|
104
|
+
const meta = {
|
|
105
|
+
...parseNotificationMeta(input.metadata),
|
|
106
|
+
...(input.addonKey ? { addon_key: input.addonKey } : {}),
|
|
107
|
+
};
|
|
108
|
+
return {
|
|
109
|
+
Icon: resolveNotificationIcon(input.icon, input.type),
|
|
110
|
+
tone: resolveNotificationTone(input.type, meta),
|
|
111
|
+
moduleLabel: moduleLabelFromMeta(meta),
|
|
112
|
+
meta,
|
|
113
|
+
};
|
|
114
|
+
}
|
|
115
|
+
//# sourceMappingURL=visual.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"visual.js","sourceRoot":"","sources":["../src/visual.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@asteby/metacore-notifications",
|
|
3
|
-
"version": "24.0.
|
|
4
|
-
"description": "Metacore notifications — dropdown,
|
|
3
|
+
"version": "24.0.2",
|
|
4
|
+
"description": "Metacore notifications — dropdown, SSE/WS live stream, unified toast, dynamic icons & module chips",
|
|
5
5
|
"license": "Apache-2.0",
|
|
6
6
|
"repository": {
|
|
7
7
|
"type": "git",
|
|
@@ -27,6 +27,18 @@
|
|
|
27
27
|
"./hooks": {
|
|
28
28
|
"types": "./dist/hooks.d.ts",
|
|
29
29
|
"import": "./dist/hooks.js"
|
|
30
|
+
},
|
|
31
|
+
"./toast": {
|
|
32
|
+
"types": "./dist/toast.d.ts",
|
|
33
|
+
"import": "./dist/toast.js"
|
|
34
|
+
},
|
|
35
|
+
"./sse": {
|
|
36
|
+
"types": "./dist/sse.d.ts",
|
|
37
|
+
"import": "./dist/sse.js"
|
|
38
|
+
},
|
|
39
|
+
"./visual": {
|
|
40
|
+
"types": "./dist/visual.d.ts",
|
|
41
|
+
"import": "./dist/visual.js"
|
|
30
42
|
}
|
|
31
43
|
},
|
|
32
44
|
"peerDependencies": {
|
|
@@ -49,8 +61,8 @@
|
|
|
49
61
|
"react-dom": "^19.2.4",
|
|
50
62
|
"sonner": "^2.0.0",
|
|
51
63
|
"typescript": "^6.0.0",
|
|
52
|
-
"@asteby/metacore-
|
|
53
|
-
"@asteby/metacore-
|
|
64
|
+
"@asteby/metacore-websocket": "0.5.0",
|
|
65
|
+
"@asteby/metacore-ui": "2.16.0"
|
|
54
66
|
},
|
|
55
67
|
"publishConfig": {
|
|
56
68
|
"access": "public"
|