osl-base-extended 4.0.0 → 5.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
|
@@ -20,10 +20,10 @@ import * as i6 from '@angular/material/tooltip';
|
|
|
20
20
|
import { MatTooltipModule } from '@angular/material/tooltip';
|
|
21
21
|
import * as i5 from '@angular/material/datepicker';
|
|
22
22
|
import { MatDatepickerModule } from '@angular/material/datepicker';
|
|
23
|
-
import { MatInputModule } from '@angular/material/input';
|
|
24
23
|
import { MAT_DATE_FORMATS } from '@angular/material/core';
|
|
25
24
|
import * as i4 from '@ngxmc/datetime-picker';
|
|
26
25
|
import { NgxMatDatetimepicker, NgxMatDatepickerInput } from '@ngxmc/datetime-picker';
|
|
26
|
+
import { MatInputModule } from '@angular/material/input';
|
|
27
27
|
import { debounceTime as debounceTime$1, distinctUntilChanged as distinctUntilChanged$1, switchMap, tap } from 'rxjs/operators';
|
|
28
28
|
import { MatMenuModule } from '@angular/material/menu';
|
|
29
29
|
import { ScrollingModule } from '@angular/cdk/scrolling';
|
|
@@ -2246,43 +2246,481 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImpor
|
|
|
2246
2246
|
type: Output
|
|
2247
2247
|
}] } });
|
|
2248
2248
|
|
|
2249
|
-
|
|
2250
|
-
|
|
2251
|
-
|
|
2252
|
-
|
|
2253
|
-
|
|
2254
|
-
|
|
2255
|
-
|
|
2256
|
-
|
|
2257
|
-
|
|
2258
|
-
|
|
2259
|
-
|
|
2260
|
-
|
|
2261
|
-
|
|
2262
|
-
|
|
2263
|
-
|
|
2264
|
-
|
|
2265
|
-
|
|
2266
|
-
|
|
2267
|
-
|
|
2268
|
-
|
|
2269
|
-
|
|
2270
|
-
|
|
2271
|
-
|
|
2249
|
+
// ─── Date Utilities ───────────────────────────────────────────────────────────
|
|
2250
|
+
const MONTH_NAMES_SHORT = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'];
|
|
2251
|
+
const MONTH_NAMES_FULL = ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'];
|
|
2252
|
+
const DAY_NAMES_SHORT = ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'];
|
|
2253
|
+
const DAY_NAMES_FULL = ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'];
|
|
2254
|
+
function pad(n) {
|
|
2255
|
+
return String(n).padStart(2, '0');
|
|
2256
|
+
}
|
|
2257
|
+
/** Returns the current date and time. */
|
|
2258
|
+
function now() {
|
|
2259
|
+
return new Date();
|
|
2260
|
+
}
|
|
2261
|
+
/** Returns today's date with time set to midnight. */
|
|
2262
|
+
function today() {
|
|
2263
|
+
return startOfDay(new Date());
|
|
2264
|
+
}
|
|
2265
|
+
/** Returns true if the value is a valid Date object. */
|
|
2266
|
+
function isValidDate$1(value) {
|
|
2267
|
+
return value instanceof Date && !isNaN(value.getTime());
|
|
2268
|
+
}
|
|
2269
|
+
/**
|
|
2270
|
+
* Formats a Date using a pattern string.
|
|
2271
|
+
* Tokens: YYYY, YY, MM, M, DD, D, HH, H, mm, m, ss, s,
|
|
2272
|
+
* MMM (short month), MMMM (full month),
|
|
2273
|
+
* ddd (short day), dddd (full day).
|
|
2274
|
+
*/
|
|
2275
|
+
function formatDate(date, pattern) {
|
|
2276
|
+
const d = new Date(date);
|
|
2277
|
+
if (!isValidDate$1(d))
|
|
2278
|
+
return '';
|
|
2279
|
+
const year = d.getFullYear();
|
|
2280
|
+
const month = d.getMonth();
|
|
2281
|
+
const day = d.getDate();
|
|
2282
|
+
const hours = d.getHours();
|
|
2283
|
+
const mins = d.getMinutes();
|
|
2284
|
+
const secs = d.getSeconds();
|
|
2285
|
+
const dayOfWeek = d.getDay();
|
|
2286
|
+
return pattern
|
|
2287
|
+
.replace('YYYY', String(year))
|
|
2288
|
+
.replace('YY', String(year).slice(-2))
|
|
2289
|
+
.replace('MMMM', MONTH_NAMES_FULL[month])
|
|
2290
|
+
.replace('MMM', MONTH_NAMES_SHORT[month])
|
|
2291
|
+
.replace('MM', pad(month + 1))
|
|
2292
|
+
.replace('M', String(month + 1))
|
|
2293
|
+
.replace('dddd', DAY_NAMES_FULL[dayOfWeek])
|
|
2294
|
+
.replace('ddd', DAY_NAMES_SHORT[dayOfWeek])
|
|
2295
|
+
.replace('DD', pad(day))
|
|
2296
|
+
.replace('D', String(day))
|
|
2297
|
+
.replace('HH', pad(hours))
|
|
2298
|
+
.replace('H', String(hours))
|
|
2299
|
+
.replace('mm', pad(mins))
|
|
2300
|
+
.replace('m', String(mins))
|
|
2301
|
+
.replace('ss', pad(secs))
|
|
2302
|
+
.replace('s', String(secs));
|
|
2303
|
+
}
|
|
2304
|
+
/** Returns date as `YYYY-MM-DD`. */
|
|
2305
|
+
function toDateOnly(date) {
|
|
2306
|
+
return formatDate(date, 'YYYY-MM-DD');
|
|
2307
|
+
}
|
|
2308
|
+
/** Returns the ISO 8601 string for a date. */
|
|
2309
|
+
function toISOString(date) {
|
|
2310
|
+
return date.toISOString();
|
|
2311
|
+
}
|
|
2312
|
+
/** Returns a new date with `days` added. */
|
|
2313
|
+
function addDays(date, days) {
|
|
2314
|
+
const result = new Date(date);
|
|
2315
|
+
result.setDate(result.getDate() + days);
|
|
2316
|
+
return result;
|
|
2317
|
+
}
|
|
2318
|
+
/** Returns a new date with `months` added. */
|
|
2319
|
+
function addMonths(date, months) {
|
|
2320
|
+
const result = new Date(date);
|
|
2321
|
+
result.setMonth(result.getMonth() + months);
|
|
2322
|
+
return result;
|
|
2323
|
+
}
|
|
2324
|
+
/** Returns a new date with `years` added. */
|
|
2325
|
+
function addYears(date, years) {
|
|
2326
|
+
const result = new Date(date);
|
|
2327
|
+
result.setFullYear(result.getFullYear() + years);
|
|
2328
|
+
return result;
|
|
2329
|
+
}
|
|
2330
|
+
/** Returns a new date with `hours` added. */
|
|
2331
|
+
function addHours(date, hours) {
|
|
2332
|
+
return new Date(date.getTime() + hours * 3_600_000);
|
|
2333
|
+
}
|
|
2334
|
+
/** Returns a new date with `minutes` added. */
|
|
2335
|
+
function addMinutes(date, minutes) {
|
|
2336
|
+
return new Date(date.getTime() + minutes * 60_000);
|
|
2337
|
+
}
|
|
2338
|
+
/** Returns a new date with `days` subtracted. */
|
|
2339
|
+
function subtractDays(date, days) {
|
|
2340
|
+
return addDays(date, -days);
|
|
2341
|
+
}
|
|
2342
|
+
/** Returns a new date with `months` subtracted. */
|
|
2343
|
+
function subtractMonths(date, months) {
|
|
2344
|
+
return addMonths(date, -months);
|
|
2345
|
+
}
|
|
2346
|
+
/** Returns a new date with `years` subtracted. */
|
|
2347
|
+
function subtractYears(date, years) {
|
|
2348
|
+
return addYears(date, -years);
|
|
2349
|
+
}
|
|
2350
|
+
/** Returns the absolute difference in whole days between two dates. */
|
|
2351
|
+
function diffInDays(date1, date2) {
|
|
2352
|
+
return Math.abs(Math.floor((date1.getTime() - date2.getTime()) / 86_400_000));
|
|
2353
|
+
}
|
|
2354
|
+
/** Returns the absolute difference in whole months between two dates. */
|
|
2355
|
+
function diffInMonths(date1, date2) {
|
|
2356
|
+
return Math.abs((date1.getFullYear() - date2.getFullYear()) * 12 +
|
|
2357
|
+
(date1.getMonth() - date2.getMonth()));
|
|
2358
|
+
}
|
|
2359
|
+
/** Returns the absolute difference in whole years between two dates. */
|
|
2360
|
+
function diffInYears(date1, date2) {
|
|
2361
|
+
return Math.abs(date1.getFullYear() - date2.getFullYear());
|
|
2362
|
+
}
|
|
2363
|
+
/** Returns the difference in minutes between two dates (date1 - date2). */
|
|
2364
|
+
function diffInMinutes(date1, date2) {
|
|
2365
|
+
return Math.floor((date1.getTime() - date2.getTime()) / 60_000);
|
|
2366
|
+
}
|
|
2367
|
+
/** Returns true if date1 is strictly before date2. */
|
|
2368
|
+
function isBefore(date1, date2) {
|
|
2369
|
+
return date1.getTime() < date2.getTime();
|
|
2370
|
+
}
|
|
2371
|
+
/** Returns true if date1 is strictly after date2. */
|
|
2372
|
+
function isAfter(date1, date2) {
|
|
2373
|
+
return date1.getTime() > date2.getTime();
|
|
2374
|
+
}
|
|
2375
|
+
/** Returns true if both dates fall on the same calendar day. */
|
|
2376
|
+
function isSameDay(date1, date2) {
|
|
2377
|
+
return (date1.getFullYear() === date2.getFullYear() &&
|
|
2378
|
+
date1.getMonth() === date2.getMonth() &&
|
|
2379
|
+
date1.getDate() === date2.getDate());
|
|
2380
|
+
}
|
|
2381
|
+
/** Returns true if the date falls on a Saturday or Sunday. */
|
|
2382
|
+
function isWeekend(date) {
|
|
2383
|
+
return date.getDay() === 0 || date.getDay() === 6;
|
|
2384
|
+
}
|
|
2385
|
+
/** Returns true if the date is today. */
|
|
2386
|
+
function isToday(date) {
|
|
2387
|
+
return isSameDay(date, new Date());
|
|
2388
|
+
}
|
|
2389
|
+
/** Returns true if the date falls in the past (before now). */
|
|
2390
|
+
function isPast(date) {
|
|
2391
|
+
return date.getTime() < Date.now();
|
|
2392
|
+
}
|
|
2393
|
+
/** Returns true if the date falls in the future (after now). */
|
|
2394
|
+
function isFuture(date) {
|
|
2395
|
+
return date.getTime() > Date.now();
|
|
2396
|
+
}
|
|
2397
|
+
/** Returns the date with time set to 00:00:00.000. */
|
|
2398
|
+
function startOfDay(date) {
|
|
2399
|
+
const result = new Date(date);
|
|
2400
|
+
result.setHours(0, 0, 0, 0);
|
|
2401
|
+
return result;
|
|
2402
|
+
}
|
|
2403
|
+
/** Returns the date with time set to 23:59:59.999. */
|
|
2404
|
+
function endOfDay(date) {
|
|
2405
|
+
const result = new Date(date);
|
|
2406
|
+
result.setHours(23, 59, 59, 999);
|
|
2407
|
+
return result;
|
|
2408
|
+
}
|
|
2409
|
+
/** Returns the first day of the month (time 00:00:00.000). */
|
|
2410
|
+
function startOfMonth(date) {
|
|
2411
|
+
return new Date(date.getFullYear(), date.getMonth(), 1);
|
|
2412
|
+
}
|
|
2413
|
+
/** Returns the last day of the month (time 23:59:59.999). */
|
|
2414
|
+
function endOfMonth(date) {
|
|
2415
|
+
const result = new Date(date.getFullYear(), date.getMonth() + 1, 0);
|
|
2416
|
+
result.setHours(23, 59, 59, 999);
|
|
2417
|
+
return result;
|
|
2418
|
+
}
|
|
2419
|
+
/** Returns the first day of the year (Jan 1, 00:00:00.000). */
|
|
2420
|
+
function startOfYear(date) {
|
|
2421
|
+
return new Date(date.getFullYear(), 0, 1);
|
|
2422
|
+
}
|
|
2423
|
+
/** Returns the last day of the year (Dec 31, 23:59:59.999). */
|
|
2424
|
+
function endOfYear(date) {
|
|
2425
|
+
const result = new Date(date.getFullYear(), 11, 31);
|
|
2426
|
+
result.setHours(23, 59, 59, 999);
|
|
2427
|
+
return result;
|
|
2428
|
+
}
|
|
2429
|
+
/** Calculates the age in years from a birth date. */
|
|
2430
|
+
function getAge(birthDate) {
|
|
2431
|
+
const n = new Date();
|
|
2432
|
+
let age = n.getFullYear() - birthDate.getFullYear();
|
|
2433
|
+
const monthDiff = n.getMonth() - birthDate.getMonth();
|
|
2434
|
+
if (monthDiff < 0 || (monthDiff === 0 && n.getDate() < birthDate.getDate()))
|
|
2435
|
+
age--;
|
|
2436
|
+
return age;
|
|
2437
|
+
}
|
|
2438
|
+
/** Returns the number of days in a given month (0-based month). */
|
|
2439
|
+
function daysInMonth(year, month) {
|
|
2440
|
+
return new Date(year, month + 1, 0).getDate();
|
|
2441
|
+
}
|
|
2442
|
+
/** Returns true if the given year is a leap year. */
|
|
2443
|
+
function isLeapYear(year) {
|
|
2444
|
+
return (year % 4 === 0 && year % 100 !== 0) || year % 400 === 0;
|
|
2445
|
+
}
|
|
2446
|
+
/**
|
|
2447
|
+
* Returns a human-friendly relative time string.
|
|
2448
|
+
* @example timeAgo(new Date(Date.now() - 3600_000)) → '1 hour ago'
|
|
2449
|
+
*/
|
|
2450
|
+
function timeAgo(date) {
|
|
2451
|
+
const seconds = Math.floor((Date.now() - date.getTime()) / 1000);
|
|
2452
|
+
const abs = Math.abs(seconds);
|
|
2453
|
+
const future = seconds < 0;
|
|
2454
|
+
const intervals = [
|
|
2455
|
+
[31_536_000, 'year'],
|
|
2456
|
+
[2_592_000, 'month'],
|
|
2457
|
+
[604_800, 'week'],
|
|
2458
|
+
[86_400, 'day'],
|
|
2459
|
+
[3_600, 'hour'],
|
|
2460
|
+
[60, 'minute'],
|
|
2461
|
+
[1, 'second'],
|
|
2462
|
+
];
|
|
2463
|
+
for (const [secs, label] of intervals) {
|
|
2464
|
+
const count = Math.floor(abs / secs);
|
|
2465
|
+
if (count >= 1) {
|
|
2466
|
+
const unit = count === 1 ? label : `${label}s`;
|
|
2467
|
+
return future ? `in ${count} ${unit}` : `${count} ${unit} ago`;
|
|
2272
2468
|
}
|
|
2273
2469
|
}
|
|
2274
|
-
|
|
2275
|
-
this.touched = true;
|
|
2276
|
-
this.model = event;
|
|
2277
|
-
this.modelChange.emit(this.model);
|
|
2278
|
-
this.changeEv.emit(this.model);
|
|
2279
|
-
}
|
|
2280
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: OslCheckbox, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
2281
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.9", type: OslCheckbox, isStandalone: false, selector: "osl-checkbox", inputs: { label: "label", disabled: "disabled", required: "required", model: "model", indeterminate: "indeterminate", skeletonLoading: "skeletonLoading", skeletonTheme: "skeletonTheme" }, outputs: { modelChange: "modelChange", changeEv: "changeEv" }, viewQueries: [{ propertyName: "checkboxEl", first: true, predicate: ["checkboxEl"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<div class=\"d-flex flex-column\">\r\n\r\n <label class=\"checkbox-wrapper\" [oslSkeleton]=\"skeletonLoading\" [oslSkeletonTheme]=\"skeletonTheme\" [class.checkbox-disabled]=\"disabled\" [class.checkbox-invalid]=\"isInvalid\">\r\n <input\r\n #checkboxEl\r\n type=\"checkbox\"\r\n [ngModel]=\"model\"\r\n (ngModelChange)=\"onModelChange($event)\"\r\n [disabled]=\"disabled\"\r\n >\r\n <span class=\"checkbox-label\" [oslSkeleton]=\"skeletonLoading\" [oslSkeletonTheme]=\"skeletonTheme\">\r\n <span class=\"label-text\" [title]=\"label\">{{label}}</span><span class=\"txt-clr-red label-required\">{{required?'*':''}}</span>\r\n </span>\r\n </label>\r\n @if(isInvalid) {\r\n <mat-hint class=\"hint\">{{label}} is Required!</mat-hint>\r\n }\r\n</div>\r\n", styles: [".checkbox-wrapper{display:flex;align-items:center;gap:8px;cursor:pointer;font-size:var(--osl-label-font-size);width:fit-content;max-width:100%}.checkbox-wrapper input[type=checkbox]{width:16px;height:16px;cursor:pointer;accent-color:#333;flex-shrink:0}.checkbox-wrapper .checkbox-label{-webkit-user-select:none;user-select:none;display:flex;align-items:center;overflow:hidden;min-width:0}.checkbox-wrapper.checkbox-disabled{opacity:.6;cursor:not-allowed}.checkbox-wrapper.checkbox-disabled input[type=checkbox]{cursor:not-allowed}.checkbox-wrapper.checkbox-invalid{color:var(--osl-error-color)}.label-text{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;min-width:0}.label-required{flex-shrink:0}.hint{color:var(--osl-error-color);margin-top:2px;font-size:var(--osl-hint-font-size)}.txt-clr-red{color:var(--osl-error-color)}\n"], dependencies: [{ kind: "directive", type: i1$1.CheckboxControlValueAccessor, selector: "input[type=checkbox][formControlName],input[type=checkbox][formControl],input[type=checkbox][ngModel]" }, { kind: "directive", type: i1$1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i2$2.MatHint, selector: "mat-hint", inputs: ["align", "id"] }, { kind: "directive", type: OslSkeletonDirective, selector: "[oslSkeleton]", inputs: ["oslSkeleton", "oslSkeletonType", "oslSkeletonAnimation", "oslSkeletonTheme", "oslSkeletonColor", "oslSkeletonHighlight", "oslSkeletonRadius", "oslSkeletonRows", "oslSkeletonRowGap", "oslSkeletonZIndex", "oslSkeletonDelay", "oslSkeletonDuration", "oslSkeletonMinHeight", "oslSkeletonForceReread", "oslSkeletonCircleSize", "oslSkeletonListItems", "oslSkeletonTableRows", "oslSkeletonTableCols", "oslSkeletonCardLines", "oslSkeletonBgColor"] }] });
|
|
2470
|
+
return 'just now';
|
|
2282
2471
|
}
|
|
2283
|
-
|
|
2284
|
-
|
|
2285
|
-
|
|
2472
|
+
/** Returns the ISO week number (1–53) for the given date. */
|
|
2473
|
+
function getWeekNumber(date) {
|
|
2474
|
+
const d = new Date(Date.UTC(date.getFullYear(), date.getMonth(), date.getDate()));
|
|
2475
|
+
d.setUTCDate(d.getUTCDate() + 4 - (d.getUTCDay() || 7));
|
|
2476
|
+
const yearStart = new Date(Date.UTC(d.getUTCFullYear(), 0, 1));
|
|
2477
|
+
return Math.ceil((((d.getTime() - yearStart.getTime()) / 86_400_000) + 1) / 7);
|
|
2478
|
+
}
|
|
2479
|
+
/** Returns the next weekday (Mon–Fri) after the given date. */
|
|
2480
|
+
function nextWorkday(date) {
|
|
2481
|
+
const result = addDays(date, 1);
|
|
2482
|
+
while (isWeekend(result)) {
|
|
2483
|
+
result.setDate(result.getDate() + 1);
|
|
2484
|
+
}
|
|
2485
|
+
return result;
|
|
2486
|
+
}
|
|
2487
|
+
/** Returns true if a date falls within the range [start, end] (inclusive). */
|
|
2488
|
+
function inRange$2(date, start, end) {
|
|
2489
|
+
return date >= start && date <= end;
|
|
2490
|
+
}
|
|
2491
|
+
/** Parses a `YYYY-MM-DD` string and returns a local-midnight Date or null. */
|
|
2492
|
+
function parseDate(dateStr) {
|
|
2493
|
+
const match = /^(\d{4})-(\d{2})-(\d{2})$/.exec(dateStr);
|
|
2494
|
+
if (!match)
|
|
2495
|
+
return null;
|
|
2496
|
+
const [, y, mo, d] = match.map(Number);
|
|
2497
|
+
const result = new Date(y, mo - 1, d);
|
|
2498
|
+
return isValidDate$1(result) ? result : null;
|
|
2499
|
+
}
|
|
2500
|
+
function localeDate(dateStr) {
|
|
2501
|
+
const date = new Date(dateStr);
|
|
2502
|
+
date.toLocaleString('en-US');
|
|
2503
|
+
}
|
|
2504
|
+
|
|
2505
|
+
var date_util = /*#__PURE__*/Object.freeze({
|
|
2506
|
+
__proto__: null,
|
|
2507
|
+
addDays: addDays,
|
|
2508
|
+
addHours: addHours,
|
|
2509
|
+
addMinutes: addMinutes,
|
|
2510
|
+
addMonths: addMonths,
|
|
2511
|
+
addYears: addYears,
|
|
2512
|
+
daysInMonth: daysInMonth,
|
|
2513
|
+
diffInDays: diffInDays,
|
|
2514
|
+
diffInMinutes: diffInMinutes,
|
|
2515
|
+
diffInMonths: diffInMonths,
|
|
2516
|
+
diffInYears: diffInYears,
|
|
2517
|
+
endOfDay: endOfDay,
|
|
2518
|
+
endOfMonth: endOfMonth,
|
|
2519
|
+
endOfYear: endOfYear,
|
|
2520
|
+
formatDate: formatDate,
|
|
2521
|
+
getAge: getAge,
|
|
2522
|
+
getWeekNumber: getWeekNumber,
|
|
2523
|
+
inRange: inRange$2,
|
|
2524
|
+
isAfter: isAfter,
|
|
2525
|
+
isBefore: isBefore,
|
|
2526
|
+
isFuture: isFuture,
|
|
2527
|
+
isLeapYear: isLeapYear,
|
|
2528
|
+
isPast: isPast,
|
|
2529
|
+
isSameDay: isSameDay,
|
|
2530
|
+
isToday: isToday,
|
|
2531
|
+
isValidDate: isValidDate$1,
|
|
2532
|
+
isWeekend: isWeekend,
|
|
2533
|
+
localeDate: localeDate,
|
|
2534
|
+
nextWorkday: nextWorkday,
|
|
2535
|
+
now: now,
|
|
2536
|
+
parseDate: parseDate,
|
|
2537
|
+
startOfDay: startOfDay,
|
|
2538
|
+
startOfMonth: startOfMonth,
|
|
2539
|
+
startOfYear: startOfYear,
|
|
2540
|
+
subtractDays: subtractDays,
|
|
2541
|
+
subtractMonths: subtractMonths,
|
|
2542
|
+
subtractYears: subtractYears,
|
|
2543
|
+
timeAgo: timeAgo,
|
|
2544
|
+
toDateOnly: toDateOnly,
|
|
2545
|
+
toISOString: toISOString,
|
|
2546
|
+
today: today
|
|
2547
|
+
});
|
|
2548
|
+
|
|
2549
|
+
class OslDatetimepicker {
|
|
2550
|
+
dtNativeInput;
|
|
2551
|
+
label = '';
|
|
2552
|
+
required = false;
|
|
2553
|
+
disabled = false;
|
|
2554
|
+
dateModel = null;
|
|
2555
|
+
set model(val) {
|
|
2556
|
+
this.dateModel = this._parseToDate(val);
|
|
2557
|
+
this._scheduleDisplayUpdate();
|
|
2558
|
+
}
|
|
2559
|
+
placeholder = '';
|
|
2560
|
+
minDate = null;
|
|
2561
|
+
maxDate = null;
|
|
2562
|
+
set minDatetime(val) {
|
|
2563
|
+
this.minDate = this._parseToDate(val);
|
|
2564
|
+
}
|
|
2565
|
+
set maxDatetime(val) {
|
|
2566
|
+
this.maxDate = this._parseToDate(val);
|
|
2567
|
+
}
|
|
2568
|
+
/** Emitted string format. Tokens: YYYY MM DD HH mm ss ddd dddd etc. Default: 'YYYY-MM-DDTHH:mm' */
|
|
2569
|
+
format = 'YYYY-MM-DDTHH:mm';
|
|
2570
|
+
/** Display format shown inside the input field. Default: 'ddd DD/MM/YYYY HH:mm' → Sun 18/01/2026 19:18 */
|
|
2571
|
+
set displayFormatInput(val) {
|
|
2572
|
+
this._displayFormat = val || 'ddd DD/MM/YYYY HH:mm';
|
|
2573
|
+
this._scheduleDisplayUpdate();
|
|
2574
|
+
}
|
|
2575
|
+
_displayFormat = 'ddd DD/MM/YYYY HH:mm';
|
|
2576
|
+
showSeconds = false;
|
|
2577
|
+
enableMeridian = false;
|
|
2578
|
+
skeletonLoading = false;
|
|
2579
|
+
skeletonTheme = 'light';
|
|
2580
|
+
modelChange = new EventEmitter();
|
|
2581
|
+
changeEv = new EventEmitter();
|
|
2582
|
+
ngAfterViewInit() {
|
|
2583
|
+
this._updateDisplay();
|
|
2584
|
+
}
|
|
2585
|
+
onDateChange(date) {
|
|
2586
|
+
this.dateModel = date;
|
|
2587
|
+
this._updateDisplay();
|
|
2588
|
+
const str = date ? formatDate(date, this.format) : '';
|
|
2589
|
+
this.modelChange.emit(str);
|
|
2590
|
+
this.changeEv.emit(str);
|
|
2591
|
+
}
|
|
2592
|
+
_updateDisplay() {
|
|
2593
|
+
if (!this.dtNativeInput)
|
|
2594
|
+
return;
|
|
2595
|
+
this.dtNativeInput.nativeElement.value =
|
|
2596
|
+
this.dateModel ? formatDate(this.dateModel, this._displayFormat) : '';
|
|
2597
|
+
}
|
|
2598
|
+
_scheduleDisplayUpdate() {
|
|
2599
|
+
setTimeout(() => this._updateDisplay());
|
|
2600
|
+
}
|
|
2601
|
+
_parseToDate(val) {
|
|
2602
|
+
if (!val)
|
|
2603
|
+
return null;
|
|
2604
|
+
const d = new Date(val);
|
|
2605
|
+
return isNaN(d.getTime()) ? null : d;
|
|
2606
|
+
}
|
|
2607
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: OslDatetimepicker, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
2608
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.9", type: OslDatetimepicker, isStandalone: false, selector: "osl-datetimepicker", inputs: { label: "label", required: "required", disabled: "disabled", model: "model", placeholder: "placeholder", minDatetime: "minDatetime", maxDatetime: "maxDatetime", format: "format", displayFormatInput: ["displayFormat", "displayFormatInput"], showSeconds: "showSeconds", enableMeridian: "enableMeridian", skeletonLoading: "skeletonLoading", skeletonTheme: "skeletonTheme" }, outputs: { modelChange: "modelChange", changeEv: "changeEv" }, providers: [
|
|
2609
|
+
{
|
|
2610
|
+
provide: MAT_DATE_FORMATS,
|
|
2611
|
+
useValue: {
|
|
2612
|
+
parse: {
|
|
2613
|
+
dateInput: 'DD-MMM-YYYY hh:mm a',
|
|
2614
|
+
},
|
|
2615
|
+
display: {
|
|
2616
|
+
dateInput: 'DD-MMM-YYYY hh:mm a',
|
|
2617
|
+
monthYearLabel: 'MMM YYYY', dateA11yLabel: 'LL', monthYearA11yLabel: 'MMMM YYYY',
|
|
2618
|
+
}
|
|
2619
|
+
}
|
|
2620
|
+
}
|
|
2621
|
+
], viewQueries: [{ propertyName: "dtNativeInput", first: true, predicate: ["dtNativeInput"], descendants: true }], ngImport: i0, template: "<div class=\"d-flex flex-column\">\n @if (label) {\n <div [oslSkeleton]=\"skeletonLoading\" [oslSkeletonTheme]=\"skeletonTheme\">\n <label class=\"label\" [class.txt-clr-red]=\"dtField.touched && dtField.invalid\">\n {{label}} <span class=\"txt-clr-red\">{{required ? '*' : ''}}</span>\n </label>\n </div>\n }\n <div class=\"input-wrapper\" [oslSkeleton]=\"skeletonLoading\" [oslSkeletonTheme]=\"skeletonTheme\">\n <input\n class=\"dt-input\"\n [ngxMatDatetimePicker]=\"picker\"\n [ngModel]=\"dateModel\"\n (ngModelChange)=\"onDateChange($event)\"\n [required]=\"required\"\n [disabled]=\"disabled\"\n [min]=\"minDate\"\n [max]=\"maxDate\"\n [placeholder]=\"placeholder\"\n [class.error]=\"dtField.touched && dtField.invalid\"\n #dtField=\"ngModel\"\n readonly\n />\n <button\n type=\"button\"\n class=\"dt-icon-btn\"\n (click)=\"picker.open()\"\n [disabled]=\"disabled\"\n tabindex=\"-1\">\n <svg viewBox=\"0 0 20 20\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\n <rect x=\"3\" y=\"4\" width=\"14\" height=\"14\" rx=\"2\"/>\n <line x1=\"3\" y1=\"8\" x2=\"17\" y2=\"8\"/>\n <line x1=\"7\" y1=\"2\" x2=\"7\" y2=\"6\"/>\n <line x1=\"13\" y1=\"2\" x2=\"13\" y2=\"6\"/>\n </svg>\n </button>\n <ngx-mat-datetime-picker\n #picker\n [showSpinners]=\"true\"\n [showSeconds]=\"showSeconds\"\n [enableMeridian]=\"enableMeridian\">\n </ngx-mat-datetime-picker>\n </div>\n @if (dtField.touched && dtField.invalid && required) {\n <mat-hint class=\"hint\">{{label}} is Required!</mat-hint>\n }\n</div>\n", styles: [".label{font-size:var(--osl-label-font-size);margin-bottom:5px}.txt-clr-red{color:var(--osl-error-color)}.hint{color:var(--osl-error-color);margin-top:2px;font-size:var(--osl-hint-font-size)}.input-wrapper{position:relative;display:flex;align-items:center}.dt-icon-btn{position:absolute;right:7px;top:50%;transform:translateY(-50%);width:22px;height:22px;padding:0;border:none;background:transparent;cursor:pointer;color:#9ca3af;display:flex;align-items:center;justify-content:center;transition:color .15s;border-radius:4px}.dt-icon-btn svg{width:16px;height:16px;display:block}.dt-icon-btn:hover:not(:disabled){color:var(--osl-focus-border-color)}.dt-icon-btn:disabled{opacity:.35;cursor:not-allowed}.dt-input{height:var(--osl-control-height);width:100%;border-radius:var(--osl-border-radius);outline:none;border:1px solid var(--osl-border-color);padding:0 38px 0 10px;font-size:var(--osl-text-font-size);font-family:inherit;color:#333;background-color:#fff;transition:border-color .2s,box-shadow .2s;letter-spacing:.01em;box-sizing:border-box}.dt-input::placeholder{color:#bbb}.dt-input:hover:not(:disabled){border-color:var(--osl-focus-border-color)}.dt-input:focus{border-color:var(--osl-focus-border-color);box-shadow:0 0 0 3px var(--osl-focus-shadow, rgba(99, 102, 241, .14))}.dt-input:disabled{background-color:#f5f5f5;cursor:not-allowed;opacity:.7}.dt-input.error{border-color:var(--osl-error-color)}.dt-input.error:focus{box-shadow:0 0 0 3px var(--osl-error-shadow, rgba(220, 38, 38, .14))}\n"], dependencies: [{ kind: "directive", type: i1$1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1$1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$1.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i1$1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i2$2.MatHint, selector: "mat-hint", inputs: ["align", "id"] }, { kind: "directive", type: OslSkeletonDirective, selector: "[oslSkeleton]", inputs: ["oslSkeleton", "oslSkeletonType", "oslSkeletonAnimation", "oslSkeletonTheme", "oslSkeletonColor", "oslSkeletonHighlight", "oslSkeletonRadius", "oslSkeletonRows", "oslSkeletonRowGap", "oslSkeletonZIndex", "oslSkeletonDelay", "oslSkeletonDuration", "oslSkeletonMinHeight", "oslSkeletonForceReread", "oslSkeletonCircleSize", "oslSkeletonListItems", "oslSkeletonTableRows", "oslSkeletonTableCols", "oslSkeletonCardLines", "oslSkeletonBgColor"] }, { kind: "component", type: i4.NgxMatDatetimepicker, selector: "ngx-mat-datetime-picker", exportAs: ["ngxMatDatetimePicker"] }, { kind: "directive", type: i4.NgxMatDatepickerInput, selector: "input[ngxMatDatetimePicker]", inputs: ["ngxMatDatetimePicker", "min", "max", "matDatepickerFilter"], exportAs: ["ngxMatDatepickerInput"] }] });
|
|
2622
|
+
}
|
|
2623
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: OslDatetimepicker, decorators: [{
|
|
2624
|
+
type: Component,
|
|
2625
|
+
args: [{ selector: 'osl-datetimepicker', standalone: false, providers: [
|
|
2626
|
+
{
|
|
2627
|
+
provide: MAT_DATE_FORMATS,
|
|
2628
|
+
useValue: {
|
|
2629
|
+
parse: {
|
|
2630
|
+
dateInput: 'DD-MMM-YYYY hh:mm a',
|
|
2631
|
+
},
|
|
2632
|
+
display: {
|
|
2633
|
+
dateInput: 'DD-MMM-YYYY hh:mm a',
|
|
2634
|
+
monthYearLabel: 'MMM YYYY', dateA11yLabel: 'LL', monthYearA11yLabel: 'MMMM YYYY',
|
|
2635
|
+
}
|
|
2636
|
+
}
|
|
2637
|
+
}
|
|
2638
|
+
], template: "<div class=\"d-flex flex-column\">\n @if (label) {\n <div [oslSkeleton]=\"skeletonLoading\" [oslSkeletonTheme]=\"skeletonTheme\">\n <label class=\"label\" [class.txt-clr-red]=\"dtField.touched && dtField.invalid\">\n {{label}} <span class=\"txt-clr-red\">{{required ? '*' : ''}}</span>\n </label>\n </div>\n }\n <div class=\"input-wrapper\" [oslSkeleton]=\"skeletonLoading\" [oslSkeletonTheme]=\"skeletonTheme\">\n <input\n class=\"dt-input\"\n [ngxMatDatetimePicker]=\"picker\"\n [ngModel]=\"dateModel\"\n (ngModelChange)=\"onDateChange($event)\"\n [required]=\"required\"\n [disabled]=\"disabled\"\n [min]=\"minDate\"\n [max]=\"maxDate\"\n [placeholder]=\"placeholder\"\n [class.error]=\"dtField.touched && dtField.invalid\"\n #dtField=\"ngModel\"\n readonly\n />\n <button\n type=\"button\"\n class=\"dt-icon-btn\"\n (click)=\"picker.open()\"\n [disabled]=\"disabled\"\n tabindex=\"-1\">\n <svg viewBox=\"0 0 20 20\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\n <rect x=\"3\" y=\"4\" width=\"14\" height=\"14\" rx=\"2\"/>\n <line x1=\"3\" y1=\"8\" x2=\"17\" y2=\"8\"/>\n <line x1=\"7\" y1=\"2\" x2=\"7\" y2=\"6\"/>\n <line x1=\"13\" y1=\"2\" x2=\"13\" y2=\"6\"/>\n </svg>\n </button>\n <ngx-mat-datetime-picker\n #picker\n [showSpinners]=\"true\"\n [showSeconds]=\"showSeconds\"\n [enableMeridian]=\"enableMeridian\">\n </ngx-mat-datetime-picker>\n </div>\n @if (dtField.touched && dtField.invalid && required) {\n <mat-hint class=\"hint\">{{label}} is Required!</mat-hint>\n }\n</div>\n", styles: [".label{font-size:var(--osl-label-font-size);margin-bottom:5px}.txt-clr-red{color:var(--osl-error-color)}.hint{color:var(--osl-error-color);margin-top:2px;font-size:var(--osl-hint-font-size)}.input-wrapper{position:relative;display:flex;align-items:center}.dt-icon-btn{position:absolute;right:7px;top:50%;transform:translateY(-50%);width:22px;height:22px;padding:0;border:none;background:transparent;cursor:pointer;color:#9ca3af;display:flex;align-items:center;justify-content:center;transition:color .15s;border-radius:4px}.dt-icon-btn svg{width:16px;height:16px;display:block}.dt-icon-btn:hover:not(:disabled){color:var(--osl-focus-border-color)}.dt-icon-btn:disabled{opacity:.35;cursor:not-allowed}.dt-input{height:var(--osl-control-height);width:100%;border-radius:var(--osl-border-radius);outline:none;border:1px solid var(--osl-border-color);padding:0 38px 0 10px;font-size:var(--osl-text-font-size);font-family:inherit;color:#333;background-color:#fff;transition:border-color .2s,box-shadow .2s;letter-spacing:.01em;box-sizing:border-box}.dt-input::placeholder{color:#bbb}.dt-input:hover:not(:disabled){border-color:var(--osl-focus-border-color)}.dt-input:focus{border-color:var(--osl-focus-border-color);box-shadow:0 0 0 3px var(--osl-focus-shadow, rgba(99, 102, 241, .14))}.dt-input:disabled{background-color:#f5f5f5;cursor:not-allowed;opacity:.7}.dt-input.error{border-color:var(--osl-error-color)}.dt-input.error:focus{box-shadow:0 0 0 3px var(--osl-error-shadow, rgba(220, 38, 38, .14))}\n"] }]
|
|
2639
|
+
}], propDecorators: { dtNativeInput: [{
|
|
2640
|
+
type: ViewChild,
|
|
2641
|
+
args: ['dtNativeInput']
|
|
2642
|
+
}], label: [{
|
|
2643
|
+
type: Input,
|
|
2644
|
+
args: ['label']
|
|
2645
|
+
}], required: [{
|
|
2646
|
+
type: Input,
|
|
2647
|
+
args: ['required']
|
|
2648
|
+
}], disabled: [{
|
|
2649
|
+
type: Input,
|
|
2650
|
+
args: ['disabled']
|
|
2651
|
+
}], model: [{
|
|
2652
|
+
type: Input,
|
|
2653
|
+
args: ['model']
|
|
2654
|
+
}], placeholder: [{
|
|
2655
|
+
type: Input,
|
|
2656
|
+
args: ['placeholder']
|
|
2657
|
+
}], minDatetime: [{
|
|
2658
|
+
type: Input,
|
|
2659
|
+
args: ['minDatetime']
|
|
2660
|
+
}], maxDatetime: [{
|
|
2661
|
+
type: Input,
|
|
2662
|
+
args: ['maxDatetime']
|
|
2663
|
+
}], format: [{
|
|
2664
|
+
type: Input,
|
|
2665
|
+
args: ['format']
|
|
2666
|
+
}], displayFormatInput: [{
|
|
2667
|
+
type: Input,
|
|
2668
|
+
args: ['displayFormat']
|
|
2669
|
+
}], showSeconds: [{
|
|
2670
|
+
type: Input,
|
|
2671
|
+
args: ['showSeconds']
|
|
2672
|
+
}], enableMeridian: [{
|
|
2673
|
+
type: Input,
|
|
2674
|
+
args: ['enableMeridian']
|
|
2675
|
+
}], skeletonLoading: [{
|
|
2676
|
+
type: Input,
|
|
2677
|
+
args: ['skeletonLoading']
|
|
2678
|
+
}], skeletonTheme: [{
|
|
2679
|
+
type: Input,
|
|
2680
|
+
args: ['skeletonTheme']
|
|
2681
|
+
}], modelChange: [{
|
|
2682
|
+
type: Output
|
|
2683
|
+
}], changeEv: [{
|
|
2684
|
+
type: Output
|
|
2685
|
+
}] } });
|
|
2686
|
+
|
|
2687
|
+
class OslCheckbox {
|
|
2688
|
+
checkboxEl;
|
|
2689
|
+
label = '';
|
|
2690
|
+
disabled = false;
|
|
2691
|
+
required = false;
|
|
2692
|
+
model = false;
|
|
2693
|
+
indeterminate = false;
|
|
2694
|
+
skeletonLoading = false;
|
|
2695
|
+
skeletonTheme = 'light';
|
|
2696
|
+
modelChange = new EventEmitter();
|
|
2697
|
+
changeEv = new EventEmitter();
|
|
2698
|
+
touched = false;
|
|
2699
|
+
get isInvalid() {
|
|
2700
|
+
return this.touched && this.required && !this.model;
|
|
2701
|
+
}
|
|
2702
|
+
ngOnChanges(changes) {
|
|
2703
|
+
if (changes['indeterminate'] && this.checkboxEl) {
|
|
2704
|
+
this.checkboxEl.nativeElement.indeterminate = this.indeterminate;
|
|
2705
|
+
}
|
|
2706
|
+
}
|
|
2707
|
+
ngAfterViewInit() {
|
|
2708
|
+
if (this.checkboxEl) {
|
|
2709
|
+
this.checkboxEl.nativeElement.indeterminate = this.indeterminate;
|
|
2710
|
+
}
|
|
2711
|
+
}
|
|
2712
|
+
onModelChange(event) {
|
|
2713
|
+
this.touched = true;
|
|
2714
|
+
this.model = event;
|
|
2715
|
+
this.modelChange.emit(this.model);
|
|
2716
|
+
this.changeEv.emit(this.model);
|
|
2717
|
+
}
|
|
2718
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: OslCheckbox, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
2719
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.9", type: OslCheckbox, isStandalone: false, selector: "osl-checkbox", inputs: { label: "label", disabled: "disabled", required: "required", model: "model", indeterminate: "indeterminate", skeletonLoading: "skeletonLoading", skeletonTheme: "skeletonTheme" }, outputs: { modelChange: "modelChange", changeEv: "changeEv" }, viewQueries: [{ propertyName: "checkboxEl", first: true, predicate: ["checkboxEl"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<div class=\"d-flex flex-column\">\r\n\r\n <label class=\"checkbox-wrapper\" [oslSkeleton]=\"skeletonLoading\" [oslSkeletonTheme]=\"skeletonTheme\" [class.checkbox-disabled]=\"disabled\" [class.checkbox-invalid]=\"isInvalid\">\r\n <input\r\n #checkboxEl\r\n type=\"checkbox\"\r\n [ngModel]=\"model\"\r\n (ngModelChange)=\"onModelChange($event)\"\r\n [disabled]=\"disabled\"\r\n >\r\n <span class=\"checkbox-label\" [oslSkeleton]=\"skeletonLoading\" [oslSkeletonTheme]=\"skeletonTheme\">\r\n <span class=\"label-text\" [title]=\"label\">{{label}}</span><span class=\"txt-clr-red label-required\">{{required?'*':''}}</span>\r\n </span>\r\n </label>\r\n @if(isInvalid) {\r\n <mat-hint class=\"hint\">{{label}} is Required!</mat-hint>\r\n }\r\n</div>\r\n", styles: [".checkbox-wrapper{display:flex;align-items:center;gap:8px;cursor:pointer;font-size:var(--osl-label-font-size);width:fit-content;max-width:100%}.checkbox-wrapper input[type=checkbox]{width:16px;height:16px;cursor:pointer;accent-color:#333;flex-shrink:0}.checkbox-wrapper .checkbox-label{-webkit-user-select:none;user-select:none;display:flex;align-items:center;overflow:hidden;min-width:0}.checkbox-wrapper.checkbox-disabled{opacity:.6;cursor:not-allowed}.checkbox-wrapper.checkbox-disabled input[type=checkbox]{cursor:not-allowed}.checkbox-wrapper.checkbox-invalid{color:var(--osl-error-color)}.label-text{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;min-width:0}.label-required{flex-shrink:0}.hint{color:var(--osl-error-color);margin-top:2px;font-size:var(--osl-hint-font-size)}.txt-clr-red{color:var(--osl-error-color)}\n"], dependencies: [{ kind: "directive", type: i1$1.CheckboxControlValueAccessor, selector: "input[type=checkbox][formControlName],input[type=checkbox][formControl],input[type=checkbox][ngModel]" }, { kind: "directive", type: i1$1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i2$2.MatHint, selector: "mat-hint", inputs: ["align", "id"] }, { kind: "directive", type: OslSkeletonDirective, selector: "[oslSkeleton]", inputs: ["oslSkeleton", "oslSkeletonType", "oslSkeletonAnimation", "oslSkeletonTheme", "oslSkeletonColor", "oslSkeletonHighlight", "oslSkeletonRadius", "oslSkeletonRows", "oslSkeletonRowGap", "oslSkeletonZIndex", "oslSkeletonDelay", "oslSkeletonDuration", "oslSkeletonMinHeight", "oslSkeletonForceReread", "oslSkeletonCircleSize", "oslSkeletonListItems", "oslSkeletonTableRows", "oslSkeletonTableCols", "oslSkeletonCardLines", "oslSkeletonBgColor"] }] });
|
|
2720
|
+
}
|
|
2721
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: OslCheckbox, decorators: [{
|
|
2722
|
+
type: Component,
|
|
2723
|
+
args: [{ selector: 'osl-checkbox', standalone: false, template: "<div class=\"d-flex flex-column\">\r\n\r\n <label class=\"checkbox-wrapper\" [oslSkeleton]=\"skeletonLoading\" [oslSkeletonTheme]=\"skeletonTheme\" [class.checkbox-disabled]=\"disabled\" [class.checkbox-invalid]=\"isInvalid\">\r\n <input\r\n #checkboxEl\r\n type=\"checkbox\"\r\n [ngModel]=\"model\"\r\n (ngModelChange)=\"onModelChange($event)\"\r\n [disabled]=\"disabled\"\r\n >\r\n <span class=\"checkbox-label\" [oslSkeleton]=\"skeletonLoading\" [oslSkeletonTheme]=\"skeletonTheme\">\r\n <span class=\"label-text\" [title]=\"label\">{{label}}</span><span class=\"txt-clr-red label-required\">{{required?'*':''}}</span>\r\n </span>\r\n </label>\r\n @if(isInvalid) {\r\n <mat-hint class=\"hint\">{{label}} is Required!</mat-hint>\r\n }\r\n</div>\r\n", styles: [".checkbox-wrapper{display:flex;align-items:center;gap:8px;cursor:pointer;font-size:var(--osl-label-font-size);width:fit-content;max-width:100%}.checkbox-wrapper input[type=checkbox]{width:16px;height:16px;cursor:pointer;accent-color:#333;flex-shrink:0}.checkbox-wrapper .checkbox-label{-webkit-user-select:none;user-select:none;display:flex;align-items:center;overflow:hidden;min-width:0}.checkbox-wrapper.checkbox-disabled{opacity:.6;cursor:not-allowed}.checkbox-wrapper.checkbox-disabled input[type=checkbox]{cursor:not-allowed}.checkbox-wrapper.checkbox-invalid{color:var(--osl-error-color)}.label-text{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;min-width:0}.label-required{flex-shrink:0}.hint{color:var(--osl-error-color);margin-top:2px;font-size:var(--osl-hint-font-size)}.txt-clr-red{color:var(--osl-error-color)}\n"] }]
|
|
2286
2724
|
}], propDecorators: { checkboxEl: [{
|
|
2287
2725
|
type: ViewChild,
|
|
2288
2726
|
args: ['checkboxEl']
|
|
@@ -2503,11 +2941,11 @@ class DynamicForm {
|
|
|
2503
2941
|
return list.flatMap(e => e.rows?.length ? [e, ...this._flatElements(e.rows)] : [e]);
|
|
2504
2942
|
}
|
|
2505
2943
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: DynamicForm, deps: [{ token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
|
|
2506
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.9", type: DynamicForm, isStandalone: false, selector: "osl-dynamic-form", inputs: { elements: "elements", model: "model", skeletonLoading: "skeletonLoading", skeletonTheme: "skeletonTheme" }, outputs: { modelChange: "modelChange" }, usesOnChanges: true, ngImport: i0, template: "@if(elements && elements.length > 0) {\n <div class=\"row align-items-center w-100\">\n @for(elem of elements; track elem) {\n @if(!(elem.hideIf ? elem.hideIf(model) : elem.hide)) {\n <ng-container *ngTemplateOutlet=\"formField; context: { $implicit: elem }\"></ng-container>\n }\n }\n </div>\n}\n\n<ng-template #formField let-elem>\n @if(elem.hideIf ? !elem.hideIf(model) : true) {\n @switch (elem.elementType) {\n\n @case (\"textbox\") {\n <div [class]=\"'col-md-'+elem.columns+' mt-2'\" [attr.data-field-key]=\"elem.key\">\n <osl-input\n [skeletonLoading]=\"skeletonLoading\"\n [skeletonTheme]=\"skeletonTheme\"\n [label]=\"elem.label\"\n [disabled]=\"elem.disabledIf ? elem.disabledIf(model) : !!elem.disabled\"\n [required]=\"elem.requiredIf ? elem.requiredIf(model) : !!elem.required\"\n [type]=\"elem.inputType || 'text'\"\n [placeholder]=\"elem.placeholder || ''\"\n [mask]=\"elem.mask || ''\"\n [min]=\"elem.min ?? ''\"\n [max]=\"elem.max ?? ''\"\n [minLength]=\"elem.minLength ?? null\"\n [maxLength]=\"elem.maxLength ?? null\"\n [prefixIcon]=\"elem.prefixIcon || ''\"\n [suffixIcon]=\"elem.suffixIcon || ''\"\n [onlyChars]=\"!!elem.onlyChars\"\n [decimalPortion]=\"elem.decimalPortion ?? null\"\n (changeEv)=\"elem.change ? elem.change(model) : null\"\n [model]=\"model[elem.key]\"\n (modelChange)=\"onModelChange($event, elem.key)\"\n [isCapitalize]=\"elem.isCapitalize\"\n ></osl-input>\n </div>\n }\n\n @case (\"textarea\") {\n <div [class]=\"'col-md-'+elem.columns+' mt-2'\" [attr.data-field-key]=\"elem.key\">\n <osl-textarea\n [label]=\"elem.label\"\n [skeletonLoading]=\"skeletonLoading\"\n [skeletonTheme]=\"skeletonTheme\"\n [disabled]=\"elem.disabledIf ? elem.disabledIf(model) : !!elem.disabled\"\n [required]=\"elem.requiredIf ? elem.requiredIf(model) : !!elem.required\"\n [rows]=\"elem.textareaRows || 3\"\n [placeholder]=\"elem.placeholder || ''\"\n [maxLength]=\"elem.maxLength ?? null\"\n [minLength]=\"elem.minLength ?? null\"\n [characterCounter]=\"!!elem.characterCounter\"\n [resize]=\"elem.resize || 'none'\"\n (changeEv)=\"elem.change ? elem.change(model) : null\"\n [model]=\"model[elem.key]\"\n (modelChange)=\"onModelChange($event, elem.key)\"\n ></osl-textarea>\n </div>\n }\n\n @case (\"select\") {\n <div [class]=\"'col-md-'+elem.columns+' mt-2'\" [attr.data-field-key]=\"elem.key\">\n <osl-select\n [label]=\"elem.label\"\n [skeletonLoading]=\"skeletonLoading\"\n [skeletonTheme]=\"skeletonTheme\"\n [disabled]=\"elem.disabledIf ? elem.disabledIf(model) : !!elem.disabled\"\n [required]=\"elem.requiredIf ? elem.requiredIf(model) : !!elem.required\"\n [datasource]=\"elem.datasource || []\"\n [displayField]=\"elem.displayField || ''\"\n [valueField]=\"elem.valueField || ''\"\n [placeholder]=\"elem.selectPlaceholder || 'Select...'\"\n [loading]=\"elem.loadingIf ? elem.loadingIf(model) : false\"\n [clearable]=\"!!elem.clearable\"\n (changeEv)=\"elem.change ? onSelectChange(elem, $event) : null\"\n [model]=\"model[elem.key]\"\n (modelChange)=\"onModelChange($event, elem.key)\"\n ></osl-select>\n </div>\n }\n\n @case (\"radio\") {\n <div [class]=\"'col-md-'+elem.columns+' mt-2'\" [attr.data-field-key]=\"elem.key\">\n <osl-radio\n [label]=\"elem.label\"\n [skeletonLoading]=\"skeletonLoading\"\n [skeletonTheme]=\"skeletonTheme\"\n [disabled]=\"elem.disabledIf ? elem.disabledIf(model) : !!elem.disabled\"\n [required]=\"elem.requiredIf ? elem.requiredIf(model) : !!elem.required\"\n [datasource]=\"elem.datasource || []\"\n [displayField]=\"elem.displayField || ''\"\n [valueField]=\"elem.valueField || ''\"\n [inline]=\"!!elem.inline\"\n (changeEv)=\"elem.change ? elem.change(model) : null\"\n [model]=\"model[elem.key]\"\n (modelChange)=\"onModelChange($event, elem.key)\"\n ></osl-radio>\n </div>\n }\n\n @case (\"slide-toggle\") {\n <div [class]=\"'col-md-'+elem.columns+' mt-2'\" [attr.data-field-key]=\"elem.key\">\n <osl-slide-toggle\n [label]=\"elem.label\"\n [skeletonLoading]=\"skeletonLoading\"\n [skeletonTheme]=\"skeletonTheme\"\n [disabled]=\"elem.disabledIf ? elem.disabledIf(model) : !!elem.disabled\"\n [labelPosition]=\"elem.labelPosition || 'after'\"\n [trueLabel]=\"elem.trueLabel || ''\"\n [falseLabel]=\"elem.falseLabel || ''\"\n (changeEv)=\"elem.change ? elem.change(model) : null\"\n [model]=\"model[elem.key]\"\n (modelChange)=\"onModelChange($event, elem.key)\"\n ></osl-slide-toggle>\n </div>\n }\n\n @case (\"autocomplete\") {\n <div [class]=\"'col-md-'+elem.columns+' mt-2'\" [attr.data-field-key]=\"elem.key\">\n <osl-autocomplete\n [label]=\"elem.label\"\n [skeletonLoading]=\"skeletonLoading\"\n [skeletonTheme]=\"skeletonTheme\"\n [disabled]=\"elem.disabledIf ? elem.disabledIf(model) : !!elem.disabled\"\n [required]=\"elem.requiredIf ? elem.requiredIf(model) : !!elem.required\"\n [datasource]=\"elem.datasource || []\"\n [displayField]=\"elem.displayField || ''\"\n [valueField]=\"elem.valueField || ''\"\n [placeholder]=\"elem.autocompletePlaceholder || 'Type to search...'\"\n [loading]=\"elem.loadingIf ? elem.loadingIf(model) : false\"\n (changeEv)=\"onFieldChange(elem, $event)\"\n [(model)]=\"model[elem.key]\"\n [methodName]=\"elem.apiMethod\"\n [service]=\"elem.apiService\"\n [object]=\"model[elem.objectName]\"\n [searchType]=\"elem.searchType\"\n [configMethodName]=\"elem.apiConfigMethod\"\n [isLister]=\"elem.isListerAutocomplete\"\n [apiBody]=\"elem.apiBody\"\n ></osl-autocomplete>\n </div>\n }\n\n @case (\"file-uploader\") {\n <div [class]=\"'col-md-'+elem.columns+' mt-2'\" [attr.data-field-key]=\"elem.key\">\n <osl-file-upload\n [skeletonLoading]=\"skeletonLoading\"\n [skeletonTheme]=\"skeletonTheme\"\n [label]=\"elem.label\"\n [disabled]=\"elem.disabledIf ? elem.disabledIf(model) : !!elem.disabled\"\n [required]=\"elem.requiredIf ? elem.requiredIf(model) : !!elem.required\"\n [accept]=\"elem.accept || ''\"\n [multiple]=\"!!elem.multiple\"\n [maxSize]=\"elem.maxFileSize || 0\"\n (changeEv)=\"elem.change ? elem.change(model) : null\"\n [model]=\"model[elem.key]\"\n (modelChange)=\"onModelChange($event, elem.key)\"\n ></osl-file-upload>\n </div>\n }\n\n @case (\"datepicker\") {\n <div [class]=\"'col-md-'+elem.columns+' mt-2'\" [attr.data-field-key]=\"elem.key\">\n <osl-datepicker\n [skeletonLoading]=\"skeletonLoading\"\n [skeletonTheme]=\"skeletonTheme\"\n [label]=\"elem.label\"\n [disabled]=\"elem.disabledIf ? elem.disabledIf(model) : !!elem.disabled\"\n [required]=\"elem.requiredIf ? elem.requiredIf(model) : !!elem.required\"\n [dateType]=\"elem.dateType || 'date'\"\n [placeholder]=\"elem.placeholder || ''\"\n [minDate]=\"elem.minDateIf ? elem.minDateIf(model) : elem.minDate || ''\"\n [maxDate]=\"elem.maxDateIf ? elem.maxDateIf(model) : elem.maxDate || ''\"\n (changeEv)=\"elem.change ? elem.change(model) : null\"\n [model]=\"model[elem.key]\"\n (modelChange)=\"onModelChange($event, elem.key)\"\n ></osl-datepicker>\n </div>\n }\n\n @case (\"checkbox\") {\n <div [class]=\"'col-md-'+elem.columns+' mt-2'\" [attr.data-field-key]=\"elem.key\">\n <osl-checkbox\n [skeletonLoading]=\"skeletonLoading\"\n [skeletonTheme]=\"skeletonTheme\"\n [label]=\"elem.label\"\n [disabled]=\"elem.disabledIf ? elem.disabledIf(model) : !!elem.disabled\"\n [required]=\"elem.requiredIf ? elem.requiredIf(model) : !!elem.required\"\n [indeterminate]=\"!!elem.indeterminate\"\n (changeEv)=\"elem.change ? elem.change(model) : null\"\n [model]=\"model[elem.key]\"\n (modelChange)=\"onModelChange($event, elem.key)\"\n ></osl-checkbox>\n </div>\n }\n\n @case (\"button\") {\n <div [class]=\"'col-md-'+elem.columns+' mt-2'\" [attr.data-field-key]=\"elem.key\">\n <osl-button\n [label]=\"elem.label\"\n [loading]=\"elem.loadingIf ? elem.loadingIf(model) : false\"\n variant=\"secondary\"\n (clickEv)=\"elem.change ? elem.change(model) : null\"\n ></osl-button>\n </div>\n }\n\n @case (\"fieldset\") {\n <div [class]=\"'col-md-'+elem.columns+' mt-3'\">\n <fieldset class=\"osl-fieldset\">\n @if(elem.label) {\n <legend class=\"osl-fieldset-legend\" [oslSkeleton]=\"skeletonLoading\" [oslSkeletonTheme]=\"skeletonTheme\">\n <span class=\"osl-fieldset-legend__text\">{{ elem.label }}</span>\n </legend>\n }\n <div class=\"row w-100 osl-fieldset-body\">\n @for(innerElem of elem.rows; track innerElem) {\n @if(!(innerElem.hideIf ? innerElem.hideIf(model) : innerElem.hide)) {\n <ng-container *ngTemplateOutlet=\"formField; context: { $implicit: innerElem }\"></ng-container>\n }\n }\n </div>\n </fieldset>\n </div>\n }\n\n @case (\"templateRef\"){\n <div [class]=\"'col-md-'+elem.columns+' mt-3'\">\n <ng-container *ngTemplateOutlet=\"elem.templateRef; context: { $implicit: elem}\"></ng-container>\n </div>\n }\n\n @case (\"spacer\") {\n <div [class]=\"'col-md-'+elem.columns+' mt-2'\" [attr.data-field-key]=\"elem.key\">\n </div>\n }\n\n }\n }\n</ng-template>\n", styles: [".osl-fieldset{border:1.5px solid var(--osl-border-color, #e5e7eb);border-radius:10px;padding:0 16px 16px;margin:0;background:linear-gradient(135deg,#f9fafb,#fff);box-shadow:0 1px 4px #0000000d;position:relative;transition:box-shadow .2s}.osl-fieldset:focus-within{box-shadow:0 0 0 3px #6366f114,0 2px 8px #0000000f;border-color:var(--osl-primary, #6366f1)}.osl-fieldset-legend{padding:0 6px;margin-left:8px;line-height:1;float:none;width:auto}.osl-fieldset-legend__text{display:inline-flex;align-items:center;gap:6px;font-size:12px;font-weight:600;letter-spacing:.04em;text-transform:uppercase;background:#fff;padding:2px 10px;border:1.5px solid var(--osl-border-color, #e5e7eb);box-shadow:0 1px 3px #6366f11a}.osl-fieldset-body{margin-top:4px}\n"], dependencies: [{ kind: "directive", type: i1$2.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: OslSkeletonDirective, selector: "[oslSkeleton]", inputs: ["oslSkeleton", "oslSkeletonType", "oslSkeletonAnimation", "oslSkeletonTheme", "oslSkeletonColor", "oslSkeletonHighlight", "oslSkeletonRadius", "oslSkeletonRows", "oslSkeletonRowGap", "oslSkeletonZIndex", "oslSkeletonDelay", "oslSkeletonDuration", "oslSkeletonMinHeight", "oslSkeletonForceReread", "oslSkeletonCircleSize", "oslSkeletonListItems", "oslSkeletonTableRows", "oslSkeletonTableCols", "oslSkeletonCardLines", "oslSkeletonBgColor"] }, { kind: "component", type: Oslinput, selector: "osl-input", inputs: ["label", "required", "disabled", "model", "type", "placeholder", "mask", "min", "max", "minLength", "maxLength", "prefixIcon", "suffixIcon", "skeletonLoading", "skeletonTheme", "onlyChars", "isCapitalize", "decimalPortion"], outputs: ["modelChange", "changeEv"] }, { kind: "component", type: Osltextarea, selector: "osl-textarea", inputs: ["label", "rows", "required", "disabled", "model", "placeholder", "maxLength", "minLength", "characterCounter", "resize", "skeletonLoading", "skeletonTheme"], outputs: ["modelChange", "changeEv"] }, { kind: "component", type: OslSelect, selector: "osl-select", inputs: ["label", "required", "disabled", "model", "datasource", "displayField", "valueField", "placeholder", "loading", "clearable", "skeletonLoading", "skeletonTheme"], outputs: ["modelChange", "changeEv"] }, { kind: "component", type: OslRadio, selector: "osl-radio", inputs: ["label", "required", "disabled", "model", "datasource", "displayField", "valueField", "inline", "skeletonLoading", "skeletonTheme"], outputs: ["modelChange", "changeEv"] }, { kind: "component", type: OslSlideToggle, selector: "osl-slide-toggle", inputs: ["label", "disabled", "model", "labelPosition", "trueLabel", "falseLabel", "skeletonLoading", "skeletonTheme"], outputs: ["modelChange", "changeEv"] }, { kind: "component", type: OslAutocomplete, selector: "osl-autocomplete", inputs: ["label", "required", "disabled", "model", "datasource", "displayField", "valueField", "placeholder", "loading", "searchType", "methodName", "configMethodName", "service", "object", "skeletonLoading", "skeletonTheme", "isLister", "apiBody"], outputs: ["datasourceChange", "modelChange", "changeEv"] }, { kind: "component", type: OslFileUpload, selector: "osl-file-upload", inputs: ["label", "required", "disabled", "model", "accept", "multiple", "maxSize", "skeletonLoading", "skeletonTheme"], outputs: ["modelChange", "changeEv"] }, { kind: "component", type: OslDatepicker, selector: "osl-datepicker", inputs: ["label", "required", "disabled", "model", "dateType", "placeholder", "minDate", "maxDate", "skeletonLoading", "skeletonTheme"], outputs: ["modelChange", "changeEv"] }, { kind: "component", type: OslCheckbox, selector: "osl-checkbox", inputs: ["label", "disabled", "required", "model", "indeterminate", "skeletonLoading", "skeletonTheme"], outputs: ["modelChange", "changeEv"] }, { kind: "component", type: OslButton, selector: "osl-button", inputs: ["label", "icon", "variant", "size", "disabled", "loading", "type", "fullWidth"], outputs: ["clickEv"] }] });
|
|
2944
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.9", type: DynamicForm, isStandalone: false, selector: "osl-dynamic-form", inputs: { elements: "elements", model: "model", skeletonLoading: "skeletonLoading", skeletonTheme: "skeletonTheme" }, outputs: { modelChange: "modelChange" }, usesOnChanges: true, ngImport: i0, template: "@if(elements && elements.length > 0) {\n <div class=\"row align-items-center w-100\">\n @for(elem of elements; track elem) {\n @if(!(elem.hideIf ? elem.hideIf(model) : elem.hide)) {\n <ng-container *ngTemplateOutlet=\"formField; context: { $implicit: elem }\"></ng-container>\n }\n }\n </div>\n}\n\n<ng-template #formField let-elem>\n @if(elem.hideIf ? !elem.hideIf(model) : true) {\n @switch (elem.elementType) {\n\n @case (\"textbox\") {\n <div [class]=\"'col-md-'+elem.columns+' mt-2'\" [attr.data-field-key]=\"elem.key\">\n <osl-input\n [skeletonLoading]=\"skeletonLoading\"\n [skeletonTheme]=\"skeletonTheme\"\n [label]=\"elem.label\"\n [disabled]=\"elem.disabledIf ? elem.disabledIf(model) : !!elem.disabled\"\n [required]=\"elem.requiredIf ? elem.requiredIf(model) : !!elem.required\"\n [type]=\"elem.inputType || 'text'\"\n [placeholder]=\"elem.placeholder || ''\"\n [mask]=\"elem.mask || ''\"\n [min]=\"elem.min ?? ''\"\n [max]=\"elem.max ?? ''\"\n [minLength]=\"elem.minLength ?? null\"\n [maxLength]=\"elem.maxLength ?? null\"\n [prefixIcon]=\"elem.prefixIcon || ''\"\n [suffixIcon]=\"elem.suffixIcon || ''\"\n [onlyChars]=\"!!elem.onlyChars\"\n [decimalPortion]=\"elem.decimalPortion ?? null\"\n (changeEv)=\"elem.change ? elem.change(model) : null\"\n [model]=\"model[elem.key]\"\n (modelChange)=\"onModelChange($event, elem.key)\"\n [isCapitalize]=\"elem.isCapitalize\"\n ></osl-input>\n </div>\n }\n\n @case (\"textarea\") {\n <div [class]=\"'col-md-'+elem.columns+' mt-2'\" [attr.data-field-key]=\"elem.key\">\n <osl-textarea\n [label]=\"elem.label\"\n [skeletonLoading]=\"skeletonLoading\"\n [skeletonTheme]=\"skeletonTheme\"\n [disabled]=\"elem.disabledIf ? elem.disabledIf(model) : !!elem.disabled\"\n [required]=\"elem.requiredIf ? elem.requiredIf(model) : !!elem.required\"\n [rows]=\"elem.textareaRows || 3\"\n [placeholder]=\"elem.placeholder || ''\"\n [maxLength]=\"elem.maxLength ?? null\"\n [minLength]=\"elem.minLength ?? null\"\n [characterCounter]=\"!!elem.characterCounter\"\n [resize]=\"elem.resize || 'none'\"\n (changeEv)=\"elem.change ? elem.change(model) : null\"\n [model]=\"model[elem.key]\"\n (modelChange)=\"onModelChange($event, elem.key)\"\n ></osl-textarea>\n </div>\n }\n\n @case (\"select\") {\n <div [class]=\"'col-md-'+elem.columns+' mt-2'\" [attr.data-field-key]=\"elem.key\">\n <osl-select\n [label]=\"elem.label\"\n [skeletonLoading]=\"skeletonLoading\"\n [skeletonTheme]=\"skeletonTheme\"\n [disabled]=\"elem.disabledIf ? elem.disabledIf(model) : !!elem.disabled\"\n [required]=\"elem.requiredIf ? elem.requiredIf(model) : !!elem.required\"\n [datasource]=\"elem.datasource || []\"\n [displayField]=\"elem.displayField || ''\"\n [valueField]=\"elem.valueField || ''\"\n [placeholder]=\"elem.selectPlaceholder || 'Select...'\"\n [loading]=\"elem.loadingIf ? elem.loadingIf(model) : false\"\n [clearable]=\"!!elem.clearable\"\n (changeEv)=\"elem.change ? onSelectChange(elem, $event) : null\"\n [model]=\"model[elem.key]\"\n (modelChange)=\"onModelChange($event, elem.key)\"\n ></osl-select>\n </div>\n }\n\n @case (\"radio\") {\n <div [class]=\"'col-md-'+elem.columns+' mt-2'\" [attr.data-field-key]=\"elem.key\">\n <osl-radio\n [label]=\"elem.label\"\n [skeletonLoading]=\"skeletonLoading\"\n [skeletonTheme]=\"skeletonTheme\"\n [disabled]=\"elem.disabledIf ? elem.disabledIf(model) : !!elem.disabled\"\n [required]=\"elem.requiredIf ? elem.requiredIf(model) : !!elem.required\"\n [datasource]=\"elem.datasource || []\"\n [displayField]=\"elem.displayField || ''\"\n [valueField]=\"elem.valueField || ''\"\n [inline]=\"!!elem.inline\"\n (changeEv)=\"elem.change ? elem.change(model) : null\"\n [model]=\"model[elem.key]\"\n (modelChange)=\"onModelChange($event, elem.key)\"\n ></osl-radio>\n </div>\n }\n\n @case (\"slide-toggle\") {\n <div [class]=\"'col-md-'+elem.columns+' mt-2'\" [attr.data-field-key]=\"elem.key\">\n <osl-slide-toggle\n [label]=\"elem.label\"\n [skeletonLoading]=\"skeletonLoading\"\n [skeletonTheme]=\"skeletonTheme\"\n [disabled]=\"elem.disabledIf ? elem.disabledIf(model) : !!elem.disabled\"\n [labelPosition]=\"elem.labelPosition || 'after'\"\n [trueLabel]=\"elem.trueLabel || ''\"\n [falseLabel]=\"elem.falseLabel || ''\"\n (changeEv)=\"elem.change ? elem.change(model) : null\"\n [model]=\"model[elem.key]\"\n (modelChange)=\"onModelChange($event, elem.key)\"\n ></osl-slide-toggle>\n </div>\n }\n\n @case (\"autocomplete\") {\n <div [class]=\"'col-md-'+elem.columns+' mt-2'\" [attr.data-field-key]=\"elem.key\">\n <osl-autocomplete\n [label]=\"elem.label\"\n [skeletonLoading]=\"skeletonLoading\"\n [skeletonTheme]=\"skeletonTheme\"\n [disabled]=\"elem.disabledIf ? elem.disabledIf(model) : !!elem.disabled\"\n [required]=\"elem.requiredIf ? elem.requiredIf(model) : !!elem.required\"\n [datasource]=\"elem.datasource || []\"\n [displayField]=\"elem.displayField || ''\"\n [valueField]=\"elem.valueField || ''\"\n [placeholder]=\"elem.autocompletePlaceholder || 'Type to search...'\"\n [loading]=\"elem.loadingIf ? elem.loadingIf(model) : false\"\n (changeEv)=\"onFieldChange(elem, $event)\"\n [(model)]=\"model[elem.key]\"\n [methodName]=\"elem.apiMethod\"\n [service]=\"elem.apiService\"\n [object]=\"model[elem.objectName]\"\n [searchType]=\"elem.searchType\"\n [configMethodName]=\"elem.apiConfigMethod\"\n [isLister]=\"elem.isListerAutocomplete\"\n [apiBody]=\"elem.apiBody\"\n ></osl-autocomplete>\n </div>\n }\n\n @case (\"file-uploader\") {\n <div [class]=\"'col-md-'+elem.columns+' mt-2'\" [attr.data-field-key]=\"elem.key\">\n <osl-file-upload\n [skeletonLoading]=\"skeletonLoading\"\n [skeletonTheme]=\"skeletonTheme\"\n [label]=\"elem.label\"\n [disabled]=\"elem.disabledIf ? elem.disabledIf(model) : !!elem.disabled\"\n [required]=\"elem.requiredIf ? elem.requiredIf(model) : !!elem.required\"\n [accept]=\"elem.accept || ''\"\n [multiple]=\"!!elem.multiple\"\n [maxSize]=\"elem.maxFileSize || 0\"\n (changeEv)=\"elem.change ? elem.change(model) : null\"\n [model]=\"model[elem.key]\"\n (modelChange)=\"onModelChange($event, elem.key)\"\n ></osl-file-upload>\n </div>\n }\n\n @case (\"datepicker\") {\n <div [class]=\"'col-md-'+elem.columns+' mt-2'\" [attr.data-field-key]=\"elem.key\">\n <osl-datepicker\n [skeletonLoading]=\"skeletonLoading\"\n [skeletonTheme]=\"skeletonTheme\"\n [label]=\"elem.label\"\n [disabled]=\"elem.disabledIf ? elem.disabledIf(model) : !!elem.disabled\"\n [required]=\"elem.requiredIf ? elem.requiredIf(model) : !!elem.required\"\n [dateType]=\"elem.dateType || 'date'\"\n [placeholder]=\"elem.placeholder || ''\"\n [minDate]=\"elem.minDateIf ? elem.minDateIf(model) : elem.minDate || ''\"\n [maxDate]=\"elem.maxDateIf ? elem.maxDateIf(model) : elem.maxDate || ''\"\n (changeEv)=\"elem.change ? elem.change(model) : null\"\n [model]=\"model[elem.key]\"\n (modelChange)=\"onModelChange($event, elem.key)\"\n ></osl-datepicker>\n </div>\n }\n\n @case (\"datetimepicker\") {\n <div [class]=\"'col-md-'+elem.columns+' mt-2'\" [attr.data-field-key]=\"elem.key\">\n <osl-datetimepicker\n [skeletonLoading]=\"skeletonLoading\"\n [skeletonTheme]=\"skeletonTheme\"\n [label]=\"elem.label\"\n [disabled]=\"elem.disabledIf ? elem.disabledIf(model) : !!elem.disabled\"\n [required]=\"elem.requiredIf ? elem.requiredIf(model) : !!elem.required\"\n [placeholder]=\"elem.placeholder || ''\"\n [minDatetime]=\"elem.minDatetimeIf ? elem.minDatetimeIf(model) : elem.minDatetime || ''\"\n [maxDatetime]=\"elem.maxDatetimeIf ? elem.maxDatetimeIf(model) : elem.maxDatetime || ''\"\n [format]=\"elem.datetimepickerFormat || 'YYYY-MM-DDTHH:mm'\"\n [showSeconds]=\"!!elem.datetimepickerShowSeconds\"\n [enableMeridian]=\"!!elem.datetimepickerEnableMeridian\"\n (changeEv)=\"elem.change ? elem.change(model) : null\"\n [model]=\"model[elem.key]\"\n (modelChange)=\"onModelChange($event, elem.key)\"\n ></osl-datetimepicker>\n </div>\n }\n\n @case (\"checkbox\") {\n <div [class]=\"'col-md-'+elem.columns+' mt-2'\" [attr.data-field-key]=\"elem.key\">\n <osl-checkbox\n [skeletonLoading]=\"skeletonLoading\"\n [skeletonTheme]=\"skeletonTheme\"\n [label]=\"elem.label\"\n [disabled]=\"elem.disabledIf ? elem.disabledIf(model) : !!elem.disabled\"\n [required]=\"elem.requiredIf ? elem.requiredIf(model) : !!elem.required\"\n [indeterminate]=\"!!elem.indeterminate\"\n (changeEv)=\"elem.change ? elem.change(model) : null\"\n [model]=\"model[elem.key]\"\n (modelChange)=\"onModelChange($event, elem.key)\"\n ></osl-checkbox>\n </div>\n }\n\n @case (\"button\") {\n <div [class]=\"'col-md-'+elem.columns+' mt-2'\" [attr.data-field-key]=\"elem.key\">\n <osl-button\n [label]=\"elem.label\"\n [loading]=\"elem.loadingIf ? elem.loadingIf(model) : false\"\n variant=\"secondary\"\n (clickEv)=\"elem.change ? elem.change(model) : null\"\n ></osl-button>\n </div>\n }\n\n @case (\"fieldset\") {\n <div [class]=\"'col-md-'+elem.columns+' mt-3'\">\n <fieldset class=\"osl-fieldset\">\n @if(elem.label) {\n <legend class=\"osl-fieldset-legend\" [oslSkeleton]=\"skeletonLoading\" [oslSkeletonTheme]=\"skeletonTheme\">\n <span class=\"osl-fieldset-legend__text\">{{ elem.label }}</span>\n </legend>\n }\n <div class=\"row w-100 osl-fieldset-body\">\n @for(innerElem of elem.rows; track innerElem) {\n @if(!(innerElem.hideIf ? innerElem.hideIf(model) : innerElem.hide)) {\n <ng-container *ngTemplateOutlet=\"formField; context: { $implicit: innerElem }\"></ng-container>\n }\n }\n </div>\n </fieldset>\n </div>\n }\n\n @case (\"templateRef\"){\n <div [class]=\"'col-md-'+elem.columns+' mt-3'\">\n <ng-container *ngTemplateOutlet=\"elem.templateRef; context: { $implicit: elem}\"></ng-container>\n </div>\n }\n\n @case (\"spacer\") {\n <div [class]=\"'col-md-'+elem.columns+' mt-2'\" [attr.data-field-key]=\"elem.key\">\n </div>\n }\n\n }\n }\n</ng-template>\n", styles: [".osl-fieldset{border:1.5px solid var(--osl-border-color, #e5e7eb);border-radius:10px;padding:0 16px 16px;margin:0;background:linear-gradient(135deg,#f9fafb,#fff);box-shadow:0 1px 4px #0000000d;position:relative;transition:box-shadow .2s}.osl-fieldset:focus-within{box-shadow:0 0 0 3px #6366f114,0 2px 8px #0000000f;border-color:var(--osl-primary, #6366f1)}.osl-fieldset-legend{padding:0 6px;margin-left:8px;line-height:1;float:none;width:auto}.osl-fieldset-legend__text{display:inline-flex;align-items:center;gap:6px;font-size:12px;font-weight:600;letter-spacing:.04em;text-transform:uppercase;background:#fff;padding:2px 10px;border:1.5px solid var(--osl-border-color, #e5e7eb);box-shadow:0 1px 3px #6366f11a}.osl-fieldset-body{margin-top:4px}\n"], dependencies: [{ kind: "directive", type: i1$2.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: OslSkeletonDirective, selector: "[oslSkeleton]", inputs: ["oslSkeleton", "oslSkeletonType", "oslSkeletonAnimation", "oslSkeletonTheme", "oslSkeletonColor", "oslSkeletonHighlight", "oslSkeletonRadius", "oslSkeletonRows", "oslSkeletonRowGap", "oslSkeletonZIndex", "oslSkeletonDelay", "oslSkeletonDuration", "oslSkeletonMinHeight", "oslSkeletonForceReread", "oslSkeletonCircleSize", "oslSkeletonListItems", "oslSkeletonTableRows", "oslSkeletonTableCols", "oslSkeletonCardLines", "oslSkeletonBgColor"] }, { kind: "component", type: Oslinput, selector: "osl-input", inputs: ["label", "required", "disabled", "model", "type", "placeholder", "mask", "min", "max", "minLength", "maxLength", "prefixIcon", "suffixIcon", "skeletonLoading", "skeletonTheme", "onlyChars", "isCapitalize", "decimalPortion"], outputs: ["modelChange", "changeEv"] }, { kind: "component", type: Osltextarea, selector: "osl-textarea", inputs: ["label", "rows", "required", "disabled", "model", "placeholder", "maxLength", "minLength", "characterCounter", "resize", "skeletonLoading", "skeletonTheme"], outputs: ["modelChange", "changeEv"] }, { kind: "component", type: OslSelect, selector: "osl-select", inputs: ["label", "required", "disabled", "model", "datasource", "displayField", "valueField", "placeholder", "loading", "clearable", "skeletonLoading", "skeletonTheme"], outputs: ["modelChange", "changeEv"] }, { kind: "component", type: OslRadio, selector: "osl-radio", inputs: ["label", "required", "disabled", "model", "datasource", "displayField", "valueField", "inline", "skeletonLoading", "skeletonTheme"], outputs: ["modelChange", "changeEv"] }, { kind: "component", type: OslSlideToggle, selector: "osl-slide-toggle", inputs: ["label", "disabled", "model", "labelPosition", "trueLabel", "falseLabel", "skeletonLoading", "skeletonTheme"], outputs: ["modelChange", "changeEv"] }, { kind: "component", type: OslAutocomplete, selector: "osl-autocomplete", inputs: ["label", "required", "disabled", "model", "datasource", "displayField", "valueField", "placeholder", "loading", "searchType", "methodName", "configMethodName", "service", "object", "skeletonLoading", "skeletonTheme", "isLister", "apiBody"], outputs: ["datasourceChange", "modelChange", "changeEv"] }, { kind: "component", type: OslFileUpload, selector: "osl-file-upload", inputs: ["label", "required", "disabled", "model", "accept", "multiple", "maxSize", "skeletonLoading", "skeletonTheme"], outputs: ["modelChange", "changeEv"] }, { kind: "component", type: OslDatepicker, selector: "osl-datepicker", inputs: ["label", "required", "disabled", "model", "dateType", "placeholder", "minDate", "maxDate", "skeletonLoading", "skeletonTheme"], outputs: ["modelChange", "changeEv"] }, { kind: "component", type: OslDatetimepicker, selector: "osl-datetimepicker", inputs: ["label", "required", "disabled", "model", "placeholder", "minDatetime", "maxDatetime", "format", "displayFormat", "showSeconds", "enableMeridian", "skeletonLoading", "skeletonTheme"], outputs: ["modelChange", "changeEv"] }, { kind: "component", type: OslCheckbox, selector: "osl-checkbox", inputs: ["label", "disabled", "required", "model", "indeterminate", "skeletonLoading", "skeletonTheme"], outputs: ["modelChange", "changeEv"] }, { kind: "component", type: OslButton, selector: "osl-button", inputs: ["label", "icon", "variant", "size", "disabled", "loading", "type", "fullWidth"], outputs: ["clickEv"] }] });
|
|
2507
2945
|
}
|
|
2508
2946
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: DynamicForm, decorators: [{
|
|
2509
2947
|
type: Component,
|
|
2510
|
-
args: [{ selector: 'osl-dynamic-form', standalone: false, template: "@if(elements && elements.length > 0) {\n <div class=\"row align-items-center w-100\">\n @for(elem of elements; track elem) {\n @if(!(elem.hideIf ? elem.hideIf(model) : elem.hide)) {\n <ng-container *ngTemplateOutlet=\"formField; context: { $implicit: elem }\"></ng-container>\n }\n }\n </div>\n}\n\n<ng-template #formField let-elem>\n @if(elem.hideIf ? !elem.hideIf(model) : true) {\n @switch (elem.elementType) {\n\n @case (\"textbox\") {\n <div [class]=\"'col-md-'+elem.columns+' mt-2'\" [attr.data-field-key]=\"elem.key\">\n <osl-input\n [skeletonLoading]=\"skeletonLoading\"\n [skeletonTheme]=\"skeletonTheme\"\n [label]=\"elem.label\"\n [disabled]=\"elem.disabledIf ? elem.disabledIf(model) : !!elem.disabled\"\n [required]=\"elem.requiredIf ? elem.requiredIf(model) : !!elem.required\"\n [type]=\"elem.inputType || 'text'\"\n [placeholder]=\"elem.placeholder || ''\"\n [mask]=\"elem.mask || ''\"\n [min]=\"elem.min ?? ''\"\n [max]=\"elem.max ?? ''\"\n [minLength]=\"elem.minLength ?? null\"\n [maxLength]=\"elem.maxLength ?? null\"\n [prefixIcon]=\"elem.prefixIcon || ''\"\n [suffixIcon]=\"elem.suffixIcon || ''\"\n [onlyChars]=\"!!elem.onlyChars\"\n [decimalPortion]=\"elem.decimalPortion ?? null\"\n (changeEv)=\"elem.change ? elem.change(model) : null\"\n [model]=\"model[elem.key]\"\n (modelChange)=\"onModelChange($event, elem.key)\"\n [isCapitalize]=\"elem.isCapitalize\"\n ></osl-input>\n </div>\n }\n\n @case (\"textarea\") {\n <div [class]=\"'col-md-'+elem.columns+' mt-2'\" [attr.data-field-key]=\"elem.key\">\n <osl-textarea\n [label]=\"elem.label\"\n [skeletonLoading]=\"skeletonLoading\"\n [skeletonTheme]=\"skeletonTheme\"\n [disabled]=\"elem.disabledIf ? elem.disabledIf(model) : !!elem.disabled\"\n [required]=\"elem.requiredIf ? elem.requiredIf(model) : !!elem.required\"\n [rows]=\"elem.textareaRows || 3\"\n [placeholder]=\"elem.placeholder || ''\"\n [maxLength]=\"elem.maxLength ?? null\"\n [minLength]=\"elem.minLength ?? null\"\n [characterCounter]=\"!!elem.characterCounter\"\n [resize]=\"elem.resize || 'none'\"\n (changeEv)=\"elem.change ? elem.change(model) : null\"\n [model]=\"model[elem.key]\"\n (modelChange)=\"onModelChange($event, elem.key)\"\n ></osl-textarea>\n </div>\n }\n\n @case (\"select\") {\n <div [class]=\"'col-md-'+elem.columns+' mt-2'\" [attr.data-field-key]=\"elem.key\">\n <osl-select\n [label]=\"elem.label\"\n [skeletonLoading]=\"skeletonLoading\"\n [skeletonTheme]=\"skeletonTheme\"\n [disabled]=\"elem.disabledIf ? elem.disabledIf(model) : !!elem.disabled\"\n [required]=\"elem.requiredIf ? elem.requiredIf(model) : !!elem.required\"\n [datasource]=\"elem.datasource || []\"\n [displayField]=\"elem.displayField || ''\"\n [valueField]=\"elem.valueField || ''\"\n [placeholder]=\"elem.selectPlaceholder || 'Select...'\"\n [loading]=\"elem.loadingIf ? elem.loadingIf(model) : false\"\n [clearable]=\"!!elem.clearable\"\n (changeEv)=\"elem.change ? onSelectChange(elem, $event) : null\"\n [model]=\"model[elem.key]\"\n (modelChange)=\"onModelChange($event, elem.key)\"\n ></osl-select>\n </div>\n }\n\n @case (\"radio\") {\n <div [class]=\"'col-md-'+elem.columns+' mt-2'\" [attr.data-field-key]=\"elem.key\">\n <osl-radio\n [label]=\"elem.label\"\n [skeletonLoading]=\"skeletonLoading\"\n [skeletonTheme]=\"skeletonTheme\"\n [disabled]=\"elem.disabledIf ? elem.disabledIf(model) : !!elem.disabled\"\n [required]=\"elem.requiredIf ? elem.requiredIf(model) : !!elem.required\"\n [datasource]=\"elem.datasource || []\"\n [displayField]=\"elem.displayField || ''\"\n [valueField]=\"elem.valueField || ''\"\n [inline]=\"!!elem.inline\"\n (changeEv)=\"elem.change ? elem.change(model) : null\"\n [model]=\"model[elem.key]\"\n (modelChange)=\"onModelChange($event, elem.key)\"\n ></osl-radio>\n </div>\n }\n\n @case (\"slide-toggle\") {\n <div [class]=\"'col-md-'+elem.columns+' mt-2'\" [attr.data-field-key]=\"elem.key\">\n <osl-slide-toggle\n [label]=\"elem.label\"\n [skeletonLoading]=\"skeletonLoading\"\n [skeletonTheme]=\"skeletonTheme\"\n [disabled]=\"elem.disabledIf ? elem.disabledIf(model) : !!elem.disabled\"\n [labelPosition]=\"elem.labelPosition || 'after'\"\n [trueLabel]=\"elem.trueLabel || ''\"\n [falseLabel]=\"elem.falseLabel || ''\"\n (changeEv)=\"elem.change ? elem.change(model) : null\"\n [model]=\"model[elem.key]\"\n (modelChange)=\"onModelChange($event, elem.key)\"\n ></osl-slide-toggle>\n </div>\n }\n\n @case (\"autocomplete\") {\n <div [class]=\"'col-md-'+elem.columns+' mt-2'\" [attr.data-field-key]=\"elem.key\">\n <osl-autocomplete\n [label]=\"elem.label\"\n [skeletonLoading]=\"skeletonLoading\"\n [skeletonTheme]=\"skeletonTheme\"\n [disabled]=\"elem.disabledIf ? elem.disabledIf(model) : !!elem.disabled\"\n [required]=\"elem.requiredIf ? elem.requiredIf(model) : !!elem.required\"\n [datasource]=\"elem.datasource || []\"\n [displayField]=\"elem.displayField || ''\"\n [valueField]=\"elem.valueField || ''\"\n [placeholder]=\"elem.autocompletePlaceholder || 'Type to search...'\"\n [loading]=\"elem.loadingIf ? elem.loadingIf(model) : false\"\n (changeEv)=\"onFieldChange(elem, $event)\"\n [(model)]=\"model[elem.key]\"\n [methodName]=\"elem.apiMethod\"\n [service]=\"elem.apiService\"\n [object]=\"model[elem.objectName]\"\n [searchType]=\"elem.searchType\"\n [configMethodName]=\"elem.apiConfigMethod\"\n [isLister]=\"elem.isListerAutocomplete\"\n [apiBody]=\"elem.apiBody\"\n ></osl-autocomplete>\n </div>\n }\n\n @case (\"file-uploader\") {\n <div [class]=\"'col-md-'+elem.columns+' mt-2'\" [attr.data-field-key]=\"elem.key\">\n <osl-file-upload\n [skeletonLoading]=\"skeletonLoading\"\n [skeletonTheme]=\"skeletonTheme\"\n [label]=\"elem.label\"\n [disabled]=\"elem.disabledIf ? elem.disabledIf(model) : !!elem.disabled\"\n [required]=\"elem.requiredIf ? elem.requiredIf(model) : !!elem.required\"\n [accept]=\"elem.accept || ''\"\n [multiple]=\"!!elem.multiple\"\n [maxSize]=\"elem.maxFileSize || 0\"\n (changeEv)=\"elem.change ? elem.change(model) : null\"\n [model]=\"model[elem.key]\"\n (modelChange)=\"onModelChange($event, elem.key)\"\n ></osl-file-upload>\n </div>\n }\n\n @case (\"datepicker\") {\n <div [class]=\"'col-md-'+elem.columns+' mt-2'\" [attr.data-field-key]=\"elem.key\">\n <osl-datepicker\n [skeletonLoading]=\"skeletonLoading\"\n [skeletonTheme]=\"skeletonTheme\"\n [label]=\"elem.label\"\n [disabled]=\"elem.disabledIf ? elem.disabledIf(model) : !!elem.disabled\"\n [required]=\"elem.requiredIf ? elem.requiredIf(model) : !!elem.required\"\n [dateType]=\"elem.dateType || 'date'\"\n [placeholder]=\"elem.placeholder || ''\"\n [minDate]=\"elem.minDateIf ? elem.minDateIf(model) : elem.minDate || ''\"\n [maxDate]=\"elem.maxDateIf ? elem.maxDateIf(model) : elem.maxDate || ''\"\n (changeEv)=\"elem.change ? elem.change(model) : null\"\n [model]=\"model[elem.key]\"\n (modelChange)=\"onModelChange($event, elem.key)\"\n ></osl-datepicker>\n </div>\n }\n\n @case (\"checkbox\") {\n <div [class]=\"'col-md-'+elem.columns+' mt-2'\" [attr.data-field-key]=\"elem.key\">\n <osl-checkbox\n [skeletonLoading]=\"skeletonLoading\"\n [skeletonTheme]=\"skeletonTheme\"\n [label]=\"elem.label\"\n [disabled]=\"elem.disabledIf ? elem.disabledIf(model) : !!elem.disabled\"\n [required]=\"elem.requiredIf ? elem.requiredIf(model) : !!elem.required\"\n [indeterminate]=\"!!elem.indeterminate\"\n (changeEv)=\"elem.change ? elem.change(model) : null\"\n [model]=\"model[elem.key]\"\n (modelChange)=\"onModelChange($event, elem.key)\"\n ></osl-checkbox>\n </div>\n }\n\n @case (\"button\") {\n <div [class]=\"'col-md-'+elem.columns+' mt-2'\" [attr.data-field-key]=\"elem.key\">\n <osl-button\n [label]=\"elem.label\"\n [loading]=\"elem.loadingIf ? elem.loadingIf(model) : false\"\n variant=\"secondary\"\n (clickEv)=\"elem.change ? elem.change(model) : null\"\n ></osl-button>\n </div>\n }\n\n @case (\"fieldset\") {\n <div [class]=\"'col-md-'+elem.columns+' mt-3'\">\n <fieldset class=\"osl-fieldset\">\n @if(elem.label) {\n <legend class=\"osl-fieldset-legend\" [oslSkeleton]=\"skeletonLoading\" [oslSkeletonTheme]=\"skeletonTheme\">\n <span class=\"osl-fieldset-legend__text\">{{ elem.label }}</span>\n </legend>\n }\n <div class=\"row w-100 osl-fieldset-body\">\n @for(innerElem of elem.rows; track innerElem) {\n @if(!(innerElem.hideIf ? innerElem.hideIf(model) : innerElem.hide)) {\n <ng-container *ngTemplateOutlet=\"formField; context: { $implicit: innerElem }\"></ng-container>\n }\n }\n </div>\n </fieldset>\n </div>\n }\n\n @case (\"templateRef\"){\n <div [class]=\"'col-md-'+elem.columns+' mt-3'\">\n <ng-container *ngTemplateOutlet=\"elem.templateRef; context: { $implicit: elem}\"></ng-container>\n </div>\n }\n\n @case (\"spacer\") {\n <div [class]=\"'col-md-'+elem.columns+' mt-2'\" [attr.data-field-key]=\"elem.key\">\n </div>\n }\n\n }\n }\n</ng-template>\n", styles: [".osl-fieldset{border:1.5px solid var(--osl-border-color, #e5e7eb);border-radius:10px;padding:0 16px 16px;margin:0;background:linear-gradient(135deg,#f9fafb,#fff);box-shadow:0 1px 4px #0000000d;position:relative;transition:box-shadow .2s}.osl-fieldset:focus-within{box-shadow:0 0 0 3px #6366f114,0 2px 8px #0000000f;border-color:var(--osl-primary, #6366f1)}.osl-fieldset-legend{padding:0 6px;margin-left:8px;line-height:1;float:none;width:auto}.osl-fieldset-legend__text{display:inline-flex;align-items:center;gap:6px;font-size:12px;font-weight:600;letter-spacing:.04em;text-transform:uppercase;background:#fff;padding:2px 10px;border:1.5px solid var(--osl-border-color, #e5e7eb);box-shadow:0 1px 3px #6366f11a}.osl-fieldset-body{margin-top:4px}\n"] }]
|
|
2948
|
+
args: [{ selector: 'osl-dynamic-form', standalone: false, template: "@if(elements && elements.length > 0) {\n <div class=\"row align-items-center w-100\">\n @for(elem of elements; track elem) {\n @if(!(elem.hideIf ? elem.hideIf(model) : elem.hide)) {\n <ng-container *ngTemplateOutlet=\"formField; context: { $implicit: elem }\"></ng-container>\n }\n }\n </div>\n}\n\n<ng-template #formField let-elem>\n @if(elem.hideIf ? !elem.hideIf(model) : true) {\n @switch (elem.elementType) {\n\n @case (\"textbox\") {\n <div [class]=\"'col-md-'+elem.columns+' mt-2'\" [attr.data-field-key]=\"elem.key\">\n <osl-input\n [skeletonLoading]=\"skeletonLoading\"\n [skeletonTheme]=\"skeletonTheme\"\n [label]=\"elem.label\"\n [disabled]=\"elem.disabledIf ? elem.disabledIf(model) : !!elem.disabled\"\n [required]=\"elem.requiredIf ? elem.requiredIf(model) : !!elem.required\"\n [type]=\"elem.inputType || 'text'\"\n [placeholder]=\"elem.placeholder || ''\"\n [mask]=\"elem.mask || ''\"\n [min]=\"elem.min ?? ''\"\n [max]=\"elem.max ?? ''\"\n [minLength]=\"elem.minLength ?? null\"\n [maxLength]=\"elem.maxLength ?? null\"\n [prefixIcon]=\"elem.prefixIcon || ''\"\n [suffixIcon]=\"elem.suffixIcon || ''\"\n [onlyChars]=\"!!elem.onlyChars\"\n [decimalPortion]=\"elem.decimalPortion ?? null\"\n (changeEv)=\"elem.change ? elem.change(model) : null\"\n [model]=\"model[elem.key]\"\n (modelChange)=\"onModelChange($event, elem.key)\"\n [isCapitalize]=\"elem.isCapitalize\"\n ></osl-input>\n </div>\n }\n\n @case (\"textarea\") {\n <div [class]=\"'col-md-'+elem.columns+' mt-2'\" [attr.data-field-key]=\"elem.key\">\n <osl-textarea\n [label]=\"elem.label\"\n [skeletonLoading]=\"skeletonLoading\"\n [skeletonTheme]=\"skeletonTheme\"\n [disabled]=\"elem.disabledIf ? elem.disabledIf(model) : !!elem.disabled\"\n [required]=\"elem.requiredIf ? elem.requiredIf(model) : !!elem.required\"\n [rows]=\"elem.textareaRows || 3\"\n [placeholder]=\"elem.placeholder || ''\"\n [maxLength]=\"elem.maxLength ?? null\"\n [minLength]=\"elem.minLength ?? null\"\n [characterCounter]=\"!!elem.characterCounter\"\n [resize]=\"elem.resize || 'none'\"\n (changeEv)=\"elem.change ? elem.change(model) : null\"\n [model]=\"model[elem.key]\"\n (modelChange)=\"onModelChange($event, elem.key)\"\n ></osl-textarea>\n </div>\n }\n\n @case (\"select\") {\n <div [class]=\"'col-md-'+elem.columns+' mt-2'\" [attr.data-field-key]=\"elem.key\">\n <osl-select\n [label]=\"elem.label\"\n [skeletonLoading]=\"skeletonLoading\"\n [skeletonTheme]=\"skeletonTheme\"\n [disabled]=\"elem.disabledIf ? elem.disabledIf(model) : !!elem.disabled\"\n [required]=\"elem.requiredIf ? elem.requiredIf(model) : !!elem.required\"\n [datasource]=\"elem.datasource || []\"\n [displayField]=\"elem.displayField || ''\"\n [valueField]=\"elem.valueField || ''\"\n [placeholder]=\"elem.selectPlaceholder || 'Select...'\"\n [loading]=\"elem.loadingIf ? elem.loadingIf(model) : false\"\n [clearable]=\"!!elem.clearable\"\n (changeEv)=\"elem.change ? onSelectChange(elem, $event) : null\"\n [model]=\"model[elem.key]\"\n (modelChange)=\"onModelChange($event, elem.key)\"\n ></osl-select>\n </div>\n }\n\n @case (\"radio\") {\n <div [class]=\"'col-md-'+elem.columns+' mt-2'\" [attr.data-field-key]=\"elem.key\">\n <osl-radio\n [label]=\"elem.label\"\n [skeletonLoading]=\"skeletonLoading\"\n [skeletonTheme]=\"skeletonTheme\"\n [disabled]=\"elem.disabledIf ? elem.disabledIf(model) : !!elem.disabled\"\n [required]=\"elem.requiredIf ? elem.requiredIf(model) : !!elem.required\"\n [datasource]=\"elem.datasource || []\"\n [displayField]=\"elem.displayField || ''\"\n [valueField]=\"elem.valueField || ''\"\n [inline]=\"!!elem.inline\"\n (changeEv)=\"elem.change ? elem.change(model) : null\"\n [model]=\"model[elem.key]\"\n (modelChange)=\"onModelChange($event, elem.key)\"\n ></osl-radio>\n </div>\n }\n\n @case (\"slide-toggle\") {\n <div [class]=\"'col-md-'+elem.columns+' mt-2'\" [attr.data-field-key]=\"elem.key\">\n <osl-slide-toggle\n [label]=\"elem.label\"\n [skeletonLoading]=\"skeletonLoading\"\n [skeletonTheme]=\"skeletonTheme\"\n [disabled]=\"elem.disabledIf ? elem.disabledIf(model) : !!elem.disabled\"\n [labelPosition]=\"elem.labelPosition || 'after'\"\n [trueLabel]=\"elem.trueLabel || ''\"\n [falseLabel]=\"elem.falseLabel || ''\"\n (changeEv)=\"elem.change ? elem.change(model) : null\"\n [model]=\"model[elem.key]\"\n (modelChange)=\"onModelChange($event, elem.key)\"\n ></osl-slide-toggle>\n </div>\n }\n\n @case (\"autocomplete\") {\n <div [class]=\"'col-md-'+elem.columns+' mt-2'\" [attr.data-field-key]=\"elem.key\">\n <osl-autocomplete\n [label]=\"elem.label\"\n [skeletonLoading]=\"skeletonLoading\"\n [skeletonTheme]=\"skeletonTheme\"\n [disabled]=\"elem.disabledIf ? elem.disabledIf(model) : !!elem.disabled\"\n [required]=\"elem.requiredIf ? elem.requiredIf(model) : !!elem.required\"\n [datasource]=\"elem.datasource || []\"\n [displayField]=\"elem.displayField || ''\"\n [valueField]=\"elem.valueField || ''\"\n [placeholder]=\"elem.autocompletePlaceholder || 'Type to search...'\"\n [loading]=\"elem.loadingIf ? elem.loadingIf(model) : false\"\n (changeEv)=\"onFieldChange(elem, $event)\"\n [(model)]=\"model[elem.key]\"\n [methodName]=\"elem.apiMethod\"\n [service]=\"elem.apiService\"\n [object]=\"model[elem.objectName]\"\n [searchType]=\"elem.searchType\"\n [configMethodName]=\"elem.apiConfigMethod\"\n [isLister]=\"elem.isListerAutocomplete\"\n [apiBody]=\"elem.apiBody\"\n ></osl-autocomplete>\n </div>\n }\n\n @case (\"file-uploader\") {\n <div [class]=\"'col-md-'+elem.columns+' mt-2'\" [attr.data-field-key]=\"elem.key\">\n <osl-file-upload\n [skeletonLoading]=\"skeletonLoading\"\n [skeletonTheme]=\"skeletonTheme\"\n [label]=\"elem.label\"\n [disabled]=\"elem.disabledIf ? elem.disabledIf(model) : !!elem.disabled\"\n [required]=\"elem.requiredIf ? elem.requiredIf(model) : !!elem.required\"\n [accept]=\"elem.accept || ''\"\n [multiple]=\"!!elem.multiple\"\n [maxSize]=\"elem.maxFileSize || 0\"\n (changeEv)=\"elem.change ? elem.change(model) : null\"\n [model]=\"model[elem.key]\"\n (modelChange)=\"onModelChange($event, elem.key)\"\n ></osl-file-upload>\n </div>\n }\n\n @case (\"datepicker\") {\n <div [class]=\"'col-md-'+elem.columns+' mt-2'\" [attr.data-field-key]=\"elem.key\">\n <osl-datepicker\n [skeletonLoading]=\"skeletonLoading\"\n [skeletonTheme]=\"skeletonTheme\"\n [label]=\"elem.label\"\n [disabled]=\"elem.disabledIf ? elem.disabledIf(model) : !!elem.disabled\"\n [required]=\"elem.requiredIf ? elem.requiredIf(model) : !!elem.required\"\n [dateType]=\"elem.dateType || 'date'\"\n [placeholder]=\"elem.placeholder || ''\"\n [minDate]=\"elem.minDateIf ? elem.minDateIf(model) : elem.minDate || ''\"\n [maxDate]=\"elem.maxDateIf ? elem.maxDateIf(model) : elem.maxDate || ''\"\n (changeEv)=\"elem.change ? elem.change(model) : null\"\n [model]=\"model[elem.key]\"\n (modelChange)=\"onModelChange($event, elem.key)\"\n ></osl-datepicker>\n </div>\n }\n\n @case (\"datetimepicker\") {\n <div [class]=\"'col-md-'+elem.columns+' mt-2'\" [attr.data-field-key]=\"elem.key\">\n <osl-datetimepicker\n [skeletonLoading]=\"skeletonLoading\"\n [skeletonTheme]=\"skeletonTheme\"\n [label]=\"elem.label\"\n [disabled]=\"elem.disabledIf ? elem.disabledIf(model) : !!elem.disabled\"\n [required]=\"elem.requiredIf ? elem.requiredIf(model) : !!elem.required\"\n [placeholder]=\"elem.placeholder || ''\"\n [minDatetime]=\"elem.minDatetimeIf ? elem.minDatetimeIf(model) : elem.minDatetime || ''\"\n [maxDatetime]=\"elem.maxDatetimeIf ? elem.maxDatetimeIf(model) : elem.maxDatetime || ''\"\n [format]=\"elem.datetimepickerFormat || 'YYYY-MM-DDTHH:mm'\"\n [showSeconds]=\"!!elem.datetimepickerShowSeconds\"\n [enableMeridian]=\"!!elem.datetimepickerEnableMeridian\"\n (changeEv)=\"elem.change ? elem.change(model) : null\"\n [model]=\"model[elem.key]\"\n (modelChange)=\"onModelChange($event, elem.key)\"\n ></osl-datetimepicker>\n </div>\n }\n\n @case (\"checkbox\") {\n <div [class]=\"'col-md-'+elem.columns+' mt-2'\" [attr.data-field-key]=\"elem.key\">\n <osl-checkbox\n [skeletonLoading]=\"skeletonLoading\"\n [skeletonTheme]=\"skeletonTheme\"\n [label]=\"elem.label\"\n [disabled]=\"elem.disabledIf ? elem.disabledIf(model) : !!elem.disabled\"\n [required]=\"elem.requiredIf ? elem.requiredIf(model) : !!elem.required\"\n [indeterminate]=\"!!elem.indeterminate\"\n (changeEv)=\"elem.change ? elem.change(model) : null\"\n [model]=\"model[elem.key]\"\n (modelChange)=\"onModelChange($event, elem.key)\"\n ></osl-checkbox>\n </div>\n }\n\n @case (\"button\") {\n <div [class]=\"'col-md-'+elem.columns+' mt-2'\" [attr.data-field-key]=\"elem.key\">\n <osl-button\n [label]=\"elem.label\"\n [loading]=\"elem.loadingIf ? elem.loadingIf(model) : false\"\n variant=\"secondary\"\n (clickEv)=\"elem.change ? elem.change(model) : null\"\n ></osl-button>\n </div>\n }\n\n @case (\"fieldset\") {\n <div [class]=\"'col-md-'+elem.columns+' mt-3'\">\n <fieldset class=\"osl-fieldset\">\n @if(elem.label) {\n <legend class=\"osl-fieldset-legend\" [oslSkeleton]=\"skeletonLoading\" [oslSkeletonTheme]=\"skeletonTheme\">\n <span class=\"osl-fieldset-legend__text\">{{ elem.label }}</span>\n </legend>\n }\n <div class=\"row w-100 osl-fieldset-body\">\n @for(innerElem of elem.rows; track innerElem) {\n @if(!(innerElem.hideIf ? innerElem.hideIf(model) : innerElem.hide)) {\n <ng-container *ngTemplateOutlet=\"formField; context: { $implicit: innerElem }\"></ng-container>\n }\n }\n </div>\n </fieldset>\n </div>\n }\n\n @case (\"templateRef\"){\n <div [class]=\"'col-md-'+elem.columns+' mt-3'\">\n <ng-container *ngTemplateOutlet=\"elem.templateRef; context: { $implicit: elem}\"></ng-container>\n </div>\n }\n\n @case (\"spacer\") {\n <div [class]=\"'col-md-'+elem.columns+' mt-2'\" [attr.data-field-key]=\"elem.key\">\n </div>\n }\n\n }\n }\n</ng-template>\n", styles: [".osl-fieldset{border:1.5px solid var(--osl-border-color, #e5e7eb);border-radius:10px;padding:0 16px 16px;margin:0;background:linear-gradient(135deg,#f9fafb,#fff);box-shadow:0 1px 4px #0000000d;position:relative;transition:box-shadow .2s}.osl-fieldset:focus-within{box-shadow:0 0 0 3px #6366f114,0 2px 8px #0000000f;border-color:var(--osl-primary, #6366f1)}.osl-fieldset-legend{padding:0 6px;margin-left:8px;line-height:1;float:none;width:auto}.osl-fieldset-legend__text{display:inline-flex;align-items:center;gap:6px;font-size:12px;font-weight:600;letter-spacing:.04em;text-transform:uppercase;background:#fff;padding:2px 10px;border:1.5px solid var(--osl-border-color, #e5e7eb);box-shadow:0 1px 3px #6366f11a}.osl-fieldset-body{margin-top:4px}\n"] }]
|
|
2511
2949
|
}], ctorParameters: () => [{ type: i0.ChangeDetectorRef }], propDecorators: { elements: [{
|
|
2512
2950
|
type: Input,
|
|
2513
2951
|
args: ['elements']
|
|
@@ -2524,444 +2962,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImpor
|
|
|
2524
2962
|
type: Output
|
|
2525
2963
|
}] } });
|
|
2526
2964
|
|
|
2527
|
-
// ─── Date Utilities ───────────────────────────────────────────────────────────
|
|
2528
|
-
const MONTH_NAMES_SHORT = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'];
|
|
2529
|
-
const MONTH_NAMES_FULL = ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'];
|
|
2530
|
-
const DAY_NAMES_SHORT = ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'];
|
|
2531
|
-
const DAY_NAMES_FULL = ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'];
|
|
2532
|
-
function pad(n) {
|
|
2533
|
-
return String(n).padStart(2, '0');
|
|
2534
|
-
}
|
|
2535
|
-
/** Returns the current date and time. */
|
|
2536
|
-
function now() {
|
|
2537
|
-
return new Date();
|
|
2538
|
-
}
|
|
2539
|
-
/** Returns today's date with time set to midnight. */
|
|
2540
|
-
function today() {
|
|
2541
|
-
return startOfDay(new Date());
|
|
2542
|
-
}
|
|
2543
|
-
/** Returns true if the value is a valid Date object. */
|
|
2544
|
-
function isValidDate$1(value) {
|
|
2545
|
-
return value instanceof Date && !isNaN(value.getTime());
|
|
2546
|
-
}
|
|
2547
|
-
/**
|
|
2548
|
-
* Formats a Date using a pattern string.
|
|
2549
|
-
* Tokens: YYYY, YY, MM, M, DD, D, HH, H, mm, m, ss, s,
|
|
2550
|
-
* MMM (short month), MMMM (full month),
|
|
2551
|
-
* ddd (short day), dddd (full day).
|
|
2552
|
-
*/
|
|
2553
|
-
function formatDate(date, pattern) {
|
|
2554
|
-
const d = new Date(date);
|
|
2555
|
-
if (!isValidDate$1(d))
|
|
2556
|
-
return '';
|
|
2557
|
-
const year = d.getFullYear();
|
|
2558
|
-
const month = d.getMonth();
|
|
2559
|
-
const day = d.getDate();
|
|
2560
|
-
const hours = d.getHours();
|
|
2561
|
-
const mins = d.getMinutes();
|
|
2562
|
-
const secs = d.getSeconds();
|
|
2563
|
-
const dayOfWeek = d.getDay();
|
|
2564
|
-
return pattern
|
|
2565
|
-
.replace('YYYY', String(year))
|
|
2566
|
-
.replace('YY', String(year).slice(-2))
|
|
2567
|
-
.replace('MMMM', MONTH_NAMES_FULL[month])
|
|
2568
|
-
.replace('MMM', MONTH_NAMES_SHORT[month])
|
|
2569
|
-
.replace('MM', pad(month + 1))
|
|
2570
|
-
.replace('M', String(month + 1))
|
|
2571
|
-
.replace('dddd', DAY_NAMES_FULL[dayOfWeek])
|
|
2572
|
-
.replace('ddd', DAY_NAMES_SHORT[dayOfWeek])
|
|
2573
|
-
.replace('DD', pad(day))
|
|
2574
|
-
.replace('D', String(day))
|
|
2575
|
-
.replace('HH', pad(hours))
|
|
2576
|
-
.replace('H', String(hours))
|
|
2577
|
-
.replace('mm', pad(mins))
|
|
2578
|
-
.replace('m', String(mins))
|
|
2579
|
-
.replace('ss', pad(secs))
|
|
2580
|
-
.replace('s', String(secs));
|
|
2581
|
-
}
|
|
2582
|
-
/** Returns date as `YYYY-MM-DD`. */
|
|
2583
|
-
function toDateOnly(date) {
|
|
2584
|
-
return formatDate(date, 'YYYY-MM-DD');
|
|
2585
|
-
}
|
|
2586
|
-
/** Returns the ISO 8601 string for a date. */
|
|
2587
|
-
function toISOString(date) {
|
|
2588
|
-
return date.toISOString();
|
|
2589
|
-
}
|
|
2590
|
-
/** Returns a new date with `days` added. */
|
|
2591
|
-
function addDays(date, days) {
|
|
2592
|
-
const result = new Date(date);
|
|
2593
|
-
result.setDate(result.getDate() + days);
|
|
2594
|
-
return result;
|
|
2595
|
-
}
|
|
2596
|
-
/** Returns a new date with `months` added. */
|
|
2597
|
-
function addMonths(date, months) {
|
|
2598
|
-
const result = new Date(date);
|
|
2599
|
-
result.setMonth(result.getMonth() + months);
|
|
2600
|
-
return result;
|
|
2601
|
-
}
|
|
2602
|
-
/** Returns a new date with `years` added. */
|
|
2603
|
-
function addYears(date, years) {
|
|
2604
|
-
const result = new Date(date);
|
|
2605
|
-
result.setFullYear(result.getFullYear() + years);
|
|
2606
|
-
return result;
|
|
2607
|
-
}
|
|
2608
|
-
/** Returns a new date with `hours` added. */
|
|
2609
|
-
function addHours(date, hours) {
|
|
2610
|
-
return new Date(date.getTime() + hours * 3_600_000);
|
|
2611
|
-
}
|
|
2612
|
-
/** Returns a new date with `minutes` added. */
|
|
2613
|
-
function addMinutes(date, minutes) {
|
|
2614
|
-
return new Date(date.getTime() + minutes * 60_000);
|
|
2615
|
-
}
|
|
2616
|
-
/** Returns a new date with `days` subtracted. */
|
|
2617
|
-
function subtractDays(date, days) {
|
|
2618
|
-
return addDays(date, -days);
|
|
2619
|
-
}
|
|
2620
|
-
/** Returns a new date with `months` subtracted. */
|
|
2621
|
-
function subtractMonths(date, months) {
|
|
2622
|
-
return addMonths(date, -months);
|
|
2623
|
-
}
|
|
2624
|
-
/** Returns a new date with `years` subtracted. */
|
|
2625
|
-
function subtractYears(date, years) {
|
|
2626
|
-
return addYears(date, -years);
|
|
2627
|
-
}
|
|
2628
|
-
/** Returns the absolute difference in whole days between two dates. */
|
|
2629
|
-
function diffInDays(date1, date2) {
|
|
2630
|
-
return Math.abs(Math.floor((date1.getTime() - date2.getTime()) / 86_400_000));
|
|
2631
|
-
}
|
|
2632
|
-
/** Returns the absolute difference in whole months between two dates. */
|
|
2633
|
-
function diffInMonths(date1, date2) {
|
|
2634
|
-
return Math.abs((date1.getFullYear() - date2.getFullYear()) * 12 +
|
|
2635
|
-
(date1.getMonth() - date2.getMonth()));
|
|
2636
|
-
}
|
|
2637
|
-
/** Returns the absolute difference in whole years between two dates. */
|
|
2638
|
-
function diffInYears(date1, date2) {
|
|
2639
|
-
return Math.abs(date1.getFullYear() - date2.getFullYear());
|
|
2640
|
-
}
|
|
2641
|
-
/** Returns the difference in minutes between two dates (date1 - date2). */
|
|
2642
|
-
function diffInMinutes(date1, date2) {
|
|
2643
|
-
return Math.floor((date1.getTime() - date2.getTime()) / 60_000);
|
|
2644
|
-
}
|
|
2645
|
-
/** Returns true if date1 is strictly before date2. */
|
|
2646
|
-
function isBefore(date1, date2) {
|
|
2647
|
-
return date1.getTime() < date2.getTime();
|
|
2648
|
-
}
|
|
2649
|
-
/** Returns true if date1 is strictly after date2. */
|
|
2650
|
-
function isAfter(date1, date2) {
|
|
2651
|
-
return date1.getTime() > date2.getTime();
|
|
2652
|
-
}
|
|
2653
|
-
/** Returns true if both dates fall on the same calendar day. */
|
|
2654
|
-
function isSameDay(date1, date2) {
|
|
2655
|
-
return (date1.getFullYear() === date2.getFullYear() &&
|
|
2656
|
-
date1.getMonth() === date2.getMonth() &&
|
|
2657
|
-
date1.getDate() === date2.getDate());
|
|
2658
|
-
}
|
|
2659
|
-
/** Returns true if the date falls on a Saturday or Sunday. */
|
|
2660
|
-
function isWeekend(date) {
|
|
2661
|
-
return date.getDay() === 0 || date.getDay() === 6;
|
|
2662
|
-
}
|
|
2663
|
-
/** Returns true if the date is today. */
|
|
2664
|
-
function isToday(date) {
|
|
2665
|
-
return isSameDay(date, new Date());
|
|
2666
|
-
}
|
|
2667
|
-
/** Returns true if the date falls in the past (before now). */
|
|
2668
|
-
function isPast(date) {
|
|
2669
|
-
return date.getTime() < Date.now();
|
|
2670
|
-
}
|
|
2671
|
-
/** Returns true if the date falls in the future (after now). */
|
|
2672
|
-
function isFuture(date) {
|
|
2673
|
-
return date.getTime() > Date.now();
|
|
2674
|
-
}
|
|
2675
|
-
/** Returns the date with time set to 00:00:00.000. */
|
|
2676
|
-
function startOfDay(date) {
|
|
2677
|
-
const result = new Date(date);
|
|
2678
|
-
result.setHours(0, 0, 0, 0);
|
|
2679
|
-
return result;
|
|
2680
|
-
}
|
|
2681
|
-
/** Returns the date with time set to 23:59:59.999. */
|
|
2682
|
-
function endOfDay(date) {
|
|
2683
|
-
const result = new Date(date);
|
|
2684
|
-
result.setHours(23, 59, 59, 999);
|
|
2685
|
-
return result;
|
|
2686
|
-
}
|
|
2687
|
-
/** Returns the first day of the month (time 00:00:00.000). */
|
|
2688
|
-
function startOfMonth(date) {
|
|
2689
|
-
return new Date(date.getFullYear(), date.getMonth(), 1);
|
|
2690
|
-
}
|
|
2691
|
-
/** Returns the last day of the month (time 23:59:59.999). */
|
|
2692
|
-
function endOfMonth(date) {
|
|
2693
|
-
const result = new Date(date.getFullYear(), date.getMonth() + 1, 0);
|
|
2694
|
-
result.setHours(23, 59, 59, 999);
|
|
2695
|
-
return result;
|
|
2696
|
-
}
|
|
2697
|
-
/** Returns the first day of the year (Jan 1, 00:00:00.000). */
|
|
2698
|
-
function startOfYear(date) {
|
|
2699
|
-
return new Date(date.getFullYear(), 0, 1);
|
|
2700
|
-
}
|
|
2701
|
-
/** Returns the last day of the year (Dec 31, 23:59:59.999). */
|
|
2702
|
-
function endOfYear(date) {
|
|
2703
|
-
const result = new Date(date.getFullYear(), 11, 31);
|
|
2704
|
-
result.setHours(23, 59, 59, 999);
|
|
2705
|
-
return result;
|
|
2706
|
-
}
|
|
2707
|
-
/** Calculates the age in years from a birth date. */
|
|
2708
|
-
function getAge(birthDate) {
|
|
2709
|
-
const n = new Date();
|
|
2710
|
-
let age = n.getFullYear() - birthDate.getFullYear();
|
|
2711
|
-
const monthDiff = n.getMonth() - birthDate.getMonth();
|
|
2712
|
-
if (monthDiff < 0 || (monthDiff === 0 && n.getDate() < birthDate.getDate()))
|
|
2713
|
-
age--;
|
|
2714
|
-
return age;
|
|
2715
|
-
}
|
|
2716
|
-
/** Returns the number of days in a given month (0-based month). */
|
|
2717
|
-
function daysInMonth(year, month) {
|
|
2718
|
-
return new Date(year, month + 1, 0).getDate();
|
|
2719
|
-
}
|
|
2720
|
-
/** Returns true if the given year is a leap year. */
|
|
2721
|
-
function isLeapYear(year) {
|
|
2722
|
-
return (year % 4 === 0 && year % 100 !== 0) || year % 400 === 0;
|
|
2723
|
-
}
|
|
2724
|
-
/**
|
|
2725
|
-
* Returns a human-friendly relative time string.
|
|
2726
|
-
* @example timeAgo(new Date(Date.now() - 3600_000)) → '1 hour ago'
|
|
2727
|
-
*/
|
|
2728
|
-
function timeAgo(date) {
|
|
2729
|
-
const seconds = Math.floor((Date.now() - date.getTime()) / 1000);
|
|
2730
|
-
const abs = Math.abs(seconds);
|
|
2731
|
-
const future = seconds < 0;
|
|
2732
|
-
const intervals = [
|
|
2733
|
-
[31_536_000, 'year'],
|
|
2734
|
-
[2_592_000, 'month'],
|
|
2735
|
-
[604_800, 'week'],
|
|
2736
|
-
[86_400, 'day'],
|
|
2737
|
-
[3_600, 'hour'],
|
|
2738
|
-
[60, 'minute'],
|
|
2739
|
-
[1, 'second'],
|
|
2740
|
-
];
|
|
2741
|
-
for (const [secs, label] of intervals) {
|
|
2742
|
-
const count = Math.floor(abs / secs);
|
|
2743
|
-
if (count >= 1) {
|
|
2744
|
-
const unit = count === 1 ? label : `${label}s`;
|
|
2745
|
-
return future ? `in ${count} ${unit}` : `${count} ${unit} ago`;
|
|
2746
|
-
}
|
|
2747
|
-
}
|
|
2748
|
-
return 'just now';
|
|
2749
|
-
}
|
|
2750
|
-
/** Returns the ISO week number (1–53) for the given date. */
|
|
2751
|
-
function getWeekNumber(date) {
|
|
2752
|
-
const d = new Date(Date.UTC(date.getFullYear(), date.getMonth(), date.getDate()));
|
|
2753
|
-
d.setUTCDate(d.getUTCDate() + 4 - (d.getUTCDay() || 7));
|
|
2754
|
-
const yearStart = new Date(Date.UTC(d.getUTCFullYear(), 0, 1));
|
|
2755
|
-
return Math.ceil((((d.getTime() - yearStart.getTime()) / 86_400_000) + 1) / 7);
|
|
2756
|
-
}
|
|
2757
|
-
/** Returns the next weekday (Mon–Fri) after the given date. */
|
|
2758
|
-
function nextWorkday(date) {
|
|
2759
|
-
const result = addDays(date, 1);
|
|
2760
|
-
while (isWeekend(result)) {
|
|
2761
|
-
result.setDate(result.getDate() + 1);
|
|
2762
|
-
}
|
|
2763
|
-
return result;
|
|
2764
|
-
}
|
|
2765
|
-
/** Returns true if a date falls within the range [start, end] (inclusive). */
|
|
2766
|
-
function inRange$2(date, start, end) {
|
|
2767
|
-
return date >= start && date <= end;
|
|
2768
|
-
}
|
|
2769
|
-
/** Parses a `YYYY-MM-DD` string and returns a local-midnight Date or null. */
|
|
2770
|
-
function parseDate(dateStr) {
|
|
2771
|
-
const match = /^(\d{4})-(\d{2})-(\d{2})$/.exec(dateStr);
|
|
2772
|
-
if (!match)
|
|
2773
|
-
return null;
|
|
2774
|
-
const [, y, mo, d] = match.map(Number);
|
|
2775
|
-
const result = new Date(y, mo - 1, d);
|
|
2776
|
-
return isValidDate$1(result) ? result : null;
|
|
2777
|
-
}
|
|
2778
|
-
function localeDate(dateStr) {
|
|
2779
|
-
const date = new Date(dateStr);
|
|
2780
|
-
date.toLocaleString('en-US');
|
|
2781
|
-
}
|
|
2782
|
-
|
|
2783
|
-
var date_util = /*#__PURE__*/Object.freeze({
|
|
2784
|
-
__proto__: null,
|
|
2785
|
-
addDays: addDays,
|
|
2786
|
-
addHours: addHours,
|
|
2787
|
-
addMinutes: addMinutes,
|
|
2788
|
-
addMonths: addMonths,
|
|
2789
|
-
addYears: addYears,
|
|
2790
|
-
daysInMonth: daysInMonth,
|
|
2791
|
-
diffInDays: diffInDays,
|
|
2792
|
-
diffInMinutes: diffInMinutes,
|
|
2793
|
-
diffInMonths: diffInMonths,
|
|
2794
|
-
diffInYears: diffInYears,
|
|
2795
|
-
endOfDay: endOfDay,
|
|
2796
|
-
endOfMonth: endOfMonth,
|
|
2797
|
-
endOfYear: endOfYear,
|
|
2798
|
-
formatDate: formatDate,
|
|
2799
|
-
getAge: getAge,
|
|
2800
|
-
getWeekNumber: getWeekNumber,
|
|
2801
|
-
inRange: inRange$2,
|
|
2802
|
-
isAfter: isAfter,
|
|
2803
|
-
isBefore: isBefore,
|
|
2804
|
-
isFuture: isFuture,
|
|
2805
|
-
isLeapYear: isLeapYear,
|
|
2806
|
-
isPast: isPast,
|
|
2807
|
-
isSameDay: isSameDay,
|
|
2808
|
-
isToday: isToday,
|
|
2809
|
-
isValidDate: isValidDate$1,
|
|
2810
|
-
isWeekend: isWeekend,
|
|
2811
|
-
localeDate: localeDate,
|
|
2812
|
-
nextWorkday: nextWorkday,
|
|
2813
|
-
now: now,
|
|
2814
|
-
parseDate: parseDate,
|
|
2815
|
-
startOfDay: startOfDay,
|
|
2816
|
-
startOfMonth: startOfMonth,
|
|
2817
|
-
startOfYear: startOfYear,
|
|
2818
|
-
subtractDays: subtractDays,
|
|
2819
|
-
subtractMonths: subtractMonths,
|
|
2820
|
-
subtractYears: subtractYears,
|
|
2821
|
-
timeAgo: timeAgo,
|
|
2822
|
-
toDateOnly: toDateOnly,
|
|
2823
|
-
toISOString: toISOString,
|
|
2824
|
-
today: today
|
|
2825
|
-
});
|
|
2826
|
-
|
|
2827
|
-
class OslDatetimepicker {
|
|
2828
|
-
dtNativeInput;
|
|
2829
|
-
label = '';
|
|
2830
|
-
required = false;
|
|
2831
|
-
disabled = false;
|
|
2832
|
-
dateModel = null;
|
|
2833
|
-
set model(val) {
|
|
2834
|
-
this.dateModel = this._parseToDate(val);
|
|
2835
|
-
this._scheduleDisplayUpdate();
|
|
2836
|
-
}
|
|
2837
|
-
placeholder = '';
|
|
2838
|
-
minDate = null;
|
|
2839
|
-
maxDate = null;
|
|
2840
|
-
set minDatetime(val) {
|
|
2841
|
-
this.minDate = this._parseToDate(val);
|
|
2842
|
-
}
|
|
2843
|
-
set maxDatetime(val) {
|
|
2844
|
-
this.maxDate = this._parseToDate(val);
|
|
2845
|
-
}
|
|
2846
|
-
/** Emitted string format. Tokens: YYYY MM DD HH mm ss ddd dddd etc. Default: 'YYYY-MM-DDTHH:mm' */
|
|
2847
|
-
format = 'YYYY-MM-DDTHH:mm';
|
|
2848
|
-
/** Display format shown inside the input field. Default: 'ddd DD/MM/YYYY HH:mm' → Sun 18/01/2026 19:18 */
|
|
2849
|
-
set displayFormatInput(val) {
|
|
2850
|
-
this._displayFormat = val || 'ddd DD/MM/YYYY HH:mm';
|
|
2851
|
-
this._scheduleDisplayUpdate();
|
|
2852
|
-
}
|
|
2853
|
-
_displayFormat = 'ddd DD/MM/YYYY HH:mm';
|
|
2854
|
-
showSeconds = false;
|
|
2855
|
-
enableMeridian = false;
|
|
2856
|
-
skeletonLoading = false;
|
|
2857
|
-
skeletonTheme = 'light';
|
|
2858
|
-
modelChange = new EventEmitter();
|
|
2859
|
-
changeEv = new EventEmitter();
|
|
2860
|
-
ngAfterViewInit() {
|
|
2861
|
-
this._updateDisplay();
|
|
2862
|
-
}
|
|
2863
|
-
onDateChange(date) {
|
|
2864
|
-
this.dateModel = date;
|
|
2865
|
-
this._updateDisplay();
|
|
2866
|
-
const str = date ? formatDate(date, this.format) : '';
|
|
2867
|
-
this.modelChange.emit(str);
|
|
2868
|
-
this.changeEv.emit(str);
|
|
2869
|
-
}
|
|
2870
|
-
_updateDisplay() {
|
|
2871
|
-
if (!this.dtNativeInput)
|
|
2872
|
-
return;
|
|
2873
|
-
this.dtNativeInput.nativeElement.value =
|
|
2874
|
-
this.dateModel ? formatDate(this.dateModel, this._displayFormat) : '';
|
|
2875
|
-
}
|
|
2876
|
-
_scheduleDisplayUpdate() {
|
|
2877
|
-
setTimeout(() => this._updateDisplay());
|
|
2878
|
-
}
|
|
2879
|
-
_parseToDate(val) {
|
|
2880
|
-
if (!val)
|
|
2881
|
-
return null;
|
|
2882
|
-
const d = new Date(val);
|
|
2883
|
-
return isNaN(d.getTime()) ? null : d;
|
|
2884
|
-
}
|
|
2885
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: OslDatetimepicker, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
2886
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.9", type: OslDatetimepicker, isStandalone: false, selector: "osl-datetimepicker", inputs: { label: "label", required: "required", disabled: "disabled", model: "model", placeholder: "placeholder", minDatetime: "minDatetime", maxDatetime: "maxDatetime", format: "format", displayFormatInput: ["displayFormat", "displayFormatInput"], showSeconds: "showSeconds", enableMeridian: "enableMeridian", skeletonLoading: "skeletonLoading", skeletonTheme: "skeletonTheme" }, outputs: { modelChange: "modelChange", changeEv: "changeEv" }, providers: [
|
|
2887
|
-
{
|
|
2888
|
-
provide: MAT_DATE_FORMATS,
|
|
2889
|
-
useValue: {
|
|
2890
|
-
parse: {
|
|
2891
|
-
dateInput: 'DD-MMM-YYYY hh:mm a',
|
|
2892
|
-
},
|
|
2893
|
-
display: {
|
|
2894
|
-
dateInput: 'DD-MMM-YYYY hh:mm a',
|
|
2895
|
-
monthYearLabel: 'MMM YYYY', dateA11yLabel: 'LL', monthYearA11yLabel: 'MMMM YYYY',
|
|
2896
|
-
}
|
|
2897
|
-
}
|
|
2898
|
-
}
|
|
2899
|
-
], viewQueries: [{ propertyName: "dtNativeInput", first: true, predicate: ["dtNativeInput"], descendants: true }], ngImport: i0, template: "<div class=\"d-flex flex-column\">\n @if (label) {\n <div [oslSkeleton]=\"skeletonLoading\" [oslSkeletonTheme]=\"skeletonTheme\">\n <label class=\"label\" [class.txt-clr-red]=\"dtField.touched && dtField.invalid\">\n {{label}} <span class=\"txt-clr-red\">{{required ? '*' : ''}}</span>\n </label>\n </div>\n }\n <div class=\"input-wrapper\" [oslSkeleton]=\"skeletonLoading\" [oslSkeletonTheme]=\"skeletonTheme\">\n <input\n class=\"dt-input\"\n [ngxMatDatetimePicker]=\"picker\"\n [ngModel]=\"dateModel\"\n (ngModelChange)=\"onDateChange($event)\"\n [required]=\"required\"\n [disabled]=\"disabled\"\n [min]=\"minDate\"\n [max]=\"maxDate\"\n [placeholder]=\"placeholder\"\n [class.error]=\"dtField.touched && dtField.invalid\"\n #dtField=\"ngModel\"\n readonly\n />\n <button\n type=\"button\"\n class=\"dt-icon-btn\"\n (click)=\"picker.open()\"\n [disabled]=\"disabled\"\n tabindex=\"-1\">\n <svg viewBox=\"0 0 20 20\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\n <rect x=\"3\" y=\"4\" width=\"14\" height=\"14\" rx=\"2\"/>\n <line x1=\"3\" y1=\"8\" x2=\"17\" y2=\"8\"/>\n <line x1=\"7\" y1=\"2\" x2=\"7\" y2=\"6\"/>\n <line x1=\"13\" y1=\"2\" x2=\"13\" y2=\"6\"/>\n </svg>\n </button>\n <ngx-mat-datetime-picker\n #picker\n [showSpinners]=\"true\"\n [showSeconds]=\"showSeconds\"\n [enableMeridian]=\"enableMeridian\">\n </ngx-mat-datetime-picker>\n </div>\n @if (dtField.touched && dtField.invalid && required) {\n <mat-hint class=\"hint\">{{label}} is Required!</mat-hint>\n }\n</div>\n", styles: [".label{font-size:var(--osl-label-font-size);margin-bottom:5px}.txt-clr-red{color:var(--osl-error-color)}.hint{color:var(--osl-error-color);margin-top:2px;font-size:var(--osl-hint-font-size)}.input-wrapper{position:relative;display:flex;align-items:center}.dt-icon-btn{position:absolute;right:7px;top:50%;transform:translateY(-50%);width:22px;height:22px;padding:0;border:none;background:transparent;cursor:pointer;color:#9ca3af;display:flex;align-items:center;justify-content:center;transition:color .15s;border-radius:4px}.dt-icon-btn svg{width:16px;height:16px;display:block}.dt-icon-btn:hover:not(:disabled){color:var(--osl-focus-border-color)}.dt-icon-btn:disabled{opacity:.35;cursor:not-allowed}.dt-input{height:var(--osl-control-height);width:100%;border-radius:var(--osl-border-radius);outline:none;border:1px solid var(--osl-border-color);padding:0 38px 0 10px;font-size:var(--osl-text-font-size);font-family:inherit;color:#333;background-color:#fff;transition:border-color .2s,box-shadow .2s;letter-spacing:.01em;box-sizing:border-box}.dt-input::placeholder{color:#bbb}.dt-input:hover:not(:disabled){border-color:var(--osl-focus-border-color)}.dt-input:focus{border-color:var(--osl-focus-border-color);box-shadow:0 0 0 3px var(--osl-focus-shadow, rgba(99, 102, 241, .14))}.dt-input:disabled{background-color:#f5f5f5;cursor:not-allowed;opacity:.7}.dt-input.error{border-color:var(--osl-error-color)}.dt-input.error:focus{box-shadow:0 0 0 3px var(--osl-error-shadow, rgba(220, 38, 38, .14))}\n"], dependencies: [{ kind: "directive", type: i1$1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1$1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$1.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i1$1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i2$2.MatHint, selector: "mat-hint", inputs: ["align", "id"] }, { kind: "directive", type: OslSkeletonDirective, selector: "[oslSkeleton]", inputs: ["oslSkeleton", "oslSkeletonType", "oslSkeletonAnimation", "oslSkeletonTheme", "oslSkeletonColor", "oslSkeletonHighlight", "oslSkeletonRadius", "oslSkeletonRows", "oslSkeletonRowGap", "oslSkeletonZIndex", "oslSkeletonDelay", "oslSkeletonDuration", "oslSkeletonMinHeight", "oslSkeletonForceReread", "oslSkeletonCircleSize", "oslSkeletonListItems", "oslSkeletonTableRows", "oslSkeletonTableCols", "oslSkeletonCardLines", "oslSkeletonBgColor"] }, { kind: "component", type: i4.NgxMatDatetimepicker, selector: "ngx-mat-datetime-picker", exportAs: ["ngxMatDatetimePicker"] }, { kind: "directive", type: i4.NgxMatDatepickerInput, selector: "input[ngxMatDatetimePicker]", inputs: ["ngxMatDatetimePicker", "min", "max", "matDatepickerFilter"], exportAs: ["ngxMatDatepickerInput"] }] });
|
|
2900
|
-
}
|
|
2901
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: OslDatetimepicker, decorators: [{
|
|
2902
|
-
type: Component,
|
|
2903
|
-
args: [{ selector: 'osl-datetimepicker', standalone: false, providers: [
|
|
2904
|
-
{
|
|
2905
|
-
provide: MAT_DATE_FORMATS,
|
|
2906
|
-
useValue: {
|
|
2907
|
-
parse: {
|
|
2908
|
-
dateInput: 'DD-MMM-YYYY hh:mm a',
|
|
2909
|
-
},
|
|
2910
|
-
display: {
|
|
2911
|
-
dateInput: 'DD-MMM-YYYY hh:mm a',
|
|
2912
|
-
monthYearLabel: 'MMM YYYY', dateA11yLabel: 'LL', monthYearA11yLabel: 'MMMM YYYY',
|
|
2913
|
-
}
|
|
2914
|
-
}
|
|
2915
|
-
}
|
|
2916
|
-
], template: "<div class=\"d-flex flex-column\">\n @if (label) {\n <div [oslSkeleton]=\"skeletonLoading\" [oslSkeletonTheme]=\"skeletonTheme\">\n <label class=\"label\" [class.txt-clr-red]=\"dtField.touched && dtField.invalid\">\n {{label}} <span class=\"txt-clr-red\">{{required ? '*' : ''}}</span>\n </label>\n </div>\n }\n <div class=\"input-wrapper\" [oslSkeleton]=\"skeletonLoading\" [oslSkeletonTheme]=\"skeletonTheme\">\n <input\n class=\"dt-input\"\n [ngxMatDatetimePicker]=\"picker\"\n [ngModel]=\"dateModel\"\n (ngModelChange)=\"onDateChange($event)\"\n [required]=\"required\"\n [disabled]=\"disabled\"\n [min]=\"minDate\"\n [max]=\"maxDate\"\n [placeholder]=\"placeholder\"\n [class.error]=\"dtField.touched && dtField.invalid\"\n #dtField=\"ngModel\"\n readonly\n />\n <button\n type=\"button\"\n class=\"dt-icon-btn\"\n (click)=\"picker.open()\"\n [disabled]=\"disabled\"\n tabindex=\"-1\">\n <svg viewBox=\"0 0 20 20\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\n <rect x=\"3\" y=\"4\" width=\"14\" height=\"14\" rx=\"2\"/>\n <line x1=\"3\" y1=\"8\" x2=\"17\" y2=\"8\"/>\n <line x1=\"7\" y1=\"2\" x2=\"7\" y2=\"6\"/>\n <line x1=\"13\" y1=\"2\" x2=\"13\" y2=\"6\"/>\n </svg>\n </button>\n <ngx-mat-datetime-picker\n #picker\n [showSpinners]=\"true\"\n [showSeconds]=\"showSeconds\"\n [enableMeridian]=\"enableMeridian\">\n </ngx-mat-datetime-picker>\n </div>\n @if (dtField.touched && dtField.invalid && required) {\n <mat-hint class=\"hint\">{{label}} is Required!</mat-hint>\n }\n</div>\n", styles: [".label{font-size:var(--osl-label-font-size);margin-bottom:5px}.txt-clr-red{color:var(--osl-error-color)}.hint{color:var(--osl-error-color);margin-top:2px;font-size:var(--osl-hint-font-size)}.input-wrapper{position:relative;display:flex;align-items:center}.dt-icon-btn{position:absolute;right:7px;top:50%;transform:translateY(-50%);width:22px;height:22px;padding:0;border:none;background:transparent;cursor:pointer;color:#9ca3af;display:flex;align-items:center;justify-content:center;transition:color .15s;border-radius:4px}.dt-icon-btn svg{width:16px;height:16px;display:block}.dt-icon-btn:hover:not(:disabled){color:var(--osl-focus-border-color)}.dt-icon-btn:disabled{opacity:.35;cursor:not-allowed}.dt-input{height:var(--osl-control-height);width:100%;border-radius:var(--osl-border-radius);outline:none;border:1px solid var(--osl-border-color);padding:0 38px 0 10px;font-size:var(--osl-text-font-size);font-family:inherit;color:#333;background-color:#fff;transition:border-color .2s,box-shadow .2s;letter-spacing:.01em;box-sizing:border-box}.dt-input::placeholder{color:#bbb}.dt-input:hover:not(:disabled){border-color:var(--osl-focus-border-color)}.dt-input:focus{border-color:var(--osl-focus-border-color);box-shadow:0 0 0 3px var(--osl-focus-shadow, rgba(99, 102, 241, .14))}.dt-input:disabled{background-color:#f5f5f5;cursor:not-allowed;opacity:.7}.dt-input.error{border-color:var(--osl-error-color)}.dt-input.error:focus{box-shadow:0 0 0 3px var(--osl-error-shadow, rgba(220, 38, 38, .14))}\n"] }]
|
|
2917
|
-
}], propDecorators: { dtNativeInput: [{
|
|
2918
|
-
type: ViewChild,
|
|
2919
|
-
args: ['dtNativeInput']
|
|
2920
|
-
}], label: [{
|
|
2921
|
-
type: Input,
|
|
2922
|
-
args: ['label']
|
|
2923
|
-
}], required: [{
|
|
2924
|
-
type: Input,
|
|
2925
|
-
args: ['required']
|
|
2926
|
-
}], disabled: [{
|
|
2927
|
-
type: Input,
|
|
2928
|
-
args: ['disabled']
|
|
2929
|
-
}], model: [{
|
|
2930
|
-
type: Input,
|
|
2931
|
-
args: ['model']
|
|
2932
|
-
}], placeholder: [{
|
|
2933
|
-
type: Input,
|
|
2934
|
-
args: ['placeholder']
|
|
2935
|
-
}], minDatetime: [{
|
|
2936
|
-
type: Input,
|
|
2937
|
-
args: ['minDatetime']
|
|
2938
|
-
}], maxDatetime: [{
|
|
2939
|
-
type: Input,
|
|
2940
|
-
args: ['maxDatetime']
|
|
2941
|
-
}], format: [{
|
|
2942
|
-
type: Input,
|
|
2943
|
-
args: ['format']
|
|
2944
|
-
}], displayFormatInput: [{
|
|
2945
|
-
type: Input,
|
|
2946
|
-
args: ['displayFormat']
|
|
2947
|
-
}], showSeconds: [{
|
|
2948
|
-
type: Input,
|
|
2949
|
-
args: ['showSeconds']
|
|
2950
|
-
}], enableMeridian: [{
|
|
2951
|
-
type: Input,
|
|
2952
|
-
args: ['enableMeridian']
|
|
2953
|
-
}], skeletonLoading: [{
|
|
2954
|
-
type: Input,
|
|
2955
|
-
args: ['skeletonLoading']
|
|
2956
|
-
}], skeletonTheme: [{
|
|
2957
|
-
type: Input,
|
|
2958
|
-
args: ['skeletonTheme']
|
|
2959
|
-
}], modelChange: [{
|
|
2960
|
-
type: Output
|
|
2961
|
-
}], changeEv: [{
|
|
2962
|
-
type: Output
|
|
2963
|
-
}] } });
|
|
2964
|
-
|
|
2965
2965
|
class OslSetupStateService {
|
|
2966
2966
|
_map = new Map();
|
|
2967
2967
|
save(key, state) {
|