@mohasinac/utils 0.1.0 → 1.1.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.d.cts CHANGED
@@ -19,6 +19,7 @@ declare function nowMs(): number;
19
19
  declare function isSameMonth(a: Date | number, b: Date | number): boolean;
20
20
  declare function currentYear(): string;
21
21
  declare function nowISO(): string;
22
+ declare function formatCustomDate(date: Date | string, format?: "short" | "medium" | "long" | "full"): string;
22
23
 
23
24
  /**
24
25
  * Number Formatting Utilities
@@ -160,4 +161,193 @@ interface GeneratePayoutIdInput {
160
161
  }
161
162
  declare function generatePayoutId(input: GeneratePayoutIdInput): string;
162
163
 
163
- export { type GenerateAuctionIdInput, type GenerateBidIdInput, type GenerateBlogPostIdInput, type GenerateCarouselIdInput, type GenerateCategoryIdInput, type GenerateFAQIdInput, type GenerateHomepageSectionIdInput, type GenerateOrderIdInput, type GeneratePayoutIdInput, type GeneratePreOrderIdInput, type GenerateProductIdInput, type GenerateReviewIdInput, type GenerateUserIdInput, arrayToObject, booleanToString, capitalize, capitalizeWords, currentYear, dateToISOString, deleteCookie, escapeHtml, firestoreTimestampToDate, formatCompactNumber, formatCurrency, formatDate, formatDateRange, formatDateTime, formatDecimal, formatFileSize, formatMonthYear, formatNumber, formatOrdinal, formatPercentage, formatRelativeTime, formatTime, generateAuctionId, generateBidId, generateBlogPostId, generateCarouselId, generateCategoryId, generateCouponId, generateFAQId, generateHomepageSectionId, generateOrderId, generatePayoutId, generatePreOrderId, generateProductId, generateReviewId, generateUserId, getCookie, hasCookie, isEmptyString, isFuture, isPast, isSameMonth, isToday, maskString, nowISO, nowMs, objectToArray, objectToQueryString, parseCookies, parseFormattedNumber, proseMirrorToHtml, queryStringToObject, randomString, resolveDate, slugify, stringToBoolean, stripHtml, truncate, truncateWords };
164
+ /**
165
+ * Array Data Helpers
166
+ *
167
+ * Generic helpers for array data operations — no external dependencies.
168
+ */
169
+ declare function groupBy<T>(array: T[], key: keyof T): Record<string, T[]>;
170
+ declare function unique<T>(array: T[]): T[];
171
+ declare function uniqueBy<T>(array: T[], key: keyof T): T[];
172
+ declare function sortBy<T>(array: T[], key: keyof T, order?: "asc" | "desc"): T[];
173
+ declare function chunk<T>(array: T[], size: number): T[][];
174
+ declare function paginate<T>(array: T[], page: number, perPage: number): {
175
+ data: T[];
176
+ total: number;
177
+ page: number;
178
+ perPage: number;
179
+ totalPages: number;
180
+ };
181
+
182
+ /**
183
+ * Object Data Helpers
184
+ *
185
+ * Generic helpers for object data operations — no external dependencies.
186
+ */
187
+ declare function deepMerge<T extends Record<string, any>>(target: T, source: Partial<T>): T;
188
+ declare function pick<T extends Record<string, any>, K extends keyof T>(obj: T, keys: K[]): Pick<T, K>;
189
+ declare function omit<T extends Record<string, any>, K extends keyof T>(obj: T, keys: K[]): Omit<T, K>;
190
+ declare function isEmptyObject(obj: Record<string, any>): boolean;
191
+ declare function deepClone<T>(obj: T): T;
192
+ declare function isEqual(obj1: any, obj2: any): boolean;
193
+ declare function cleanObject<T extends Record<string, any>>(obj: T, options?: {
194
+ removeEmpty?: boolean;
195
+ removeNull?: boolean;
196
+ removeUndefined?: boolean;
197
+ }): Partial<T>;
198
+
199
+ /**
200
+ * Pagination Helper
201
+ *
202
+ * Generic helpers for pagination metadata calculations.
203
+ */
204
+ interface PaginationOptions {
205
+ page: number;
206
+ perPage: number;
207
+ total: number;
208
+ }
209
+ interface PaginationResult {
210
+ currentPage: number;
211
+ perPage: number;
212
+ total: number;
213
+ totalPages: number;
214
+ hasNextPage: boolean;
215
+ hasPrevPage: boolean;
216
+ nextPage: number | null;
217
+ prevPage: number | null;
218
+ startIndex: number;
219
+ endIndex: number;
220
+ }
221
+ declare function calculatePagination(options: PaginationOptions): PaginationResult;
222
+
223
+ /**
224
+ * Sorting Helper
225
+ *
226
+ * Generic helpers for sorting operations.
227
+ */
228
+ type SortOrder = "asc" | "desc";
229
+ declare function sort<T>(array: T[], key: keyof T, order?: SortOrder): T[];
230
+
231
+ /**
232
+ * Filter Helper
233
+ *
234
+ * Builds Sieve-compatible filter strings from conditional entries.
235
+ *
236
+ * @example
237
+ * ```ts
238
+ * buildSieveFilters(
239
+ * ["status==", statusFilter],
240
+ * ["totalPrice>=", minAmount],
241
+ * ["title@=*", searchTerm],
242
+ * );
243
+ * // → "status==pending,totalPrice>=100,title@=*shoes"
244
+ * ```
245
+ */
246
+ type FilterEntry = [expression: string, value: string | undefined | null];
247
+ declare function buildSieveFilters(...entries: FilterEntry[]): string;
248
+
249
+ /**
250
+ * Animation Helpers
251
+ *
252
+ * Pure easing functions for JavaScript animations and transitions.
253
+ * All functions accept a normalized time value `t` in [0, 1]
254
+ * and return a value in [0, 1].
255
+ */
256
+ declare const easings: {
257
+ linear: (t: number) => number;
258
+ easeInQuad: (t: number) => number;
259
+ easeOutQuad: (t: number) => number;
260
+ easeInOutQuad: (t: number) => number;
261
+ easeInCubic: (t: number) => number;
262
+ easeOutCubic: (t: number) => number;
263
+ easeInOutCubic: (t: number) => number;
264
+ easeInQuart: (t: number) => number;
265
+ easeOutQuart: (t: number) => number;
266
+ easeInOutQuart: (t: number) => number;
267
+ };
268
+
269
+ /**
270
+ * Color Helpers
271
+ *
272
+ * Pure utility functions for color manipulation and conversion.
273
+ */
274
+ /**
275
+ * Converts a hexadecimal color to RGB values.
276
+ *
277
+ * @param hex - The hex color string (with or without '#')
278
+ * @returns An object with r, g, b values, or null if invalid
279
+ */
280
+ declare function hexToRgb(hex: string): {
281
+ r: number;
282
+ g: number;
283
+ b: number;
284
+ } | null;
285
+ /**
286
+ * Converts RGB values to a hexadecimal color string.
287
+ *
288
+ * @param r - Red value (0-255)
289
+ * @param g - Green value (0-255)
290
+ * @param b - Blue value (0-255)
291
+ * @returns The hex color string with '#' prefix
292
+ */
293
+ declare function rgbToHex(r: number, g: number, b: number): string;
294
+ /**
295
+ * Determines the best contrasting text color (black or white) for a given background.
296
+ *
297
+ * @param hex - The background hex color
298
+ * @returns '#000000' for light backgrounds, '#ffffff' for dark backgrounds
299
+ */
300
+ declare function getContrastColor(hex: string): "#000000" | "#ffffff";
301
+
302
+ /**
303
+ * Event Manager Utilities
304
+ *
305
+ * Centralized DOM event handler management, throttle/debounce,
306
+ * and viewport / scroll / body-scroll utilities.
307
+ */
308
+ declare class GlobalEventManager {
309
+ private handlers;
310
+ private handlerIds;
311
+ private generateId;
312
+ private getTargetId;
313
+ add(target: EventTarget, type: string, callback: EventListener, options?: AddEventListenerOptions): string;
314
+ remove(id: string): void;
315
+ removeAllForTarget(target: EventTarget, type?: string): void;
316
+ clear(): void;
317
+ getHandlerCount(): number;
318
+ has(id: string): boolean;
319
+ }
320
+ declare const globalEventManager: GlobalEventManager;
321
+ declare function throttle<T extends (...args: any[]) => any>(func: T, delay: number): (...args: Parameters<T>) => void;
322
+ declare function debounce<T extends (...args: any[]) => any>(func: T, delay: number): (...args: Parameters<T>) => void;
323
+ declare function addGlobalScrollHandler(callback: (event: Event) => void, options?: {
324
+ throttle?: number;
325
+ target?: EventTarget;
326
+ }): string;
327
+ declare function addGlobalResizeHandler(callback: (event: Event) => void, options?: {
328
+ throttle?: number;
329
+ }): string;
330
+ declare function addGlobalClickHandler(selector: string, callback: (event: MouseEvent, element: Element) => void, options?: {
331
+ preventDefault?: boolean;
332
+ }): string;
333
+ declare function addGlobalKeyHandler(key: string | string[], callback: (event: KeyboardEvent) => void, options?: {
334
+ preventDefault?: boolean;
335
+ ctrl?: boolean;
336
+ shift?: boolean;
337
+ alt?: boolean;
338
+ meta?: boolean;
339
+ }): string;
340
+ declare function removeGlobalHandler(id: string): void;
341
+ declare function isMobileDevice(): boolean;
342
+ declare function hasTouchSupport(): boolean;
343
+ declare function getViewportDimensions(): {
344
+ width: number;
345
+ height: number;
346
+ };
347
+ declare function isInViewport(element: HTMLElement, offset?: number): boolean;
348
+ declare function smoothScrollTo(element: HTMLElement | string, options?: {
349
+ offset?: number;
350
+ }): void;
351
+ declare function preventBodyScroll(prevent: boolean): void;
352
+
353
+ export { type GenerateAuctionIdInput, type GenerateBidIdInput, type GenerateBlogPostIdInput, type GenerateCarouselIdInput, type GenerateCategoryIdInput, type GenerateFAQIdInput, type GenerateHomepageSectionIdInput, type GenerateOrderIdInput, type GeneratePayoutIdInput, type GeneratePreOrderIdInput, type GenerateProductIdInput, type GenerateReviewIdInput, type GenerateUserIdInput, GlobalEventManager, type PaginationOptions, type PaginationResult, type SortOrder, addGlobalClickHandler, addGlobalKeyHandler, addGlobalResizeHandler, addGlobalScrollHandler, arrayToObject, booleanToString, buildSieveFilters, calculatePagination, capitalize, capitalizeWords, chunk, cleanObject, currentYear, dateToISOString, debounce, deepClone, deepMerge, deleteCookie, easings, escapeHtml, firestoreTimestampToDate, formatCompactNumber, formatCurrency, formatCustomDate, formatDate, formatDateRange, formatDateTime, formatDecimal, formatFileSize, formatMonthYear, formatNumber, formatOrdinal, formatPercentage, formatRelativeTime, formatTime, generateAuctionId, generateBidId, generateBlogPostId, generateCarouselId, generateCategoryId, generateCouponId, generateFAQId, generateHomepageSectionId, generateOrderId, generatePayoutId, generatePreOrderId, generateProductId, generateReviewId, generateUserId, getContrastColor, getCookie, getViewportDimensions, globalEventManager, groupBy, hasCookie, hasTouchSupport, hexToRgb, isEmptyObject, isEmptyString, isEqual, isFuture, isInViewport, isMobileDevice, isPast, isSameMonth, isToday, maskString, nowISO, nowMs, objectToArray, objectToQueryString, omit, paginate, parseCookies, parseFormattedNumber, pick, preventBodyScroll, proseMirrorToHtml, queryStringToObject, randomString, removeGlobalHandler, resolveDate, rgbToHex, slugify, smoothScrollTo, sort, sortBy, stringToBoolean, stripHtml, throttle, truncate, truncateWords, unique, uniqueBy };
package/dist/index.d.ts CHANGED
@@ -19,6 +19,7 @@ declare function nowMs(): number;
19
19
  declare function isSameMonth(a: Date | number, b: Date | number): boolean;
20
20
  declare function currentYear(): string;
21
21
  declare function nowISO(): string;
22
+ declare function formatCustomDate(date: Date | string, format?: "short" | "medium" | "long" | "full"): string;
22
23
 
23
24
  /**
24
25
  * Number Formatting Utilities
@@ -160,4 +161,193 @@ interface GeneratePayoutIdInput {
160
161
  }
161
162
  declare function generatePayoutId(input: GeneratePayoutIdInput): string;
162
163
 
163
- export { type GenerateAuctionIdInput, type GenerateBidIdInput, type GenerateBlogPostIdInput, type GenerateCarouselIdInput, type GenerateCategoryIdInput, type GenerateFAQIdInput, type GenerateHomepageSectionIdInput, type GenerateOrderIdInput, type GeneratePayoutIdInput, type GeneratePreOrderIdInput, type GenerateProductIdInput, type GenerateReviewIdInput, type GenerateUserIdInput, arrayToObject, booleanToString, capitalize, capitalizeWords, currentYear, dateToISOString, deleteCookie, escapeHtml, firestoreTimestampToDate, formatCompactNumber, formatCurrency, formatDate, formatDateRange, formatDateTime, formatDecimal, formatFileSize, formatMonthYear, formatNumber, formatOrdinal, formatPercentage, formatRelativeTime, formatTime, generateAuctionId, generateBidId, generateBlogPostId, generateCarouselId, generateCategoryId, generateCouponId, generateFAQId, generateHomepageSectionId, generateOrderId, generatePayoutId, generatePreOrderId, generateProductId, generateReviewId, generateUserId, getCookie, hasCookie, isEmptyString, isFuture, isPast, isSameMonth, isToday, maskString, nowISO, nowMs, objectToArray, objectToQueryString, parseCookies, parseFormattedNumber, proseMirrorToHtml, queryStringToObject, randomString, resolveDate, slugify, stringToBoolean, stripHtml, truncate, truncateWords };
164
+ /**
165
+ * Array Data Helpers
166
+ *
167
+ * Generic helpers for array data operations — no external dependencies.
168
+ */
169
+ declare function groupBy<T>(array: T[], key: keyof T): Record<string, T[]>;
170
+ declare function unique<T>(array: T[]): T[];
171
+ declare function uniqueBy<T>(array: T[], key: keyof T): T[];
172
+ declare function sortBy<T>(array: T[], key: keyof T, order?: "asc" | "desc"): T[];
173
+ declare function chunk<T>(array: T[], size: number): T[][];
174
+ declare function paginate<T>(array: T[], page: number, perPage: number): {
175
+ data: T[];
176
+ total: number;
177
+ page: number;
178
+ perPage: number;
179
+ totalPages: number;
180
+ };
181
+
182
+ /**
183
+ * Object Data Helpers
184
+ *
185
+ * Generic helpers for object data operations — no external dependencies.
186
+ */
187
+ declare function deepMerge<T extends Record<string, any>>(target: T, source: Partial<T>): T;
188
+ declare function pick<T extends Record<string, any>, K extends keyof T>(obj: T, keys: K[]): Pick<T, K>;
189
+ declare function omit<T extends Record<string, any>, K extends keyof T>(obj: T, keys: K[]): Omit<T, K>;
190
+ declare function isEmptyObject(obj: Record<string, any>): boolean;
191
+ declare function deepClone<T>(obj: T): T;
192
+ declare function isEqual(obj1: any, obj2: any): boolean;
193
+ declare function cleanObject<T extends Record<string, any>>(obj: T, options?: {
194
+ removeEmpty?: boolean;
195
+ removeNull?: boolean;
196
+ removeUndefined?: boolean;
197
+ }): Partial<T>;
198
+
199
+ /**
200
+ * Pagination Helper
201
+ *
202
+ * Generic helpers for pagination metadata calculations.
203
+ */
204
+ interface PaginationOptions {
205
+ page: number;
206
+ perPage: number;
207
+ total: number;
208
+ }
209
+ interface PaginationResult {
210
+ currentPage: number;
211
+ perPage: number;
212
+ total: number;
213
+ totalPages: number;
214
+ hasNextPage: boolean;
215
+ hasPrevPage: boolean;
216
+ nextPage: number | null;
217
+ prevPage: number | null;
218
+ startIndex: number;
219
+ endIndex: number;
220
+ }
221
+ declare function calculatePagination(options: PaginationOptions): PaginationResult;
222
+
223
+ /**
224
+ * Sorting Helper
225
+ *
226
+ * Generic helpers for sorting operations.
227
+ */
228
+ type SortOrder = "asc" | "desc";
229
+ declare function sort<T>(array: T[], key: keyof T, order?: SortOrder): T[];
230
+
231
+ /**
232
+ * Filter Helper
233
+ *
234
+ * Builds Sieve-compatible filter strings from conditional entries.
235
+ *
236
+ * @example
237
+ * ```ts
238
+ * buildSieveFilters(
239
+ * ["status==", statusFilter],
240
+ * ["totalPrice>=", minAmount],
241
+ * ["title@=*", searchTerm],
242
+ * );
243
+ * // → "status==pending,totalPrice>=100,title@=*shoes"
244
+ * ```
245
+ */
246
+ type FilterEntry = [expression: string, value: string | undefined | null];
247
+ declare function buildSieveFilters(...entries: FilterEntry[]): string;
248
+
249
+ /**
250
+ * Animation Helpers
251
+ *
252
+ * Pure easing functions for JavaScript animations and transitions.
253
+ * All functions accept a normalized time value `t` in [0, 1]
254
+ * and return a value in [0, 1].
255
+ */
256
+ declare const easings: {
257
+ linear: (t: number) => number;
258
+ easeInQuad: (t: number) => number;
259
+ easeOutQuad: (t: number) => number;
260
+ easeInOutQuad: (t: number) => number;
261
+ easeInCubic: (t: number) => number;
262
+ easeOutCubic: (t: number) => number;
263
+ easeInOutCubic: (t: number) => number;
264
+ easeInQuart: (t: number) => number;
265
+ easeOutQuart: (t: number) => number;
266
+ easeInOutQuart: (t: number) => number;
267
+ };
268
+
269
+ /**
270
+ * Color Helpers
271
+ *
272
+ * Pure utility functions for color manipulation and conversion.
273
+ */
274
+ /**
275
+ * Converts a hexadecimal color to RGB values.
276
+ *
277
+ * @param hex - The hex color string (with or without '#')
278
+ * @returns An object with r, g, b values, or null if invalid
279
+ */
280
+ declare function hexToRgb(hex: string): {
281
+ r: number;
282
+ g: number;
283
+ b: number;
284
+ } | null;
285
+ /**
286
+ * Converts RGB values to a hexadecimal color string.
287
+ *
288
+ * @param r - Red value (0-255)
289
+ * @param g - Green value (0-255)
290
+ * @param b - Blue value (0-255)
291
+ * @returns The hex color string with '#' prefix
292
+ */
293
+ declare function rgbToHex(r: number, g: number, b: number): string;
294
+ /**
295
+ * Determines the best contrasting text color (black or white) for a given background.
296
+ *
297
+ * @param hex - The background hex color
298
+ * @returns '#000000' for light backgrounds, '#ffffff' for dark backgrounds
299
+ */
300
+ declare function getContrastColor(hex: string): "#000000" | "#ffffff";
301
+
302
+ /**
303
+ * Event Manager Utilities
304
+ *
305
+ * Centralized DOM event handler management, throttle/debounce,
306
+ * and viewport / scroll / body-scroll utilities.
307
+ */
308
+ declare class GlobalEventManager {
309
+ private handlers;
310
+ private handlerIds;
311
+ private generateId;
312
+ private getTargetId;
313
+ add(target: EventTarget, type: string, callback: EventListener, options?: AddEventListenerOptions): string;
314
+ remove(id: string): void;
315
+ removeAllForTarget(target: EventTarget, type?: string): void;
316
+ clear(): void;
317
+ getHandlerCount(): number;
318
+ has(id: string): boolean;
319
+ }
320
+ declare const globalEventManager: GlobalEventManager;
321
+ declare function throttle<T extends (...args: any[]) => any>(func: T, delay: number): (...args: Parameters<T>) => void;
322
+ declare function debounce<T extends (...args: any[]) => any>(func: T, delay: number): (...args: Parameters<T>) => void;
323
+ declare function addGlobalScrollHandler(callback: (event: Event) => void, options?: {
324
+ throttle?: number;
325
+ target?: EventTarget;
326
+ }): string;
327
+ declare function addGlobalResizeHandler(callback: (event: Event) => void, options?: {
328
+ throttle?: number;
329
+ }): string;
330
+ declare function addGlobalClickHandler(selector: string, callback: (event: MouseEvent, element: Element) => void, options?: {
331
+ preventDefault?: boolean;
332
+ }): string;
333
+ declare function addGlobalKeyHandler(key: string | string[], callback: (event: KeyboardEvent) => void, options?: {
334
+ preventDefault?: boolean;
335
+ ctrl?: boolean;
336
+ shift?: boolean;
337
+ alt?: boolean;
338
+ meta?: boolean;
339
+ }): string;
340
+ declare function removeGlobalHandler(id: string): void;
341
+ declare function isMobileDevice(): boolean;
342
+ declare function hasTouchSupport(): boolean;
343
+ declare function getViewportDimensions(): {
344
+ width: number;
345
+ height: number;
346
+ };
347
+ declare function isInViewport(element: HTMLElement, offset?: number): boolean;
348
+ declare function smoothScrollTo(element: HTMLElement | string, options?: {
349
+ offset?: number;
350
+ }): void;
351
+ declare function preventBodyScroll(prevent: boolean): void;
352
+
353
+ export { type GenerateAuctionIdInput, type GenerateBidIdInput, type GenerateBlogPostIdInput, type GenerateCarouselIdInput, type GenerateCategoryIdInput, type GenerateFAQIdInput, type GenerateHomepageSectionIdInput, type GenerateOrderIdInput, type GeneratePayoutIdInput, type GeneratePreOrderIdInput, type GenerateProductIdInput, type GenerateReviewIdInput, type GenerateUserIdInput, GlobalEventManager, type PaginationOptions, type PaginationResult, type SortOrder, addGlobalClickHandler, addGlobalKeyHandler, addGlobalResizeHandler, addGlobalScrollHandler, arrayToObject, booleanToString, buildSieveFilters, calculatePagination, capitalize, capitalizeWords, chunk, cleanObject, currentYear, dateToISOString, debounce, deepClone, deepMerge, deleteCookie, easings, escapeHtml, firestoreTimestampToDate, formatCompactNumber, formatCurrency, formatCustomDate, formatDate, formatDateRange, formatDateTime, formatDecimal, formatFileSize, formatMonthYear, formatNumber, formatOrdinal, formatPercentage, formatRelativeTime, formatTime, generateAuctionId, generateBidId, generateBlogPostId, generateCarouselId, generateCategoryId, generateCouponId, generateFAQId, generateHomepageSectionId, generateOrderId, generatePayoutId, generatePreOrderId, generateProductId, generateReviewId, generateUserId, getContrastColor, getCookie, getViewportDimensions, globalEventManager, groupBy, hasCookie, hasTouchSupport, hexToRgb, isEmptyObject, isEmptyString, isEqual, isFuture, isInViewport, isMobileDevice, isPast, isSameMonth, isToday, maskString, nowISO, nowMs, objectToArray, objectToQueryString, omit, paginate, parseCookies, parseFormattedNumber, pick, preventBodyScroll, proseMirrorToHtml, queryStringToObject, randomString, removeGlobalHandler, resolveDate, rgbToHex, slugify, smoothScrollTo, sort, sortBy, stringToBoolean, stripHtml, throttle, truncate, truncateWords, unique, uniqueBy };