@simplysm/solid 13.0.57 → 13.0.58
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/data/crud-detail/CrudDetail.d.ts.map +1 -1
- package/dist/components/data/crud-detail/CrudDetail.js +55 -42
- package/dist/components/data/crud-detail/CrudDetail.js.map +2 -2
- package/dist/components/data/crud-sheet/CrudSheet.d.ts.map +1 -1
- package/dist/components/data/crud-sheet/CrudSheet.js +112 -83
- package/dist/components/data/crud-sheet/CrudSheet.js.map +2 -2
- package/dist/components/data/crud-sheet/CrudSheetColumn.js +1 -1
- package/dist/components/data/crud-sheet/CrudSheetColumn.js.map +2 -2
- package/dist/components/data/crud-sheet/types.d.ts +3 -2
- package/dist/components/data/crud-sheet/types.d.ts.map +1 -1
- package/dist/components/data/sheet/DataSheet.styles.d.ts.map +1 -1
- package/dist/components/data/sheet/DataSheet.styles.js +3 -8
- package/dist/components/data/sheet/DataSheet.styles.js.map +1 -1
- package/dist/components/disclosure/Dialog.d.ts.map +1 -1
- package/dist/components/disclosure/Dialog.js +33 -23
- package/dist/components/disclosure/Dialog.js.map +2 -2
- package/dist/components/display/Icon.js +1 -1
- package/dist/components/display/Icon.js.map +1 -1
- package/dist/components/feedback/notification/NotificationBanner.js +1 -1
- package/dist/components/feedback/notification/NotificationBanner.js.map +1 -1
- package/dist/components/feedback/notification/NotificationContext.d.ts +1 -1
- 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 +8 -12
- package/dist/components/feedback/notification/NotificationProvider.js.map +2 -2
- package/docs/feedback.md +9 -8
- package/package.json +3 -3
- package/src/components/data/crud-detail/CrudDetail.tsx +45 -40
- package/src/components/data/crud-sheet/CrudSheet.tsx +91 -92
- package/src/components/data/crud-sheet/CrudSheetColumn.tsx +1 -1
- package/src/components/data/crud-sheet/types.ts +3 -2
- package/src/components/data/sheet/DataSheet.styles.ts +3 -8
- package/src/components/disclosure/Dialog.tsx +23 -20
- package/src/components/display/Icon.tsx +1 -1
- package/src/components/feedback/notification/NotificationBanner.tsx +1 -1
- package/src/components/feedback/notification/NotificationContext.ts +2 -7
- package/src/components/feedback/notification/NotificationProvider.tsx +8 -15
- package/tailwind.config.ts +1 -0
|
@@ -8,8 +8,8 @@ import { createComponent as _$createComponent } from "solid-js/web";
|
|
|
8
8
|
import { className as _$className } from "solid-js/web";
|
|
9
9
|
import { effect as _$effect } from "solid-js/web";
|
|
10
10
|
import { use as _$use } from "solid-js/web";
|
|
11
|
-
var _tmpl$ = /* @__PURE__ */ _$template(`<div data-modal-backdrop>`), _tmpl$2 = /* @__PURE__ */ _$template(`<
|
|
12
|
-
import { createContext, createEffect, createUniqueId, onCleanup, Show, splitProps,
|
|
11
|
+
var _tmpl$ = /* @__PURE__ */ _$template(`<div data-modal-backdrop>`), _tmpl$2 = /* @__PURE__ */ _$template(`<div data-modal-header><h5>`), _tmpl$3 = /* @__PURE__ */ _$template(`<div data-modal><div data-modal-dialog role=dialog tabindex=0><div data-modal-content>`), _tmpl$4 = /* @__PURE__ */ _$template(`<div>`);
|
|
12
|
+
import { createContext, createEffect, createSignal, createUniqueId, For, onCleanup, Show, splitProps, useContext } from "solid-js";
|
|
13
13
|
import { Portal } from "solid-js/web";
|
|
14
14
|
import clsx from "clsx";
|
|
15
15
|
import { twMerge } from "tailwind-merge";
|
|
@@ -21,7 +21,8 @@ import { mergeStyles } from "../../helpers/mergeStyles.js";
|
|
|
21
21
|
import { Icon } from "../display/Icon.js";
|
|
22
22
|
import { borderSubtle } from "../../styles/tokens.styles.js";
|
|
23
23
|
import { DialogDefaultsContext } from "./DialogContext.js";
|
|
24
|
-
import { registerDialog, unregisterDialog
|
|
24
|
+
import { bringToFront, registerDialog, unregisterDialog } from "./dialogZIndex.js";
|
|
25
|
+
import { Button } from "../form-control/Button.js";
|
|
25
26
|
const DialogSlotsContext = createContext();
|
|
26
27
|
const DialogHeader = (props) => {
|
|
27
28
|
const ctx = useContext(DialogSlotsContext);
|
|
@@ -83,10 +84,16 @@ const Dialog = (props) => {
|
|
|
83
84
|
unmount();
|
|
84
85
|
(_a = local.onCloseComplete) == null ? void 0 : _a.call(local);
|
|
85
86
|
};
|
|
87
|
+
let wasMounted = false;
|
|
86
88
|
createEffect(() => {
|
|
87
89
|
if (open()) {
|
|
88
90
|
closeCompleteEmitted = false;
|
|
89
91
|
}
|
|
92
|
+
if (mounted()) {
|
|
93
|
+
wasMounted = true;
|
|
94
|
+
} else if (wasMounted) {
|
|
95
|
+
emitCloseComplete();
|
|
96
|
+
}
|
|
90
97
|
});
|
|
91
98
|
let dialogRef;
|
|
92
99
|
const [wrapperRef, setWrapperRef] = createSignal();
|
|
@@ -260,7 +267,7 @@ const Dialog = (props) => {
|
|
|
260
267
|
clsx("absolute bottom-0 left-0 right-0 top-0", "bg-black/30", "dark:bg-black/50", "transition-opacity", "duration-200", "ease-out", animating() ? "opacity-100" : "opacity-0")
|
|
261
268
|
);
|
|
262
269
|
const dialogBaseClass = () => clsx("relative", "mx-auto", "w-fit min-w-[200px]", "bg-white dark:bg-base-800", local.float ? clsx("shadow-md dark:shadow-black/30", "border", borderSubtle) : "shadow-2xl dark:shadow-black/40", local.fill ? "rounded-none border-none" : "rounded-lg", "overflow-hidden", "flex flex-col", "focus:outline-none", local.float && "pointer-events-auto", animationClass());
|
|
263
|
-
const headerClass = () => clsx("flex items-center", "select-none", "border-b", borderSubtle);
|
|
270
|
+
const headerClass = () => clsx("flex items-center gap-2", "px-3 py-1", "select-none", "border-b", borderSubtle);
|
|
264
271
|
return _$createComponent(Show, {
|
|
265
272
|
get when() {
|
|
266
273
|
return mounted();
|
|
@@ -274,7 +281,7 @@ const Dialog = (props) => {
|
|
|
274
281
|
setAction
|
|
275
282
|
},
|
|
276
283
|
get children() {
|
|
277
|
-
var _el$ = _tmpl$
|
|
284
|
+
var _el$ = _tmpl$3(), _el$3 = _el$.firstChild, _el$6 = _el$3.firstChild;
|
|
278
285
|
_$use(setWrapperRef, _el$);
|
|
279
286
|
_$insert(_el$, _$createComponent(Show, {
|
|
280
287
|
get when() {
|
|
@@ -297,7 +304,7 @@ const Dialog = (props) => {
|
|
|
297
304
|
return hasHeader();
|
|
298
305
|
},
|
|
299
306
|
get children() {
|
|
300
|
-
var _el$4 = _tmpl$
|
|
307
|
+
var _el$4 = _tmpl$2(), _el$5 = _el$4.firstChild;
|
|
301
308
|
_el$4.$$pointerdown = handleHeaderPointerDown;
|
|
302
309
|
_$setAttribute(_el$5, "id", headerId);
|
|
303
310
|
_$insert(_el$5, header());
|
|
@@ -314,18 +321,21 @@ const Dialog = (props) => {
|
|
|
314
321
|
return local.closable ?? true;
|
|
315
322
|
},
|
|
316
323
|
get children() {
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
|
|
322
|
-
|
|
323
|
-
|
|
324
|
-
|
|
324
|
+
return _$createComponent(Button, {
|
|
325
|
+
"data-modal-close": true,
|
|
326
|
+
size: "sm",
|
|
327
|
+
variant: "ghost",
|
|
328
|
+
onClick: handleCloseClick,
|
|
329
|
+
get children() {
|
|
330
|
+
return _$createComponent(Icon, {
|
|
331
|
+
icon: IconX
|
|
332
|
+
});
|
|
333
|
+
}
|
|
334
|
+
});
|
|
325
335
|
}
|
|
326
336
|
}), null);
|
|
327
337
|
_$effect((_p$) => {
|
|
328
|
-
var _v$ = clsx(headerClass(), "touch-none"), _v$2 = typeof local.headerStyle === "string" ? mergeStyles(local.headerStyle) : local.headerStyle, _v$3 = clsx("flex-1
|
|
338
|
+
var _v$ = clsx(headerClass(), "touch-none"), _v$2 = typeof local.headerStyle === "string" ? mergeStyles(local.headerStyle) : local.headerStyle, _v$3 = clsx("flex-1 font-bold");
|
|
329
339
|
_v$ !== _p$.e && _$className(_el$4, _p$.e = _v$);
|
|
330
340
|
_p$.t = _$style(_el$4, _v$2, _p$.t);
|
|
331
341
|
_v$3 !== _p$.a && _$className(_el$5, _p$.a = _v$3);
|
|
@@ -337,9 +347,9 @@ const Dialog = (props) => {
|
|
|
337
347
|
});
|
|
338
348
|
return _el$4;
|
|
339
349
|
}
|
|
340
|
-
}), _el$
|
|
341
|
-
_$className(_el$
|
|
342
|
-
_$insert(_el$
|
|
350
|
+
}), _el$6);
|
|
351
|
+
_$className(_el$6, dialogContentClass);
|
|
352
|
+
_$insert(_el$6, () => local.children);
|
|
343
353
|
_$insert(_el$3, _$createComponent(Show, {
|
|
344
354
|
get when() {
|
|
345
355
|
return local.resizable;
|
|
@@ -348,11 +358,11 @@ const Dialog = (props) => {
|
|
|
348
358
|
return _$createComponent(For, {
|
|
349
359
|
each: RESIZE_DIRECTIONS,
|
|
350
360
|
children: (direction) => (() => {
|
|
351
|
-
var _el$
|
|
352
|
-
_el$
|
|
353
|
-
_$setAttribute(_el$
|
|
354
|
-
_$effect(() => _$className(_el$
|
|
355
|
-
return _el$
|
|
361
|
+
var _el$7 = _tmpl$4();
|
|
362
|
+
_el$7.$$pointerdown = (e) => handleResizeBarPointerDown(e, direction);
|
|
363
|
+
_$setAttribute(_el$7, "data-resize-bar", direction);
|
|
364
|
+
_$effect(() => _$className(_el$7, clsx("absolute", "touch-none", resizePositionMap[direction], resizeCursorMap[direction])));
|
|
365
|
+
return _el$7;
|
|
356
366
|
})()
|
|
357
367
|
});
|
|
358
368
|
}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../src/components/disclosure/Dialog.tsx"],
|
|
4
|
-
"mappings": ";;;;;;;;;;;AAAA,
|
|
5
|
-
"names": ["createContext", "createEffect", "
|
|
4
|
+
"mappings": "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",
|
|
5
|
+
"names": ["createContext", "createEffect", "createSignal", "createUniqueId", "For", "onCleanup", "Show", "splitProps", "useContext", "Portal", "clsx", "twMerge", "IconX", "createControllableSignal", "createMountTransition", "createPointerDrag", "mergeStyles", "Icon", "borderSubtle", "DialogDefaultsContext", "bringToFront", "registerDialog", "unregisterDialog", "Button", "DialogSlotsContext", "DialogHeader", "props", "ctx", "setHeader", "children", "undefined", "DialogAction", "setAction", "RESIZE_DIRECTIONS", "resizeCursorMap", "dialogContentClass", "resizePositionMap", "Dialog", "dialogDefaults", "local", "headerId", "header", "_setHeader", "content", "action", "_setAction", "hasHeader", "open", "setOpen", "value", "onChange", "onOpenChange", "mounted", "animating", "unmount", "closeCompleteEmitted", "emitCloseComplete", "onCloseComplete", "wasMounted", "dialogRef", "wrapperRef", "setWrapperRef", "closeOnEscape", "closeOnBackdrop", "handleKeyDown", "e", "key", "tryClose", "document", "addEventListener", "removeEventListener", "el", "canDeactivate", "handleBackdropClick", "handleCloseClick", "handleTransitionEnd", "propertyName", "handleDialogFocus", "handleHeaderPointerDown", "event", "movable", "wrapperEl", "target", "closest", "currentTarget", "dialogEl", "startX", "clientX", "startY", "clientY", "startTop", "offsetTop", "startLeft", "offsetLeft", "pointerId", "onMove", "stopPropagation", "preventDefault", "style", "position", "left", "top", "right", "bottom", "margin", "offsetWidth", "offsetHeight", "onEnd", "handleResizeBarPointerDown", "direction", "resizable", "startHeight", "clientHeight", "startWidth", "clientWidth", "height", "Math", "max", "minHeight", "width", "minWidth", "dialogStyle", "fill", "animationClass", "base", "wrapperClass", "float", "backdropClass", "dialogBaseClass", "headerClass", "_$createComponent", "when", "Provider", "_el$", "_tmpl$3", "_el$3", "firstChild", "_el$6", "_$use", "_$insert", "_el$2", "_tmpl$", "$$click", "_$effect", "_$className", "_el$4", "_tmpl$2", "_el$5", "$$pointerdown", "_$setAttribute", "closable", "size", "variant", "onClick", "icon", "_p$", "_v$", "_v$2", "headerStyle", "_v$3", "t", "_$style", "a", "each", "_el$7", "_tmpl$4", "_v$4", "_v$5", "_v$6", "_v$7", "class", "_v$8", "o", "i", "Header", "Action", "_$delegateEvents"]
|
|
6
6
|
}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../src/components/display/Icon.tsx"],
|
|
4
|
-
"mappings": ";;;AAAA,SAAyBA,kBAAkB;AAC3C,SAASC,eAAe;AAExB,OAAOC,UAAU;AAOV,MAAMC,OAA8BC,WAAU;AACnD,QAAM,CAACC,OAAOC,IAAI,IAAIN,WAAWI,OAAO,CAAC,QAAQ,MAAM,CAAC;AACxD,SAAAG,kBACGN,SAAOO,aAAA;IAAA,aAAA;IAAA,IAENC,YAAS;AAAA,aAAEJ,MAAMK;IAAI;IAAA,IACrBC,OAAI;AAAA,aAAEN,MAAMM,QAAQ;IAAQ;EAAA,GACxBL,MAAI;IAAA,KAAA,OAAA,IAAA;AAAA,aACDJ,KAAK,
|
|
4
|
+
"mappings": ";;;AAAA,SAAyBA,kBAAkB;AAC3C,SAASC,eAAe;AAExB,OAAOC,UAAU;AAOV,MAAMC,OAA8BC,WAAU;AACnD,QAAM,CAACC,OAAOC,IAAI,IAAIN,WAAWI,OAAO,CAAC,QAAQ,MAAM,CAAC;AACxD,SAAAG,kBACGN,SAAOO,aAAA;IAAA,aAAA;IAAA,IAENC,YAAS;AAAA,aAAEJ,MAAMK;IAAI;IAAA,IACrBC,OAAI;AAAA,aAAEN,MAAMM,QAAQ;IAAQ;EAAA,GACxBL,MAAI;IAAA,KAAA,OAAA,IAAA;AAAA,aACDJ,KAAK,UAAU,4BAA4BI,KAAKM,KAAK;IAAC;EAAA,CAAA,CAAA;AAGnE;",
|
|
5
5
|
"names": ["splitProps", "Dynamic", "clsx", "Icon", "props", "local", "rest", "_$createComponent", "_$mergeProps", "component", "icon", "size", "class"]
|
|
6
6
|
}
|
|
@@ -13,7 +13,7 @@ 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-8", "right-4", "z-
|
|
16
|
+
const baseClass = clsx("fixed", "top-8", "right-4", "z-notification", "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,
|
|
@@ -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,
|
|
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,kBACA,QACA,eACA,SACA,QACA,QACA,cACA,aACA,wBACA,cACA,0BACF;AAEA,MAAMM,eAAuC;EAC3CC,MAAMH,YAAYG,KAAKC;EACvBC,SAASL,YAAYK,QAAQD;EAC7BE,SAASN,YAAYM,QAAQF;EAC7BG,QAAQP,YAAYO,OAAOH;AAC7B;AAEA,MAAMI,eAAeZ,KAAK,iBAAiB,WAAW,SAAS;AAC/D,MAAMa,eAAeb,KAAK,cAAc,eAAe;AACvD,MAAMc,eAAed,KAAK,qBAAqB,SAAS,UAAU;AAClE,MAAMe,oBAAoBf,KAAK,WAAW,eAAe,aAAa,mBAAmB;AACzF,MAAMgB,qBAAqBhB,KAAK,WAAW,OAAO,mBAAmB;AAE9D,MAAMiB,qBAAgCA,MAAM;AACjD,QAAMC,eAAehB,gBAAgB;AAErC,QAAMiB,gBAAgBA,MAAM;AAC1BD,iBAAaE,cAAc;EAC7B;AAEA,QAAMC,eAAeA,MAAM;;AACzB,UAAMC,SAASJ,aAAaK,aAAa;AACzCD,2CAAQE,WAARF,mBAAgBG;EAClB;AAEA,SAAAC,kBACG5B,MAAI;IAAA,IAAC6B,OAAI;AAAA,aAAET,aAAaK,aAAa;IAAC;IAAAK,UACnCC,UAAIH,kBACH3B,QAAM;MAAA,IAAA6B,WAAA;AAAA,YAAAE,OAAAC,QAAA,GAAAC,QAAAF,KAAAG,YAAAC,QAAAF,MAAAC,YAAAE,QAAAH,MAAAI,aAAAC,QAAAF,MAAAF;AAAAK,oBAAAN,OAOSpB,YAAY;AAAA2B,iBAAAL,OAAA,MACGL,KAAK,EAAEW,KAAK;AAAAD,iBAAAP,OAAAN,kBACpC5B,MAAI;UAAA,IAAC6B,OAAI;AAAA,mBAAEE,KAAK,EAAEY;UAAO;UAAA,IAAAb,WAAA;AAAA,gBAAAc,QAAAC,OAAA;AAAAL,wBAAAI,OACZ7B,YAAY;AAAA0B,qBAAAG,OAAA,MAAGb,KAAK,EAAEY,OAAO;AAAA,mBAAAC;UAAA;QAAA,CAAA,GAAA,IAAA;AAAAJ,oBAAAH,OAGjCrB,YAAY;AAAAyB,iBAAAJ,OAAAT,kBACrB5B,MAAI;UAAA,IAAC6B,OAAI;AAAA,mBAAEE,KAAK,EAAEL;UAAM;UAAA,IAAAI,WAAA;AAAA,gBAAAgB,QAAAC,QAAA;AAAAD,kBAAAE,UACkCzB;AAAYiB,wBAAAM,OAAxC7B,iBAAiB;AAAAwB,qBAAAK,OAAA,MAC3Cf,KAAK,EAAEL,OAAQuB,KAAK;AAAA,mBAAAH;UAAA;QAAA,CAAA,GAAAP,KAAA;AAAAA,cAAAS,UAOd3B;AAAamB,oBAAAD,OADfrB,kBAAkB;AAAAuB,iBAAAF,OAAAX,kBAGxBvB,MAAI;UAAC6C,MAAM/C;UAAOgD,MAAI;QAAA,CAAA,CAAA;AAAAC,iBAAAC,SAAA;AAAA,cAAAC,MAtBfvB,KAAK,EAAEwB,OAAKC,OAEjBtD,KAAKK,WAAWC,aAAauB,KAAK,EAAEwB,KAAK,CAAC;AAACD,kBAAAD,IAAAI,KAAAC,eAAA1B,MAAA,cAAAqB,IAAAI,IAAAH,GAAA;AAAAE,mBAAAH,IAAAM,KAAAnB,YAAAR,MAAAqB,IAAAM,IAAAH,IAAA;AAAA,iBAAAH;QAAA,GAAA;UAAAI,GAAAG;UAAAD,GAAAC;QAAA,CAAA;AAAA,eAAA5B;MAAA;IAAA,CAAA;EAyBvD,CAAA;AAGP;AAAE6B,iBAAA,CAAA,OAAA,CAAA;",
|
|
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
|
}
|
|
@@ -50,7 +50,7 @@ export interface NotificationContextValue {
|
|
|
50
50
|
success: (title: string, message?: string, options?: NotificationOptions) => string;
|
|
51
51
|
warning: (title: string, message?: string, options?: NotificationOptions) => string;
|
|
52
52
|
danger: (title: string, message?: string, options?: NotificationOptions) => string;
|
|
53
|
-
|
|
53
|
+
error: (err?: any, header?: string) => void;
|
|
54
54
|
update: (id: string, updates: Partial<Pick<NotificationItem, "title" | "message" | "theme" | "action">>, options?: NotificationUpdateOptions) => void;
|
|
55
55
|
remove: (id: string) => void;
|
|
56
56
|
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,
|
|
1
|
+
{"version":3,"file":"NotificationContext.d.ts","sourceRoot":"","sources":["..\\..\\..\\..\\src\\components\\feedback\\notification\\NotificationContext.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,QAAQ,EAA6B,MAAM,UAAU,CAAC;AAEpE,YAAY;AACZ,MAAM,MAAM,iBAAiB,GAAG,MAAM,GAAG,SAAS,GAAG,SAAS,GAAG,QAAQ,CAAC;AAE1E,eAAe;AACf,MAAM,WAAW,kBAAkB;IACjC,aAAa;IACb,KAAK,EAAE,MAAM,CAAC;IACd,aAAa;IACb,OAAO,EAAE,MAAM,IAAI,CAAC;CACrB;AAED,YAAY;AACZ,MAAM,WAAW,gBAAgB;IAC/B,aAAa;IACb,EAAE,EAAE,MAAM,CAAC;IACX,0CAA0C;IAC1C,KAAK,EAAE,iBAAiB,CAAC;IACzB,YAAY;IACZ,KAAK,EAAE,MAAM,CAAC;IACd,kBAAkB;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,iBAAiB;IACjB,MAAM,CAAC,EAAE,kBAAkB,CAAC;IAC5B,YAAY;IACZ,SAAS,EAAE,IAAI,CAAC;IAChB,YAAY;IACZ,IAAI,EAAE,OAAO,CAAC;CACf;AAED,eAAe;AACf,MAAM,WAAW,mBAAmB;IAClC,oBAAoB;IACpB,MAAM,CAAC,EAAE,kBAAkB,CAAC;CAC7B;AAED,eAAe;AACf,MAAM,WAAW,yBAAyB;IACxC,4CAA4C;IAC5C,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED;;;;;;GAMG;AACH,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;IACnF,KAAK,EAAE,CAAC,GAAG,CAAC,EAAE,GAAG,EAAE,MAAM,CAAC,EAAE,MAAM,KAAK,IAAI,CAAC;IAG5C,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,qBAAqB;AACrB,eAAO,MAAM,mBAAmB,kEAA4C,CAAC;AAE7E;;;;GAIG;AACH,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,
|
|
4
|
+
"mappings": "AAAA,SAAwB,eAAe,kBAAkB;AAiFlD,MAAM,sBAAsB,cAAwC;AAOpE,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,
|
|
1
|
+
{"version":3,"file":"NotificationProvider.d.ts","sourceRoot":"","sources":["..\\..\\..\\..\\src\\components\\feedback\\notification\\NotificationProvider.tsx"],"names":[],"mappings":"AAAA,OAAO,EAA4B,KAAK,eAAe,EAAQ,MAAM,UAAU,CAAC;AAahF;;;;;;;;GAQG;AACH,eAAO,MAAM,oBAAoB,EAAE,eAgJlC,CAAC"}
|
|
@@ -3,7 +3,7 @@ import { memo as _$memo } from "solid-js/web";
|
|
|
3
3
|
import { insert as _$insert } from "solid-js/web";
|
|
4
4
|
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
|
-
import {
|
|
6
|
+
import { createMemo, createSignal, Show } from "solid-js";
|
|
7
7
|
import { NotificationContext } from "./NotificationContext.js";
|
|
8
8
|
import { useLogger } from "../../../hooks/useLogger.js";
|
|
9
9
|
const MAX_ITEMS = 50;
|
|
@@ -51,17 +51,13 @@ const NotificationProvider = (props) => {
|
|
|
51
51
|
const danger = (title, message, options) => {
|
|
52
52
|
return addNotification("danger", title, message, options);
|
|
53
53
|
};
|
|
54
|
-
const
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
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;
|
|
54
|
+
const error = (err, header) => {
|
|
55
|
+
if (err instanceof Error) {
|
|
56
|
+
danger(header ?? err.message, header != null ? err.message : void 0);
|
|
57
|
+
logger.error(err.stack ?? err.message);
|
|
58
|
+
return;
|
|
64
59
|
}
|
|
60
|
+
throw err;
|
|
65
61
|
};
|
|
66
62
|
const update = (id, updates, options) => {
|
|
67
63
|
setItems((prev) => prev.map((item) => {
|
|
@@ -111,7 +107,7 @@ const NotificationProvider = (props) => {
|
|
|
111
107
|
success,
|
|
112
108
|
warning,
|
|
113
109
|
danger,
|
|
114
|
-
|
|
110
|
+
error,
|
|
115
111
|
update,
|
|
116
112
|
remove,
|
|
117
113
|
markAsRead,
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../../src/components/feedback/notification/NotificationProvider.tsx"],
|
|
4
|
-
"mappings": ";;;;;AAAA,
|
|
5
|
-
"names": ["
|
|
4
|
+
"mappings": "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",
|
|
5
|
+
"names": ["createMemo", "createSignal", "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", "error", "err", "header", "Error", "stack", "update", "updates", "map", "item", "renotify", "remove", "markAsRead", "markAllAsRead", "dismissBanner", "clear", "contextValue", "_$createComponent", "Provider", "value", "children", "_el$", "_tmpl$", "_$insert", "when", "_$memo"]
|
|
6
6
|
}
|
package/docs/feedback.md
CHANGED
|
@@ -24,14 +24,15 @@ function MyComponent() {
|
|
|
24
24
|
});
|
|
25
25
|
};
|
|
26
26
|
|
|
27
|
-
//
|
|
27
|
+
// Error handling with error()
|
|
28
28
|
const handleLoad = async () => {
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
29
|
+
try {
|
|
30
|
+
const data = await fetchData();
|
|
31
|
+
} catch (err) {
|
|
32
|
+
notification.error(err, "Failed to load data"); // optional header
|
|
33
|
+
// Shows danger notification with header + err.message,
|
|
34
|
+
// logs err.stack via useLogger
|
|
35
|
+
}
|
|
35
36
|
};
|
|
36
37
|
|
|
37
38
|
return <Button onClick={handleSave}>Save</Button>;
|
|
@@ -49,7 +50,7 @@ function MyComponent() {
|
|
|
49
50
|
| `success` | `(title: string, message?: string, options?: NotificationOptions) => string` | Success notification |
|
|
50
51
|
| `warning` | `(title: string, message?: string, options?: NotificationOptions) => string` | Warning notification |
|
|
51
52
|
| `danger` | `(title: string, message?: string, options?: NotificationOptions) => string` | Error notification |
|
|
52
|
-
| `
|
|
53
|
+
| `error` | `(err?: any, header?: string) => void` | Show error notification from caught error (shows danger notification + logs to `useLogger`). Re-throws if `err` is not an `Error` instance. |
|
|
53
54
|
| `update` | `(id: string, updates: Partial<NotificationItem>, options?: { renotify?: boolean }) => void` | Update notification |
|
|
54
55
|
| `remove` | `(id: string) => void` | Remove notification |
|
|
55
56
|
| `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.58",
|
|
4
4
|
"description": "심플리즘 패키지 - SolidJS 라이브러리",
|
|
5
5
|
"author": "김석래",
|
|
6
6
|
"license": "Apache-2.0",
|
|
@@ -50,8 +50,8 @@
|
|
|
50
50
|
"solid-tiptap": "^0.8.0",
|
|
51
51
|
"tailwind-merge": "^3.5.0",
|
|
52
52
|
"tailwindcss": "^3.4.19",
|
|
53
|
-
"@simplysm/core-browser": "13.0.
|
|
54
|
-
"@simplysm/core-common": "13.0.
|
|
53
|
+
"@simplysm/core-browser": "13.0.58",
|
|
54
|
+
"@simplysm/core-common": "13.0.58"
|
|
55
55
|
},
|
|
56
56
|
"devDependencies": {
|
|
57
57
|
"@solidjs/testing-library": "^0.8.10"
|
|
@@ -15,18 +15,24 @@ import { BusyContainer } from "../../feedback/busy/BusyContainer";
|
|
|
15
15
|
import { useNotification } from "../../feedback/notification/NotificationContext";
|
|
16
16
|
import { Button } from "../../form-control/Button";
|
|
17
17
|
import { Icon } from "../../display/Icon";
|
|
18
|
-
import {
|
|
18
|
+
import { createTopbarActions, TopbarContext } from "../../layout/topbar/TopbarContext";
|
|
19
19
|
import { useDialogInstance } from "../../disclosure/DialogInstanceContext";
|
|
20
20
|
import { Dialog } from "../../disclosure/Dialog";
|
|
21
21
|
import { createEventListener } from "@solid-primitives/event-listener";
|
|
22
22
|
import clsx from "clsx";
|
|
23
|
-
import {
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
23
|
+
import {
|
|
24
|
+
IconCheck,
|
|
25
|
+
IconDeviceFloppy,
|
|
26
|
+
IconRefresh,
|
|
27
|
+
IconTrash,
|
|
28
|
+
IconTrashOff,
|
|
29
|
+
} from "@tabler/icons-solidjs";
|
|
30
|
+
import { CrudDetailTools, isCrudDetailToolsDef } from "./CrudDetailTools";
|
|
31
|
+
import { CrudDetailBefore, isCrudDetailBeforeDef } from "./CrudDetailBefore";
|
|
32
|
+
import { CrudDetailAfter, isCrudDetailAfterDef } from "./CrudDetailAfter";
|
|
27
33
|
import type {
|
|
28
|
-
CrudDetailBeforeDef,
|
|
29
34
|
CrudDetailAfterDef,
|
|
35
|
+
CrudDetailBeforeDef,
|
|
30
36
|
CrudDetailContext,
|
|
31
37
|
CrudDetailInfo,
|
|
32
38
|
CrudDetailProps,
|
|
@@ -77,13 +83,14 @@ const CrudDetailBase = <TData extends object>(props: CrudDetailProps<TData>) =>
|
|
|
77
83
|
// -- Load --
|
|
78
84
|
async function doLoad() {
|
|
79
85
|
setBusyCount((c) => c + 1);
|
|
80
|
-
|
|
81
|
-
await noti.try(async () => {
|
|
86
|
+
try {
|
|
82
87
|
const result = await local.load();
|
|
83
88
|
setData(reconcile(result.data) as any);
|
|
84
89
|
originalData = objClone(result.data);
|
|
85
90
|
setInfo(result.info);
|
|
86
|
-
}
|
|
91
|
+
} catch (err) {
|
|
92
|
+
noti.error(err, "조회실패");
|
|
93
|
+
}
|
|
87
94
|
setBusyCount((c) => c - 1);
|
|
88
95
|
setReady(true);
|
|
89
96
|
}
|
|
@@ -118,9 +125,8 @@ const CrudDetailBase = <TData extends object>(props: CrudDetailProps<TData>) =>
|
|
|
118
125
|
}
|
|
119
126
|
|
|
120
127
|
setBusyCount((c) => c + 1);
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
const result = await local.submit!(objClone(unwrap(data)));
|
|
128
|
+
try {
|
|
129
|
+
const result = await local.submit(objClone(unwrap(data)));
|
|
124
130
|
if (result) {
|
|
125
131
|
noti.success("저장 완료", "저장되었습니다.");
|
|
126
132
|
if (dialogInstance) {
|
|
@@ -129,7 +135,9 @@ const CrudDetailBase = <TData extends object>(props: CrudDetailProps<TData>) =>
|
|
|
129
135
|
await doLoad();
|
|
130
136
|
}
|
|
131
137
|
}
|
|
132
|
-
}
|
|
138
|
+
} catch (err) {
|
|
139
|
+
noti.error(err, "저장 실패");
|
|
140
|
+
}
|
|
133
141
|
setBusyCount((c) => c - 1);
|
|
134
142
|
}
|
|
135
143
|
|
|
@@ -149,25 +157,19 @@ const CrudDetailBase = <TData extends object>(props: CrudDetailProps<TData>) =>
|
|
|
149
157
|
const del = !currentInfo.isDeleted;
|
|
150
158
|
|
|
151
159
|
setBusyCount((c) => c + 1);
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
if (
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
);
|
|
161
|
-
if (dialogInstance) {
|
|
162
|
-
dialogInstance.close(true);
|
|
163
|
-
} else {
|
|
164
|
-
await doLoad();
|
|
165
|
-
}
|
|
160
|
+
try {
|
|
161
|
+
const result = await local.toggleDelete(del);
|
|
162
|
+
if (result) {
|
|
163
|
+
noti.success(del ? "삭제 완료" : "복구 완료", del ? "삭제되었습니다." : "복구되었습니다.");
|
|
164
|
+
if (dialogInstance) {
|
|
165
|
+
dialogInstance.close(true);
|
|
166
|
+
} else {
|
|
167
|
+
await doLoad();
|
|
166
168
|
}
|
|
167
|
-
}
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
169
|
+
}
|
|
170
|
+
} catch (err) {
|
|
171
|
+
noti.error(err, del ? "삭제 실패" : "복구 실패");
|
|
172
|
+
}
|
|
171
173
|
setBusyCount((c) => c - 1);
|
|
172
174
|
}
|
|
173
175
|
|
|
@@ -242,12 +244,9 @@ const CrudDetailBase = <TData extends object>(props: CrudDetailProps<TData>) =>
|
|
|
242
244
|
{/* Modal mode: Dialog.Action (refresh button in header) */}
|
|
243
245
|
<Show when={isModal}>
|
|
244
246
|
<Dialog.Action>
|
|
245
|
-
<
|
|
246
|
-
class="flex items-center px-2 text-base-400 hover:text-base-600"
|
|
247
|
-
onClick={() => void handleRefresh()}
|
|
248
|
-
>
|
|
247
|
+
<Button size={"sm"} variant={"ghost"} onClick={() => void handleRefresh()}>
|
|
249
248
|
<Icon icon={IconRefresh} />
|
|
250
|
-
</
|
|
249
|
+
</Button>
|
|
251
250
|
</Dialog.Action>
|
|
252
251
|
</Show>
|
|
253
252
|
|
|
@@ -297,7 +296,7 @@ const CrudDetailBase = <TData extends object>(props: CrudDetailProps<TData>) =>
|
|
|
297
296
|
<Show when={defs().before}>{(beforeDef) => beforeDef().children}</Show>
|
|
298
297
|
|
|
299
298
|
{/* Form */}
|
|
300
|
-
<form ref={formRef} class="flex-1 overflow-auto p-
|
|
299
|
+
<form ref={formRef} class="flex-1 overflow-auto p-4" onSubmit={handleFormSubmit}>
|
|
301
300
|
{formContent()}
|
|
302
301
|
</form>
|
|
303
302
|
|
|
@@ -316,20 +315,26 @@ const CrudDetailBase = <TData extends object>(props: CrudDetailProps<TData>) =>
|
|
|
316
315
|
|
|
317
316
|
{/* Modal mode: bottom bar */}
|
|
318
317
|
<Show when={isModal && canEdit()}>
|
|
319
|
-
<div class="flex gap-2 border-t border-base-200
|
|
318
|
+
<div class="flex gap-2 border-t border-base-200 px-3 py-1.5">
|
|
320
319
|
<div class="flex-1" />
|
|
321
320
|
<Show
|
|
322
321
|
when={local.toggleDelete && info() && !info()!.isNew && (local.deletable ?? true)}
|
|
323
322
|
>
|
|
324
323
|
{(_) => (
|
|
325
|
-
<Button
|
|
324
|
+
<Button variant={"solid"} theme="danger" onClick={() => void handleToggleDelete()}>
|
|
326
325
|
<Icon icon={info()!.isDeleted ? IconTrashOff : IconTrash} class="mr-1" />
|
|
327
326
|
{info()!.isDeleted ? "복구" : "삭제"}
|
|
328
327
|
</Button>
|
|
329
328
|
)}
|
|
330
329
|
</Show>
|
|
331
330
|
<Show when={local.submit}>
|
|
332
|
-
<Button
|
|
331
|
+
<Button
|
|
332
|
+
variant={"solid"}
|
|
333
|
+
theme="primary"
|
|
334
|
+
onClick={() => formRef?.requestSubmit()}
|
|
335
|
+
class={"gap-1"}
|
|
336
|
+
>
|
|
337
|
+
<Icon icon={IconCheck} />
|
|
333
338
|
확인
|
|
334
339
|
</Button>
|
|
335
340
|
</Show>
|