@wkly/datetime-picker 11.1.0 → 12.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (30) hide show
  1. package/bundles/wkly-datetime-picker-cdk-overlay.umd.js +26 -4
  2. package/bundles/wkly-datetime-picker-cdk-overlay.umd.js.map +1 -1
  3. package/bundles/wkly-datetime-picker.umd.js +108 -89
  4. package/bundles/wkly-datetime-picker.umd.js.map +1 -1
  5. package/esm2015/cdk-overlay/public-api.js +1 -1
  6. package/esm2015/cdk-overlay/public-api.ngfactory.js +2 -2
  7. package/esm2015/cdk-overlay/public-api.ngsummary.json +1 -1
  8. package/esm2015/cdk-overlay/wkly-datetime-picker-cdk-overlay.js +1 -1
  9. package/esm2015/config.js +2 -2
  10. package/esm2015/config.ngsummary.json +1 -1
  11. package/esm2015/field.component.css.shim.ngstyle.js +2 -2
  12. package/esm2015/field.component.js +2 -2
  13. package/esm2015/field.component.ngfactory.js +1 -1
  14. package/esm2015/picker.component.js +2 -2
  15. package/esm2015/picker.component.ngfactory.js +1 -1
  16. package/esm2015/presentation.js +1 -1
  17. package/esm2015/presentation.ngsummary.json +1 -1
  18. package/esm2015/public-api.js +1 -1
  19. package/esm2015/public-api.ngfactory.js +1 -1
  20. package/esm2015/wkly-datetime-picker.js +1 -1
  21. package/fesm2015/wkly-datetime-picker-cdk-overlay.js +5 -2
  22. package/fesm2015/wkly-datetime-picker-cdk-overlay.js.map +1 -1
  23. package/fesm2015/wkly-datetime-picker.js +7 -5
  24. package/fesm2015/wkly-datetime-picker.js.map +1 -1
  25. package/package.json +8 -8
  26. package/wkly-datetime-picker.metadata.json +1 -1
  27. package/bundles/wkly-datetime-picker-cdk-overlay.umd.min.js +0 -2
  28. package/bundles/wkly-datetime-picker-cdk-overlay.umd.min.js.map +0 -1
  29. package/bundles/wkly-datetime-picker.umd.min.js +0 -2
  30. package/bundles/wkly-datetime-picker.umd.min.js.map +0 -1
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../../node_modules/tslib/tslib.es6.mjs","../../../projects/wkly-datetime-picker.11/src/config.ts","../../../projects/wkly-datetime-picker.11/src/picker.component.ts","../../../projects/wkly-datetime-picker.11/src/presentation.ts","../../../projects/wkly-datetime-picker.11/src/field.component.ts","../../../projects/wkly-datetime-picker.11/src/public-api.ts"],"names":["extendStatics","d","b","Object","setPrototypeOf","__proto__","Array","p","prototype","hasOwnProperty","call","__extends","TypeError","String","__","this","constructor","create","__values","o","s","Symbol","iterator","m","i","length","next","value","done","__read","n","r","e","ar","push","error","SuppressedError","WKLY_CLOCK","InjectionToken","providedIn","factory","now","Date","WKLY_CONFIG","WKLY_LOCALIZATION","WKLY_TRANSLATIONS","_a","_b","_d","_e","_f","kind","_g","_h","_j","_k","_l","_m","_o","_p","_q","_r","_s","_t","_u","_v","_w","_x","DEFAULT_OVERSCAN_WEEKS","_y","_z","_0","_1","_2","_3","_4","EventEmitter","_5","_6","_7","_8","_9","WklyPickerInputsPropertyKeys","Mode","Value","_c","CalendarAdapter","Locale","WeekOffset","ViewportPreset","HourCycle","ShowSeconds","MinuteStep","SecondStep","Min","Max","IsDateDisabled","IsTimeDisabled","RangeValidator","AllowRangeAcrossDisabled","Required","Disabled","WeekLabelMode","WeekLabelFormatter","WeekCacheSize","OverscanWeeks","AriaLabel","AriaDescribedBy","InitialEpochDay","CloseOnBackdrop","Validators","Translations","WklyPickerOutputsPropertyKeys","ValueChange","ValidationChange","Opened","Closed","ViewportChange","ViewModeChange","Directive","args","inputs","outputs","__decorate","Input","Output","WklyDateTimePickerComponent","defaultLocale","defaults","clock","strings","defaultTranslations","platform","host","changeDetector","_this","_super","presentation","viewMode","endView","effectiveLocale","effectiveOffset","effectiveHourCycle","direction","rows","weekdays","drafts","errors","today","focused","anchorWeek","firstWeek","visibleCount","rowHeight","scrollHeight","paddingTop","initialized","compact","baseWeek","firstSupportedDay","lastSupportedDay","firstSupportedWeek","lastSupportedWeek","initialMonth","clipMonth","browser","destroyed","snapPending","onChange","onTouched","validatorChanged","configErrors","pendingValue","emittedValue","manualDateEndpoint","isPlatformBrowser","ngOnInit","initialize","ngOnChanges","changes","keys","JSON","stringify","focus","configure","load","position","check","scrollToEpochDay","initialEpochDay","Math","floor","getTime","undefined","forEach","key","coerceBoolean","locale","test","adapter","WklyGregorianCalendarAdapter","firstDay","getLocaleFirstDayOfWeek","_","resolveWeekOffset","weekOffset","integer","RangeError","includes","preset","visibleWeekCount","extraWeeksBefore","extraWeeksAfter","generator","createWeekGenerator","cacheSize","setSupportedScrollRange","hourCycle","configuredHourCycle","Intl","DateTimeFormat","hour","timeZone","resolvedOptions","hour12","from","formatWeekday","supportedEpochDayRange","first","last","supportedYearRange","firstYear","lastYear","yearOf","day","epochDayToDate","year","low","high","mid","ceil","absoluteWeekOf","clampFirstWeek","week","max","min","ngAfterViewInit","resetScroll","ResizeObserver","observer","nativeElement","clientWidth","row","querySelector","height","parseFloat","getComputedStyle","renderRows","observe","ngOnDestroy","disconnect","scrollEndTimer","clearTimeout","clearCache","t","resolveWklyTranslation","defineProperty","endsWith","startsWith","firstEpochDayOf","formatMonth","formatYear","blank","safe","date","minute","second","present","validation","validateSelection","v","decodeIso","hasDate","epochDay","report","writeValue","registerOnChange","fn","registerOnTouched","setDisabledState","disabled","validate","_control","wkly","registerOnValidatorChange","touched","Promise","resolve","then","changed","emit","result","validateDrafts","selection","mode","isRange","hasTime","showSeconds","required","trackDraft","index","orderDrafts","every","draft","some","unsupportedEpochDay","a","dateToEpochDay","finish","positionOnManualDate","canSubmit","commit","submit","reason","cancel","map","assign","clockDraft","getUTCHours","getUTCMinutes","getUTCSeconds","initializeManualRange","seed","find","initial","markForCheck","toggleView","setTimeout","target","months","getMonths","label","monthCount","draftDayDifference","days","inDays","replace","NumberFormat","useGrouping","format","validateDate","formatDay","join","toggleEndView","view","setDraftDayDifference","field","date_1","month","monthCode","displayHour","period","selected","inRange","dayDisabled","isDateDisabled","endpoint","calendarDate","select","event","delta","shiftKey","preventDefault","options","viewportPreset","calendarMonthBounds","start","end","before","after","align","detectChanges","scroller","scrollTop","round","scroll","element","scheduleSnap","relativeRows","sign","abs","requestedFirst","offset","snapWeek","showFirstWeek","canMoveWeek","moveWeek","overscan","createWeekRows","startWeek","count","firstVisibleWeek","weekLabelMode","weekLabelFormatter","isDayDisabled","firstVisibleAbsoluteWeek","lastVisibleAbsoluteWeek","anchorAbsoluteWeek","trackCell","_i","cell","trackRow","absoluteWeek","focusDay","scrollToAbsoluteWeek","scrollToCalendarDate","scrollToValue","fallback","preventScroll","WklyPickerInputs","Component","selector","template","providers","provide","NG_VALUE_ACCESSOR","useExisting","forwardRef","multi","NG_VALIDATORS","Inject","LOCALE_ID","decorators","type","PLATFORM_ID","ElementRef","ChangeDetectorRef","ViewChild","WklyDateTimePickerDialogService","resolver","injector","app","document","open","trigger","onCancel","backdrop","Error","dialog","createElement","setAttribute","style","padding","border","borderRadius","width","maxWidth","maxHeight","background","component","resolveComponentFactory","instance","appendChild","location","body","attachView","hostView","click","getBoundingClientRect","clientX","left","right","clientY","top","bottom","keydown","controls","querySelectorAll","filter","el","tabIndex","getClientRects","visibility","activeElement","addEventListener","showModal","destroy","removeEventListener","close","detachView","remove","Injectable","ComponentFactoryResolver","Injector","ApplicationRef","Document","DOCUMENT","WklyTriggerBase","ref","subscriptions","change","picker","copy","subscribe","display","changeDetectorRef","blur","unsubscribe","checkValue","INPUT_NAMES_1","INPUT_NAMES","INPUT_NAMES_1_1","name","tagName","readOnly","HostListener","WklyDateTimePickerDialogDirective","service","triggerInjector","exportAs","WklyFieldComponent","hideLabel","previousLabel","nextLabel","step","invalid","labels","valueChange","complete","touchY","touchSteps","touchChanged","typed","inputTimer","wheelTimer","minimumIntegerDigits","typedValue","Number","cancelInput","floorMod","neighbor","stepBy","scrollBy","begin","input","raw","numeric","character","normalizeDigits","signed","digits","normalized","slice","search_1","trim","toLocaleLowerCase","matches","item","stopPropagation","wheel","deltaY","touchStart","touches","touchMove","applyTouchY","touchEnd","changedTouches","y","steps","NgModule","imports","CommonModule","declarations","entryComponents","exports"],"mappings":"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","sourcesContent":["/******************************************************************************\nCopyright (c) Microsoft Corporation.\n\nPermission to use, copy, modify, and/or distribute this software for any\npurpose with or without fee is hereby granted.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THIS SOFTWARE.\n***************************************************************************** */\n/* global Reflect, Promise, SuppressedError, Symbol, Iterator */\n\nvar extendStatics = function(d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n};\n\nexport function __extends(d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n}\n\nexport var __assign = function() {\n __assign = Object.assign || function __assign(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\n }\n return t;\n }\n return __assign.apply(this, arguments);\n}\n\nexport function __rest(s, e) {\n var t = {};\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\n t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\n t[p[i]] = s[p[i]];\n }\n return t;\n}\n\nexport function __decorate(decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n}\n\nexport function __param(paramIndex, decorator) {\n return function (target, key) { decorator(target, key, paramIndex); }\n}\n\nexport function __esDecorate(ctor, descriptorIn, decorators, contextIn, initializers, extraInitializers) {\n function accept(f) { if (f !== void 0 && typeof f !== \"function\") throw new TypeError(\"Function expected\"); return f; }\n var kind = contextIn.kind, key = kind === \"getter\" ? \"get\" : kind === \"setter\" ? \"set\" : \"value\";\n var target = !descriptorIn && ctor ? contextIn[\"static\"] ? ctor : ctor.prototype : null;\n var descriptor = descriptorIn || (target ? Object.getOwnPropertyDescriptor(target, contextIn.name) : {});\n var _, done = false;\n for (var i = decorators.length - 1; i >= 0; i--) {\n var context = {};\n for (var p in contextIn) context[p] = p === \"access\" ? {} : contextIn[p];\n for (var p in contextIn.access) context.access[p] = contextIn.access[p];\n context.addInitializer = function (f) { if (done) throw new TypeError(\"Cannot add initializers after decoration has completed\"); extraInitializers.push(accept(f || null)); };\n var result = (0, decorators[i])(kind === \"accessor\" ? { get: descriptor.get, set: descriptor.set } : descriptor[key], context);\n if (kind === \"accessor\") {\n if (result === void 0) continue;\n if (result === null || typeof result !== \"object\") throw new TypeError(\"Object expected\");\n if (_ = accept(result.get)) descriptor.get = _;\n if (_ = accept(result.set)) descriptor.set = _;\n if (_ = accept(result.init)) initializers.unshift(_);\n }\n else if (_ = accept(result)) {\n if (kind === \"field\") initializers.unshift(_);\n else descriptor[key] = _;\n }\n }\n if (target) Object.defineProperty(target, contextIn.name, descriptor);\n done = true;\n};\n\nexport function __runInitializers(thisArg, initializers, value) {\n var useValue = arguments.length > 2;\n for (var i = 0; i < initializers.length; i++) {\n value = useValue ? initializers[i].call(thisArg, value) : initializers[i].call(thisArg);\n }\n return useValue ? value : void 0;\n};\n\nexport function __propKey(x) {\n return typeof x === \"symbol\" ? x : \"\".concat(x);\n};\n\nexport function __setFunctionName(f, name, prefix) {\n if (typeof name === \"symbol\") name = name.description ? \"[\".concat(name.description, \"]\") : \"\";\n return Object.defineProperty(f, \"name\", { configurable: true, value: prefix ? \"\".concat(prefix, \" \", name) : name });\n};\n\nexport function __metadata(metadataKey, metadataValue) {\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\n}\n\nexport function __awaiter(thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n}\n\nexport function __generator(thisArg, body) {\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g = Object.create((typeof Iterator === \"function\" ? Iterator : Object).prototype);\n return g.next = verb(0), g[\"throw\"] = verb(1), g[\"return\"] = verb(2), typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\n function verb(n) { return function (v) { return step([n, v]); }; }\n function step(op) {\n if (f) throw new TypeError(\"Generator is already executing.\");\n while (g && (g = 0, op[0] && (_ = 0)), _) try {\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\n if (y = 0, t) op = [op[0] & 2, t.value];\n switch (op[0]) {\n case 0: case 1: t = op; break;\n case 4: _.label++; return { value: op[1], done: false };\n case 5: _.label++; y = op[1]; op = [0]; continue;\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\n default:\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\n if (t[2]) _.ops.pop();\n _.trys.pop(); continue;\n }\n op = body.call(thisArg, _);\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\n }\n}\n\nexport var __createBinding = Object.create ? (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n var desc = Object.getOwnPropertyDescriptor(m, k);\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n desc = { enumerable: true, get: function() { return m[k]; } };\n }\n Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n});\n\nexport function __exportStar(m, o) {\n for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(o, p)) __createBinding(o, m, p);\n}\n\nexport function __values(o) {\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\n if (m) return m.call(o);\n if (o && typeof o.length === \"number\") return {\n next: function () {\n if (o && i >= o.length) o = void 0;\n return { value: o && o[i++], done: !o };\n }\n };\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\n}\n\nexport function __read(o, n) {\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\n if (!m) return o;\n var i = m.call(o), r, ar = [], e;\n try {\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\n }\n catch (error) { e = { error: error }; }\n finally {\n try {\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\n }\n finally { if (e) throw e.error; }\n }\n return ar;\n}\n\n/** @deprecated */\nexport function __spread() {\n for (var ar = [], i = 0; i < arguments.length; i++)\n ar = ar.concat(__read(arguments[i]));\n return ar;\n}\n\n/** @deprecated */\nexport function __spreadArrays() {\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\n r[k] = a[j];\n return r;\n}\n\nexport function __spreadArray(to, from, pack) {\n if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\n if (ar || !(i in from)) {\n if (!ar) ar = Array.prototype.slice.call(from, 0, i);\n ar[i] = from[i];\n }\n }\n return to.concat(ar || Array.prototype.slice.call(from));\n}\n\nexport function __await(v) {\n return this instanceof __await ? (this.v = v, this) : new __await(v);\n}\n\nexport function __asyncGenerator(thisArg, _arguments, generator) {\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\n return i = Object.create((typeof AsyncIterator === \"function\" ? AsyncIterator : Object).prototype), verb(\"next\"), verb(\"throw\"), verb(\"return\", awaitReturn), i[Symbol.asyncIterator] = function () { return this; }, i;\n function awaitReturn(f) { return function (v) { return Promise.resolve(v).then(f, reject); }; }\n function verb(n, f) { if (g[n]) { i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; if (f) i[n] = f(i[n]); } }\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\n function fulfill(value) { resume(\"next\", value); }\n function reject(value) { resume(\"throw\", value); }\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\n}\n\nexport function __asyncDelegator(o) {\n var i, p;\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\n function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: false } : f ? f(v) : v; } : f; }\n}\n\nexport function __asyncValues(o) {\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\n var m = o[Symbol.asyncIterator], i;\n return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\n function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\n function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\n}\n\nexport function __makeTemplateObject(cooked, raw) {\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\n return cooked;\n};\n\nvar __setModuleDefault = Object.create ? (function(o, v) {\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n}) : function(o, v) {\n o[\"default\"] = v;\n};\n\nvar ownKeys = function(o) {\n ownKeys = Object.getOwnPropertyNames || function (o) {\n var ar = [];\n for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;\n return ar;\n };\n return ownKeys(o);\n};\n\nexport function __importStar(mod) {\n if (mod && mod.__esModule) return mod;\n var result = {};\n if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== \"default\") __createBinding(result, mod, k[i]);\n __setModuleDefault(result, mod);\n return result;\n}\n\nexport function __importDefault(mod) {\n return (mod && mod.__esModule) ? mod : { default: mod };\n}\n\nexport function __classPrivateFieldGet(receiver, state, kind, f) {\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\n return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\n}\n\nexport function __classPrivateFieldSet(receiver, state, value, kind, f) {\n if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\n return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\n}\n\nexport function __classPrivateFieldIn(state, receiver) {\n if (receiver === null || (typeof receiver !== \"object\" && typeof receiver !== \"function\")) throw new TypeError(\"Cannot use 'in' operator on non-object\");\n return typeof state === \"function\" ? receiver === state : state.has(receiver);\n}\n\nexport function __addDisposableResource(env, value, async) {\n if (value !== null && value !== void 0) {\n if (typeof value !== \"object\" && typeof value !== \"function\") throw new TypeError(\"Object expected.\");\n var dispose, inner;\n if (async) {\n if (!Symbol.asyncDispose) throw new TypeError(\"Symbol.asyncDispose is not defined.\");\n dispose = value[Symbol.asyncDispose];\n }\n if (dispose === void 0) {\n if (!Symbol.dispose) throw new TypeError(\"Symbol.dispose is not defined.\");\n dispose = value[Symbol.dispose];\n if (async) inner = dispose;\n }\n if (typeof dispose !== \"function\") throw new TypeError(\"Object not disposable.\");\n if (inner) dispose = function() { try { inner.call(this); } catch (e) { return Promise.reject(e); } };\n env.stack.push({ value: value, dispose: dispose, async: async });\n }\n else if (async) {\n env.stack.push({ async: true });\n }\n return value;\n}\n\nvar _SuppressedError = typeof SuppressedError === \"function\" ? SuppressedError : function (error, suppressed, message) {\n var e = new Error(message);\n return e.name = \"SuppressedError\", e.error = error, e.suppressed = suppressed, e;\n};\n\nexport function __disposeResources(env) {\n function fail(e) {\n env.error = env.hasError ? new _SuppressedError(e, env.error, \"An error was suppressed during disposal.\") : e;\n env.hasError = true;\n }\n var r, s = 0;\n function next() {\n while (r = env.stack.pop()) {\n try {\n if (!r.async && s === 1) return s = 0, env.stack.push(r), Promise.resolve().then(next);\n if (r.dispose) {\n var result = r.dispose.call(r.value);\n if (r.async) return s |= 2, Promise.resolve(result).then(next, function(e) { fail(e); return next(); });\n }\n else s |= 1;\n }\n catch (e) {\n fail(e);\n }\n }\n if (s === 1) return env.hasError ? Promise.reject(env.error) : Promise.resolve();\n if (env.hasError) throw env.error;\n }\n return next();\n}\n\nexport function __rewriteRelativeImportExtension(path, preserveJsx) {\n if (typeof path === \"string\" && /^\\.\\.?\\//.test(path)) {\n return path.replace(/\\.(tsx)$|((?:\\.d)?)((?:\\.[^./]+?)?)\\.([cm]?)ts$/i, function (m, tsx, d, ext, cm) {\n return tsx ? preserveJsx ? \".jsx\" : \".js\" : d && (!ext || !cm) ? m : (d + ext + \".\" + cm.toLowerCase() + \"js\");\n });\n }\n return path;\n}\n\nexport default {\n __extends,\n __assign,\n __rest,\n __decorate,\n __param,\n __esDecorate,\n __runInitializers,\n __propKey,\n __setFunctionName,\n __metadata,\n __awaiter,\n __generator,\n __createBinding,\n __exportStar,\n __values,\n __read,\n __spread,\n __spreadArrays,\n __spreadArray,\n __await,\n __asyncGenerator,\n __asyncDelegator,\n __asyncValues,\n __makeTemplateObject,\n __importStar,\n __importDefault,\n __classPrivateFieldGet,\n __classPrivateFieldSet,\n __classPrivateFieldIn,\n __addDisposableResource,\n __disposeResources,\n __rewriteRelativeImportExtension,\n};\n","import {\n Directive,\n EventEmitter,\n InjectionToken,\n Input,\n Output,\n} from \"@angular/core\";\nimport { WklyWeekOffset } from \"@wkly/core\";\nimport {\n WklyCalendarAdapter,\n WklyDisabledDatePredicate,\n WklyDisabledTimePredicate,\n WklyHourCycle,\n WklyPickerValue,\n WklyRangeValidator,\n WklySelectionMode,\n WklyValidationError,\n WklyViewportPreset,\n WklyWeekLabelFormatter,\n WklyWeekLabelMode,\n} from \"@wkly/adapters\";\nimport {\n DEFAULT_OVERSCAN_WEEKS,\n WklyClock,\n WklyConfiguration,\n WklyCloseReason,\n WklyPickerInputs as WklyPickerInputsContract,\n WklyPickerOutputs as WklyPickerOutputsContract,\n WklyStrings,\n WklyTranslations,\n WklyViewportChange,\n WklyPickerInputsPropertyKeys,\n WklyPickerOutputsPropertyKeys,\n} from \"@wkly/presentation\";\nexport * from \"@wkly/presentation\";\nexport const WKLY_CLOCK = new InjectionToken<WklyClock>(\"WKLY_CLOCK\", {\n providedIn: \"root\",\n factory: () => ({ now: () => new Date() }),\n});\nexport const WKLY_CONFIG = new InjectionToken<WklyConfiguration>(\n \"WKLY_CONFIG\",\n { providedIn: \"root\", factory: () => ({}) },\n);\nexport const WKLY_LOCALIZATION = new InjectionToken<WklyStrings>(\n \"WKLY_LOCALIZATION\",\n { providedIn: \"root\", factory: () => ({}) },\n);\nexport const WKLY_TRANSLATIONS = new InjectionToken<WklyTranslations>(\n \"WKLY_TRANSLATIONS\",\n { providedIn: \"root\", factory: () => ({}) },\n);\n/** Shared public inputs/outputs inherited by the picker and both trigger directives. */\n// Angular 11 consumers need literal names in published decorator metadata.\n@Directive({\n inputs: [\n \"mode\",\n \"value\",\n \"calendarAdapter\",\n \"locale\",\n \"weekOffset\",\n \"viewportPreset\",\n \"hourCycle\",\n \"showSeconds\",\n \"minuteStep\",\n \"secondStep\",\n \"min\",\n \"max\",\n \"isDateDisabled\",\n \"isTimeDisabled\",\n \"rangeValidator\",\n \"allowRangeAcrossDisabled\",\n \"required\",\n \"disabled\",\n \"weekLabelMode\",\n \"weekLabelFormatter\",\n \"weekCacheSize\",\n \"overscanWeeks\",\n \"ariaLabel\",\n \"ariaDescribedBy\",\n \"initialEpochDay\",\n \"closeOnBackdrop\",\n \"validators\",\n \"translations\",\n ],\n outputs: [\n \"valueChange\",\n \"validationChange\",\n \"opened\",\n \"closed\",\n \"viewportChange\",\n \"viewModeChange\",\n ],\n})\nexport abstract class WklyPickerInputs\n implements WklyPickerInputsContract, WklyPickerOutputsContract\n{\n @Input() [WklyPickerInputsPropertyKeys.Mode]: WklySelectionMode = \"datetime\";\n @Input() [WklyPickerInputsPropertyKeys.Value]: WklyPickerValue = null;\n @Input() [WklyPickerInputsPropertyKeys.CalendarAdapter]: WklyCalendarAdapter;\n @Input() [WklyPickerInputsPropertyKeys.Locale]: string = \"\";\n @Input() [WklyPickerInputsPropertyKeys.WeekOffset]: WklyWeekOffset | null =\n null;\n @Input() [WklyPickerInputsPropertyKeys.ViewportPreset]: WklyViewportPreset = {\n kind: \"full-month\",\n };\n @Input() [WklyPickerInputsPropertyKeys.HourCycle]: WklyHourCycle = \"locale\";\n @Input() [WklyPickerInputsPropertyKeys.ShowSeconds]: boolean = false;\n @Input() [WklyPickerInputsPropertyKeys.MinuteStep]: number = 1;\n @Input() [WklyPickerInputsPropertyKeys.SecondStep]: number = 1;\n @Input() [WklyPickerInputsPropertyKeys.Min]: string | null = null;\n @Input() [WklyPickerInputsPropertyKeys.Max]: string | null = null;\n @Input()\n [WklyPickerInputsPropertyKeys.IsDateDisabled]: WklyDisabledDatePredicate | null =\n null;\n @Input()\n [WklyPickerInputsPropertyKeys.IsTimeDisabled]: WklyDisabledTimePredicate | null =\n null;\n @Input()\n [WklyPickerInputsPropertyKeys.RangeValidator]: WklyRangeValidator | null =\n null;\n @Input() [WklyPickerInputsPropertyKeys.AllowRangeAcrossDisabled] = false;\n @Input() [WklyPickerInputsPropertyKeys.Required] = false;\n @Input() [WklyPickerInputsPropertyKeys.Disabled] = false;\n @Input() [WklyPickerInputsPropertyKeys.WeekLabelMode]: WklyWeekLabelMode =\n \"locale\";\n @Input()\n [WklyPickerInputsPropertyKeys.WeekLabelFormatter]: WklyWeekLabelFormatter | null =\n null;\n @Input() [WklyPickerInputsPropertyKeys.WeekCacheSize] = 256;\n @Input() [WklyPickerInputsPropertyKeys.OverscanWeeks] =\n DEFAULT_OVERSCAN_WEEKS;\n @Input() [WklyPickerInputsPropertyKeys.AriaLabel]: string | null = null;\n @Input() [WklyPickerInputsPropertyKeys.AriaDescribedBy]: string | null = null;\n @Input() [WklyPickerInputsPropertyKeys.InitialEpochDay]: number | null = null;\n @Input() [WklyPickerInputsPropertyKeys.CloseOnBackdrop] = true;\n @Input() [WklyPickerInputsPropertyKeys.Validators]: readonly ((\n value: WklyPickerValue,\n ) => WklyValidationError | null)[] = [];\n @Input()\n [WklyPickerInputsPropertyKeys.Translations]: WklyTranslations | null = null;\n @Output() [WklyPickerOutputsPropertyKeys.ValueChange] =\n new EventEmitter<WklyPickerValue>();\n @Output() [WklyPickerOutputsPropertyKeys.ValidationChange] = new EventEmitter<\n readonly WklyValidationError[]\n >(true);\n @Output() [WklyPickerOutputsPropertyKeys.Opened] = new EventEmitter<void>();\n @Output() [WklyPickerOutputsPropertyKeys.Closed] =\n new EventEmitter<WklyCloseReason>();\n @Output() [WklyPickerOutputsPropertyKeys.ViewportChange] =\n new EventEmitter<WklyViewportChange>(true);\n @Output() [WklyPickerOutputsPropertyKeys.ViewModeChange] = new EventEmitter<\n \"calendar\" | \"manual\"\n >();\n}\n","import type { WklyHourCycle } from \"@wkly/adapters\";\nimport {\n AfterViewInit,\n ChangeDetectorRef,\n Component,\n ElementRef,\n forwardRef,\n Inject,\n LOCALE_ID,\n OnChanges,\n OnDestroy,\n OnInit,\n PLATFORM_ID,\n ViewChild,\n} from \"@angular/core\";\nimport { getLocaleFirstDayOfWeek, isPlatformBrowser } from \"@angular/common\";\nimport {\n AbstractControl,\n ControlValueAccessor,\n NG_VALIDATORS,\n NG_VALUE_ACCESSOR,\n ValidationErrors,\n Validator,\n} from \"@angular/forms\";\nimport {\n absoluteWeekOf,\n createWeekGenerator,\n firstEpochDayOf,\n integer,\n WklyWeekGenerator,\n WklyWeekOffset,\n} from \"@wkly/core\";\nimport {\n decodeIso,\n error,\n resolveWeekOffset,\n validateSelection,\n WklyCalendarAdapter,\n WklyCalendarDate,\n WklyDateTime,\n WklyGregorianCalendarAdapter,\n WklyPickerValue,\n WklyValidationError,\n} from \"@wkly/adapters\";\nimport {\n draftDayDifference,\n setDraftDayDifference,\n calendarMonthBounds,\n resolveWklyTranslation,\n createWeekRows,\n validateDrafts,\n WklyDraft as Draft,\n WklyWeekRow as Row,\n} from \"@wkly/presentation\";\nimport {\n coerceBoolean,\n WKLY_CLOCK,\n WKLY_CONFIG,\n WKLY_LOCALIZATION,\n WKLY_TRANSLATIONS,\n WklyClock,\n WklyCloseReason,\n WklyConfiguration,\n WklyJumpOptions,\n WklyPickerInputs,\n WklyPickerInputsPropertyKeys,\n WklyPickerOutputsPropertyKeys,\n WklyStrings,\n WklyTranslations,\n} from \"./config\";\ndeclare class ResizeObserver {\n constructor(callback: () => void);\n observe(element: Element): void;\n disconnect(): void;\n}\n@Component({\n selector: \"wkly-datetime-picker\",\n templateUrl: \"./picker.component.html\",\n styleUrls: [\"../../wkly-datetime-picker/src/picker.component.css\"],\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => WklyDateTimePickerComponent),\n multi: true,\n },\n {\n provide: NG_VALIDATORS,\n useExisting: forwardRef(() => WklyDateTimePickerComponent),\n multi: true,\n },\n ],\n})\nexport class WklyDateTimePickerComponent\n extends WklyPickerInputs\n implements\n OnInit,\n OnChanges,\n AfterViewInit,\n OnDestroy,\n ControlValueAccessor,\n Validator\n{\n @ViewChild(\"scroller\") scroller?: ElementRef<HTMLElement>;\n presentation: \"inline\" | \"transient\" = \"inline\";\n viewMode: \"calendar\" | \"manual\" = \"calendar\";\n endView: \"date\" | \"days\" = \"date\";\n adapter!: WklyCalendarAdapter;\n effectiveLocale = \"en-US\";\n effectiveOffset: WklyWeekOffset = 0;\n effectiveHourCycle: \"h12\" | \"h24\" = \"h24\";\n private configuredHourCycle?: WklyHourCycle;\n direction = \"ltr\";\n rows: Row[] = [];\n weekdays: string[] = [];\n drafts: Draft[] = [];\n errors: readonly WklyValidationError[] = [];\n today = 0;\n focused = 0;\n anchorWeek = 0;\n firstWeek = 0;\n visibleCount = 6;\n rowHeight = 76;\n scrollHeight = 152076;\n paddingTop = 0;\n initialized = false;\n compact = false;\n readonly WklyPickerInputsPropertyKeys = WklyPickerInputsPropertyKeys;\n private baseWeek = 0;\n private firstSupportedDay = 0;\n private lastSupportedDay = 0;\n private firstSupportedWeek = 0;\n private lastSupportedWeek = 0;\n private generator!: WklyWeekGenerator;\n private initialMonth = \"\";\n private clipMonth = false;\n private browser = false;\n private observer?: ResizeObserver;\n private destroyed = false;\n private scrollEndTimer?: ReturnType<typeof setTimeout>;\n private snapPending = false;\n private onChange: (value: WklyPickerValue) => void = () => {};\n private onTouched: () => void = () => {};\n private validatorChanged: () => void = () => {};\n private configErrors: WklyValidationError[] = [];\n private pendingValue: WklyPickerValue = null;\n private emittedValue: string | null = null;\n private manualDateEndpoint = 0;\n constructor(\n @Inject(LOCALE_ID) private defaultLocale: string,\n @Inject(WKLY_CONFIG) private defaults: WklyConfiguration,\n @Inject(WKLY_CLOCK) private clock: WklyClock,\n @Inject(WKLY_LOCALIZATION) private strings: WklyStrings,\n @Inject(WKLY_TRANSLATIONS) private defaultTranslations: WklyTranslations,\n @Inject(PLATFORM_ID) platform: Object,\n private host: ElementRef<HTMLElement>,\n private changeDetector: ChangeDetectorRef,\n ) {\n super();\n this.browser = isPlatformBrowser(platform);\n }\n ngOnInit(): void {\n this.initialize();\n }\n ngOnChanges(changes: any): void {\n if (this.initialized) {\n if (\n Object.keys(changes).length === 1 &&\n changes[WklyPickerInputsPropertyKeys.Value] &&\n this.emittedValue ===\n JSON.stringify(this[WklyPickerInputsPropertyKeys.Value])\n ) {\n this.emittedValue = null;\n return;\n }\n const focus = this.focused;\n this.configure();\n if (\n changes[WklyPickerInputsPropertyKeys.Value] ||\n changes[WklyPickerInputsPropertyKeys.Mode] ||\n changes[WklyPickerInputsPropertyKeys.CalendarAdapter]\n ) {\n this.load(this[WklyPickerInputsPropertyKeys.Value]);\n this.position(this.focused, true);\n } else {\n this.check();\n if (changes[WklyPickerInputsPropertyKeys.ViewportPreset])\n this.position(focus, true);\n else this.scrollToEpochDay(focus);\n }\n }\n }\n initialize(): void {\n if (this.initialized) return;\n this.configure();\n const initialEpochDay = this[WklyPickerInputsPropertyKeys.InitialEpochDay];\n this.today = this.browser\n ? Math.floor(this.clock.now().getTime() / 86400000)\n : initialEpochDay === null\n ? 0\n : initialEpochDay;\n this.focused =\n initialEpochDay === null\n ? this.defaults.initialEpochDay === undefined\n ? this.today\n : this.defaults.initialEpochDay\n : initialEpochDay;\n this.load(this[WklyPickerInputsPropertyKeys.Value]);\n this.initialized = true;\n this.position(this.focused, true);\n }\n configure(): void {\n this.configErrors = [];\n [\n WklyPickerInputsPropertyKeys.ShowSeconds,\n WklyPickerInputsPropertyKeys.AllowRangeAcrossDisabled,\n WklyPickerInputsPropertyKeys.Required,\n WklyPickerInputsPropertyKeys.Disabled,\n WklyPickerInputsPropertyKeys.CloseOnBackdrop,\n ].forEach(\n (key) => ((this as any)[key] = coerceBoolean((this as any)[key])),\n );\n this.effectiveLocale =\n this[WklyPickerInputsPropertyKeys.Locale] ||\n this.defaults.locale ||\n this.defaultLocale;\n this.direction = /^(ar|he|fa|ur)(-|$)/.test(this.effectiveLocale)\n ? \"rtl\"\n : \"ltr\";\n this.adapter =\n this[WklyPickerInputsPropertyKeys.CalendarAdapter] ||\n new WklyGregorianCalendarAdapter(this.effectiveLocale);\n try {\n let firstDay: number | undefined;\n try {\n firstDay = getLocaleFirstDayOfWeek(this.effectiveLocale);\n } catch (_) {}\n this.effectiveOffset = resolveWeekOffset(\n this.effectiveLocale,\n this[WklyPickerInputsPropertyKeys.WeekOffset],\n this.defaults.weekOffset,\n firstDay,\n );\n integer(this[WklyPickerInputsPropertyKeys.WeekCacheSize]);\n integer(this[WklyPickerInputsPropertyKeys.OverscanWeeks]);\n if (\n this[WklyPickerInputsPropertyKeys.WeekCacheSize] < 0 ||\n this[WklyPickerInputsPropertyKeys.OverscanWeeks] < 0 ||\n this[WklyPickerInputsPropertyKeys.OverscanWeeks] > 50\n )\n throw new RangeError();\n if (\n ![\n \"datetime\",\n \"date\",\n \"time\",\n \"datetime-range\",\n \"date-range\",\n \"time-range\",\n ].includes(this[WklyPickerInputsPropertyKeys.Mode])\n )\n throw new RangeError();\n const preset = this[WklyPickerInputsPropertyKeys.ViewportPreset];\n if (preset.kind === \"weeks\") {\n integer(preset.visibleWeekCount);\n if (preset.visibleWeekCount < 1 || preset.visibleWeekCount > 52)\n throw new RangeError();\n }\n if (preset.kind === \"full-month-and-around\")\n for (const n of [\n preset.extraWeeksBefore || 0,\n preset.extraWeeksAfter || 0,\n ]) {\n integer(n);\n if (n < 0 || n > 52) throw new RangeError();\n }\n this.generator = createWeekGenerator({\n weekOffset: this.effectiveOffset,\n cacheSize: this[WklyPickerInputsPropertyKeys.WeekCacheSize],\n });\n } catch (_) {\n this.configErrors.push(\n error(\n \"configuration-error\",\n this[WklyPickerInputsPropertyKeys.WeekOffset],\n ),\n );\n this.generator = createWeekGenerator();\n this.effectiveOffset = 0;\n }\n this.setSupportedScrollRange();\n const hourCycle = this[WklyPickerInputsPropertyKeys.HourCycle];\n // Host value/configuration feedback must retain the user's switchable format.\n if (hourCycle !== \"switchable\" || this.configuredHourCycle !== hourCycle) {\n this.effectiveHourCycle =\n hourCycle === \"h12\"\n ? \"h12\"\n : hourCycle === \"locale\"\n ? new Intl.DateTimeFormat(this.effectiveLocale, {\n hour: \"numeric\",\n timeZone: \"UTC\",\n }).resolvedOptions().hour12\n ? \"h12\"\n : \"h24\"\n : \"h24\";\n }\n this.configuredHourCycle = hourCycle;\n this.weekdays = Array.from({ length: 7 }, (_, i) =>\n this.adapter.formatWeekday(this.effectiveOffset + i, \"short\"),\n );\n }\n private setSupportedScrollRange(): void {\n let [first, last] = this.adapter.supportedEpochDayRange;\n const [firstYear, lastYear] = this.adapter.supportedYearRange;\n const yearOf = (day: number) => this.adapter.epochDayToDate(day).year;\n if (yearOf(first) < firstYear) {\n let low = first,\n high = last;\n while (low < high) {\n const mid = Math.floor((low + high) / 2);\n if (yearOf(mid) < firstYear) low = mid + 1;\n else high = mid;\n }\n first = low;\n }\n if (yearOf(last) > lastYear) {\n let low = first,\n high = last;\n while (low < high) {\n const mid = Math.ceil((low + high) / 2);\n if (yearOf(mid) > lastYear) high = mid - 1;\n else low = mid;\n }\n last = low;\n }\n if (\n first > last ||\n yearOf(first) < firstYear ||\n yearOf(first) > lastYear ||\n yearOf(last) < firstYear ||\n yearOf(last) > lastYear\n )\n throw new RangeError(\"No supported days within the calendar year range\");\n this.firstSupportedDay = first;\n this.lastSupportedDay = last;\n this.firstSupportedWeek = absoluteWeekOf(first, this.effectiveOffset);\n this.lastSupportedWeek = absoluteWeekOf(last, this.effectiveOffset);\n }\n private clampFirstWeek(week: number): number {\n // Keep supported weeks inside the viewport; renderRows adds the buffer rows.\n const last = Math.max(\n this.firstSupportedWeek,\n this.lastSupportedWeek - this.visibleCount + 1,\n );\n return Math.max(this.firstSupportedWeek, Math.min(last, week));\n }\n ngAfterViewInit(): void {\n this.resetScroll();\n if (this.browser && typeof ResizeObserver !== \"undefined\") {\n this.observer = new ResizeObserver(() => {\n this.compact = this.host.nativeElement.clientWidth < 338;\n const row = this.host.nativeElement.querySelector(\n \".week-row\",\n ) as HTMLElement;\n // CSS heights and scrollTop use layout pixels; client rectangles include zoom.\n const height = row ? parseFloat(getComputedStyle(row).height) : 0;\n if (height && height !== this.rowHeight) {\n this.rowHeight = height;\n this.scrollHeight = this.rowHeight * 2001;\n this.renderRows();\n this.resetScroll();\n }\n });\n this.observer.observe(this.host.nativeElement);\n }\n }\n ngOnDestroy(): void {\n this.destroyed = true;\n if (this.observer) this.observer.disconnect();\n if (this.scrollEndTimer) clearTimeout(this.scrollEndTimer);\n if (this.generator) this.generator.clearCache();\n }\n t(key: string): string {\n return resolveWklyTranslation(\n key,\n this.effectiveLocale,\n this[WklyPickerInputsPropertyKeys.Translations] ||\n this.defaultTranslations,\n this.strings,\n );\n }\n get isRange(): boolean {\n return this[WklyPickerInputsPropertyKeys.Mode].endsWith(\"-range\");\n }\n get hasDate(): boolean {\n return !this[WklyPickerInputsPropertyKeys.Mode].startsWith(\"time\");\n }\n get hasTime(): boolean {\n return (\n this[WklyPickerInputsPropertyKeys.Mode] !== \"date\" &&\n this[WklyPickerInputsPropertyKeys.Mode] !== \"date-range\"\n );\n }\n get submitVisible(): boolean {\n return (\n this.presentation === \"transient\" &&\n (this[WklyPickerInputsPropertyKeys.Mode] !== \"date\" ||\n this.viewMode === \"manual\")\n );\n }\n get title(): string {\n try {\n const d = this.adapter.epochDayToDate(\n Math.max(\n this.firstSupportedDay,\n Math.min(\n this.lastSupportedDay,\n firstEpochDayOf(this.anchorWeek, this.effectiveOffset),\n ),\n ),\n );\n return this.adapter.formatMonth(d) + \" \" + this.adapter.formatYear(d);\n } catch (_) {\n return \"\";\n }\n }\n get canSubmit(): boolean {\n return (\n !this[WklyPickerInputsPropertyKeys.Disabled] &&\n !this.errors.length &&\n this.pendingValue !== null\n );\n }\n private blank(day: number): Draft {\n const safe = Math.max(\n this.firstSupportedDay,\n Math.min(this.lastSupportedDay, day),\n );\n return {\n date: this.adapter.epochDayToDate(safe),\n hour: 0,\n minute: 0,\n second: 0,\n present: false,\n };\n }\n load(value: WklyPickerValue): void {\n this.drafts = [this.blank(this.focused), this.blank(this.focused)];\n const validation = validateSelection(value, this, this.adapter);\n if (value !== null && !validation.length) {\n const values = typeof value === \"string\" ? [value] : value;\n values.forEach((v, i) => {\n const d = decodeIso(v);\n this.drafts[i] = {\n date: this.hasDate\n ? this.adapter.epochDayToDate(d.epochDay)\n : this.blank(this.today).date,\n hour: d.hour,\n minute: d.minute,\n second: d.second,\n present: true,\n };\n if (i === 0 && this.hasDate) this.focused = d.epochDay;\n });\n }\n if (validation.length) {\n this.pendingValue = null;\n this.report(validation);\n } else this.check();\n }\n writeValue(value: WklyPickerValue): void {\n this[WklyPickerInputsPropertyKeys.Value] = value;\n if (this.initialized) {\n this.load(value);\n this.position(this.focused, true);\n }\n }\n registerOnChange(fn: (value: WklyPickerValue) => void): void {\n this.onChange = fn;\n }\n registerOnTouched(fn: () => void): void {\n this.onTouched = fn;\n }\n setDisabledState(disabled: boolean): void {\n this[WklyPickerInputsPropertyKeys.Disabled] = disabled;\n }\n validate(_control: AbstractControl): ValidationErrors | null {\n return this.errors.length ? { wkly: this.errors } : null;\n }\n registerOnValidatorChange(fn: () => void): void {\n this.validatorChanged = fn;\n }\n touched(): void {\n Promise.resolve().then(() => this.onTouched());\n }\n private report(errors: readonly WklyValidationError[]): void {\n const changed = JSON.stringify(this.errors) !== JSON.stringify(errors);\n this.errors = errors;\n if (changed) {\n this[WklyPickerOutputsPropertyKeys.ValidationChange].emit(errors);\n this.validatorChanged();\n }\n }\n check(): void {\n const result = validateDrafts({\n drafts: this.drafts,\n configErrors: this.configErrors,\n adapter: this.adapter,\n selection: this,\n mode: this[WklyPickerInputsPropertyKeys.Mode],\n isRange: this.isRange,\n hasDate: this.hasDate,\n hasTime: this.hasTime,\n showSeconds: this[WklyPickerInputsPropertyKeys.ShowSeconds],\n required: this[WklyPickerInputsPropertyKeys.Required],\n });\n this.pendingValue = result.pendingValue;\n this.report(result.errors);\n }\n trackDraft(index: number): number {\n // Endpoint controls keep their identity and focus when draft objects swap.\n return index;\n }\n private orderDrafts(): void {\n if (!this.isRange || !this.drafts.every((draft) => draft.present)) return;\n if (this.drafts.some((draft) => draft.unsupportedEpochDay !== undefined))\n return;\n try {\n const a = this.drafts[0],\n b = this.drafts[1];\n const key = (d: Draft) =>\n this.adapter.dateToEpochDay(d.date) * 86400 +\n (d.hour || 0) * 3600 +\n (d.minute || 0) * 60 +\n (d.second || 0);\n if (key(a) > key(b)) this.drafts = [b, a];\n } catch (_) {\n // Impossible or incomplete dates remain editable until corrected.\n }\n }\n finish(): void {\n if (this[WklyPickerInputsPropertyKeys.Disabled]) return;\n this.orderDrafts();\n if (this.viewMode === \"manual\" && this.hasDate) this.positionOnManualDate();\n this.check();\n if (this.presentation === \"inline\" && this.canSubmit) this.commit();\n }\n private commit(): void {\n if (!this.canSubmit) return;\n const next = this.pendingValue;\n if (\n JSON.stringify(next) !==\n JSON.stringify(this[WklyPickerInputsPropertyKeys.Value])\n ) {\n this[WklyPickerInputsPropertyKeys.Value] = next;\n this.emittedValue = JSON.stringify(next);\n this.onChange(next);\n this[WklyPickerOutputsPropertyKeys.ValueChange].emit(next);\n }\n this.onTouched();\n }\n submit(reason: WklyCloseReason = \"submit\"): void {\n this.check();\n if (!this.canSubmit) return;\n this.commit();\n if (this.presentation === \"transient\")\n this[WklyPickerOutputsPropertyKeys.Closed].emit(reason);\n }\n cancel(reason: WklyCloseReason = \"close-button\"): void {\n if (this[WklyPickerInputsPropertyKeys.Disabled]) return;\n this.load(this[WklyPickerInputsPropertyKeys.Value]);\n this.onTouched();\n this[WklyPickerOutputsPropertyKeys.Closed].emit(reason);\n }\n now(): void {\n if (this[WklyPickerInputsPropertyKeys.Disabled]) return;\n const n = this.clock.now();\n const day = Math.floor(n.getTime() / 86400000);\n this.drafts = [0, 1].map((index) => ({\n ...this.clockDraft(day, n),\n present: index === 0 || this.isRange,\n }));\n if (\n this.hasDate &&\n (day < this.firstSupportedDay || day > this.lastSupportedDay)\n ) {\n this.report([error(\"unsupported-adapter-date\", day)]);\n return;\n }\n this.focused = day;\n this.position(day, true);\n this.check();\n this.submit(\"now\");\n }\n private clockDraft(day: number, now: Date): Draft {\n return {\n ...this.blank(day),\n hour: now.getUTCHours(),\n minute:\n Math.floor(\n now.getUTCMinutes() / this[WklyPickerInputsPropertyKeys.MinuteStep],\n ) * this[WklyPickerInputsPropertyKeys.MinuteStep],\n second: this[WklyPickerInputsPropertyKeys.ShowSeconds]\n ? Math.floor(\n now.getUTCSeconds() / this[WklyPickerInputsPropertyKeys.SecondStep],\n ) * this[WklyPickerInputsPropertyKeys.SecondStep]\n : 0,\n };\n }\n private initializeManualRange(): void {\n if (\n !this.isRange ||\n !this.hasDate ||\n this.drafts.every((draft) => draft.present)\n )\n return;\n let seed = this.drafts.find((draft) => draft.present);\n if (!seed) {\n if (this[WklyPickerInputsPropertyKeys.Value] !== null) return;\n const now = this.clock.now();\n const initialEpochDay =\n this[WklyPickerInputsPropertyKeys.InitialEpochDay];\n const day =\n initialEpochDay === null\n ? this.defaults.initialEpochDay === undefined\n ? Math.floor(now.getTime() / 86400000)\n : this.defaults.initialEpochDay\n : initialEpochDay;\n seed = { ...this.clockDraft(day, now), present: true };\n }\n // Complete missing endpoints without replacing selected or invalid drafts.\n const initial = seed;\n this.drafts = this.drafts.map((draft) =>\n draft.present ? draft : { ...initial, date: { ...initial.date } },\n );\n this.finish();\n // Positioning renders before validation; refresh completion controls afterward.\n this.changeDetector.markForCheck();\n }\n toggleView(): void {\n if (this[WklyPickerInputsPropertyKeys.Disabled] || !this.hasDate) return;\n this.viewMode = this.viewMode === \"calendar\" ? \"manual\" : \"calendar\";\n if (this.viewMode === \"manual\") this.initializeManualRange();\n if (this.viewMode === \"calendar\") this.positionOnManualDate();\n this[WklyPickerOutputsPropertyKeys.ViewModeChange].emit(this.viewMode);\n if (this.viewMode === \"calendar\") setTimeout(() => this.resetScroll());\n }\n private positionOnManualDate(): void {\n const draft = this.drafts[this.manualDateEndpoint];\n if (!draft || !draft.present) return;\n try {\n // A valid day follows the selection. An impossible day keeps its draft\n // fields but still shows the chosen month in the calendar.\n const target = this.adapter.dateToEpochDay(draft.date);\n this.focused = target;\n this.position(target, true);\n } catch (_) {\n try {\n const first = this.adapter.dateToEpochDay({ ...draft.date, day: 1 });\n this.focused = first;\n this.position(first, true);\n } catch (_) {}\n }\n }\n months(draft: Draft): readonly string[] {\n try {\n return this.adapter.getMonths(draft.date.year).map((m) => m.label);\n } catch (_) {\n return [];\n }\n }\n monthCount(draft: Draft): number {\n return this.months(draft).length || 12;\n }\n get inDays(): number | null {\n return draftDayDifference(this.drafts, this.adapter);\n }\n get inDaysLabel(): string {\n const days = this.inDays;\n return this.t(\"inDays\").replace(\n /{{\\s*days\\s*}}/g,\n days === null\n ? this.t(\"daysUnavailable\")\n : new Intl.NumberFormat(this.effectiveLocale, {\n useGrouping: false,\n }).format(days),\n );\n }\n get resultingEndDate(): string {\n try {\n const draft = this.drafts[1];\n if (\n draft.unsupportedEpochDay !== undefined ||\n this.adapter.validateDate(draft.date).length\n )\n return \"\";\n return [\n this.adapter.formatDay(draft.date),\n this.adapter.formatMonth(draft.date),\n this.adapter.formatYear(draft.date),\n ].join(\" \");\n } catch (_) {\n return \"\";\n }\n }\n toggleEndView(view: \"date\" | \"days\"): void {\n if (this[WklyPickerInputsPropertyKeys.Disabled]) return;\n this.endView = view;\n }\n days(value: number | null): void {\n if (this[WklyPickerInputsPropertyKeys.Disabled]) return;\n this.manualDateEndpoint = 1;\n setDraftDayDifference(this.drafts, this.adapter, value);\n this.check();\n }\n field(index: number, field: string, value: number | null): void {\n if (this[WklyPickerInputsPropertyKeys.Disabled]) return;\n const draft = this.drafts[index];\n draft.present = true;\n if (field === \"day\" || field === \"year\" || field === \"month\") {\n this.manualDateEndpoint = index;\n delete draft.unsupportedEpochDay;\n let date = { ...draft.date, [field]: value } as WklyCalendarDate;\n if (field === \"month\") {\n let month;\n try {\n month = this.adapter\n .getMonths(date.year)\n .find((m) => m.month === value);\n } catch (_) {}\n date = { ...date, monthCode: month ? month.monthCode : \"\" };\n }\n if (field === \"year\" && value !== null) {\n try {\n const months = this.adapter.getMonths(value);\n const month = months.find((m) => m.monthCode === date.monthCode);\n if (month) date = { ...date, month: month.month };\n } catch (_) {}\n }\n draft.date = date;\n } else if (field === \"hour\" && this.effectiveHourCycle === \"h12\")\n draft.hour =\n value === null\n ? null\n : value >= 1 && value <= 12\n ? (value % 12) + ((draft.hour || 0) >= 12 ? 12 : 0)\n : 24 + value;\n else (draft as any)[field] = value;\n this.check();\n }\n displayHour(draft: Draft): number | null {\n return draft.hour === null\n ? null\n : this.effectiveHourCycle === \"h12\"\n ? draft.hour % 12 || 12\n : draft.hour;\n }\n period(index: number, period: \"am\" | \"pm\" | \"24\"): void {\n if (this[WklyPickerInputsPropertyKeys.Disabled]) return;\n if (period === \"24\") this.effectiveHourCycle = \"h24\";\n else {\n this.effectiveHourCycle = \"h12\";\n this.drafts[index].hour =\n ((this.drafts[index].hour || 0) % 12) + (period === \"pm\" ? 12 : 0);\n this.drafts[index].present = true;\n this.finish();\n }\n }\n selected(day: number): boolean {\n return this.drafts.some((d) => {\n try {\n return d.present && this.adapter.dateToEpochDay(d.date) === day;\n } catch (_) {\n return false;\n }\n });\n }\n inRange(day: number): boolean {\n if (!this.isRange || !this.drafts.every((d) => d.present)) return false;\n try {\n const a = this.adapter.dateToEpochDay(this.drafts[0].date),\n b = this.adapter.dateToEpochDay(this.drafts[1].date);\n return day > Math.min(a, b) && day < Math.max(a, b);\n } catch (_) {\n return false;\n }\n }\n dayDisabled(day: number): boolean {\n if (day < this.firstSupportedDay || day > this.lastSupportedDay)\n return true;\n try {\n const date = this.adapter.epochDayToDate(day);\n const isDateDisabled = this[WklyPickerInputsPropertyKeys.IsDateDisabled];\n if (\n isDateDisabled &&\n isDateDisabled(day, {\n mode: this[WklyPickerInputsPropertyKeys.Mode],\n endpoint: this.isRange\n ? this.drafts[0]?.present && !this.drafts[1]?.present\n ? \"end\"\n : \"start\"\n : \"single\",\n calendarDate: date,\n })\n )\n return true;\n const min = this[WklyPickerInputsPropertyKeys.Min];\n const max = this[WklyPickerInputsPropertyKeys.Max];\n if (min && day < decodeIso(min).epochDay) return true;\n if (max && day > decodeIso(max).epochDay) return true;\n return false;\n } catch (_) {\n return true;\n }\n }\n select(day: number): void {\n if (this[WklyPickerInputsPropertyKeys.Disabled] || this.dayDisabled(day))\n return;\n this.focused = day;\n const index =\n this.isRange && this.drafts[0].present && !this.drafts[1].present ? 1 : 0;\n if (this.isRange && index === 0) this.drafts[1].present = false;\n delete this.drafts[index].unsupportedEpochDay;\n this.drafts[index].date = this.adapter.epochDayToDate(day);\n this.drafts[index].present = true;\n this.orderDrafts();\n this.renderRows();\n this.finish();\n if (\n this.presentation === \"transient\" &&\n this[WklyPickerInputsPropertyKeys.Mode] === \"date\" &&\n this.viewMode === \"calendar\"\n )\n this.submit(\"auto-submit\");\n }\n key(event: KeyboardEvent, day: number): void {\n let delta = 0;\n if (event.key === \"ArrowLeft\") delta = -1;\n if (event.key === \"ArrowRight\") delta = 1;\n if (event.key === \"ArrowUp\") delta = -7;\n if (event.key === \"ArrowDown\") delta = 7;\n if (event.key === \"PageUp\")\n delta = -7 * (event.shiftKey ? this.visibleCount : 1);\n if (event.key === \"PageDown\")\n delta = 7 * (event.shiftKey ? this.visibleCount : 1);\n if (event.key === \"Home\") {\n event.preventDefault();\n this.scrollToEpochDay(this.today, { focus: true });\n }\n if (delta) {\n event.preventDefault();\n const target = day + delta;\n if (target >= this.firstSupportedDay && target <= this.lastSupportedDay)\n this.scrollToEpochDay(target, { focus: true });\n }\n }\n private position(\n day: number,\n preset = false,\n options: WklyJumpOptions = {},\n ): void {\n day = Math.max(\n this.firstSupportedDay,\n Math.min(this.lastSupportedDay, day),\n );\n this.anchorWeek = absoluteWeekOf(day, this.effectiveOffset);\n const viewportPreset = this[WklyPickerInputsPropertyKeys.ViewportPreset];\n this.clipMonth = preset && viewportPreset.kind === \"full-month\";\n if (preset && viewportPreset.kind !== \"weeks\") {\n const d = this.adapter.epochDayToDate(day);\n this.initialMonth = d.year + \"/\" + d.monthCode;\n const [start, end] = calendarMonthBounds(this.adapter, day);\n this.firstWeek = absoluteWeekOf(start, this.effectiveOffset);\n this.visibleCount =\n absoluteWeekOf(end, this.effectiveOffset) - this.firstWeek + 1;\n if (\n viewportPreset.kind === \"full-month-and-around\" &&\n !this.configErrors.length\n ) {\n const before = viewportPreset.extraWeeksBefore || 0,\n after = viewportPreset.extraWeeksAfter || 0;\n this.firstWeek -= before;\n this.visibleCount += before + after;\n }\n } else {\n if (viewportPreset.kind === \"weeks\")\n this.visibleCount = this.configErrors.length\n ? 6\n : viewportPreset.visibleWeekCount;\n this.firstWeek =\n this.anchorWeek -\n (options.align === \"start\"\n ? 0\n : options.align === \"end\"\n ? this.visibleCount - 1\n : Math.floor(this.visibleCount / 2));\n }\n this.firstWeek = this.clampFirstWeek(this.firstWeek);\n this.baseWeek = this.firstWeek - 1000;\n this.renderRows();\n // Apply the new runway before writing scrollTop or locating a focus target.\n this.changeDetector.detectChanges();\n this.resetScroll();\n }\n private resetScroll(): void {\n // Round week boundaries to avoid scrollTop truncation under CSS zoom.\n if (this.scroller)\n this.scroller.nativeElement.scrollTop = Math.round(1000 * this.rowHeight);\n }\n scroll(event: Event): void {\n const element = event.target as HTMLElement;\n this.snapPending = true;\n this.scheduleSnap();\n // Quantize displacement around the reset point, equally in both directions.\n const relativeRows = element.scrollTop / this.rowHeight - 1000;\n const index =\n 1000 + Math.sign(relativeRows) * Math.round(Math.abs(relativeRows));\n const requestedFirst = this.baseWeek + index;\n const first = this.clampFirstWeek(requestedFirst);\n if (requestedFirst !== first) {\n element.scrollTop = Math.round((first - this.baseWeek) * this.rowHeight);\n }\n if (first === this.firstWeek) return;\n this.clipMonth = false;\n this.firstWeek = first;\n this.anchorWeek = first + Math.floor(this.visibleCount / 2);\n if (index < 100 || index > 1900) {\n // Preserve signed displacement from this week; modulo turns fractional\n // rounding just below a boundary into almost a full row after rebasing.\n const offset =\n element.scrollTop - (first - this.baseWeek) * this.rowHeight;\n this.baseWeek = first - 1000;\n element.scrollTop = Math.round(1000 * this.rowHeight + offset);\n }\n this.renderRows();\n }\n private scheduleSnap(): void {\n if (this.scrollEndTimer) clearTimeout(this.scrollEndTimer);\n this.scrollEndTimer = setTimeout(() => this.snapWeek(), 200);\n }\n snapWeek(): void {\n if (this.scrollEndTimer) clearTimeout(this.scrollEndTimer);\n this.scrollEndTimer = undefined;\n if (!this.snapPending || !this.scroller) return;\n this.snapPending = false;\n // Align the current virtual week without rebuilding or rebasing its rows.\n const element = this.scroller.nativeElement;\n const target = Math.round(\n (this.firstWeek - this.baseWeek) * this.rowHeight,\n );\n if (element.scrollTop !== target) element.scrollTop = target;\n }\n private showFirstWeek(week: number): void {\n const first = this.clampFirstWeek(week);\n if (first === this.firstWeek) return;\n this.clipMonth = false;\n this.firstWeek = first;\n this.anchorWeek = first + Math.floor(this.visibleCount / 2);\n this.baseWeek = first - 1000;\n this.renderRows();\n this.resetScroll();\n }\n canMoveWeek(delta: number): boolean {\n return this.clampFirstWeek(this.firstWeek + delta) !== this.firstWeek;\n }\n moveWeek(delta: number): void {\n if (!this[WklyPickerInputsPropertyKeys.Disabled])\n this.showFirstWeek(this.firstWeek + delta);\n }\n private renderRows(): void {\n // Keep the virtual scroll offset here; row data is shared across Angular versions.\n const overscan = Math.max(\n 0,\n Math.min(50, this[WklyPickerInputsPropertyKeys.OverscanWeeks] || 0),\n );\n const start = this.firstWeek - overscan;\n this.paddingTop = (start - this.baseWeek) * this.rowHeight;\n this.rows = createWeekRows({\n generator: this.generator,\n adapter: this.adapter,\n startWeek: start,\n count: this.visibleCount + 2 * overscan,\n firstVisibleWeek: this.firstWeek,\n firstSupportedDay: this.firstSupportedDay,\n lastSupportedDay: this.lastSupportedDay,\n clipMonth: this.clipMonth,\n initialMonth: this.initialMonth,\n weekLabelMode: this[WklyPickerInputsPropertyKeys.WeekLabelMode],\n weekLabelFormatter:\n this[WklyPickerInputsPropertyKeys.WeekLabelFormatter] || null,\n isDayDisabled: (day) => this.dayDisabled(day),\n });\n this[WklyPickerOutputsPropertyKeys.ViewportChange].emit({\n firstVisibleAbsoluteWeek: this.firstWeek,\n lastVisibleAbsoluteWeek: this.firstWeek + this.visibleCount - 1,\n anchorAbsoluteWeek: this.anchorWeek,\n });\n }\n // Retain day DOM nodes and keyboard focus when row metadata is regenerated.\n trackCell(_i: number, cell: { epochDay: number }): number {\n return cell.epochDay;\n }\n trackRow(_i: number, row: Row): number {\n return row.week.absoluteWeek;\n }\n scrollToEpochDay(day: number, options: WklyJumpOptions = {}): void {\n integer(day);\n this.adapter.epochDayToDate(day);\n day = Math.max(\n this.firstSupportedDay,\n Math.min(this.lastSupportedDay, day),\n );\n // position renders synchronously; publish the tab stop before that render.\n if (options.focus) this.focused = day;\n this.position(day, false, options);\n if (options.select) this.select(day);\n if (options.focus) this.focusDay();\n }\n scrollToAbsoluteWeek(week: number, options: WklyJumpOptions = {}): void {\n // A boundary week can start before the adapter's first supported day.\n const first = firstEpochDayOf(week, this.effectiveOffset);\n this.scrollToEpochDay(\n week === this.firstSupportedWeek\n ? Math.max(first, this.firstSupportedDay)\n : first,\n options,\n );\n }\n scrollToCalendarDate(\n date: WklyCalendarDate,\n options: WklyJumpOptions = {},\n ): void {\n this.scrollToEpochDay(this.adapter.dateToEpochDay(date), options);\n }\n scrollToValue(value: string, options: WklyJumpOptions = {}): void {\n this.scrollToEpochDay(decodeIso(value).epochDay, options);\n }\n focusDay(): void {\n if (!this.browser) return;\n setTimeout(() => {\n if (this.destroyed) return;\n this.changeDetector.detectChanges();\n const day = this.host.nativeElement.querySelector(\n '[data-day=\"' + this.focused + '\"]',\n ) as HTMLElement;\n const fallback = this.host.nativeElement.querySelector(\n \"button:not(:disabled),input:not(:disabled)\",\n ) as HTMLElement;\n (day || fallback)?.focus({ preventScroll: true });\n });\n }\n}\n","import {\n ApplicationRef,\n ComponentFactoryResolver,\n ComponentRef,\n Directive,\n ElementRef,\n forwardRef,\n HostListener,\n Inject,\n Injectable,\n Injector,\n OnChanges,\n OnDestroy,\n Optional,\n PLATFORM_ID,\n} from \"@angular/core\";\nimport { DOCUMENT, isPlatformBrowser } from \"@angular/common\";\nimport {\n ControlValueAccessor,\n NG_VALIDATORS,\n NG_VALUE_ACCESSOR,\n ValidationErrors,\n Validator,\n} from \"@angular/forms\";\nimport {\n validateSelection,\n WklyGregorianCalendarAdapter,\n WklyCalendarDate,\n WklyPickerValue,\n WklyValidationError,\n} from \"@wkly/adapters\";\nimport { Subscription } from \"rxjs\";\nimport {\n coerceBoolean,\n INPUT_NAMES,\n WklyCloseReason,\n WklyJumpOptions,\n WklyPickerInputs,\n WklyPickerInputsPropertyKeys,\n WklyPickerOutputsPropertyKeys,\n} from \"./config\";\nimport { WklyDateTimePickerComponent } from \"./picker.component\";\nexport interface WklyPresentationRef {\n readonly component: ComponentRef<WklyDateTimePickerComponent>;\n destroy(): void;\n}\n/** Native-dialog factory. Browser resources are allocated only by open(). */\n@Injectable({ providedIn: \"root\" })\nexport class WklyDateTimePickerDialogService {\n constructor(\n private resolver: ComponentFactoryResolver,\n private injector: Injector,\n private app: ApplicationRef,\n @Inject(DOCUMENT) private document: Document,\n @Inject(PLATFORM_ID) private platform: Object,\n ) {}\n open(\n trigger: HTMLElement,\n onCancel: (reason: WklyCloseReason) => void,\n backdrop = true,\n injector?: Injector,\n ): WklyPresentationRef {\n if (!isPlatformBrowser(this.platform))\n throw new Error(\"Picker presentations can only open in a browser\");\n const dialog = this.document.createElement(\"dialog\");\n dialog.setAttribute(\"aria-label\", \"Date and time picker\");\n Object.assign(dialog.style, {\n padding: \"0\",\n border: \"0\",\n borderRadius: \"14px\",\n width: \"min(390px, 100vw)\",\n maxWidth: \"100vw\",\n maxHeight: \"94vh\",\n background: \"transparent\",\n });\n const component = this.resolver\n .resolveComponentFactory(WklyDateTimePickerComponent)\n .create(injector || this.injector);\n component.instance.presentation = \"transient\";\n dialog.appendChild(component.location.nativeElement);\n this.document.body.appendChild(dialog);\n this.app.attachView(component.hostView);\n const cancel = (event: Event) => {\n event.preventDefault();\n onCancel(\"escape\");\n };\n const click = (event: MouseEvent) => {\n if (backdrop && event.target === dialog) {\n const r = dialog.getBoundingClientRect();\n if (\n event.clientX < r.left ||\n event.clientX > r.right ||\n event.clientY < r.top ||\n event.clientY > r.bottom\n )\n onCancel(\"backdrop\");\n }\n };\n const keydown = (event: KeyboardEvent) => {\n if (event.key !== \"Tab\") return;\n const controls = Array.from(\n dialog.querySelectorAll<HTMLElement>(\n 'button:not(:disabled),input:not(:disabled),[tabindex=\"0\"]',\n ),\n ).filter(\n (el) =>\n el.tabIndex >= 0 &&\n el.getClientRects().length &&\n getComputedStyle(el).visibility !== \"hidden\",\n );\n const first = controls[0],\n last = controls[controls.length - 1];\n if (\n first &&\n (event.shiftKey\n ? this.document.activeElement === first\n : this.document.activeElement === last)\n ) {\n event.preventDefault();\n (event.shiftKey ? last : first).focus();\n }\n };\n dialog.addEventListener(\"cancel\", cancel);\n dialog.addEventListener(\"click\", click);\n dialog.addEventListener(\"keydown\", keydown);\n dialog.showModal();\n return {\n component,\n destroy: () => {\n dialog.removeEventListener(\"cancel\", cancel);\n dialog.removeEventListener(\"click\", click);\n dialog.removeEventListener(\"keydown\", keydown);\n dialog.close();\n this.app.detachView(component.hostView);\n component.destroy();\n dialog.remove();\n trigger.focus();\n },\n };\n }\n}\n/** Shared trigger lifecycle; optional presentation packages extend this class. */\n@Directive()\nexport abstract class WklyTriggerBase\n extends WklyPickerInputs\n implements ControlValueAccessor, Validator, OnChanges, OnDestroy\n{\n protected ref: WklyPresentationRef | null = null;\n protected subscriptions: Subscription[] = [];\n private errors: readonly WklyValidationError[] = [];\n private change: (value: WklyPickerValue) => void = () => {};\n private touched: () => void = () => {};\n private validation: () => void = () => {};\n constructor(protected element: ElementRef<HTMLElement>) {\n super();\n }\n protected abstract create(): WklyPresentationRef;\n @HostListener(\"click\") open(): void {\n if (this[WklyPickerInputsPropertyKeys.Disabled] || this.ref) return;\n this.ref = this.create();\n const picker = this.ref.component.instance;\n this.copy();\n this.subscriptions = [\n picker[WklyPickerOutputsPropertyKeys.ValueChange].subscribe((value) => {\n this[WklyPickerInputsPropertyKeys.Value] = value;\n this.change(value);\n this[WklyPickerOutputsPropertyKeys.ValueChange].emit(value);\n this.display();\n }),\n picker[WklyPickerOutputsPropertyKeys.ValidationChange].subscribe(\n (errors) => {\n this.errors = errors;\n this[WklyPickerOutputsPropertyKeys.ValidationChange].emit(errors);\n this.validation();\n },\n ),\n picker[WklyPickerOutputsPropertyKeys.Closed].subscribe((reason) =>\n this.close(reason),\n ),\n picker[WklyPickerOutputsPropertyKeys.ViewportChange].subscribe((value) =>\n this[WklyPickerOutputsPropertyKeys.ViewportChange].emit(value),\n ),\n picker[WklyPickerOutputsPropertyKeys.ViewModeChange].subscribe((value) =>\n this[WklyPickerOutputsPropertyKeys.ViewModeChange].emit(value),\n ),\n ];\n this.ref.component.changeDetectorRef.detectChanges();\n picker.focusDay();\n this[WklyPickerOutputsPropertyKeys.Opened].emit();\n }\n @HostListener(\"keydown\", [\"$event\"]) key(event: KeyboardEvent): void {\n if (\n event.key === \"Enter\" ||\n event.key === \" \" ||\n event.key === \"ArrowDown\"\n ) {\n event.preventDefault();\n this.open();\n }\n }\n @HostListener(\"blur\") blur(): void {\n this.touched();\n }\n close(reason: WklyCloseReason = \"programmatic\"): void {\n if (!this.ref) return;\n const ref = this.ref;\n this.ref = null;\n this.subscriptions.forEach((s) => s.unsubscribe());\n this.subscriptions = [];\n ref.destroy();\n this.touched();\n this[WklyPickerOutputsPropertyKeys.Closed].emit(reason);\n }\n ngOnChanges(): void {\n [\n WklyPickerInputsPropertyKeys.ShowSeconds,\n WklyPickerInputsPropertyKeys.AllowRangeAcrossDisabled,\n WklyPickerInputsPropertyKeys.Required,\n WklyPickerInputsPropertyKeys.Disabled,\n WklyPickerInputsPropertyKeys.CloseOnBackdrop,\n ].forEach(\n (key) => ((this as any)[key] = coerceBoolean((this as any)[key])),\n );\n this.checkValue();\n this.display();\n if (this.ref) {\n this.copy();\n this.ref.component.instance.ngOnChanges({\n [WklyPickerInputsPropertyKeys.Value]: true,\n });\n this.ref.component.changeDetectorRef.detectChanges();\n }\n }\n ngOnDestroy(): void {\n this.close();\n }\n private copy(): void {\n if (this.ref)\n for (const name of INPUT_NAMES)\n (this.ref.component.instance as any)[name] = (this as any)[name];\n }\n private display(): void {\n const host = this.element.nativeElement as HTMLInputElement;\n if (host.tagName === \"INPUT\") {\n host.readOnly = true;\n const value = this[WklyPickerInputsPropertyKeys.Value];\n host.value =\n value === null\n ? \"\"\n : typeof value === \"string\"\n ? value\n : value.join(\" — \");\n host.disabled = this[WklyPickerInputsPropertyKeys.Disabled];\n host.setAttribute(\"aria-haspopup\", \"dialog\");\n }\n }\n private checkValue(): void {\n this.errors = validateSelection(\n this[WklyPickerInputsPropertyKeys.Value],\n this,\n this[WklyPickerInputsPropertyKeys.CalendarAdapter] ||\n new WklyGregorianCalendarAdapter(\n this[WklyPickerInputsPropertyKeys.Locale] || \"en-US\",\n ),\n );\n this[WklyPickerOutputsPropertyKeys.ValidationChange].emit(this.errors);\n this.validation();\n }\n writeValue(value: WklyPickerValue): void {\n this[WklyPickerInputsPropertyKeys.Value] = value;\n this.checkValue();\n this.display();\n if (this.ref) this.ref.component.instance.writeValue(value);\n }\n registerOnChange(fn: (value: WklyPickerValue) => void): void {\n this.change = fn;\n }\n registerOnTouched(fn: () => void): void {\n this.touched = fn;\n }\n setDisabledState(value: boolean): void {\n this[WklyPickerInputsPropertyKeys.Disabled] = value;\n this.display();\n if (this.ref) this.ref.component.instance.setDisabledState(value);\n }\n validate(): ValidationErrors | null {\n return this.errors.length ? { wkly: this.errors } : null;\n }\n registerOnValidatorChange(fn: () => void): void {\n this.validation = fn;\n }\n scrollToEpochDay(day: number, options?: WklyJumpOptions): void {\n this.open();\n this.ref?.component.instance.scrollToEpochDay(day, options);\n }\n scrollToAbsoluteWeek(week: number, options?: WklyJumpOptions): void {\n this.open();\n this.ref?.component.instance.scrollToAbsoluteWeek(week, options);\n }\n scrollToCalendarDate(\n date: WklyCalendarDate,\n options?: WklyJumpOptions,\n ): void {\n this.open();\n this.ref?.component.instance.scrollToCalendarDate(date, options);\n }\n scrollToValue(value: string, options?: WklyJumpOptions): void {\n this.open();\n this.ref?.component.instance.scrollToValue(value, options);\n }\n}\n@Directive({\n selector: \"[wklyDateTimePickerDialog]\",\n exportAs: \"wklyDialog\",\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => WklyDateTimePickerDialogDirective),\n multi: true,\n },\n {\n provide: NG_VALIDATORS,\n useExisting: forwardRef(() => WklyDateTimePickerDialogDirective),\n multi: true,\n },\n ],\n})\nexport class WklyDateTimePickerDialogDirective extends WklyTriggerBase {\n constructor(\n element: ElementRef<HTMLElement>,\n private service: WklyDateTimePickerDialogService,\n private triggerInjector: Injector,\n ) {\n super(element);\n }\n protected create(): WklyPresentationRef {\n return this.service.open(\n this.element.nativeElement,\n (reason) => this.close(reason),\n this[WklyPickerInputsPropertyKeys.CloseOnBackdrop],\n this.triggerInjector,\n );\n }\n}\n","import {\n Component,\n EventEmitter,\n Input,\n OnChanges,\n OnDestroy,\n Output,\n} from \"@angular/core\";\nimport { floorMod } from \"@wkly/core\";\nimport { normalizeDigits } from \"@wkly/adapters\";\n@Component({\n selector: \"wkly-field\",\n templateUrl: \"./field.component.html\",\n styleUrls: [\"./field.component.css\"],\n})\nexport class WklyFieldComponent implements OnChanges, OnDestroy {\n @Input() value: number | null = 0;\n @Input() label = \"\";\n @Input() hideLabel = false;\n @Input() previousLabel = \"\";\n @Input() nextLabel = \"\";\n @Input() min = 0;\n @Input() max = 59;\n @Input() step = 1;\n @Input() locale = \"en-US\";\n @Input() disabled = false;\n @Input() invalid = false;\n @Input() labels: readonly string[] | null = null;\n @Output() valueChange = new EventEmitter<number | null>();\n @Output() complete = new EventEmitter<void>();\n private before: number | null = null;\n private touchY = 0;\n private touchSteps = 0;\n private touchChanged = false;\n private typed: string | null = null;\n private inputTimer: ReturnType<typeof setTimeout> | null = null;\n private wheelTimer: ReturnType<typeof setTimeout> | null = null;\n get display(): string {\n if (this.typed !== null) return this.typed;\n return this.value === null\n ? \"\"\n : this.labels\n ? this.labels[this.value - this.min] || String(this.value)\n : new Intl.NumberFormat(this.locale, {\n useGrouping: false,\n minimumIntegerDigits: this.max < 60 ? 2 : 1,\n }).format(this.value);\n }\n ngOnChanges(changes: any): void {\n if (changes.value && this.min < 0 && this.typed !== null) {\n const typedValue =\n this.typed === \"\" || this.typed === \"-\" ? null : Number(this.typed);\n if (this.value !== typedValue) {\n // External date edits replace a pending relative-day preview.\n this.cancelInput();\n this.typed = null;\n }\n }\n }\n ngOnDestroy(): void {\n this.cancelInput();\n if (this.wheelTimer !== null) clearTimeout(this.wheelTimer);\n }\n next(delta: number): number {\n const count = Math.floor((this.max - this.min) / this.step) + 1;\n return (\n this.min +\n floorMod(\n Math.floor(\n ((this.value === null ? this.min : this.value) - this.min) /\n this.step,\n ) + delta,\n count,\n ) *\n this.step\n );\n }\n neighbor(delta: number): string {\n const n = this.next(delta);\n return this.labels\n ? this.labels[n - this.min] || \"\"\n : new Intl.NumberFormat(this.locale, { useGrouping: false }).format(n);\n }\n stepBy(delta: number): void {\n if (this.disabled) return;\n this.scrollBy(delta);\n this.complete.emit();\n }\n begin(event: FocusEvent): void {\n this.before = this.value;\n (event.target as HTMLInputElement).select();\n }\n type(event: Event): void {\n if (this.disabled) return;\n const input = event.target as HTMLInputElement;\n const raw = input.value;\n const numeric = Array.from(raw).every(\n (character) => normalizeDigits(character).length === 1,\n );\n if (this.min < 0 && !this.labels) {\n // Preserve the sign while using the same locale digit normalization.\n const signed = raw\n .replace(/[\\u200e\\u200f\\u061c]/g, \"\")\n .replace(/\\u2212/g, \"-\");\n const digits = normalizeDigits(signed);\n this.typed = input.value = (signed.startsWith(\"-\") ? \"-\" : \"\") + digits;\n this.value =\n digits === \"\"\n ? null\n : Math.max(this.min, Math.min(this.max, Number(this.typed)));\n if (this.value !== null && Number(this.typed) !== this.value)\n this.typed = input.value = String(this.value);\n } else if (numeric) {\n const normalized = normalizeDigits(raw);\n this.typed = input.value =\n this.min >= 0 && this.max < 100 ? normalized.slice(-2) : normalized;\n this.value = this.typed === \"\" ? null : Number(this.typed);\n } else if (this.labels) {\n const search = raw.trim().toLocaleLowerCase(this.locale);\n this.typed = raw;\n const matches = this.labels\n .map((label, index) => ({ label, index }))\n .filter((item) =>\n item.label.toLocaleLowerCase(this.locale).includes(search),\n );\n this.value = matches.length === 1 ? this.min + matches[0].index : null;\n } else {\n this.typed = input.value = normalizeDigits(raw);\n this.value = this.typed === \"\" ? null : Number(this.typed);\n }\n this.valueChange.emit(this.value);\n this.cancelInput();\n if (!numeric && this.labels && this.value !== null) this.complete.emit();\n this.inputTimer = setTimeout(() => {\n this.inputTimer = null;\n this.typed = null;\n if (!this.disabled) this.complete.emit();\n }, 1000);\n }\n key(event: KeyboardEvent): void {\n if (event.key === \"Escape\") {\n event.preventDefault();\n event.stopPropagation();\n this.cancelInput();\n this.typed = null;\n this.value = this.before;\n this.valueChange.emit(this.before);\n (event.target as HTMLInputElement).value = this.display;\n (event.target as HTMLInputElement).blur();\n }\n if (event.key === \"Enter\") {\n event.preventDefault();\n event.stopPropagation();\n this.finish();\n }\n const delta =\n event.key === \"ArrowUp\"\n ? -1\n : event.key === \"ArrowDown\"\n ? 1\n : event.key === \"PageUp\"\n ? -5\n : event.key === \"PageDown\"\n ? 5\n : 0;\n if (delta) {\n event.preventDefault();\n this.stepBy(delta);\n }\n }\n finish(): void {\n this.cancelInput();\n this.typed = null;\n this.complete.emit();\n }\n wheel(event: WheelEvent): void {\n if (this.disabled || Math.abs(event.deltaY) < 1) return;\n event.preventDefault();\n this.scrollBy(event.deltaY > 0 ? 1 : -1);\n if (this.wheelTimer !== null) clearTimeout(this.wheelTimer);\n this.wheelTimer = setTimeout(() => {\n this.wheelTimer = null;\n this.complete.emit();\n }, 140);\n }\n touchStart(event: TouchEvent): void {\n this.touchY = event.touches[0].clientY;\n this.touchSteps = 0;\n this.touchChanged = false;\n }\n touchMove(event: TouchEvent): void {\n this.applyTouchY(event.touches[0].clientY);\n }\n touchEnd(event: TouchEvent): void {\n this.applyTouchY(event.changedTouches[0].clientY);\n if (this.touchChanged) this.complete.emit();\n this.touchChanged = false;\n }\n private cancelInput(): void {\n if (this.inputTimer !== null) clearTimeout(this.inputTimer);\n this.inputTimer = null;\n }\n private scrollBy(delta: number): void {\n if (this.disabled || !delta) return;\n this.cancelInput();\n this.typed = null;\n this.value = this.next(delta);\n this.valueChange.emit(this.value);\n }\n private applyTouchY(y: number): void {\n // Count total gesture steps so repeated move events do not duplicate changes.\n if (this.disabled) return;\n const delta = this.touchY - y;\n const steps =\n Math.abs(delta) > 16\n ? Math.sign(delta) * Math.max(1, Math.round(Math.abs(delta) / 40))\n : 0;\n const change = steps - this.touchSteps;\n if (!change) return;\n this.scrollBy(change);\n this.touchSteps = steps;\n this.touchChanged = true;\n }\n}\n","import { NgModule } from \"@angular/core\";\nimport { CommonModule } from \"@angular/common\";\nimport { WklyDateTimePickerComponent } from \"./picker.component\";\nimport { WklyDateTimePickerDialogDirective } from \"./presentation\";\nimport { WklyFieldComponent } from \"./field.component\";\nexport * from \"./config\";\nexport { WklyDateTimePickerComponent } from \"./picker.component\";\nexport {\n WklyPresentationRef,\n WklyDateTimePickerDialogService,\n WklyTriggerBase,\n WklyDateTimePickerDialogDirective,\n} from \"./presentation\";\nexport { WklyFieldComponent } from \"./field.component\";\nexport {\n WklyPickerValue,\n WklyIsoString,\n WklyRangeValue,\n WklySelectionMode,\n WklyValidationError,\n WklyValidationErrorCode,\n WklyViewportPreset,\n WklyHourCycle,\n WklyEndpoint,\n WklyDisabledDatePredicate,\n WklyDisabledTimePredicate,\n WklyRangeValidator,\n WklyWeekLabelMode,\n WklyWeekLabelFormatter,\n} from \"@wkly/adapters\";\n@NgModule({\n imports: [CommonModule],\n declarations: [\n WklyDateTimePickerComponent,\n WklyDateTimePickerDialogDirective,\n WklyFieldComponent,\n ],\n entryComponents: [WklyDateTimePickerComponent],\n exports: [WklyDateTimePickerComponent, WklyDateTimePickerDialogDirective],\n})\nexport class WklyDateTimePickerModule {}\n"]}