@rt-tools/ui-kit-v2 0.41.0 → 0.43.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 (56) hide show
  1. package/fesm2022/rt-tools-ui-kit-v2-calendar.mjs +4 -4
  2. package/fesm2022/rt-tools-ui-kit-v2-calendar.mjs.map +1 -1
  3. package/fesm2022/rt-tools-ui-kit-v2-core.mjs +22 -0
  4. package/fesm2022/rt-tools-ui-kit-v2-core.mjs.map +1 -1
  5. package/fesm2022/rt-tools-ui-kit-v2-date-picker.mjs +155 -100
  6. package/fesm2022/rt-tools-ui-kit-v2-date-picker.mjs.map +1 -1
  7. package/fesm2022/rt-tools-ui-kit-v2-date-range.mjs +2 -2
  8. package/fesm2022/rt-tools-ui-kit-v2-date-range.mjs.map +1 -1
  9. package/fesm2022/rt-tools-ui-kit-v2-page-header.mjs +1778 -18
  10. package/fesm2022/rt-tools-ui-kit-v2-page-header.mjs.map +1 -1
  11. package/fesm2022/rt-tools-ui-kit-v2-rich-editor.mjs +22 -5
  12. package/fesm2022/rt-tools-ui-kit-v2-rich-editor.mjs.map +1 -1
  13. package/fesm2022/rt-tools-ui-kit-v2-stepper.mjs +34 -11
  14. package/fesm2022/rt-tools-ui-kit-v2-stepper.mjs.map +1 -1
  15. package/fesm2022/rt-tools-ui-kit-v2-tabs.mjs +725 -47
  16. package/fesm2022/rt-tools-ui-kit-v2-tabs.mjs.map +1 -1
  17. package/fesm2022/rt-tools-ui-kit-v2-workspace-details.mjs +6 -0
  18. package/fesm2022/rt-tools-ui-kit-v2-workspace-details.mjs.map +1 -1
  19. package/fesm2022/rt-tools-ui-kit-v2-workspace.mjs +217 -6
  20. package/fesm2022/rt-tools-ui-kit-v2-workspace.mjs.map +1 -1
  21. package/package.json +1 -1
  22. package/src/lib/components/calendar/CONTEXT.md +4 -2
  23. package/src/lib/components/calendar/rt-calendar.component.scss +29 -2
  24. package/src/lib/components/date-picker/CONTEXT.md +5 -0
  25. package/src/lib/components/date-picker/panel/CONTEXT.md +42 -0
  26. package/src/lib/components/date-picker/panel/rt-date-panel.component.scss +55 -2
  27. package/src/lib/components/page-header/CONTEXT.md +35 -1
  28. package/src/lib/components/page-header/bar/rt-page-bar.component.scss +161 -0
  29. package/src/lib/components/page-header/rail/rt-page-actions.component.scss +115 -0
  30. package/src/lib/components/page-header/rail/rt-page-phone-menu.component.scss +129 -0
  31. package/src/lib/components/page-header/rail/rt-page-rail.component.scss +281 -0
  32. package/src/lib/components/page-header/rail/rt-page-user.component.scss +76 -0
  33. package/src/lib/components/page-header/rt-page-header.component.scss +5 -0
  34. package/src/lib/components/page-header/stories/component/test-page-header-vertical.component.scss +72 -0
  35. package/src/lib/components/page-header/stories/component/test-page-table.component.scss +81 -0
  36. package/src/lib/components/page-header/user/rt-page-header-user.component.scss +6 -0
  37. package/src/lib/components/stepper/CONTEXT.md +34 -2
  38. package/src/lib/components/stepper/rt-stepper.component.scss +62 -43
  39. package/src/lib/components/tabs/CONTEXT.md +30 -1
  40. package/src/lib/components/tabs/rt-tabs-arrows.scss +140 -0
  41. package/src/lib/components/tabs/rt-tabs-more-menu.scss +126 -0
  42. package/src/lib/components/tabs/rt-tabs-more.component.scss +29 -0
  43. package/src/lib/components/tabs/rt-tabs.component.scss +18 -61
  44. package/src/lib/components/workspace/CONTEXT.md +11 -1
  45. package/src/lib/components/workspace/rt-workspace.component.scss +51 -3
  46. package/src/rich-editor/lib/components/chat/CONTEXT.md +12 -2
  47. package/src/rich-editor/lib/components/chat/rt-chat-messenger.scss +9 -3
  48. package/src/rich-editor/lib/components/chat/rt-chat-translation.scss +92 -0
  49. package/types/rt-tools-ui-kit-v2-calendar.d.ts +13 -1
  50. package/types/rt-tools-ui-kit-v2-core.d.ts +9 -1
  51. package/types/rt-tools-ui-kit-v2-date-picker.d.ts +157 -5
  52. package/types/rt-tools-ui-kit-v2-page-header.d.ts +202 -2
  53. package/types/rt-tools-ui-kit-v2-rich-editor.d.ts +25 -0
  54. package/types/rt-tools-ui-kit-v2-stepper.d.ts +20 -6
  55. package/types/rt-tools-ui-kit-v2-tabs.d.ts +120 -1
  56. package/types/rt-tools-ui-kit-v2-workspace.d.ts +33 -1
@@ -2,15 +2,15 @@ import * as i0 from "@angular/core";
2
2
  import { ChangeDetectionStrategy, Component, ViewEncapsulation, afterRenderEffect, booleanAttribute, computed, forwardRef, inject, input, linkedSignal, numberAttribute, output, signal, viewChild, viewChildren } from "@angular/core";
3
3
  import { BlockDirective, ElemDirective, ModDirective } from "@rt-tools/core";
4
4
  import { BreakpointsService, RT_KIT_LABELS, RT_KIT_LOCALE } from "@rt-tools/ui-kit-v2/core";
5
+ import { RtButtonDirective } from "@rt-tools/ui-kit-v2/button";
6
+ import { ERtCalendarDayState, RtCalendarComponent } from "@rt-tools/ui-kit-v2/calendar";
7
+ import { RtIconButtonComponent } from "@rt-tools/ui-kit-v2/icon-button";
8
+ import { RtToggleButtonGroupComponent } from "@rt-tools/ui-kit-v2/toggle-button-group";
5
9
  import { RtBottomSheetComponent } from "@rt-tools/ui-kit-v2/bottom-sheet";
6
10
  import { RtFormControlBase } from "@rt-tools/ui-kit-v2/form-control";
7
- import { RtIconButtonComponent } from "@rt-tools/ui-kit-v2/icon-button";
8
11
  import { RtPopoverDirective } from "@rt-tools/ui-kit-v2/popover";
9
12
  import * as i1 from "@rt-tools/ui-kit-v2/radius";
10
13
  import { RtRadiusDirective } from "@rt-tools/ui-kit-v2/radius";
11
- import { RtButtonDirective } from "@rt-tools/ui-kit-v2/button";
12
- import { ERtCalendarDayState, RtCalendarComponent } from "@rt-tools/ui-kit-v2/calendar";
13
- import { RtToggleButtonGroupComponent } from "@rt-tools/ui-kit-v2/toggle-button-group";
14
14
  const DAY_RE = /^(\d{4})-(\d{2})-(\d{2})$/;
15
15
  const TIME_RE = /^(\d{2}):(\d{2})$/;
16
16
  const DAY_LENGTH_MS = 864e5;
@@ -133,6 +133,30 @@ function rtDateMonth(month, ctx) {
133
133
  days
134
134
  };
135
135
  }
136
+ function outsideDay(ms, min, max) {
137
+ const key = msToDay(ms);
138
+ return {
139
+ key,
140
+ dayOfMonth: Number(key.slice(8)),
141
+ crossed: !rtDateInBounds(key, min, max)
142
+ };
143
+ }
144
+ function rtDatePanelMonth(month, ctx) {
145
+ const base = rtDateMonth(month, ctx);
146
+ const first = dayToMs(base.days[0].key);
147
+ const last = dayToMs(base.days[base.days.length - 1].key);
148
+ const lead = base.leadingBlanks.length;
149
+ const tail = (WEEK - (lead + base.days.length) % WEEK) % WEEK;
150
+ return {
151
+ ...base,
152
+ days: base.days.map((day) => day.disabled ? {
153
+ ...day,
154
+ state: ERtCalendarDayState.Busy
155
+ } : day),
156
+ leadingDays: Array.from({ length: lead }, (_, i) => outsideDay(first - (lead - i) * DAY_LENGTH_MS, ctx.min, ctx.max)),
157
+ trailingDays: Array.from({ length: tail }, (_, i) => outsideDay(last + (i + 1) * DAY_LENGTH_MS, ctx.min, ctx.max))
158
+ };
159
+ }
136
160
  function rtDateWeekdays(locale) {
137
161
  const format = new Intl.DateTimeFormat(locale, {
138
162
  weekday: "short",
@@ -140,7 +164,10 @@ function rtDateWeekdays(locale) {
140
164
  });
141
165
  const monday = Date.UTC(2024, 0, 1);
142
166
  const shift = rtDateFirstDay(locale) - 1;
143
- return Array.from({ length: WEEK }, (_, i) => format.format(monday + (i + shift) % WEEK * DAY_LENGTH_MS));
167
+ return Array.from({ length: WEEK }, (_, i) => {
168
+ const name = format.format(monday + (i + shift) % WEEK * DAY_LENGTH_MS);
169
+ return name.charAt(0).toLocaleUpperCase(locale) + name.slice(1);
170
+ });
144
171
  }
145
172
  function rtDateMonths(year, locale, min, max) {
146
173
  const format = new Intl.DateTimeFormat(locale, {
@@ -231,9 +258,93 @@ function rtDateGridKey(key, day, firstDay, min, max) {
231
258
  if (low !== null && rank(target) < rank(low)) return low;
232
259
  return high !== null && rank(target) > rank(high) ? high : target;
233
260
  }
261
+ const SAMPLE_DAY = new Date(2026, 0, 31);
262
+ const DEFAULT_LAYOUT = {
263
+ order: [
264
+ "day",
265
+ "month",
266
+ "year"
267
+ ],
268
+ separator: "."
269
+ };
270
+ const YEAR_LEN$1 = 4;
271
+ const PART_MAX_LEN = 2;
272
+ const DAY_GROUPS = 3;
273
+ const TIME_GROUPS = 2;
274
+ const TEXT_RE = /^[\d\s.,/:\-T]+$/;
275
+ function isDatePart(type) {
276
+ return type === "day" || type === "month" || type === "year";
277
+ }
278
+ function dayText(day, layout) {
279
+ const [year, month, date] = day.split("-");
280
+ const parts = {
281
+ day: date,
282
+ month,
283
+ year
284
+ };
285
+ return layout.order.map((part) => parts[part]).join(layout.separator);
286
+ }
287
+ function readDay(groups, layout) {
288
+ const parts = {};
289
+ layout.order.forEach((part, index) => {
290
+ parts[part] = groups[index];
291
+ });
292
+ const { day, month, year } = parts;
293
+ if (day === void 0 || month === void 0 || year?.length !== YEAR_LEN$1) return null;
294
+ if (day.length > PART_MAX_LEN || month.length > PART_MAX_LEN) return null;
295
+ return `${year}-${month.padStart(PART_MAX_LEN, "0")}-${day.padStart(PART_MAX_LEN, "0")}`;
296
+ }
297
+ function readTime(groups) {
298
+ if (groups.length !== TIME_GROUPS) return null;
299
+ const [hour, minute] = groups;
300
+ if (minute.length !== PART_MAX_LEN || hour.length > PART_MAX_LEN) return null;
301
+ return `${hour.padStart(PART_MAX_LEN, "0")}:${minute}`;
302
+ }
303
+ function readGroups(groups, type, layout) {
304
+ if (type === "time") return readTime(groups);
305
+ if (type === "date") return groups.length === DAY_GROUPS ? readDay(groups, layout) : null;
306
+ if (groups.length !== 5) return null;
307
+ const day = readDay(groups.slice(0, DAY_GROUPS), layout);
308
+ const time = readTime(groups.slice(DAY_GROUPS));
309
+ return day === null || time === null ? null : `${day}T${time}`;
310
+ }
311
+ function rtDateLayout(locale) {
312
+ const parts = new Intl.DateTimeFormat(locale, {
313
+ day: "2-digit",
314
+ month: "2-digit",
315
+ year: "numeric"
316
+ }).formatToParts(SAMPLE_DAY);
317
+ const order = parts.map((part) => part.type).filter((type) => isDatePart(type));
318
+ const separator = parts.find((part) => part.type === "literal")?.value.trim() ?? "";
319
+ if (order.length !== DAY_GROUPS || separator === "") return DEFAULT_LAYOUT;
320
+ return {
321
+ order,
322
+ separator
323
+ };
324
+ }
325
+ function rtDateText(value, type, layout) {
326
+ if (type === "time" || rtDateRead(value, type) === null) return value;
327
+ if (type === "date") return dayText(value, layout);
328
+ const [day, time] = value.split("T");
329
+ return `${dayText(day, layout)} ${time}`;
330
+ }
331
+ function rtDateShape(type, layout, letters) {
332
+ const time = `${letters.hour}:${letters.minute}`;
333
+ if (type === "time") return time;
334
+ const day = layout.order.map((part) => letters[part]).join(layout.separator);
335
+ return type === "date" ? day : `${day} ${time}`;
336
+ }
337
+ function rtDateParse(text, type, layout) {
338
+ const iso = rtDateRead(text, type);
339
+ if (iso !== null) return iso;
340
+ const value = text.trim();
341
+ if (!TEXT_RE.test(value)) return null;
342
+ const candidate = readGroups(value.match(/\d+/g) ?? [], type, layout);
343
+ return candidate === null ? null : rtDateRead(candidate, type);
344
+ }
234
345
  const BEM_BLOCK$1 = "rt-date-panel";
235
346
  const MONTH_LEN = 7;
236
- const YEAR_LEN$1 = 4;
347
+ const YEAR_LEN = 4;
237
348
  const ESCAPE_BACK = {
238
349
  days: null,
239
350
  months: "days",
@@ -257,11 +368,11 @@ var RtDatePanelComponent = class RtDatePanelComponent {
257
368
  this.draftDay = linkedSignal(() => rtDateSplit(this.value(), this.type()).day, ...ngDevMode ? [{ debugName: "draftDay" }] : /* istanbul ignore next */ []);
258
369
  this.draftTime = linkedSignal(() => rtDateSplit(this.value(), this.type()).time, ...ngDevMode ? [{ debugName: "draftTime" }] : /* istanbul ignore next */ []);
259
370
  this.shownMonth = linkedSignal(() => (this.draftDay() ?? this.today()).slice(0, MONTH_LEN), ...ngDevMode ? [{ debugName: "shownMonth" }] : /* istanbul ignore next */ []);
260
- this.year = linkedSignal(() => Number(this.shownMonth().slice(0, YEAR_LEN$1)), ...ngDevMode ? [{ debugName: "year" }] : /* istanbul ignore next */ []);
371
+ this.year = linkedSignal(() => Number(this.shownMonth().slice(0, YEAR_LEN)), ...ngDevMode ? [{ debugName: "year" }] : /* istanbul ignore next */ []);
261
372
  this.split = computed(() => this.sheet() && this.type() === "datetime-local", ...ngDevMode ? [{ debugName: "split" }] : /* istanbul ignore next */ []);
262
373
  this.showDate = computed(() => this.type() !== "time" && !(this.split() && this.tab() === "time"), ...ngDevMode ? [{ debugName: "showDate" }] : /* istanbul ignore next */ []);
263
374
  this.showTime = computed(() => this.type() !== "date" && !(this.split() && this.tab() === "date"), ...ngDevMode ? [{ debugName: "showTime" }] : /* istanbul ignore next */ []);
264
- this.months = computed(() => [rtDateMonth(this.shownMonth(), {
375
+ this.months = computed(() => [rtDatePanelMonth(this.shownMonth(), {
265
376
  locale: this.#locale(),
266
377
  today: this.today(),
267
378
  chosen: this.draftDay(),
@@ -279,8 +390,8 @@ var RtDatePanelComponent = class RtDatePanelComponent {
279
390
  const cells = this.yearCells();
280
391
  return `${cells[0].label} – ${cells[cells.length - 1].label}`;
281
392
  }, ...ngDevMode ? [{ debugName: "yearSpan" }] : /* istanbul ignore next */ []);
282
- this.chosenYear = computed(() => this.draftDay()?.slice(0, YEAR_LEN$1) ?? null, ...ngDevMode ? [{ debugName: "chosenYear" }] : /* istanbul ignore next */ []);
283
- this.currentYear = computed(() => this.today().slice(0, YEAR_LEN$1), ...ngDevMode ? [{ debugName: "currentYear" }] : /* istanbul ignore next */ []);
393
+ this.chosenYear = computed(() => this.draftDay()?.slice(0, YEAR_LEN) ?? null, ...ngDevMode ? [{ debugName: "chosenYear" }] : /* istanbul ignore next */ []);
394
+ this.currentYear = computed(() => this.today().slice(0, YEAR_LEN), ...ngDevMode ? [{ debugName: "currentYear" }] : /* istanbul ignore next */ []);
284
395
  this.currentMonth = computed(() => this.today().slice(0, MONTH_LEN), ...ngDevMode ? [{ debugName: "currentMonth" }] : /* istanbul ignore next */ []);
285
396
  this.canPrevYears = computed(() => rtDateCanPageYears(this.yearStart(), -1, this.min(), this.max()), ...ngDevMode ? [{ debugName: "canPrevYears" }] : /* istanbul ignore next */ []);
286
397
  this.canNextYears = computed(() => rtDateCanPageYears(this.yearStart(), 1, this.min(), this.max()), ...ngDevMode ? [{ debugName: "canNextYears" }] : /* istanbul ignore next */ []);
@@ -294,7 +405,12 @@ var RtDatePanelComponent = class RtDatePanelComponent {
294
405
  max: this.max()
295
406
  }), ...ngDevMode ? [{ debugName: "columns" }] : /* istanbul ignore next */ []);
296
407
  this.todayOff = computed(() => !rtDateInBounds(this.today(), this.min(), this.max()), ...ngDevMode ? [{ debugName: "todayOff" }] : /* istanbul ignore next */ []);
408
+ this.hasFooter = computed(() => this.type() !== "date" || this.isTodayButtonShown(), ...ngDevMode ? [{ debugName: "hasFooter" }] : /* istanbul ignore next */ []);
297
409
  this.canApply = computed(() => this.#draftValue() !== "", ...ngDevMode ? [{ debugName: "canApply" }] : /* istanbul ignore next */ []);
410
+ this.draftText = computed(() => {
411
+ const parts = this.#draftValue().split("T");
412
+ return parts.length < 2 ? "" : `${rtDateText(parts[0], "date", rtDateLayout(this.#locale()))}, ${parts[1]}`;
413
+ }, ...ngDevMode ? [{ debugName: "draftText" }] : /* istanbul ignore next */ []);
298
414
  this.tabs = computed(() => [{
299
415
  value: "date",
300
416
  label: this.t().uiDate
@@ -314,6 +430,10 @@ var RtDatePanelComponent = class RtDatePanelComponent {
314
430
  ...ngDevMode ? { debugName: "sheet" } : /* istanbul ignore next */ {},
315
431
  transform: booleanAttribute
316
432
  });
433
+ this.isTodayButtonShown = input(true, {
434
+ ...ngDevMode ? { debugName: "isTodayButtonShown" } : /* istanbul ignore next */ {},
435
+ transform: booleanAttribute
436
+ });
317
437
  this.now = input(null, ...ngDevMode ? [{ debugName: "now" }] : /* istanbul ignore next */ []);
318
438
  this.picked = output();
319
439
  this.closed = output();
@@ -358,7 +478,7 @@ var RtDatePanelComponent = class RtDatePanelComponent {
358
478
  this.shownMonth.set(rtDateAddMonths(this.shownMonth(), delta));
359
479
  }
360
480
  openMonths() {
361
- this.year.set(Number(this.shownMonth().slice(0, YEAR_LEN$1)));
481
+ this.year.set(Number(this.shownMonth().slice(0, YEAR_LEN)));
362
482
  this.view.set("months");
363
483
  }
364
484
  pageYear(delta) {
@@ -391,6 +511,9 @@ var RtDatePanelComponent = class RtDatePanelComponent {
391
511
  const value = this.#draftValue();
392
512
  if (value !== "") this.#emit(value);
393
513
  }
514
+ reset() {
515
+ this.#emit("");
516
+ }
394
517
  #emit(value) {
395
518
  this.picked.emit(value);
396
519
  this.closed.emit();
@@ -463,6 +586,13 @@ var RtDatePanelComponent = class RtDatePanelComponent {
463
586
  isRequired: false,
464
587
  transformFunction: null
465
588
  },
589
+ isTodayButtonShown: {
590
+ classPropertyName: "isTodayButtonShown",
591
+ publicName: "isTodayButtonShown",
592
+ isSignal: true,
593
+ isRequired: false,
594
+ transformFunction: null
595
+ },
466
596
  now: {
467
597
  classPropertyName: "now",
468
598
  publicName: "now",
@@ -490,8 +620,8 @@ var RtDatePanelComponent = class RtDatePanelComponent {
490
620
  isSignal: true
491
621
  }],
492
622
  ngImport: i0,
493
- template: "<ng-container rtBlock=\"rt-date-panel\">\n @if (split()) {\n <rt-toggle-button-group\n rtElem=\"tabs\"\n qa-dataid=\"date-panel-tabs\"\n fullWidth\n [ariaLabel]=\"t().uiDate + ' | ' + t().uiTime\"\n [options]=\"tabs()\"\n [value]=\"tab()\"\n (valueChange)=\"tab.set($event)\" />\n }\n\n <div rtElem=\"body\">\n @if (showDate()) {\n @if (view() === 'days') {\n <rt-calendar\n rtElem=\"calendar\"\n qa-dataid=\"date-panel-calendar\"\n grid\n titleAction\n headerTitle\n [months]=\"months()\"\n [weekdayLabels]=\"weekdays()\"\n [canPrev]=\"canPrev()\"\n [canNext]=\"canNext()\"\n [activeKey]=\"activeKey()\"\n [prevAriaLabel]=\"t().uiPrevMonth\"\n [nextAriaLabel]=\"t().uiNextMonth\"\n (prevMonth)=\"page(-1)\"\n (nextMonth)=\"page(1)\"\n (dayClick)=\"pickDay($event)\"\n (gridKey)=\"onGridKey($event)\"\n (titleClick)=\"openMonths()\" />\n } @else if (view() === 'months') {\n <div rtElem=\"months\" qa-dataid=\"date-panel-months\" role=\"group\" [attr.aria-label]=\"t().uiChooseMonth\">\n <div rtElem=\"months-header\">\n <rt-icon-button\n qa-dataid=\"date-panel-prev-year\"\n icon=\"chevron-left\"\n variant=\"secondary\"\n radius=\"full\"\n [ariaLabel]=\"t().uiPrevYear\"\n [disabled]=\"!canPrevYear()\"\n (clicked)=\"pageYear(-1)\" />\n <button\n rtElem=\"year\"\n qa-dataid=\"date-panel-year\"\n type=\"button\"\n [attr.aria-label]=\"t().uiChooseYear\"\n (click)=\"openYears()\">\n {{ year() }}\n </button>\n <rt-icon-button\n qa-dataid=\"date-panel-next-year\"\n icon=\"chevron-right\"\n variant=\"secondary\"\n radius=\"full\"\n [ariaLabel]=\"t().uiNextYear\"\n [disabled]=\"!canNextYear()\"\n (clicked)=\"pageYear(1)\" />\n </div>\n <div rtElem=\"month-grid\">\n @for (cell of monthCells(); track cell.key) {\n <button\n rtElem=\"cell\"\n qa-dataid=\"date-panel-month\"\n type=\"button\"\n [attr.data-key]=\"cell.key\"\n [attr.data-current]=\"cell.key === currentMonth() ? '' : null\"\n [attr.aria-pressed]=\"cell.key === shownMonth()\"\n [disabled]=\"cell.disabled\"\n (click)=\"pickMonth(cell)\">\n {{ cell.label }}\n </button>\n }\n </div>\n </div>\n } @else {\n <div rtElem=\"months\" qa-dataid=\"date-panel-years\" role=\"group\" [attr.aria-label]=\"t().uiChooseYear\">\n <div rtElem=\"months-header\">\n <rt-icon-button\n qa-dataid=\"date-panel-prev-years\"\n icon=\"chevron-left\"\n variant=\"secondary\"\n radius=\"full\"\n [ariaLabel]=\"t().uiPrevYears\"\n [disabled]=\"!canPrevYears()\"\n (clicked)=\"pageYears(-1)\" />\n <span rtElem=\"span\" qa-dataid=\"date-panel-span\">{{ yearSpan() }}</span>\n <rt-icon-button\n qa-dataid=\"date-panel-next-years\"\n icon=\"chevron-right\"\n variant=\"secondary\"\n radius=\"full\"\n [ariaLabel]=\"t().uiNextYears\"\n [disabled]=\"!canNextYears()\"\n (clicked)=\"pageYears(1)\" />\n </div>\n <div rtElem=\"month-grid\">\n @for (cell of yearCells(); track cell.key) {\n <button\n rtElem=\"cell\"\n qa-dataid=\"date-panel-year-cell\"\n type=\"button\"\n [attr.data-key]=\"cell.key\"\n [attr.data-current]=\"cell.key === currentYear() ? '' : null\"\n [attr.aria-pressed]=\"cell.key === chosenYear()\"\n [disabled]=\"cell.disabled\"\n (click)=\"pickYear(cell)\">\n {{ cell.label }}\n </button>\n }\n </div>\n </div>\n }\n }\n\n @if (showTime()) {\n <div rtElem=\"time\" qa-dataid=\"date-panel-time\">\n <div rtElem=\"column\" qa-dataid=\"date-panel-hours\" role=\"group\" [attr.aria-label]=\"t().uiHours\">\n @for (cell of columns().hours; track cell.value) {\n <button\n #timeCell\n rtElem=\"cell\"\n qa-dataid=\"date-panel-hour\"\n type=\"button\"\n [attr.aria-pressed]=\"cell.value === draftHour()\"\n [disabled]=\"cell.disabled\"\n (click)=\"pickHour(cell.value)\">\n {{ cell.label }}\n </button>\n }\n </div>\n <div rtElem=\"column\" qa-dataid=\"date-panel-minutes\" role=\"group\" [attr.aria-label]=\"t().uiMinutes\">\n @for (cell of columns().minutes; track cell.value) {\n <button\n #timeCell\n rtElem=\"cell\"\n qa-dataid=\"date-panel-minute\"\n type=\"button\"\n [attr.aria-pressed]=\"cell.value === draftMinute()\"\n [disabled]=\"cell.disabled\"\n (click)=\"pickMinute(cell.value)\">\n {{ cell.label }}\n </button>\n }\n </div>\n </div>\n }\n </div>\n\n <div rtElem=\"footer\">\n @switch (type()) {\n @case ('date') {\n <button\n rtButton\n qa-dataid=\"date-panel-today\"\n theme=\"secondary\"\n appearance=\"text\"\n size=\"sm\"\n type=\"button\"\n [label]=\"t().uiToday\"\n [attr.aria-label]=\"t().uiToday\"\n [disabled]=\"todayOff()\"\n (click)=\"pickToday()\"></button>\n }\n @case ('time') {\n <button\n rtButton\n qa-dataid=\"date-panel-now\"\n theme=\"secondary\"\n appearance=\"text\"\n size=\"sm\"\n type=\"button\"\n [label]=\"t().uiNow\"\n [attr.aria-label]=\"t().uiNow\"\n (click)=\"pickNow()\"></button>\n <button\n rtButton\n qa-dataid=\"date-panel-done\"\n size=\"sm\"\n type=\"button\"\n [label]=\"t().uiDone\"\n [attr.aria-label]=\"t().uiDone\"\n [disabled]=\"!canApply()\"\n (click)=\"apply()\"></button>\n }\n @default {\n <button\n rtButton\n qa-dataid=\"date-panel-apply\"\n size=\"sm\"\n type=\"button\"\n [label]=\"t().uiApply\"\n [attr.aria-label]=\"t().uiApply\"\n [disabled]=\"!canApply()\"\n (click)=\"apply()\"></button>\n }\n }\n </div>\n</ng-container>\n",
494
- styles: ["@charset \"UTF-8\";@layer rt-kit.components{.rt-date-panel{--rt-date-panel-cell-size: var(--rt-control-height-sm);--rt-date-panel-cell-radius: var(--rt-radius-md);--rt-date-panel-divider-width: var(--rt-border-width-thin);--rt-date-panel-current-ring: inset 0 0 0 var(--rt-border-width-thin) var(--rt-color-action-primary);--rt-date-panel-column-height: calc(var(--rt-date-panel-cell-size) * 7 + var(--rt-space-0-5) * 6);display:flex;flex-direction:column;padding:var(--rt-space-4);gap:var(--rt-space-4)}.rt-date-panel__body{display:flex;align-items:flex-start;gap:var(--rt-space-4)}.rt-date-panel .rt-date-panel__calendar{--rt-calendar-month-count: 1;--rt-calendar-day-justify: center}.rt-date-panel__calendar,.rt-date-panel__months{flex:1 1 auto;min-inline-size:calc(var(--rt-size-10) * 7)}.rt-date-panel__months-header{display:flex;align-items:center;justify-content:space-between;margin-bottom:var(--rt-space-4)}.rt-date-panel__year{padding:var(--rt-space-1) var(--rt-space-2);border:none;border-radius:var(--rt-date-panel-cell-radius);background:none;color:var(--rt-color-text-primary);cursor:pointer;font:inherit;font-weight:var(--rt-font-weight-semibold)}.rt-date-panel__year:hover{background:var(--rt-color-bg-subtle)}.rt-date-panel__year:focus-visible{outline:var(--rt-focus-ring-width) solid var(--rt-focus-ring-color);outline-offset:var(--rt-focus-ring-offset)}.rt-date-panel__span{color:var(--rt-color-text-primary);font-weight:var(--rt-font-weight-semibold)}.rt-date-panel__month-grid{display:grid;gap:var(--rt-space-1);grid-template-columns:repeat(3,1fr)}.rt-date-panel__month-grid .rt-date-panel__cell{font-weight:var(--rt-font-weight-medium)}.rt-date-panel__month-grid .rt-date-panel__cell:hover:not(:disabled,[aria-pressed=true]){background:var(--rt-color-bg-hover)}.rt-date-panel__month-grid .rt-date-panel__cell[data-current]:not([aria-pressed=true]){color:var(--rt-color-action-primary)}.rt-date-panel__month-grid .rt-date-panel__cell:disabled{color:var(--rt-color-text-disabled);opacity:1}.rt-date-panel__time{display:flex;gap:var(--rt-space-1)}.rt-date-panel__column{position:relative;display:flex;flex-direction:column;gap:var(--rt-space-0-5);max-block-size:var(--rt-date-panel-column-height);overflow-y:auto;overscroll-behavior:contain;scrollbar-width:thin}.rt-date-panel__cell{flex:0 0 auto;padding:0 var(--rt-space-2);border:none;border-radius:var(--rt-date-panel-cell-radius);background:none;color:var(--rt-color-text-primary);cursor:pointer;font:inherit;font-size:var(--rt-text-sm);font-variant-numeric:tabular-nums;min-block-size:var(--rt-date-panel-cell-size);min-inline-size:var(--rt-control-height-md)}.rt-date-panel__cell:hover:not(:disabled,[aria-pressed=true]){background:var(--rt-color-bg-subtle)}.rt-date-panel__cell:focus-visible{outline:var(--rt-focus-ring-width) solid var(--rt-focus-ring-color);outline-offset:var(--rt-focus-ring-offset)}.rt-date-panel__cell[data-current]:not([aria-pressed=true]){box-shadow:var(--rt-date-panel-current-ring)}.rt-date-panel__cell[aria-pressed=true]{background:var(--rt-color-action-primary);color:var(--rt-color-action-on-primary)}.rt-date-panel__cell:disabled{color:var(--rt-color-text-muted);cursor:not-allowed;opacity:.45}.rt-date-panel__footer{display:flex;justify-content:flex-end;padding-top:var(--rt-space-2);border-top:var(--rt-date-panel-divider-width) solid var(--rt-color-border-subtle);gap:var(--rt-space-2)}.rt-date-panel:not(.rt-date-panel--with-time) .rt-date-panel__footer{justify-content:center}.rt-date-panel--sheet{--rt-date-panel-cell-size: calc(var(--rt-size-10) + var(--rt-size-1));padding-inline:var(--rt-space-5)}.rt-date-panel--sheet .rt-date-panel__calendar{--rt-calendar-day-size: var(--rt-date-panel-cell-size)}.rt-date-panel--sheet .rt-date-panel__body{flex-direction:column;align-items:stretch}.rt-date-panel--sheet .rt-date-panel__calendar,.rt-date-panel--sheet .rt-date-panel__months{min-inline-size:0}.rt-date-panel--sheet .rt-date-panel__time{justify-content:center}.rt-date-panel--sheet .rt-date-panel__column{flex:1 1 0}}\n"],
623
+ template: "<ng-container rtBlock=\"rt-date-panel\">\n @if (split()) {\n <rt-toggle-button-group\n rtElem=\"tabs\"\n qa-dataid=\"date-panel-tabs\"\n size=\"md\"\n [ariaLabel]=\"t().uiDate + ' | ' + t().uiTime\"\n [options]=\"tabs()\"\n [value]=\"tab()\"\n (valueChange)=\"tab.set($event)\" />\n }\n\n <div rtElem=\"body\">\n @if (showDate()) {\n @if (view() === 'days') {\n <rt-calendar\n rtElem=\"calendar\"\n qa-dataid=\"date-panel-calendar\"\n grid\n titleAction\n headerTitle\n [months]=\"months()\"\n [weekdayLabels]=\"weekdays()\"\n [canPrev]=\"canPrev()\"\n [canNext]=\"canNext()\"\n [activeKey]=\"activeKey()\"\n [prevAriaLabel]=\"t().uiPrevMonth\"\n [nextAriaLabel]=\"t().uiNextMonth\"\n (prevMonth)=\"page(-1)\"\n (nextMonth)=\"page(1)\"\n (dayClick)=\"pickDay($event)\"\n (gridKey)=\"onGridKey($event)\"\n (titleClick)=\"openMonths()\" />\n } @else if (view() === 'months') {\n <div rtElem=\"months\" qa-dataid=\"date-panel-months\" role=\"group\" [attr.aria-label]=\"t().uiChooseMonth\">\n <div rtElem=\"months-header\">\n <rt-icon-button\n qa-dataid=\"date-panel-prev-year\"\n icon=\"chevron-left\"\n variant=\"ghost\"\n iconColor=\"muted\"\n radius=\"full\"\n [ariaLabel]=\"t().uiPrevYear\"\n [disabled]=\"!canPrevYear()\"\n (clicked)=\"pageYear(-1)\" />\n <button\n rtElem=\"year\"\n qa-dataid=\"date-panel-year\"\n type=\"button\"\n [attr.aria-label]=\"t().uiChooseYear\"\n (click)=\"openYears()\">\n {{ year() }}\n </button>\n <rt-icon-button\n qa-dataid=\"date-panel-next-year\"\n icon=\"chevron-right\"\n variant=\"ghost\"\n iconColor=\"muted\"\n radius=\"full\"\n [ariaLabel]=\"t().uiNextYear\"\n [disabled]=\"!canNextYear()\"\n (clicked)=\"pageYear(1)\" />\n </div>\n <div rtElem=\"month-grid\">\n @for (cell of monthCells(); track cell.key) {\n <button\n rtElem=\"cell\"\n qa-dataid=\"date-panel-month\"\n type=\"button\"\n [attr.data-key]=\"cell.key\"\n [attr.data-current]=\"cell.key === currentMonth() ? '' : null\"\n [attr.aria-pressed]=\"cell.key === shownMonth()\"\n [disabled]=\"cell.disabled\"\n (click)=\"pickMonth(cell)\">\n {{ cell.label }}\n </button>\n }\n </div>\n </div>\n } @else {\n <div rtElem=\"months\" qa-dataid=\"date-panel-years\" role=\"group\" [attr.aria-label]=\"t().uiChooseYear\">\n <div rtElem=\"months-header\">\n <rt-icon-button\n qa-dataid=\"date-panel-prev-years\"\n icon=\"chevron-left\"\n variant=\"ghost\"\n iconColor=\"muted\"\n radius=\"full\"\n [ariaLabel]=\"t().uiPrevYears\"\n [disabled]=\"!canPrevYears()\"\n (clicked)=\"pageYears(-1)\" />\n <span rtElem=\"span\" qa-dataid=\"date-panel-span\">{{ yearSpan() }}</span>\n <rt-icon-button\n qa-dataid=\"date-panel-next-years\"\n icon=\"chevron-right\"\n variant=\"ghost\"\n iconColor=\"muted\"\n radius=\"full\"\n [ariaLabel]=\"t().uiNextYears\"\n [disabled]=\"!canNextYears()\"\n (clicked)=\"pageYears(1)\" />\n </div>\n <div rtElem=\"month-grid\">\n @for (cell of yearCells(); track cell.key) {\n <button\n rtElem=\"cell\"\n qa-dataid=\"date-panel-year-cell\"\n type=\"button\"\n [attr.data-key]=\"cell.key\"\n [attr.data-current]=\"cell.key === currentYear() ? '' : null\"\n [attr.aria-pressed]=\"cell.key === chosenYear()\"\n [disabled]=\"cell.disabled\"\n (click)=\"pickYear(cell)\">\n {{ cell.label }}\n </button>\n }\n </div>\n </div>\n }\n }\n\n @if (showTime()) {\n <div rtElem=\"time\" qa-dataid=\"date-panel-time\">\n <div rtElem=\"time-group\">\n <span rtElem=\"time-title\" qa-dataid=\"date-panel-hours-title\" aria-hidden=\"true\">{{ t().uiHours }}</span>\n <div rtElem=\"column\" qa-dataid=\"date-panel-hours\" role=\"group\" [attr.aria-label]=\"t().uiHours\">\n @for (cell of columns().hours; track cell.value) {\n <button\n #timeCell\n rtElem=\"cell\"\n qa-dataid=\"date-panel-hour\"\n type=\"button\"\n [attr.aria-pressed]=\"cell.value === draftHour()\"\n [disabled]=\"cell.disabled\"\n (click)=\"pickHour(cell.value)\">\n {{ cell.label }}\n </button>\n }\n </div>\n </div>\n <div rtElem=\"time-group\">\n <span rtElem=\"time-title\" qa-dataid=\"date-panel-minutes-title\" aria-hidden=\"true\">{{ t().uiMinutes }}</span>\n <div rtElem=\"column\" qa-dataid=\"date-panel-minutes\" role=\"group\" [attr.aria-label]=\"t().uiMinutes\">\n @for (cell of columns().minutes; track cell.value) {\n <button\n #timeCell\n rtElem=\"cell\"\n qa-dataid=\"date-panel-minute\"\n type=\"button\"\n [attr.aria-pressed]=\"cell.value === draftMinute()\"\n [disabled]=\"cell.disabled\"\n (click)=\"pickMinute(cell.value)\">\n {{ cell.label }}\n </button>\n }\n </div>\n </div>\n </div>\n }\n </div>\n\n @if (hasFooter()) {\n <div rtElem=\"footer\">\n @switch (type()) {\n @case ('date') {\n <button\n rtButton\n qa-dataid=\"date-panel-today\"\n theme=\"secondary\"\n appearance=\"text\"\n size=\"sm\"\n type=\"button\"\n [label]=\"t().uiToday\"\n [attr.aria-label]=\"t().uiToday\"\n [disabled]=\"todayOff()\"\n (click)=\"pickToday()\"></button>\n }\n @case ('time') {\n <button\n rtButton\n qa-dataid=\"date-panel-now\"\n theme=\"secondary\"\n appearance=\"text\"\n size=\"sm\"\n type=\"button\"\n [label]=\"t().uiNow\"\n [attr.aria-label]=\"t().uiNow\"\n (click)=\"pickNow()\"></button>\n <button\n rtButton\n qa-dataid=\"date-panel-done\"\n size=\"sm\"\n type=\"button\"\n [label]=\"t().uiDone\"\n [attr.aria-label]=\"t().uiDone\"\n [disabled]=\"!canApply()\"\n (click)=\"apply()\"></button>\n }\n @default {\n @if (sheet()) {\n <span rtElem=\"value\" qa-dataid=\"date-panel-value\">{{ draftText() }}</span>\n } @else {\n <button\n rtButton\n rtElem=\"lead\"\n qa-dataid=\"date-panel-now\"\n theme=\"primary\"\n appearance=\"text\"\n size=\"sm\"\n type=\"button\"\n [label]=\"t().uiNow\"\n [attr.aria-label]=\"t().uiNow\"\n (click)=\"pickNow()\"></button>\n <button\n rtButton\n qa-dataid=\"date-panel-reset\"\n theme=\"primary\"\n appearance=\"text\"\n size=\"sm\"\n type=\"button\"\n [label]=\"t().uiReset\"\n [attr.aria-label]=\"t().uiReset\"\n (click)=\"reset()\"></button>\n }\n <button\n rtButton\n qa-dataid=\"date-panel-apply\"\n size=\"sm\"\n type=\"button\"\n [label]=\"t().uiApply\"\n [attr.aria-label]=\"t().uiApply\"\n [disabled]=\"!canApply()\"\n (click)=\"apply()\"></button>\n }\n }\n </div>\n }\n</ng-container>\n",
624
+ styles: ["@charset \"UTF-8\";@layer rt-kit.components{.rt-date-panel{--rt-date-panel-cell-size: var(--rt-control-height-sm);--rt-date-panel-cell-radius: var(--rt-radius-md);--rt-date-panel-divider-width: var(--rt-border-width-thin);--rt-date-panel-current-ring: inset 0 0 0 var(--rt-border-width-thin) var(--rt-color-action-primary);--rt-date-panel-column-height: calc(var(--rt-date-panel-cell-size) * 7 + var(--rt-space-0-5) * 6);display:flex;flex-direction:column;padding:var(--rt-space-4);gap:var(--rt-space-4)}.rt-date-panel__body{display:flex;align-items:flex-start;gap:var(--rt-space-4)}.rt-date-panel .rt-date-panel__calendar{--rt-calendar-month-count: 1;--rt-calendar-day-justify: center}.rt-date-panel__calendar,.rt-date-panel__months{flex:1 1 auto;min-inline-size:calc(var(--rt-size-10) * 7)}.rt-date-panel__months-header{display:flex;align-items:center;justify-content:space-between;margin-bottom:var(--rt-space-4)}.rt-date-panel__year{padding:var(--rt-space-1) var(--rt-space-2);border:none;border-radius:var(--rt-date-panel-cell-radius);background:none;color:var(--rt-color-text-primary);cursor:pointer;font:inherit;font-weight:var(--rt-font-weight-semibold)}.rt-date-panel__year:hover{background:var(--rt-color-bg-subtle)}.rt-date-panel__year:focus-visible{outline:var(--rt-focus-ring-width) solid var(--rt-focus-ring-color);outline-offset:var(--rt-focus-ring-offset)}.rt-date-panel__span{color:var(--rt-color-text-primary);font-weight:var(--rt-font-weight-semibold)}.rt-date-panel__month-grid{display:grid;gap:var(--rt-space-1);grid-template-columns:repeat(3,1fr)}.rt-date-panel__month-grid .rt-date-panel__cell{font-weight:var(--rt-font-weight-medium)}.rt-date-panel__month-grid .rt-date-panel__cell:hover:not(:disabled,[aria-pressed=true]){background:var(--rt-color-bg-hover)}.rt-date-panel__month-grid .rt-date-panel__cell[data-current]:not([aria-pressed=true]){color:var(--rt-color-action-primary)}.rt-date-panel__month-grid .rt-date-panel__cell:disabled{color:var(--rt-color-text-disabled);opacity:1}.rt-date-panel__time{display:flex;gap:var(--rt-space-2)}.rt-date-panel__time:not(:first-child){align-self:stretch;border-inline-start:var(--rt-date-panel-divider-width) solid var(--rt-color-border-subtle);padding-inline-start:var(--rt-space-4)}.rt-date-panel__tabs{align-self:center}.rt-date-panel__time-group{display:flex;flex-direction:column;gap:var(--rt-space-2)}.rt-date-panel__time-title{padding:var(--rt-space-1) 0;color:var(--rt-color-text-muted);font-size:var(--rt-text-xs);text-align:center}.rt-date-panel__lead{margin-inline-end:auto}.rt-date-panel__value{align-self:center;color:var(--rt-color-text-muted);font-size:var(--rt-text-sm);margin-inline-end:auto}.rt-date-panel__column{position:relative;display:flex;flex-direction:column;gap:var(--rt-space-0-5);max-block-size:var(--rt-date-panel-column-height);overflow-y:auto;overscroll-behavior:contain;scrollbar-width:thin}.rt-date-panel__cell{flex:0 0 auto;padding:0 var(--rt-space-2);border:none;border-radius:var(--rt-date-panel-cell-radius);background:none;color:var(--rt-color-text-primary);cursor:pointer;font:inherit;font-size:var(--rt-text-sm);font-variant-numeric:tabular-nums;min-block-size:var(--rt-date-panel-cell-size);min-inline-size:var(--rt-control-height-md)}.rt-date-panel__cell:hover:not(:disabled,[aria-pressed=true]){background:var(--rt-color-bg-subtle)}.rt-date-panel__cell:focus-visible{outline:var(--rt-focus-ring-width) solid var(--rt-focus-ring-color);outline-offset:var(--rt-focus-ring-offset)}.rt-date-panel__cell[data-current]:not([aria-pressed=true]){box-shadow:var(--rt-date-panel-current-ring)}.rt-date-panel__cell[aria-pressed=true]{background:var(--rt-color-action-primary);color:var(--rt-color-action-on-primary)}.rt-date-panel__cell:disabled{color:var(--rt-color-text-muted);cursor:not-allowed;opacity:.45}.rt-date-panel__column .rt-date-panel__cell{min-inline-size:calc(var(--rt-size-10) * 1.5);padding-inline:var(--rt-space-4) 0;text-align:start}.rt-date-panel__column .rt-date-panel__cell[aria-pressed=true]{background:var(--rt-color-action-primary-subtle);color:var(--rt-color-text-primary);font-weight:var(--rt-font-weight-semibold)}.rt-date-panel__footer{display:flex;justify-content:flex-end;padding-top:var(--rt-space-2);border-top:var(--rt-date-panel-divider-width) solid var(--rt-color-border-subtle);gap:var(--rt-space-2)}.rt-date-panel:not(.rt-date-panel--with-time) .rt-date-panel__footer{justify-content:center}.rt-date-panel--sheet{--rt-date-panel-cell-size: calc(var(--rt-size-10) + var(--rt-size-1));padding-inline:var(--rt-space-5)}.rt-date-panel--sheet .rt-date-panel__calendar{--rt-calendar-day-size: var(--rt-date-panel-cell-size)}.rt-date-panel--sheet .rt-date-panel__body{flex-direction:column;align-items:stretch}.rt-date-panel--sheet .rt-date-panel__calendar,.rt-date-panel--sheet .rt-date-panel__months{min-inline-size:0}.rt-date-panel--sheet .rt-date-panel__time{justify-content:center}.rt-date-panel--sheet .rt-date-panel__time-group{flex:1 1 0}}\n"],
495
625
  dependencies: [
496
626
  {
497
627
  kind: "directive",
@@ -625,8 +755,8 @@ i0.ɵɵngDeclareClassMetadata({
625
755
  "[class.rt-date-panel--with-time]": "type() !== 'date'",
626
756
  "(keydown.escape)": "onEscape()"
627
757
  },
628
- template: "<ng-container rtBlock=\"rt-date-panel\">\n @if (split()) {\n <rt-toggle-button-group\n rtElem=\"tabs\"\n qa-dataid=\"date-panel-tabs\"\n fullWidth\n [ariaLabel]=\"t().uiDate + ' | ' + t().uiTime\"\n [options]=\"tabs()\"\n [value]=\"tab()\"\n (valueChange)=\"tab.set($event)\" />\n }\n\n <div rtElem=\"body\">\n @if (showDate()) {\n @if (view() === 'days') {\n <rt-calendar\n rtElem=\"calendar\"\n qa-dataid=\"date-panel-calendar\"\n grid\n titleAction\n headerTitle\n [months]=\"months()\"\n [weekdayLabels]=\"weekdays()\"\n [canPrev]=\"canPrev()\"\n [canNext]=\"canNext()\"\n [activeKey]=\"activeKey()\"\n [prevAriaLabel]=\"t().uiPrevMonth\"\n [nextAriaLabel]=\"t().uiNextMonth\"\n (prevMonth)=\"page(-1)\"\n (nextMonth)=\"page(1)\"\n (dayClick)=\"pickDay($event)\"\n (gridKey)=\"onGridKey($event)\"\n (titleClick)=\"openMonths()\" />\n } @else if (view() === 'months') {\n <div rtElem=\"months\" qa-dataid=\"date-panel-months\" role=\"group\" [attr.aria-label]=\"t().uiChooseMonth\">\n <div rtElem=\"months-header\">\n <rt-icon-button\n qa-dataid=\"date-panel-prev-year\"\n icon=\"chevron-left\"\n variant=\"secondary\"\n radius=\"full\"\n [ariaLabel]=\"t().uiPrevYear\"\n [disabled]=\"!canPrevYear()\"\n (clicked)=\"pageYear(-1)\" />\n <button\n rtElem=\"year\"\n qa-dataid=\"date-panel-year\"\n type=\"button\"\n [attr.aria-label]=\"t().uiChooseYear\"\n (click)=\"openYears()\">\n {{ year() }}\n </button>\n <rt-icon-button\n qa-dataid=\"date-panel-next-year\"\n icon=\"chevron-right\"\n variant=\"secondary\"\n radius=\"full\"\n [ariaLabel]=\"t().uiNextYear\"\n [disabled]=\"!canNextYear()\"\n (clicked)=\"pageYear(1)\" />\n </div>\n <div rtElem=\"month-grid\">\n @for (cell of monthCells(); track cell.key) {\n <button\n rtElem=\"cell\"\n qa-dataid=\"date-panel-month\"\n type=\"button\"\n [attr.data-key]=\"cell.key\"\n [attr.data-current]=\"cell.key === currentMonth() ? '' : null\"\n [attr.aria-pressed]=\"cell.key === shownMonth()\"\n [disabled]=\"cell.disabled\"\n (click)=\"pickMonth(cell)\">\n {{ cell.label }}\n </button>\n }\n </div>\n </div>\n } @else {\n <div rtElem=\"months\" qa-dataid=\"date-panel-years\" role=\"group\" [attr.aria-label]=\"t().uiChooseYear\">\n <div rtElem=\"months-header\">\n <rt-icon-button\n qa-dataid=\"date-panel-prev-years\"\n icon=\"chevron-left\"\n variant=\"secondary\"\n radius=\"full\"\n [ariaLabel]=\"t().uiPrevYears\"\n [disabled]=\"!canPrevYears()\"\n (clicked)=\"pageYears(-1)\" />\n <span rtElem=\"span\" qa-dataid=\"date-panel-span\">{{ yearSpan() }}</span>\n <rt-icon-button\n qa-dataid=\"date-panel-next-years\"\n icon=\"chevron-right\"\n variant=\"secondary\"\n radius=\"full\"\n [ariaLabel]=\"t().uiNextYears\"\n [disabled]=\"!canNextYears()\"\n (clicked)=\"pageYears(1)\" />\n </div>\n <div rtElem=\"month-grid\">\n @for (cell of yearCells(); track cell.key) {\n <button\n rtElem=\"cell\"\n qa-dataid=\"date-panel-year-cell\"\n type=\"button\"\n [attr.data-key]=\"cell.key\"\n [attr.data-current]=\"cell.key === currentYear() ? '' : null\"\n [attr.aria-pressed]=\"cell.key === chosenYear()\"\n [disabled]=\"cell.disabled\"\n (click)=\"pickYear(cell)\">\n {{ cell.label }}\n </button>\n }\n </div>\n </div>\n }\n }\n\n @if (showTime()) {\n <div rtElem=\"time\" qa-dataid=\"date-panel-time\">\n <div rtElem=\"column\" qa-dataid=\"date-panel-hours\" role=\"group\" [attr.aria-label]=\"t().uiHours\">\n @for (cell of columns().hours; track cell.value) {\n <button\n #timeCell\n rtElem=\"cell\"\n qa-dataid=\"date-panel-hour\"\n type=\"button\"\n [attr.aria-pressed]=\"cell.value === draftHour()\"\n [disabled]=\"cell.disabled\"\n (click)=\"pickHour(cell.value)\">\n {{ cell.label }}\n </button>\n }\n </div>\n <div rtElem=\"column\" qa-dataid=\"date-panel-minutes\" role=\"group\" [attr.aria-label]=\"t().uiMinutes\">\n @for (cell of columns().minutes; track cell.value) {\n <button\n #timeCell\n rtElem=\"cell\"\n qa-dataid=\"date-panel-minute\"\n type=\"button\"\n [attr.aria-pressed]=\"cell.value === draftMinute()\"\n [disabled]=\"cell.disabled\"\n (click)=\"pickMinute(cell.value)\">\n {{ cell.label }}\n </button>\n }\n </div>\n </div>\n }\n </div>\n\n <div rtElem=\"footer\">\n @switch (type()) {\n @case ('date') {\n <button\n rtButton\n qa-dataid=\"date-panel-today\"\n theme=\"secondary\"\n appearance=\"text\"\n size=\"sm\"\n type=\"button\"\n [label]=\"t().uiToday\"\n [attr.aria-label]=\"t().uiToday\"\n [disabled]=\"todayOff()\"\n (click)=\"pickToday()\"></button>\n }\n @case ('time') {\n <button\n rtButton\n qa-dataid=\"date-panel-now\"\n theme=\"secondary\"\n appearance=\"text\"\n size=\"sm\"\n type=\"button\"\n [label]=\"t().uiNow\"\n [attr.aria-label]=\"t().uiNow\"\n (click)=\"pickNow()\"></button>\n <button\n rtButton\n qa-dataid=\"date-panel-done\"\n size=\"sm\"\n type=\"button\"\n [label]=\"t().uiDone\"\n [attr.aria-label]=\"t().uiDone\"\n [disabled]=\"!canApply()\"\n (click)=\"apply()\"></button>\n }\n @default {\n <button\n rtButton\n qa-dataid=\"date-panel-apply\"\n size=\"sm\"\n type=\"button\"\n [label]=\"t().uiApply\"\n [attr.aria-label]=\"t().uiApply\"\n [disabled]=\"!canApply()\"\n (click)=\"apply()\"></button>\n }\n }\n </div>\n</ng-container>\n",
629
- styles: ["@charset \"UTF-8\";@layer rt-kit.components{.rt-date-panel{--rt-date-panel-cell-size: var(--rt-control-height-sm);--rt-date-panel-cell-radius: var(--rt-radius-md);--rt-date-panel-divider-width: var(--rt-border-width-thin);--rt-date-panel-current-ring: inset 0 0 0 var(--rt-border-width-thin) var(--rt-color-action-primary);--rt-date-panel-column-height: calc(var(--rt-date-panel-cell-size) * 7 + var(--rt-space-0-5) * 6);display:flex;flex-direction:column;padding:var(--rt-space-4);gap:var(--rt-space-4)}.rt-date-panel__body{display:flex;align-items:flex-start;gap:var(--rt-space-4)}.rt-date-panel .rt-date-panel__calendar{--rt-calendar-month-count: 1;--rt-calendar-day-justify: center}.rt-date-panel__calendar,.rt-date-panel__months{flex:1 1 auto;min-inline-size:calc(var(--rt-size-10) * 7)}.rt-date-panel__months-header{display:flex;align-items:center;justify-content:space-between;margin-bottom:var(--rt-space-4)}.rt-date-panel__year{padding:var(--rt-space-1) var(--rt-space-2);border:none;border-radius:var(--rt-date-panel-cell-radius);background:none;color:var(--rt-color-text-primary);cursor:pointer;font:inherit;font-weight:var(--rt-font-weight-semibold)}.rt-date-panel__year:hover{background:var(--rt-color-bg-subtle)}.rt-date-panel__year:focus-visible{outline:var(--rt-focus-ring-width) solid var(--rt-focus-ring-color);outline-offset:var(--rt-focus-ring-offset)}.rt-date-panel__span{color:var(--rt-color-text-primary);font-weight:var(--rt-font-weight-semibold)}.rt-date-panel__month-grid{display:grid;gap:var(--rt-space-1);grid-template-columns:repeat(3,1fr)}.rt-date-panel__month-grid .rt-date-panel__cell{font-weight:var(--rt-font-weight-medium)}.rt-date-panel__month-grid .rt-date-panel__cell:hover:not(:disabled,[aria-pressed=true]){background:var(--rt-color-bg-hover)}.rt-date-panel__month-grid .rt-date-panel__cell[data-current]:not([aria-pressed=true]){color:var(--rt-color-action-primary)}.rt-date-panel__month-grid .rt-date-panel__cell:disabled{color:var(--rt-color-text-disabled);opacity:1}.rt-date-panel__time{display:flex;gap:var(--rt-space-1)}.rt-date-panel__column{position:relative;display:flex;flex-direction:column;gap:var(--rt-space-0-5);max-block-size:var(--rt-date-panel-column-height);overflow-y:auto;overscroll-behavior:contain;scrollbar-width:thin}.rt-date-panel__cell{flex:0 0 auto;padding:0 var(--rt-space-2);border:none;border-radius:var(--rt-date-panel-cell-radius);background:none;color:var(--rt-color-text-primary);cursor:pointer;font:inherit;font-size:var(--rt-text-sm);font-variant-numeric:tabular-nums;min-block-size:var(--rt-date-panel-cell-size);min-inline-size:var(--rt-control-height-md)}.rt-date-panel__cell:hover:not(:disabled,[aria-pressed=true]){background:var(--rt-color-bg-subtle)}.rt-date-panel__cell:focus-visible{outline:var(--rt-focus-ring-width) solid var(--rt-focus-ring-color);outline-offset:var(--rt-focus-ring-offset)}.rt-date-panel__cell[data-current]:not([aria-pressed=true]){box-shadow:var(--rt-date-panel-current-ring)}.rt-date-panel__cell[aria-pressed=true]{background:var(--rt-color-action-primary);color:var(--rt-color-action-on-primary)}.rt-date-panel__cell:disabled{color:var(--rt-color-text-muted);cursor:not-allowed;opacity:.45}.rt-date-panel__footer{display:flex;justify-content:flex-end;padding-top:var(--rt-space-2);border-top:var(--rt-date-panel-divider-width) solid var(--rt-color-border-subtle);gap:var(--rt-space-2)}.rt-date-panel:not(.rt-date-panel--with-time) .rt-date-panel__footer{justify-content:center}.rt-date-panel--sheet{--rt-date-panel-cell-size: calc(var(--rt-size-10) + var(--rt-size-1));padding-inline:var(--rt-space-5)}.rt-date-panel--sheet .rt-date-panel__calendar{--rt-calendar-day-size: var(--rt-date-panel-cell-size)}.rt-date-panel--sheet .rt-date-panel__body{flex-direction:column;align-items:stretch}.rt-date-panel--sheet .rt-date-panel__calendar,.rt-date-panel--sheet .rt-date-panel__months{min-inline-size:0}.rt-date-panel--sheet .rt-date-panel__time{justify-content:center}.rt-date-panel--sheet .rt-date-panel__column{flex:1 1 0}}\n"]
758
+ template: "<ng-container rtBlock=\"rt-date-panel\">\n @if (split()) {\n <rt-toggle-button-group\n rtElem=\"tabs\"\n qa-dataid=\"date-panel-tabs\"\n size=\"md\"\n [ariaLabel]=\"t().uiDate + ' | ' + t().uiTime\"\n [options]=\"tabs()\"\n [value]=\"tab()\"\n (valueChange)=\"tab.set($event)\" />\n }\n\n <div rtElem=\"body\">\n @if (showDate()) {\n @if (view() === 'days') {\n <rt-calendar\n rtElem=\"calendar\"\n qa-dataid=\"date-panel-calendar\"\n grid\n titleAction\n headerTitle\n [months]=\"months()\"\n [weekdayLabels]=\"weekdays()\"\n [canPrev]=\"canPrev()\"\n [canNext]=\"canNext()\"\n [activeKey]=\"activeKey()\"\n [prevAriaLabel]=\"t().uiPrevMonth\"\n [nextAriaLabel]=\"t().uiNextMonth\"\n (prevMonth)=\"page(-1)\"\n (nextMonth)=\"page(1)\"\n (dayClick)=\"pickDay($event)\"\n (gridKey)=\"onGridKey($event)\"\n (titleClick)=\"openMonths()\" />\n } @else if (view() === 'months') {\n <div rtElem=\"months\" qa-dataid=\"date-panel-months\" role=\"group\" [attr.aria-label]=\"t().uiChooseMonth\">\n <div rtElem=\"months-header\">\n <rt-icon-button\n qa-dataid=\"date-panel-prev-year\"\n icon=\"chevron-left\"\n variant=\"ghost\"\n iconColor=\"muted\"\n radius=\"full\"\n [ariaLabel]=\"t().uiPrevYear\"\n [disabled]=\"!canPrevYear()\"\n (clicked)=\"pageYear(-1)\" />\n <button\n rtElem=\"year\"\n qa-dataid=\"date-panel-year\"\n type=\"button\"\n [attr.aria-label]=\"t().uiChooseYear\"\n (click)=\"openYears()\">\n {{ year() }}\n </button>\n <rt-icon-button\n qa-dataid=\"date-panel-next-year\"\n icon=\"chevron-right\"\n variant=\"ghost\"\n iconColor=\"muted\"\n radius=\"full\"\n [ariaLabel]=\"t().uiNextYear\"\n [disabled]=\"!canNextYear()\"\n (clicked)=\"pageYear(1)\" />\n </div>\n <div rtElem=\"month-grid\">\n @for (cell of monthCells(); track cell.key) {\n <button\n rtElem=\"cell\"\n qa-dataid=\"date-panel-month\"\n type=\"button\"\n [attr.data-key]=\"cell.key\"\n [attr.data-current]=\"cell.key === currentMonth() ? '' : null\"\n [attr.aria-pressed]=\"cell.key === shownMonth()\"\n [disabled]=\"cell.disabled\"\n (click)=\"pickMonth(cell)\">\n {{ cell.label }}\n </button>\n }\n </div>\n </div>\n } @else {\n <div rtElem=\"months\" qa-dataid=\"date-panel-years\" role=\"group\" [attr.aria-label]=\"t().uiChooseYear\">\n <div rtElem=\"months-header\">\n <rt-icon-button\n qa-dataid=\"date-panel-prev-years\"\n icon=\"chevron-left\"\n variant=\"ghost\"\n iconColor=\"muted\"\n radius=\"full\"\n [ariaLabel]=\"t().uiPrevYears\"\n [disabled]=\"!canPrevYears()\"\n (clicked)=\"pageYears(-1)\" />\n <span rtElem=\"span\" qa-dataid=\"date-panel-span\">{{ yearSpan() }}</span>\n <rt-icon-button\n qa-dataid=\"date-panel-next-years\"\n icon=\"chevron-right\"\n variant=\"ghost\"\n iconColor=\"muted\"\n radius=\"full\"\n [ariaLabel]=\"t().uiNextYears\"\n [disabled]=\"!canNextYears()\"\n (clicked)=\"pageYears(1)\" />\n </div>\n <div rtElem=\"month-grid\">\n @for (cell of yearCells(); track cell.key) {\n <button\n rtElem=\"cell\"\n qa-dataid=\"date-panel-year-cell\"\n type=\"button\"\n [attr.data-key]=\"cell.key\"\n [attr.data-current]=\"cell.key === currentYear() ? '' : null\"\n [attr.aria-pressed]=\"cell.key === chosenYear()\"\n [disabled]=\"cell.disabled\"\n (click)=\"pickYear(cell)\">\n {{ cell.label }}\n </button>\n }\n </div>\n </div>\n }\n }\n\n @if (showTime()) {\n <div rtElem=\"time\" qa-dataid=\"date-panel-time\">\n <div rtElem=\"time-group\">\n <span rtElem=\"time-title\" qa-dataid=\"date-panel-hours-title\" aria-hidden=\"true\">{{ t().uiHours }}</span>\n <div rtElem=\"column\" qa-dataid=\"date-panel-hours\" role=\"group\" [attr.aria-label]=\"t().uiHours\">\n @for (cell of columns().hours; track cell.value) {\n <button\n #timeCell\n rtElem=\"cell\"\n qa-dataid=\"date-panel-hour\"\n type=\"button\"\n [attr.aria-pressed]=\"cell.value === draftHour()\"\n [disabled]=\"cell.disabled\"\n (click)=\"pickHour(cell.value)\">\n {{ cell.label }}\n </button>\n }\n </div>\n </div>\n <div rtElem=\"time-group\">\n <span rtElem=\"time-title\" qa-dataid=\"date-panel-minutes-title\" aria-hidden=\"true\">{{ t().uiMinutes }}</span>\n <div rtElem=\"column\" qa-dataid=\"date-panel-minutes\" role=\"group\" [attr.aria-label]=\"t().uiMinutes\">\n @for (cell of columns().minutes; track cell.value) {\n <button\n #timeCell\n rtElem=\"cell\"\n qa-dataid=\"date-panel-minute\"\n type=\"button\"\n [attr.aria-pressed]=\"cell.value === draftMinute()\"\n [disabled]=\"cell.disabled\"\n (click)=\"pickMinute(cell.value)\">\n {{ cell.label }}\n </button>\n }\n </div>\n </div>\n </div>\n }\n </div>\n\n @if (hasFooter()) {\n <div rtElem=\"footer\">\n @switch (type()) {\n @case ('date') {\n <button\n rtButton\n qa-dataid=\"date-panel-today\"\n theme=\"secondary\"\n appearance=\"text\"\n size=\"sm\"\n type=\"button\"\n [label]=\"t().uiToday\"\n [attr.aria-label]=\"t().uiToday\"\n [disabled]=\"todayOff()\"\n (click)=\"pickToday()\"></button>\n }\n @case ('time') {\n <button\n rtButton\n qa-dataid=\"date-panel-now\"\n theme=\"secondary\"\n appearance=\"text\"\n size=\"sm\"\n type=\"button\"\n [label]=\"t().uiNow\"\n [attr.aria-label]=\"t().uiNow\"\n (click)=\"pickNow()\"></button>\n <button\n rtButton\n qa-dataid=\"date-panel-done\"\n size=\"sm\"\n type=\"button\"\n [label]=\"t().uiDone\"\n [attr.aria-label]=\"t().uiDone\"\n [disabled]=\"!canApply()\"\n (click)=\"apply()\"></button>\n }\n @default {\n @if (sheet()) {\n <span rtElem=\"value\" qa-dataid=\"date-panel-value\">{{ draftText() }}</span>\n } @else {\n <button\n rtButton\n rtElem=\"lead\"\n qa-dataid=\"date-panel-now\"\n theme=\"primary\"\n appearance=\"text\"\n size=\"sm\"\n type=\"button\"\n [label]=\"t().uiNow\"\n [attr.aria-label]=\"t().uiNow\"\n (click)=\"pickNow()\"></button>\n <button\n rtButton\n qa-dataid=\"date-panel-reset\"\n theme=\"primary\"\n appearance=\"text\"\n size=\"sm\"\n type=\"button\"\n [label]=\"t().uiReset\"\n [attr.aria-label]=\"t().uiReset\"\n (click)=\"reset()\"></button>\n }\n <button\n rtButton\n qa-dataid=\"date-panel-apply\"\n size=\"sm\"\n type=\"button\"\n [label]=\"t().uiApply\"\n [attr.aria-label]=\"t().uiApply\"\n [disabled]=\"!canApply()\"\n (click)=\"apply()\"></button>\n }\n }\n </div>\n }\n</ng-container>\n",
759
+ styles: ["@charset \"UTF-8\";@layer rt-kit.components{.rt-date-panel{--rt-date-panel-cell-size: var(--rt-control-height-sm);--rt-date-panel-cell-radius: var(--rt-radius-md);--rt-date-panel-divider-width: var(--rt-border-width-thin);--rt-date-panel-current-ring: inset 0 0 0 var(--rt-border-width-thin) var(--rt-color-action-primary);--rt-date-panel-column-height: calc(var(--rt-date-panel-cell-size) * 7 + var(--rt-space-0-5) * 6);display:flex;flex-direction:column;padding:var(--rt-space-4);gap:var(--rt-space-4)}.rt-date-panel__body{display:flex;align-items:flex-start;gap:var(--rt-space-4)}.rt-date-panel .rt-date-panel__calendar{--rt-calendar-month-count: 1;--rt-calendar-day-justify: center}.rt-date-panel__calendar,.rt-date-panel__months{flex:1 1 auto;min-inline-size:calc(var(--rt-size-10) * 7)}.rt-date-panel__months-header{display:flex;align-items:center;justify-content:space-between;margin-bottom:var(--rt-space-4)}.rt-date-panel__year{padding:var(--rt-space-1) var(--rt-space-2);border:none;border-radius:var(--rt-date-panel-cell-radius);background:none;color:var(--rt-color-text-primary);cursor:pointer;font:inherit;font-weight:var(--rt-font-weight-semibold)}.rt-date-panel__year:hover{background:var(--rt-color-bg-subtle)}.rt-date-panel__year:focus-visible{outline:var(--rt-focus-ring-width) solid var(--rt-focus-ring-color);outline-offset:var(--rt-focus-ring-offset)}.rt-date-panel__span{color:var(--rt-color-text-primary);font-weight:var(--rt-font-weight-semibold)}.rt-date-panel__month-grid{display:grid;gap:var(--rt-space-1);grid-template-columns:repeat(3,1fr)}.rt-date-panel__month-grid .rt-date-panel__cell{font-weight:var(--rt-font-weight-medium)}.rt-date-panel__month-grid .rt-date-panel__cell:hover:not(:disabled,[aria-pressed=true]){background:var(--rt-color-bg-hover)}.rt-date-panel__month-grid .rt-date-panel__cell[data-current]:not([aria-pressed=true]){color:var(--rt-color-action-primary)}.rt-date-panel__month-grid .rt-date-panel__cell:disabled{color:var(--rt-color-text-disabled);opacity:1}.rt-date-panel__time{display:flex;gap:var(--rt-space-2)}.rt-date-panel__time:not(:first-child){align-self:stretch;border-inline-start:var(--rt-date-panel-divider-width) solid var(--rt-color-border-subtle);padding-inline-start:var(--rt-space-4)}.rt-date-panel__tabs{align-self:center}.rt-date-panel__time-group{display:flex;flex-direction:column;gap:var(--rt-space-2)}.rt-date-panel__time-title{padding:var(--rt-space-1) 0;color:var(--rt-color-text-muted);font-size:var(--rt-text-xs);text-align:center}.rt-date-panel__lead{margin-inline-end:auto}.rt-date-panel__value{align-self:center;color:var(--rt-color-text-muted);font-size:var(--rt-text-sm);margin-inline-end:auto}.rt-date-panel__column{position:relative;display:flex;flex-direction:column;gap:var(--rt-space-0-5);max-block-size:var(--rt-date-panel-column-height);overflow-y:auto;overscroll-behavior:contain;scrollbar-width:thin}.rt-date-panel__cell{flex:0 0 auto;padding:0 var(--rt-space-2);border:none;border-radius:var(--rt-date-panel-cell-radius);background:none;color:var(--rt-color-text-primary);cursor:pointer;font:inherit;font-size:var(--rt-text-sm);font-variant-numeric:tabular-nums;min-block-size:var(--rt-date-panel-cell-size);min-inline-size:var(--rt-control-height-md)}.rt-date-panel__cell:hover:not(:disabled,[aria-pressed=true]){background:var(--rt-color-bg-subtle)}.rt-date-panel__cell:focus-visible{outline:var(--rt-focus-ring-width) solid var(--rt-focus-ring-color);outline-offset:var(--rt-focus-ring-offset)}.rt-date-panel__cell[data-current]:not([aria-pressed=true]){box-shadow:var(--rt-date-panel-current-ring)}.rt-date-panel__cell[aria-pressed=true]{background:var(--rt-color-action-primary);color:var(--rt-color-action-on-primary)}.rt-date-panel__cell:disabled{color:var(--rt-color-text-muted);cursor:not-allowed;opacity:.45}.rt-date-panel__column .rt-date-panel__cell{min-inline-size:calc(var(--rt-size-10) * 1.5);padding-inline:var(--rt-space-4) 0;text-align:start}.rt-date-panel__column .rt-date-panel__cell[aria-pressed=true]{background:var(--rt-color-action-primary-subtle);color:var(--rt-color-text-primary);font-weight:var(--rt-font-weight-semibold)}.rt-date-panel__footer{display:flex;justify-content:flex-end;padding-top:var(--rt-space-2);border-top:var(--rt-date-panel-divider-width) solid var(--rt-color-border-subtle);gap:var(--rt-space-2)}.rt-date-panel:not(.rt-date-panel--with-time) .rt-date-panel__footer{justify-content:center}.rt-date-panel--sheet{--rt-date-panel-cell-size: calc(var(--rt-size-10) + var(--rt-size-1));padding-inline:var(--rt-space-5)}.rt-date-panel--sheet .rt-date-panel__calendar{--rt-calendar-day-size: var(--rt-date-panel-cell-size)}.rt-date-panel--sheet .rt-date-panel__body{flex-direction:column;align-items:stretch}.rt-date-panel--sheet .rt-date-panel__calendar,.rt-date-panel--sheet .rt-date-panel__months{min-inline-size:0}.rt-date-panel--sheet .rt-date-panel__time{justify-content:center}.rt-date-panel--sheet .rt-date-panel__time-group{flex:1 1 0}}\n"]
630
760
  }]
631
761
  }],
632
762
  ctorParameters: () => [],
@@ -683,6 +813,14 @@ i0.ɵɵngDeclareClassMetadata({
683
813
  required: false
684
814
  }]
685
815
  }],
816
+ isTodayButtonShown: [{
817
+ type: i0.Input,
818
+ args: [{
819
+ isSignal: true,
820
+ alias: "isTodayButtonShown",
821
+ required: false
822
+ }]
823
+ }],
686
824
  now: [{
687
825
  type: i0.Input,
688
826
  args: [{
@@ -701,90 +839,6 @@ i0.ɵɵngDeclareClassMetadata({
701
839
  }]
702
840
  }
703
841
  });
704
- const SAMPLE_DAY = new Date(2026, 0, 31);
705
- const DEFAULT_LAYOUT = {
706
- order: [
707
- "day",
708
- "month",
709
- "year"
710
- ],
711
- separator: "."
712
- };
713
- const YEAR_LEN = 4;
714
- const PART_MAX_LEN = 2;
715
- const DAY_GROUPS = 3;
716
- const TIME_GROUPS = 2;
717
- const TEXT_RE = /^[\d\s.,/:\-T]+$/;
718
- function isDatePart(type) {
719
- return type === "day" || type === "month" || type === "year";
720
- }
721
- function dayText(day, layout) {
722
- const [year, month, date] = day.split("-");
723
- const parts = {
724
- day: date,
725
- month,
726
- year
727
- };
728
- return layout.order.map((part) => parts[part]).join(layout.separator);
729
- }
730
- function readDay(groups, layout) {
731
- const parts = {};
732
- layout.order.forEach((part, index) => {
733
- parts[part] = groups[index];
734
- });
735
- const { day, month, year } = parts;
736
- if (day === void 0 || month === void 0 || year?.length !== YEAR_LEN) return null;
737
- if (day.length > PART_MAX_LEN || month.length > PART_MAX_LEN) return null;
738
- return `${year}-${month.padStart(PART_MAX_LEN, "0")}-${day.padStart(PART_MAX_LEN, "0")}`;
739
- }
740
- function readTime(groups) {
741
- if (groups.length !== TIME_GROUPS) return null;
742
- const [hour, minute] = groups;
743
- if (minute.length !== PART_MAX_LEN || hour.length > PART_MAX_LEN) return null;
744
- return `${hour.padStart(PART_MAX_LEN, "0")}:${minute}`;
745
- }
746
- function readGroups(groups, type, layout) {
747
- if (type === "time") return readTime(groups);
748
- if (type === "date") return groups.length === DAY_GROUPS ? readDay(groups, layout) : null;
749
- if (groups.length !== 5) return null;
750
- const day = readDay(groups.slice(0, DAY_GROUPS), layout);
751
- const time = readTime(groups.slice(DAY_GROUPS));
752
- return day === null || time === null ? null : `${day}T${time}`;
753
- }
754
- function rtDateLayout(locale) {
755
- const parts = new Intl.DateTimeFormat(locale, {
756
- day: "2-digit",
757
- month: "2-digit",
758
- year: "numeric"
759
- }).formatToParts(SAMPLE_DAY);
760
- const order = parts.map((part) => part.type).filter((type) => isDatePart(type));
761
- const separator = parts.find((part) => part.type === "literal")?.value.trim() ?? "";
762
- if (order.length !== DAY_GROUPS || separator === "") return DEFAULT_LAYOUT;
763
- return {
764
- order,
765
- separator
766
- };
767
- }
768
- function rtDateText(value, type, layout) {
769
- if (type === "time" || rtDateRead(value, type) === null) return value;
770
- if (type === "date") return dayText(value, layout);
771
- const [day, time] = value.split("T");
772
- return `${dayText(day, layout)} ${time}`;
773
- }
774
- function rtDateShape(type, layout, letters) {
775
- const time = `${letters.hour}:${letters.minute}`;
776
- if (type === "time") return time;
777
- const day = layout.order.map((part) => letters[part]).join(layout.separator);
778
- return type === "date" ? day : `${day} ${time}`;
779
- }
780
- function rtDateParse(text, type, layout) {
781
- const iso = rtDateRead(text, type);
782
- if (iso !== null) return iso;
783
- const value = text.trim();
784
- if (!TEXT_RE.test(value)) return null;
785
- const candidate = readGroups(value.match(/\d+/g) ?? [], type, layout);
786
- return candidate === null ? null : rtDateRead(candidate, type);
787
- }
788
842
  const BEM_BLOCK = "rt-date-picker";
789
843
  var RtDatePickerComponent = class RtDatePickerComponent extends RtFormControlBase {
790
844
  constructor() {
@@ -1005,6 +1059,7 @@ var RtDatePickerComponent = class RtDatePickerComponent extends RtFormControlBas
1005
1059
  "max",
1006
1060
  "minuteStep",
1007
1061
  "sheet",
1062
+ "isTodayButtonShown",
1008
1063
  "now"
1009
1064
  ],
1010
1065
  outputs: ["picked", "closed"]
@@ -1173,6 +1228,6 @@ i0.ɵɵngDeclareClassMetadata({
1173
1228
  }]
1174
1229
  }
1175
1230
  });
1176
- export { RT_DATE_YEAR_SPAN, RtDatePickerComponent, rtDateAddMonths, rtDateCanPage, rtDateCanPageYears, rtDateFirstDay, rtDateGridKey, rtDateInBounds, rtDateLayout, rtDateMonth, rtDateMonths, rtDateNow, rtDateParse, rtDateRead, rtDateShape, rtDateSplit, rtDateText, rtDateTime, rtDateTimeColumns, rtDateWeekdays, rtDateWrite, rtDateYearSpanStart, rtDateYears };
1231
+ export { RT_DATE_YEAR_SPAN, RtDatePanelComponent, RtDatePickerComponent, rtDateAddMonths, rtDateCanPage, rtDateCanPageYears, rtDateFirstDay, rtDateGridKey, rtDateInBounds, rtDateLayout, rtDateMonth, rtDateMonths, rtDateNow, rtDatePanelMonth, rtDateParse, rtDateRead, rtDateShape, rtDateSplit, rtDateText, rtDateTime, rtDateTimeColumns, rtDateWeekdays, rtDateWrite, rtDateYearSpanStart, rtDateYears };
1177
1232
 
1178
1233
  //# sourceMappingURL=rt-tools-ui-kit-v2-date-picker.mjs.map