asterui 0.12.20 → 0.12.21
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/index55.js.map +1 -1
- package/dist/index60.js +3 -3
- package/dist/index60.js.map +1 -1
- package/package.json +1 -1
package/dist/index55.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index55.js","sources":["../src/components/Code.tsx"],"sourcesContent":["import React from 'react'\nimport { CopyButton } from './CopyButton'\n\nexport interface CodeLineProps extends React.HTMLAttributes<HTMLPreElement> {\n children: React.ReactNode\n prefix?: string\n highlight?: boolean\n}\n\nconst Line: React.FC<CodeLineProps> = ({\n children,\n prefix = '$',\n highlight = false,\n className = '',\n ...rest\n}) => {\n return (\n <pre\n data-prefix={prefix}\n className={`${highlight ? 'bg-warning text-warning-content' : ''} ${className}`}\n {...rest}\n >\n <code>{children}</code>\n </pre>\n )\n}\n\nexport interface CodeProps extends React.HTMLAttributes<HTMLDivElement> {\n children: React.ReactNode\n /** Show copy button. Pass true to auto-extract text, or a string to specify custom copy text */\n copyable?: boolean | string\n}\n\nconst extractTextFromChildren = (children: React.ReactNode): string => {\n const lines: string[] = []\n React.Children.forEach(children, (child) => {\n if (React.isValidElement(child) && child.props?.children) {\n const text = typeof child.props.children === 'string'\n ? child.props.children\n : ''\n if (text) lines.push(text)\n }\n })\n return lines.join('\\n')\n}\n\nexport const Code: React.FC<CodeProps> & { Line: typeof Line } = ({\n children,\n className = '',\n copyable,\n style,\n ...rest\n}) => {\n const copyText = typeof copyable === 'string'\n ? copyable\n : copyable\n ? extractTextFromChildren(children)\n : null\n\n return (\n <div\n className={`mockup-code ${className}`}\n style={{ position: 'relative', overflow: 'hidden', ...style }}\n {...rest}\n >\n {children}\n {copyText !== null && (\n <div style={{ position: 'absolute', top: 8, right: 8 }}>\n <CopyButton\n text={copyText}\n size=\"xs\"\n variant=\"ghost\"\n showTooltip\n />\n </div>\n )}\n </div>\n )\n}\n\nCode.Line = Line\n"],"names":["Line","children","prefix","highlight","className","rest","jsx","extractTextFromChildren","lines","React","child","text","Code","copyable","style","copyText","jsxs","CopyButton"],"mappings":";;;AASA,MAAMA,IAAgC,CAAC;AAAA,EACrC,UAAAC;AAAA,EACA,QAAAC,IAAS;AAAA,EACT,WAAAC,IAAY;AAAA,EACZ,WAAAC,IAAY;AAAA,EACZ,GAAGC;AACL,MAEI,gBAAAC;AAAA,EAAC;AAAA,EAAA;AAAA,IACC,eAAaJ;AAAA,IACb,WAAW,GAAGC,IAAY,oCAAoC,EAAE,IAAIC,CAAS;AAAA,IAC5E,GAAGC;AAAA,IAEJ,UAAA,gBAAAC,EAAC,UAAM,UAAAL,EAAA,CAAS;AAAA,EAAA;AAAA,GAWhBM,IAA0B,CAACN,MAAsC;AACrE,QAAMO,IAAkB,CAAA;AACxB,SAAAC,EAAM,SAAS,QAAQR,GAAU,CAACS,MAAU;AAC1C,QAAID,EAAM,
|
|
1
|
+
{"version":3,"file":"index55.js","sources":["../src/components/Code.tsx"],"sourcesContent":["import React from 'react'\nimport { CopyButton } from './CopyButton'\n\nexport interface CodeLineProps extends React.HTMLAttributes<HTMLPreElement> {\n children: React.ReactNode\n prefix?: string\n highlight?: boolean\n}\n\nconst Line: React.FC<CodeLineProps> = ({\n children,\n prefix = '$',\n highlight = false,\n className = '',\n ...rest\n}) => {\n return (\n <pre\n data-prefix={prefix}\n className={`${highlight ? 'bg-warning text-warning-content' : ''} ${className}`}\n {...rest}\n >\n <code>{children}</code>\n </pre>\n )\n}\n\nexport interface CodeProps extends React.HTMLAttributes<HTMLDivElement> {\n children: React.ReactNode\n /** Show copy button. Pass true to auto-extract text, or a string to specify custom copy text */\n copyable?: boolean | string\n}\n\nconst extractTextFromChildren = (children: React.ReactNode): string => {\n const lines: string[] = []\n React.Children.forEach(children, (child) => {\n if (React.isValidElement<{ children?: React.ReactNode }>(child) && child.props?.children) {\n const text = typeof child.props.children === 'string'\n ? child.props.children\n : ''\n if (text) lines.push(text)\n }\n })\n return lines.join('\\n')\n}\n\nexport const Code: React.FC<CodeProps> & { Line: typeof Line } = ({\n children,\n className = '',\n copyable,\n style,\n ...rest\n}) => {\n const copyText = typeof copyable === 'string'\n ? copyable\n : copyable\n ? extractTextFromChildren(children)\n : null\n\n return (\n <div\n className={`mockup-code ${className}`}\n style={{ position: 'relative', overflow: 'hidden', ...style }}\n {...rest}\n >\n {children}\n {copyText !== null && (\n <div style={{ position: 'absolute', top: 8, right: 8 }}>\n <CopyButton\n text={copyText}\n size=\"xs\"\n variant=\"ghost\"\n showTooltip\n />\n </div>\n )}\n </div>\n )\n}\n\nCode.Line = Line\n"],"names":["Line","children","prefix","highlight","className","rest","jsx","extractTextFromChildren","lines","React","child","text","Code","copyable","style","copyText","jsxs","CopyButton"],"mappings":";;;AASA,MAAMA,IAAgC,CAAC;AAAA,EACrC,UAAAC;AAAA,EACA,QAAAC,IAAS;AAAA,EACT,WAAAC,IAAY;AAAA,EACZ,WAAAC,IAAY;AAAA,EACZ,GAAGC;AACL,MAEI,gBAAAC;AAAA,EAAC;AAAA,EAAA;AAAA,IACC,eAAaJ;AAAA,IACb,WAAW,GAAGC,IAAY,oCAAoC,EAAE,IAAIC,CAAS;AAAA,IAC5E,GAAGC;AAAA,IAEJ,UAAA,gBAAAC,EAAC,UAAM,UAAAL,EAAA,CAAS;AAAA,EAAA;AAAA,GAWhBM,IAA0B,CAACN,MAAsC;AACrE,QAAMO,IAAkB,CAAA;AACxB,SAAAC,EAAM,SAAS,QAAQR,GAAU,CAACS,MAAU;AAC1C,QAAID,EAAM,eAA+CC,CAAK,KAAKA,EAAM,OAAO,UAAU;AACxF,YAAMC,IAAO,OAAOD,EAAM,MAAM,YAAa,WACzCA,EAAM,MAAM,WACZ;AACJ,MAAIC,KAAMH,EAAM,KAAKG,CAAI;AAAA,IAC3B;AAAA,EACF,CAAC,GACMH,EAAM,KAAK;AAAA,CAAI;AACxB,GAEaI,IAAoD,CAAC;AAAA,EAChE,UAAAX;AAAA,EACA,WAAAG,IAAY;AAAA,EACZ,UAAAS;AAAA,EACA,OAAAC;AAAA,EACA,GAAGT;AACL,MAAM;AACJ,QAAMU,IAAW,OAAOF,KAAa,WACjCA,IACAA,IACEN,EAAwBN,CAAQ,IAChC;AAEN,SACE,gBAAAe;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,WAAW,eAAeZ,CAAS;AAAA,MACnC,OAAO,EAAE,UAAU,YAAY,UAAU,UAAU,GAAGU,EAAA;AAAA,MACrD,GAAGT;AAAA,MAEH,UAAA;AAAA,QAAAJ;AAAA,QACAc,MAAa,QACZ,gBAAAT,EAAC,OAAA,EAAI,OAAO,EAAE,UAAU,YAAY,KAAK,GAAG,OAAO,EAAA,GACjD,UAAA,gBAAAA;AAAA,UAACW;AAAA,UAAA;AAAA,YACC,MAAMF;AAAA,YACN,MAAK;AAAA,YACL,SAAQ;AAAA,YACR,aAAW;AAAA,UAAA;AAAA,QAAA,EACb,CACF;AAAA,MAAA;AAAA,IAAA;AAAA,EAAA;AAIR;AAEAH,EAAK,OAAOZ;"}
|
package/dist/index60.js
CHANGED
|
@@ -97,17 +97,17 @@ function b({ notification: e, onClose: t }) {
|
|
|
97
97
|
return /* @__PURE__ */ l(
|
|
98
98
|
"div",
|
|
99
99
|
{
|
|
100
|
-
className: `alert ${o[e.type]} shadow-lg cursor-pointer min-w-[300px] max-w-[400px]`,
|
|
100
|
+
className: `alert ${o[e.type]} shadow-lg cursor-pointer min-w-[300px] max-w-[400px] relative`,
|
|
101
101
|
onClick: s,
|
|
102
102
|
children: [
|
|
103
|
-
/* @__PURE__ */ l("div", { className: "
|
|
103
|
+
/* @__PURE__ */ l("div", { className: e.closable ? "pr-8" : "", children: [
|
|
104
104
|
e.message && /* @__PURE__ */ i("div", { className: "font-bold", children: e.message }),
|
|
105
105
|
e.description && /* @__PURE__ */ i("div", { className: "text-sm", children: e.description })
|
|
106
106
|
] }),
|
|
107
107
|
e.closable && /* @__PURE__ */ i(
|
|
108
108
|
"button",
|
|
109
109
|
{
|
|
110
|
-
className: "btn btn-
|
|
110
|
+
className: "btn btn-xs btn-ghost btn-circle absolute top-2 right-2",
|
|
111
111
|
onClick: (r) => {
|
|
112
112
|
r.stopPropagation(), t();
|
|
113
113
|
},
|
package/dist/index60.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index60.js","sources":["../src/components/Notification.tsx"],"sourcesContent":["import React, { useEffect, useState } from 'react'\nimport ReactDOM from 'react-dom/client'\n\nexport type NotificationType = 'success' | 'info' | 'warning' | 'error'\nexport type NotificationPlacement = 'topLeft' | 'topRight' | 'bottomLeft' | 'bottomRight'\n\nexport interface NotificationConfig {\n message: React.ReactNode\n description?: React.ReactNode\n type?: NotificationType\n duration?: number // in seconds, 0 = no auto close\n placement?: NotificationPlacement\n closable?: boolean\n onClick?: () => void\n onClose?: () => void\n}\n\ninterface NotificationItem extends NotificationConfig {\n id: string\n createdAt: number\n}\n\ntype Listener = () => void\n\nclass NotificationManager {\n private notifications: NotificationItem[] = []\n private listeners: Listener[] = []\n private container: HTMLDivElement | null = null\n private root: ReactDOM.Root | null = null\n private idCounter = 0\n\n subscribe(listener: Listener) {\n this.listeners.push(listener)\n return () => {\n this.listeners = this.listeners.filter((l) => l !== listener)\n }\n }\n\n getNotifications() {\n return this.notifications\n }\n\n private emit() {\n this.listeners.forEach((listener) => listener())\n }\n\n private ensureContainer() {\n if (!this.container) {\n this.container = document.createElement('div')\n document.body.appendChild(this.container)\n this.root = ReactDOM.createRoot(this.container)\n this.root.render(<NotificationContainer manager={this} />)\n }\n }\n\n open(config: NotificationConfig) {\n this.ensureContainer()\n\n const id = `notification-${++this.idCounter}`\n const notification: NotificationItem = {\n ...config,\n id,\n createdAt: Date.now(),\n duration: config.duration ?? 4.5,\n placement: config.placement ?? 'topRight',\n closable: config.closable ?? true,\n type: config.type ?? 'info',\n }\n\n this.notifications.push(notification)\n this.emit()\n\n // Auto-dismiss\n if (notification.duration && notification.duration > 0) {\n setTimeout(() => {\n this.close(id)\n }, notification.duration * 1000)\n }\n\n return id\n }\n\n close(id: string) {\n const notification = this.notifications.find((n) => n.id === id)\n this.notifications = this.notifications.filter((n) => n.id !== id)\n this.emit()\n\n if (notification?.onClose) {\n notification.onClose()\n }\n }\n\n success(config: Omit<NotificationConfig, 'type'>) {\n return this.open({ ...config, type: 'success' })\n }\n\n error(config: Omit<NotificationConfig, 'type'>) {\n return this.open({ ...config, type: 'error' })\n }\n\n info(config: Omit<NotificationConfig, 'type'>) {\n return this.open({ ...config, type: 'info' })\n }\n\n warning(config: Omit<NotificationConfig, 'type'>) {\n return this.open({ ...config, type: 'warning' })\n }\n\n destroy() {\n this.notifications = []\n this.emit()\n }\n}\n\ninterface NotificationContainerProps {\n manager: NotificationManager\n}\n\nfunction NotificationContainer({ manager }: NotificationContainerProps) {\n const [, forceUpdate] = useState({})\n\n useEffect(() => {\n const unsubscribe = manager.subscribe(() => {\n forceUpdate({})\n })\n return unsubscribe\n }, [manager])\n\n const notifications = manager.getNotifications()\n\n // Group by placement\n const grouped: Record<NotificationPlacement, NotificationItem[]> = {\n topLeft: [],\n topRight: [],\n bottomLeft: [],\n bottomRight: [],\n }\n\n notifications.forEach((notification) => {\n grouped[notification.placement!].push(notification)\n })\n\n const placementClasses: Record<NotificationPlacement, string> = {\n topRight: 'toast toast-top toast-end',\n topLeft: 'toast toast-top toast-start',\n bottomRight: 'toast toast-bottom toast-end',\n bottomLeft: 'toast toast-bottom toast-start',\n }\n\n return (\n <>\n {Object.entries(grouped).map(([placement, items]) => {\n if (items.length === 0) return null\n\n return (\n <div key={placement} className={placementClasses[placement as NotificationPlacement]}>\n {items.map((notification) => (\n <NotificationItem\n key={notification.id}\n notification={notification}\n onClose={() => manager.close(notification.id)}\n />\n ))}\n </div>\n )\n })}\n </>\n )\n}\n\ninterface NotificationItemProps {\n notification: NotificationItem\n onClose: () => void\n}\n\nfunction NotificationItem({ notification, onClose }: NotificationItemProps) {\n const alertTypeClasses: Record<NotificationType, string> = {\n success: 'alert-success',\n error: 'alert-error',\n info: 'alert-info',\n warning: 'alert-warning',\n }\n\n const handleClick = () => {\n if (notification.onClick) {\n notification.onClick()\n }\n }\n\n return (\n <div\n className={`alert ${alertTypeClasses[notification.type!]} shadow-lg cursor-pointer min-w-[300px] max-w-[400px]`}\n onClick={handleClick}\n >\n <div className
|
|
1
|
+
{"version":3,"file":"index60.js","sources":["../src/components/Notification.tsx"],"sourcesContent":["import React, { useEffect, useState } from 'react'\nimport ReactDOM from 'react-dom/client'\n\nexport type NotificationType = 'success' | 'info' | 'warning' | 'error'\nexport type NotificationPlacement = 'topLeft' | 'topRight' | 'bottomLeft' | 'bottomRight'\n\nexport interface NotificationConfig {\n message: React.ReactNode\n description?: React.ReactNode\n type?: NotificationType\n duration?: number // in seconds, 0 = no auto close\n placement?: NotificationPlacement\n closable?: boolean\n onClick?: () => void\n onClose?: () => void\n}\n\ninterface NotificationItem extends NotificationConfig {\n id: string\n createdAt: number\n}\n\ntype Listener = () => void\n\nclass NotificationManager {\n private notifications: NotificationItem[] = []\n private listeners: Listener[] = []\n private container: HTMLDivElement | null = null\n private root: ReactDOM.Root | null = null\n private idCounter = 0\n\n subscribe(listener: Listener) {\n this.listeners.push(listener)\n return () => {\n this.listeners = this.listeners.filter((l) => l !== listener)\n }\n }\n\n getNotifications() {\n return this.notifications\n }\n\n private emit() {\n this.listeners.forEach((listener) => listener())\n }\n\n private ensureContainer() {\n if (!this.container) {\n this.container = document.createElement('div')\n document.body.appendChild(this.container)\n this.root = ReactDOM.createRoot(this.container)\n this.root.render(<NotificationContainer manager={this} />)\n }\n }\n\n open(config: NotificationConfig) {\n this.ensureContainer()\n\n const id = `notification-${++this.idCounter}`\n const notification: NotificationItem = {\n ...config,\n id,\n createdAt: Date.now(),\n duration: config.duration ?? 4.5,\n placement: config.placement ?? 'topRight',\n closable: config.closable ?? true,\n type: config.type ?? 'info',\n }\n\n this.notifications.push(notification)\n this.emit()\n\n // Auto-dismiss\n if (notification.duration && notification.duration > 0) {\n setTimeout(() => {\n this.close(id)\n }, notification.duration * 1000)\n }\n\n return id\n }\n\n close(id: string) {\n const notification = this.notifications.find((n) => n.id === id)\n this.notifications = this.notifications.filter((n) => n.id !== id)\n this.emit()\n\n if (notification?.onClose) {\n notification.onClose()\n }\n }\n\n success(config: Omit<NotificationConfig, 'type'>) {\n return this.open({ ...config, type: 'success' })\n }\n\n error(config: Omit<NotificationConfig, 'type'>) {\n return this.open({ ...config, type: 'error' })\n }\n\n info(config: Omit<NotificationConfig, 'type'>) {\n return this.open({ ...config, type: 'info' })\n }\n\n warning(config: Omit<NotificationConfig, 'type'>) {\n return this.open({ ...config, type: 'warning' })\n }\n\n destroy() {\n this.notifications = []\n this.emit()\n }\n}\n\ninterface NotificationContainerProps {\n manager: NotificationManager\n}\n\nfunction NotificationContainer({ manager }: NotificationContainerProps) {\n const [, forceUpdate] = useState({})\n\n useEffect(() => {\n const unsubscribe = manager.subscribe(() => {\n forceUpdate({})\n })\n return unsubscribe\n }, [manager])\n\n const notifications = manager.getNotifications()\n\n // Group by placement\n const grouped: Record<NotificationPlacement, NotificationItem[]> = {\n topLeft: [],\n topRight: [],\n bottomLeft: [],\n bottomRight: [],\n }\n\n notifications.forEach((notification) => {\n grouped[notification.placement!].push(notification)\n })\n\n const placementClasses: Record<NotificationPlacement, string> = {\n topRight: 'toast toast-top toast-end',\n topLeft: 'toast toast-top toast-start',\n bottomRight: 'toast toast-bottom toast-end',\n bottomLeft: 'toast toast-bottom toast-start',\n }\n\n return (\n <>\n {Object.entries(grouped).map(([placement, items]) => {\n if (items.length === 0) return null\n\n return (\n <div key={placement} className={placementClasses[placement as NotificationPlacement]}>\n {items.map((notification) => (\n <NotificationItem\n key={notification.id}\n notification={notification}\n onClose={() => manager.close(notification.id)}\n />\n ))}\n </div>\n )\n })}\n </>\n )\n}\n\ninterface NotificationItemProps {\n notification: NotificationItem\n onClose: () => void\n}\n\nfunction NotificationItem({ notification, onClose }: NotificationItemProps) {\n const alertTypeClasses: Record<NotificationType, string> = {\n success: 'alert-success',\n error: 'alert-error',\n info: 'alert-info',\n warning: 'alert-warning',\n }\n\n const handleClick = () => {\n if (notification.onClick) {\n notification.onClick()\n }\n }\n\n return (\n <div\n className={`alert ${alertTypeClasses[notification.type!]} shadow-lg cursor-pointer min-w-[300px] max-w-[400px] relative`}\n onClick={handleClick}\n >\n <div className={notification.closable ? 'pr-8' : ''}>\n {notification.message && <div className=\"font-bold\">{notification.message}</div>}\n {notification.description && <div className=\"text-sm\">{notification.description}</div>}\n </div>\n {notification.closable && (\n <button\n className=\"btn btn-xs btn-ghost btn-circle absolute top-2 right-2\"\n onClick={(e) => {\n e.stopPropagation()\n onClose()\n }}\n >\n ✕\n </button>\n )}\n </div>\n )\n}\n\nexport const notification = new NotificationManager()\n"],"names":["NotificationManager","listener","l","ReactDOM","jsx","NotificationContainer","config","id","notification","n","manager","forceUpdate","useState","useEffect","notifications","grouped","placementClasses","Fragment","placement","items","NotificationItem","onClose","alertTypeClasses","handleClick","jsxs","e"],"mappings":"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"}
|