@papernote/ui 1.14.0 → 2.0.0
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/index.esm.js +13 -13
- package/dist/index.esm.js.map +1 -1
- package/dist/index.js +13 -13
- package/dist/index.js.map +1 -1
- package/dist/styles.css +6228 -6717
- package/package.json +6 -4
- package/src/components/AdminModal.tsx +1 -1
- package/src/components/Autocomplete.tsx +1 -1
- package/src/components/CommandPalette.tsx +2 -2
- package/src/components/DataTable.tsx +1 -1
- package/src/components/Drawer.tsx +1 -1
- package/src/components/MarkdownEditor.tsx +1 -1
- package/src/components/MaskedInput.tsx +1 -1
- package/src/components/Modal.tsx +1 -1
- package/src/components/NotificationBar.tsx +2 -2
- package/src/components/PasswordInput.tsx +1 -1
- package/src/components/SearchBar.tsx +1 -1
- package/src/components/Textarea.tsx +1 -1
- package/src/styles/index.css +50 -160
- package/src/styles/theme.css +302 -0
package/dist/index.js
CHANGED
|
@@ -1277,7 +1277,7 @@ const Textarea = React.forwardRef(({ label, helperText, validationState, validat
|
|
|
1277
1277
|
}
|
|
1278
1278
|
};
|
|
1279
1279
|
return (jsxRuntime.jsxs("div", { className: "w-full", children: [label && (jsxRuntime.jsxs("label", { htmlFor: textareaId, className: "label", children: [label, props.required && jsxRuntime.jsx("span", { className: "text-error-500 ml-1", children: "*" })] })), jsxRuntime.jsxs("div", { className: "relative", children: [jsxRuntime.jsx("textarea", { ref: textareaRef, id: textareaId, value: value, maxLength: maxLength, rows: autoExpand ? minRows : rows, enterKeyHint: enterKeyHint, className: `
|
|
1280
|
-
block w-full border rounded-lg text-ink-800 placeholder-ink-400
|
|
1280
|
+
block w-full border rounded-lg text-ink-800 placeholder:text-ink-400
|
|
1281
1281
|
bg-white bg-subtle-grain transition-all duration-200
|
|
1282
1282
|
focus:outline-none focus:ring-2 ${getResizeClass()}
|
|
1283
1283
|
disabled:bg-paper-100 disabled:text-ink-400 disabled:cursor-not-allowed disabled:opacity-60
|
|
@@ -5073,7 +5073,7 @@ function Modal({ isOpen, onClose, title, children, size = 'md', showCloseButton
|
|
|
5073
5073
|
return reactDom.createPortal(jsxRuntime.jsx(BottomSheet, { isOpen: isOpen, onClose: onClose, title: title, height: mobileHeight, showHandle: mobileShowHandle, showCloseButton: showCloseButton, children: children }), document.body);
|
|
5074
5074
|
}
|
|
5075
5075
|
// Render as standard modal on desktop
|
|
5076
|
-
const modalContent = (jsxRuntime.jsx("div", { className: "fixed inset-0 z-50 flex items-center justify-center p-4 bg-ink-900
|
|
5076
|
+
const modalContent = (jsxRuntime.jsx("div", { className: "fixed inset-0 z-50 flex items-center justify-center p-4 bg-ink-900/50 backdrop-blur-sm animate-fade-in", onMouseDown: handleBackdropMouseDown, onClick: handleBackdropClick, children: jsxRuntime.jsxs("div", { ref: modalRef, className: `${sizeClasses$a[size]} w-full bg-white bg-subtle-grain rounded-xl shadow-2xl border border-paper-200 ${getAnimationClass()}`, role: "dialog", "aria-modal": "true", "aria-labelledby": titleId, tabIndex: -1, children: [jsxRuntime.jsxs("div", { className: "flex items-center justify-between px-6 py-4 border-b border-paper-200", children: [jsxRuntime.jsx("h3", { id: titleId, className: "text-lg font-medium text-ink-900", children: title }), showCloseButton && (jsxRuntime.jsx("button", { onClick: onClose, className: "text-ink-400 hover:text-ink-600 transition-colors", "aria-label": "Close modal", children: jsxRuntime.jsx(lucideReact.X, { className: "h-5 w-5" }) }))] }), jsxRuntime.jsx("div", { className: `px-6 py-4 ${scrollable || maxHeight ? 'overflow-y-auto' : ''}`, style: {
|
|
5077
5077
|
maxHeight: maxHeight || (scrollable ? 'calc(100vh - 200px)' : undefined),
|
|
5078
5078
|
}, children: children })] }) }));
|
|
5079
5079
|
return reactDom.createPortal(modalContent, document.body);
|
|
@@ -6221,7 +6221,7 @@ function Drawer({ isOpen, onClose, title, children, placement = 'right', size =
|
|
|
6221
6221
|
if (!isOpen)
|
|
6222
6222
|
return null;
|
|
6223
6223
|
const isHorizontal = placement === 'left' || placement === 'right';
|
|
6224
|
-
return (jsxRuntime.jsxs("div", { className: "fixed inset-0 z-50 flex", children: [showOverlay && (jsxRuntime.jsx("div", { className: "fixed inset-0 bg-ink-900
|
|
6224
|
+
return (jsxRuntime.jsxs("div", { className: "fixed inset-0 z-50 flex", children: [showOverlay && (jsxRuntime.jsx("div", { className: "fixed inset-0 bg-ink-900/50 backdrop-blur-sm animate-fade-in", onClick: handleOverlayClick, "aria-hidden": "true" })), jsxRuntime.jsxs("div", { className: `
|
|
6225
6225
|
fixed ${placementClasses[placement]}
|
|
6226
6226
|
${sizeClasses$9[placement][size]}
|
|
6227
6227
|
bg-white border-paper-200 shadow-2xl
|
|
@@ -6774,10 +6774,10 @@ function CommandPalette({ commands, open, onOpenChange, placeholder = 'Type a co
|
|
|
6774
6774
|
};
|
|
6775
6775
|
if (!open)
|
|
6776
6776
|
return null;
|
|
6777
|
-
return reactDom.createPortal(jsxRuntime.jsxs("div", { className: "fixed inset-0 z-50 flex items-start justify-center pt-[20vh] animate-fade-in", children: [jsxRuntime.jsx("div", { className: "absolute inset-0 bg-ink-900
|
|
6777
|
+
return reactDom.createPortal(jsxRuntime.jsxs("div", { className: "fixed inset-0 z-50 flex items-start justify-center pt-[20vh] animate-fade-in", children: [jsxRuntime.jsx("div", { className: "absolute inset-0 bg-ink-900/50 backdrop-blur-sm", onClick: () => onOpenChange(false) }), jsxRuntime.jsxs("div", { className: "relative w-full max-w-2xl mx-4 bg-white rounded-xl shadow-2xl border border-paper-200 overflow-hidden animate-scale-in", children: [jsxRuntime.jsxs("div", { className: "flex items-center gap-3 px-4 py-3 border-b border-paper-200", children: [jsxRuntime.jsx(lucideReact.Search, { className: "h-5 w-5 text-ink-400" }), jsxRuntime.jsx("input", { ref: inputRef, type: "text", value: searchQuery, onChange: (e) => {
|
|
6778
6778
|
setSearchQuery(e.target.value);
|
|
6779
6779
|
setSelectedIndex(0);
|
|
6780
|
-
}, placeholder: placeholder, className: "flex-1 text-base text-ink-900 placeholder-ink-400 bg-transparent border-none outline-none" }), trigger && (jsxRuntime.jsx("kbd", { className: "hidden sm:inline-block px-2 py-1 text-xs font-mono text-ink-500 bg-paper-100 border border-paper-300 rounded", children: trigger }))] }), jsxRuntime.jsx("div", { ref: listRef, className: "max-h-[400px] overflow-y-auto py-2", children: flatCommands.length === 0 ? (jsxRuntime.jsx("div", { className: "px-4 py-8 text-center text-sm text-ink-500", children: "No commands found" })) : (jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [Object.entries(grouped).map(([groupName, groupCommands]) => (jsxRuntime.jsxs("div", { children: [jsxRuntime.jsx("div", { className: "px-4 py-1.5 text-xs font-semibold text-ink-500 uppercase tracking-wider", children: groupName }), groupCommands.map((command) => {
|
|
6780
|
+
}, placeholder: placeholder, className: "flex-1 text-base text-ink-900 placeholder:text-ink-400 bg-transparent border-none outline-none" }), trigger && (jsxRuntime.jsx("kbd", { className: "hidden sm:inline-block px-2 py-1 text-xs font-mono text-ink-500 bg-paper-100 border border-paper-300 rounded", children: trigger }))] }), jsxRuntime.jsx("div", { ref: listRef, className: "max-h-[400px] overflow-y-auto py-2", children: flatCommands.length === 0 ? (jsxRuntime.jsx("div", { className: "px-4 py-8 text-center text-sm text-ink-500", children: "No commands found" })) : (jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [Object.entries(grouped).map(([groupName, groupCommands]) => (jsxRuntime.jsxs("div", { children: [jsxRuntime.jsx("div", { className: "px-4 py-1.5 text-xs font-semibold text-ink-500 uppercase tracking-wider", children: groupName }), groupCommands.map((command) => {
|
|
6781
6781
|
const globalIndex = flatCommands.indexOf(command);
|
|
6782
6782
|
const isSelected = globalIndex === selectedIndex;
|
|
6783
6783
|
return (jsxRuntime.jsxs("button", { "data-index": globalIndex, onClick: () => executeCommand(command), onMouseEnter: () => setSelectedIndex(globalIndex), className: `
|
|
@@ -7719,7 +7719,7 @@ const PasswordInput = React.forwardRef(({ value, onChange, label, placeholder =
|
|
|
7719
7719
|
}, [value, requirements]);
|
|
7720
7720
|
return (jsxRuntime.jsxs("div", { className: className, children: [label && (jsxRuntime.jsxs("label", { className: "block text-sm font-medium text-ink-900 mb-1.5", children: [label, required && jsxRuntime.jsx("span", { className: "text-error-500 ml-1", children: "*" })] })), jsxRuntime.jsxs("div", { className: "relative", children: [jsxRuntime.jsx("input", { ref: inputRef, type: showPassword ? 'text' : 'password', value: value, onChange: (e) => onChange(e.target.value), placeholder: placeholder, disabled: disabled, className: `
|
|
7721
7721
|
w-full px-3 py-2 pr-10
|
|
7722
|
-
text-sm text-ink-900 placeholder-ink-400
|
|
7722
|
+
text-sm text-ink-900 placeholder:text-ink-400
|
|
7723
7723
|
bg-white border rounded-lg
|
|
7724
7724
|
focus:outline-none focus:ring-2 focus:ring-accent-400 focus:border-accent-400
|
|
7725
7725
|
disabled:bg-paper-100 disabled:cursor-not-allowed
|
|
@@ -7828,7 +7828,7 @@ const MaskedInput = React.forwardRef(({ value, onChange, maskType = 'phone', cus
|
|
|
7828
7828
|
};
|
|
7829
7829
|
return (jsxRuntime.jsxs("div", { className: className, children: [label && (jsxRuntime.jsxs("label", { className: "block text-sm font-medium text-ink-900 mb-1.5", children: [label, required && jsxRuntime.jsx("span", { className: "text-error-500 ml-1", children: "*" })] })), jsxRuntime.jsx("input", { ref: inputRef, type: "text", value: displayValue, onChange: handleChange, onPaste: handlePaste, placeholder: getPlaceholder(), disabled: disabled, className: `
|
|
7830
7830
|
w-full px-3 py-2
|
|
7831
|
-
text-sm text-ink-900 placeholder-ink-400
|
|
7831
|
+
text-sm text-ink-900 placeholder:text-ink-400
|
|
7832
7832
|
bg-white border rounded-lg
|
|
7833
7833
|
focus:outline-none focus:ring-2 focus:ring-accent-400 focus:border-accent-400
|
|
7834
7834
|
disabled:bg-paper-100 disabled:cursor-not-allowed
|
|
@@ -8043,7 +8043,7 @@ const Autocomplete = React.forwardRef(({ value, onChange, options = [], onSearch
|
|
|
8043
8043
|
}
|
|
8044
8044
|
}, placeholder: placeholder, disabled: disabled, className: `
|
|
8045
8045
|
w-full pl-9 pr-9 py-2
|
|
8046
|
-
text-sm text-ink-900 placeholder-ink-400
|
|
8046
|
+
text-sm text-ink-900 placeholder:text-ink-400
|
|
8047
8047
|
bg-white border rounded-lg
|
|
8048
8048
|
focus:outline-none focus:ring-2 focus:ring-accent-400 focus:border-accent-400
|
|
8049
8049
|
disabled:bg-paper-100 disabled:cursor-not-allowed
|
|
@@ -8603,7 +8603,7 @@ function MarkdownEditor({ value, onChange, label, placeholder = '# Start writing
|
|
|
8603
8603
|
: 'text-ink-600 hover:bg-white/50'}
|
|
8604
8604
|
`, children: "Split" })] }))] }), showHelp && (jsxRuntime.jsxs("button", { type: "button", onClick: () => setShowHelpPanel(!showHelpPanel), className: "flex items-center gap-1 px-2 py-1 text-xs text-ink-600 hover:text-ink-900 transition-colors", children: [jsxRuntime.jsx(lucideReact.Info, { className: "h-3.5 w-3.5" }), "Markdown Help"] }))] }), showHelpPanel && (jsxRuntime.jsx("div", { className: "p-3 border border-b-0 border-paper-300 bg-accent-50 text-xs", children: jsxRuntime.jsx("div", { className: "grid grid-cols-2 gap-2", children: helpContent.map((item, index) => (jsxRuntime.jsxs("div", { className: "flex items-center gap-2", children: [jsxRuntime.jsx("code", { className: "px-2 py-0.5 bg-white rounded text-ink-900 font-mono", children: item.syntax }), jsxRuntime.jsx("span", { className: "text-ink-600", children: item.description })] }, index))) }) })), jsxRuntime.jsxs("div", { className: `flex border border-paper-300 rounded-b-lg overflow-hidden ${mode === 'split' ? '' : ''}`, children: [(mode === 'edit' || mode === 'split') && (jsxRuntime.jsx("div", { className: `${mode === 'split' ? 'w-1/2 border-r border-paper-300' : 'w-full'}`, children: jsxRuntime.jsx("textarea", { value: value, onChange: (e) => onChange(e.target.value), placeholder: placeholder, disabled: disabled, className: `
|
|
8605
8605
|
w-full p-3 outline-none resize-none
|
|
8606
|
-
text-sm text-ink-900 font-mono placeholder-ink-400
|
|
8606
|
+
text-sm text-ink-900 font-mono placeholder:text-ink-400
|
|
8607
8607
|
${disabled ? 'bg-paper-100 cursor-not-allowed' : 'bg-white'}
|
|
8608
8608
|
`, style: { minHeight, maxHeight } }) })), (mode === 'preview' || mode === 'split') && (jsxRuntime.jsx("div", { className: `${mode === 'split' ? 'w-1/2' : 'w-full'} overflow-y-auto bg-white`, children: jsxRuntime.jsx("div", { className: "p-3 prose prose-sm max-w-none", style: { minHeight, maxHeight }, dangerouslySetInnerHTML: { __html: markdownToHtml(value) } }) }))] }), jsxRuntime.jsx("style", { children: `
|
|
8609
8609
|
.prose h1 { font-size: 1.875rem; font-weight: 700; margin-bottom: 1rem; }
|
|
@@ -14313,7 +14313,7 @@ function SearchBar({ value, onChange, placeholder = 'Search...', className = '',
|
|
|
14313
14313
|
onSearch(value);
|
|
14314
14314
|
}
|
|
14315
14315
|
};
|
|
14316
|
-
return (jsxRuntime.jsxs("div", { className: `flex-1 max-w-2xl relative ${className}`, children: [jsxRuntime.jsx("div", { className: "absolute inset-y-0 left-0 pl-4 flex items-center pointer-events-none", children: jsxRuntime.jsx(lucideReact.Search, { className: "h-5 w-5 text-ink-400" }) }), jsxRuntime.jsx("input", { type: "text", value: value, onChange: (e) => onChange(e.target.value), onKeyDown: handleKeyDown, disabled: disabled, className: "block w-full pl-11 pr-4 py-3 border border-paper-300 rounded-lg leading-5 bg-white placeholder-ink-400 text-ink-800 focus:outline-none focus:placeholder-ink-300 focus:ring-2 focus:ring-accent-400 focus:border-accent-400 hover:border-paper-400 transition-all sm:text-sm disabled:bg-paper-100 disabled:cursor-not-allowed", placeholder: placeholder })] }));
|
|
14316
|
+
return (jsxRuntime.jsxs("div", { className: `flex-1 max-w-2xl relative ${className}`, children: [jsxRuntime.jsx("div", { className: "absolute inset-y-0 left-0 pl-4 flex items-center pointer-events-none", children: jsxRuntime.jsx(lucideReact.Search, { className: "h-5 w-5 text-ink-400" }) }), jsxRuntime.jsx("input", { type: "text", value: value, onChange: (e) => onChange(e.target.value), onKeyDown: handleKeyDown, disabled: disabled, className: "block w-full pl-11 pr-4 py-3 border border-paper-300 rounded-lg leading-5 bg-white placeholder:text-ink-400 text-ink-800 focus:outline-none focus:placeholder:text-ink-300 focus:ring-2 focus:ring-accent-400 focus:border-accent-400 hover:border-paper-400 transition-all sm:text-sm disabled:bg-paper-100 disabled:cursor-not-allowed", placeholder: placeholder })] }));
|
|
14317
14317
|
}
|
|
14318
14318
|
|
|
14319
14319
|
function NotificationIndicator({ count = 0, onClick, className = '', maxCount = 99, variant = 'default', }) {
|
|
@@ -15685,7 +15685,7 @@ mobileView = 'auto', cardConfig, cardGap = 'md', cardClassName, }) {
|
|
|
15685
15685
|
})()] }, rowKey));
|
|
15686
15686
|
});
|
|
15687
15687
|
};
|
|
15688
|
-
const tableContent = (jsxRuntime.jsxs("div", { className: `bg-white rounded-lg shadow border-2 ${borderColor} ${virtualized ? 'overflow-hidden' : 'overflow-x-auto overflow-y-visible'} ${className}`, style: { position: 'relative' }, children: [loading && data.length > 0 && (jsxRuntime.jsx("div", { className: "absolute inset-0 bg-white
|
|
15688
|
+
const tableContent = (jsxRuntime.jsxs("div", { className: `bg-white rounded-lg shadow border-2 ${borderColor} ${virtualized ? 'overflow-hidden' : 'overflow-x-auto overflow-y-visible'} ${className}`, style: { position: 'relative' }, children: [loading && data.length > 0 && (jsxRuntime.jsx("div", { className: "absolute inset-0 bg-white/75 flex items-center justify-center z-20", style: { backdropFilter: 'blur(2px)' }, children: jsxRuntime.jsxs("div", { className: "flex flex-col items-center gap-3", children: [jsxRuntime.jsx("div", { className: "loading-spinner", style: { width: '32px', height: '32px', borderWidth: '3px' } }), jsxRuntime.jsx("span", { className: "text-sm font-medium text-ink-600", children: "Loading..." })] }) })), jsxRuntime.jsxs("table", { className: `table-stable w-full ${bordered ? 'border-collapse' : ''}`, role: "grid", "aria-label": "Data table", "aria-rowcount": data.length, "aria-colcount": visibleColumns.length, children: [jsxRuntime.jsxs("colgroup", { children: [selectable && jsxRuntime.jsx("col", { className: "w-12" }), ((expandable || expandedRowConfig) && showExpandChevron) && jsxRuntime.jsx("col", { className: "w-10" }), allActions.length > 0 && jsxRuntime.jsx("col", { style: { width: '28px' } }), visibleColumns.map((column, index) => {
|
|
15689
15689
|
const columnKey = String(column.key);
|
|
15690
15690
|
const dynamicWidth = columnWidths[columnKey];
|
|
15691
15691
|
return (jsxRuntime.jsx("col", { style: getColumnStyle(column, dynamicWidth) }, index));
|
|
@@ -61915,7 +61915,7 @@ function AdminModal({ isOpen, onClose, title, subtitle, onSubmit, isSaving = fal
|
|
|
61915
61915
|
onSubmit(formData);
|
|
61916
61916
|
}
|
|
61917
61917
|
};
|
|
61918
|
-
return (jsxRuntime.jsx("div", { className: "fixed inset-0 bg-black
|
|
61918
|
+
return (jsxRuntime.jsx("div", { className: "fixed inset-0 bg-black/50 flex items-center justify-center z-50 p-4 admin-modal-overlay", children: jsxRuntime.jsxs("div", { className: `bg-white rounded-lg w-full ${sizeClasses[size]} flex flex-col overflow-hidden shadow-2xl admin-modal-content`, style: { height: height }, children: [jsxRuntime.jsx("div", { className: "fixed inset-0 pointer-events-none admin-modal-sidebar-placeholder" }), jsxRuntime.jsxs("div", { className: "px-6 py-4 border-b", children: [jsxRuntime.jsx("h3", { className: "text-lg font-semibold", children: title }), subtitle && jsxRuntime.jsx("p", { className: "text-sm text-gray-500 mt-1", children: subtitle })] }), tabs.length > 1 && (jsxRuntime.jsx("div", { className: "border-b border-gray-200 bg-white", children: jsxRuntime.jsx("nav", { className: "-mb-px flex items-center px-6 admin-modal-tabs", "aria-label": "Tabs", children: tabs.map((tab, index) => (jsxRuntime.jsxs(React.Fragment, { children: [jsxRuntime.jsx("button", { type: "button", onClick: () => onTabChange(tab.id), className: `whitespace-nowrap border-b-2 py-3 px-4 text-sm font-medium transition-colors ${activeTabId === tab.id
|
|
61919
61919
|
? 'border-blue-500 text-blue-600'
|
|
61920
61920
|
: 'border-transparent text-gray-500 hover:border-gray-300 hover:text-gray-700'}`, "aria-current": activeTabId === tab.id ? 'page' : undefined, children: tab.label }), index < tabs.length - 1 && (jsxRuntime.jsx("div", { className: "admin-modal-tab-separator" }))] }, tab.id))) }) })), onSubmit ? (jsxRuntime.jsx("form", { className: "flex-1 overflow-y-auto min-h-0 h-0 px-6 py-6 admin-modal-form", onSubmit: handleFormSubmit, id: formId, noValidate: true, children: activeTab?.content || children })) : (jsxRuntime.jsx("div", { className: "flex-1 overflow-y-auto min-h-0 h-0 px-6 py-6 admin-modal-content-area", children: activeTab?.content || children })), jsxRuntime.jsxs("div", { className: "px-6 py-4 border-t bg-gray-50 flex justify-between gap-3", children: [jsxRuntime.jsx("button", { type: "button", onClick: onClose, className: "px-4 py-2 text-sm text-gray-600 hover:text-gray-800", disabled: isSaving, children: "Cancel" }), jsxRuntime.jsxs("div", { className: "flex gap-3", children: [customFooterActions, onSubmit && (jsxRuntime.jsx("button", { type: "submit", form: formId, disabled: isSaving, className: "px-4 py-2 text-sm bg-primary-600 text-white rounded hover:bg-primary-700 disabled:opacity-50 disabled:cursor-not-allowed", children: isSaving ? 'Saving...' : 'Save Changes' }))] })] })] }) }));
|
|
61921
61921
|
}
|
|
@@ -62136,7 +62136,7 @@ function NotificationBar({ notifications, onDismiss }) {
|
|
|
62136
62136
|
}
|
|
62137
62137
|
return (jsxRuntime.jsx("div", { className: "fixed top-4 right-4 z-50 space-y-3 max-w-md", children: notifications.map((notification) => {
|
|
62138
62138
|
const IconComponent = getNotificationIcon(notification.type);
|
|
62139
|
-
return (jsxRuntime.jsx("div", { className: `border-2 rounded-xl p-4 backdrop-blur-sm transform transition-all duration-300 ease-in-out animate-slide-in ${notificationStyles[notification.type]}`, children: jsxRuntime.jsxs("div", { className: "flex items-start space-x-3", children: [jsxRuntime.jsx("div", { className: `flex-shrink-0 p-1 rounded-full bg-white
|
|
62139
|
+
return (jsxRuntime.jsx("div", { className: `border-2 rounded-xl p-4 backdrop-blur-sm transform transition-all duration-300 ease-in-out animate-slide-in ${notificationStyles[notification.type]}`, children: jsxRuntime.jsxs("div", { className: "flex items-start space-x-3", children: [jsxRuntime.jsx("div", { className: `flex-shrink-0 p-1 rounded-full bg-white/50 ${iconStyles[notification.type]}`, children: jsxRuntime.jsx(IconComponent, { className: "h-5 w-5" }) }), jsxRuntime.jsxs("div", { className: "flex-1 min-w-0", children: [jsxRuntime.jsx("p", { className: "text-sm font-semibold mb-1 leading-tight", children: notification.title }), jsxRuntime.jsx("p", { className: "text-sm leading-relaxed opacity-90", children: notification.message })] }), notification.dismissible && onDismiss && (jsxRuntime.jsx("button", { onClick: () => onDismiss(notification.id), className: `flex-shrink-0 p-1.5 hover:bg-white/60 rounded-full transition-all duration-200 ${iconStyles[notification.type]} hover:scale-110`, title: "Dismiss notification", children: jsxRuntime.jsx(lucideReact.X, { className: "h-4 w-4" }) }))] }) }, notification.id));
|
|
62140
62140
|
}) }));
|
|
62141
62141
|
}
|
|
62142
62142
|
|