@spartan-ng/brain 0.0.1-alpha.713 → 0.0.1-alpha.715
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/drawer/README.md +1 -0
- package/fesm2022/spartan-ng-brain-date-time.mjs +235 -1
- package/fesm2022/spartan-ng-brain-date-time.mjs.map +1 -1
- package/fesm2022/spartan-ng-brain-drawer.mjs +479 -0
- package/fesm2022/spartan-ng-brain-drawer.mjs.map +1 -0
- package/package.json +5 -1
- package/types/spartan-ng-brain-date-time.d.ts +51 -1
- package/types/spartan-ng-brain-drawer.d.ts +91 -0
package/drawer/README.md
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
# @spartan-ng/brain/drawer
|
|
@@ -263,9 +263,243 @@ function provideUtcDateAdapter() {
|
|
|
263
263
|
return provideDateAdapter(BrnUtcDateAdapter);
|
|
264
264
|
}
|
|
265
265
|
|
|
266
|
+
const PersianDate = {
|
|
267
|
+
gregorianDaysInMonth: [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31],
|
|
268
|
+
jalaliDaysInMonth: [31, 31, 31, 31, 31, 31, 30, 30, 30, 30, 30, 29],
|
|
269
|
+
jalaliToGregorian: function (jalaliYear, jalaliMonth, jalaliDay) {
|
|
270
|
+
const jalaliYearDelta = jalaliYear - 979;
|
|
271
|
+
const jalaliMonthIdx = jalaliMonth - 1;
|
|
272
|
+
const jalaliDayIdx = jalaliDay - 1;
|
|
273
|
+
let jalaliDayNo = 365 * jalaliYearDelta + Math.floor(jalaliYearDelta / 33) * 8 + Math.floor(((jalaliYearDelta % 33) + 3) / 4);
|
|
274
|
+
for (let i = 0; i < jalaliMonthIdx; ++i)
|
|
275
|
+
jalaliDayNo += this.jalaliDaysInMonth[i];
|
|
276
|
+
jalaliDayNo += jalaliDayIdx;
|
|
277
|
+
let gregorianDayNo = jalaliDayNo + 79;
|
|
278
|
+
let gregorianYear = 1600 + 400 * Math.floor(gregorianDayNo / 146097);
|
|
279
|
+
gregorianDayNo = gregorianDayNo % 146097;
|
|
280
|
+
let leap = true;
|
|
281
|
+
if (gregorianDayNo >= 36525) {
|
|
282
|
+
gregorianDayNo--;
|
|
283
|
+
gregorianYear += 100 * Math.floor(gregorianDayNo / 36524);
|
|
284
|
+
gregorianDayNo = gregorianDayNo % 36524;
|
|
285
|
+
if (gregorianDayNo >= 365)
|
|
286
|
+
gregorianDayNo++;
|
|
287
|
+
else
|
|
288
|
+
leap = false;
|
|
289
|
+
}
|
|
290
|
+
gregorianYear += 4 * Math.floor(gregorianDayNo / 1461);
|
|
291
|
+
gregorianDayNo %= 1461;
|
|
292
|
+
if (gregorianDayNo >= 366) {
|
|
293
|
+
leap = false;
|
|
294
|
+
gregorianDayNo--;
|
|
295
|
+
gregorianYear += Math.floor(gregorianDayNo / 365);
|
|
296
|
+
gregorianDayNo = gregorianDayNo % 365;
|
|
297
|
+
}
|
|
298
|
+
let i = 0;
|
|
299
|
+
for (; gregorianDayNo >= this.gregorianDaysInMonth[i] + (i === 1 && leap ? 1 : 0); i++) {
|
|
300
|
+
gregorianDayNo -= this.gregorianDaysInMonth[i] + (i === 1 && leap ? 1 : 0);
|
|
301
|
+
}
|
|
302
|
+
const gregorianMonth = i + 1;
|
|
303
|
+
const gregorianDay = gregorianDayNo + 1;
|
|
304
|
+
return [gregorianYear, gregorianMonth, gregorianDay];
|
|
305
|
+
},
|
|
306
|
+
gregorianToJalali: function (gregorianYear, gregorianMonth, gregorianDay) {
|
|
307
|
+
const gregorianYearDelta = gregorianYear - 1600;
|
|
308
|
+
const gregorianMonthIdx = gregorianMonth - 1;
|
|
309
|
+
const gregorianDayIdx = gregorianDay - 1;
|
|
310
|
+
let gregorianDayNo = 365 * gregorianYearDelta +
|
|
311
|
+
Math.floor((gregorianYearDelta + 3) / 4) -
|
|
312
|
+
Math.floor((gregorianYearDelta + 99) / 100) +
|
|
313
|
+
Math.floor((gregorianYearDelta + 399) / 400);
|
|
314
|
+
for (let i = 0; i < gregorianMonthIdx; ++i)
|
|
315
|
+
gregorianDayNo += this.gregorianDaysInMonth[i];
|
|
316
|
+
if (gregorianMonthIdx > 1 &&
|
|
317
|
+
((gregorianYearDelta % 4 === 0 && gregorianYearDelta % 100 !== 0) || gregorianYearDelta % 400 === 0))
|
|
318
|
+
gregorianDayNo++;
|
|
319
|
+
gregorianDayNo += gregorianDayIdx;
|
|
320
|
+
let jalaliDayNo = gregorianDayNo - 79;
|
|
321
|
+
const jalaliCycleCount = Math.floor(jalaliDayNo / 12053);
|
|
322
|
+
jalaliDayNo = jalaliDayNo % 12053;
|
|
323
|
+
let jalaliYear = 979 + 33 * jalaliCycleCount + 4 * Math.floor(jalaliDayNo / 1461);
|
|
324
|
+
jalaliDayNo %= 1461;
|
|
325
|
+
if (jalaliDayNo >= 366) {
|
|
326
|
+
jalaliYear += Math.floor((jalaliDayNo - 1) / 365);
|
|
327
|
+
jalaliDayNo = (jalaliDayNo - 1) % 365;
|
|
328
|
+
}
|
|
329
|
+
let i = 0;
|
|
330
|
+
for (; i < 11 && jalaliDayNo >= this.jalaliDaysInMonth[i]; ++i) {
|
|
331
|
+
jalaliDayNo -= this.jalaliDaysInMonth[i];
|
|
332
|
+
}
|
|
333
|
+
const jalaliMonth = i + 1;
|
|
334
|
+
const jalaliDay = jalaliDayNo + 1;
|
|
335
|
+
return [jalaliYear, jalaliMonth, jalaliDay];
|
|
336
|
+
},
|
|
337
|
+
isLeapJalaliYear: function (year) {
|
|
338
|
+
const breaks = [1, 5, 9, 13, 17, 22, 26, 30];
|
|
339
|
+
return breaks.includes(year % 33);
|
|
340
|
+
},
|
|
341
|
+
getDaysInMonth: function (year, month) {
|
|
342
|
+
if (month < 1 || month > 12)
|
|
343
|
+
return 0;
|
|
344
|
+
if (month <= 6)
|
|
345
|
+
return 31;
|
|
346
|
+
if (month <= 11)
|
|
347
|
+
return 30;
|
|
348
|
+
return this.isLeapJalaliYear(year) ? 30 : 29;
|
|
349
|
+
},
|
|
350
|
+
getDayOfWeek: function (jalaliYear, jalaliMonth, jalaliDay) {
|
|
351
|
+
const [gregorianYear, gregorianMonth, gregorianDay] = this.jalaliToGregorian(jalaliYear, jalaliMonth, jalaliDay);
|
|
352
|
+
const date = new Date(gregorianYear, gregorianMonth - 1, gregorianDay);
|
|
353
|
+
return date.getDay();
|
|
354
|
+
},
|
|
355
|
+
getDaysInYear: function (year) {
|
|
356
|
+
return this.isLeapJalaliYear(year) ? 366 : 365;
|
|
357
|
+
},
|
|
358
|
+
isValidDate: function (year, month, day) {
|
|
359
|
+
if (year < 0 || month < 1 || month > 12 || day < 1)
|
|
360
|
+
return false;
|
|
361
|
+
return day <= this.getDaysInMonth(year, month);
|
|
362
|
+
},
|
|
363
|
+
};
|
|
364
|
+
|
|
365
|
+
class JalaliDate {
|
|
366
|
+
year;
|
|
367
|
+
month;
|
|
368
|
+
day;
|
|
369
|
+
constructor(year, month, day) {
|
|
370
|
+
this.year = year;
|
|
371
|
+
this.month = month;
|
|
372
|
+
this.day = day;
|
|
373
|
+
}
|
|
374
|
+
valueOf() {
|
|
375
|
+
const [gregorianYear, gregorianMonth, gregorianDay] = PersianDate.jalaliToGregorian(this.year, this.month, this.day);
|
|
376
|
+
return new Date(gregorianYear, gregorianMonth - 1, gregorianDay).getTime();
|
|
377
|
+
}
|
|
378
|
+
toString() {
|
|
379
|
+
return `${this.year}/${String(this.month).padStart(2, '0')}/${String(this.day).padStart(2, '0')}`;
|
|
380
|
+
}
|
|
381
|
+
}
|
|
382
|
+
|
|
383
|
+
class BrnJalaliDateAdapter {
|
|
384
|
+
create({ year, month, day }) {
|
|
385
|
+
const now = this.now();
|
|
386
|
+
const m = month !== undefined ? month + 1 : now.month;
|
|
387
|
+
return this._constrain(year ?? now.year, m, day ?? now.day);
|
|
388
|
+
}
|
|
389
|
+
now() {
|
|
390
|
+
const today = new Date();
|
|
391
|
+
const [jalaliYear, jalaliMonth, jalaliDay] = PersianDate.gregorianToJalali(today.getFullYear(), today.getMonth() + 1, today.getDate());
|
|
392
|
+
return this._constrain(jalaliYear, jalaliMonth, jalaliDay);
|
|
393
|
+
}
|
|
394
|
+
set(date, values) {
|
|
395
|
+
const year = values.year ?? date.year;
|
|
396
|
+
const month = values.month !== undefined ? values.month + 1 : date.month;
|
|
397
|
+
const day = values.day ?? date.day;
|
|
398
|
+
return this._constrain(year, month, day);
|
|
399
|
+
}
|
|
400
|
+
add(date, duration) {
|
|
401
|
+
let { year, month, day } = date;
|
|
402
|
+
if (duration.years) {
|
|
403
|
+
year += duration.years;
|
|
404
|
+
}
|
|
405
|
+
if (duration.months) {
|
|
406
|
+
month += duration.months;
|
|
407
|
+
if (month > 12) {
|
|
408
|
+
year += Math.floor((month - 1) / 12);
|
|
409
|
+
month = ((month - 1) % 12) + 1;
|
|
410
|
+
}
|
|
411
|
+
else if (month < 1) {
|
|
412
|
+
year += Math.floor((month - 1) / 12);
|
|
413
|
+
month = ((((month - 1) % 12) + 12) % 12) + 1;
|
|
414
|
+
}
|
|
415
|
+
day = Math.min(day, PersianDate.getDaysInMonth(year, month));
|
|
416
|
+
}
|
|
417
|
+
if (duration.days) {
|
|
418
|
+
const [gregorianYear, gregorianMonth, gregorianDay] = PersianDate.jalaliToGregorian(year, month, day);
|
|
419
|
+
const jsDate = new Date(gregorianYear, gregorianMonth - 1, gregorianDay);
|
|
420
|
+
jsDate.setDate(jsDate.getDate() + duration.days);
|
|
421
|
+
[year, month, day] = PersianDate.gregorianToJalali(jsDate.getFullYear(), jsDate.getMonth() + 1, jsDate.getDate());
|
|
422
|
+
}
|
|
423
|
+
return this._constrain(year, month, day);
|
|
424
|
+
}
|
|
425
|
+
subtract(date, duration) {
|
|
426
|
+
return this.add(date, {
|
|
427
|
+
years: duration.years ? -duration.years : undefined,
|
|
428
|
+
months: duration.months ? -duration.months : undefined,
|
|
429
|
+
days: duration.days ? -duration.days : undefined,
|
|
430
|
+
});
|
|
431
|
+
}
|
|
432
|
+
compare(a, b) {
|
|
433
|
+
const diff = a.valueOf() - b.valueOf();
|
|
434
|
+
return diff === 0 ? 0 : diff > 0 ? 1 : -1;
|
|
435
|
+
}
|
|
436
|
+
isEqual(a, b) {
|
|
437
|
+
return a.valueOf() === b.valueOf();
|
|
438
|
+
}
|
|
439
|
+
isBefore(a, b) {
|
|
440
|
+
return a.valueOf() < b.valueOf();
|
|
441
|
+
}
|
|
442
|
+
isAfter(a, b) {
|
|
443
|
+
return a.valueOf() > b.valueOf();
|
|
444
|
+
}
|
|
445
|
+
isSameDay(a, b) {
|
|
446
|
+
return a.year === b.year && a.month === b.month && a.day === b.day;
|
|
447
|
+
}
|
|
448
|
+
isSameMonth(a, b) {
|
|
449
|
+
return a.year === b.year && a.month === b.month;
|
|
450
|
+
}
|
|
451
|
+
isSameYear(a, b) {
|
|
452
|
+
return a.year === b.year;
|
|
453
|
+
}
|
|
454
|
+
getYear(date) {
|
|
455
|
+
return date.year;
|
|
456
|
+
}
|
|
457
|
+
getMonth(date) {
|
|
458
|
+
return date.month - 1;
|
|
459
|
+
}
|
|
460
|
+
getDate(date) {
|
|
461
|
+
return date.day;
|
|
462
|
+
}
|
|
463
|
+
getDay(date) {
|
|
464
|
+
const [gregorianYear, gregorianMonth, gregorianDay] = PersianDate.jalaliToGregorian(date.year, date.month, date.day);
|
|
465
|
+
return new Date(gregorianYear, gregorianMonth - 1, gregorianDay).getDay();
|
|
466
|
+
}
|
|
467
|
+
getHours(_date) {
|
|
468
|
+
return 0;
|
|
469
|
+
}
|
|
470
|
+
getMinutes(_date) {
|
|
471
|
+
return 0;
|
|
472
|
+
}
|
|
473
|
+
getSeconds(_date) {
|
|
474
|
+
return 0;
|
|
475
|
+
}
|
|
476
|
+
getMilliseconds(_date) {
|
|
477
|
+
return 0;
|
|
478
|
+
}
|
|
479
|
+
getTime(date) {
|
|
480
|
+
return date.valueOf();
|
|
481
|
+
}
|
|
482
|
+
startOfMonth(date) {
|
|
483
|
+
return new JalaliDate(date.year, date.month, 1);
|
|
484
|
+
}
|
|
485
|
+
endOfMonth(date) {
|
|
486
|
+
return new JalaliDate(date.year, date.month, PersianDate.getDaysInMonth(date.year, date.month));
|
|
487
|
+
}
|
|
488
|
+
startOfDay(date) {
|
|
489
|
+
return date;
|
|
490
|
+
}
|
|
491
|
+
endOfDay(date) {
|
|
492
|
+
return date;
|
|
493
|
+
}
|
|
494
|
+
_constrain(year, month, day) {
|
|
495
|
+
const maxDay = PersianDate.getDaysInMonth(year, month);
|
|
496
|
+
return new JalaliDate(year, month, Math.min(day, maxDay));
|
|
497
|
+
}
|
|
498
|
+
}
|
|
499
|
+
|
|
266
500
|
/**
|
|
267
501
|
* Generated bundle index. Do not edit.
|
|
268
502
|
*/
|
|
269
503
|
|
|
270
|
-
export { BrnDateAdapterToken, BrnNativeDateAdapter, BrnUtcDateAdapter, injectDateAdapter, provideDateAdapter, provideNativeDateAdapter, provideUtcDateAdapter };
|
|
504
|
+
export { BrnDateAdapterToken, BrnJalaliDateAdapter, BrnNativeDateAdapter, BrnUtcDateAdapter, JalaliDate, PersianDate, injectDateAdapter, provideDateAdapter, provideNativeDateAdapter, provideUtcDateAdapter };
|
|
271
505
|
//# sourceMappingURL=spartan-ng-brain-date-time.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"spartan-ng-brain-date-time.mjs","sources":["../../../../libs/brain/date-time/src/lib/native-date-adapter.ts","../../../../libs/brain/date-time/src/lib/utc-date-adapter.ts","../../../../libs/brain/date-time/src/lib/date-adapter.ts","../../../../libs/brain/date-time/src/spartan-ng-brain-date-time.ts"],"sourcesContent":["import type { BrnDateAdapter, BrnDateUnits, BrnDuration } from './date-adapter';\n\nexport class BrnNativeDateAdapter implements BrnDateAdapter<Date> {\n\t/**\n\t * Create a new date time object.\n\t */\n\tcreate({ day, hour, minute, month, second, year, millisecond }: BrnDateUnits): Date {\n\t\tconst now = new Date();\n\n\t\treturn new Date(\n\t\t\tyear ?? now.getFullYear(),\n\t\t\tmonth ?? now.getMonth(),\n\t\t\tday ?? now.getDate(),\n\t\t\thour ?? now.getHours(),\n\t\t\tminute ?? now.getMinutes(),\n\t\t\tsecond ?? now.getSeconds(),\n\t\t\tmillisecond ?? now.getMilliseconds(),\n\t\t);\n\t}\n\n\t/**\n\t * Create a new date with the current date and time.\n\t */\n\tnow(): Date {\n\t\treturn new Date();\n\t}\n\n\t/**\n\t * Set the year of the date time object based on a duration.\n\t */\n\tset(date: Date, values: BrnDateUnits): Date {\n\t\treturn new Date(\n\t\t\tvalues.year ?? date.getFullYear(),\n\t\t\tvalues.month ?? date.getMonth(),\n\t\t\tvalues.day ?? date.getDate(),\n\t\t\tvalues.hour ?? date.getHours(),\n\t\t\tvalues.minute ?? date.getMinutes(),\n\t\t\tvalues.second ?? date.getSeconds(),\n\t\t\tvalues.millisecond ?? date.getMilliseconds(),\n\t\t);\n\t}\n\n\t/**\n\t * Add a duration to the date time object.\n\t */\n\tadd(date: Date, duration: BrnDuration): Date {\n\t\treturn new Date(\n\t\t\tdate.getFullYear() + (duration.years ?? 0),\n\t\t\tdate.getMonth() + (duration.months ?? 0),\n\t\t\tdate.getDate() + (duration.days ?? 0),\n\t\t\tdate.getHours() + (duration.hours ?? 0),\n\t\t\tdate.getMinutes() + (duration.minutes ?? 0),\n\t\t\tdate.getSeconds() + (duration.seconds ?? 0),\n\t\t\tdate.getMilliseconds() + (duration.milliseconds ?? 0),\n\t\t);\n\t}\n\n\t/**\n\t * Subtract a duration from the date time object\n\t */\n\tsubtract(date: Date, duration: BrnDuration): Date {\n\t\treturn new Date(\n\t\t\tdate.getFullYear() - (duration.years ?? 0),\n\t\t\tdate.getMonth() - (duration.months ?? 0),\n\t\t\tdate.getDate() - (duration.days ?? 0),\n\t\t\tdate.getHours() - (duration.hours ?? 0),\n\t\t\tdate.getMinutes() - (duration.minutes ?? 0),\n\t\t\tdate.getSeconds() - (duration.seconds ?? 0),\n\t\t\tdate.getMilliseconds() - (duration.milliseconds ?? 0),\n\t\t);\n\t}\n\n\t/**\n\t * Compare two date time objects\n\t */\n\tcompare(a: Date, b: Date): number {\n\t\tconst diff = a.getTime() - b.getTime();\n\t\treturn diff === 0 ? 0 : diff > 0 ? 1 : -1;\n\t}\n\n\t/**\n\t * Determine if two date time objects are equal.\n\t */\n\tisEqual(a: Date, b: Date): boolean {\n\t\treturn a.getTime() === b.getTime();\n\t}\n\n\t/**\n\t * Determine if a date time object is before another.\n\t */\n\tisBefore(a: Date, b: Date): boolean {\n\t\treturn a.getTime() < b.getTime();\n\t}\n\n\t/**\n\t * Determine if a date time object is after another.\n\t */\n\tisAfter(a: Date, b: Date): boolean {\n\t\treturn a.getTime() > b.getTime();\n\t}\n\n\t/**\n\t * Determine if two date objects are on the same day.\n\t */\n\tisSameDay(a: Date, b: Date): boolean {\n\t\treturn this.isSameYear(a, b) && this.isSameMonth(a, b) && a.getDate() === b.getDate();\n\t}\n\n\t/**\n\t * Determine if two date objects are on the same month.\n\t */\n\tisSameMonth(a: Date, b: Date): boolean {\n\t\treturn this.isSameYear(a, b) && a.getMonth() === b.getMonth();\n\t}\n\n\t/**\n\t * Determine if two date objects are on the same year.\n\t */\n\tisSameYear(a: Date, b: Date): boolean {\n\t\treturn a.getFullYear() === b.getFullYear();\n\t}\n\n\t/**\n\t * Get the year.\n\t */\n\tgetYear(date: Date): number {\n\t\treturn date.getFullYear();\n\t}\n\n\t/**\n\t * Get the month.\n\t */\n\tgetMonth(date: Date): number {\n\t\treturn date.getMonth();\n\t}\n\n\t/**\n\t * Get the day.\n\t */\n\tgetDay(date: Date): number {\n\t\treturn date.getDay();\n\t}\n\n\t/**\n\t * Get the date.\n\t */\n\tgetDate(date: Date): number {\n\t\treturn date.getDate();\n\t}\n\n\t/**\n\t * Get the hours.\n\t */\n\tgetHours(date: Date): number {\n\t\treturn date.getHours();\n\t}\n\n\t/**\n\t * Get the minutes.\n\t */\n\tgetMinutes(date: Date): number {\n\t\treturn date.getMinutes();\n\t}\n\n\t/**\n\t * Get the seconds.\n\t */\n\tgetSeconds(date: Date): number {\n\t\treturn date.getSeconds();\n\t}\n\n\t/**\n\t * Get the milliseconds.\n\t */\n\tgetMilliseconds(date: Date): number {\n\t\treturn date.getMilliseconds();\n\t}\n\n\t/**\n\t * Get the first day of the month.\n\t */\n\tstartOfMonth(date: Date): Date {\n\t\treturn new Date(date.getFullYear(), date.getMonth(), 1);\n\t}\n\n\t/**\n\t * Get the last day of the month.\n\t */\n\tendOfMonth(date: Date): Date {\n\t\treturn new Date(date.getFullYear(), date.getMonth() + 1, 0);\n\t}\n\n\t/**\n\t * Get the start of the day.\n\t */\n\tstartOfDay(date: Date): Date {\n\t\treturn new Date(date.getFullYear(), date.getMonth(), date.getDate());\n\t}\n\n\t/**\n\t * Get the end of the day.\n\t */\n\tendOfDay(date: Date): Date {\n\t\treturn new Date(date.getFullYear(), date.getMonth(), date.getDate(), 23, 59, 59, 999);\n\t}\n\n\t/**\n\t * Get the time.\n\t */\n\tgetTime(date: Date): number {\n\t\treturn date.getTime();\n\t}\n}\n","import type { BrnDateAdapter, BrnDateUnits, BrnDuration } from './date-adapter';\n\nexport class BrnUtcDateAdapter implements BrnDateAdapter<Date> {\n\tcreate({ day, hour, minute, month, second, year, millisecond }: BrnDateUnits): Date {\n\t\tconst now = new Date();\n\t\tconst utcTime = Date.UTC(\n\t\t\tyear ?? now.getUTCFullYear(),\n\t\t\tmonth ?? now.getUTCMonth(),\n\t\t\tday ?? now.getUTCDate(),\n\t\t\thour ?? now.getUTCHours(),\n\t\t\tminute ?? now.getUTCMinutes(),\n\t\t\tsecond ?? now.getUTCSeconds(),\n\t\t\tmillisecond ?? now.getUTCMilliseconds(),\n\t\t);\n\t\treturn new Date(utcTime);\n\t}\n\n\tnow(): Date {\n\t\treturn new Date(Date.now());\n\t}\n\n\tset(date: Date, values: BrnDateUnits): Date {\n\t\tconst utcTime = Date.UTC(\n\t\t\tvalues.year ?? date.getUTCFullYear(),\n\t\t\tvalues.month ?? date.getUTCMonth(),\n\t\t\tvalues.day ?? date.getUTCDate(),\n\t\t\tvalues.hour ?? date.getUTCHours(),\n\t\t\tvalues.minute ?? date.getUTCMinutes(),\n\t\t\tvalues.second ?? date.getUTCSeconds(),\n\t\t\tvalues.millisecond ?? date.getUTCMilliseconds(),\n\t\t);\n\t\treturn new Date(utcTime);\n\t}\n\n\tadd(date: Date, duration: BrnDuration): Date {\n\t\treturn new Date(\n\t\t\tDate.UTC(\n\t\t\t\tdate.getUTCFullYear() + (duration.years ?? 0),\n\t\t\t\tdate.getUTCMonth() + (duration.months ?? 0),\n\t\t\t\tdate.getUTCDate() + (duration.days ?? 0),\n\t\t\t\tdate.getUTCHours() + (duration.hours ?? 0),\n\t\t\t\tdate.getUTCMinutes() + (duration.minutes ?? 0),\n\t\t\t\tdate.getUTCSeconds() + (duration.seconds ?? 0),\n\t\t\t\tdate.getUTCMilliseconds() + (duration.milliseconds ?? 0),\n\t\t\t),\n\t\t);\n\t}\n\n\tsubtract(date: Date, duration: BrnDuration): Date {\n\t\treturn new Date(\n\t\t\tDate.UTC(\n\t\t\t\tdate.getUTCFullYear() - (duration.years ?? 0),\n\t\t\t\tdate.getUTCMonth() - (duration.months ?? 0),\n\t\t\t\tdate.getUTCDate() - (duration.days ?? 0),\n\t\t\t\tdate.getUTCHours() - (duration.hours ?? 0),\n\t\t\t\tdate.getUTCMinutes() - (duration.minutes ?? 0),\n\t\t\t\tdate.getUTCSeconds() - (duration.seconds ?? 0),\n\t\t\t\tdate.getUTCMilliseconds() - (duration.milliseconds ?? 0),\n\t\t\t),\n\t\t);\n\t}\n\n\tcompare(a: Date, b: Date): number {\n\t\tconst diff = a.getTime() - b.getTime();\n\t\treturn diff === 0 ? 0 : diff > 0 ? 1 : -1;\n\t}\n\n\tisEqual(a: Date, b: Date): boolean {\n\t\treturn a.getTime() === b.getTime();\n\t}\n\n\tisBefore(a: Date, b: Date): boolean {\n\t\treturn a.getTime() < b.getTime();\n\t}\n\n\tisAfter(a: Date, b: Date): boolean {\n\t\treturn a.getTime() > b.getTime();\n\t}\n\n\tisSameDay(a: Date, b: Date): boolean {\n\t\treturn this.isSameYear(a, b) && this.isSameMonth(a, b) && a.getUTCDate() === b.getUTCDate();\n\t}\n\n\tisSameMonth(a: Date, b: Date): boolean {\n\t\treturn this.isSameYear(a, b) && a.getUTCMonth() === b.getUTCMonth();\n\t}\n\n\tisSameYear(a: Date, b: Date): boolean {\n\t\treturn a.getUTCFullYear() === b.getUTCFullYear();\n\t}\n\n\tgetYear(date: Date): number {\n\t\treturn date.getUTCFullYear();\n\t}\n\n\tgetMonth(date: Date): number {\n\t\treturn date.getUTCMonth();\n\t}\n\n\tgetDay(date: Date): number {\n\t\treturn date.getUTCDay();\n\t}\n\n\tgetDate(date: Date): number {\n\t\treturn date.getUTCDate();\n\t}\n\n\tgetHours(date: Date): number {\n\t\treturn date.getUTCHours();\n\t}\n\n\tgetMinutes(date: Date): number {\n\t\treturn date.getUTCMinutes();\n\t}\n\n\tgetSeconds(date: Date): number {\n\t\treturn date.getUTCSeconds();\n\t}\n\n\tgetMilliseconds(date: Date): number {\n\t\treturn date.getUTCMilliseconds();\n\t}\n\n\tgetTime(date: Date): number {\n\t\treturn date.getTime();\n\t}\n\n\tstartOfMonth(date: Date): Date {\n\t\treturn new Date(Date.UTC(date.getUTCFullYear(), date.getUTCMonth(), 1));\n\t}\n\n\tendOfMonth(date: Date): Date {\n\t\treturn new Date(Date.UTC(date.getUTCFullYear(), date.getUTCMonth() + 1, 0, 23, 59, 59, 999));\n\t}\n\n\tstartOfDay(date: Date): Date {\n\t\treturn new Date(Date.UTC(date.getUTCFullYear(), date.getUTCMonth(), date.getUTCDate()));\n\t}\n\n\tendOfDay(date: Date): Date {\n\t\treturn new Date(Date.UTC(date.getUTCFullYear(), date.getUTCMonth(), date.getUTCDate(), 23, 59, 59, 999));\n\t}\n}\n","import { type ClassProvider, InjectionToken, type Type, inject } from '@angular/core';\nimport { BrnNativeDateAdapter } from './native-date-adapter';\nimport { BrnUtcDateAdapter } from './utc-date-adapter';\n\n/**\n * An abstraction that can be used to create and modify date time objects\n * immutably regardless of the underlying implementation.\n */\nexport interface BrnDateAdapter<T> {\n\t/**\n\t * Create a new date time object.\n\t */\n\tcreate(values: BrnDateUnits): T;\n\n\t/**\n\t * Create a new date with the current date and time.\n\t */\n\tnow(): T;\n\n\t/**\n\t * Set the year of the date time object based on a duration.\n\t */\n\tset(date: T, values: BrnDateUnits): T;\n\n\t/**\n\t * Add a duration to the date time object.\n\t */\n\tadd(date: T, duration: BrnDuration): T;\n\n\t/**\n\t * Subtract a duration from the date time object.\n\t */\n\tsubtract(date: T, duration: BrnDuration): T;\n\n\t/**\n\t * Compare two date time objects.\n\t */\n\tcompare(a: T, b: T): number;\n\n\t/**\n\t * Determine if two date time objects are equal.\n\t */\n\tisEqual(a: T, b: T): boolean;\n\n\t/**\n\t * Determine if a date time object is before another.\n\t */\n\tisBefore(a: T, b: T): boolean;\n\n\t/**\n\t * Determine if a date time object is after another.\n\t */\n\tisAfter(a: T, b: T): boolean;\n\n\t/**\n\t * Determine if two date objects are on the same day.\n\t */\n\tisSameDay(a: T, b: T): boolean;\n\n\t/**\n\t * Determine if two date objects are on the same month.\n\t */\n\tisSameMonth(a: T, b: T): boolean;\n\n\t/**\n\t * Determine if two date objects are on the same year.\n\t */\n\tisSameYear(a: T, b: T): boolean;\n\n\t/**\n\t * Get the year.\n\t */\n\tgetYear(date: T): number;\n\n\t/**\n\t * Get the month.\n\t */\n\tgetMonth(date: T): number;\n\n\t/**\n\t * Get the date.\n\t */\n\tgetDate(date: T): number;\n\n\t/**\n\t * Get the day of the week.\n\t *\n\t * Returns a value between 0 and 6 where 0 is Sunday\n\t */\n\tgetDay(date: T): number;\n\n\t/**\n\t * Get the hours.\n\t */\n\tgetHours(date: T): number;\n\n\t/**\n\t * Get the minutes.\n\t */\n\tgetMinutes(date: T): number;\n\n\t/**\n\t * Get the seconds.\n\t */\n\tgetSeconds(date: T): number;\n\n\t/**\n\t * Get the milliseconds.\n\t */\n\tgetMilliseconds(date: T): number;\n\n\t/**\n\t * Get the time.\n\t */\n\tgetTime(date: T): number;\n\n\t/**\n\t * Get the first day of the month.\n\t */\n\tstartOfMonth(date: T): T;\n\n\t/**\n\t * Get the last day of the month.\n\t */\n\tendOfMonth(date: T): T;\n\n\t/**\n\t * Get the start of the day.\n\t */\n\tstartOfDay(date: T): T;\n\n\t/**\n\t * Get the end of the day.\n\t */\n\tendOfDay(date: T): T;\n}\n\nexport interface BrnDateUnits {\n\t/**\n\t * The year.\n\t */\n\tyear?: number;\n\n\t/**\n\t * The month.\n\t */\n\tmonth?: number;\n\n\t/**\n\t * The day.\n\t */\n\tday?: number;\n\n\t/**\n\t * The hour.\n\t */\n\thour?: number;\n\n\t/**\n\t * The minute.\n\t */\n\tminute?: number;\n\n\t/**\n\t * The second.\n\t */\n\tsecond?: number;\n\n\t/**\n\t * The millisecond.\n\t */\n\tmillisecond?: number;\n}\n\nexport interface BrnDuration {\n\t/**\n\t * The years.\n\t */\n\tyears?: number;\n\n\t/**\n\t * The months.\n\t */\n\tmonths?: number;\n\n\t/**\n\t * The days.\n\t */\n\tdays?: number;\n\n\t/**\n\t * The hours.\n\t */\n\thours?: number;\n\n\t/**\n\t * The minutes.\n\t */\n\tminutes?: number;\n\n\t/**\n\t * The seconds.\n\t */\n\tseconds?: number;\n\n\t/**\n\t * The milliseconds.\n\t */\n\tmilliseconds?: number;\n}\n\nexport const BrnDateAdapterToken = new InjectionToken<BrnDateAdapter<unknown>>('BrnDateAdapterToken');\n\n/**\n * Inject the DateAdapter instance\n */\nexport function injectDateAdapter<T>(): BrnDateAdapter<T> {\n\treturn (inject(BrnDateAdapterToken, { optional: true }) as BrnDateAdapter<T>) ?? new BrnNativeDateAdapter();\n}\n\n/**\n * Provide the DateAdapter instance\n */\nexport function provideDateAdapter<T>(adapter: Type<BrnDateAdapter<T>>): ClassProvider {\n\treturn { provide: BrnDateAdapterToken, useClass: adapter };\n}\n\n/**\n * Provide the native date adapter\n */\nexport function provideNativeDateAdapter(): ClassProvider {\n\treturn provideDateAdapter(BrnNativeDateAdapter);\n}\n\n/**\n * Provide the UTC date adapter\n */\nexport function provideUtcDateAdapter(): ClassProvider {\n\treturn provideDateAdapter(BrnUtcDateAdapter);\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"spartan-ng-brain-date-time.mjs","sources":["../../../../libs/brain/date-time/src/lib/native-date-adapter.ts","../../../../libs/brain/date-time/src/lib/utc-date-adapter.ts","../../../../libs/brain/date-time/src/lib/date-adapter.ts","../../../../libs/brain/date-time/src/lib/persian-date.ts","../../../../libs/brain/date-time/src/lib/jalali-date.ts","../../../../libs/brain/date-time/src/lib/jalali-date-adapter.ts","../../../../libs/brain/date-time/src/spartan-ng-brain-date-time.ts"],"sourcesContent":["import type { BrnDateAdapter, BrnDateUnits, BrnDuration } from './date-adapter';\n\nexport class BrnNativeDateAdapter implements BrnDateAdapter<Date> {\n\t/**\n\t * Create a new date time object.\n\t */\n\tcreate({ day, hour, minute, month, second, year, millisecond }: BrnDateUnits): Date {\n\t\tconst now = new Date();\n\n\t\treturn new Date(\n\t\t\tyear ?? now.getFullYear(),\n\t\t\tmonth ?? now.getMonth(),\n\t\t\tday ?? now.getDate(),\n\t\t\thour ?? now.getHours(),\n\t\t\tminute ?? now.getMinutes(),\n\t\t\tsecond ?? now.getSeconds(),\n\t\t\tmillisecond ?? now.getMilliseconds(),\n\t\t);\n\t}\n\n\t/**\n\t * Create a new date with the current date and time.\n\t */\n\tnow(): Date {\n\t\treturn new Date();\n\t}\n\n\t/**\n\t * Set the year of the date time object based on a duration.\n\t */\n\tset(date: Date, values: BrnDateUnits): Date {\n\t\treturn new Date(\n\t\t\tvalues.year ?? date.getFullYear(),\n\t\t\tvalues.month ?? date.getMonth(),\n\t\t\tvalues.day ?? date.getDate(),\n\t\t\tvalues.hour ?? date.getHours(),\n\t\t\tvalues.minute ?? date.getMinutes(),\n\t\t\tvalues.second ?? date.getSeconds(),\n\t\t\tvalues.millisecond ?? date.getMilliseconds(),\n\t\t);\n\t}\n\n\t/**\n\t * Add a duration to the date time object.\n\t */\n\tadd(date: Date, duration: BrnDuration): Date {\n\t\treturn new Date(\n\t\t\tdate.getFullYear() + (duration.years ?? 0),\n\t\t\tdate.getMonth() + (duration.months ?? 0),\n\t\t\tdate.getDate() + (duration.days ?? 0),\n\t\t\tdate.getHours() + (duration.hours ?? 0),\n\t\t\tdate.getMinutes() + (duration.minutes ?? 0),\n\t\t\tdate.getSeconds() + (duration.seconds ?? 0),\n\t\t\tdate.getMilliseconds() + (duration.milliseconds ?? 0),\n\t\t);\n\t}\n\n\t/**\n\t * Subtract a duration from the date time object\n\t */\n\tsubtract(date: Date, duration: BrnDuration): Date {\n\t\treturn new Date(\n\t\t\tdate.getFullYear() - (duration.years ?? 0),\n\t\t\tdate.getMonth() - (duration.months ?? 0),\n\t\t\tdate.getDate() - (duration.days ?? 0),\n\t\t\tdate.getHours() - (duration.hours ?? 0),\n\t\t\tdate.getMinutes() - (duration.minutes ?? 0),\n\t\t\tdate.getSeconds() - (duration.seconds ?? 0),\n\t\t\tdate.getMilliseconds() - (duration.milliseconds ?? 0),\n\t\t);\n\t}\n\n\t/**\n\t * Compare two date time objects\n\t */\n\tcompare(a: Date, b: Date): number {\n\t\tconst diff = a.getTime() - b.getTime();\n\t\treturn diff === 0 ? 0 : diff > 0 ? 1 : -1;\n\t}\n\n\t/**\n\t * Determine if two date time objects are equal.\n\t */\n\tisEqual(a: Date, b: Date): boolean {\n\t\treturn a.getTime() === b.getTime();\n\t}\n\n\t/**\n\t * Determine if a date time object is before another.\n\t */\n\tisBefore(a: Date, b: Date): boolean {\n\t\treturn a.getTime() < b.getTime();\n\t}\n\n\t/**\n\t * Determine if a date time object is after another.\n\t */\n\tisAfter(a: Date, b: Date): boolean {\n\t\treturn a.getTime() > b.getTime();\n\t}\n\n\t/**\n\t * Determine if two date objects are on the same day.\n\t */\n\tisSameDay(a: Date, b: Date): boolean {\n\t\treturn this.isSameYear(a, b) && this.isSameMonth(a, b) && a.getDate() === b.getDate();\n\t}\n\n\t/**\n\t * Determine if two date objects are on the same month.\n\t */\n\tisSameMonth(a: Date, b: Date): boolean {\n\t\treturn this.isSameYear(a, b) && a.getMonth() === b.getMonth();\n\t}\n\n\t/**\n\t * Determine if two date objects are on the same year.\n\t */\n\tisSameYear(a: Date, b: Date): boolean {\n\t\treturn a.getFullYear() === b.getFullYear();\n\t}\n\n\t/**\n\t * Get the year.\n\t */\n\tgetYear(date: Date): number {\n\t\treturn date.getFullYear();\n\t}\n\n\t/**\n\t * Get the month.\n\t */\n\tgetMonth(date: Date): number {\n\t\treturn date.getMonth();\n\t}\n\n\t/**\n\t * Get the day.\n\t */\n\tgetDay(date: Date): number {\n\t\treturn date.getDay();\n\t}\n\n\t/**\n\t * Get the date.\n\t */\n\tgetDate(date: Date): number {\n\t\treturn date.getDate();\n\t}\n\n\t/**\n\t * Get the hours.\n\t */\n\tgetHours(date: Date): number {\n\t\treturn date.getHours();\n\t}\n\n\t/**\n\t * Get the minutes.\n\t */\n\tgetMinutes(date: Date): number {\n\t\treturn date.getMinutes();\n\t}\n\n\t/**\n\t * Get the seconds.\n\t */\n\tgetSeconds(date: Date): number {\n\t\treturn date.getSeconds();\n\t}\n\n\t/**\n\t * Get the milliseconds.\n\t */\n\tgetMilliseconds(date: Date): number {\n\t\treturn date.getMilliseconds();\n\t}\n\n\t/**\n\t * Get the first day of the month.\n\t */\n\tstartOfMonth(date: Date): Date {\n\t\treturn new Date(date.getFullYear(), date.getMonth(), 1);\n\t}\n\n\t/**\n\t * Get the last day of the month.\n\t */\n\tendOfMonth(date: Date): Date {\n\t\treturn new Date(date.getFullYear(), date.getMonth() + 1, 0);\n\t}\n\n\t/**\n\t * Get the start of the day.\n\t */\n\tstartOfDay(date: Date): Date {\n\t\treturn new Date(date.getFullYear(), date.getMonth(), date.getDate());\n\t}\n\n\t/**\n\t * Get the end of the day.\n\t */\n\tendOfDay(date: Date): Date {\n\t\treturn new Date(date.getFullYear(), date.getMonth(), date.getDate(), 23, 59, 59, 999);\n\t}\n\n\t/**\n\t * Get the time.\n\t */\n\tgetTime(date: Date): number {\n\t\treturn date.getTime();\n\t}\n}\n","import type { BrnDateAdapter, BrnDateUnits, BrnDuration } from './date-adapter';\n\nexport class BrnUtcDateAdapter implements BrnDateAdapter<Date> {\n\tcreate({ day, hour, minute, month, second, year, millisecond }: BrnDateUnits): Date {\n\t\tconst now = new Date();\n\t\tconst utcTime = Date.UTC(\n\t\t\tyear ?? now.getUTCFullYear(),\n\t\t\tmonth ?? now.getUTCMonth(),\n\t\t\tday ?? now.getUTCDate(),\n\t\t\thour ?? now.getUTCHours(),\n\t\t\tminute ?? now.getUTCMinutes(),\n\t\t\tsecond ?? now.getUTCSeconds(),\n\t\t\tmillisecond ?? now.getUTCMilliseconds(),\n\t\t);\n\t\treturn new Date(utcTime);\n\t}\n\n\tnow(): Date {\n\t\treturn new Date(Date.now());\n\t}\n\n\tset(date: Date, values: BrnDateUnits): Date {\n\t\tconst utcTime = Date.UTC(\n\t\t\tvalues.year ?? date.getUTCFullYear(),\n\t\t\tvalues.month ?? date.getUTCMonth(),\n\t\t\tvalues.day ?? date.getUTCDate(),\n\t\t\tvalues.hour ?? date.getUTCHours(),\n\t\t\tvalues.minute ?? date.getUTCMinutes(),\n\t\t\tvalues.second ?? date.getUTCSeconds(),\n\t\t\tvalues.millisecond ?? date.getUTCMilliseconds(),\n\t\t);\n\t\treturn new Date(utcTime);\n\t}\n\n\tadd(date: Date, duration: BrnDuration): Date {\n\t\treturn new Date(\n\t\t\tDate.UTC(\n\t\t\t\tdate.getUTCFullYear() + (duration.years ?? 0),\n\t\t\t\tdate.getUTCMonth() + (duration.months ?? 0),\n\t\t\t\tdate.getUTCDate() + (duration.days ?? 0),\n\t\t\t\tdate.getUTCHours() + (duration.hours ?? 0),\n\t\t\t\tdate.getUTCMinutes() + (duration.minutes ?? 0),\n\t\t\t\tdate.getUTCSeconds() + (duration.seconds ?? 0),\n\t\t\t\tdate.getUTCMilliseconds() + (duration.milliseconds ?? 0),\n\t\t\t),\n\t\t);\n\t}\n\n\tsubtract(date: Date, duration: BrnDuration): Date {\n\t\treturn new Date(\n\t\t\tDate.UTC(\n\t\t\t\tdate.getUTCFullYear() - (duration.years ?? 0),\n\t\t\t\tdate.getUTCMonth() - (duration.months ?? 0),\n\t\t\t\tdate.getUTCDate() - (duration.days ?? 0),\n\t\t\t\tdate.getUTCHours() - (duration.hours ?? 0),\n\t\t\t\tdate.getUTCMinutes() - (duration.minutes ?? 0),\n\t\t\t\tdate.getUTCSeconds() - (duration.seconds ?? 0),\n\t\t\t\tdate.getUTCMilliseconds() - (duration.milliseconds ?? 0),\n\t\t\t),\n\t\t);\n\t}\n\n\tcompare(a: Date, b: Date): number {\n\t\tconst diff = a.getTime() - b.getTime();\n\t\treturn diff === 0 ? 0 : diff > 0 ? 1 : -1;\n\t}\n\n\tisEqual(a: Date, b: Date): boolean {\n\t\treturn a.getTime() === b.getTime();\n\t}\n\n\tisBefore(a: Date, b: Date): boolean {\n\t\treturn a.getTime() < b.getTime();\n\t}\n\n\tisAfter(a: Date, b: Date): boolean {\n\t\treturn a.getTime() > b.getTime();\n\t}\n\n\tisSameDay(a: Date, b: Date): boolean {\n\t\treturn this.isSameYear(a, b) && this.isSameMonth(a, b) && a.getUTCDate() === b.getUTCDate();\n\t}\n\n\tisSameMonth(a: Date, b: Date): boolean {\n\t\treturn this.isSameYear(a, b) && a.getUTCMonth() === b.getUTCMonth();\n\t}\n\n\tisSameYear(a: Date, b: Date): boolean {\n\t\treturn a.getUTCFullYear() === b.getUTCFullYear();\n\t}\n\n\tgetYear(date: Date): number {\n\t\treturn date.getUTCFullYear();\n\t}\n\n\tgetMonth(date: Date): number {\n\t\treturn date.getUTCMonth();\n\t}\n\n\tgetDay(date: Date): number {\n\t\treturn date.getUTCDay();\n\t}\n\n\tgetDate(date: Date): number {\n\t\treturn date.getUTCDate();\n\t}\n\n\tgetHours(date: Date): number {\n\t\treturn date.getUTCHours();\n\t}\n\n\tgetMinutes(date: Date): number {\n\t\treturn date.getUTCMinutes();\n\t}\n\n\tgetSeconds(date: Date): number {\n\t\treturn date.getUTCSeconds();\n\t}\n\n\tgetMilliseconds(date: Date): number {\n\t\treturn date.getUTCMilliseconds();\n\t}\n\n\tgetTime(date: Date): number {\n\t\treturn date.getTime();\n\t}\n\n\tstartOfMonth(date: Date): Date {\n\t\treturn new Date(Date.UTC(date.getUTCFullYear(), date.getUTCMonth(), 1));\n\t}\n\n\tendOfMonth(date: Date): Date {\n\t\treturn new Date(Date.UTC(date.getUTCFullYear(), date.getUTCMonth() + 1, 0, 23, 59, 59, 999));\n\t}\n\n\tstartOfDay(date: Date): Date {\n\t\treturn new Date(Date.UTC(date.getUTCFullYear(), date.getUTCMonth(), date.getUTCDate()));\n\t}\n\n\tendOfDay(date: Date): Date {\n\t\treturn new Date(Date.UTC(date.getUTCFullYear(), date.getUTCMonth(), date.getUTCDate(), 23, 59, 59, 999));\n\t}\n}\n","import { type ClassProvider, InjectionToken, type Type, inject } from '@angular/core';\nimport { BrnNativeDateAdapter } from './native-date-adapter';\nimport { BrnUtcDateAdapter } from './utc-date-adapter';\n\n/**\n * An abstraction that can be used to create and modify date time objects\n * immutably regardless of the underlying implementation.\n */\nexport interface BrnDateAdapter<T> {\n\t/**\n\t * Create a new date time object.\n\t */\n\tcreate(values: BrnDateUnits): T;\n\n\t/**\n\t * Create a new date with the current date and time.\n\t */\n\tnow(): T;\n\n\t/**\n\t * Set the year of the date time object based on a duration.\n\t */\n\tset(date: T, values: BrnDateUnits): T;\n\n\t/**\n\t * Add a duration to the date time object.\n\t */\n\tadd(date: T, duration: BrnDuration): T;\n\n\t/**\n\t * Subtract a duration from the date time object.\n\t */\n\tsubtract(date: T, duration: BrnDuration): T;\n\n\t/**\n\t * Compare two date time objects.\n\t */\n\tcompare(a: T, b: T): number;\n\n\t/**\n\t * Determine if two date time objects are equal.\n\t */\n\tisEqual(a: T, b: T): boolean;\n\n\t/**\n\t * Determine if a date time object is before another.\n\t */\n\tisBefore(a: T, b: T): boolean;\n\n\t/**\n\t * Determine if a date time object is after another.\n\t */\n\tisAfter(a: T, b: T): boolean;\n\n\t/**\n\t * Determine if two date objects are on the same day.\n\t */\n\tisSameDay(a: T, b: T): boolean;\n\n\t/**\n\t * Determine if two date objects are on the same month.\n\t */\n\tisSameMonth(a: T, b: T): boolean;\n\n\t/**\n\t * Determine if two date objects are on the same year.\n\t */\n\tisSameYear(a: T, b: T): boolean;\n\n\t/**\n\t * Get the year.\n\t */\n\tgetYear(date: T): number;\n\n\t/**\n\t * Get the month.\n\t */\n\tgetMonth(date: T): number;\n\n\t/**\n\t * Get the date.\n\t */\n\tgetDate(date: T): number;\n\n\t/**\n\t * Get the day of the week.\n\t *\n\t * Returns a value between 0 and 6 where 0 is Sunday\n\t */\n\tgetDay(date: T): number;\n\n\t/**\n\t * Get the hours.\n\t */\n\tgetHours(date: T): number;\n\n\t/**\n\t * Get the minutes.\n\t */\n\tgetMinutes(date: T): number;\n\n\t/**\n\t * Get the seconds.\n\t */\n\tgetSeconds(date: T): number;\n\n\t/**\n\t * Get the milliseconds.\n\t */\n\tgetMilliseconds(date: T): number;\n\n\t/**\n\t * Get the time.\n\t */\n\tgetTime(date: T): number;\n\n\t/**\n\t * Get the first day of the month.\n\t */\n\tstartOfMonth(date: T): T;\n\n\t/**\n\t * Get the last day of the month.\n\t */\n\tendOfMonth(date: T): T;\n\n\t/**\n\t * Get the start of the day.\n\t */\n\tstartOfDay(date: T): T;\n\n\t/**\n\t * Get the end of the day.\n\t */\n\tendOfDay(date: T): T;\n}\n\nexport interface BrnDateUnits {\n\t/**\n\t * The year.\n\t */\n\tyear?: number;\n\n\t/**\n\t * The month.\n\t */\n\tmonth?: number;\n\n\t/**\n\t * The day.\n\t */\n\tday?: number;\n\n\t/**\n\t * The hour.\n\t */\n\thour?: number;\n\n\t/**\n\t * The minute.\n\t */\n\tminute?: number;\n\n\t/**\n\t * The second.\n\t */\n\tsecond?: number;\n\n\t/**\n\t * The millisecond.\n\t */\n\tmillisecond?: number;\n}\n\nexport interface BrnDuration {\n\t/**\n\t * The years.\n\t */\n\tyears?: number;\n\n\t/**\n\t * The months.\n\t */\n\tmonths?: number;\n\n\t/**\n\t * The days.\n\t */\n\tdays?: number;\n\n\t/**\n\t * The hours.\n\t */\n\thours?: number;\n\n\t/**\n\t * The minutes.\n\t */\n\tminutes?: number;\n\n\t/**\n\t * The seconds.\n\t */\n\tseconds?: number;\n\n\t/**\n\t * The milliseconds.\n\t */\n\tmilliseconds?: number;\n}\n\nexport const BrnDateAdapterToken = new InjectionToken<BrnDateAdapter<unknown>>('BrnDateAdapterToken');\n\n/**\n * Inject the DateAdapter instance\n */\nexport function injectDateAdapter<T>(): BrnDateAdapter<T> {\n\treturn (inject(BrnDateAdapterToken, { optional: true }) as BrnDateAdapter<T>) ?? new BrnNativeDateAdapter();\n}\n\n/**\n * Provide the DateAdapter instance\n */\nexport function provideDateAdapter<T>(adapter: Type<BrnDateAdapter<T>>): ClassProvider {\n\treturn { provide: BrnDateAdapterToken, useClass: adapter };\n}\n\n/**\n * Provide the native date adapter\n */\nexport function provideNativeDateAdapter(): ClassProvider {\n\treturn provideDateAdapter(BrnNativeDateAdapter);\n}\n\n/**\n * Provide the UTC date adapter\n */\nexport function provideUtcDateAdapter(): ClassProvider {\n\treturn provideDateAdapter(BrnUtcDateAdapter);\n}\n","export const PersianDate = {\n\tgregorianDaysInMonth: [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31],\n\tjalaliDaysInMonth: [31, 31, 31, 31, 31, 31, 30, 30, 30, 30, 30, 29],\n\n\tjalaliToGregorian: function (jalaliYear: number, jalaliMonth: number, jalaliDay: number): [number, number, number] {\n\t\tconst jalaliYearDelta = jalaliYear - 979;\n\t\tconst jalaliMonthIdx = jalaliMonth - 1;\n\t\tconst jalaliDayIdx = jalaliDay - 1;\n\n\t\tlet jalaliDayNo =\n\t\t\t365 * jalaliYearDelta + Math.floor(jalaliYearDelta / 33) * 8 + Math.floor(((jalaliYearDelta % 33) + 3) / 4);\n\t\tfor (let i = 0; i < jalaliMonthIdx; ++i) jalaliDayNo += this.jalaliDaysInMonth[i];\n\n\t\tjalaliDayNo += jalaliDayIdx;\n\n\t\tlet gregorianDayNo = jalaliDayNo + 79;\n\n\t\tlet gregorianYear = 1600 + 400 * Math.floor(gregorianDayNo / 146097);\n\t\tgregorianDayNo = gregorianDayNo % 146097;\n\n\t\tlet leap = true;\n\t\tif (gregorianDayNo >= 36525) {\n\t\t\tgregorianDayNo--;\n\t\t\tgregorianYear += 100 * Math.floor(gregorianDayNo / 36524);\n\t\t\tgregorianDayNo = gregorianDayNo % 36524;\n\n\t\t\tif (gregorianDayNo >= 365) gregorianDayNo++;\n\t\t\telse leap = false;\n\t\t}\n\n\t\tgregorianYear += 4 * Math.floor(gregorianDayNo / 1461);\n\t\tgregorianDayNo %= 1461;\n\n\t\tif (gregorianDayNo >= 366) {\n\t\t\tleap = false;\n\t\t\tgregorianDayNo--;\n\t\t\tgregorianYear += Math.floor(gregorianDayNo / 365);\n\t\t\tgregorianDayNo = gregorianDayNo % 365;\n\t\t}\n\n\t\tlet i = 0;\n\t\tfor (; gregorianDayNo >= this.gregorianDaysInMonth[i] + (i === 1 && leap ? 1 : 0); i++) {\n\t\t\tgregorianDayNo -= this.gregorianDaysInMonth[i] + (i === 1 && leap ? 1 : 0);\n\t\t}\n\n\t\tconst gregorianMonth = i + 1;\n\t\tconst gregorianDay = gregorianDayNo + 1;\n\n\t\treturn [gregorianYear, gregorianMonth, gregorianDay];\n\t},\n\n\tgregorianToJalali: function (\n\t\tgregorianYear: number,\n\t\tgregorianMonth: number,\n\t\tgregorianDay: number,\n\t): [number, number, number] {\n\t\tconst gregorianYearDelta = gregorianYear - 1600;\n\t\tconst gregorianMonthIdx = gregorianMonth - 1;\n\t\tconst gregorianDayIdx = gregorianDay - 1;\n\n\t\tlet gregorianDayNo =\n\t\t\t365 * gregorianYearDelta +\n\t\t\tMath.floor((gregorianYearDelta + 3) / 4) -\n\t\t\tMath.floor((gregorianYearDelta + 99) / 100) +\n\t\t\tMath.floor((gregorianYearDelta + 399) / 400);\n\n\t\tfor (let i = 0; i < gregorianMonthIdx; ++i) gregorianDayNo += this.gregorianDaysInMonth[i];\n\n\t\tif (\n\t\t\tgregorianMonthIdx > 1 &&\n\t\t\t((gregorianYearDelta % 4 === 0 && gregorianYearDelta % 100 !== 0) || gregorianYearDelta % 400 === 0)\n\t\t)\n\t\t\tgregorianDayNo++;\n\n\t\tgregorianDayNo += gregorianDayIdx;\n\n\t\tlet jalaliDayNo = gregorianDayNo - 79;\n\t\tconst jalaliCycleCount = Math.floor(jalaliDayNo / 12053);\n\t\tjalaliDayNo = jalaliDayNo % 12053;\n\n\t\tlet jalaliYear = 979 + 33 * jalaliCycleCount + 4 * Math.floor(jalaliDayNo / 1461);\n\n\t\tjalaliDayNo %= 1461;\n\n\t\tif (jalaliDayNo >= 366) {\n\t\t\tjalaliYear += Math.floor((jalaliDayNo - 1) / 365);\n\t\t\tjalaliDayNo = (jalaliDayNo - 1) % 365;\n\t\t}\n\n\t\tlet i = 0;\n\t\tfor (; i < 11 && jalaliDayNo >= this.jalaliDaysInMonth[i]; ++i) {\n\t\t\tjalaliDayNo -= this.jalaliDaysInMonth[i];\n\t\t}\n\n\t\tconst jalaliMonth = i + 1;\n\t\tconst jalaliDay = jalaliDayNo + 1;\n\n\t\treturn [jalaliYear, jalaliMonth, jalaliDay];\n\t},\n\n\tisLeapJalaliYear: function (year: number): boolean {\n\t\tconst breaks = [1, 5, 9, 13, 17, 22, 26, 30];\n\t\treturn breaks.includes(year % 33);\n\t},\n\n\tgetDaysInMonth: function (year: number, month: number): number {\n\t\tif (month < 1 || month > 12) return 0;\n\t\tif (month <= 6) return 31;\n\t\tif (month <= 11) return 30;\n\t\treturn this.isLeapJalaliYear(year) ? 30 : 29;\n\t},\n\n\tgetDayOfWeek: function (jalaliYear: number, jalaliMonth: number, jalaliDay: number): number {\n\t\tconst [gregorianYear, gregorianMonth, gregorianDay] = this.jalaliToGregorian(jalaliYear, jalaliMonth, jalaliDay);\n\t\tconst date = new Date(gregorianYear, gregorianMonth - 1, gregorianDay);\n\t\treturn date.getDay();\n\t},\n\n\tgetDaysInYear: function (year: number): number {\n\t\treturn this.isLeapJalaliYear(year) ? 366 : 365;\n\t},\n\n\tisValidDate: function (year: number, month: number, day: number): boolean {\n\t\tif (year < 0 || month < 1 || month > 12 || day < 1) return false;\n\t\treturn day <= this.getDaysInMonth(year, month);\n\t},\n};\n","import { PersianDate } from './persian-date';\n\nexport class JalaliDate {\n\tconstructor(\n\t\tpublic readonly year: number,\n\t\tpublic readonly month: number,\n\t\tpublic readonly day: number,\n\t) {}\n\n\tvalueOf(): number {\n\t\tconst [gregorianYear, gregorianMonth, gregorianDay] = PersianDate.jalaliToGregorian(\n\t\t\tthis.year,\n\t\t\tthis.month,\n\t\t\tthis.day,\n\t\t);\n\t\treturn new Date(gregorianYear, gregorianMonth - 1, gregorianDay).getTime();\n\t}\n\n\ttoString(): string {\n\t\treturn `${this.year}/${String(this.month).padStart(2, '0')}/${String(this.day).padStart(2, '0')}`;\n\t}\n}\n","import type { BrnDateAdapter, BrnDateUnits, BrnDuration } from './date-adapter';\nimport { JalaliDate } from './jalali-date';\nimport { PersianDate } from './persian-date';\n\nexport class BrnJalaliDateAdapter implements BrnDateAdapter<JalaliDate> {\n\tcreate({ year, month, day }: BrnDateUnits): JalaliDate {\n\t\tconst now = this.now();\n\t\tconst m = month !== undefined ? month + 1 : now.month;\n\t\treturn this._constrain(year ?? now.year, m, day ?? now.day);\n\t}\n\n\tnow(): JalaliDate {\n\t\tconst today = new Date();\n\t\tconst [jalaliYear, jalaliMonth, jalaliDay] = PersianDate.gregorianToJalali(\n\t\t\ttoday.getFullYear(),\n\t\t\ttoday.getMonth() + 1,\n\t\t\ttoday.getDate(),\n\t\t);\n\t\treturn this._constrain(jalaliYear, jalaliMonth, jalaliDay);\n\t}\n\n\tset(date: JalaliDate, values: BrnDateUnits): JalaliDate {\n\t\tconst year = values.year ?? date.year;\n\t\tconst month = values.month !== undefined ? values.month + 1 : date.month;\n\t\tconst day = values.day ?? date.day;\n\t\treturn this._constrain(year, month, day);\n\t}\n\n\tadd(date: JalaliDate, duration: BrnDuration): JalaliDate {\n\t\tlet { year, month, day } = date;\n\n\t\tif (duration.years) {\n\t\t\tyear += duration.years;\n\t\t}\n\n\t\tif (duration.months) {\n\t\t\tmonth += duration.months;\n\t\t\tif (month > 12) {\n\t\t\t\tyear += Math.floor((month - 1) / 12);\n\t\t\t\tmonth = ((month - 1) % 12) + 1;\n\t\t\t} else if (month < 1) {\n\t\t\t\tyear += Math.floor((month - 1) / 12);\n\t\t\t\tmonth = ((((month - 1) % 12) + 12) % 12) + 1;\n\t\t\t}\n\t\t\tday = Math.min(day, PersianDate.getDaysInMonth(year, month));\n\t\t}\n\n\t\tif (duration.days) {\n\t\t\tconst [gregorianYear, gregorianMonth, gregorianDay] = PersianDate.jalaliToGregorian(year, month, day);\n\t\t\tconst jsDate = new Date(gregorianYear, gregorianMonth - 1, gregorianDay);\n\t\t\tjsDate.setDate(jsDate.getDate() + duration.days);\n\t\t\t[year, month, day] = PersianDate.gregorianToJalali(jsDate.getFullYear(), jsDate.getMonth() + 1, jsDate.getDate());\n\t\t}\n\n\t\treturn this._constrain(year, month, day);\n\t}\n\n\tsubtract(date: JalaliDate, duration: BrnDuration): JalaliDate {\n\t\treturn this.add(date, {\n\t\t\tyears: duration.years ? -duration.years : undefined,\n\t\t\tmonths: duration.months ? -duration.months : undefined,\n\t\t\tdays: duration.days ? -duration.days : undefined,\n\t\t});\n\t}\n\n\tcompare(a: JalaliDate, b: JalaliDate): number {\n\t\tconst diff = a.valueOf() - b.valueOf();\n\t\treturn diff === 0 ? 0 : diff > 0 ? 1 : -1;\n\t}\n\n\tisEqual(a: JalaliDate, b: JalaliDate): boolean {\n\t\treturn a.valueOf() === b.valueOf();\n\t}\n\n\tisBefore(a: JalaliDate, b: JalaliDate): boolean {\n\t\treturn a.valueOf() < b.valueOf();\n\t}\n\n\tisAfter(a: JalaliDate, b: JalaliDate): boolean {\n\t\treturn a.valueOf() > b.valueOf();\n\t}\n\n\tisSameDay(a: JalaliDate, b: JalaliDate): boolean {\n\t\treturn a.year === b.year && a.month === b.month && a.day === b.day;\n\t}\n\n\tisSameMonth(a: JalaliDate, b: JalaliDate): boolean {\n\t\treturn a.year === b.year && a.month === b.month;\n\t}\n\n\tisSameYear(a: JalaliDate, b: JalaliDate): boolean {\n\t\treturn a.year === b.year;\n\t}\n\n\tgetYear(date: JalaliDate): number {\n\t\treturn date.year;\n\t}\n\n\tgetMonth(date: JalaliDate): number {\n\t\treturn date.month - 1;\n\t}\n\n\tgetDate(date: JalaliDate): number {\n\t\treturn date.day;\n\t}\n\n\tgetDay(date: JalaliDate): number {\n\t\tconst [gregorianYear, gregorianMonth, gregorianDay] = PersianDate.jalaliToGregorian(\n\t\t\tdate.year,\n\t\t\tdate.month,\n\t\t\tdate.day,\n\t\t);\n\t\treturn new Date(gregorianYear, gregorianMonth - 1, gregorianDay).getDay();\n\t}\n\n\tgetHours(_date: JalaliDate): number {\n\t\treturn 0;\n\t}\n\n\tgetMinutes(_date: JalaliDate): number {\n\t\treturn 0;\n\t}\n\n\tgetSeconds(_date: JalaliDate): number {\n\t\treturn 0;\n\t}\n\n\tgetMilliseconds(_date: JalaliDate): number {\n\t\treturn 0;\n\t}\n\n\tgetTime(date: JalaliDate): number {\n\t\treturn date.valueOf();\n\t}\n\n\tstartOfMonth(date: JalaliDate): JalaliDate {\n\t\treturn new JalaliDate(date.year, date.month, 1);\n\t}\n\n\tendOfMonth(date: JalaliDate): JalaliDate {\n\t\treturn new JalaliDate(date.year, date.month, PersianDate.getDaysInMonth(date.year, date.month));\n\t}\n\n\tstartOfDay(date: JalaliDate): JalaliDate {\n\t\treturn date;\n\t}\n\n\tendOfDay(date: JalaliDate): JalaliDate {\n\t\treturn date;\n\t}\n\n\tprivate _constrain(year: number, month: number, day: number): JalaliDate {\n\t\tconst maxDay = PersianDate.getDaysInMonth(year, month);\n\t\treturn new JalaliDate(year, month, Math.min(day, maxDay));\n\t}\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,479 @@
|
|
|
1
|
+
import * as i0 from '@angular/core';
|
|
2
|
+
import { input, linkedSignal, effect, untracked, forwardRef, Directive, inject, ElementRef, DestroyRef } from '@angular/core';
|
|
3
|
+
import * as i1 from '@spartan-ng/brain/dialog';
|
|
4
|
+
import { BrnDialog, BrnDialogClose, BrnDialogContent, BrnDialogDescription, BrnDialogRef, BrnDialogOverlay, BrnDialogTitle, BrnDialogTrigger } from '@spartan-ng/brain/dialog';
|
|
5
|
+
import { provideExposesStateProviderExisting, provideExposedSideProviderExisting, provideCustomClassSettableExisting } from '@spartan-ng/brain/core';
|
|
6
|
+
import { DOCUMENT } from '@angular/common';
|
|
7
|
+
|
|
8
|
+
class BrnDrawer extends BrnDialog {
|
|
9
|
+
direction = input('bottom', ...(ngDevMode ? [{ debugName: "direction" }] : /* istanbul ignore next */ []));
|
|
10
|
+
directionState = linkedSignal(() => this.direction(), ...(ngDevMode ? [{ debugName: "directionState" }] : /* istanbul ignore next */ []));
|
|
11
|
+
constructor() {
|
|
12
|
+
super();
|
|
13
|
+
effect(() => {
|
|
14
|
+
const direction = this.directionState();
|
|
15
|
+
untracked(() => {
|
|
16
|
+
if (direction === 'bottom') {
|
|
17
|
+
this.mutablePositionStrategy.set(this.positionBuilder.global().bottom());
|
|
18
|
+
}
|
|
19
|
+
if (direction === 'top') {
|
|
20
|
+
this.mutablePositionStrategy.set(this.positionBuilder.global().top());
|
|
21
|
+
}
|
|
22
|
+
if (direction === 'left') {
|
|
23
|
+
this.mutablePositionStrategy.set(this.positionBuilder.global().left());
|
|
24
|
+
}
|
|
25
|
+
if (direction === 'right') {
|
|
26
|
+
this.mutablePositionStrategy.set(this.positionBuilder.global().right());
|
|
27
|
+
}
|
|
28
|
+
});
|
|
29
|
+
});
|
|
30
|
+
}
|
|
31
|
+
/** @nocollapse */ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.16", ngImport: i0, type: BrnDrawer, deps: [], target: i0.ɵɵFactoryTarget.Directive });
|
|
32
|
+
/** @nocollapse */ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "21.2.16", type: BrnDrawer, isStandalone: true, selector: "[brnDrawer],brn-drawer", inputs: { direction: { classPropertyName: "direction", publicName: "direction", isSignal: true, isRequired: false, transformFunction: null } }, providers: [
|
|
33
|
+
{
|
|
34
|
+
provide: BrnDialog,
|
|
35
|
+
useExisting: forwardRef((() => BrnDrawer)),
|
|
36
|
+
},
|
|
37
|
+
], exportAs: ["brnDrawer"], usesInheritance: true, ngImport: i0 });
|
|
38
|
+
}
|
|
39
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.16", ngImport: i0, type: BrnDrawer, decorators: [{
|
|
40
|
+
type: Directive,
|
|
41
|
+
args: [{
|
|
42
|
+
selector: '[brnDrawer],brn-drawer',
|
|
43
|
+
exportAs: 'brnDrawer',
|
|
44
|
+
providers: [
|
|
45
|
+
{
|
|
46
|
+
provide: BrnDialog,
|
|
47
|
+
useExisting: forwardRef((() => BrnDrawer)),
|
|
48
|
+
},
|
|
49
|
+
],
|
|
50
|
+
}]
|
|
51
|
+
}], ctorParameters: () => [], propDecorators: { direction: [{ type: i0.Input, args: [{ isSignal: true, alias: "direction", required: false }] }] } });
|
|
52
|
+
|
|
53
|
+
class BrnDrawerClose extends BrnDialogClose {
|
|
54
|
+
/** @nocollapse */ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.16", ngImport: i0, type: BrnDrawerClose, deps: null, target: i0.ɵɵFactoryTarget.Directive });
|
|
55
|
+
/** @nocollapse */ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "21.2.16", type: BrnDrawerClose, isStandalone: true, selector: "button[brnDrawerClose]", usesInheritance: true, ngImport: i0 });
|
|
56
|
+
}
|
|
57
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.16", ngImport: i0, type: BrnDrawerClose, decorators: [{
|
|
58
|
+
type: Directive,
|
|
59
|
+
args: [{
|
|
60
|
+
selector: 'button[brnDrawerClose]',
|
|
61
|
+
}]
|
|
62
|
+
}] });
|
|
63
|
+
|
|
64
|
+
class BrnDrawerContent extends BrnDialogContent {
|
|
65
|
+
side = inject(BrnDrawer).directionState;
|
|
66
|
+
/** @nocollapse */ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.16", ngImport: i0, type: BrnDrawerContent, deps: null, target: i0.ɵɵFactoryTarget.Directive });
|
|
67
|
+
/** @nocollapse */ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "21.2.16", type: BrnDrawerContent, isStandalone: true, selector: "[brnDrawerContent]", providers: [
|
|
68
|
+
provideExposesStateProviderExisting((() => BrnDrawerContent)),
|
|
69
|
+
provideExposedSideProviderExisting((() => BrnDrawerContent)),
|
|
70
|
+
], usesInheritance: true, ngImport: i0 });
|
|
71
|
+
}
|
|
72
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.16", ngImport: i0, type: BrnDrawerContent, decorators: [{
|
|
73
|
+
type: Directive,
|
|
74
|
+
args: [{
|
|
75
|
+
selector: '[brnDrawerContent]',
|
|
76
|
+
providers: [
|
|
77
|
+
provideExposesStateProviderExisting((() => BrnDrawerContent)),
|
|
78
|
+
provideExposedSideProviderExisting((() => BrnDrawerContent)),
|
|
79
|
+
],
|
|
80
|
+
}]
|
|
81
|
+
}] });
|
|
82
|
+
|
|
83
|
+
class BrnDrawerDescription {
|
|
84
|
+
/** @nocollapse */ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.16", ngImport: i0, type: BrnDrawerDescription, deps: [], target: i0.ɵɵFactoryTarget.Directive });
|
|
85
|
+
/** @nocollapse */ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "21.2.16", type: BrnDrawerDescription, isStandalone: true, selector: "[brnDrawerDescription]", hostDirectives: [{ directive: i1.BrnDialogDescription }], ngImport: i0 });
|
|
86
|
+
}
|
|
87
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.16", ngImport: i0, type: BrnDrawerDescription, decorators: [{
|
|
88
|
+
type: Directive,
|
|
89
|
+
args: [{
|
|
90
|
+
selector: '[brnDrawerDescription]',
|
|
91
|
+
hostDirectives: [BrnDialogDescription],
|
|
92
|
+
}]
|
|
93
|
+
}] });
|
|
94
|
+
|
|
95
|
+
const VELOCITY_THRESHOLD = 0.4;
|
|
96
|
+
const DEFAULT_CLOSE_THRESHOLD = 0.25;
|
|
97
|
+
const SCROLL_LOCK_TIMEOUT = 100;
|
|
98
|
+
const TOUCH_SWIPE_THRESHOLD = 10;
|
|
99
|
+
const MOUSE_SWIPE_THRESHOLD = 2;
|
|
100
|
+
const OPEN_TIME_COOLDOWN = 500;
|
|
101
|
+
const TRANSITION = 'transform 0.5s cubic-bezier(0.32, 0.72, 0, 1)';
|
|
102
|
+
const OVERLAY_TRANSITION = 'opacity 0.5s cubic-bezier(0.32, 0.72, 0, 1)';
|
|
103
|
+
function dampenValue(v) {
|
|
104
|
+
return 8 * (Math.log(v + 1) - 2);
|
|
105
|
+
}
|
|
106
|
+
class BrnDrawerHandle {
|
|
107
|
+
_brnDialogRef = inject(BrnDialogRef, { optional: true });
|
|
108
|
+
_brnDrawer = inject(BrnDrawer, { optional: true });
|
|
109
|
+
_element = inject(ElementRef);
|
|
110
|
+
_document = inject(DOCUMENT);
|
|
111
|
+
_destroyRef = inject(DestroyRef);
|
|
112
|
+
_pointerId = -1;
|
|
113
|
+
constructor() {
|
|
114
|
+
this._destroyRef.onDestroy(() => this._cleanup());
|
|
115
|
+
effect(() => {
|
|
116
|
+
const state = this._brnDialogRef?.state();
|
|
117
|
+
untracked(() => {
|
|
118
|
+
if (state === 'open') {
|
|
119
|
+
this._openTime = Date.now();
|
|
120
|
+
}
|
|
121
|
+
else if (state === 'closed') {
|
|
122
|
+
this._openTime = null;
|
|
123
|
+
}
|
|
124
|
+
});
|
|
125
|
+
});
|
|
126
|
+
}
|
|
127
|
+
_drawerEl = null;
|
|
128
|
+
_backdropEl = null;
|
|
129
|
+
_direction = 'bottom';
|
|
130
|
+
_initialBackdropOpacity = 1;
|
|
131
|
+
_pointerStartX = 0;
|
|
132
|
+
_pointerStartY = 0;
|
|
133
|
+
_pointerStart = 0;
|
|
134
|
+
_pointerType = '';
|
|
135
|
+
_isDragging = false;
|
|
136
|
+
_isAllowedToDrag = false;
|
|
137
|
+
_wasBeyondThreshold = false;
|
|
138
|
+
_openTime = null;
|
|
139
|
+
_lastTimeDragPrevented = null;
|
|
140
|
+
_dragStartTime = null;
|
|
141
|
+
closeThreshold = input(DEFAULT_CLOSE_THRESHOLD, ...(ngDevMode ? [{ debugName: "closeThreshold" }] : /* istanbul ignore next */ []));
|
|
142
|
+
get _isVertical() {
|
|
143
|
+
return this._direction === 'bottom' || this._direction === 'top';
|
|
144
|
+
}
|
|
145
|
+
get _isPositive() {
|
|
146
|
+
return this._direction === 'bottom' || this._direction === 'right';
|
|
147
|
+
}
|
|
148
|
+
get _dimensionMultiplier() {
|
|
149
|
+
return this._isPositive ? 1 : -1;
|
|
150
|
+
}
|
|
151
|
+
get _swipeThreshold() {
|
|
152
|
+
return this._pointerType === 'touch' ? TOUCH_SWIPE_THRESHOLD : MOUSE_SWIPE_THRESHOLD;
|
|
153
|
+
}
|
|
154
|
+
_onPointerDown(event) {
|
|
155
|
+
if (!this._brnDialogRef || !this._brnDrawer || this._isDragging)
|
|
156
|
+
return;
|
|
157
|
+
this._direction = this._brnDrawer.directionState();
|
|
158
|
+
this._drawerEl = this._element.nativeElement.closest('[data-vaul-drawer-direction]');
|
|
159
|
+
if (!this._drawerEl)
|
|
160
|
+
return;
|
|
161
|
+
this._pointerType = event.pointerType;
|
|
162
|
+
this._pointerStartX = event.pageX;
|
|
163
|
+
this._pointerStartY = event.pageY;
|
|
164
|
+
this._pointerStart = this._isVertical ? event.pageY : event.pageX;
|
|
165
|
+
this._isDragging = true;
|
|
166
|
+
this._isAllowedToDrag = false;
|
|
167
|
+
this._wasBeyondThreshold = false;
|
|
168
|
+
this._dragStartTime = Date.now();
|
|
169
|
+
this._drawerEl.style.transition = 'none';
|
|
170
|
+
if (!this._findScrollableAncestor(event.target)) {
|
|
171
|
+
this._drawerEl.style.touchAction = 'none';
|
|
172
|
+
}
|
|
173
|
+
const overlayWrapper = this._drawerEl.closest('.cdk-global-overlay-wrapper');
|
|
174
|
+
this._backdropEl = overlayWrapper?.querySelector('.cdk-overlay-backdrop');
|
|
175
|
+
if (this._backdropEl) {
|
|
176
|
+
this._initialBackdropOpacity = parseFloat(getComputedStyle(this._backdropEl).opacity) || 1;
|
|
177
|
+
}
|
|
178
|
+
this._pointerId = event.pointerId;
|
|
179
|
+
this._document.addEventListener('pointermove', this._onPointerMove, { passive: false });
|
|
180
|
+
this._document.addEventListener('pointerup', this._onPointerUp, { once: true });
|
|
181
|
+
this._document.addEventListener('pointercancel', this._onPointerCancel, { once: true });
|
|
182
|
+
}
|
|
183
|
+
_onPointerMove = (e) => {
|
|
184
|
+
if (!this._isDragging || !this._drawerEl)
|
|
185
|
+
return;
|
|
186
|
+
const currentX = e.pageX;
|
|
187
|
+
const currentY = e.pageY;
|
|
188
|
+
const xDelta = currentX - this._pointerStartX;
|
|
189
|
+
const yDelta = currentY - this._pointerStartY;
|
|
190
|
+
if (!this._wasBeyondThreshold) {
|
|
191
|
+
const absX = Math.abs(xDelta);
|
|
192
|
+
const absY = Math.abs(yDelta);
|
|
193
|
+
if (this._isVertical) {
|
|
194
|
+
if (absY < this._swipeThreshold) {
|
|
195
|
+
if (absX >= this._swipeThreshold) {
|
|
196
|
+
this._pointerStartX = currentX;
|
|
197
|
+
this._pointerStartY = currentY;
|
|
198
|
+
}
|
|
199
|
+
return;
|
|
200
|
+
}
|
|
201
|
+
if (absX > absY)
|
|
202
|
+
return;
|
|
203
|
+
}
|
|
204
|
+
else {
|
|
205
|
+
if (absX < this._swipeThreshold) {
|
|
206
|
+
if (absY >= this._swipeThreshold) {
|
|
207
|
+
this._pointerStartX = currentX;
|
|
208
|
+
this._pointerStartY = currentY;
|
|
209
|
+
}
|
|
210
|
+
return;
|
|
211
|
+
}
|
|
212
|
+
if (absY > absX)
|
|
213
|
+
return;
|
|
214
|
+
}
|
|
215
|
+
this._wasBeyondThreshold = true;
|
|
216
|
+
}
|
|
217
|
+
const currentPosition = this._isVertical ? currentY : currentX;
|
|
218
|
+
const draggedDistance = (this._pointerStart - currentPosition) * this._dimensionMultiplier;
|
|
219
|
+
const isDraggingInDirection = draggedDistance > 0;
|
|
220
|
+
const absDraggedDistance = Math.abs(draggedDistance);
|
|
221
|
+
if (!this._isAllowedToDrag && !this._shouldDrag(e.target ?? this._element.nativeElement, isDraggingInDirection))
|
|
222
|
+
return;
|
|
223
|
+
this._isAllowedToDrag = true;
|
|
224
|
+
try {
|
|
225
|
+
this._element.nativeElement.setPointerCapture(e.pointerId);
|
|
226
|
+
}
|
|
227
|
+
catch {
|
|
228
|
+
/* empty - pointer capture not supported */
|
|
229
|
+
}
|
|
230
|
+
this._drawerEl.classList.add('vaul-dragging');
|
|
231
|
+
const dimension = this._isVertical ? this._drawerEl.offsetHeight : this._drawerEl.offsetWidth;
|
|
232
|
+
const progress = dimension > 0 ? Math.min(absDraggedDistance / dimension, 1) : 0;
|
|
233
|
+
if (isDraggingInDirection) {
|
|
234
|
+
const dampened = dampenValue(draggedDistance);
|
|
235
|
+
const translateValue = Math.min(dampened * -1, 0) * this._dimensionMultiplier;
|
|
236
|
+
const prop = this._isVertical ? 'translateY' : 'translateX';
|
|
237
|
+
this._drawerEl.style.transform = `${prop}(${translateValue}px)`;
|
|
238
|
+
if (this._backdropEl) {
|
|
239
|
+
this._backdropEl.style.opacity = String(Math.max(this._initialBackdropOpacity - progress * 0.3, 0));
|
|
240
|
+
}
|
|
241
|
+
return;
|
|
242
|
+
}
|
|
243
|
+
e.preventDefault();
|
|
244
|
+
const translateValue = absDraggedDistance * this._dimensionMultiplier;
|
|
245
|
+
const prop = this._isVertical ? 'translateY' : 'translateX';
|
|
246
|
+
this._drawerEl.style.transform = `${prop}(${translateValue}px)`;
|
|
247
|
+
if (this._backdropEl) {
|
|
248
|
+
this._backdropEl.style.opacity = String(Math.max(this._initialBackdropOpacity - progress, 0));
|
|
249
|
+
}
|
|
250
|
+
};
|
|
251
|
+
_onPointerUp = (e) => {
|
|
252
|
+
if (!this._isDragging || !this._drawerEl) {
|
|
253
|
+
this._cleanup();
|
|
254
|
+
return;
|
|
255
|
+
}
|
|
256
|
+
this._drawerEl.classList.remove('vaul-dragging');
|
|
257
|
+
const swipeAmount = this._getTranslate();
|
|
258
|
+
if (!this._isAllowedToDrag || swipeAmount === null || Number.isNaN(swipeAmount)) {
|
|
259
|
+
this._resetDrawer(true);
|
|
260
|
+
this._cleanup();
|
|
261
|
+
return;
|
|
262
|
+
}
|
|
263
|
+
const currentPosition = this._isVertical ? e.pageY : e.pageX;
|
|
264
|
+
const distMoved = this._pointerStart - currentPosition;
|
|
265
|
+
const timeTaken = Date.now() - (this._dragStartTime ?? Date.now());
|
|
266
|
+
const velocity = timeTaken > 0 ? Math.abs(distMoved) / timeTaken : 0;
|
|
267
|
+
if (this._isPositive ? distMoved > 0 : distMoved < 0) {
|
|
268
|
+
this._resetDrawer(true);
|
|
269
|
+
this._cleanup();
|
|
270
|
+
return;
|
|
271
|
+
}
|
|
272
|
+
if (velocity > VELOCITY_THRESHOLD) {
|
|
273
|
+
this._animateAndClose();
|
|
274
|
+
this._cleanup();
|
|
275
|
+
this._brnDialogRef?.close();
|
|
276
|
+
return;
|
|
277
|
+
}
|
|
278
|
+
const dimension = this._isVertical ? this._drawerEl.offsetHeight : this._drawerEl.offsetWidth;
|
|
279
|
+
if (Math.abs(swipeAmount) >= dimension * this.closeThreshold()) {
|
|
280
|
+
this._animateAndClose();
|
|
281
|
+
this._cleanup();
|
|
282
|
+
this._brnDialogRef?.close();
|
|
283
|
+
return;
|
|
284
|
+
}
|
|
285
|
+
this._resetDrawer(true);
|
|
286
|
+
this._cleanup();
|
|
287
|
+
};
|
|
288
|
+
_onPointerCancel = () => {
|
|
289
|
+
this._resetDrawer(true);
|
|
290
|
+
this._cleanup();
|
|
291
|
+
};
|
|
292
|
+
_shouldDrag(el, isDraggingInDirection) {
|
|
293
|
+
if (this._direction === 'left' || this._direction === 'right')
|
|
294
|
+
return true;
|
|
295
|
+
const now = Date.now();
|
|
296
|
+
if (this._openTime !== null && now - this._openTime < OPEN_TIME_COOLDOWN)
|
|
297
|
+
return false;
|
|
298
|
+
const currentTranslate = this._getTranslate();
|
|
299
|
+
if (this._isPositive ? currentTranslate > 0 : currentTranslate < 0)
|
|
300
|
+
return true;
|
|
301
|
+
if (this._lastTimeDragPrevented !== null &&
|
|
302
|
+
now - this._lastTimeDragPrevented < SCROLL_LOCK_TIMEOUT &&
|
|
303
|
+
currentTranslate === 0) {
|
|
304
|
+
this._lastTimeDragPrevented = now;
|
|
305
|
+
return false;
|
|
306
|
+
}
|
|
307
|
+
if (isDraggingInDirection) {
|
|
308
|
+
this._lastTimeDragPrevented = now;
|
|
309
|
+
return false;
|
|
310
|
+
}
|
|
311
|
+
let element = el;
|
|
312
|
+
while (element) {
|
|
313
|
+
if (element.scrollHeight > element.clientHeight) {
|
|
314
|
+
if (element.scrollTop !== 0) {
|
|
315
|
+
this._lastTimeDragPrevented = now;
|
|
316
|
+
return false;
|
|
317
|
+
}
|
|
318
|
+
if (element.getAttribute('role') === 'dialog')
|
|
319
|
+
return true;
|
|
320
|
+
}
|
|
321
|
+
element = element.parentElement;
|
|
322
|
+
}
|
|
323
|
+
return true;
|
|
324
|
+
}
|
|
325
|
+
_getTranslate() {
|
|
326
|
+
if (!this._drawerEl)
|
|
327
|
+
return 0;
|
|
328
|
+
const style = getComputedStyle(this._drawerEl);
|
|
329
|
+
const transform = style.transform || style.webkitTransform;
|
|
330
|
+
if (!transform || transform === 'none')
|
|
331
|
+
return 0;
|
|
332
|
+
let mat = transform.match(/^matrix3d\((.+)\)$/);
|
|
333
|
+
if (mat) {
|
|
334
|
+
return parseFloat(mat[1].split(', ')[this._isVertical ? 13 : 12]);
|
|
335
|
+
}
|
|
336
|
+
mat = transform.match(/^matrix\((.+)\)$/);
|
|
337
|
+
if (mat) {
|
|
338
|
+
return parseFloat(mat[1].split(', ')[this._isVertical ? 5 : 4]);
|
|
339
|
+
}
|
|
340
|
+
return 0;
|
|
341
|
+
}
|
|
342
|
+
_resetDrawer(animate = true) {
|
|
343
|
+
if (this._drawerEl) {
|
|
344
|
+
this._drawerEl.style.transition = animate ? TRANSITION : 'none';
|
|
345
|
+
this._drawerEl.style.transform = '';
|
|
346
|
+
}
|
|
347
|
+
if (this._backdropEl) {
|
|
348
|
+
this._backdropEl.style.transition = animate ? OVERLAY_TRANSITION : 'none';
|
|
349
|
+
this._backdropEl.style.opacity = String(this._initialBackdropOpacity);
|
|
350
|
+
}
|
|
351
|
+
setTimeout(() => {
|
|
352
|
+
if (this._drawerEl)
|
|
353
|
+
this._drawerEl.style.transition = '';
|
|
354
|
+
if (this._backdropEl)
|
|
355
|
+
this._backdropEl.style.transition = '';
|
|
356
|
+
}, 500);
|
|
357
|
+
}
|
|
358
|
+
_animateAndClose() {
|
|
359
|
+
if (!this._drawerEl)
|
|
360
|
+
return;
|
|
361
|
+
const dimension = this._isVertical ? this._drawerEl.offsetHeight : this._drawerEl.offsetWidth;
|
|
362
|
+
const targetClose = this._isPositive ? dimension : -dimension;
|
|
363
|
+
const prop = this._isVertical ? 'translateY' : 'translateX';
|
|
364
|
+
this._drawerEl.style.transition = 'transform 0.3s cubic-bezier(0.32, 0.72, 0, 1)';
|
|
365
|
+
this._drawerEl.style.transform = `${prop}(${targetClose}px)`;
|
|
366
|
+
this._drawerEl.style.animation = 'none';
|
|
367
|
+
if (this._backdropEl) {
|
|
368
|
+
this._backdropEl.style.transition = 'opacity 0.3s cubic-bezier(0.32, 0.72, 0, 1)';
|
|
369
|
+
this._backdropEl.style.opacity = '0';
|
|
370
|
+
}
|
|
371
|
+
}
|
|
372
|
+
_cleanup() {
|
|
373
|
+
this._isDragging = false;
|
|
374
|
+
this._isAllowedToDrag = false;
|
|
375
|
+
if (this._drawerEl) {
|
|
376
|
+
this._drawerEl.style.touchAction = '';
|
|
377
|
+
}
|
|
378
|
+
if (this._pointerId !== -1) {
|
|
379
|
+
try {
|
|
380
|
+
this._element.nativeElement.releasePointerCapture(this._pointerId);
|
|
381
|
+
}
|
|
382
|
+
catch {
|
|
383
|
+
/* empty */
|
|
384
|
+
}
|
|
385
|
+
this._pointerId = -1;
|
|
386
|
+
}
|
|
387
|
+
this._document.removeEventListener('pointermove', this._onPointerMove);
|
|
388
|
+
}
|
|
389
|
+
_findScrollableAncestor(element) {
|
|
390
|
+
if (!element)
|
|
391
|
+
return null;
|
|
392
|
+
const scrollProp = this._isVertical ? 'overflow-y' : 'overflow-x';
|
|
393
|
+
const sizeProp = this._isVertical ? 'scrollHeight' : 'scrollWidth';
|
|
394
|
+
const clientProp = this._isVertical ? 'clientHeight' : 'clientWidth';
|
|
395
|
+
let el = element.parentElement;
|
|
396
|
+
while (el) {
|
|
397
|
+
const overflow = getComputedStyle(el)[scrollProp];
|
|
398
|
+
if ((overflow === 'auto' || overflow === 'scroll') && el[sizeProp] > el[clientProp]) {
|
|
399
|
+
return el;
|
|
400
|
+
}
|
|
401
|
+
el = el.parentElement;
|
|
402
|
+
}
|
|
403
|
+
return null;
|
|
404
|
+
}
|
|
405
|
+
/** @nocollapse */ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.16", ngImport: i0, type: BrnDrawerHandle, deps: [], target: i0.ɵɵFactoryTarget.Directive });
|
|
406
|
+
/** @nocollapse */ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "21.2.16", type: BrnDrawerHandle, isStandalone: true, selector: "[brnDrawerHandle]", inputs: { closeThreshold: { classPropertyName: "closeThreshold", publicName: "closeThreshold", isSignal: true, isRequired: false, transformFunction: null } }, host: { attributes: { "role": "presentation" }, listeners: { "pointerdown": "_onPointerDown($event)" } }, ngImport: i0 });
|
|
407
|
+
}
|
|
408
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.16", ngImport: i0, type: BrnDrawerHandle, decorators: [{
|
|
409
|
+
type: Directive,
|
|
410
|
+
args: [{
|
|
411
|
+
selector: '[brnDrawerHandle]',
|
|
412
|
+
host: {
|
|
413
|
+
role: 'presentation',
|
|
414
|
+
'(pointerdown)': '_onPointerDown($event)',
|
|
415
|
+
},
|
|
416
|
+
}]
|
|
417
|
+
}], ctorParameters: () => [], propDecorators: { closeThreshold: [{ type: i0.Input, args: [{ isSignal: true, alias: "closeThreshold", required: false }] }] } });
|
|
418
|
+
|
|
419
|
+
class BrnDrawerOverlay extends BrnDialogOverlay {
|
|
420
|
+
/** @nocollapse */ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.16", ngImport: i0, type: BrnDrawerOverlay, deps: null, target: i0.ɵɵFactoryTarget.Directive });
|
|
421
|
+
/** @nocollapse */ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "21.2.16", type: BrnDrawerOverlay, isStandalone: true, selector: "[brnDrawerOverlay],brn-drawer-overlay", providers: [provideCustomClassSettableExisting((() => BrnDrawerOverlay))], usesInheritance: true, ngImport: i0 });
|
|
422
|
+
}
|
|
423
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.16", ngImport: i0, type: BrnDrawerOverlay, decorators: [{
|
|
424
|
+
type: Directive,
|
|
425
|
+
args: [{
|
|
426
|
+
selector: '[brnDrawerOverlay],brn-drawer-overlay',
|
|
427
|
+
providers: [provideCustomClassSettableExisting((() => BrnDrawerOverlay))],
|
|
428
|
+
}]
|
|
429
|
+
}] });
|
|
430
|
+
|
|
431
|
+
class BrnDrawerTitle {
|
|
432
|
+
/** @nocollapse */ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.16", ngImport: i0, type: BrnDrawerTitle, deps: [], target: i0.ɵɵFactoryTarget.Directive });
|
|
433
|
+
/** @nocollapse */ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "21.2.16", type: BrnDrawerTitle, isStandalone: true, selector: "[brnDrawerTitle]", hostDirectives: [{ directive: i1.BrnDialogTitle }], ngImport: i0 });
|
|
434
|
+
}
|
|
435
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.16", ngImport: i0, type: BrnDrawerTitle, decorators: [{
|
|
436
|
+
type: Directive,
|
|
437
|
+
args: [{
|
|
438
|
+
selector: '[brnDrawerTitle]',
|
|
439
|
+
hostDirectives: [BrnDialogTitle],
|
|
440
|
+
}]
|
|
441
|
+
}] });
|
|
442
|
+
|
|
443
|
+
class BrnDrawerTrigger extends BrnDialogTrigger {
|
|
444
|
+
_drawer = inject(BrnDrawer, { optional: true });
|
|
445
|
+
direction = input(undefined, ...(ngDevMode ? [{ debugName: "direction" }] : /* istanbul ignore next */ []));
|
|
446
|
+
open() {
|
|
447
|
+
const direction = this.direction();
|
|
448
|
+
if (this._drawer && direction) {
|
|
449
|
+
this._drawer.directionState.set(direction);
|
|
450
|
+
}
|
|
451
|
+
super.open();
|
|
452
|
+
}
|
|
453
|
+
/** @nocollapse */ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.16", ngImport: i0, type: BrnDrawerTrigger, deps: null, target: i0.ɵɵFactoryTarget.Directive });
|
|
454
|
+
/** @nocollapse */ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "21.2.16", type: BrnDrawerTrigger, isStandalone: true, selector: "button[brnDrawerTrigger]", inputs: { direction: { classPropertyName: "direction", publicName: "direction", isSignal: true, isRequired: false, transformFunction: null } }, usesInheritance: true, ngImport: i0 });
|
|
455
|
+
}
|
|
456
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.16", ngImport: i0, type: BrnDrawerTrigger, decorators: [{
|
|
457
|
+
type: Directive,
|
|
458
|
+
args: [{
|
|
459
|
+
selector: 'button[brnDrawerTrigger]',
|
|
460
|
+
}]
|
|
461
|
+
}], propDecorators: { direction: [{ type: i0.Input, args: [{ isSignal: true, alias: "direction", required: false }] }] } });
|
|
462
|
+
|
|
463
|
+
const BrnDrawerImports = [
|
|
464
|
+
BrnDrawer,
|
|
465
|
+
BrnDrawerOverlay,
|
|
466
|
+
BrnDrawerTrigger,
|
|
467
|
+
BrnDrawerClose,
|
|
468
|
+
BrnDrawerContent,
|
|
469
|
+
BrnDrawerTitle,
|
|
470
|
+
BrnDrawerDescription,
|
|
471
|
+
BrnDrawerHandle,
|
|
472
|
+
];
|
|
473
|
+
|
|
474
|
+
/**
|
|
475
|
+
* Generated bundle index. Do not edit.
|
|
476
|
+
*/
|
|
477
|
+
|
|
478
|
+
export { BrnDrawer, BrnDrawerClose, BrnDrawerContent, BrnDrawerDescription, BrnDrawerHandle, BrnDrawerImports, BrnDrawerOverlay, BrnDrawerTitle, BrnDrawerTrigger };
|
|
479
|
+
//# sourceMappingURL=spartan-ng-brain-drawer.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"spartan-ng-brain-drawer.mjs","sources":["../../../../libs/brain/drawer/src/lib/brn-drawer.ts","../../../../libs/brain/drawer/src/lib/brn-drawer-close.ts","../../../../libs/brain/drawer/src/lib/brn-drawer-content.ts","../../../../libs/brain/drawer/src/lib/brn-drawer-description.ts","../../../../libs/brain/drawer/src/lib/brn-drawer-handle.ts","../../../../libs/brain/drawer/src/lib/brn-drawer-overlay.ts","../../../../libs/brain/drawer/src/lib/brn-drawer-title.ts","../../../../libs/brain/drawer/src/lib/brn-drawer-trigger.ts","../../../../libs/brain/drawer/src/index.ts","../../../../libs/brain/drawer/src/spartan-ng-brain-drawer.ts"],"sourcesContent":["import { Directive, effect, forwardRef, input, linkedSignal, untracked } from '@angular/core';\nimport { BrnDialog } from '@spartan-ng/brain/dialog';\n\n@Directive({\n\tselector: '[brnDrawer],brn-drawer',\n\texportAs: 'brnDrawer',\n\tproviders: [\n\t\t{\n\t\t\tprovide: BrnDialog,\n\t\t\tuseExisting: forwardRef(() => BrnDrawer),\n\t\t},\n\t],\n})\nexport class BrnDrawer extends BrnDialog {\n\tpublic readonly direction = input<'bottom' | 'top' | 'left' | 'right'>('bottom');\n\tpublic readonly directionState = linkedSignal(() => this.direction());\n\n\tconstructor() {\n\t\tsuper();\n\t\teffect(() => {\n\t\t\tconst direction = this.directionState();\n\t\t\tuntracked(() => {\n\t\t\t\tif (direction === 'bottom') {\n\t\t\t\t\tthis.mutablePositionStrategy.set(this.positionBuilder.global().bottom());\n\t\t\t\t}\n\t\t\t\tif (direction === 'top') {\n\t\t\t\t\tthis.mutablePositionStrategy.set(this.positionBuilder.global().top());\n\t\t\t\t}\n\t\t\t\tif (direction === 'left') {\n\t\t\t\t\tthis.mutablePositionStrategy.set(this.positionBuilder.global().left());\n\t\t\t\t}\n\t\t\t\tif (direction === 'right') {\n\t\t\t\t\tthis.mutablePositionStrategy.set(this.positionBuilder.global().right());\n\t\t\t\t}\n\t\t\t});\n\t\t});\n\t}\n}\n","import { Directive } from '@angular/core';\nimport { BrnDialogClose } from '@spartan-ng/brain/dialog';\n\n@Directive({\n\tselector: 'button[brnDrawerClose]',\n})\nexport class BrnDrawerClose extends BrnDialogClose {}\n","import { Directive, inject } from '@angular/core';\nimport {\n\ttype ExposesSide,\n\tprovideExposedSideProviderExisting,\n\tprovideExposesStateProviderExisting,\n} from '@spartan-ng/brain/core';\nimport { BrnDialogContent } from '@spartan-ng/brain/dialog';\nimport { BrnDrawer } from './brn-drawer';\n\n@Directive({\n\tselector: '[brnDrawerContent]',\n\tproviders: [\n\t\tprovideExposesStateProviderExisting(() => BrnDrawerContent),\n\t\tprovideExposedSideProviderExisting(() => BrnDrawerContent),\n\t],\n})\nexport class BrnDrawerContent<T> extends BrnDialogContent<T> implements ExposesSide {\n\tpublic readonly side = inject(BrnDrawer).directionState;\n}\n","import { Directive } from '@angular/core';\nimport { BrnDialogDescription } from '@spartan-ng/brain/dialog';\n\n@Directive({\n\tselector: '[brnDrawerDescription]',\n\thostDirectives: [BrnDialogDescription],\n})\nexport class BrnDrawerDescription {}\n","import { DOCUMENT } from '@angular/common';\nimport { DestroyRef, Directive, effect, ElementRef, inject, input, untracked } from '@angular/core';\nimport { BrnDialogRef } from '@spartan-ng/brain/dialog';\nimport { BrnDrawer } from './brn-drawer';\n\nconst VELOCITY_THRESHOLD = 0.4;\nconst DEFAULT_CLOSE_THRESHOLD = 0.25;\nconst SCROLL_LOCK_TIMEOUT = 100;\nconst TOUCH_SWIPE_THRESHOLD = 10;\nconst MOUSE_SWIPE_THRESHOLD = 2;\nconst OPEN_TIME_COOLDOWN = 500;\nconst TRANSITION = 'transform 0.5s cubic-bezier(0.32, 0.72, 0, 1)';\nconst OVERLAY_TRANSITION = 'opacity 0.5s cubic-bezier(0.32, 0.72, 0, 1)';\n\nfunction dampenValue(v: number): number {\n\treturn 8 * (Math.log(v + 1) - 2);\n}\n\n@Directive({\n\tselector: '[brnDrawerHandle]',\n\thost: {\n\t\trole: 'presentation',\n\t\t'(pointerdown)': '_onPointerDown($event)',\n\t},\n})\nexport class BrnDrawerHandle {\n\tprivate readonly _brnDialogRef = inject(BrnDialogRef, { optional: true });\n\tprivate readonly _brnDrawer = inject(BrnDrawer, { optional: true });\n\tprivate readonly _element: ElementRef<HTMLElement> = inject(ElementRef);\n\tprivate readonly _document = inject(DOCUMENT);\n\tprivate readonly _destroyRef = inject(DestroyRef);\n\tprivate _pointerId = -1;\n\n\tconstructor() {\n\t\tthis._destroyRef.onDestroy(() => this._cleanup());\n\t\teffect(() => {\n\t\t\tconst state = this._brnDialogRef?.state();\n\t\t\tuntracked(() => {\n\t\t\t\tif (state === 'open') {\n\t\t\t\t\tthis._openTime = Date.now();\n\t\t\t\t} else if (state === 'closed') {\n\t\t\t\t\tthis._openTime = null;\n\t\t\t\t}\n\t\t\t});\n\t\t});\n\t}\n\n\tprivate _drawerEl: HTMLElement | null = null;\n\tprivate _backdropEl: HTMLElement | null = null;\n\tprivate _direction: 'bottom' | 'top' | 'left' | 'right' = 'bottom';\n\tprivate _initialBackdropOpacity = 1;\n\n\tprivate _pointerStartX = 0;\n\tprivate _pointerStartY = 0;\n\tprivate _pointerStart = 0;\n\tprivate _pointerType = '';\n\tprivate _isDragging = false;\n\tprivate _isAllowedToDrag = false;\n\tprivate _wasBeyondThreshold = false;\n\n\tprivate _openTime: number | null = null;\n\tprivate _lastTimeDragPrevented: number | null = null;\n\tprivate _dragStartTime: number | null = null;\n\n\tpublic readonly closeThreshold = input<number>(DEFAULT_CLOSE_THRESHOLD);\n\n\tprivate get _isVertical(): boolean {\n\t\treturn this._direction === 'bottom' || this._direction === 'top';\n\t}\n\n\tprivate get _isPositive(): boolean {\n\t\treturn this._direction === 'bottom' || this._direction === 'right';\n\t}\n\n\tprivate get _dimensionMultiplier(): number {\n\t\treturn this._isPositive ? 1 : -1;\n\t}\n\n\tprivate get _swipeThreshold(): number {\n\t\treturn this._pointerType === 'touch' ? TOUCH_SWIPE_THRESHOLD : MOUSE_SWIPE_THRESHOLD;\n\t}\n\n\tprotected _onPointerDown(event: PointerEvent): void {\n\t\tif (!this._brnDialogRef || !this._brnDrawer || this._isDragging) return;\n\n\t\tthis._direction = this._brnDrawer.directionState();\n\t\tthis._drawerEl = this._element.nativeElement.closest('[data-vaul-drawer-direction]');\n\t\tif (!this._drawerEl) return;\n\n\t\tthis._pointerType = event.pointerType;\n\t\tthis._pointerStartX = event.pageX;\n\t\tthis._pointerStartY = event.pageY;\n\t\tthis._pointerStart = this._isVertical ? event.pageY : event.pageX;\n\t\tthis._isDragging = true;\n\t\tthis._isAllowedToDrag = false;\n\t\tthis._wasBeyondThreshold = false;\n\t\tthis._dragStartTime = Date.now();\n\n\t\tthis._drawerEl.style.transition = 'none';\n\n\t\tif (!this._findScrollableAncestor(event.target as HTMLElement)) {\n\t\t\tthis._drawerEl.style.touchAction = 'none';\n\t\t}\n\n\t\tconst overlayWrapper = this._drawerEl.closest('.cdk-global-overlay-wrapper');\n\t\tthis._backdropEl = overlayWrapper?.querySelector('.cdk-overlay-backdrop') as HTMLElement | null;\n\t\tif (this._backdropEl) {\n\t\t\tthis._initialBackdropOpacity = parseFloat(getComputedStyle(this._backdropEl).opacity) || 1;\n\t\t}\n\n\t\tthis._pointerId = event.pointerId;\n\n\t\tthis._document.addEventListener('pointermove', this._onPointerMove, { passive: false });\n\t\tthis._document.addEventListener('pointerup', this._onPointerUp, { once: true });\n\t\tthis._document.addEventListener('pointercancel', this._onPointerCancel, { once: true });\n\t}\n\n\tprivate readonly _onPointerMove = (e: PointerEvent) => {\n\t\tif (!this._isDragging || !this._drawerEl) return;\n\n\t\tconst currentX = e.pageX;\n\t\tconst currentY = e.pageY;\n\t\tconst xDelta = currentX - this._pointerStartX;\n\t\tconst yDelta = currentY - this._pointerStartY;\n\n\t\tif (!this._wasBeyondThreshold) {\n\t\t\tconst absX = Math.abs(xDelta);\n\t\t\tconst absY = Math.abs(yDelta);\n\t\t\tif (this._isVertical) {\n\t\t\t\tif (absY < this._swipeThreshold) {\n\t\t\t\t\tif (absX >= this._swipeThreshold) {\n\t\t\t\t\t\tthis._pointerStartX = currentX;\n\t\t\t\t\t\tthis._pointerStartY = currentY;\n\t\t\t\t\t}\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tif (absX > absY) return;\n\t\t\t} else {\n\t\t\t\tif (absX < this._swipeThreshold) {\n\t\t\t\t\tif (absY >= this._swipeThreshold) {\n\t\t\t\t\t\tthis._pointerStartX = currentX;\n\t\t\t\t\t\tthis._pointerStartY = currentY;\n\t\t\t\t\t}\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tif (absY > absX) return;\n\t\t\t}\n\t\t\tthis._wasBeyondThreshold = true;\n\t\t}\n\n\t\tconst currentPosition = this._isVertical ? currentY : currentX;\n\t\tconst draggedDistance = (this._pointerStart - currentPosition) * this._dimensionMultiplier;\n\t\tconst isDraggingInDirection = draggedDistance > 0;\n\t\tconst absDraggedDistance = Math.abs(draggedDistance);\n\n\t\tif (!this._isAllowedToDrag && !this._shouldDrag(e.target ?? this._element.nativeElement, isDraggingInDirection))\n\t\t\treturn;\n\n\t\tthis._isAllowedToDrag = true;\n\t\ttry {\n\t\t\tthis._element.nativeElement.setPointerCapture(e.pointerId);\n\t\t} catch {\n\t\t\t/* empty - pointer capture not supported */\n\t\t}\n\t\tthis._drawerEl.classList.add('vaul-dragging');\n\n\t\tconst dimension = this._isVertical ? this._drawerEl.offsetHeight : this._drawerEl.offsetWidth;\n\n\t\tconst progress = dimension > 0 ? Math.min(absDraggedDistance / dimension, 1) : 0;\n\n\t\tif (isDraggingInDirection) {\n\t\t\tconst dampened = dampenValue(draggedDistance);\n\t\t\tconst translateValue = Math.min(dampened * -1, 0) * this._dimensionMultiplier;\n\t\t\tconst prop = this._isVertical ? 'translateY' : 'translateX';\n\t\t\tthis._drawerEl.style.transform = `${prop}(${translateValue}px)`;\n\t\t\tif (this._backdropEl) {\n\t\t\t\tthis._backdropEl.style.opacity = String(Math.max(this._initialBackdropOpacity - progress * 0.3, 0));\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\n\t\te.preventDefault();\n\n\t\tconst translateValue = absDraggedDistance * this._dimensionMultiplier;\n\t\tconst prop = this._isVertical ? 'translateY' : 'translateX';\n\t\tthis._drawerEl.style.transform = `${prop}(${translateValue}px)`;\n\n\t\tif (this._backdropEl) {\n\t\t\tthis._backdropEl.style.opacity = String(Math.max(this._initialBackdropOpacity - progress, 0));\n\t\t}\n\t};\n\n\tprivate readonly _onPointerUp = (e: PointerEvent) => {\n\t\tif (!this._isDragging || !this._drawerEl) {\n\t\t\tthis._cleanup();\n\t\t\treturn;\n\t\t}\n\n\t\tthis._drawerEl.classList.remove('vaul-dragging');\n\n\t\tconst swipeAmount = this._getTranslate();\n\n\t\tif (!this._isAllowedToDrag || swipeAmount === null || Number.isNaN(swipeAmount)) {\n\t\t\tthis._resetDrawer(true);\n\t\t\tthis._cleanup();\n\t\t\treturn;\n\t\t}\n\n\t\tconst currentPosition = this._isVertical ? e.pageY : e.pageX;\n\t\tconst distMoved = this._pointerStart - currentPosition;\n\t\tconst timeTaken = Date.now() - (this._dragStartTime ?? Date.now());\n\t\tconst velocity = timeTaken > 0 ? Math.abs(distMoved) / timeTaken : 0;\n\n\t\tif (this._isPositive ? distMoved > 0 : distMoved < 0) {\n\t\t\tthis._resetDrawer(true);\n\t\t\tthis._cleanup();\n\t\t\treturn;\n\t\t}\n\n\t\tif (velocity > VELOCITY_THRESHOLD) {\n\t\t\tthis._animateAndClose();\n\t\t\tthis._cleanup();\n\t\t\tthis._brnDialogRef?.close();\n\t\t\treturn;\n\t\t}\n\n\t\tconst dimension = this._isVertical ? this._drawerEl.offsetHeight : this._drawerEl.offsetWidth;\n\t\tif (Math.abs(swipeAmount) >= dimension * this.closeThreshold()) {\n\t\t\tthis._animateAndClose();\n\t\t\tthis._cleanup();\n\t\t\tthis._brnDialogRef?.close();\n\t\t\treturn;\n\t\t}\n\n\t\tthis._resetDrawer(true);\n\t\tthis._cleanup();\n\t};\n\n\tprivate readonly _onPointerCancel = () => {\n\t\tthis._resetDrawer(true);\n\t\tthis._cleanup();\n\t};\n\n\tprivate _shouldDrag(el: EventTarget, isDraggingInDirection: boolean): boolean {\n\t\tif (this._direction === 'left' || this._direction === 'right') return true;\n\n\t\tconst now = Date.now();\n\n\t\tif (this._openTime !== null && now - this._openTime < OPEN_TIME_COOLDOWN) return false;\n\n\t\tconst currentTranslate = this._getTranslate();\n\t\tif (this._isPositive ? currentTranslate > 0 : currentTranslate < 0) return true;\n\n\t\tif (\n\t\t\tthis._lastTimeDragPrevented !== null &&\n\t\t\tnow - this._lastTimeDragPrevented < SCROLL_LOCK_TIMEOUT &&\n\t\t\tcurrentTranslate === 0\n\t\t) {\n\t\t\tthis._lastTimeDragPrevented = now;\n\t\t\treturn false;\n\t\t}\n\n\t\tif (isDraggingInDirection) {\n\t\t\tthis._lastTimeDragPrevented = now;\n\t\t\treturn false;\n\t\t}\n\n\t\tlet element = el as HTMLElement | null;\n\t\twhile (element) {\n\t\t\tif (element.scrollHeight > element.clientHeight) {\n\t\t\t\tif (element.scrollTop !== 0) {\n\t\t\t\t\tthis._lastTimeDragPrevented = now;\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t\tif (element.getAttribute('role') === 'dialog') return true;\n\t\t\t}\n\t\t\telement = element.parentElement;\n\t\t}\n\n\t\treturn true;\n\t}\n\n\tprivate _getTranslate(): number {\n\t\tif (!this._drawerEl) return 0;\n\t\tconst style = getComputedStyle(this._drawerEl);\n\t\tconst transform = style.transform || (style as any).webkitTransform;\n\t\tif (!transform || transform === 'none') return 0;\n\t\tlet mat = transform.match(/^matrix3d\\((.+)\\)$/);\n\t\tif (mat) {\n\t\t\treturn parseFloat(mat[1].split(', ')[this._isVertical ? 13 : 12]);\n\t\t}\n\t\tmat = transform.match(/^matrix\\((.+)\\)$/);\n\t\tif (mat) {\n\t\t\treturn parseFloat(mat[1].split(', ')[this._isVertical ? 5 : 4]);\n\t\t}\n\t\treturn 0;\n\t}\n\n\tprivate _resetDrawer(animate = true): void {\n\t\tif (this._drawerEl) {\n\t\t\tthis._drawerEl.style.transition = animate ? TRANSITION : 'none';\n\t\t\tthis._drawerEl.style.transform = '';\n\t\t}\n\t\tif (this._backdropEl) {\n\t\t\tthis._backdropEl.style.transition = animate ? OVERLAY_TRANSITION : 'none';\n\t\t\tthis._backdropEl.style.opacity = String(this._initialBackdropOpacity);\n\t\t}\n\t\tsetTimeout(() => {\n\t\t\tif (this._drawerEl) this._drawerEl.style.transition = '';\n\t\t\tif (this._backdropEl) this._backdropEl.style.transition = '';\n\t\t}, 500);\n\t}\n\n\tprivate _animateAndClose(): void {\n\t\tif (!this._drawerEl) return;\n\t\tconst dimension = this._isVertical ? this._drawerEl.offsetHeight : this._drawerEl.offsetWidth;\n\t\tconst targetClose = this._isPositive ? dimension : -dimension;\n\t\tconst prop = this._isVertical ? 'translateY' : 'translateX';\n\t\tthis._drawerEl.style.transition = 'transform 0.3s cubic-bezier(0.32, 0.72, 0, 1)';\n\t\tthis._drawerEl.style.transform = `${prop}(${targetClose}px)`;\n\t\tthis._drawerEl.style.animation = 'none';\n\t\tif (this._backdropEl) {\n\t\t\tthis._backdropEl.style.transition = 'opacity 0.3s cubic-bezier(0.32, 0.72, 0, 1)';\n\t\t\tthis._backdropEl.style.opacity = '0';\n\t\t}\n\t}\n\n\tprivate _cleanup(): void {\n\t\tthis._isDragging = false;\n\t\tthis._isAllowedToDrag = false;\n\t\tif (this._drawerEl) {\n\t\t\tthis._drawerEl.style.touchAction = '';\n\t\t}\n\t\tif (this._pointerId !== -1) {\n\t\t\ttry {\n\t\t\t\tthis._element.nativeElement.releasePointerCapture(this._pointerId);\n\t\t\t} catch {\n\t\t\t\t/* empty */\n\t\t\t}\n\t\t\tthis._pointerId = -1;\n\t\t}\n\t\tthis._document.removeEventListener('pointermove', this._onPointerMove);\n\t}\n\n\tprivate _findScrollableAncestor(element: HTMLElement | null): HTMLElement | null {\n\t\tif (!element) return null;\n\t\tconst scrollProp = this._isVertical ? 'overflow-y' : 'overflow-x';\n\t\tconst sizeProp = this._isVertical ? 'scrollHeight' : 'scrollWidth';\n\t\tconst clientProp = this._isVertical ? 'clientHeight' : 'clientWidth';\n\t\tlet el: HTMLElement | null = element.parentElement;\n\t\twhile (el) {\n\t\t\tconst overflow = getComputedStyle(el)[scrollProp as any];\n\t\t\tif ((overflow === 'auto' || overflow === 'scroll') && (el as any)[sizeProp] > (el as any)[clientProp]) {\n\t\t\t\treturn el;\n\t\t\t}\n\t\t\tel = el.parentElement;\n\t\t}\n\t\treturn null;\n\t}\n}\n","import { Directive } from '@angular/core';\nimport { provideCustomClassSettableExisting } from '@spartan-ng/brain/core';\nimport { BrnDialogOverlay } from '@spartan-ng/brain/dialog';\n\n@Directive({\n\tselector: '[brnDrawerOverlay],brn-drawer-overlay',\n\tproviders: [provideCustomClassSettableExisting(() => BrnDrawerOverlay)],\n})\nexport class BrnDrawerOverlay extends BrnDialogOverlay {}\n","import { Directive } from '@angular/core';\nimport { BrnDialogTitle } from '@spartan-ng/brain/dialog';\n\n@Directive({\n\tselector: '[brnDrawerTitle]',\n\thostDirectives: [BrnDialogTitle],\n})\nexport class BrnDrawerTitle {}\n","import { Directive, inject, input } from '@angular/core';\nimport { BrnDialogTrigger } from '@spartan-ng/brain/dialog';\nimport { BrnDrawer } from './brn-drawer';\n\n@Directive({\n\tselector: 'button[brnDrawerTrigger]',\n})\nexport class BrnDrawerTrigger extends BrnDialogTrigger {\n\tprivate readonly _drawer = inject(BrnDrawer, { optional: true });\n\n\tpublic readonly direction = input<'bottom' | 'top' | 'left' | 'right' | undefined>(undefined);\n\n\toverride open() {\n\t\tconst direction = this.direction();\n\t\tif (this._drawer && direction) {\n\t\t\tthis._drawer.directionState.set(direction);\n\t\t}\n\t\tsuper.open();\n\t}\n}\n","import { BrnDrawer } from './lib/brn-drawer';\nimport { BrnDrawerClose } from './lib/brn-drawer-close';\nimport { BrnDrawerContent } from './lib/brn-drawer-content';\nimport { BrnDrawerDescription } from './lib/brn-drawer-description';\nimport { BrnDrawerHandle } from './lib/brn-drawer-handle';\nimport { BrnDrawerOverlay } from './lib/brn-drawer-overlay';\nimport { BrnDrawerTitle } from './lib/brn-drawer-title';\nimport { BrnDrawerTrigger } from './lib/brn-drawer-trigger';\n\nexport * from './lib/brn-drawer';\nexport * from './lib/brn-drawer-close';\nexport * from './lib/brn-drawer-content';\nexport * from './lib/brn-drawer-description';\nexport * from './lib/brn-drawer-handle';\nexport * from './lib/brn-drawer-overlay';\nexport * from './lib/brn-drawer-title';\nexport * from './lib/brn-drawer-trigger';\n\nexport const BrnDrawerImports = [\n\tBrnDrawer,\n\tBrnDrawerOverlay,\n\tBrnDrawerTrigger,\n\tBrnDrawerClose,\n\tBrnDrawerContent,\n\tBrnDrawerTitle,\n\tBrnDrawerDescription,\n\tBrnDrawerHandle,\n] as const;\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":";;;;;;;AAaM,MAAO,SAAU,SAAQ,SAAS,CAAA;AACvB,IAAA,SAAS,GAAG,KAAK,CAAsC,QAAQ,gFAAC;IAChE,cAAc,GAAG,YAAY,CAAC,MAAM,IAAI,CAAC,SAAS,EAAE,EAAA,IAAA,SAAA,GAAA,CAAA,EAAA,SAAA,EAAA,gBAAA,EAAA,CAAA,8BAAA,EAAA,CAAA,CAAC;AAErE,IAAA,WAAA,GAAA;AACC,QAAA,KAAK,EAAE;QACP,MAAM,CAAC,MAAK;AACX,YAAA,MAAM,SAAS,GAAG,IAAI,CAAC,cAAc,EAAE;YACvC,SAAS,CAAC,MAAK;AACd,gBAAA,IAAI,SAAS,KAAK,QAAQ,EAAE;AAC3B,oBAAA,IAAI,CAAC,uBAAuB,CAAC,GAAG,CAAC,IAAI,CAAC,eAAe,CAAC,MAAM,EAAE,CAAC,MAAM,EAAE,CAAC;gBACzE;AACA,gBAAA,IAAI,SAAS,KAAK,KAAK,EAAE;AACxB,oBAAA,IAAI,CAAC,uBAAuB,CAAC,GAAG,CAAC,IAAI,CAAC,eAAe,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC;gBACtE;AACA,gBAAA,IAAI,SAAS,KAAK,MAAM,EAAE;AACzB,oBAAA,IAAI,CAAC,uBAAuB,CAAC,GAAG,CAAC,IAAI,CAAC,eAAe,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,CAAC;gBACvE;AACA,gBAAA,IAAI,SAAS,KAAK,OAAO,EAAE;AAC1B,oBAAA,IAAI,CAAC,uBAAuB,CAAC,GAAG,CAAC,IAAI,CAAC,eAAe,CAAC,MAAM,EAAE,CAAC,KAAK,EAAE,CAAC;gBACxE;AACD,YAAA,CAAC,CAAC;AACH,QAAA,CAAC,CAAC;IACH;2HAvBY,SAAS,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAT,uBAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,SAAS,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,wBAAA,EAAA,MAAA,EAAA,EAAA,SAAA,EAAA,EAAA,iBAAA,EAAA,WAAA,EAAA,UAAA,EAAA,WAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,SAAA,EAPV;AACV,YAAA;AACC,gBAAA,OAAO,EAAE,SAAS;AAClB,gBAAA,WAAW,EAAE,UAAU,EAAC,MAAM,SAAS,EAAC;AACxC,aAAA;AACD,SAAA,EAAA,QAAA,EAAA,CAAA,WAAA,CAAA,EAAA,eAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA;;4FAEW,SAAS,EAAA,UAAA,EAAA,CAAA;kBAVrB,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,QAAQ,EAAE,wBAAwB;AAClC,oBAAA,QAAQ,EAAE,WAAW;AACrB,oBAAA,SAAS,EAAE;AACV,wBAAA;AACC,4BAAA,OAAO,EAAE,SAAS;AAClB,4BAAA,WAAW,EAAE,UAAU,EAAC,eAAe,EAAC;AACxC,yBAAA;AACD,qBAAA;AACD,iBAAA;;;ACNK,MAAO,cAAe,SAAQ,cAAc,CAAA;2HAArC,cAAc,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;+GAAd,cAAc,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,wBAAA,EAAA,eAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA;;4FAAd,cAAc,EAAA,UAAA,EAAA,CAAA;kBAH1B,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,QAAQ,EAAE,wBAAwB;AAClC,iBAAA;;;ACWK,MAAO,gBAAoB,SAAQ,gBAAmB,CAAA;AAC3C,IAAA,IAAI,GAAG,MAAM,CAAC,SAAS,CAAC,CAAC,cAAc;2HAD3C,gBAAgB,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAhB,uBAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,gBAAgB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,oBAAA,EAAA,SAAA,EALjB;AACV,YAAA,mCAAmC,EAAC,MAAM,gBAAgB,EAAC;AAC3D,YAAA,kCAAkC,EAAC,MAAM,gBAAgB,EAAC;AAC1D,SAAA,EAAA,eAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA;;4FAEW,gBAAgB,EAAA,UAAA,EAAA,CAAA;kBAP5B,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,QAAQ,EAAE,oBAAoB;AAC9B,oBAAA,SAAS,EAAE;AACV,wBAAA,mCAAmC,EAAC,MAAK,gBAAiB,EAAC;AAC3D,wBAAA,kCAAkC,EAAC,MAAK,gBAAiB,EAAC;AAC1D,qBAAA;AACD,iBAAA;;;MCRY,oBAAoB,CAAA;2HAApB,oBAAoB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;+GAApB,oBAAoB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,wBAAA,EAAA,cAAA,EAAA,CAAA,EAAA,SAAA,EAAA,EAAA,CAAA,oBAAA,EAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA;;4FAApB,oBAAoB,EAAA,UAAA,EAAA,CAAA;kBAJhC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,QAAQ,EAAE,wBAAwB;oBAClC,cAAc,EAAE,CAAC,oBAAoB,CAAC;AACtC,iBAAA;;;ACDD,MAAM,kBAAkB,GAAG,GAAG;AAC9B,MAAM,uBAAuB,GAAG,IAAI;AACpC,MAAM,mBAAmB,GAAG,GAAG;AAC/B,MAAM,qBAAqB,GAAG,EAAE;AAChC,MAAM,qBAAqB,GAAG,CAAC;AAC/B,MAAM,kBAAkB,GAAG,GAAG;AAC9B,MAAM,UAAU,GAAG,+CAA+C;AAClE,MAAM,kBAAkB,GAAG,6CAA6C;AAExE,SAAS,WAAW,CAAC,CAAS,EAAA;AAC7B,IAAA,OAAO,CAAC,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC;AACjC;MASa,eAAe,CAAA;IACV,aAAa,GAAG,MAAM,CAAC,YAAY,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;IACxD,UAAU,GAAG,MAAM,CAAC,SAAS,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;AAClD,IAAA,QAAQ,GAA4B,MAAM,CAAC,UAAU,CAAC;AACtD,IAAA,SAAS,GAAG,MAAM,CAAC,QAAQ,CAAC;AAC5B,IAAA,WAAW,GAAG,MAAM,CAAC,UAAU,CAAC;IACzC,UAAU,GAAG,CAAC,CAAC;AAEvB,IAAA,WAAA,GAAA;AACC,QAAA,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC,MAAM,IAAI,CAAC,QAAQ,EAAE,CAAC;QACjD,MAAM,CAAC,MAAK;YACX,MAAM,KAAK,GAAG,IAAI,CAAC,aAAa,EAAE,KAAK,EAAE;YACzC,SAAS,CAAC,MAAK;AACd,gBAAA,IAAI,KAAK,KAAK,MAAM,EAAE;AACrB,oBAAA,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE;gBAC5B;AAAO,qBAAA,IAAI,KAAK,KAAK,QAAQ,EAAE;AAC9B,oBAAA,IAAI,CAAC,SAAS,GAAG,IAAI;gBACtB;AACD,YAAA,CAAC,CAAC;AACH,QAAA,CAAC,CAAC;IACH;IAEQ,SAAS,GAAuB,IAAI;IACpC,WAAW,GAAuB,IAAI;IACtC,UAAU,GAAwC,QAAQ;IAC1D,uBAAuB,GAAG,CAAC;IAE3B,cAAc,GAAG,CAAC;IAClB,cAAc,GAAG,CAAC;IAClB,aAAa,GAAG,CAAC;IACjB,YAAY,GAAG,EAAE;IACjB,WAAW,GAAG,KAAK;IACnB,gBAAgB,GAAG,KAAK;IACxB,mBAAmB,GAAG,KAAK;IAE3B,SAAS,GAAkB,IAAI;IAC/B,sBAAsB,GAAkB,IAAI;IAC5C,cAAc,GAAkB,IAAI;AAE5B,IAAA,cAAc,GAAG,KAAK,CAAS,uBAAuB,qFAAC;AAEvE,IAAA,IAAY,WAAW,GAAA;QACtB,OAAO,IAAI,CAAC,UAAU,KAAK,QAAQ,IAAI,IAAI,CAAC,UAAU,KAAK,KAAK;IACjE;AAEA,IAAA,IAAY,WAAW,GAAA;QACtB,OAAO,IAAI,CAAC,UAAU,KAAK,QAAQ,IAAI,IAAI,CAAC,UAAU,KAAK,OAAO;IACnE;AAEA,IAAA,IAAY,oBAAoB,GAAA;AAC/B,QAAA,OAAO,IAAI,CAAC,WAAW,GAAG,CAAC,GAAG,CAAC,CAAC;IACjC;AAEA,IAAA,IAAY,eAAe,GAAA;AAC1B,QAAA,OAAO,IAAI,CAAC,YAAY,KAAK,OAAO,GAAG,qBAAqB,GAAG,qBAAqB;IACrF;AAEU,IAAA,cAAc,CAAC,KAAmB,EAAA;AAC3C,QAAA,IAAI,CAAC,IAAI,CAAC,aAAa,IAAI,CAAC,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,WAAW;YAAE;QAEjE,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC,cAAc,EAAE;AAClD,QAAA,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,OAAO,CAAC,8BAA8B,CAAC;QACpF,IAAI,CAAC,IAAI,CAAC,SAAS;YAAE;AAErB,QAAA,IAAI,CAAC,YAAY,GAAG,KAAK,CAAC,WAAW;AACrC,QAAA,IAAI,CAAC,cAAc,GAAG,KAAK,CAAC,KAAK;AACjC,QAAA,IAAI,CAAC,cAAc,GAAG,KAAK,CAAC,KAAK;AACjC,QAAA,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,WAAW,GAAG,KAAK,CAAC,KAAK,GAAG,KAAK,CAAC,KAAK;AACjE,QAAA,IAAI,CAAC,WAAW,GAAG,IAAI;AACvB,QAAA,IAAI,CAAC,gBAAgB,GAAG,KAAK;AAC7B,QAAA,IAAI,CAAC,mBAAmB,GAAG,KAAK;AAChC,QAAA,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,GAAG,EAAE;QAEhC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,UAAU,GAAG,MAAM;QAExC,IAAI,CAAC,IAAI,CAAC,uBAAuB,CAAC,KAAK,CAAC,MAAqB,CAAC,EAAE;YAC/D,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,WAAW,GAAG,MAAM;QAC1C;QAEA,MAAM,cAAc,GAAG,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,6BAA6B,CAAC;QAC5E,IAAI,CAAC,WAAW,GAAG,cAAc,EAAE,aAAa,CAAC,uBAAuB,CAAuB;AAC/F,QAAA,IAAI,IAAI,CAAC,WAAW,EAAE;AACrB,YAAA,IAAI,CAAC,uBAAuB,GAAG,UAAU,CAAC,gBAAgB,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC;QAC3F;AAEA,QAAA,IAAI,CAAC,UAAU,GAAG,KAAK,CAAC,SAAS;AAEjC,QAAA,IAAI,CAAC,SAAS,CAAC,gBAAgB,CAAC,aAAa,EAAE,IAAI,CAAC,cAAc,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC;AACvF,QAAA,IAAI,CAAC,SAAS,CAAC,gBAAgB,CAAC,WAAW,EAAE,IAAI,CAAC,YAAY,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;AAC/E,QAAA,IAAI,CAAC,SAAS,CAAC,gBAAgB,CAAC,eAAe,EAAE,IAAI,CAAC,gBAAgB,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;IACxF;AAEiB,IAAA,cAAc,GAAG,CAAC,CAAe,KAAI;QACrD,IAAI,CAAC,IAAI,CAAC,WAAW,IAAI,CAAC,IAAI,CAAC,SAAS;YAAE;AAE1C,QAAA,MAAM,QAAQ,GAAG,CAAC,CAAC,KAAK;AACxB,QAAA,MAAM,QAAQ,GAAG,CAAC,CAAC,KAAK;AACxB,QAAA,MAAM,MAAM,GAAG,QAAQ,GAAG,IAAI,CAAC,cAAc;AAC7C,QAAA,MAAM,MAAM,GAAG,QAAQ,GAAG,IAAI,CAAC,cAAc;AAE7C,QAAA,IAAI,CAAC,IAAI,CAAC,mBAAmB,EAAE;YAC9B,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC;YAC7B,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC;AAC7B,YAAA,IAAI,IAAI,CAAC,WAAW,EAAE;AACrB,gBAAA,IAAI,IAAI,GAAG,IAAI,CAAC,eAAe,EAAE;AAChC,oBAAA,IAAI,IAAI,IAAI,IAAI,CAAC,eAAe,EAAE;AACjC,wBAAA,IAAI,CAAC,cAAc,GAAG,QAAQ;AAC9B,wBAAA,IAAI,CAAC,cAAc,GAAG,QAAQ;oBAC/B;oBACA;gBACD;gBACA,IAAI,IAAI,GAAG,IAAI;oBAAE;YAClB;iBAAO;AACN,gBAAA,IAAI,IAAI,GAAG,IAAI,CAAC,eAAe,EAAE;AAChC,oBAAA,IAAI,IAAI,IAAI,IAAI,CAAC,eAAe,EAAE;AACjC,wBAAA,IAAI,CAAC,cAAc,GAAG,QAAQ;AAC9B,wBAAA,IAAI,CAAC,cAAc,GAAG,QAAQ;oBAC/B;oBACA;gBACD;gBACA,IAAI,IAAI,GAAG,IAAI;oBAAE;YAClB;AACA,YAAA,IAAI,CAAC,mBAAmB,GAAG,IAAI;QAChC;AAEA,QAAA,MAAM,eAAe,GAAG,IAAI,CAAC,WAAW,GAAG,QAAQ,GAAG,QAAQ;AAC9D,QAAA,MAAM,eAAe,GAAG,CAAC,IAAI,CAAC,aAAa,GAAG,eAAe,IAAI,IAAI,CAAC,oBAAoB;AAC1F,QAAA,MAAM,qBAAqB,GAAG,eAAe,GAAG,CAAC;QACjD,MAAM,kBAAkB,GAAG,IAAI,CAAC,GAAG,CAAC,eAAe,CAAC;QAEpD,IAAI,CAAC,IAAI,CAAC,gBAAgB,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,MAAM,IAAI,IAAI,CAAC,QAAQ,CAAC,aAAa,EAAE,qBAAqB,CAAC;YAC9G;AAED,QAAA,IAAI,CAAC,gBAAgB,GAAG,IAAI;AAC5B,QAAA,IAAI;YACH,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,iBAAiB,CAAC,CAAC,CAAC,SAAS,CAAC;QAC3D;AAAE,QAAA,MAAM;;QAER;QACA,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,GAAG,CAAC,eAAe,CAAC;QAE7C,MAAM,SAAS,GAAG,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,SAAS,CAAC,YAAY,GAAG,IAAI,CAAC,SAAS,CAAC,WAAW;QAE7F,MAAM,QAAQ,GAAG,SAAS,GAAG,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,kBAAkB,GAAG,SAAS,EAAE,CAAC,CAAC,GAAG,CAAC;QAEhF,IAAI,qBAAqB,EAAE;AAC1B,YAAA,MAAM,QAAQ,GAAG,WAAW,CAAC,eAAe,CAAC;AAC7C,YAAA,MAAM,cAAc,GAAG,IAAI,CAAC,GAAG,CAAC,QAAQ,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC,oBAAoB;AAC7E,YAAA,MAAM,IAAI,GAAG,IAAI,CAAC,WAAW,GAAG,YAAY,GAAG,YAAY;AAC3D,YAAA,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,SAAS,GAAG,CAAA,EAAG,IAAI,CAAA,CAAA,EAAI,cAAc,CAAA,GAAA,CAAK;AAC/D,YAAA,IAAI,IAAI,CAAC,WAAW,EAAE;gBACrB,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,OAAO,GAAG,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,uBAAuB,GAAG,QAAQ,GAAG,GAAG,EAAE,CAAC,CAAC,CAAC;YACpG;YACA;QACD;QAEA,CAAC,CAAC,cAAc,EAAE;AAElB,QAAA,MAAM,cAAc,GAAG,kBAAkB,GAAG,IAAI,CAAC,oBAAoB;AACrE,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,WAAW,GAAG,YAAY,GAAG,YAAY;AAC3D,QAAA,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,SAAS,GAAG,CAAA,EAAG,IAAI,CAAA,CAAA,EAAI,cAAc,CAAA,GAAA,CAAK;AAE/D,QAAA,IAAI,IAAI,CAAC,WAAW,EAAE;YACrB,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,OAAO,GAAG,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,uBAAuB,GAAG,QAAQ,EAAE,CAAC,CAAC,CAAC;QAC9F;AACD,IAAA,CAAC;AAEgB,IAAA,YAAY,GAAG,CAAC,CAAe,KAAI;QACnD,IAAI,CAAC,IAAI,CAAC,WAAW,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE;YACzC,IAAI,CAAC,QAAQ,EAAE;YACf;QACD;QAEA,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,MAAM,CAAC,eAAe,CAAC;AAEhD,QAAA,MAAM,WAAW,GAAG,IAAI,CAAC,aAAa,EAAE;AAExC,QAAA,IAAI,CAAC,IAAI,CAAC,gBAAgB,IAAI,WAAW,KAAK,IAAI,IAAI,MAAM,CAAC,KAAK,CAAC,WAAW,CAAC,EAAE;AAChF,YAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC;YACvB,IAAI,CAAC,QAAQ,EAAE;YACf;QACD;AAEA,QAAA,MAAM,eAAe,GAAG,IAAI,CAAC,WAAW,GAAG,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,KAAK;AAC5D,QAAA,MAAM,SAAS,GAAG,IAAI,CAAC,aAAa,GAAG,eAAe;AACtD,QAAA,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,IAAI,IAAI,CAAC,cAAc,IAAI,IAAI,CAAC,GAAG,EAAE,CAAC;QAClE,MAAM,QAAQ,GAAG,SAAS,GAAG,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,GAAG,SAAS,GAAG,CAAC;AAEpE,QAAA,IAAI,IAAI,CAAC,WAAW,GAAG,SAAS,GAAG,CAAC,GAAG,SAAS,GAAG,CAAC,EAAE;AACrD,YAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC;YACvB,IAAI,CAAC,QAAQ,EAAE;YACf;QACD;AAEA,QAAA,IAAI,QAAQ,GAAG,kBAAkB,EAAE;YAClC,IAAI,CAAC,gBAAgB,EAAE;YACvB,IAAI,CAAC,QAAQ,EAAE;AACf,YAAA,IAAI,CAAC,aAAa,EAAE,KAAK,EAAE;YAC3B;QACD;QAEA,MAAM,SAAS,GAAG,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,SAAS,CAAC,YAAY,GAAG,IAAI,CAAC,SAAS,CAAC,WAAW;AAC7F,QAAA,IAAI,IAAI,CAAC,GAAG,CAAC,WAAW,CAAC,IAAI,SAAS,GAAG,IAAI,CAAC,cAAc,EAAE,EAAE;YAC/D,IAAI,CAAC,gBAAgB,EAAE;YACvB,IAAI,CAAC,QAAQ,EAAE;AACf,YAAA,IAAI,CAAC,aAAa,EAAE,KAAK,EAAE;YAC3B;QACD;AAEA,QAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC;QACvB,IAAI,CAAC,QAAQ,EAAE;AAChB,IAAA,CAAC;IAEgB,gBAAgB,GAAG,MAAK;AACxC,QAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC;QACvB,IAAI,CAAC,QAAQ,EAAE;AAChB,IAAA,CAAC;IAEO,WAAW,CAAC,EAAe,EAAE,qBAA8B,EAAA;QAClE,IAAI,IAAI,CAAC,UAAU,KAAK,MAAM,IAAI,IAAI,CAAC,UAAU,KAAK,OAAO;AAAE,YAAA,OAAO,IAAI;AAE1E,QAAA,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE;AAEtB,QAAA,IAAI,IAAI,CAAC,SAAS,KAAK,IAAI,IAAI,GAAG,GAAG,IAAI,CAAC,SAAS,GAAG,kBAAkB;AAAE,YAAA,OAAO,KAAK;AAEtF,QAAA,MAAM,gBAAgB,GAAG,IAAI,CAAC,aAAa,EAAE;AAC7C,QAAA,IAAI,IAAI,CAAC,WAAW,GAAG,gBAAgB,GAAG,CAAC,GAAG,gBAAgB,GAAG,CAAC;AAAE,YAAA,OAAO,IAAI;AAE/E,QAAA,IACC,IAAI,CAAC,sBAAsB,KAAK,IAAI;AACpC,YAAA,GAAG,GAAG,IAAI,CAAC,sBAAsB,GAAG,mBAAmB;YACvD,gBAAgB,KAAK,CAAC,EACrB;AACD,YAAA,IAAI,CAAC,sBAAsB,GAAG,GAAG;AACjC,YAAA,OAAO,KAAK;QACb;QAEA,IAAI,qBAAqB,EAAE;AAC1B,YAAA,IAAI,CAAC,sBAAsB,GAAG,GAAG;AACjC,YAAA,OAAO,KAAK;QACb;QAEA,IAAI,OAAO,GAAG,EAAwB;QACtC,OAAO,OAAO,EAAE;YACf,IAAI,OAAO,CAAC,YAAY,GAAG,OAAO,CAAC,YAAY,EAAE;AAChD,gBAAA,IAAI,OAAO,CAAC,SAAS,KAAK,CAAC,EAAE;AAC5B,oBAAA,IAAI,CAAC,sBAAsB,GAAG,GAAG;AACjC,oBAAA,OAAO,KAAK;gBACb;AACA,gBAAA,IAAI,OAAO,CAAC,YAAY,CAAC,MAAM,CAAC,KAAK,QAAQ;AAAE,oBAAA,OAAO,IAAI;YAC3D;AACA,YAAA,OAAO,GAAG,OAAO,CAAC,aAAa;QAChC;AAEA,QAAA,OAAO,IAAI;IACZ;IAEQ,aAAa,GAAA;QACpB,IAAI,CAAC,IAAI,CAAC,SAAS;AAAE,YAAA,OAAO,CAAC;QAC7B,MAAM,KAAK,GAAG,gBAAgB,CAAC,IAAI,CAAC,SAAS,CAAC;QAC9C,MAAM,SAAS,GAAG,KAAK,CAAC,SAAS,IAAK,KAAa,CAAC,eAAe;AACnE,QAAA,IAAI,CAAC,SAAS,IAAI,SAAS,KAAK,MAAM;AAAE,YAAA,OAAO,CAAC;QAChD,IAAI,GAAG,GAAG,SAAS,CAAC,KAAK,CAAC,oBAAoB,CAAC;QAC/C,IAAI,GAAG,EAAE;YACR,OAAO,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,WAAW,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC;QAClE;AACA,QAAA,GAAG,GAAG,SAAS,CAAC,KAAK,CAAC,kBAAkB,CAAC;QACzC,IAAI,GAAG,EAAE;YACR,OAAO,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,WAAW,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;QAChE;AACA,QAAA,OAAO,CAAC;IACT;IAEQ,YAAY,CAAC,OAAO,GAAG,IAAI,EAAA;AAClC,QAAA,IAAI,IAAI,CAAC,SAAS,EAAE;AACnB,YAAA,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,UAAU,GAAG,OAAO,GAAG,UAAU,GAAG,MAAM;YAC/D,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,SAAS,GAAG,EAAE;QACpC;AACA,QAAA,IAAI,IAAI,CAAC,WAAW,EAAE;AACrB,YAAA,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,UAAU,GAAG,OAAO,GAAG,kBAAkB,GAAG,MAAM;AACzE,YAAA,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,OAAO,GAAG,MAAM,CAAC,IAAI,CAAC,uBAAuB,CAAC;QACtE;QACA,UAAU,CAAC,MAAK;YACf,IAAI,IAAI,CAAC,SAAS;gBAAE,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,UAAU,GAAG,EAAE;YACxD,IAAI,IAAI,CAAC,WAAW;gBAAE,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,UAAU,GAAG,EAAE;QAC7D,CAAC,EAAE,GAAG,CAAC;IACR;IAEQ,gBAAgB,GAAA;QACvB,IAAI,CAAC,IAAI,CAAC,SAAS;YAAE;QACrB,MAAM,SAAS,GAAG,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,SAAS,CAAC,YAAY,GAAG,IAAI,CAAC,SAAS,CAAC,WAAW;AAC7F,QAAA,MAAM,WAAW,GAAG,IAAI,CAAC,WAAW,GAAG,SAAS,GAAG,CAAC,SAAS;AAC7D,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,WAAW,GAAG,YAAY,GAAG,YAAY;QAC3D,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,UAAU,GAAG,+CAA+C;AACjF,QAAA,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,SAAS,GAAG,CAAA,EAAG,IAAI,CAAA,CAAA,EAAI,WAAW,CAAA,GAAA,CAAK;QAC5D,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,SAAS,GAAG,MAAM;AACvC,QAAA,IAAI,IAAI,CAAC,WAAW,EAAE;YACrB,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,UAAU,GAAG,6CAA6C;YACjF,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,OAAO,GAAG,GAAG;QACrC;IACD;IAEQ,QAAQ,GAAA;AACf,QAAA,IAAI,CAAC,WAAW,GAAG,KAAK;AACxB,QAAA,IAAI,CAAC,gBAAgB,GAAG,KAAK;AAC7B,QAAA,IAAI,IAAI,CAAC,SAAS,EAAE;YACnB,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,WAAW,GAAG,EAAE;QACtC;AACA,QAAA,IAAI,IAAI,CAAC,UAAU,KAAK,CAAC,CAAC,EAAE;AAC3B,YAAA,IAAI;gBACH,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,qBAAqB,CAAC,IAAI,CAAC,UAAU,CAAC;YACnE;AAAE,YAAA,MAAM;;YAER;AACA,YAAA,IAAI,CAAC,UAAU,GAAG,CAAC,CAAC;QACrB;QACA,IAAI,CAAC,SAAS,CAAC,mBAAmB,CAAC,aAAa,EAAE,IAAI,CAAC,cAAc,CAAC;IACvE;AAEQ,IAAA,uBAAuB,CAAC,OAA2B,EAAA;AAC1D,QAAA,IAAI,CAAC,OAAO;AAAE,YAAA,OAAO,IAAI;AACzB,QAAA,MAAM,UAAU,GAAG,IAAI,CAAC,WAAW,GAAG,YAAY,GAAG,YAAY;AACjE,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,WAAW,GAAG,cAAc,GAAG,aAAa;AAClE,QAAA,MAAM,UAAU,GAAG,IAAI,CAAC,WAAW,GAAG,cAAc,GAAG,aAAa;AACpE,QAAA,IAAI,EAAE,GAAuB,OAAO,CAAC,aAAa;QAClD,OAAO,EAAE,EAAE;YACV,MAAM,QAAQ,GAAG,gBAAgB,CAAC,EAAE,CAAC,CAAC,UAAiB,CAAC;YACxD,IAAI,CAAC,QAAQ,KAAK,MAAM,IAAI,QAAQ,KAAK,QAAQ,KAAM,EAAU,CAAC,QAAQ,CAAC,GAAI,EAAU,CAAC,UAAU,CAAC,EAAE;AACtG,gBAAA,OAAO,EAAE;YACV;AACA,YAAA,EAAE,GAAG,EAAE,CAAC,aAAa;QACtB;AACA,QAAA,OAAO,IAAI;IACZ;2HA7UY,eAAe,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;+GAAf,eAAe,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,mBAAA,EAAA,MAAA,EAAA,EAAA,cAAA,EAAA,EAAA,iBAAA,EAAA,gBAAA,EAAA,UAAA,EAAA,gBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,MAAA,EAAA,cAAA,EAAA,EAAA,SAAA,EAAA,EAAA,aAAA,EAAA,wBAAA,EAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA;;4FAAf,eAAe,EAAA,UAAA,EAAA,CAAA;kBAP3B,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,QAAQ,EAAE,mBAAmB;AAC7B,oBAAA,IAAI,EAAE;AACL,wBAAA,IAAI,EAAE,cAAc;AACpB,wBAAA,eAAe,EAAE,wBAAwB;AACzC,qBAAA;AACD,iBAAA;;;AChBK,MAAO,gBAAiB,SAAQ,gBAAgB,CAAA;2HAAzC,gBAAgB,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;+GAAhB,gBAAgB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,uCAAA,EAAA,SAAA,EAFjB,CAAC,kCAAkC,EAAC,MAAM,gBAAgB,EAAC,CAAC,EAAA,eAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA;;4FAE3D,gBAAgB,EAAA,UAAA,EAAA,CAAA;kBAJ5B,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,QAAQ,EAAE,uCAAuC;oBACjD,SAAS,EAAE,CAAC,kCAAkC,EAAC,MAAK,gBAAiB,EAAC,CAAC;AACvE,iBAAA;;;MCAY,cAAc,CAAA;2HAAd,cAAc,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;+GAAd,cAAc,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,cAAA,EAAA,CAAA,EAAA,SAAA,EAAA,EAAA,CAAA,cAAA,EAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA;;4FAAd,cAAc,EAAA,UAAA,EAAA,CAAA;kBAJ1B,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,QAAQ,EAAE,kBAAkB;oBAC5B,cAAc,EAAE,CAAC,cAAc,CAAC;AAChC,iBAAA;;;ACCK,MAAO,gBAAiB,SAAQ,gBAAgB,CAAA;IACpC,OAAO,GAAG,MAAM,CAAC,SAAS,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;AAEhD,IAAA,SAAS,GAAG,KAAK,CAAkD,SAAS,gFAAC;IAEpF,IAAI,GAAA;AACZ,QAAA,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,EAAE;AAClC,QAAA,IAAI,IAAI,CAAC,OAAO,IAAI,SAAS,EAAE;YAC9B,IAAI,CAAC,OAAO,CAAC,cAAc,CAAC,GAAG,CAAC,SAAS,CAAC;QAC3C;QACA,KAAK,CAAC,IAAI,EAAE;IACb;2HAXY,gBAAgB,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;+GAAhB,gBAAgB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,0BAAA,EAAA,MAAA,EAAA,EAAA,SAAA,EAAA,EAAA,iBAAA,EAAA,WAAA,EAAA,UAAA,EAAA,WAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,eAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA;;4FAAhB,gBAAgB,EAAA,UAAA,EAAA,CAAA;kBAH5B,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,QAAQ,EAAE,0BAA0B;AACpC,iBAAA;;;ACYM,MAAM,gBAAgB,GAAG;IAC/B,SAAS;IACT,gBAAgB;IAChB,gBAAgB;IAChB,cAAc;IACd,gBAAgB;IAChB,cAAc;IACd,oBAAoB;IACpB,eAAe;;;AC1BhB;;AAEG;;;;"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@spartan-ng/brain",
|
|
3
|
-
"version": "0.0.1-alpha.
|
|
3
|
+
"version": "0.0.1-alpha.715",
|
|
4
4
|
"repository": {
|
|
5
5
|
"type": "git",
|
|
6
6
|
"url": "https://github.com/spartan-ng/spartan"
|
|
@@ -71,6 +71,10 @@
|
|
|
71
71
|
"types": "./types/spartan-ng-brain-dialog.d.ts",
|
|
72
72
|
"default": "./fesm2022/spartan-ng-brain-dialog.mjs"
|
|
73
73
|
},
|
|
74
|
+
"./drawer": {
|
|
75
|
+
"types": "./types/spartan-ng-brain-drawer.d.ts",
|
|
76
|
+
"default": "./fesm2022/spartan-ng-brain-drawer.mjs"
|
|
77
|
+
},
|
|
74
78
|
"./field": {
|
|
75
79
|
"types": "./types/spartan-ng-brain-field.d.ts",
|
|
76
80
|
"default": "./fesm2022/spartan-ng-brain-field.mjs"
|
|
@@ -186,6 +186,44 @@ declare function provideNativeDateAdapter(): ClassProvider;
|
|
|
186
186
|
*/
|
|
187
187
|
declare function provideUtcDateAdapter(): ClassProvider;
|
|
188
188
|
|
|
189
|
+
declare class JalaliDate {
|
|
190
|
+
readonly year: number;
|
|
191
|
+
readonly month: number;
|
|
192
|
+
readonly day: number;
|
|
193
|
+
constructor(year: number, month: number, day: number);
|
|
194
|
+
valueOf(): number;
|
|
195
|
+
toString(): string;
|
|
196
|
+
}
|
|
197
|
+
|
|
198
|
+
declare class BrnJalaliDateAdapter implements BrnDateAdapter<JalaliDate> {
|
|
199
|
+
create({ year, month, day }: BrnDateUnits): JalaliDate;
|
|
200
|
+
now(): JalaliDate;
|
|
201
|
+
set(date: JalaliDate, values: BrnDateUnits): JalaliDate;
|
|
202
|
+
add(date: JalaliDate, duration: BrnDuration): JalaliDate;
|
|
203
|
+
subtract(date: JalaliDate, duration: BrnDuration): JalaliDate;
|
|
204
|
+
compare(a: JalaliDate, b: JalaliDate): number;
|
|
205
|
+
isEqual(a: JalaliDate, b: JalaliDate): boolean;
|
|
206
|
+
isBefore(a: JalaliDate, b: JalaliDate): boolean;
|
|
207
|
+
isAfter(a: JalaliDate, b: JalaliDate): boolean;
|
|
208
|
+
isSameDay(a: JalaliDate, b: JalaliDate): boolean;
|
|
209
|
+
isSameMonth(a: JalaliDate, b: JalaliDate): boolean;
|
|
210
|
+
isSameYear(a: JalaliDate, b: JalaliDate): boolean;
|
|
211
|
+
getYear(date: JalaliDate): number;
|
|
212
|
+
getMonth(date: JalaliDate): number;
|
|
213
|
+
getDate(date: JalaliDate): number;
|
|
214
|
+
getDay(date: JalaliDate): number;
|
|
215
|
+
getHours(_date: JalaliDate): number;
|
|
216
|
+
getMinutes(_date: JalaliDate): number;
|
|
217
|
+
getSeconds(_date: JalaliDate): number;
|
|
218
|
+
getMilliseconds(_date: JalaliDate): number;
|
|
219
|
+
getTime(date: JalaliDate): number;
|
|
220
|
+
startOfMonth(date: JalaliDate): JalaliDate;
|
|
221
|
+
endOfMonth(date: JalaliDate): JalaliDate;
|
|
222
|
+
startOfDay(date: JalaliDate): JalaliDate;
|
|
223
|
+
endOfDay(date: JalaliDate): JalaliDate;
|
|
224
|
+
private _constrain;
|
|
225
|
+
}
|
|
226
|
+
|
|
189
227
|
declare class BrnNativeDateAdapter implements BrnDateAdapter<Date> {
|
|
190
228
|
/**
|
|
191
229
|
* Create a new date time object.
|
|
@@ -289,6 +327,18 @@ declare class BrnNativeDateAdapter implements BrnDateAdapter<Date> {
|
|
|
289
327
|
getTime(date: Date): number;
|
|
290
328
|
}
|
|
291
329
|
|
|
330
|
+
declare const PersianDate: {
|
|
331
|
+
gregorianDaysInMonth: number[];
|
|
332
|
+
jalaliDaysInMonth: number[];
|
|
333
|
+
jalaliToGregorian: (jalaliYear: number, jalaliMonth: number, jalaliDay: number) => [number, number, number];
|
|
334
|
+
gregorianToJalali: (gregorianYear: number, gregorianMonth: number, gregorianDay: number) => [number, number, number];
|
|
335
|
+
isLeapJalaliYear: (year: number) => boolean;
|
|
336
|
+
getDaysInMonth: (year: number, month: number) => number;
|
|
337
|
+
getDayOfWeek: (jalaliYear: number, jalaliMonth: number, jalaliDay: number) => number;
|
|
338
|
+
getDaysInYear: (year: number) => number;
|
|
339
|
+
isValidDate: (year: number, month: number, day: number) => boolean;
|
|
340
|
+
};
|
|
341
|
+
|
|
292
342
|
declare class BrnUtcDateAdapter implements BrnDateAdapter<Date> {
|
|
293
343
|
create({ day, hour, minute, month, second, year, millisecond }: BrnDateUnits): Date;
|
|
294
344
|
now(): Date;
|
|
@@ -317,5 +367,5 @@ declare class BrnUtcDateAdapter implements BrnDateAdapter<Date> {
|
|
|
317
367
|
endOfDay(date: Date): Date;
|
|
318
368
|
}
|
|
319
369
|
|
|
320
|
-
export { BrnDateAdapterToken, BrnNativeDateAdapter, BrnUtcDateAdapter, injectDateAdapter, provideDateAdapter, provideNativeDateAdapter, provideUtcDateAdapter };
|
|
370
|
+
export { BrnDateAdapterToken, BrnJalaliDateAdapter, BrnNativeDateAdapter, BrnUtcDateAdapter, JalaliDate, PersianDate, injectDateAdapter, provideDateAdapter, provideNativeDateAdapter, provideUtcDateAdapter };
|
|
321
371
|
export type { BrnDateAdapter, BrnDateUnits, BrnDuration };
|
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
import * as i0 from '@angular/core';
|
|
2
|
+
import * as i1 from '@spartan-ng/brain/dialog';
|
|
3
|
+
import { BrnDialog, BrnDialogClose, BrnDialogContent, BrnDialogOverlay, BrnDialogTrigger } from '@spartan-ng/brain/dialog';
|
|
4
|
+
import { ExposesSide } from '@spartan-ng/brain/core';
|
|
5
|
+
|
|
6
|
+
declare class BrnDrawer extends BrnDialog {
|
|
7
|
+
readonly direction: i0.InputSignal<"bottom" | "top" | "left" | "right">;
|
|
8
|
+
readonly directionState: i0.WritableSignal<"bottom" | "top" | "left" | "right">;
|
|
9
|
+
constructor();
|
|
10
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<BrnDrawer, never>;
|
|
11
|
+
static ɵdir: i0.ɵɵDirectiveDeclaration<BrnDrawer, "[brnDrawer],brn-drawer", ["brnDrawer"], { "direction": { "alias": "direction"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
declare class BrnDrawerClose extends BrnDialogClose {
|
|
15
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<BrnDrawerClose, never>;
|
|
16
|
+
static ɵdir: i0.ɵɵDirectiveDeclaration<BrnDrawerClose, "button[brnDrawerClose]", never, {}, {}, never, never, true, never>;
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
declare class BrnDrawerContent<T> extends BrnDialogContent<T> implements ExposesSide {
|
|
20
|
+
readonly side: i0.WritableSignal<"bottom" | "top" | "left" | "right">;
|
|
21
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<BrnDrawerContent<any>, never>;
|
|
22
|
+
static ɵdir: i0.ɵɵDirectiveDeclaration<BrnDrawerContent<any>, "[brnDrawerContent]", never, {}, {}, never, never, true, never>;
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
declare class BrnDrawerDescription {
|
|
26
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<BrnDrawerDescription, never>;
|
|
27
|
+
static ɵdir: i0.ɵɵDirectiveDeclaration<BrnDrawerDescription, "[brnDrawerDescription]", never, {}, {}, never, never, true, [{ directive: typeof i1.BrnDialogDescription; inputs: {}; outputs: {}; }]>;
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
declare class BrnDrawerHandle {
|
|
31
|
+
private readonly _brnDialogRef;
|
|
32
|
+
private readonly _brnDrawer;
|
|
33
|
+
private readonly _element;
|
|
34
|
+
private readonly _document;
|
|
35
|
+
private readonly _destroyRef;
|
|
36
|
+
private _pointerId;
|
|
37
|
+
constructor();
|
|
38
|
+
private _drawerEl;
|
|
39
|
+
private _backdropEl;
|
|
40
|
+
private _direction;
|
|
41
|
+
private _initialBackdropOpacity;
|
|
42
|
+
private _pointerStartX;
|
|
43
|
+
private _pointerStartY;
|
|
44
|
+
private _pointerStart;
|
|
45
|
+
private _pointerType;
|
|
46
|
+
private _isDragging;
|
|
47
|
+
private _isAllowedToDrag;
|
|
48
|
+
private _wasBeyondThreshold;
|
|
49
|
+
private _openTime;
|
|
50
|
+
private _lastTimeDragPrevented;
|
|
51
|
+
private _dragStartTime;
|
|
52
|
+
readonly closeThreshold: i0.InputSignal<number>;
|
|
53
|
+
private get _isVertical();
|
|
54
|
+
private get _isPositive();
|
|
55
|
+
private get _dimensionMultiplier();
|
|
56
|
+
private get _swipeThreshold();
|
|
57
|
+
protected _onPointerDown(event: PointerEvent): void;
|
|
58
|
+
private readonly _onPointerMove;
|
|
59
|
+
private readonly _onPointerUp;
|
|
60
|
+
private readonly _onPointerCancel;
|
|
61
|
+
private _shouldDrag;
|
|
62
|
+
private _getTranslate;
|
|
63
|
+
private _resetDrawer;
|
|
64
|
+
private _animateAndClose;
|
|
65
|
+
private _cleanup;
|
|
66
|
+
private _findScrollableAncestor;
|
|
67
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<BrnDrawerHandle, never>;
|
|
68
|
+
static ɵdir: i0.ɵɵDirectiveDeclaration<BrnDrawerHandle, "[brnDrawerHandle]", never, { "closeThreshold": { "alias": "closeThreshold"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
declare class BrnDrawerOverlay extends BrnDialogOverlay {
|
|
72
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<BrnDrawerOverlay, never>;
|
|
73
|
+
static ɵdir: i0.ɵɵDirectiveDeclaration<BrnDrawerOverlay, "[brnDrawerOverlay],brn-drawer-overlay", never, {}, {}, never, never, true, never>;
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
declare class BrnDrawerTitle {
|
|
77
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<BrnDrawerTitle, never>;
|
|
78
|
+
static ɵdir: i0.ɵɵDirectiveDeclaration<BrnDrawerTitle, "[brnDrawerTitle]", never, {}, {}, never, never, true, [{ directive: typeof i1.BrnDialogTitle; inputs: {}; outputs: {}; }]>;
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
declare class BrnDrawerTrigger extends BrnDialogTrigger {
|
|
82
|
+
private readonly _drawer;
|
|
83
|
+
readonly direction: i0.InputSignal<"bottom" | "top" | "left" | "right" | undefined>;
|
|
84
|
+
open(): void;
|
|
85
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<BrnDrawerTrigger, never>;
|
|
86
|
+
static ɵdir: i0.ɵɵDirectiveDeclaration<BrnDrawerTrigger, "button[brnDrawerTrigger]", never, { "direction": { "alias": "direction"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
declare const BrnDrawerImports: readonly [typeof BrnDrawer, typeof BrnDrawerOverlay, typeof BrnDrawerTrigger, typeof BrnDrawerClose, typeof BrnDrawerContent, typeof BrnDrawerTitle, typeof BrnDrawerDescription, typeof BrnDrawerHandle];
|
|
90
|
+
|
|
91
|
+
export { BrnDrawer, BrnDrawerClose, BrnDrawerContent, BrnDrawerDescription, BrnDrawerHandle, BrnDrawerImports, BrnDrawerOverlay, BrnDrawerTitle, BrnDrawerTrigger };
|