@simplysm/solid 13.0.26 → 13.0.28
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/components/feedback/notification/NotificationBanner.d.ts.map +1 -1
- package/dist/components/feedback/notification/NotificationBanner.js +5 -5
- package/dist/components/feedback/notification/NotificationBanner.js.map +1 -1
- package/dist/components/feedback/notification/NotificationBell.js +3 -3
- package/dist/components/feedback/notification/NotificationBell.js.map +2 -2
- package/dist/components/feedback/notification/NotificationContext.d.ts +1 -0
- package/dist/components/feedback/notification/NotificationContext.d.ts.map +1 -1
- package/dist/components/feedback/notification/NotificationContext.js.map +1 -1
- package/dist/components/feedback/notification/NotificationProvider.d.ts.map +1 -1
- package/dist/components/feedback/notification/NotificationProvider.js +15 -0
- package/dist/components/feedback/notification/NotificationProvider.js.map +2 -2
- package/docs/feedback.md +11 -0
- package/package.json +3 -3
- package/src/components/feedback/notification/NotificationBanner.tsx +6 -7
- package/src/components/feedback/notification/NotificationBell.tsx +1 -1
- package/src/components/feedback/notification/NotificationContext.ts +3 -0
- package/src/components/feedback/notification/NotificationProvider.tsx +19 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"NotificationBanner.d.ts","sourceRoot":"","sources":["../../../../src/components/feedback/notification/NotificationBanner.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,SAAS,EAAQ,MAAM,UAAU,CAAC;
|
|
1
|
+
{"version":3,"file":"NotificationBanner.d.ts","sourceRoot":"","sources":["../../../../src/components/feedback/notification/NotificationBanner.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,SAAS,EAAQ,MAAM,UAAU,CAAC;AAsChD,eAAO,MAAM,kBAAkB,EAAE,SA2ChC,CAAC"}
|
|
@@ -5,7 +5,7 @@ import { effect as _$effect } from "solid-js/web";
|
|
|
5
5
|
import { insert as _$insert } from "solid-js/web";
|
|
6
6
|
import { className as _$className } from "solid-js/web";
|
|
7
7
|
import { createComponent as _$createComponent } from "solid-js/web";
|
|
8
|
-
var _tmpl$ = /* @__PURE__ */ _$template(`<
|
|
8
|
+
var _tmpl$ = /* @__PURE__ */ _$template(`<pre>`), _tmpl$2 = /* @__PURE__ */ _$template(`<button type=button>`), _tmpl$3 = /* @__PURE__ */ _$template(`<div data-notification-banner role=alert><div><span class=font-semibold></span></div><div><button type=button aria-label="\uC54C\uB9BC \uB2EB\uAE30">`);
|
|
9
9
|
import { Show } from "solid-js";
|
|
10
10
|
import { Portal } from "solid-js/web";
|
|
11
11
|
import clsx from "clsx";
|
|
@@ -13,16 +13,16 @@ import { IconX } from "@tabler/icons-solidjs";
|
|
|
13
13
|
import { useNotification } from "./NotificationContext.js";
|
|
14
14
|
import { Icon } from "../../display/Icon.js";
|
|
15
15
|
import { themeTokens } from "../../../styles/tokens.styles.js";
|
|
16
|
-
const baseClass = clsx("fixed", "top-4", "right-4", "z-50", "flex", "items-
|
|
16
|
+
const baseClass = clsx("fixed", "top-4", "right-4", "z-50", "flex", "items-start", "gap-4", "px-3", "py-2", "text-white", "shadow-lg", "dark:shadow-black/30", "rounded-lg", "max-w-[calc(100vw-2rem)]");
|
|
17
17
|
const themeClasses = {
|
|
18
18
|
info: themeTokens.info.solid,
|
|
19
19
|
success: themeTokens.success.solid,
|
|
20
20
|
warning: themeTokens.warning.solid,
|
|
21
21
|
danger: themeTokens.danger.solid
|
|
22
22
|
};
|
|
23
|
-
const contentClass = clsx("flex flex-col", "gap-0.5");
|
|
24
|
-
const messageClass = clsx("text-sm", "opacity-90");
|
|
25
|
-
const actionsClass = clsx("flex items-center", "gap-2");
|
|
23
|
+
const contentClass = clsx("flex flex-col", "gap-0.5", "min-w-0");
|
|
24
|
+
const messageClass = clsx("text-sm", "opacity-90", "overflow-auto");
|
|
25
|
+
const actionsClass = clsx("flex items-center", "gap-2", "shrink-0");
|
|
26
26
|
const actionButtonClass = clsx("rounded", "bg-white/20", "px-3 py-1", "text-sm", "hover:bg-white/30");
|
|
27
27
|
const dismissButtonClass = clsx("rounded", "p-1", "hover:bg-white/20");
|
|
28
28
|
const NotificationBanner = () => {
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../../src/components/feedback/notification/NotificationBanner.tsx"],
|
|
4
|
-
"mappings": ";;;;;;;;AAAA,SAAyBA,YAAY;AACrC,SAASC,cAAc;AACvB,OAAOC,UAAU;AACjB,SAASC,aAAa;AACtB,SAASC,uBAAuB;AAChC,SAASC,YAAY;AACrB,SAASC,mBAAmB;AAE5B,MAAMC,YAAYL,KAChB,SACA,SACA,WACA,QACA,QACA,
|
|
4
|
+
"mappings": "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",
|
|
5
5
|
"names": ["Show", "Portal", "clsx", "IconX", "useNotification", "Icon", "themeTokens", "baseClass", "themeClasses", "info", "solid", "success", "warning", "danger", "contentClass", "messageClass", "actionsClass", "actionButtonClass", "dismissButtonClass", "NotificationBanner", "notification", "handleDismiss", "dismissBanner", "handleAction", "latest", "latestUnread", "action", "onClick", "_$createComponent", "when", "children", "item", "_el$", "_tmpl$3", "_el$2", "firstChild", "_el$3", "_el$5", "nextSibling", "_el$7", "_$className", "_$insert", "title", "message", "_el$4", "_tmpl$", "_el$6", "_tmpl$2", "$$click", "label", "icon", "size", "_$effect", "_p$", "_v$", "theme", "_v$2", "e", "_$setAttribute", "t", "undefined", "_$delegateEvents"]
|
|
6
6
|
}
|
|
@@ -6,7 +6,7 @@ import { insert as _$insert } from "solid-js/web";
|
|
|
6
6
|
import { className as _$className } from "solid-js/web";
|
|
7
7
|
import { use as _$use } from "solid-js/web";
|
|
8
8
|
import { createComponent as _$createComponent } from "solid-js/web";
|
|
9
|
-
var _tmpl$ = /* @__PURE__ */ _$template(`<span data-notification-badge aria-hidden=true>`), _tmpl$2 = /* @__PURE__ */ _$template(`<button type=button data-notification-bell aria-haspopup=true>`), _tmpl$3 = /* @__PURE__ */ _$template(`<button type=button data-notification-clear>\uC804\uCCB4 \uC0AD\uC81C`), _tmpl$4 = /* @__PURE__ */ _$template(`<div>`), _tmpl$5 = /* @__PURE__ */ _$template(`<div class=p-2><div><span class=font-semibold>\uC54C\uB9BC`), _tmpl$6 = /* @__PURE__ */ _$template(`<div>\uC54C\uB9BC\uC774 \uC5C6\uC2B5\uB2C8\uB2E4`), _tmpl$7 = /* @__PURE__ */ _$template(`<div><div class=font-medium></div><div>`);
|
|
9
|
+
var _tmpl$ = /* @__PURE__ */ _$template(`<span data-notification-badge aria-hidden=true>`), _tmpl$2 = /* @__PURE__ */ _$template(`<button type=button data-notification-bell aria-haspopup=true>`), _tmpl$3 = /* @__PURE__ */ _$template(`<button type=button data-notification-clear>\uC804\uCCB4 \uC0AD\uC81C`), _tmpl$4 = /* @__PURE__ */ _$template(`<div>`), _tmpl$5 = /* @__PURE__ */ _$template(`<div class=p-2><div><span class=font-semibold>\uC54C\uB9BC`), _tmpl$6 = /* @__PURE__ */ _$template(`<div>\uC54C\uB9BC\uC774 \uC5C6\uC2B5\uB2C8\uB2E4`), _tmpl$7 = /* @__PURE__ */ _$template(`<pre>`), _tmpl$8 = /* @__PURE__ */ _$template(`<div><div class=font-medium></div><div>`);
|
|
10
10
|
import { createSignal, For, Show } from "solid-js";
|
|
11
11
|
import { IconBell } from "@tabler/icons-solidjs";
|
|
12
12
|
import clsx from "clsx";
|
|
@@ -120,14 +120,14 @@ const NotificationBell = (props) => {
|
|
|
120
120
|
return [...notification.items()].reverse();
|
|
121
121
|
},
|
|
122
122
|
children: (item) => (() => {
|
|
123
|
-
var _el$9 = _tmpl$
|
|
123
|
+
var _el$9 = _tmpl$8(), _el$0 = _el$9.firstChild, _el$10 = _el$0.nextSibling;
|
|
124
124
|
_$insert(_el$0, () => item.title);
|
|
125
125
|
_$insert(_el$9, _$createComponent(Show, {
|
|
126
126
|
get when() {
|
|
127
127
|
return item.message;
|
|
128
128
|
},
|
|
129
129
|
get children() {
|
|
130
|
-
var _el$1 = _tmpl$
|
|
130
|
+
var _el$1 = _tmpl$7();
|
|
131
131
|
_$className(_el$1, itemMessageClass);
|
|
132
132
|
_$insert(_el$1, () => item.message);
|
|
133
133
|
return _el$1;
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../../src/components/feedback/notification/NotificationBell.tsx"],
|
|
4
|
-
"mappings": "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
|
|
5
|
-
"names": ["createSignal", "For", "Show", "IconBell", "clsx", "useNotification", "Dropdown", "Icon", "NotificationBanner", "buttonClass", "badgeClass", "themeStyles", "info", "success", "warning", "danger", "dropdownHeaderClass", "clearButtonClass", "emptyClass", "listClass", "itemBaseClass", "itemMessageClass", "itemTimeClass", "NotificationBell", "props", "notification", "open", "setOpen", "buttonRef", "handleClear", "clear", "handleOpenChange", "isOpen", "markAllAsRead", "_$createComponent", "when", "showBanner", "children", "_el$", "_tmpl$2", "$$click", "_$use", "el", "_$className", "_$insert", "icon", "unreadCount", "_el$2", "_tmpl$", "_$effect", "_p$", "_v$", "_v$2", "e", "_$setAttribute", "t", "undefined", "triggerRef", "onOpenChange", "maxHeight", "_el$3", "_tmpl$5", "_el$4", "firstChild", "_el$5", "items", "length", "_el$6", "_tmpl$3", "fallback", "_el$8", "_tmpl$6", "_el$7", "_tmpl$4", "each", "reverse", "item", "_el$9", "_tmpl$
|
|
4
|
+
"mappings": "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",
|
|
5
|
+
"names": ["createSignal", "For", "Show", "IconBell", "clsx", "useNotification", "Dropdown", "Icon", "NotificationBanner", "buttonClass", "badgeClass", "themeStyles", "info", "success", "warning", "danger", "dropdownHeaderClass", "clearButtonClass", "emptyClass", "listClass", "itemBaseClass", "itemMessageClass", "itemTimeClass", "NotificationBell", "props", "notification", "open", "setOpen", "buttonRef", "handleClear", "clear", "handleOpenChange", "isOpen", "markAllAsRead", "_$createComponent", "when", "showBanner", "children", "_el$", "_tmpl$2", "$$click", "_$use", "el", "_$className", "_$insert", "icon", "unreadCount", "_el$2", "_tmpl$", "_$effect", "_p$", "_v$", "_v$2", "e", "_$setAttribute", "t", "undefined", "triggerRef", "onOpenChange", "maxHeight", "_el$3", "_tmpl$5", "_el$4", "firstChild", "_el$5", "items", "length", "_el$6", "_tmpl$3", "fallback", "_el$8", "_tmpl$6", "_el$7", "_tmpl$4", "each", "reverse", "item", "_el$9", "_tmpl$8", "_el$0", "_el$10", "nextSibling", "title", "message", "_el$1", "_tmpl$7", "createdAt", "toLocaleTimeString", "theme", "_$delegateEvents"]
|
|
6
6
|
}
|
|
@@ -27,6 +27,7 @@ export interface NotificationContextValue {
|
|
|
27
27
|
success: (title: string, message?: string, options?: NotificationOptions) => string;
|
|
28
28
|
warning: (title: string, message?: string, options?: NotificationOptions) => string;
|
|
29
29
|
danger: (title: string, message?: string, options?: NotificationOptions) => string;
|
|
30
|
+
try: <TResult>(fn: () => Promise<TResult> | TResult, header?: string) => Promise<TResult | undefined>;
|
|
30
31
|
update: (id: string, updates: Partial<Pick<NotificationItem, "title" | "message" | "theme" | "action">>, options?: NotificationUpdateOptions) => void;
|
|
31
32
|
remove: (id: string) => void;
|
|
32
33
|
markAsRead: (id: string) => void;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"NotificationContext.d.ts","sourceRoot":"","sources":["../../../../src/components/feedback/notification/NotificationContext.ts"],"names":[],"mappings":"AAAA,OAAO,EAA6B,KAAK,QAAQ,EAAE,MAAM,UAAU,CAAC;AAEpE,MAAM,MAAM,iBAAiB,GAAG,MAAM,GAAG,SAAS,GAAG,SAAS,GAAG,QAAQ,CAAC;AAE1E,MAAM,WAAW,kBAAkB;IACjC,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,IAAI,CAAC;CACrB;AAED,MAAM,WAAW,gBAAgB;IAC/B,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,iBAAiB,CAAC;IACzB,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,kBAAkB,CAAC;IAC5B,SAAS,EAAE,IAAI,CAAC;IAChB,IAAI,EAAE,OAAO,CAAC;CACf;AAED,MAAM,WAAW,mBAAmB;IAClC,MAAM,CAAC,EAAE,kBAAkB,CAAC;CAC7B;AAED,MAAM,WAAW,yBAAyB;IACxC,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED,MAAM,WAAW,wBAAwB;IAEvC,KAAK,EAAE,QAAQ,CAAC,gBAAgB,EAAE,CAAC,CAAC;IACpC,WAAW,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC;IAC9B,YAAY,EAAE,QAAQ,CAAC,gBAAgB,GAAG,SAAS,CAAC,CAAC;IAGrD,IAAI,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,mBAAmB,KAAK,MAAM,CAAC;IACjF,OAAO,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,mBAAmB,KAAK,MAAM,CAAC;IACpF,OAAO,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,mBAAmB,KAAK,MAAM,CAAC;IACpF,MAAM,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,mBAAmB,KAAK,MAAM,CAAC;IAGnF,MAAM,EAAE,CACN,EAAE,EAAE,MAAM,EACV,OAAO,EAAE,OAAO,CAAC,IAAI,CAAC,gBAAgB,EAAE,OAAO,GAAG,SAAS,GAAG,OAAO,GAAG,QAAQ,CAAC,CAAC,EAClF,OAAO,CAAC,EAAE,yBAAyB,KAChC,IAAI,CAAC;IAGV,MAAM,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,IAAI,CAAC;IAG7B,UAAU,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,IAAI,CAAC;IACjC,aAAa,EAAE,MAAM,IAAI,CAAC;IAC1B,aAAa,EAAE,MAAM,IAAI,CAAC;IAC1B,KAAK,EAAE,MAAM,IAAI,CAAC;CACnB;AAED,eAAO,MAAM,mBAAmB,kEAA4C,CAAC;AAE7E,wBAAgB,eAAe,IAAI,wBAAwB,CAM1D"}
|
|
1
|
+
{"version":3,"file":"NotificationContext.d.ts","sourceRoot":"","sources":["../../../../src/components/feedback/notification/NotificationContext.ts"],"names":[],"mappings":"AAAA,OAAO,EAA6B,KAAK,QAAQ,EAAE,MAAM,UAAU,CAAC;AAEpE,MAAM,MAAM,iBAAiB,GAAG,MAAM,GAAG,SAAS,GAAG,SAAS,GAAG,QAAQ,CAAC;AAE1E,MAAM,WAAW,kBAAkB;IACjC,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,IAAI,CAAC;CACrB;AAED,MAAM,WAAW,gBAAgB;IAC/B,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,iBAAiB,CAAC;IACzB,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,kBAAkB,CAAC;IAC5B,SAAS,EAAE,IAAI,CAAC;IAChB,IAAI,EAAE,OAAO,CAAC;CACf;AAED,MAAM,WAAW,mBAAmB;IAClC,MAAM,CAAC,EAAE,kBAAkB,CAAC;CAC7B;AAED,MAAM,WAAW,yBAAyB;IACxC,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED,MAAM,WAAW,wBAAwB;IAEvC,KAAK,EAAE,QAAQ,CAAC,gBAAgB,EAAE,CAAC,CAAC;IACpC,WAAW,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC;IAC9B,YAAY,EAAE,QAAQ,CAAC,gBAAgB,GAAG,SAAS,CAAC,CAAC;IAGrD,IAAI,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,mBAAmB,KAAK,MAAM,CAAC;IACjF,OAAO,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,mBAAmB,KAAK,MAAM,CAAC;IACpF,OAAO,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,mBAAmB,KAAK,MAAM,CAAC;IACpF,MAAM,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,mBAAmB,KAAK,MAAM,CAAC;IAGnF,GAAG,EAAE,CAAC,OAAO,EAAE,EAAE,EAAE,MAAM,OAAO,CAAC,OAAO,CAAC,GAAG,OAAO,EAAE,MAAM,CAAC,EAAE,MAAM,KAAK,OAAO,CAAC,OAAO,GAAG,SAAS,CAAC,CAAC;IAGtG,MAAM,EAAE,CACN,EAAE,EAAE,MAAM,EACV,OAAO,EAAE,OAAO,CAAC,IAAI,CAAC,gBAAgB,EAAE,OAAO,GAAG,SAAS,GAAG,OAAO,GAAG,QAAQ,CAAC,CAAC,EAClF,OAAO,CAAC,EAAE,yBAAyB,KAChC,IAAI,CAAC;IAGV,MAAM,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,IAAI,CAAC;IAG7B,UAAU,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,IAAI,CAAC;IACjC,aAAa,EAAE,MAAM,IAAI,CAAC;IAC1B,aAAa,EAAE,MAAM,IAAI,CAAC;IAC1B,KAAK,EAAE,MAAM,IAAI,CAAC;CACnB;AAED,eAAO,MAAM,mBAAmB,kEAA4C,CAAC;AAE7E,wBAAgB,eAAe,IAAI,wBAAwB,CAM1D"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../../src/components/feedback/notification/NotificationContext.ts"],
|
|
4
|
-
"mappings": "AAAA,SAAS,eAAe,kBAAiC;
|
|
4
|
+
"mappings": "AAAA,SAAS,eAAe,kBAAiC;AA2DlD,MAAM,sBAAsB,cAAwC;AAEpE,SAAS,kBAA4C;AAC1D,QAAM,UAAU,WAAW,mBAAmB;AAC9C,MAAI,CAAC,SAAS;AACZ,UAAM,IAAI,MAAM,8HAAwD;AAAA,EAC1E;AACA,SAAO;AACT;",
|
|
5
5
|
"names": []
|
|
6
6
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"NotificationProvider.d.ts","sourceRoot":"","sources":["../../../../src/components/feedback/notification/NotificationProvider.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,eAAe,EAAkC,MAAM,UAAU,CAAC;
|
|
1
|
+
{"version":3,"file":"NotificationProvider.d.ts","sourceRoot":"","sources":["../../../../src/components/feedback/notification/NotificationProvider.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,eAAe,EAAkC,MAAM,UAAU,CAAC;AAahF,eAAO,MAAM,oBAAoB,EAAE,eAoJlC,CAAC"}
|
|
@@ -5,8 +5,10 @@ import { createComponent as _$createComponent } from "solid-js/web";
|
|
|
5
5
|
var _tmpl$ = /* @__PURE__ */ _$template(`<div role=status aria-live=polite aria-atomic=true class=sr-only>`);
|
|
6
6
|
import { createSignal, createMemo, Show } from "solid-js";
|
|
7
7
|
import { NotificationContext } from "./NotificationContext.js";
|
|
8
|
+
import { useLogger } from "../../../hooks/useLogger.js";
|
|
8
9
|
const MAX_ITEMS = 50;
|
|
9
10
|
const NotificationProvider = (props) => {
|
|
11
|
+
const logger = useLogger();
|
|
10
12
|
const [items, setItems] = createSignal([]);
|
|
11
13
|
const [dismissedBannerId, setDismissedBannerId] = createSignal(null);
|
|
12
14
|
const unreadItems = createMemo(() => items().filter((i) => !i.read));
|
|
@@ -49,6 +51,18 @@ const NotificationProvider = (props) => {
|
|
|
49
51
|
const danger = (title, message, options) => {
|
|
50
52
|
return addNotification("danger", title, message, options);
|
|
51
53
|
};
|
|
54
|
+
const tryFn = async (fn, header) => {
|
|
55
|
+
try {
|
|
56
|
+
return await fn();
|
|
57
|
+
} catch (err) {
|
|
58
|
+
if (err instanceof Error) {
|
|
59
|
+
danger(header ?? err.message, header != null ? err.message : void 0);
|
|
60
|
+
logger.error(err.stack ?? err.message);
|
|
61
|
+
return void 0;
|
|
62
|
+
}
|
|
63
|
+
throw err;
|
|
64
|
+
}
|
|
65
|
+
};
|
|
52
66
|
const update = (id, updates, options) => {
|
|
53
67
|
setItems((prev) => prev.map((item) => {
|
|
54
68
|
if (item.id !== id) return item;
|
|
@@ -96,6 +110,7 @@ const NotificationProvider = (props) => {
|
|
|
96
110
|
success,
|
|
97
111
|
warning,
|
|
98
112
|
danger,
|
|
113
|
+
try: tryFn,
|
|
99
114
|
update,
|
|
100
115
|
remove,
|
|
101
116
|
markAsRead,
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../../src/components/feedback/notification/NotificationProvider.tsx"],
|
|
4
|
-
"mappings": ";;;;;AAAA,SAA+BA,cAAcC,YAAYC,YAAY;AACrE,SACEC,2BAMK;
|
|
5
|
-
"names": ["createSignal", "createMemo", "Show", "NotificationContext", "MAX_ITEMS", "NotificationProvider", "props", "items", "setItems", "dismissedBannerId", "setDismissedBannerId", "unreadItems", "filter", "i", "read", "unreadCount", "length", "latestUnread", "latest", "at", "undefined", "id", "addNotification", "theme", "title", "message", "options", "crypto", "randomUUID", "newItem", "action", "createdAt", "Date", "prev", "updated", "slice", "info", "success", "warning", "danger", "update", "updates", "map", "item", "renotify", "remove", "markAsRead", "markAllAsRead", "dismissBanner", "clear", "contextValue", "_$createComponent", "Provider", "value", "children", "_el$", "_tmpl$", "_$insert", "when", "_$memo"]
|
|
4
|
+
"mappings": "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",
|
|
5
|
+
"names": ["createSignal", "createMemo", "Show", "NotificationContext", "useLogger", "MAX_ITEMS", "NotificationProvider", "props", "logger", "items", "setItems", "dismissedBannerId", "setDismissedBannerId", "unreadItems", "filter", "i", "read", "unreadCount", "length", "latestUnread", "latest", "at", "undefined", "id", "addNotification", "theme", "title", "message", "options", "crypto", "randomUUID", "newItem", "action", "createdAt", "Date", "prev", "updated", "slice", "info", "success", "warning", "danger", "tryFn", "fn", "header", "err", "Error", "error", "stack", "update", "updates", "map", "item", "renotify", "remove", "markAsRead", "markAllAsRead", "dismissBanner", "clear", "contextValue", "try", "_$createComponent", "Provider", "value", "children", "_el$", "_tmpl$", "_$insert", "when", "_$memo"]
|
|
6
6
|
}
|
package/docs/feedback.md
CHANGED
|
@@ -24,6 +24,16 @@ function MyComponent() {
|
|
|
24
24
|
});
|
|
25
25
|
};
|
|
26
26
|
|
|
27
|
+
// Automatic error handling with try
|
|
28
|
+
const handleLoad = async () => {
|
|
29
|
+
const data = await notification.try(
|
|
30
|
+
async () => await fetchData(),
|
|
31
|
+
"Failed to load data", // optional header
|
|
32
|
+
);
|
|
33
|
+
// On error: shows danger notification with header + err.message,
|
|
34
|
+
// logs err.stack, returns undefined
|
|
35
|
+
};
|
|
36
|
+
|
|
27
37
|
return <Button onClick={handleSave}>Save</Button>;
|
|
28
38
|
}
|
|
29
39
|
```
|
|
@@ -36,6 +46,7 @@ function MyComponent() {
|
|
|
36
46
|
| `success` | `(title: string, message?: string, options?: NotificationOptions) => string` | Success notification |
|
|
37
47
|
| `warning` | `(title: string, message?: string, options?: NotificationOptions) => string` | Warning notification |
|
|
38
48
|
| `danger` | `(title: string, message?: string, options?: NotificationOptions) => string` | Error notification |
|
|
49
|
+
| `try` | `<TResult>(fn: () => Promise<TResult> \| TResult, header?: string) => Promise<TResult \| undefined>` | Execute function with automatic error handling (shows danger notification + logs to `useLogger`) |
|
|
39
50
|
| `update` | `(id: string, updates: Partial<NotificationItem>, options?: { renotify?: boolean }) => void` | Update notification |
|
|
40
51
|
| `remove` | `(id: string) => void` | Remove notification |
|
|
41
52
|
| `markAsRead` | `(id: string) => void` | Mark as read |
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@simplysm/solid",
|
|
3
|
-
"version": "13.0.
|
|
3
|
+
"version": "13.0.28",
|
|
4
4
|
"description": "심플리즘 패키지 - SolidJS 라이브러리",
|
|
5
5
|
"author": "김석래",
|
|
6
6
|
"license": "Apache-2.0",
|
|
@@ -49,8 +49,8 @@
|
|
|
49
49
|
"solid-tiptap": "^0.8.0",
|
|
50
50
|
"tailwind-merge": "^3.4.1",
|
|
51
51
|
"tailwindcss": "^3.4.19",
|
|
52
|
-
"@simplysm/core-browser": "13.0.
|
|
53
|
-
"@simplysm/core-common": "13.0.
|
|
52
|
+
"@simplysm/core-browser": "13.0.28",
|
|
53
|
+
"@simplysm/core-common": "13.0.28"
|
|
54
54
|
},
|
|
55
55
|
"devDependencies": {
|
|
56
56
|
"@solidjs/testing-library": "^0.8.10"
|
|
@@ -12,8 +12,7 @@ const baseClass = clsx(
|
|
|
12
12
|
"right-4",
|
|
13
13
|
"z-50",
|
|
14
14
|
"flex",
|
|
15
|
-
"items-
|
|
16
|
-
"justify-between",
|
|
15
|
+
"items-start",
|
|
17
16
|
"gap-4",
|
|
18
17
|
"px-3",
|
|
19
18
|
"py-2",
|
|
@@ -21,7 +20,7 @@ const baseClass = clsx(
|
|
|
21
20
|
"shadow-lg",
|
|
22
21
|
"dark:shadow-black/30",
|
|
23
22
|
"rounded-lg",
|
|
24
|
-
"max-w-
|
|
23
|
+
"max-w-[calc(100vw-2rem)]",
|
|
25
24
|
);
|
|
26
25
|
|
|
27
26
|
const themeClasses: Record<string, string> = {
|
|
@@ -31,9 +30,9 @@ const themeClasses: Record<string, string> = {
|
|
|
31
30
|
danger: themeTokens.danger.solid,
|
|
32
31
|
};
|
|
33
32
|
|
|
34
|
-
const contentClass = clsx("flex flex-col", "gap-0.5");
|
|
35
|
-
const messageClass = clsx("text-sm", "opacity-90");
|
|
36
|
-
const actionsClass = clsx("flex items-center", "gap-2");
|
|
33
|
+
const contentClass = clsx("flex flex-col", "gap-0.5", "min-w-0");
|
|
34
|
+
const messageClass = clsx("text-sm", "opacity-90", "overflow-auto");
|
|
35
|
+
const actionsClass = clsx("flex items-center", "gap-2", "shrink-0");
|
|
37
36
|
const actionButtonClass = clsx("rounded", "bg-white/20", "px-3 py-1", "text-sm", "hover:bg-white/30");
|
|
38
37
|
const dismissButtonClass = clsx("rounded", "p-1", "hover:bg-white/20");
|
|
39
38
|
|
|
@@ -62,7 +61,7 @@ export const NotificationBanner: Component = () => {
|
|
|
62
61
|
<div class={contentClass}>
|
|
63
62
|
<span class="font-semibold">{item().title}</span>
|
|
64
63
|
<Show when={item().message}>
|
|
65
|
-
<
|
|
64
|
+
<pre class={messageClass}>{item().message}</pre>
|
|
66
65
|
</Show>
|
|
67
66
|
</div>
|
|
68
67
|
<div class={actionsClass}>
|
|
@@ -117,7 +117,7 @@ export const NotificationBell: Component<NotificationBellProps> = (props) => {
|
|
|
117
117
|
<div class={clsx(itemBaseClass, themeStyles[item.theme])}>
|
|
118
118
|
<div class="font-medium">{item.title}</div>
|
|
119
119
|
<Show when={item.message}>
|
|
120
|
-
<
|
|
120
|
+
<pre class={itemMessageClass}>{item.message}</pre>
|
|
121
121
|
</Show>
|
|
122
122
|
<div class={itemTimeClass}>{item.createdAt.toLocaleTimeString()}</div>
|
|
123
123
|
</div>
|
|
@@ -37,6 +37,9 @@ export interface NotificationContextValue {
|
|
|
37
37
|
warning: (title: string, message?: string, options?: NotificationOptions) => string;
|
|
38
38
|
danger: (title: string, message?: string, options?: NotificationOptions) => string;
|
|
39
39
|
|
|
40
|
+
// 에러 처리 (danger 알림 + 로깅)
|
|
41
|
+
try: <TResult>(fn: () => Promise<TResult> | TResult, header?: string) => Promise<TResult | undefined>;
|
|
42
|
+
|
|
40
43
|
// 알림 수정
|
|
41
44
|
update: (
|
|
42
45
|
id: string,
|
|
@@ -7,10 +7,12 @@ import {
|
|
|
7
7
|
type NotificationTheme,
|
|
8
8
|
type NotificationUpdateOptions,
|
|
9
9
|
} from "./NotificationContext";
|
|
10
|
+
import { useLogger } from "../../../hooks/useLogger";
|
|
10
11
|
|
|
11
12
|
const MAX_ITEMS = 50;
|
|
12
13
|
|
|
13
14
|
export const NotificationProvider: ParentComponent = (props) => {
|
|
15
|
+
const logger = useLogger();
|
|
14
16
|
const [items, setItems] = createSignal<NotificationItem[]>([]);
|
|
15
17
|
const [dismissedBannerId, setDismissedBannerId] = createSignal<string | null>(null);
|
|
16
18
|
|
|
@@ -68,6 +70,22 @@ export const NotificationProvider: ParentComponent = (props) => {
|
|
|
68
70
|
return addNotification("danger", title, message, options);
|
|
69
71
|
};
|
|
70
72
|
|
|
73
|
+
const tryFn = async <TResult,>(
|
|
74
|
+
fn: () => Promise<TResult> | TResult,
|
|
75
|
+
header?: string,
|
|
76
|
+
): Promise<TResult | undefined> => {
|
|
77
|
+
try {
|
|
78
|
+
return await fn();
|
|
79
|
+
} catch (err) {
|
|
80
|
+
if (err instanceof Error) {
|
|
81
|
+
danger(header ?? err.message, header != null ? err.message : undefined);
|
|
82
|
+
logger.error(err.stack ?? err.message);
|
|
83
|
+
return undefined;
|
|
84
|
+
}
|
|
85
|
+
throw err;
|
|
86
|
+
}
|
|
87
|
+
};
|
|
88
|
+
|
|
71
89
|
const update = (
|
|
72
90
|
id: string,
|
|
73
91
|
updates: Partial<Pick<NotificationItem, "title" | "message" | "theme" | "action">>,
|
|
@@ -123,6 +141,7 @@ export const NotificationProvider: ParentComponent = (props) => {
|
|
|
123
141
|
success,
|
|
124
142
|
warning,
|
|
125
143
|
danger,
|
|
144
|
+
try: tryFn,
|
|
126
145
|
update,
|
|
127
146
|
remove,
|
|
128
147
|
markAsRead,
|