@g9tm/lynxcontrols 1.4.5 → 1.4.7

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.
Files changed (61) hide show
  1. package/dist/.tsbuildinfo +1 -1
  2. package/dist/base/pressable.d.ts.map +1 -1
  3. package/dist/base/pressable.jsx +2 -1
  4. package/dist/base/pressable.jsx.map +1 -1
  5. package/dist/cascade/cascade-panel.d.ts.map +1 -1
  6. package/dist/cascade/cascade-panel.jsx +2 -2
  7. package/dist/cascade/cascade-panel.jsx.map +1 -1
  8. package/dist/edge-panel/edge-panel.jsx +5 -5
  9. package/dist/edge-panel/edge-panel.jsx.map +1 -1
  10. package/dist/expander/expander.d.ts.map +1 -1
  11. package/dist/expander/expander.jsx +2 -1
  12. package/dist/expander/expander.jsx.map +1 -1
  13. package/dist/host/host.css.map +1 -1
  14. package/dist/host/host.d.ts +3 -2
  15. package/dist/host/host.d.ts.map +1 -1
  16. package/dist/host/host.jsx +2 -2
  17. package/dist/host/host.jsx.map +1 -1
  18. package/dist/plus-button/model.d.ts.map +1 -1
  19. package/dist/plus-button/model.jsx +5 -1
  20. package/dist/plus-button/model.jsx.map +1 -1
  21. package/dist/popup/frame.jsx +2 -2
  22. package/dist/popup/frame.jsx.map +1 -1
  23. package/dist/popup/service.d.ts.map +1 -1
  24. package/dist/popup/service.jsx +2 -2
  25. package/dist/popup/service.jsx.map +1 -1
  26. package/dist/provider/provider.css +4 -0
  27. package/dist/provider/provider.css.map +1 -1
  28. package/dist/provider/provider.d.ts.map +1 -1
  29. package/dist/provider/provider.jsx +4 -2
  30. package/dist/provider/provider.jsx.map +1 -1
  31. package/dist/selection/selection-sheet.d.ts +5 -0
  32. package/dist/selection/selection-sheet.d.ts.map +1 -1
  33. package/dist/selection/selection-sheet.jsx +7 -3
  34. package/dist/selection/selection-sheet.jsx.map +1 -1
  35. package/dist/sheet/frame.d.ts.map +1 -1
  36. package/dist/sheet/frame.jsx +30 -8
  37. package/dist/sheet/frame.jsx.map +1 -1
  38. package/dist/sheet/index.d.ts +1 -0
  39. package/dist/sheet/index.d.ts.map +1 -1
  40. package/dist/sheet/index.jsx +1 -0
  41. package/dist/sheet/motion.d.ts.map +1 -1
  42. package/dist/sheet/motion.jsx +14 -0
  43. package/dist/sheet/motion.jsx.map +1 -1
  44. package/dist/sheet/options.d.ts +6 -0
  45. package/dist/sheet/options.d.ts.map +1 -1
  46. package/dist/sheet/options.jsx.map +1 -1
  47. package/dist/sheet/scroll-indicator.d.ts +33 -0
  48. package/dist/sheet/scroll-indicator.d.ts.map +1 -0
  49. package/dist/sheet/scroll-indicator.jsx +84 -0
  50. package/dist/sheet/scroll-indicator.jsx.map +1 -0
  51. package/dist/sheet/sheet.css +14 -0
  52. package/dist/sheet/sheet.css.map +1 -1
  53. package/dist/tab-bar/tab-bar.d.ts.map +1 -1
  54. package/dist/tab-bar/tab-bar.jsx +11 -6
  55. package/dist/tab-bar/tab-bar.jsx.map +1 -1
  56. package/dist/toast/service.jsx +3 -3
  57. package/dist/toast/service.jsx.map +1 -1
  58. package/dist/toast/store.d.ts.map +1 -1
  59. package/dist/toast/store.jsx +3 -2
  60. package/dist/toast/store.jsx.map +1 -1
  61. package/package.json +3 -3
@@ -1 +1 @@
1
- {"version":3,"file":"toast/store.jsx","sources":["../../src/toast/store.ts"],"sourcesContent":["import type { G9IconInput } from '../icon/icon';\n\n// Toast state (MAUI `G9ToastHelper`): typed toasts in per-position stacks, the reference-counted full-screen loader,\n// the compact loading toast and the progress toast, as a pure store. The view renders `getSnapshot()`; timers come\n// from the caller so tests drive time.\n\n/** Toast kind (MAUI `G9ToastType`). */\nexport const G9ToastType = {\n Information: 'information',\n Success: 'success',\n Warning: 'warning',\n Error: 'error',\n} as const;\nexport type G9ToastType = (typeof G9ToastType)[keyof typeof G9ToastType];\n\n/** Nine anchors (MAUI `G9ToastPosition`). */\nexport const G9ToastPosition = {\n TopLeft: 'topLeft',\n TopCenter: 'topCenter',\n TopRight: 'topRight',\n MiddleLeft: 'middleLeft',\n MiddleCenter: 'middleCenter',\n MiddleRight: 'middleRight',\n BottomLeft: 'bottomLeft',\n BottomCenter: 'bottomCenter',\n BottomRight: 'bottomRight',\n} as const;\nexport type G9ToastPosition = (typeof G9ToastPosition)[keyof typeof G9ToastPosition];\n\n/** Options of one toast (MAUI `G9ToastOptions`). */\nexport interface G9ToastOptions {\n /** Default: bottom right (LTR) / bottom left (RTL). */\n readonly position?: G9ToastPosition | null;\n /** Auto-dismiss after this many ms. Default 3000. */\n readonly durationMs?: number;\n /** Icon override; default the type's glyph. */\n readonly icon?: G9IconInput;\n /** Action button text (e.g. \"Undo\"); with `action`. */\n readonly actionText?: string | null;\n /** Runs once when the action button is tapped (through the provider's safe executor). */\n readonly action?: (() => unknown) | null;\n}\n\n/** Default toast options (MAUI `G9ToastOptions.Default`). */\nexport const g9DefaultToastOptions: Readonly<Required<Pick<G9ToastOptions, 'durationMs'>>> = Object.freeze({\n durationMs: 3000,\n});\n\n/** Timings (MAUI toast guide). */\nexport const g9ToastTimings = Object.freeze({\n enterMs: 250,\n exitMs: 200,\n loaderFadeInMs: 200,\n loaderFadeOutMs: 180,\n reanchorMs: 220,\n});\n/** Most toasts per stack (MAUI `MaxToastsPerStack`). */\nexport const g9MaxToastsPerStack = 4;\n\n/** One live toast. */\nexport interface G9ToastEntry {\n readonly id: number;\n readonly message: string;\n readonly type: G9ToastType;\n readonly position: G9ToastPosition;\n readonly icon: G9IconInput;\n readonly actionText: string | null;\n readonly hasAction: boolean;\n readonly status: 'entering' | 'shown' | 'leaving';\n /** Bumped when an identical toast collapsed into this one (its lifetime restarted). */\n readonly refreshes: number;\n /** Its lifetime (the countdown fill runs over it; 0 or less = sticky, no fill). */\n readonly durationMs: number;\n}\n\n/** The full-screen loader (visible while at least one hold is open). */\nexport interface G9LoaderState {\n readonly text: string;\n readonly status: 'entering' | 'shown' | 'leaving';\n}\n\n/** The compact loading toast. */\nexport interface G9LoadingToastState {\n readonly text: string;\n readonly position: G9ToastPosition;\n}\n\n/** The progress toast. */\nexport interface G9ProgressToastState {\n readonly title: string;\n readonly detail: string | null;\n /** 0…1. */\n readonly progress: number;\n readonly position: G9ToastPosition;\n}\n\n/** What the view renders. */\nexport interface G9ToastSnapshot {\n readonly toasts: ReadonlyArray<G9ToastEntry>;\n readonly loader: G9LoaderState | null;\n readonly loadingToast: G9LoadingToastState | null;\n readonly progress: G9ProgressToastState | null;\n /** Bumped by `refreshBottomInsets`; `reanchorAnimated` says whether the move glides. */\n readonly insetVersion: number;\n readonly reanchorAnimated: boolean;\n /** Heights of bottom-anchored overlays the bottom stacks sit above (MAUI `IG9BottomAnchoredOverlay`). */\n readonly bottomOverlayHeight: number;\n}\n\n/** A hold on the full-screen loader (MAUI `BeginLoadingAsync` lease); disposing twice is harmless. */\nexport interface G9LoadingLease {\n dispose(): void;\n}\n\n/** A shown toast. */\nexport interface G9ToastHandle {\n readonly id: number;\n dismiss(): void;\n /** Settles when the toast left the screen. */\n readonly closed: Promise<void>;\n}\n\n/** Timing and action plumbing of the store. */\nexport interface G9ToastStoreConfig {\n setTimer(callback: () => void, ms: number): unknown;\n clearTimer(handle: unknown): void;\n /** Runs a toast action (once per tap is the store's job; errors are the runner's). */\n runAction(action: () => unknown): void;\n /** Where a toast without a position goes (bottom right in LTR, bottom left in RTL). */\n defaultPosition(): G9ToastPosition;\n}\n\ninterface ToastRecord {\n entry: G9ToastEntry;\n action: (() => unknown) | null;\n durationMs: number;\n timer: unknown;\n actionRan: boolean;\n closed: () => void;\n}\n\ninterface Hold {\n readonly token: number;\n readonly text: string;\n readonly lease: boolean;\n}\n\nconst isPlain = (r: ToastRecord) => !r.entry.hasAction;\n\n/** The toast store. */\nexport class G9ToastStore {\n private records: ToastRecord[] = [];\n private holds: Hold[] = [];\n private loaderStatus: G9LoaderState['status'] | null = null;\n private loaderText = '';\n private loaderTimer: unknown = null;\n private loadingToast: G9LoadingToastState | null = null;\n private progress: G9ProgressToastState | null = null;\n private insetVersion = 0;\n private reanchorAnimated = true;\n private readonly overlays = new Map<string, number>();\n private nextId = 1;\n private readonly listeners = new Set<() => void>();\n private snapshot: G9ToastSnapshot;\n private disposed = false;\n\n constructor(private readonly config: G9ToastStoreConfig) {\n this.snapshot = this.build();\n }\n\n getSnapshot(): G9ToastSnapshot {\n return this.snapshot;\n }\n\n subscribe(listener: () => void): () => void {\n this.listeners.add(listener);\n return () => this.listeners.delete(listener);\n }\n\n /**\n * Shows a toast (MAUI `ShowToastAsync`). An identical newest toast of the same stack (same message and type, no\n * action on either) is refreshed instead (lifetime restarted). Past four per stack the oldest leaves.\n */\n show(message: string, type: G9ToastType = 'information', options: G9ToastOptions = {}): G9ToastHandle {\n const position = options.position ?? this.config.defaultPosition();\n const hasAction = !!options.actionText && !!options.action;\n const duration = options.durationMs ?? g9DefaultToastOptions.durationMs;\n const stack = this.records.filter((r) => r.entry.position === position && r.entry.status !== 'leaving');\n const newest = stack[stack.length - 1];\n if (\n !this.disposed &&\n newest &&\n !hasAction &&\n isPlain(newest) &&\n newest.entry.message === message &&\n newest.entry.type === type\n ) {\n newest.entry = { ...newest.entry, refreshes: newest.entry.refreshes + 1, durationMs: duration };\n newest.durationMs = duration;\n this.arm(newest);\n this.emit();\n return this.handle(newest);\n }\n let closed!: () => void;\n const done = new Promise<void>((r) => (closed = r));\n const record: ToastRecord = {\n entry: {\n id: this.nextId++,\n message,\n type,\n position,\n icon: options.icon,\n actionText: hasAction ? (options.actionText as string) : null,\n hasAction,\n status: 'entering',\n refreshes: 0,\n durationMs: duration,\n },\n action: hasAction ? (options.action as () => unknown) : null,\n durationMs: duration,\n timer: null,\n actionRan: false,\n closed,\n };\n if (this.disposed) {\n closed();\n return { id: record.entry.id, dismiss: () => {}, closed: done };\n }\n this.records.push(record);\n for (const extra of stack.slice(0, Math.max(0, stack.length + 1 - g9MaxToastsPerStack))) this.leave(extra);\n this.later(() => {\n if (record.entry.status === 'entering') {\n record.entry = { ...record.entry, status: 'shown' };\n this.emit();\n }\n }, g9ToastTimings.enterMs);\n this.arm(record);\n this.emit();\n return { ...this.handle(record), closed: done };\n }\n\n /** Dismisses one toast, or every typed toast (MAUI `DismissToastAsync`). */\n dismissToast(id?: number): void {\n for (const r of [...this.records]) if (id === undefined || r.entry.id === id) this.leave(r);\n }\n\n /** The action button: runs the action once (a second tap during the exit does nothing) and dismisses. */\n pressAction(id: number): void {\n const r = this.records.find((x) => x.entry.id === id);\n if (!r || r.actionRan || !r.action) return;\n r.actionRan = true;\n this.config.runAction(r.action);\n this.leave(r);\n }\n\n /** Raises the full-screen loader (reference-counted; the newest text wins) (MAUI `ShowLoadingAsync`). */\n showLoading(text = ''): void {\n this.hold({ token: this.nextId++, text, lease: false });\n }\n\n /** A lease on the loader (MAUI `BeginLoadingAsync`). */\n beginLoading(text = ''): G9LoadingLease {\n const hold = { token: this.nextId++, text, lease: true };\n this.hold(hold);\n let released = false;\n return {\n dispose: () => {\n if (released) return;\n released = true;\n this.release(hold.token);\n },\n };\n }\n\n /** Releases the newest anonymous hold; a lease's hold is never released here (MAUI `DismissLoadingAsync`). */\n dismissLoading(): void {\n const anonymous = [...this.holds].reverse().find((h) => !h.lease);\n if (anonymous) this.release(anonymous.token);\n }\n\n /** Shows (or relabels) the compact loading toast (MAUI `ShowLoadingToastAsync`); it never auto-dismisses. */\n showLoadingToast(text = '', position: G9ToastPosition | null = null): void {\n this.loadingToast = { text, position: position ?? this.config.defaultPosition() };\n this.emit();\n }\n\n dismissLoadingToast(): void {\n if (!this.loadingToast) return;\n this.loadingToast = null;\n this.emit();\n }\n\n /** Shows the progress toast, replacing an active one (MAUI `ShowProgressToastAsync`). */\n showProgress(\n title: string,\n detail: string | null = null,\n progress = 0,\n position: G9ToastPosition | null = null,\n ): void {\n this.progress = { title, detail, progress: clamp01(progress), position: position ?? this.config.defaultPosition() };\n this.emit();\n }\n\n /** Updates the progress toast; omitted parts stay (MAUI `UpdateProgressToastAsync`). No-op without one. */\n updateProgress(title?: string | null, detail?: string | null, progress?: number | null): void {\n if (!this.progress) return;\n this.progress = {\n ...this.progress,\n ...(title != null ? { title } : {}),\n ...(detail !== undefined && detail !== null ? { detail } : {}),\n ...(progress != null ? { progress: clamp01(progress) } : {}),\n };\n this.emit();\n }\n\n dismissProgress(): void {\n if (!this.progress) return;\n this.progress = null;\n this.emit();\n }\n\n /** Re-anchors every live toast to the current insets; `animate` glides (220 ms) (MAUI `RefreshBottomInsetsAsync`). */\n refreshBottomInsets(animate = true): void {\n this.insetVersion += 1;\n this.reanchorAnimated = animate;\n this.emit();\n }\n\n /** Registers (or clears with `null`) a bottom-anchored overlay the bottom stacks must sit above. */\n setBottomOverlay(key: string, heightPx: number | null): void {\n if (heightPx === null || heightPx <= 0) this.overlays.delete(key);\n else this.overlays.set(key, heightPx);\n this.emit();\n }\n\n /** Clears everything, the loader regardless of its count (MAUI `DismissAllAsync`). */\n dismissAll(): void {\n this.dismissToast();\n this.holds = [];\n this.updateLoader();\n this.loadingToast = null;\n this.progress = null;\n this.emit();\n }\n\n /** The host unmounted. */\n dispose(): void {\n this.disposed = true;\n for (const r of this.records) {\n if (r.timer !== null) this.config.clearTimer(r.timer);\n r.closed();\n }\n this.records = [];\n if (this.loaderTimer !== null) this.config.clearTimer(this.loaderTimer);\n this.holds = [];\n this.loaderStatus = null;\n this.emit();\n }\n\n private handle(record: ToastRecord): G9ToastHandle {\n return {\n id: record.entry.id,\n dismiss: () => this.leave(record),\n closed: Promise.resolve(),\n };\n }\n\n private arm(record: ToastRecord): void {\n if (record.timer !== null) this.config.clearTimer(record.timer);\n record.timer = this.config.setTimer(() => {\n record.timer = null;\n this.leave(record);\n }, record.durationMs);\n }\n\n private leave(record: ToastRecord): void {\n if (record.entry.status === 'leaving' || !this.records.includes(record)) return;\n if (record.timer !== null) this.config.clearTimer(record.timer);\n record.timer = null;\n record.entry = { ...record.entry, status: 'leaving' };\n this.emit();\n this.later(() => {\n this.records = this.records.filter((r) => r !== record);\n record.closed();\n this.emit();\n }, g9ToastTimings.exitMs);\n }\n\n private hold(hold: Hold): void {\n this.holds.push(hold);\n this.updateLoader();\n this.emit();\n }\n\n private release(token: number): void {\n this.holds = this.holds.filter((h) => h.token !== token);\n this.updateLoader();\n this.emit();\n }\n\n private updateLoader(): void {\n const top = this.holds[this.holds.length - 1];\n if (top) {\n this.loaderText = top.text;\n if (this.loaderStatus === null || this.loaderStatus === 'leaving') {\n if (this.loaderTimer !== null) this.config.clearTimer(this.loaderTimer);\n this.loaderStatus = 'entering';\n this.loaderTimer = this.config.setTimer(() => {\n this.loaderTimer = null;\n this.loaderStatus = 'shown';\n this.emit();\n }, g9ToastTimings.loaderFadeInMs);\n }\n return;\n }\n if (this.loaderStatus === null || this.loaderStatus === 'leaving') return;\n if (this.loaderTimer !== null) this.config.clearTimer(this.loaderTimer);\n this.loaderStatus = 'leaving';\n this.loaderTimer = this.config.setTimer(() => {\n this.loaderTimer = null;\n this.loaderStatus = null;\n this.emit();\n }, g9ToastTimings.loaderFadeOutMs);\n }\n\n private later(callback: () => void, ms: number): void {\n this.config.setTimer(() => {\n if (!this.disposed) callback();\n }, ms);\n }\n\n private build(): G9ToastSnapshot {\n return {\n toasts: this.records.map((r) => r.entry),\n loader: this.loaderStatus ? { text: this.loaderText, status: this.loaderStatus } : null,\n loadingToast: this.loadingToast,\n progress: this.progress,\n insetVersion: this.insetVersion,\n reanchorAnimated: this.reanchorAnimated,\n bottomOverlayHeight: [...this.overlays.values()].reduce((a, b) => a + b, 0),\n };\n }\n\n private emit(): void {\n this.snapshot = this.build();\n for (const l of this.listeners) l();\n }\n}\n\nfunction clamp01(v: number): number {\n return Number.isFinite(v) ? Math.min(1, Math.max(0, v)) : 0;\n}\n\n/** The culture default position: bottom right in LTR, bottom left in RTL. */\nexport function resolveToastPosition(position: G9ToastPosition | null | undefined, rtl: boolean): G9ToastPosition {\n return position ?? (rtl ? 'bottomLeft' : 'bottomRight');\n}\n"],"names":["G9ToastType","G9ToastPosition","g9DefaultToastOptions","Object","g9ToastTimings","g9MaxToastsPerStack","isPlain","r","G9ToastStore","listener","message","type","options","_options_position","_options_durationMs","position","hasAction","duration","stack","newest","closed","done","Promise","record","extra","Math","id","undefined","x","text","hold","released","anonymous","h","title","detail","progress","clamp01","animate","key","heightPx","token","top","callback","ms","a","b","l","config","Map","Set","v","Number","resolveToastPosition","rtl"],"mappings":"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"}
1
+ {"version":3,"file":"toast/store.jsx","sources":["../../src/toast/store.ts"],"sourcesContent":["import { g9Ms } from '@g9tm/lynxcontrols-foundation';\nimport type { G9IconInput } from '../icon/icon';\n\n// Toast state (MAUI `G9ToastHelper`): typed toasts in per-position stacks, the reference-counted full-screen loader,\n// the compact loading toast and the progress toast, as a pure store. The view renders `getSnapshot()`; timers come\n// from the caller so tests drive time.\n\n/** Toast kind (MAUI `G9ToastType`). */\nexport const G9ToastType = {\n Information: 'information',\n Success: 'success',\n Warning: 'warning',\n Error: 'error',\n} as const;\nexport type G9ToastType = (typeof G9ToastType)[keyof typeof G9ToastType];\n\n/** Nine anchors (MAUI `G9ToastPosition`). */\nexport const G9ToastPosition = {\n TopLeft: 'topLeft',\n TopCenter: 'topCenter',\n TopRight: 'topRight',\n MiddleLeft: 'middleLeft',\n MiddleCenter: 'middleCenter',\n MiddleRight: 'middleRight',\n BottomLeft: 'bottomLeft',\n BottomCenter: 'bottomCenter',\n BottomRight: 'bottomRight',\n} as const;\nexport type G9ToastPosition = (typeof G9ToastPosition)[keyof typeof G9ToastPosition];\n\n/** Options of one toast (MAUI `G9ToastOptions`). */\nexport interface G9ToastOptions {\n /** Default: bottom right (LTR) / bottom left (RTL). */\n readonly position?: G9ToastPosition | null;\n /** Auto-dismiss after this many ms. Default 3000. */\n readonly durationMs?: number;\n /** Icon override; default the type's glyph. */\n readonly icon?: G9IconInput;\n /** Action button text (e.g. \"Undo\"); with `action`. */\n readonly actionText?: string | null;\n /** Runs once when the action button is tapped (through the provider's safe executor). */\n readonly action?: (() => unknown) | null;\n}\n\n/** Default toast options (MAUI `G9ToastOptions.Default`). */\nexport const g9DefaultToastOptions: Readonly<Required<Pick<G9ToastOptions, 'durationMs'>>> = Object.freeze({\n durationMs: 3000,\n});\n\n/** Timings (MAUI toast guide). */\nexport const g9ToastTimings = Object.freeze({\n enterMs: 250,\n exitMs: 200,\n loaderFadeInMs: 200,\n loaderFadeOutMs: 180,\n reanchorMs: 220,\n});\n/** Most toasts per stack (MAUI `MaxToastsPerStack`). */\nexport const g9MaxToastsPerStack = 4;\n\n/** One live toast. */\nexport interface G9ToastEntry {\n readonly id: number;\n readonly message: string;\n readonly type: G9ToastType;\n readonly position: G9ToastPosition;\n readonly icon: G9IconInput;\n readonly actionText: string | null;\n readonly hasAction: boolean;\n readonly status: 'entering' | 'shown' | 'leaving';\n /** Bumped when an identical toast collapsed into this one (its lifetime restarted). */\n readonly refreshes: number;\n /** Its lifetime (the countdown fill runs over it; 0 or less = sticky, no fill). */\n readonly durationMs: number;\n}\n\n/** The full-screen loader (visible while at least one hold is open). */\nexport interface G9LoaderState {\n readonly text: string;\n readonly status: 'entering' | 'shown' | 'leaving';\n}\n\n/** The compact loading toast. */\nexport interface G9LoadingToastState {\n readonly text: string;\n readonly position: G9ToastPosition;\n}\n\n/** The progress toast. */\nexport interface G9ProgressToastState {\n readonly title: string;\n readonly detail: string | null;\n /** 0…1. */\n readonly progress: number;\n readonly position: G9ToastPosition;\n}\n\n/** What the view renders. */\nexport interface G9ToastSnapshot {\n readonly toasts: ReadonlyArray<G9ToastEntry>;\n readonly loader: G9LoaderState | null;\n readonly loadingToast: G9LoadingToastState | null;\n readonly progress: G9ProgressToastState | null;\n /** Bumped by `refreshBottomInsets`; `reanchorAnimated` says whether the move glides. */\n readonly insetVersion: number;\n readonly reanchorAnimated: boolean;\n /** Heights of bottom-anchored overlays the bottom stacks sit above (MAUI `IG9BottomAnchoredOverlay`). */\n readonly bottomOverlayHeight: number;\n}\n\n/** A hold on the full-screen loader (MAUI `BeginLoadingAsync` lease); disposing twice is harmless. */\nexport interface G9LoadingLease {\n dispose(): void;\n}\n\n/** A shown toast. */\nexport interface G9ToastHandle {\n readonly id: number;\n dismiss(): void;\n /** Settles when the toast left the screen. */\n readonly closed: Promise<void>;\n}\n\n/** Timing and action plumbing of the store. */\nexport interface G9ToastStoreConfig {\n setTimer(callback: () => void, ms: number): unknown;\n clearTimer(handle: unknown): void;\n /** Runs a toast action (once per tap is the store's job; errors are the runner's). */\n runAction(action: () => unknown): void;\n /** Where a toast without a position goes (bottom right in LTR, bottom left in RTL). */\n defaultPosition(): G9ToastPosition;\n}\n\ninterface ToastRecord {\n entry: G9ToastEntry;\n action: (() => unknown) | null;\n durationMs: number;\n timer: unknown;\n actionRan: boolean;\n closed: () => void;\n}\n\ninterface Hold {\n readonly token: number;\n readonly text: string;\n readonly lease: boolean;\n}\n\nconst isPlain = (r: ToastRecord) => !r.entry.hasAction;\n\n/** The toast store. */\nexport class G9ToastStore {\n private records: ToastRecord[] = [];\n private holds: Hold[] = [];\n private loaderStatus: G9LoaderState['status'] | null = null;\n private loaderText = '';\n private loaderTimer: unknown = null;\n private loadingToast: G9LoadingToastState | null = null;\n private progress: G9ProgressToastState | null = null;\n private insetVersion = 0;\n private reanchorAnimated = true;\n private readonly overlays = new Map<string, number>();\n private nextId = 1;\n private readonly listeners = new Set<() => void>();\n private snapshot: G9ToastSnapshot;\n private disposed = false;\n\n constructor(private readonly config: G9ToastStoreConfig) {\n this.snapshot = this.build();\n }\n\n getSnapshot(): G9ToastSnapshot {\n return this.snapshot;\n }\n\n subscribe(listener: () => void): () => void {\n this.listeners.add(listener);\n return () => this.listeners.delete(listener);\n }\n\n /**\n * Shows a toast (MAUI `ShowToastAsync`). An identical newest toast of the same stack (same message and type, no\n * action on either) is refreshed instead (lifetime restarted). Past four per stack the oldest leaves.\n */\n show(message: string, type: G9ToastType = 'information', options: G9ToastOptions = {}): G9ToastHandle {\n const position = options.position ?? this.config.defaultPosition();\n const hasAction = !!options.actionText && !!options.action;\n const duration = options.durationMs ?? g9DefaultToastOptions.durationMs;\n const stack = this.records.filter((r) => r.entry.position === position && r.entry.status !== 'leaving');\n const newest = stack[stack.length - 1];\n if (\n !this.disposed &&\n newest &&\n !hasAction &&\n isPlain(newest) &&\n newest.entry.message === message &&\n newest.entry.type === type\n ) {\n newest.entry = { ...newest.entry, refreshes: newest.entry.refreshes + 1, durationMs: duration };\n newest.durationMs = duration;\n this.arm(newest);\n this.emit();\n return this.handle(newest);\n }\n let closed!: () => void;\n const done = new Promise<void>((r) => (closed = r));\n const record: ToastRecord = {\n entry: {\n id: this.nextId++,\n message,\n type,\n position,\n icon: options.icon,\n actionText: hasAction ? (options.actionText as string) : null,\n hasAction,\n status: 'entering',\n refreshes: 0,\n durationMs: duration,\n },\n action: hasAction ? (options.action as () => unknown) : null,\n durationMs: duration,\n timer: null,\n actionRan: false,\n closed,\n };\n if (this.disposed) {\n closed();\n return { id: record.entry.id, dismiss: () => {}, closed: done };\n }\n this.records.push(record);\n for (const extra of stack.slice(0, Math.max(0, stack.length + 1 - g9MaxToastsPerStack))) this.leave(extra);\n this.later(() => {\n if (record.entry.status === 'entering') {\n record.entry = { ...record.entry, status: 'shown' };\n this.emit();\n }\n }, g9Ms(g9ToastTimings.enterMs));\n this.arm(record);\n this.emit();\n return { ...this.handle(record), closed: done };\n }\n\n /** Dismisses one toast, or every typed toast (MAUI `DismissToastAsync`). */\n dismissToast(id?: number): void {\n for (const r of [...this.records]) if (id === undefined || r.entry.id === id) this.leave(r);\n }\n\n /** The action button: runs the action once (a second tap during the exit does nothing) and dismisses. */\n pressAction(id: number): void {\n const r = this.records.find((x) => x.entry.id === id);\n if (!r || r.actionRan || !r.action) return;\n r.actionRan = true;\n this.config.runAction(r.action);\n this.leave(r);\n }\n\n /** Raises the full-screen loader (reference-counted; the newest text wins) (MAUI `ShowLoadingAsync`). */\n showLoading(text = ''): void {\n this.hold({ token: this.nextId++, text, lease: false });\n }\n\n /** A lease on the loader (MAUI `BeginLoadingAsync`). */\n beginLoading(text = ''): G9LoadingLease {\n const hold = { token: this.nextId++, text, lease: true };\n this.hold(hold);\n let released = false;\n return {\n dispose: () => {\n if (released) return;\n released = true;\n this.release(hold.token);\n },\n };\n }\n\n /** Releases the newest anonymous hold; a lease's hold is never released here (MAUI `DismissLoadingAsync`). */\n dismissLoading(): void {\n const anonymous = [...this.holds].reverse().find((h) => !h.lease);\n if (anonymous) this.release(anonymous.token);\n }\n\n /** Shows (or relabels) the compact loading toast (MAUI `ShowLoadingToastAsync`); it never auto-dismisses. */\n showLoadingToast(text = '', position: G9ToastPosition | null = null): void {\n this.loadingToast = { text, position: position ?? this.config.defaultPosition() };\n this.emit();\n }\n\n dismissLoadingToast(): void {\n if (!this.loadingToast) return;\n this.loadingToast = null;\n this.emit();\n }\n\n /** Shows the progress toast, replacing an active one (MAUI `ShowProgressToastAsync`). */\n showProgress(\n title: string,\n detail: string | null = null,\n progress = 0,\n position: G9ToastPosition | null = null,\n ): void {\n this.progress = { title, detail, progress: clamp01(progress), position: position ?? this.config.defaultPosition() };\n this.emit();\n }\n\n /** Updates the progress toast; omitted parts stay (MAUI `UpdateProgressToastAsync`). No-op without one. */\n updateProgress(title?: string | null, detail?: string | null, progress?: number | null): void {\n if (!this.progress) return;\n this.progress = {\n ...this.progress,\n ...(title != null ? { title } : {}),\n ...(detail !== undefined && detail !== null ? { detail } : {}),\n ...(progress != null ? { progress: clamp01(progress) } : {}),\n };\n this.emit();\n }\n\n dismissProgress(): void {\n if (!this.progress) return;\n this.progress = null;\n this.emit();\n }\n\n /** Re-anchors every live toast to the current insets; `animate` glides (220 ms) (MAUI `RefreshBottomInsetsAsync`). */\n refreshBottomInsets(animate = true): void {\n this.insetVersion += 1;\n this.reanchorAnimated = animate;\n this.emit();\n }\n\n /** Registers (or clears with `null`) a bottom-anchored overlay the bottom stacks must sit above. */\n setBottomOverlay(key: string, heightPx: number | null): void {\n if (heightPx === null || heightPx <= 0) this.overlays.delete(key);\n else this.overlays.set(key, heightPx);\n this.emit();\n }\n\n /** Clears everything, the loader regardless of its count (MAUI `DismissAllAsync`). */\n dismissAll(): void {\n this.dismissToast();\n this.holds = [];\n this.updateLoader();\n this.loadingToast = null;\n this.progress = null;\n this.emit();\n }\n\n /** The host unmounted. */\n dispose(): void {\n this.disposed = true;\n for (const r of this.records) {\n if (r.timer !== null) this.config.clearTimer(r.timer);\n r.closed();\n }\n this.records = [];\n if (this.loaderTimer !== null) this.config.clearTimer(this.loaderTimer);\n this.holds = [];\n this.loaderStatus = null;\n this.emit();\n }\n\n private handle(record: ToastRecord): G9ToastHandle {\n return {\n id: record.entry.id,\n dismiss: () => this.leave(record),\n closed: Promise.resolve(),\n };\n }\n\n private arm(record: ToastRecord): void {\n if (record.timer !== null) this.config.clearTimer(record.timer);\n record.timer = this.config.setTimer(() => {\n record.timer = null;\n this.leave(record);\n }, record.durationMs);\n }\n\n private leave(record: ToastRecord): void {\n if (record.entry.status === 'leaving' || !this.records.includes(record)) return;\n if (record.timer !== null) this.config.clearTimer(record.timer);\n record.timer = null;\n record.entry = { ...record.entry, status: 'leaving' };\n this.emit();\n this.later(() => {\n this.records = this.records.filter((r) => r !== record);\n record.closed();\n this.emit();\n }, g9Ms(g9ToastTimings.exitMs));\n }\n\n private hold(hold: Hold): void {\n this.holds.push(hold);\n this.updateLoader();\n this.emit();\n }\n\n private release(token: number): void {\n this.holds = this.holds.filter((h) => h.token !== token);\n this.updateLoader();\n this.emit();\n }\n\n private updateLoader(): void {\n const top = this.holds[this.holds.length - 1];\n if (top) {\n this.loaderText = top.text;\n if (this.loaderStatus === null || this.loaderStatus === 'leaving') {\n if (this.loaderTimer !== null) this.config.clearTimer(this.loaderTimer);\n this.loaderStatus = 'entering';\n this.loaderTimer = this.config.setTimer(() => {\n this.loaderTimer = null;\n this.loaderStatus = 'shown';\n this.emit();\n }, g9ToastTimings.loaderFadeInMs);\n }\n return;\n }\n if (this.loaderStatus === null || this.loaderStatus === 'leaving') return;\n if (this.loaderTimer !== null) this.config.clearTimer(this.loaderTimer);\n this.loaderStatus = 'leaving';\n this.loaderTimer = this.config.setTimer(() => {\n this.loaderTimer = null;\n this.loaderStatus = null;\n this.emit();\n }, g9ToastTimings.loaderFadeOutMs);\n }\n\n private later(callback: () => void, ms: number): void {\n this.config.setTimer(() => {\n if (!this.disposed) callback();\n }, ms);\n }\n\n private build(): G9ToastSnapshot {\n return {\n toasts: this.records.map((r) => r.entry),\n loader: this.loaderStatus ? { text: this.loaderText, status: this.loaderStatus } : null,\n loadingToast: this.loadingToast,\n progress: this.progress,\n insetVersion: this.insetVersion,\n reanchorAnimated: this.reanchorAnimated,\n bottomOverlayHeight: [...this.overlays.values()].reduce((a, b) => a + b, 0),\n };\n }\n\n private emit(): void {\n this.snapshot = this.build();\n for (const l of this.listeners) l();\n }\n}\n\nfunction clamp01(v: number): number {\n return Number.isFinite(v) ? Math.min(1, Math.max(0, v)) : 0;\n}\n\n/** The culture default position: bottom right in LTR, bottom left in RTL. */\nexport function resolveToastPosition(position: G9ToastPosition | null | undefined, rtl: boolean): G9ToastPosition {\n return position ?? (rtl ? 'bottomLeft' : 'bottomRight');\n}\n"],"names":["G9ToastType","G9ToastPosition","g9DefaultToastOptions","Object","g9ToastTimings","g9MaxToastsPerStack","isPlain","r","G9ToastStore","listener","message","type","options","_options_position","_options_durationMs","position","hasAction","duration","stack","newest","closed","done","Promise","record","extra","Math","g9Ms","id","undefined","x","text","hold","released","anonymous","h","title","detail","progress","clamp01","animate","key","heightPx","token","top","callback","ms","a","b","l","config","Map","Set","v","Number","resolveToastPosition","rtl"],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@g9tm/lynxcontrols",
3
- "version": "1.4.5",
3
+ "version": "1.4.7",
4
4
  "description": "ReactLynx controls and overlay infrastructure: provider/host, sheets, popups, toasts, fields, buttons, pickers, tab view, tab bar, edge panel, swipe rows.",
5
5
  "license": "MIT",
6
6
  "type": "module",
@@ -137,7 +137,7 @@
137
137
  "build": "rslib build"
138
138
  },
139
139
  "dependencies": {
140
- "@g9tm/lynxcontrols-foundation": "1.4.5",
140
+ "@g9tm/lynxcontrols-foundation": "1.4.7",
141
141
  "@lynx-js/lynx-ui-common": "3.139.0",
142
142
  "@lynx-js/lynx-ui-deferred-component": "3.139.0",
143
143
  "@lynx-js/lynx-ui-draggable": "3.139.0",
@@ -152,6 +152,6 @@
152
152
  "@lynx-js/lynx-ui-view-pager": "3.139.0"
153
153
  },
154
154
  "peerDependencies": {
155
- "@lynx-js/react": ">=0.126.2 <0.127.0"
155
+ "@lynx-js/react": ">=0.129.1 <0.130.0"
156
156
  }
157
157
  }