minisnackbar 1.0.1 → 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/README.md CHANGED
@@ -1,40 +1,46 @@
1
- # MiniSnackbar
2
-
3
- A simple, lightweight vanilla JavaScript snackbar/toast library with no dependencies. Works standalone or seamlessly blends with [Material Web](https://material-web.dev/) components, adapting to your site's theme when available. Since Material Web doesn't provide a snackbar component, this library fills that gap.
4
-
5
- **Author:** Shanto Islam ([shantoislamdev.web.app](https://shantoislamdev.web.app))
6
- **License:** MIT
7
- **Repository:** [github.com/shantoislamdev/minisnackbar](https://github.com/shantoislamdev/minisnackbar)
8
-
9
- ## Installation
10
-
11
- ```bash
12
- npm install minisnackbar
13
- ```
14
-
15
- ## Usage
16
-
17
- ```javascript
18
- import Snackbar from 'minisnackbar';
19
-
20
- // Initialize
21
- Snackbar.init();
22
-
23
- // Show a message
24
- Snackbar.add('Hello, world!');
25
- ```
26
-
27
- ## Browser Support
28
-
29
- - Chrome 60+
30
- - Firefox 55+
31
- - Safari 12+
32
- - Edge 79+
33
-
34
- ## Documentation
35
-
36
- For full documentation, API reference, and advanced usage, see [docs.md](docs.md).
37
-
38
- ## License
39
-
40
- MIT
1
+ # MiniSnackbar
2
+
3
+ ![TypeScript](https://img.shields.io/badge/TypeScript-007ACC?style=flat-square&logo=typescript&logoColor=white) ![License](https://img.shields.io/badge/license-MIT-blue.svg)
4
+
5
+ A simple, lightweight vanilla JavaScript snackbar/toast library with no dependencies. Works standalone or seamlessly blends with [Material Web](https://material-web.dev/) components, adapting to your site's theme when available. Since Material Web doesn't provide a snackbar component, this library fills that gap.
6
+
7
+ **Author:** Shanto Islam ([shantoislamdev.web.app](https://shantoislamdev.web.app))
8
+ **License:** MIT
9
+ **Repository:** [github.com/shantoislamdev/minisnackbar](https://github.com/shantoislamdev/minisnackbar)
10
+
11
+ ## Installation
12
+
13
+ ```bash
14
+ npm install minisnackbar
15
+ ```
16
+
17
+ ## Usage
18
+
19
+ ```javascript
20
+ // ES Module
21
+ import { Snackbar } from 'minisnackbar'
22
+
23
+ // CommonJS
24
+ const { Snackbar } = require('minisnackbar')
25
+
26
+ // Initialize
27
+ Snackbar.init()
28
+
29
+ // Show a message
30
+ Snackbar.add('Hello, world!')
31
+ ```
32
+
33
+ ## Browser Support
34
+
35
+ - Chrome 60+
36
+ - Firefox 55+
37
+ - Safari 12+
38
+ - Edge 79+
39
+
40
+ ## Documentation
41
+
42
+ For full documentation, API reference, and advanced usage, see [docs.md](docs.md).
43
+
44
+ ## License
45
+
46
+ MIT
@@ -0,0 +1,55 @@
1
+ /**
2
+ * MiniSnackbar - A simple vanilla JavaScript snackbar/toast library
3
+ *
4
+ * @version 2.0.0
5
+ * @author Shanto Islam <shantoislamdev@gmail.com>
6
+ * @license MIT
7
+ * @description A lightweight, zero-dependency snackbar library with Material Design integration
8
+ * @repository https://github.com/shantoislamdev/minisnackbar
9
+ * @homepage https://github.com/shantoislamdev/minisnackbar#readme
10
+ */
11
+ export interface SnackbarAction {
12
+ text: string;
13
+ handler: () => void;
14
+ }
15
+ export interface SnackbarOptions {
16
+ transitionDuration?: number;
17
+ }
18
+ export interface SnackbarItem {
19
+ message: string;
20
+ action: SnackbarAction | null;
21
+ duration: number;
22
+ }
23
+ type SnackbarState = 'idle' | 'showing' | 'transitioning';
24
+ declare class Snackbar {
25
+ private static _queue;
26
+ private static _isShowing;
27
+ private static _currentTimeout;
28
+ private static _state;
29
+ private static _currentActionHandler;
30
+ private static _transitionDuration;
31
+ private static _initialized;
32
+ static init(options?: SnackbarOptions): void;
33
+ static destroy(): void;
34
+ static getTransitionDuration(): number;
35
+ static add(message: string, action?: SnackbarAction | null, duration?: number): void;
36
+ private static _cleanupAction;
37
+ private static _showSnackbar;
38
+ private static _hideSnackbar;
39
+ static show(message: string, action?: SnackbarAction | null, duration?: number): void;
40
+ static showNext(): void;
41
+ static clearQueue(): void;
42
+ static hideCurrent(): void;
43
+ static isInitialized(): boolean;
44
+ static get queue(): SnackbarItem[];
45
+ static set queue(value: SnackbarItem[]);
46
+ static get isShowing(): boolean;
47
+ static set isShowing(value: boolean);
48
+ static get currentTimeout(): ReturnType<typeof setTimeout> | null;
49
+ static set currentTimeout(value: ReturnType<typeof setTimeout> | null);
50
+ static get state(): SnackbarState;
51
+ static set state(value: SnackbarState);
52
+ }
53
+ export default Snackbar;
54
+ export { Snackbar };
55
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAGH,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAA;IACZ,OAAO,EAAE,MAAM,IAAI,CAAA;CACpB;AAED,MAAM,WAAW,eAAe;IAC9B,kBAAkB,CAAC,EAAE,MAAM,CAAA;CAC5B;AAED,MAAM,WAAW,YAAY;IAC3B,OAAO,EAAE,MAAM,CAAA;IACf,MAAM,EAAE,cAAc,GAAG,IAAI,CAAA;IAC7B,QAAQ,EAAE,MAAM,CAAA;CACjB;AAED,KAAK,aAAa,GAAG,MAAM,GAAG,SAAS,GAAG,eAAe,CAAA;AAGzD,cAAM,QAAQ;IACZ,OAAO,CAAC,MAAM,CAAC,MAAM,CAAqB;IAC1C,OAAO,CAAC,MAAM,CAAC,UAAU,CAAiB;IAC1C,OAAO,CAAC,MAAM,CAAC,eAAe,CAA6C;IAC3E,OAAO,CAAC,MAAM,CAAC,MAAM,CAAwB;IAC7C,OAAO,CAAC,MAAM,CAAC,qBAAqB,CAA4B;IAChE,OAAO,CAAC,MAAM,CAAC,mBAAmB,CAAc;IAChD,OAAO,CAAC,MAAM,CAAC,YAAY,CAAiB;IAE5C,MAAM,CAAC,IAAI,CAAC,OAAO,GAAE,eAAoB,GAAG,IAAI;IAqIhD,MAAM,CAAC,OAAO,IAAI,IAAI;IAiBtB,MAAM,CAAC,qBAAqB,IAAI,MAAM;IAkBtC,MAAM,CAAC,GAAG,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,GAAE,cAAc,GAAG,IAAW,EAAE,QAAQ,GAAE,MAAa,GAAG,IAAI;IA8BhG,OAAO,CAAC,MAAM,CAAC,cAAc;IAY7B,OAAO,CAAC,MAAM,CAAC,aAAa;IA8C5B,OAAO,CAAC,MAAM,CAAC,aAAa;IAuB5B,MAAM,CAAC,IAAI,CACT,OAAO,EAAE,MAAM,EACf,MAAM,GAAE,cAAc,GAAG,IAAW,EACpC,QAAQ,GAAE,MAAa,GACtB,IAAI;IAwDP,MAAM,CAAC,QAAQ,IAAI,IAAI;IAgBvB,MAAM,CAAC,UAAU,IAAI,IAAI;IAIzB,MAAM,CAAC,WAAW,IAAI,IAAI;IAM1B,MAAM,CAAC,aAAa,IAAI,OAAO;IAK/B,MAAM,KAAK,KAAK,IAAI,YAAY,EAAE,CAEjC;IACD,MAAM,KAAK,KAAK,CAAC,KAAK,EAAE,YAAY,EAAE,EAErC;IACD,MAAM,KAAK,SAAS,IAAI,OAAO,CAE9B;IACD,MAAM,KAAK,SAAS,CAAC,KAAK,EAAE,OAAO,EAElC;IACD,MAAM,KAAK,cAAc,IAAI,UAAU,CAAC,OAAO,UAAU,CAAC,GAAG,IAAI,CAEhE;IACD,MAAM,KAAK,cAAc,CAAC,KAAK,EAAE,UAAU,CAAC,OAAO,UAAU,CAAC,GAAG,IAAI,EAEpE;IACD,MAAM,KAAK,KAAK,IAAI,aAAa,CAEhC;IACD,MAAM,KAAK,KAAK,CAAC,KAAK,EAAE,aAAa,EAEpC;CACF;AAOD,eAAe,QAAQ,CAAA;AACvB,OAAO,EAAE,QAAQ,EAAE,CAAA"}
@@ -0,0 +1,381 @@
1
+ (function (global, factory) {
2
+ typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports) :
3
+ typeof define === 'function' && define.amd ? define(['exports'], factory) :
4
+ (global = typeof globalThis !== 'undefined' ? globalThis : global || self, factory(global.Snackbar = {}));
5
+ })(this, (function (exports) { 'use strict';
6
+
7
+ /**
8
+ * MiniSnackbar - A simple vanilla JavaScript snackbar/toast library
9
+ *
10
+ * @version 2.0.0
11
+ * @author Shanto Islam <shantoislamdev@gmail.com>
12
+ * @license MIT
13
+ * @description A lightweight, zero-dependency snackbar library with Material Design integration
14
+ * @repository https://github.com/shantoislamdev/minisnackbar
15
+ * @homepage https://github.com/shantoislamdev/minisnackbar#readme
16
+ */
17
+ // Snackbar class
18
+ class Snackbar {
19
+ static init(options = {}) {
20
+ if (this._initialized)
21
+ return;
22
+ if (typeof document === 'undefined' || !document.body) {
23
+ console.error('Snackbar: DOM is not available');
24
+ return;
25
+ }
26
+ if (options.transitionDuration && typeof options.transitionDuration === 'number') {
27
+ this._transitionDuration = options.transitionDuration;
28
+ }
29
+ if (document.getElementById('mini-snackbar')) {
30
+ this._initialized = true;
31
+ return;
32
+ }
33
+ if (!document.getElementById('mini-snackbar-styles')) {
34
+ const style = document.createElement('style');
35
+ style.id = 'mini-snackbar-styles';
36
+ style.textContent = `
37
+ .mini-snackbar {
38
+ /* Positioning */
39
+ position: fixed;
40
+ z-index: 1000;
41
+ left: 50%;
42
+ bottom: 30px;
43
+ transform: translateX(-50%) translateY(100%);
44
+
45
+ /* Sizing */
46
+ min-width: 250px;
47
+ max-width: 90%;
48
+
49
+ /* Layout */
50
+ display: flex;
51
+ align-items: center;
52
+ justify-content: space-between;
53
+ gap: 8px;
54
+ padding: 0.875rem 1rem;
55
+
56
+ /* Visibility */
57
+ visibility: hidden;
58
+
59
+ /* Theming */
60
+ background-color: var(--mini-snackbar-bg, var(--md-sys-color-inverse-surface, rgba(255, 255, 255, 1)));
61
+ color: var(--mini-snackbar-text, var(--md-sys-color-inverse-on-surface, rgba(27, 27, 27, 1)));
62
+ border: var(--mini-snackbar-border, none);
63
+ font-family: var(--mini-snackbar-font-family, inherit);
64
+ font-size: 0.875rem;
65
+ text-align: left;
66
+ border-radius: var(--mini-snackbar-radius, 1rem);
67
+ box-shadow: var(--mini-snackbar-shadow, 0 3px 5px -1px rgba(0,0,0,.2), 0 6px 10px 0 rgba(0,0,0,.14), 0 1px 18px 0 rgba(0,0,0,.12));
68
+
69
+ /* Animation */
70
+ transition: var(--mini-snackbar-transition, transform ${this._transitionDuration}ms ease-in-out);
71
+ }
72
+
73
+ .mini-snackbar.show {
74
+ visibility: visible;
75
+ transform: translateX(-50%) translateY(0);
76
+ }
77
+
78
+ /* Material Component Action Button */
79
+ .mini-snackbar .mini-snackbar-action {
80
+ flex-shrink: 0;
81
+ padding: 0.5rem 1rem;
82
+ margin: -0.5rem -0.5rem -0.5rem 0;
83
+ }
84
+
85
+ /* Fallback Action Button (when Material Components unavailable) */
86
+ .mini-snackbar md-text-button[data-fallback] {
87
+ display: inline-block;
88
+ flex-shrink: 0;
89
+ padding: 0.5rem 1rem;
90
+ margin: -0.5rem -0.5rem -0.5rem 0;
91
+ border: none;
92
+ background: var(--mini-snackbar-btn-bg, transparent);
93
+ font-size: inherit;
94
+ font-family: inherit;
95
+ font-weight: 500;
96
+ letter-spacing: 0.0892857143em;
97
+ text-transform: uppercase;
98
+ color: var(--mini-snackbar-btn-text, inherit);
99
+ cursor: pointer;
100
+ user-select: none;
101
+ border-radius: var(--mini-snackbar-btn-radius, 1rem);
102
+ transition: opacity 0.2s ease;
103
+ }
104
+
105
+ .mini-snackbar md-text-button[data-fallback]:hover {
106
+ opacity: var(--mini-snackbar-btn-hover-opacity, 0.8);
107
+ outline: var(--mini-snackbar-btn-hover-outline, 2px solid var(--mini-snackbar-btn-text, inherit));
108
+ outline-offset: var(--mini-snackbar-btn-outline-offset, 2px);
109
+ background-color: var(--mini-snackbar-btn-hover-bg, transparent);
110
+ }
111
+
112
+ .mini-snackbar md-text-button[data-fallback]:focus {
113
+ outline: var(--mini-snackbar-btn-focus-outline, 2px solid var(--mini-snackbar-btn-text, inherit));
114
+ outline-offset: var(--mini-snackbar-btn-outline-offset, 2px);
115
+ }
116
+
117
+ /* Mobile responsive */
118
+ @media (max-width: 600px) {
119
+ .mini-snackbar {
120
+ bottom: 90px;
121
+ }
122
+ }
123
+
124
+ /* Accessibility: Reduced motion */
125
+ @media (prefers-reduced-motion: reduce) {
126
+ .mini-snackbar {
127
+ transition: opacity 0.15s ease;
128
+ }
129
+ }
130
+ `;
131
+ document.head.appendChild(style);
132
+ }
133
+ const snackbar = document.createElement('div');
134
+ snackbar.id = 'mini-snackbar';
135
+ snackbar.className = 'mini-snackbar';
136
+ snackbar.setAttribute('role', 'alert');
137
+ snackbar.setAttribute('aria-live', 'assertive');
138
+ snackbar.setAttribute('aria-atomic', 'true');
139
+ const snackbarText = document.createElement('span');
140
+ snackbarText.className = 'mini-snackbar-text';
141
+ snackbar.appendChild(snackbarText);
142
+ document.body.appendChild(snackbar);
143
+ this._initialized = true;
144
+ }
145
+ static destroy() {
146
+ this.hideCurrent();
147
+ this.clearQueue();
148
+ const snackbar = document.getElementById('mini-snackbar');
149
+ if (snackbar)
150
+ snackbar.remove();
151
+ const styles = document.getElementById('mini-snackbar-styles');
152
+ if (styles)
153
+ styles.remove();
154
+ this._state = 'idle';
155
+ this._isShowing = false;
156
+ this._currentActionHandler = null;
157
+ this._currentTimeout = null;
158
+ this._initialized = false;
159
+ }
160
+ static getTransitionDuration() {
161
+ const snackbar = document.getElementById('mini-snackbar');
162
+ if (!snackbar)
163
+ return this._transitionDuration;
164
+ try {
165
+ const computedStyle = window.getComputedStyle(snackbar);
166
+ const duration = computedStyle.transitionDuration;
167
+ if (duration && duration !== '0s') {
168
+ const value = parseFloat(duration);
169
+ return duration.includes('ms') ? value : value * 1000;
170
+ }
171
+ }
172
+ catch (e) {
173
+ console.warn('Snackbar: Could not read transition duration from CSS', e);
174
+ }
175
+ return this._transitionDuration;
176
+ }
177
+ static add(message, action = null, duration = 3000) {
178
+ if (!this._initialized) {
179
+ console.warn('Snackbar: Not initialized. Call Snackbar.init() first.');
180
+ return;
181
+ }
182
+ if (typeof message !== 'string' || message.trim() === '') {
183
+ console.warn('Snackbar: Message must be a non-empty string');
184
+ return;
185
+ }
186
+ if (action !== null &&
187
+ (typeof action !== 'object' ||
188
+ typeof action.text !== 'string' ||
189
+ typeof action.handler !== 'function')) {
190
+ console.warn('Snackbar: Action must be an object with "text" (string) and "handler" (function) properties');
191
+ return;
192
+ }
193
+ if (typeof duration !== 'number' || duration <= 0) {
194
+ console.warn('Snackbar: Duration must be a positive number');
195
+ return;
196
+ }
197
+ this._queue.push({ message, action, duration });
198
+ if (this._state === 'idle')
199
+ this.showNext();
200
+ }
201
+ static _cleanupAction() {
202
+ const snackbar = document.getElementById('mini-snackbar');
203
+ if (!snackbar)
204
+ return;
205
+ const actionButton = snackbar.querySelector('.mini-snackbar-action');
206
+ if (actionButton && this._currentActionHandler) {
207
+ actionButton.removeEventListener('click', this._currentActionHandler);
208
+ this._currentActionHandler = null;
209
+ actionButton.remove();
210
+ }
211
+ }
212
+ static _showSnackbar(message, action, duration, onHide = null) {
213
+ const snackbar = document.getElementById('mini-snackbar');
214
+ if (!snackbar) {
215
+ console.error('Snackbar: Snackbar element not found. Ensure init() has been called.');
216
+ return;
217
+ }
218
+ this._state = 'showing';
219
+ this._isShowing = true;
220
+ const snackbarText = snackbar.querySelector('.mini-snackbar-text');
221
+ if (snackbarText) {
222
+ snackbarText.textContent = message;
223
+ }
224
+ if (action) {
225
+ const actionButton = document.createElement('md-text-button');
226
+ actionButton.classList.add('mini-snackbar-action');
227
+ // Fallback for when Material Components are not available
228
+ if (customElements.get('md-text-button') === undefined) {
229
+ actionButton.setAttribute('data-fallback', '');
230
+ }
231
+ actionButton.textContent = action.text;
232
+ this._currentActionHandler = () => {
233
+ action.handler();
234
+ this._hideSnackbar(onHide);
235
+ };
236
+ actionButton.addEventListener('click', this._currentActionHandler);
237
+ snackbar.appendChild(actionButton);
238
+ }
239
+ snackbar.classList.add('show');
240
+ this._currentTimeout = setTimeout(() => {
241
+ this._hideSnackbar(onHide);
242
+ }, duration);
243
+ }
244
+ static _hideSnackbar(onHide = null) {
245
+ if (this._currentTimeout) {
246
+ clearTimeout(this._currentTimeout);
247
+ this._currentTimeout = null;
248
+ }
249
+ this._state = 'transitioning';
250
+ const snackbar = document.getElementById('mini-snackbar');
251
+ if (snackbar) {
252
+ snackbar.classList.remove('show');
253
+ }
254
+ this._cleanupAction();
255
+ // Wait for CSS transition to complete
256
+ const transitionDuration = this.getTransitionDuration();
257
+ setTimeout(() => {
258
+ this._isShowing = false;
259
+ this._state = 'idle';
260
+ if (onHide)
261
+ onHide();
262
+ }, transitionDuration);
263
+ }
264
+ static show(message, action = null, duration = 3000) {
265
+ if (!this._initialized) {
266
+ console.warn('Snackbar: Not initialized. Call Snackbar.init() first.');
267
+ return;
268
+ }
269
+ if (typeof message !== 'string' || message.trim() === '') {
270
+ console.warn('Snackbar: Message must be a non-empty string');
271
+ return;
272
+ }
273
+ if (action !== null &&
274
+ (typeof action !== 'object' ||
275
+ typeof action.text !== 'string' ||
276
+ typeof action.handler !== 'function')) {
277
+ console.warn('Snackbar: Action must be an object with "text" (string) and "handler" (function) properties');
278
+ return;
279
+ }
280
+ if (typeof duration !== 'number' || duration <= 0) {
281
+ console.warn('Snackbar: Duration must be a positive number');
282
+ return;
283
+ }
284
+ // Queue message if currently transitioning
285
+ if (this._state === 'transitioning') {
286
+ this.add(message, action, duration);
287
+ return;
288
+ }
289
+ // Interrupt current snackbar if showing
290
+ if (this._isShowing) {
291
+ this._state = 'transitioning';
292
+ if (this._currentTimeout) {
293
+ clearTimeout(this._currentTimeout);
294
+ this._currentTimeout = null;
295
+ }
296
+ const snackbar = document.getElementById('mini-snackbar');
297
+ if (snackbar) {
298
+ snackbar.classList.remove('show');
299
+ }
300
+ this._cleanupAction();
301
+ const transitionDuration = this.getTransitionDuration();
302
+ setTimeout(() => {
303
+ this._isShowing = false;
304
+ this._state = 'idle';
305
+ this._showSnackbar(message, action, duration);
306
+ }, transitionDuration);
307
+ }
308
+ else {
309
+ this._showSnackbar(message, action, duration);
310
+ }
311
+ }
312
+ static showNext() {
313
+ if (this._queue.length === 0) {
314
+ this._isShowing = false;
315
+ this._state = 'idle';
316
+ return;
317
+ }
318
+ const item = this._queue.shift();
319
+ if (item) {
320
+ const { message, action, duration } = item;
321
+ this._showSnackbar(message, action, duration, () => {
322
+ setTimeout(() => this.showNext(), 200);
323
+ });
324
+ }
325
+ }
326
+ static clearQueue() {
327
+ this._queue = [];
328
+ }
329
+ static hideCurrent() {
330
+ if (this._isShowing && this._state !== 'transitioning') {
331
+ this._hideSnackbar();
332
+ }
333
+ }
334
+ static isInitialized() {
335
+ return this._initialized;
336
+ }
337
+ // Getters/setters for testing
338
+ static get queue() {
339
+ return this._queue;
340
+ }
341
+ static set queue(value) {
342
+ this._queue = value;
343
+ }
344
+ static get isShowing() {
345
+ return this._isShowing;
346
+ }
347
+ static set isShowing(value) {
348
+ this._isShowing = value;
349
+ }
350
+ static get currentTimeout() {
351
+ return this._currentTimeout;
352
+ }
353
+ static set currentTimeout(value) {
354
+ this._currentTimeout = value;
355
+ }
356
+ static get state() {
357
+ return this._state;
358
+ }
359
+ static set state(value) {
360
+ this._state = value;
361
+ }
362
+ }
363
+ Snackbar._queue = [];
364
+ Snackbar._isShowing = false;
365
+ Snackbar._currentTimeout = null;
366
+ Snackbar._state = 'idle';
367
+ Snackbar._currentActionHandler = null;
368
+ Snackbar._transitionDuration = 250;
369
+ Snackbar._initialized = false;
370
+ // Make available globally in browser for UMD builds
371
+ if (typeof window !== 'undefined') {
372
+ window.Snackbar = Snackbar;
373
+ }
374
+
375
+ exports.Snackbar = Snackbar;
376
+ exports.default = Snackbar;
377
+
378
+ Object.defineProperty(exports, '__esModule', { value: true });
379
+
380
+ }));
381
+ //# sourceMappingURL=minisnackbar.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"minisnackbar.cjs","sources":["../src/index.ts"],"sourcesContent":[null],"names":[],"mappings":"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"}